逐支點名改成從接線那一邊抽名單,五支 CLI 都驗得到 #91

Merged
admin merged 1 commits from fix/per-hook-inventory-every-cli into develop 2026-09-07 04:43:50 +00:00
Member

這一批修什麼

第十支 hook 上線之後,五支 CLI 的接線盤點只有兩支點名得出它。

CLI 原本逐支點名的範圍
claude 十支全點
kiro 十支全點
codex 只點 restart-gate、version-guard
antigravity 只點那兩支
copilot 一支都沒點,只驗「hooks 鍵在」

而 smoke 那一行對每一支 CLI 都寫著「十支 hook 的每個接線模式都跑得完」。兩句話都是真的,範圍不同——smoke 跑的是十支腳本的每個模式,盤點驗的是那一支 CLI 的接線內容——但讀的人分不出來,拿這份輸出驗收接線就會把沒列到的當成沒接。

根因是兩份手寫清單

「接線寫了哪幾支」在接線那一段,「盤點驗了哪幾支」在盤點那一段。加一支 hook 要記得回來改第二個地方,而漏改的那一天不會有任何東西叫。

改成從接線那一邊實際會寫出去的內容抽名字:

  • codex:它讀的是從 hooks/hooks.json 推導出來的複本,所以名單取自來源那一份,十支全驗。推導漏掉一支時,盤點說得出漏了哪一支。
  • copilot、antigravity:只接得上兩道閘門(那兩支 CLI 沒有其餘幾支要掛的事件),名單取自各自的條目產生函式。
  • copilot 原本只驗鍵在不在——鍵在而某一支條目掉了照樣回 present,那正是這一整支腳本一直在防的形態。

codex 接線後的驗證也一起改:原本只確認那兩道閘門接上,現在逐支對照來源。推導是整份複製再改 matcher,漏掉任何一支都算推導壞了。

實測

測什麼 結果
來源檔抽出來的名單 十支,逐字對得上
status codex 十項逐支點名,含 codex-session-reminder present
status copilot restart-gate、version-guard 各一項,present
status antigravity 同上
故意拿掉 session-reminder 的複本 逐支對照抓到缺項
smoke claude status=ok、lines 140,條數沒被這一批動到
檢核 lint-scripts 21 支、ste100-lint 0,無 BOM 無替代字元

邊界

copilot 與 antigravity 接不到第十支,這一批沒有改變那件事。 那兩支沒有工作階段開始事件,session-timer.sh 的處境相同。這一批要的是「盤點說得出它為什麼不在」,而不是把它硬掛上去。

那兩支的名單來自條目產生函式,所以往後那兩支真的多接一支 hook,盤點會自動跟著驗。

## 這一批修什麼 第十支 hook 上線之後,五支 CLI 的接線盤點只有兩支點名得出它。 | CLI | 原本逐支點名的範圍 | | --- | --- | | claude | 十支全點 | | kiro | 十支全點 | | codex | 只點 `restart-gate`、`version-guard` | | antigravity | 只點那兩支 | | copilot | **一支都沒點**,只驗「`hooks` 鍵在」 | 而 smoke 那一行對每一支 CLI 都寫著「十支 hook 的每個接線模式都跑得完」。**兩句話都是真的,範圍不同**——smoke 跑的是十支腳本的每個模式,盤點驗的是那一支 CLI 的接線內容——但讀的人分不出來,拿這份輸出驗收接線就會把沒列到的當成沒接。 ## 根因是兩份手寫清單 「接線寫了哪幾支」在接線那一段,「盤點驗了哪幾支」在盤點那一段。加一支 hook 要記得回來改第二個地方,**而漏改的那一天不會有任何東西叫**。 改成從接線那一邊實際會寫出去的內容抽名字: - **codex**:它讀的是從 `hooks/hooks.json` 推導出來的複本,所以名單取自來源那一份,十支全驗。推導漏掉一支時,盤點說得出漏了哪一支。 - **copilot、antigravity**:只接得上兩道閘門(那兩支 CLI 沒有其餘幾支要掛的事件),名單取自各自的條目產生函式。 - **copilot** 原本只驗鍵在不在——鍵在而某一支條目掉了照樣回 `present`,那正是這一整支腳本一直在防的形態。 codex 接線後的驗證也一起改:原本只確認那兩道閘門接上,現在逐支對照來源。推導是整份複製再改 matcher,漏掉任何一支都算推導壞了。 ## 實測 | 測什麼 | 結果 | | --- | --- | | 來源檔抽出來的名單 | 十支,逐字對得上 | | `status codex` | 十項逐支點名,含 `codex-session-reminder present` | | `status copilot` | `restart-gate`、`version-guard` 各一項,`present` | | `status antigravity` | 同上 | | 故意拿掉 `session-reminder` 的複本 | 逐支對照抓到缺項 | | `smoke claude` | `status=ok`、`lines 140`,條數沒被這一批動到 | | 檢核 | `lint-scripts` 21 支、`ste100-lint` 0,無 BOM 無替代字元 | ## 邊界 **copilot 與 antigravity 接不到第十支,這一批沒有改變那件事。** 那兩支沒有工作階段開始事件,`session-timer.sh` 的處境相同。這一批要的是「盤點說得出它為什麼不在」,而不是把它硬掛上去。 那兩支的名單來自條目產生函式,所以往後那兩支真的多接一支 hook,盤點會自動跟著驗。
jiantw83 added 1 commit 2026-09-07 04:39:31 +00:00
第十支 hook 上線之後實測發現:claude 與 kiro 的盤點點名得出它,codex、
copilot、antigravity 三段的盤點卻各自只驗自己寫死的那兩支。那三支的接線
盤點看不出第十支在不在,而 smoke 那一行還自稱「十支 hook」——兩句話都是
真的,範圍不同,讀的人分不出來。

根因是「接線寫了哪幾支」與「盤點驗了哪幾支」本來是兩份手寫清單。加一支
hook 要記得回來改第二個地方,而漏改的那一天不會有任何東西叫。

改成從接線那一邊實際會寫出去的內容抽名字,兩邊只留一份清單:

- codex 讀的是從 hooks/hooks.json 推導出來的複本,所以名單取自來源那一份,
  十支全驗;推導漏掉一支時,盤點說得出漏了哪一支。
- copilot 與 antigravity 只接得上兩道閘門,名單取自各自的條目產生函式。
- copilot 原本一支 hook 都沒點名,只驗「hooks 鍵在」——鍵在而某一支條目掉了
  照樣回 present,那正是這一整支腳本一直在防的形態。

codex 接線後的驗證也一起改:原本只確認那兩道閘門有接上,現在逐支對照來源。
推導是整份複製再改 matcher,漏掉任何一支都算推導壞了。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
admin merged commit 7a569f4e46 into develop 2026-09-07 04:43:50 +00:00
admin deleted branch fix/per-hook-inventory-every-cli 2026-09-07 04:43:50 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/hooks#91