feat(wiki): 目錄頁專用存取庫入準則,skill-check 加入優化建議流程

What:準則的環境變數表與命名總表加入 JSC_WIKI_REPO_CONTENTS 與目錄頁專用存取庫
一節,HASH 規則改為完整 40 碼。skill-check 的 Group 3 先讀上一輪決議,建議表加上
決議與決議日期兩欄,新增步驟 8 把稽核結果寫進 SKILLSET 頁。新增 check-page-name.sh
與兩份 SKILLSET 範本。

Why:優化建議原本每輪產出後就散掉,決議為延後的項目下一輪會重新掃、重新問一次,
正是 skill-check 自己第三個面向點名的毛病。SKILLSET_CONTENTS 是 14 個目錄頁裡
唯一沒有範本的,四支技能都被要求寫它,卻沒有欄位定義可套。

How:Group 1 補進三支現成但沒人呼叫的檢查腳本——ste100-lint.sh、check-wiki-rules.sh
與新增的 check-page-name.sh。讀不到上一輪決議時只停掉 Group 3,不再中止整輪:那兩組
完全不碰 wiki,金鑰失效就會鎖死整組技能唯一的稽核路徑。另外四支 meta 技能原本把目錄頁
寫進 SKILLSET 存取庫,一併改走 CONTENTS。
This commit is contained in:
2026-09-02 11:02:48 +08:00
parent e8539ecfb2
commit f13724cb79
14 changed files with 505 additions and 60 deletions
+38
View File
@@ -0,0 +1,38 @@
# 技能組異動目錄
> 由 `jsc-meta` 的 `skill-new`、`skill-update`、`skill-delete`、`skillset-update`、`skill-check` 共同維護。這是目錄頁 `SKILLSET_CONTENTS`。
> 一列代表一個 domain 存取庫。技能組有幾個 domain 被改過,就有幾列。
> 本頁落在 `JSC_WIKI_REPO_CONTENTS` 解出來的存取庫,不是內容頁那一個。解析鏈是 `JSC_WIKI_REPO_CONTENTS` → `JSC_WIKI_REPO` → exit 3,中間不退回 `JSC_WIKI_REPO_SKILLSET`。
> 寫入一律用 `jsc-gitea/tools/wiki-contents.sh upsert SKILLSET 2 "{owner}/{repo}" {列檔} templates/skillset-contents.md`:`<TYPE>` 填 `SKILLSET`,鍵欄填數字 `2`,也就是「存取庫」那一欄。
> 它讀回整頁、換掉鍵欄相符的那一列、找不到才附加,最後整頁寫回。不得手工改目錄頁。
> `SKILLSET_{HASH}` 的 `{HASH}` 交給 `jsc-gitea/tools/hash-id` 產生,雜湊來源見 `jsc-meta/references/guidelines.md` 的「Wiki 頁命名總表」。
| 異動頁 | 存取庫 | 最近異動 | 異動次數 | 最後更新 |
| --- | --- | --- | ---: | --- |
| [SKILLSET_{HASH}]({GITEA_HOST}/{owner}/{repo}/wiki/SKILLSET_{HASH}) | {owner}/{repo} | {一句話寫這一次改了什麼} | {n} | {yyyy-MM-dd HH:mm} |
## 欄位說明
| 欄位 | 內容 |
| --- | --- |
| 異動頁 | 指向 `SKILLSET_{HASH}` 的**絕對網址**,格式 `{GITEA_HOST}/{owner}/{repo}/wiki/SKILLSET_{HASH}`。`{owner}/{repo}` 是內容頁那一個存取庫 |
| 存取庫 | 被改動的 domain 存取庫 `{owner}/{repo}`,也就是這一頁的雜湊來源 |
| 最近異動 | 最後一次異動的一句話摘要,與內容頁最新一節的「異動需求」同一句 |
| 異動次數 | 該內容頁累積的節數。內容頁只附加不覆蓋,所以這個數字只會往上加 |
| 最後更新 | 最後一次寫入內容頁的時間,與那一節的日期一致 |
## 為什麼連結要用絕對網址
目錄頁與內容頁分屬不同存取庫。`[[SKILLSET_{HASH}]]` 這種同 wiki 連結解到的是目錄頁自己那個存取庫,那裡沒有這一頁,點下去是 404。
更麻煩的是它看起來像「頁沒寫成功」,實際上頁好好的,只是連結指錯地方,查的人會回去重寫一次已經寫好的頁。
## 寫入規則
- 一律走 `jsc-gitea/tools/wiki-contents.sh upsert`,鍵欄是第 2 欄「存取庫」,鍵值是 `{owner}/{repo}`。
- 那支腳本先整頁讀回來,再比對「存取庫」欄。
- 該欄相同就更新那一列,其餘欄位覆寫成本次結果。
- 找不到相同的一列,才新增一列。
- 只動自己那一列,別人的列原樣保留。
- 禁止整頁覆蓋。這一頁是全部 domain 共用的索引,覆蓋等於刪掉別的 domain 的紀錄。
- 讀不到舊內容就中止,不新增列,也不寫入。
- 先寫內容頁,成功了才回來更新這一列。目錄列指向一個寫失敗的頁,比缺一列更難查。
+43
View File
@@ -0,0 +1,43 @@
# 技能組異動 — {owner}/{repo}
> 由 `jsc-meta` 的 `skill-new`、`skill-update`、`skill-delete`、`skillset-update`、`skill-check` 共同維護。這是內容頁 `SKILLSET_{HASH}`。
> 一個 domain 存取庫一頁。雜湊來源是這個存取庫的 `{owner}/{repo}`。
> 本頁落在 `JSC_WIKI_REPO_SKILLSET` 解出來的存取庫;目錄頁 `SKILLSET_CONTENTS` 在別的存取庫,兩者不要混。
> **每次異動附加一節,不覆蓋舊紀錄。** 要看一支技能改過幾次,就在這一頁上翻。
> 節的排列由新到舊,最新那一次放最上面。
## {yyyy-MM-dd HH:mm} — {一句話寫這一次改了什麼}
| 項目 | 內容 |
| --- | --- |
| 日期 | {yyyy-MM-dd HH:mm} |
| 異動類型 | {skill-new、skill-update、skill-delete、skillset-update、skill-check 五選一} |
| 異動需求 | {一句話。與目錄頁「最近異動」欄同一句} |
| 動到的技能 | {技能名,多支用頓號隔開;一支都沒動就寫「無」} |
| 改動檔案 | {存取庫內相對路徑,一行一個;一個檔都沒動就寫「無」} |
| PR 網址 | {絕對網址;沒開 PR 就寫「無」並說明原因} |
| 部署路線判定 | {部署路線、工作樹路線二選一,附 `tools/deploy-route.sh` 的結束碼} |
| 驗證結果 | {在新的 CLI 行程裡驗證的結果,寫實際看到的行為,不寫「已驗證」三個字了事} |
### 優化建議
> 只有 `skill-check` 那一節要附這張表,其餘四支不附。
> 下一輪 `skill-check` 會先讀回這張表:「決議」欄寫著 `套用` 或 `延後` 的項目不重複掃、不重複問。
> 所以「決議」與「決議日期」兩欄不得留空,留空等於下一輪讀不懂,只好重問一次。
| 面向 | 技能 | 證據 | 建議 | 決議 | 決議日期 |
| --- | --- | --- | --- | --- | --- |
| {1 可平行化、2 可下放工具、3 重複來回、4 冗餘檢查、5 閘門時機、6 成本效率 六選一} | {技能名} | {file:line} | {一句話寫怎麼改} | {套用、延後、自訂 三選一} | {yyyy-MM-dd} |
| 欄位 | 內容 |
| --- | --- |
| 面向 | 六個優化面向之一,名稱與 `skill-check` 的面向表逐字相同 |
| 技能 | 被建議的技能,跨技能的建議一列一支 |
| 證據 | `file:line`,指得到才寫得進來 |
| 建議 | 一句話寫怎麼改。會削弱防護的建議要在這裡點名被削弱的是哪一道 |
| 決議 | 使用者當輪的決定:`套用`、`延後`、`自訂`。`自訂` 要在同一列的建議欄補上實際採用的做法 |
| 決議日期 | 做出決定那一天。決議欄寫 `延後` 的項目,下一輪照這個日期認定為已決議,照樣不重問 |
## {yyyy-MM-dd HH:mm} — {上一次異動的一句話}
(上一次的內容原樣留著,不改、不刪。)