feat(sdlc-gate): 階段閘門改為能力標籤程式判定,模型不符即擋下該輪提示 #7
2 Participants
Notifications
Due Date
No due date set.
Blocks
Depends on
#8 發佈 jsc-hooks 0.0.5:SDLC 階段閘門程式化與包裝啟動器
plugins/hooks
#6 feat(SDLC 階段): 閘門改為能力標籤程式判定,分析與實作先確認分支,交接工作包優先
plugins/sdlc
Reference: plugins/hooks#7
Reference in New Issue
Block a user
變更摘要
sdlc-gate 原本有三個漏洞,使 SDLC 模型閘門完全沒有強制力:判定退回模型自評、鎖存的是「上鎖那一刻的模型」(用不合格模型起跑就把自己鎖成合格)、
check只注入提醒後exit 0(模型可以無視)。本 PR 把判定與強制力都下移到程式層。lib.sh新增transcript_model:從 hook 收到的transcript_pathjsonl 尾端讀出實際模型 id。這是 shell 唯一能驗證的模型來源,模型自我回報無法驗證。sdlc-gate.sh lock {stage}不再收模型參數:自己讀實際模型、比對該階段必要標籤(讀$JSC_HOME/model-tags.tsv),不符就拒絕上鎖並以 exit 1 要求呼叫端停止。check在鎖存在且模型不符時以 exit 2 擋下該輪提示,訊息附上可切換的合格模型清單與unlock逃生門。其他 jsc hook 仍一律 exit 0,此處是刻意的例外並已在lib.sh註記。any階段、判定不出模型、舊格式鎖檔 → 照舊安靜降級 exit 0,不會把使用者鎖在無法送出提示的狀態。影響範圍
jsc-sdlc四個階段技能的呼叫方式改為sdlc-gate.sh lock {stage}(少一個參數,該 repo 另有 PR)。lock這一步生效,強制力不因降級而消失。$JSC_HOME/model-tags.tsv的相依:檔案不存在時lock拒絕上鎖(fail-closed)。重點檔案
hooks/sdlc-gate.shcheck以 exit 2 阻擋hooks/lib.shtranscript_model,並註記 exit code 例外skills/hooks-install/SKILL.mdlock生效、以及 tsv 缺失時要先跑jsc-cli:modelsREADME.mdJSC_MODEL優先序說明同步風險與注意事項
jsc-cli的tools/model-tags.sh sync先產生$JSC_HOME/model-tags.tsv,否則所有 SDLC 階段都上不了鎖。check會擋下提示,屬於刻意的行為改變。被擋住時的兩條出路都寫在訊息裡:切換到合格模型,或執行sdlc-gate.sh unlock。lock拒絕、check阻擋,要求補表而不是放行。驗證
實測九項情境全部符合預期:opus 上鎖通過、階段中途換 sonnet 被 exit 2 擋下、sonnet 跑 analyze 被 exit 1 拒絕、sonnet 跑 implement 通過、未知模型被擋、maintain(any)放行、tsv 缺失時拒絕上鎖、無 transcript 時拒絕上鎖、舊格式鎖檔安靜降級。
sh -n與 STE100 lint 皆通過。