身為交出 PR 的人,我要它兩週內有人給結論,我才不會做完的東西永遠進不了版本 #95
Closed
claude-code
wants to merge 1 commits from
feat/pr-verdict-guard into main
pull from: feat/pr-verdict-guard
merge into: inkstone:main
inkstone:main
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 | |
|---|---|---|---|---|
|
|
7e58623cb3 |
PR 不再躺著:收工時清點沒有結論的 PR,並讓「給結論」是一個動作(inkstone/ISEP#81)
實查(2026-08-27):inkstone org 有 7 個 open PR,最久的三個躺了兩星期 (Arcrun#104 15 天、Arcrun#116 14 天、arcrun-rag#91 14 天), 而 v0.9.0 的 46 支閘一支都沒有在管 PR。票看起來「已交付」, 東西卻沒進 main ⇒ 沒進版本 ⇒ leo 手上永遠不會出現它。 新增 hooks/pr-verdict-guard.sh(Stop,F 組) open、沒有人被指派、也沒有 REQUEST_CHANGES review 的 PR ⇒ 擋一次並點名 (含開了幾天與網址);merge 了但 head 分支還留著的一起點名 ——票上寫死「merge → 併完當場刪掉那條 branch」,分支還在=結論只給了一半。 🔴 票上點名要避開的錯路(ISEP v0.6.0 divergence §B4): 「佇列非空即 block」會讓總管永遠停不下來。所以擋的是遺忘,不是等待—— ① 有人被指派/掛 Human ⇒ 不點名(棒子在他手上,是 Gitea 原生欄位不是措辭) ② 有 REQUEST_CHANGES review ⇒ 結論給過了,球在對方腳下 ③ 這一回合碰過它 ⇒ 不點名 ④ 響過就退讓:每個 PR 各自 1→4→8→16 「碰過」不讀任何一句話:① updated_at 跟上次收工比變了(外部系統的事實) ② 上次收工時還不存在(剛開出來,不在誕生的回合開罵) ③ 這回合的 tool call 出現它的識別碼(接住「結論寫在票上」這種合法結論)。 ③ 不是關鍵字黑名單——黑名單拿措辭來「擋」,這裡拿識別碼來「放行」, 比對錯了只會少擋一次。leo 2026-08-17 證偽的是前者。 刻意只掛 Stop 不掛 SubagentStop:給 PR 結論是總管的權,subagent 連 main 都不准推。 新增 scripts/pr-verdict —— merge/reject/changes 各是一個動作 merge 併 + 刪分支 + **當場複驗分支真的不見了**(下了刪除指令 ≠ 它被刪掉) reject 理由寫進票 + 關 PR + 刪分支 changes 修改要求寫進票 + 留 REQUEST_CHANGES(讓「給過結論」變成閘查得到的事實) list / --dry-run(按下去之前先看會打哪幾通 API,一通都不送出) 測試 hooks/tests/pr-verdict-guard.test.sh:52 條全過,離線走 fixture, 不打 Gitea、不開測試 PR、不留測試票。A 群 8 條全在證「不該擋」。 另用真實 Gitea 唯讀重演過票上那三個真跡(一次點名 7 個)。 順手:plugin.json 的「27 支腳本」是過期數字,實數 34 (ls -p scripts | grep -v / | wc -l)——同一個病,只是換一欄。 版本 0.9.0 → 0.10.0。tag 待併入 main 後由總管打(release-tag-guard 管那道)。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016ZBu4Sa1cGntKFRBYNZ6xs |