feat/work-package-pr-gate-and-comment-autofix #19
1 Participants
Notifications
Due Date
No due date set.
Depends on
#20 feat/work-package-pr-gate-hook-enforcement
plugins/hooks
Reference: plugins/sdlc#19
Reference in New Issue
Block a user
工作包 PR 硬閘門與留言自動修正
摘要
jsc-sdlc:implement的 PR 檢查要成為強制規則——工作包的 PR 沒合併就禁止進入下一包,而且每次檢查都讀取該 PR 的全部留言並自動嘗試修正。原本這條規則只寫在 SKILL.md 內文,屬 prompt 層,模型可以無視;現在判定搬到tools/wp-gate.sh。使用者另外裁決:修不動或純討論的留言直接忽略(不在 PR 回覆、不停下流程,但回報要逐筆列出),已處理的留言記時間戳不重複處理。變更內容
tools/wp-gate.shcheck走gitea.sh pr-status判斷合併狀態:已合併就呼叫sdlc-gate.sh wp-unlock解鎖並 exit 0,未合併就印出全部留言並 exit 1 擋住。lock在開完 PR 後上鎖,讓閘門跨工作階段有效。--since過濾已處理過的留言。skills/implement/SKILL.mdlock子步驟。description帶進硬閘門與留言自動修正。references/branch.mdREADME.mdwp-gate.sh(三個用法、exit code、狀態檔歸 jsc-hooks 管),implement技能說明補上新行為。設計重點
gitea.sh pr-status對不存在的 PR 會印? none none並 exit 0,第一版把它當成 open,打錯 PR 編號就會派 sub agent 去追不存在的留言。現在加了欄位白名單,查不到一律status=missing-depexit 3——查不到的閘門若放行,等於沒有閘門。closed但未合併單獨回報status=closed-unmerged,它不算完成。latest=取全部留言的最大時間戳,不是這次過濾後的。安靜的一輪不會讓時間戳倒退,避免舊留言被重複處理。gitea.sh、sdlc-gate.sh)的路徑同時支援並排存取庫與已安裝 plugin 兩種版面,找不到就 exit 3 並講明缺哪一支。sdlc-gate.sh一律關掉 stdin:hook 模式會讀標準輸入,管線沒人關閉時整支卡死(實測踩到過,hook 端也一併修)。analyze技能,這裡不越界。測試結果
sh -n tools/wp-gate.sh通過。--since缺值都 exit 2 並印用法。JSC_HOME):已合併的plugins/hooks#18→status=merged、解鎖、exit 0;未合併的plugins/hooks#19→status=open、印出留言區塊與latest=、exit 1;不存在的#99999→status=missing-dep、exit 3。--since過濾以注入的假gitea.sh驗過三筆留言:不給旗標 3 筆、--since 2026-08-242 筆、--since 2099-01-010 筆但latest=仍是最新那筆、三種情境都 exit 1。status=missing-dep、exit 3,不會靜靜放行。lock plugins/sdlc 42產生$JSC_HOME/wp/plugins-sdlc.pr;接著check plugins/hooks 18只清掉plugins-hooks.pr,plugins-sdlc.pr留著。lock與解鎖在不外部導向 stdin 的情況下都不再卡住。~/.jsc未被寫入。meta/tools/ste100-lint.sh sdlc通過;SKILL.md 整份英文,僅保留要原樣輸出的繁中字面(含新增的「已處理留言」)。前置 Push Request
wp-gate.sh執行期要呼叫sdlc-gate.sh wp-lock與wp-unlock,那兩個子命令在該 PR 裡。已用gitea.sh pr-depend掛上依賴,前置未關閉前 Gitea 會阻擋本 PR 合併。