feat(hooks): 未出貨警察 unreleased-police.sh —— 收工那刻抓「改了 repo 卻沒出貨」(inkstone/ISEP#68)
leo 2026-08-27:「每個 repo 只要有改動就要出貨⋯⋯這個 session 有改但要 結束沒出貨就抓,你可以久一點再出貨累積幾個 PR,但最後一定要出貨」。 四個判準(票要求自己判、寫得出理由,不照抄總管): - 「改過」=這個 session 期間 HEAD 新長出來的 commit(不是工作區髒、不是 push)。 與「出貨」用同一個單位(commit),才數得出「最後 commit 與最新 release 差多少」。 session 起點=transcript 第一列時間戳(同 countdown.py 的基準)。 - 「該不該出貨」=有沒有動到知識(wiki/docs/_archive)以外的檔。只改 wiki/docs 不擋。 - 「哪些 repo 不適用」=repo 根目錄有 .isep-release-exempt(自帶理由,非中央手列清單, 新 repo 預設納管)。 - 「這次先不出」=.claude/release-holds.md 寫一行理由(放行且留痕;形狀同 branch-holds.md, 是「要求某個東西在場」而非文字層封路)。 「出貨」=git tag --contains HEAD 非空(Gitea release 就是 tag,本機答得準、不打網路)。 只掛 Stop、不掛 SubagentStop:subagent 交回分支、release 由總管出,逼 subagent 出貨純屬誤攔。 fail-open:拿不到 transcript 起點/非 git/git 問不出來一律放行(誤攔比漏擋嚴重)。 盤點:61→62 支、84→85 條(在自己的樹上實數,未加減推算);未掛上仍 3 支(不變)。 測試:scripts/test-unreleased-police.sh 13/13(該擋/不該擋/出路走得通/鑑別力四群,全離線)。 docs/hooks-inventory.md F 組加一列+版本註記;docs/TESTING.md A27。 plugin.json 待總管定版:版本號與 tag 由總管在打 release 那一刻同 commit 改(升版是傳輸 機制本身,check-version-consistency 要求 version==最新 tag,故不在分支上先動)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M6AcoT4ALtPLsoCKab6pXt
This commit is contained in:
@@ -825,6 +825,28 @@ claude -p '請執行 git tag -a v9.9.9 -m test'
|
||||
|
||||
---
|
||||
|
||||
### A27 — 未出貨警察:改了 code 沒出貨要擋,只改 wiki/已出貨/先不出都不擋:13 條
|
||||
```
|
||||
bash scripts/test-unreleased-police.sh
|
||||
```
|
||||
**該看到**:`13/13 通過`。全程在 `mktemp -d` 底下造假 repo 與假 transcript,
|
||||
不碰任何真 repo、不打網路、跑完自己清。
|
||||
|
||||
**它在守什麼**(`inkstone/ISEP#68`,leo 2026-08-27):「每個 repo 只要有改動就要出貨⋯⋯
|
||||
這個 session 有改但要結束沒出貨就抓」。「改過」認的是**這個 session 期間新長出來的 commit**
|
||||
(committer-date 晚於 transcript 第一列的時間戳),「出貨」認的是**有沒有 release tag 收進 HEAD**
|
||||
(`git tag --contains HEAD`)——兩者同一個單位(commit),才數得出「最後 commit 與最新 release 差幾筆」。
|
||||
|
||||
**失敗**:
|
||||
- A 群「該擋」任一放行 ⇒ 假綠:改了 code 卻沒出貨溜過去了
|
||||
- B 群「不該擋」任一被擋 ⇒ **誤攔**(比漏擋嚴重)——特別看「只改 wiki/docs」「已出貨」
|
||||
「有 exempt marker」「release-holds.md 有它」四條,任何一條紅代表閘在懲罰謹慎
|
||||
- C 群紅 ⇒ 訊息教的出路(寫 `.claude/release-holds.md` 一行)**跑不動**,
|
||||
被擋的人只會去找繞過去的方法(`mistakes.md` ISEP#112 的課)
|
||||
- D 群紅 ⇒ 偵測根本不會亮,「全綠」其實是偵測壞了,不是真的乾淨
|
||||
|
||||
---
|
||||
|
||||
## B. 只有 leo 能跑的(雲端)
|
||||
|
||||
機器碰不到 claude.ai 的 Cloud environment 設定,這段一定要你動手。
|
||||
|
||||
Reference in New Issue
Block a user