diff --git a/docs/hooks-inventory.md b/docs/hooks-inventory.md index 87cb217..991e3b0 100644 --- a/docs/hooks-inventory.md +++ b/docs/hooks-inventory.md @@ -203,10 +203,44 @@ $ comm -13 /tmp/inv_fs.txt /tmp/inv_table.txt (無輸出) ``` -📌 **標頭的 48/59 是對的,錯的是表格**——這正是這頁最容易壞的方式: -數字改了,人話沒補。**數字對不代表這頁沒漏**,兩組指令都要跑。 +🔴 **`^\| \`` 這個錨點不能拿掉**——它的意思是「**這一行的第一欄就是這支閘**」, +也就是「表格真的列了它」。把錨點拿掉、改成抓全頁所有反引號裡的 `*.sh`, +反向那半會吐出 **3 個假警報**(2026-08-27 實跑): -**這次順便抓到的另一個落差**:`.claude-plugin/plugin.json` 的說明文字寫「42 支機械閘(52 條註冊)」, +``` +claim-verify-police.sh ← 出現在「已於 ISEP#60 移除」那段**移除紀錄**裡 +subagent-claim-worksheet.sh ← 同上 +github-arm.sh ← 它在 `scripts/`,不在 `hooks/`;是 github-contact-guard + 那一列裡告訴你「怎麼解鎖」的逃生口 +``` + +**三個都不是幽靈,三個都不該刪**:刪掉前兩個等於刪掉「G 組為什麼是空的」這段歷史, +刪掉第三個等於讓那一列不再告訴你怎麼過閘。 +⇒ **0 次正確攔截、3 次誤攔**——照這個訊號去改,會把好東西改壞。 + +那「頁面上出現了一個根本不存在的檔名」怎麼辦?**那要另外一格量,而且判準不是文字是事實**: + +``` +# C. 頁面提到的每個 *.sh,現在存在,或者 git 歷史裡存在過 +$ for n in $(grep -oE '`[a-zA-Z0-9._-]+\.sh`' docs/hooks-inventory.md | tr -d '`' | sort -u); do + [ -f "hooks/$n" ] || [ -f "scripts/$n" ] && continue + [ -n "$(git log --all --oneline --diff-filter=AD -- "hooks/$n" "scripts/$n")" ] && continue + echo "$n" + done +(無輸出) +``` + +**「現在沒有、但曾經有」=歷史,合法;「從來沒有過」=打錯字或憑空捏造,才是幽靈。** +這一格問的是 git,不是問這頁的用字,所以它不會因為誰換個寫法就失效。 + +📌 **三格都要跑,而且它們量的是不同東西**: +A1 缺人話、A2 表格有幽靈、C 全頁有幽靈。 +**標頭的 48/59 對不代表這頁沒漏**——補進 2 支真的、同時留著 2 支假的,數字照樣湊得到 48。 +**數量相等不等於集合相等**,所以驗的一律是集合(`comm`),不是 `wc -l`。 + +**這次順便抓到的另一個落差**(🕐 **這一段是 2026-08-20 的快照,裡面每個數字都是那天的,不是現況**—— +留著是因為它是「兩份文件的數字不會自己跟上」這個病的第一個案例;現況數字看本頁標頭): +`.claude-plugin/plugin.json` 的說明文字寫「42 支機械閘(52 條註冊)」, `README.md` 也寫「42 支 + `hooks.json`」「共 52 條註冊」——但實測是 **43 支檔案、53 條註冊**。 差 1 支、差 1 條,猜測是今天(2026-08-20)新增的 `leo21c-write-guard.sh`/`release-tag-guard.sh`/ `ticket-api-bypass-guard.sh` 這批(檔頭日期都是今天)加了之後,兩份文件的數字沒有跟著更新。 @@ -271,6 +305,6 @@ $ comm -13 /tmp/inv_fs.txt /tmp/inv_table.txt ## 這份表怎麼跟實況對帳(半年後怎麼發現漂移) -1. **有沒有新閘沒被收進這張表**:跑本文「落差偵測」段落**第二組** `comm` 指令(`inv_fs` vs `inv_table`),比對 `hooks/*.sh` 的檔名清單跟這張表列出的閘名清單。**不是第一組**——第一組比的是 `hooks.json`,只驗證有沒有註冊,驗不了有沒有寫進這張人話表。2026-08-27 漏掉的那兩列,第一組是綠的、第二組才紅。 +1. **有沒有新閘沒被收進這張表**:跑本文「落差偵測」段落**第二組**(`inv_fs` vs `inv_table` 的兩行 `comm`)**加第三格 C**,比對 `hooks/*.sh` 的檔名清單跟這張表列出的閘名清單。**不是第一組**——第一組比的是 `hooks.json`,只驗證有沒有註冊,驗不了有沒有寫進這張人話表。2026-08-27 漏掉的那兩列,第一組是綠的、第二組才紅。**抓表格列的那組 `grep` 一定要帶 `^\| \`` 錨點**,理由與拿掉之後會冒出的 3 個假警報,就寫在那一段裡。 2. **有沒有閘的行為跟這裡寫的不一樣了**:抽幾支重新讀一次源碼,跟這裡的「一句話」對一遍——就是本文「抽驗 5 支」做的事,可以照同樣方法定期重做。 3. **`.claude-plugin/plugin.json` 與 `README.md` 的數字**:這兩處各自寫了一次「幾支、幾條註冊」,前面已經抓到一次對不上(42/52 vs 實際 43/53)。這兩個數字沒有機制保證跟著 `hooks/` 目錄自動更新,是本表發現的第一個具體漂移案例。