From de7962a8c168c37eb98aac4e3716bcc1c86d4c0b Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 31 Aug 2026 11:10:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(gate):=20=E9=96=98=E9=96=80=E8=AA=AA?= =?UTF-8?q?=E6=98=8E=E8=88=87=E5=AF=A6=E9=9A=9B=E8=A1=8C=E7=82=BA=E5=B0=8D?= =?UTF-8?q?=E9=BD=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 兩份參考文件跟實際判定互相矛盾。照著做會漏掉收尾,或是擋錯階段。 - 模型閘門非零退出時,該回合仍要跑階段回報。提前停下來也要留紀錄,不然使用者看不到停在哪裡。 - 工作包閘門只擋分析與維護:規劃只印提醒就放行,實作一律放行。實作是結清那支 PR 的唯一路徑,擋了閘門就自己鎖死。 - 順帶把指向實作技能的步驟引用改成新的順序。 --- references/branch.md | 4 ++-- references/model-gate.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/references/branch.md b/references/branch.md index c2c22c5..0a07bc8 100644 --- a/references/branch.md +++ b/references/branch.md @@ -137,7 +137,7 @@ SDLC 各階段引用的參考分支與來源分支,**一律指遠端的 `origi | 層 | 誰執行 | 做什麼 | | --- | --- | --- | | 工具閘門 | `tools/wp-gate.sh` | 唯一去問 Gitea 的一方,也是唯一有權解鎖的一方。`check` 查合併狀態、印出全部留言、印 `latest=` 時間戳,只管那一支 PR 自己;`check-deps` 查某個候選工作包能不能挑,活抓分析頁的相依欄逐一核對;`claim` 在領包當下登錄歸屬;`lock` 在 PR 開好後記下未結清並把 PR 掛到工作包名下;`owns` 比對某支 PR 是不是自己這一包的。狀態檔的寫入一律轉呼叫 `sdlc-gate.sh`。結束碼 0 放行、1 擋住、2 用法錯誤、3 查不到(查不到就擋,不放行) | -| hook 提醒 | `jsc-hooks` 的 `sdlc-gate.sh wp-check` | 只讀 `$JSC_HOME/wp/` 的狀態檔,不打網路。`prompt` 模式注入提醒但**不擋提示**;`skill` 模式擋掉 `plan`、`analyze`、`maintain`,放行 `implement`——擋住的是「跳去做別的階段」,不是「回來把這一包做完」。這一層是整個存取庫共用的粗粒度提醒,不是逐工作包判斷,細粒度的相依判斷交給 `check-deps`,歸屬比對交給 `owns` | +| hook 提醒 | `jsc-hooks` 的 `sdlc-gate.sh wp-check` | 只讀 `$JSC_HOME/wp/` 的狀態檔,不打網路。`prompt` 模式注入提醒但**不擋提示**;`skill` 模式擋掉 `analyze` 與 `maintain`,對 `plan` 只印提醒就放行,對 `implement` 一律放行——擋住的是「跳去做別的階段」,不是「回來把這一包做完」。`implement` 放行是閘門不自鎖的關鍵:結清那支 PR 的唯一路徑就是它,擋了就沒有人解得開。`plan` 降成提醒之後,放棄的是「手上工作包沒結清就別開新計畫」這道在製品上限,`analyze` 那道仍在,上限只是晚一個階段才生效。這一層是整個存取庫共用的粗粒度提醒,不是逐工作包判斷,細粒度的相依判斷交給 `check-deps`,歸屬比對交給 `owns` | 狀態檔不綁 session:PR 沒合併就是沒合併,開新對話照樣擋。 @@ -154,7 +154,7 @@ SDLC 各階段引用的參考分支與來源分支,**一律指遠端的 `origi | 查無歸屬 | **放行只提醒**:沒有分析頁、查不到工作包代號、領取檔不存在、工作包還沒掛上 PR,一律 `status=unowned` 並 exit 0。這跟「查不到就擋」不衝突——那條講的是查得到卻查失敗,這條講的是根本還沒有歸屬可查,拿不存在的歸屬擋人會讓沒登錄過的工作包全部動不了 | | 逃生門 | `JSC_WP_GATE=off`,由 hook 那一層認 | -查驗程序的細節(何時帶 `--since`、怎麼等 PR 合併、留言逐筆的處理結果、修不動的留言怎麼辦、時間戳寫回哪裡)由 `skills/implement/SKILL.md` 步驟 4 與步驟 11 擁有,本檔不重複。 +查驗程序的細節(何時帶 `--since`、怎麼等 PR 合併、留言逐筆的處理結果、修不動的留言怎麼辦、時間戳寫回哪裡)由 `skills/implement/SKILL.md` 步驟 2 與步驟 11 擁有,本檔不重複。 ## 不破壞既有工作 diff --git a/references/model-gate.md b/references/model-gate.md index dc252c7..6a68cb0 100644 --- a/references/model-gate.md +++ b/references/model-gate.md @@ -21,7 +21,7 @@ SDLC 每個階段動工前先過模型閘門。判定全在程式層,由 `jsc- | 項目 | 規則 | | --- | --- | | 標籤來源 | 只認腳本的判定。不得宣稱自己沒驗證過的標籤,也不得用自己的判斷取代腳本結論 | -| 非零退出 | 一律視為阻擋:原文轉述腳本訊息、停止該技能、該回合不做別的事 | +| 非零退出 | 一律視為阻擋:原文轉述腳本訊息、停止該技能,該回合除了跑 `tools/stage-report.sh` 收尾回報以外不做別的事(提前停下來也要回報,見 `references/stage-report.md`) | | `unlock` | 不得用來繞過閘門。要不要解鎖是使用者的決定 | | 回報 | **每次都要回報**:階段、必要標籤、腳本從 transcript 讀到的實際模型 id、判定結果。通過與阻擋都要講——安靜通過看起來跟跳過檢查一樣,而判定搬進程式層的理由就是「宣稱有檢查」不可信 | | 退出 0 | 該階段已上鎖。到下一階段的閘門重新上鎖之前,同一階段內把模型換成不合格的,下一輪提示會被 sdlc-gate hook 以 exit 2 擋下 |