Files
jiantw83 89463cd263 docs(wiki): 同步目錄頁條列格式的敘述與工具用法
README 的工具用法、技能行為清單、連結規則與 wiki 技能本文,全部改寫成
目錄頁的區塊格式:參數名從整列改成整個區塊、key-col 的用途縮回只給轉檔
用、補上取標題與換引言的判準,並登錄新增的驗證腳本。

文件與工具講的不是同一件事,呼叫端就會照舊敘述傳整列的表格文字進去,寫出
半表格半條列的頁面。key-col 的語意變動最容易誤解——它從「要換掉哪一欄」
變成「轉檔時哪一欄持有身分」,敘述不改就會被填成別的欄位。

目錄頁條列、內容頁維持圖表優先,這個區分在每一份文件裡都寫明,避免把改版
範圍誤讀成整個 wiki。結束碼說明一併對回工具現況。

功能範圍:目錄頁版面改版的文件同步。
2026-09-02 17:22:29 +08:00

63 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Wiki 頁與文件的連結
寫 wiki 頁、議題或存放庫文件都適用這兩條規則。連結寫錯時畫面上看不出異常,所以規則寫在這裡,不靠當下判斷。
## 規則 A:文字加連結一律寫成 `[文字](絕對網址)`
只有這一種寫法。`[[頁名]]` 與 `[[顯示文字|頁名]]` 全面取消,不再分「同存取庫」與「跨存取庫」兩種寫法。
| 情境 | 寫法 |
| --- | --- |
| 目錄頁指向內容頁(例:`PLAN_CONTENTS` → `PLAN_{HASH}`):連結寫在該筆 H2 區塊的條列裡,H2 標題本身只放頁名,不放連結 | `- 計畫頁:[PLAN_{HASH}](https://…/wiki/PLAN_…)` |
| 內容頁指向目錄頁,或指向別的型別 | `[顯示文字](絕對網址)` |
| 目錄頁之間、同型別的內容頁之間 | `[顯示文字](絕對網址)` |
| 議題、PR、存放庫檔案 | `[顯示文字](絕對網址)` |
網址一律取自 `tools/gitea.sh wiki-url {owner}/{repo} {page}`,它讀 API 回應的 `html_url`。不要自己組路徑:頁名有大小寫與編碼規則,手組的路徑看起來像對的,點下去是死的。
## 為什麼取消 `[[...]]`
三個理由,每一個都足以單獨取消它。
1. `[[...]]` 只在目前這個 wiki 內解析。跨存取庫沒有這種語法,連結會落在自己這個 wiki 的同名頁上。
2. 寫錯不會報錯。畫面上是一段普通文字或一條死連結,巡不到也修不了。
3. 目錄頁住在 CONTENTS 專用存取庫,內容頁住在自己型別的存取庫。兩種寫法並存,就得逐處判斷兩端各自解到哪一個存取庫。統一成一種,這個判斷整個消失。
另外還有一項成本:Gitea 的 markdown 渲染端點不吃 wiki 情境,`[[...]]` 會原樣輸出成字面括號。匯出成 HTML 或轉成議題時,每一條都得先換成絕對網址。一律寫絕對網址就沒有這道轉換。
搬移舊頁時 `tools/migrate-wiki.sh` 仍會改寫舊頁裡殘留的 `[[...]]`,那是清理既有內容,不是允許新寫。
## 規則 B:連結先驗證連得到,才寫進文件
寫入前,把每一個要放進頁面的連結交給 `tools/link-check.sh`。結束碼 0 才 `wiki-put`。
```
link-check.sh {網址}...
printf '%s\n' {網址}... | link-check.sh
```
每個網址印一行,三欄以 TAB 分隔:`{OK|DEAD|SKIP}<TAB>{網址}<TAB>{說明}`。
驗證方式依網址種類分流:
| 網址種類 | 驗證方式 |
| --- | --- |
| Gitea wiki 頁(`{GITEA_HOST}/{owner}/{repo}/wiki/{頁名}`) | 轉成 API `/repos/{owner}/{repo}/wiki/page/{頁名}` |
| Gitea 議題(`…/issues/{編號}`) | API `/repos/{owner}/{repo}/issues/{編號}` |
| 其他 Gitea 網址 | HTTP HEAD,帶金鑰 |
| 非 Gitea 的外部網址 | HTTP HEAD,不帶金鑰 |
結束碼:
| 碼 | 意義 | 呼叫端該做的事 |
| --- | --- | --- |
| 0 | 全部連得到 | 才可以寫入 |
| 1 | 至少一筆連不到 | 不得寫入,回報 DEAD 那幾筆 |
| 2 | 用法錯誤:一個網址都沒給 | 補上參數再呼叫 |
| 3 | 清單裡有 Gitea 網址,但 `GITEA_HOST` 未設定 | 先設定再呼叫,不得跳過驗證 |
| 7 | Gitea 認證失敗(401、403) | 停下來回報金鑰問題 |
Gitea 連結一律走 API,不看網頁狀態碼。私有存取庫的網頁網址對未登入請求一律回 404,用網頁狀態碼判斷會把好連結判成壞連結,接著整批砍掉還在的頁。
第 7 碼與第 1 碼分開的理由一樣:金鑰失效時,Gitea 對私有存取庫的回應與「頁不存在」難以分辨。兩者混用,一次金鑰過期就把整批還在的頁判成死連結,接著這些頁會被當成壞連結刪掉或改寫。