未出貨警察 unreleased-police.sh — 收工抓「改了 repo 卻沒出貨」(inkstone/ISEP#68) #128
Open
claude-code
wants to merge 1 commits from
feat/unreleased-police-isep68 into main
pull from: feat/unreleased-police-isep68
merge into: inkstone:main
inkstone:main
inkstone:fix/isep-122-ship-check-delivery
inkstone:fix/isep-122-double-registered-project-hooks
inkstone:feat/cloud-env-arcrun-ns
inkstone:fix/isep-117-worktree-whitelist
inkstone:feat/cloud-env-uncle6
inkstone:feat/cloud-env-youlin-cf
inkstone:chore/v0.18.0
inkstone:fix/gate-teaches-a-command-that-runs
inkstone:chore/v0.17.0
inkstone:feat/retire-sdd-guard
inkstone:feat/parallel-lines-cap
inkstone:fix/roster-plugin-prefix
inkstone:chore/v0.16.0
inkstone:feat/nag-and-wiki-compress
inkstone:feat/named-workers-and-reply-gate
inkstone:feat/manifest-account-v2
inkstone:feat/debt-worklist
inkstone:feat/release-manifest-and-milestone-account
inkstone:chore/v0.13.0
inkstone:feat/handoff-writeback-loose
inkstone:feat/mainline-milestone
inkstone:chore/v0.12.0
inkstone:fix/cloud-wiring-isep90
inkstone:feat/pr-verdict-v2
inkstone:feat/countdown-stamp
inkstone:feat/gate-search-is-not-proof
inkstone:fix/stamp-proves-seen-not-run
inkstone:feat/gate-catches-recon-without-output
inkstone:docs/inventory-missing-rows
inkstone:fix/tests-leave-no-forged-pending
inkstone:integrate/isep59-wave2
inkstone:fix/gitea-write-search-guard
inkstone:feat/leo21c-mcp-guard
inkstone:fix/dispatch-guard-parens-and-wiring
inkstone:fix/dispatch-guard-noise-and-wiring
inkstone:fix/remove-claim-worksheet-mechanism
inkstone:feat/three-native-fields
inkstone:feat/ticket-carries-the-task
inkstone:feat/gate-fires-when-asking-not-after-stopping
inkstone:fix/stamp-release-stat-ordering-linux
inkstone:fix/beacon-says-which-copy
inkstone:fix/factory-idle-guard-blocks-actions-not-mentions
inkstone:fix/beacon-counts-registered-gates
inkstone:fix/push-guard-cross-repo-stamp
inkstone:feat/vendor-drift-guard
inkstone:fix/push-guard-target-not-substring
inkstone:feat/milestone-must-have-due
inkstone:fix/worksheet-dedup-by-content
inkstone:fix/b4-real-probe
inkstone:fix/cloud-setup-git-auth-verify
inkstone:feat/cloud-env-outdir
inkstone:fix/testing-b-section-discriminating
inkstone:fix/setup-self-verify
inkstone:fix/claim-worksheet-dedup
inkstone:fix/cloud-env-parity-14
inkstone:fix/sdd-guard-path-resolution
inkstone:feat/cloud-env-generator
inkstone:fix/one-copy-per-gate
inkstone:fix/group0-gates
inkstone:chore/withdraw-versions
inkstone:rule/milestone-formation
inkstone:rule/pr-only
inkstone:docs/three-source
inkstone:docs/plan
inkstone:release/v0.2.1
inkstone:fix/ticket-api-bypass
inkstone:leaf/24-descope
inkstone:release/v0.2.0
inkstone:leaf/5-cloud
inkstone:leaf/18-dogfood
inkstone:leaf/6-release
inkstone:leaf/2-docs
inkstone:leaf/3-wiki
inkstone:leaf/4-labels
1 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
0024d697f9 |
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 |