Uh oh!
There was an error while loading. Please reload this page.
fix(pm-dispatch): gate the worktree-rescue step with the three adjudicated fences - #13473
Merged
Merged
Conversation
…cated fences Fixes#12637 The stale-claim reclaim step prescribed committing a rescue WIP into any dispatch worktree with no liveness precondition, and its message template implied absence claims the rescuer cannot observe. Write the three fences from the 2026-08-28 grading into the standing step: 1. Liveness precondition: any actor passes a liveness/ownership check or an explicit age threshold on the worktree's newest mtime before committing; GitHub-side silence alone is never grounds (a working unpushed seat shows the identical signals; uncommitted changes evidence work, not death). 2. Message boundary: the WIP message states only rescuer-observables (dirty paths, line counts, sha); no present-tense claims about what the seat did or did not run. The INCOMPLETE AND UNREVIEWED header stays, scoped to the rescuer's own act. 3. Mis-hit remedy: a rescue that hits a live seat is corrected additively by that seat in the PR body, never by history rewrite (force-push is forbidden from a dev seat). Funding per the R1 PM disposition (option A, 2026-08-30): the fences land in the headroom freed by #13389 (943 -> 947 of 1005, net +4 faithful spelling); the one in-passage deletion is the last-line-of-defense rationale clause, whose dev-already-dead premise is exactly what fence 1 corrects. No ceiling change, no re-wrap, no unrelated deletions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de
os-zhuang
approved these changes
Aug 30, 2026
os-zhuang
marked this pull request as ready for review
August 30, 2026 14:09
os-zhuang
enabled auto-merge
August 30, 2026 14:10
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#12637
Writes the three adjudicated fences from the card's 2026-08-28 grading (取卡者围栏, 缺一不可) into the standing worktree-rescue step of the stale-claim reclaim passage,
.claude/skills/pm-dispatch/SKILL.md(passage now lines 553-562; anchorINCOMPLETE AND UNREVIEWEDre-derived on merged mainc38b7eff7at :556 before editing).dispatch-runbook.mduntouched — no split was needed.The three fences, and where each landed
INCOMPLETE AND UNREVIEWEDheader stays, now explicitly scoped on line 559: 「抬头限救树者行为,保留」.The one sanctioned in-passage deletion (per the R1 PM disposition, option A, 2026-08-30T07:16Z): the last-line-of-defense rationale clause 「死在编辑中途的 dev 没来得及自己 WIP 推,这一步是最后防线」 (79 bytes at line 557 pre-edit) — its dev-already-dead premise is exactly what fence 1 corrects. Everything else in the passage is preserved verbatim, including 「续派者 diff 它,⛔ 不无审续建」 and 「有带提交活分支的认领永不回收」. No ceiling change, no re-wrap-as-funding (2026-08-17 ruling), no unrelated deletions. Faithful (+4) spelling chosen over the floor (+2) per the dispatch's preference: this is protocol text about honest evidence bounds, and the two faithful adds are the rationale and the no-force-push note.
Line budget
Net +4 lines (8 insertions, 4 deletions), inside the headroom freed by #13389. Every touched line is 116 bytes or less (widest new line: 116).
Gates — union run at final commit
01769913b, clean tree, exits captured by redirect-then-captureDerived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackin the worktree (change set: exactly this one file). All nine matched families:@objectstack/formulaand@objectstack/lintbuilt first; the first two runs printed the gate's own PREREQUISITE NOT MET banner — not-measured, not red)Stale-tree note: origin/main advanced to
d38ad7fc5during the run (three commits); none touches.claude/skills/pm-dispatch/or any matched gate script, so the family list and the budget arithmetic stand. Base refresh before the human merge is the PM's landing step per the grading.Reverse verification (fix committed first; both restores proven by hash equality against the HEAD blob plus empty
git diff HEAD)The gate reads the source file directly from the working tree (no dist, no exports resolution), so no build leg applies; each mutation was proven on disk before reading the gate (marker grep hit count plus measured line count/width).
git hash-objectequals HEAD blobd4abba29c2f7b1385d9d363cc7dd81148a40fec3,git diff HEADempty, under an EXIT/INT/TERM trap with absolute paths.Governed surface posture
Diff is
.claude/**only — this PR stays DRAFT; no ready flip, no queue, no auto-merge, no review from any seat. The maintainer lands it by hand (or via the pinned-approval path) after the PM's ACCEPT review.skip-changesetapplies (publishes nothing from any package; closed-list diff class).Generated by Claude Code
Generated by Claude Code