版本前置檢查新增相依落後擋人、新增技能行為清單 #54
1 Participants
Notifications
Due Date
No due date set.
Blocks
#55 收攏技能行為清單與版本前置檢查相依擋人改動
plugins/hooks
Reference: plugins/hooks#54
Reference in New Issue
Block a user
摘要
jsc.requires宣告的相依 plugin 版本落後時,擋下該次技能呼叫並提示怎麼補。同時補上技能行為清單,當作技能驗證的比對基準。變更內容
references/behaviors.mdhooks/version-guard.shinstall_path與requires_pairs兩支函式,讀installPath底下那份plugin.json的jsc.requires,逐項比對相依 plugin 的本機實際載入版本,有一項落後就以 exit 2 擋下。檔頭改寫,把兩種擋人情況、四種新的 fail-open 與豁免清單共用的理由都寫進去tools/wire-cli.shHOME裡。新增計數器smoke_n_vg與預期值SMOKE_EXPECT_VG,接進原本的自我斷言與lines行數比對,判定路徑增減時只改腳本裡的預期值README.mdversion-guard.sh那一列改寫成擋兩種情況,wire-cli.sh那一列補一句新的沙箱說明。斷言條數不寫死,散文一律引用 smoke 自己印的lines那一行plugin.json.claude-plugin/plugin.json.codex-plugin/plugin.json設計重點
check-requires.sh。兩個理由:hook 要專屬留在 jsc-hooks,不可散落到別的 domain;而且 jsc-cli 已經宣告相依 jsc-hooks,反向呼叫會做出循環相依。部署那端照樣更新、只回報,阻擋落在這支 hook。jsc.requires、讀不到某一項相依的本機載入版本。五支 CLI 只有 claude 讀得到本機載入版本,任何一條改成擋人,另外四支就會被整批鎖死。沒有證據不等於落後。installPath底下那份plugin.json,不拿installed_plugins.json的version欄位當備援。註冊值可能比實際載入的版本新,拿它比對會放過真正被載入的舊版。jsc.requires的最後一個鍵也要解得到。lines那一行。測試結果
sh -n /root/plugins/hooks/hooks/version-guard.sh:exit 0。sh -n /root/plugins/hooks/tools/wire-cli.sh:exit 0。bash -n /root/plugins/hooks/hooks/version-guard.sh:exit 0。bash -n /root/plugins/hooks/tools/wire-cli.sh:exit 0。sh /root/plugins/meta/tools/lint-scripts.sh /root/plugins/hooks:exit 0。輸出「腳本檢查通過:15 支(語法、可執行、結束碼宣告),其中 1 支判定為函式庫」,被豁免的那一支是hooks/lib.sh。sh /root/plugins/meta/tools/check-behaviors.sh /root/plugins/hooks:exit 0。輸出「行為清單檢查通過:/root/plugins/hooks/references/behaviors.md 對上 2 支技能,五個欄位齊全」。sh /root/plugins/meta/tools/ste100-lint.sh對hooks/version-guard.sh、tools/wire-cli.sh、references/behaviors.md、README.md四個檔案:exit 0,一項都沒命中。sh /root/plugins/hooks/tools/wire-cli.sh smoke這一輪沒有跑,原因是它不是整支跑在沙箱裡。讀過原始碼確認:新加的相依版本那 13 條斷言確實跑在mktemp -d建出來的暫時HOME裡,工作包、重啟閘門、寫入閘門與模型來源那幾類也各自用暫時的$JSC_HOME;但是前段smoke_one那 17 條(第 805 行到第 814 行、第 963 行到第 975 行)用的是這台機器真正的$JSC_HOME,其中session-timer.sh mark會覆寫$JSC_HOME/sessions/{session}.end,動到目前工作階段的計時狀態,腳本自己在第 971 行到第 972 行也註明那一輪用的是真正的$JSC_HOME。它不會動到任何 CLI 的設定檔或 hook 接線,那是wire與purge才會做的事,但它仍然不是唯讀,所以這一輪不跑。請在乾淨的容器或拋棄式環境裡補跑一次,確認status=ok而且lines是 77 行。前置 Push Request