feat(wiki): 異常目錄頁改走專用存取庫,並修正目錄列連結恆空 #73

Merged
admin merged 1 commits from feat/wiki-contents-repo/main into develop 2026-09-02 04:20:19 +00:00
Member

What:ERROR_CONTENTS 改由 wiki-repo CONTENTS 解析,ERROR_{HASH} 仍走
wiki-repo ERROR,兩者是兩個不同的存取庫。目錄列的連結改用 wiki-url 的絕對網址。
註解掃描的頁面編號樣式補上 40 碼與 H 加 7 碼兩種形狀。

Why:目錄列的網址原本在異常頁寫入之前就取,而頁名的雜湊帶時間戳、每次都是全新頁,
那時查一定是 404,又被吞掉,所以那一格一直都是空的。註解掃描原本只收 8 碼純十六進位,
舊演算法有十三個首碼會改寫成 H 開頭,等於對絕大多數舊頁編號漏偵測。

How:降級語意分兩層——異常頁的存取庫解不出來就整支安靜降級,只有目錄頁解不出來就
只寫異常頁、跳過索引,兩種都維持 exit 0。「只有 exit 4 才准建新頁、7 與 8 一律中止」
那段原樣保留,那是防止把金鑰失效讀成頁面不存在、拿範本蓋掉整頁既有列。

Who:jsc-hooks

這一批的範圍

跨 8 個存取庫的同一份異動需求:ask、assist、cli、gitea、hooks、log、meta、sdlc。

兩條規則變更:

  1. 目錄頁進專用存取庫。CONTENTS 成為第 15 種頁面類型,解析鏈是 JSC_WIKI_REPO_CONTENTS 到 JSC_WIKI_REPO,刻意不退回型別變數。14 個目錄頁從此同住一庫,內容頁仍各走自己的型別。兩者不再同庫,跨庫沒有 wiki 連結語法,所以連結一律改 gitea.sh wiki-url 的絕對網址。
  2. HASH 去除截短與 H 前綴。hash-id 只保留大寫轉換,輸出完整 40 碼。原本的 H 前綴會命中 16 個首碼裡的 13 個、還丟掉第 8 碼,把有效熵壓到 28 位元,而且全庫查不到任何理由紀錄。頁名樣式仍收 H 加 7 碼的舊頁,遷移期間讀得到舊頁。

相依與合併順序

jsc-gitea 提供三支新腳本(page-name.sh、wiki-contents.sh、migrate-wiki.sh)與 wiki-delete 子命令,其餘七個存取庫的流程都呼叫它們,所以 jsc-gitea 要先合併。

驗證

八個存取庫全部通過:lint-scripts.sh、lint-frontmatter.sh、check-behaviors.sh、ste100-lint.sh 各退出 0(jsc-ask 沒有 tools/ 與 hooks/,lint-scripts.sh 退 3,如實記錄)。另外 gitea/tools/check-wiki-rules.sh 與新增的 meta/tools/check-page-name.sh 都退出 0,JSC_READONLY=1 的 wire-cli.sh smoke codex 退出 0 且行數與腳本自己的斷言相符。

三支稽核代理人逐項對照準則的審核檢查清單,翻出的問題都已修並重驗,其中四項會實際咬人:H 開頭的舊頁名被判為不合法、遷移腳本寫目的地前沒先讀、建新頁會把範本示範列留在正式頁上、異常目錄列的網址恆為空字串。

部署前要先做的事

Gitea 上還沒有目錄頁專用的存取庫(knowledges 底下目前只有各型別的庫)。合併後要先建好那個庫、設好 JSC_WIKI_REPO_CONTENTS,再用 gitea/tools/migrate-wiki.sh 搬既有頁。那支預設只印對照表,--apply 才會動,而且是先寫新頁、確認寫成、才刪舊頁;反推不到來源鍵的頁只列成孤兒,不猜。

What:ERROR_CONTENTS 改由 wiki-repo CONTENTS 解析,ERROR_{HASH} 仍走 wiki-repo ERROR,兩者是兩個不同的存取庫。目錄列的連結改用 wiki-url 的絕對網址。 註解掃描的頁面編號樣式補上 40 碼與 H 加 7 碼兩種形狀。 Why:目錄列的網址原本在異常頁寫入之前就取,而頁名的雜湊帶時間戳、每次都是全新頁, 那時查一定是 404,又被吞掉,所以那一格一直都是空的。註解掃描原本只收 8 碼純十六進位, 舊演算法有十三個首碼會改寫成 H 開頭,等於對絕大多數舊頁編號漏偵測。 How:降級語意分兩層——異常頁的存取庫解不出來就整支安靜降級,只有目錄頁解不出來就 只寫異常頁、跳過索引,兩種都維持 exit 0。「只有 exit 4 才准建新頁、7 與 8 一律中止」 那段原樣保留,那是防止把金鑰失效讀成頁面不存在、拿範本蓋掉整頁既有列。 Who:jsc-hooks ## 這一批的範圍 跨 8 個存取庫的同一份異動需求:`ask`、`assist`、`cli`、`gitea`、`hooks`、`log`、`meta`、`sdlc`。 兩條規則變更: 1. **目錄頁進專用存取庫**。`CONTENTS` 成為第 15 種頁面類型,解析鏈是 `JSC_WIKI_REPO_CONTENTS` 到 `JSC_WIKI_REPO`,刻意不退回型別變數。14 個目錄頁從此同住一庫,內容頁仍各走自己的型別。兩者不再同庫,跨庫沒有 wiki 連結語法,所以連結一律改 `gitea.sh wiki-url` 的絕對網址。 2. **HASH 去除截短與 H 前綴**。`hash-id` 只保留大寫轉換,輸出完整 40 碼。原本的 H 前綴會命中 16 個首碼裡的 13 個、還丟掉第 8 碼,把有效熵壓到 28 位元,而且全庫查不到任何理由紀錄。頁名樣式仍收 `H` 加 7 碼的舊頁,遷移期間讀得到舊頁。 ## 相依與合併順序 `jsc-gitea` 提供三支新腳本(`page-name.sh`、`wiki-contents.sh`、`migrate-wiki.sh`)與 `wiki-delete` 子命令,其餘七個存取庫的流程都呼叫它們,所以 **`jsc-gitea` 要先合併**。 ## 驗證 八個存取庫全部通過:`lint-scripts.sh`、`lint-frontmatter.sh`、`check-behaviors.sh`、`ste100-lint.sh` 各退出 0(`jsc-ask` 沒有 `tools/` 與 `hooks/`,`lint-scripts.sh` 退 3,如實記錄)。另外 `gitea/tools/check-wiki-rules.sh` 與新增的 `meta/tools/check-page-name.sh` 都退出 0,`JSC_READONLY=1` 的 `wire-cli.sh smoke codex` 退出 0 且行數與腳本自己的斷言相符。 三支稽核代理人逐項對照準則的審核檢查清單,翻出的問題都已修並重驗,其中四項會實際咬人:`H` 開頭的舊頁名被判為不合法、遷移腳本寫目的地前沒先讀、建新頁會把範本示範列留在正式頁上、異常目錄列的網址恆為空字串。 ## 部署前要先做的事 Gitea 上還沒有目錄頁專用的存取庫(`knowledges` 底下目前只有各型別的庫)。合併後要先建好那個庫、設好 `JSC_WIKI_REPO_CONTENTS`,再用 `gitea/tools/migrate-wiki.sh` 搬既有頁。那支預設只印對照表,`--apply` 才會動,而且是先寫新頁、確認寫成、才刪舊頁;反推不到來源鍵的頁只列成孤兒,不猜。
jiantw83 added 1 commit 2026-09-02 03:31:18 +00:00
What:ERROR_CONTENTS 改由 wiki-repo CONTENTS 解析,ERROR_{HASH} 仍走
wiki-repo ERROR,兩者是兩個不同的存取庫。目錄列的連結改用 wiki-url 的絕對網址。
註解掃描的頁面編號樣式補上 40 碼與 H 加 7 碼兩種形狀。

Why:目錄列的網址原本在異常頁寫入之前就取,而頁名的雜湊帶時間戳、每次都是全新頁,
那時查一定是 404,又被吞掉,所以那一格一直都是空的。註解掃描原本只收 8 碼純十六進位,
舊演算法有十三個首碼會改寫成 H 開頭,等於對絕大多數舊頁編號漏偵測。

How:降級語意分兩層——異常頁的存取庫解不出來就整支安靜降級,只有目錄頁解不出來就
只寫異常頁、跳過索引,兩種都維持 exit 0。「只有 exit 4 才准建新頁、7 與 8 一律中止」
那段原樣保留,那是防止把金鑰失效讀成頁面不存在、拿範本蓋掉整頁既有列。

Who:jsc-hooks
jiantw83 force-pushed feat/wiki-contents-repo/main from d105f4c1da to f4871afd19 2026-09-02 03:31:18 +00:00 Compare
admin merged commit 2a6097528a into develop 2026-09-02 04:20:19 +00:00
admin deleted branch feat/wiki-contents-repo/main 2026-09-02 04:20:19 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Reference: plugins/hooks#73