Uh oh!
There was an error while loading. Please reload this page.
docs(pm-skill): stale-premise check covers ruling-named cards; triage self-exit guard sees in-flight sibling rounds - #9501
Merged
Conversation
… self-exit guard sees in-flight sibling rounds Two gaps in one file, bundled under the hard same-file serial rule: - Pre-dispatch stale-premise check gains its second half: every issue a ruling or card names as a blocker, claim surface, coordination target, or arms-once-this-lands dependency is re-read (open/closed/assignee) at dispatch time, and the dispatch order cites the observed state, not the ruling's description. origin/main cannot answer whether a card is still open; a stale action claim self-corrects when the dev starts, a stale card reference never turns anything red. - Seat-Routine round guard becomes a complete mutual-exclusion reading: each fire leaves a round-open marker (session ID + fire time) on the seat post before its first write; the guard reads both the last closing brief and the latest round-open marker — a marker newer than the brief and younger than one round means a live sibling round, so the fire self-exits. Closes the window in which a slow round is invisible because its brief only lands at round end. Line ratchet stays at 682/682: both additions are paid for by removing text duplicated verbatim in the references files the same sections already cite (create_trigger trap, release-board cadence lines, org Project view note, epic territory rationale, landing-readings tail). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rn7aaamsR99FXRqLcpL99q
This was referenced Aug 18, 2026
hotlong
approved these changes
Aug 18, 2026
hotlong
marked this pull request as ready for review
August 18, 2026 05:55
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#9038, Fixes#9200
Single-file bundle on
.claude/skills/pm-dispatch/SKILL.md(hard same-file serial rule): the primary card's stale-premise gap plus the triage self-exit guard gap.Skills-root PR — ADR-class. Draft on purpose, awaiting a human merge; no AI seat may flip it ready, queue it, or arm auto-merge (maintainer rulings 2026-08-08 / 2026-08-11).
Change 1 — stale-premise check gains its card-reference half (primary card, Option A)
The pre-dispatch check previously re-verified only the ruling-named ACTIONS against
origin/main. It now names two halves:origin/main;Option B (mechanized reference extraction) deliberately not built — per the card's own recommendation it is a separate grading.
Change 2 — round-open marker completes the seat-Routine mutual exclusion (second card, shape 1)
The guard read only the last closing brief, so an in-flight sibling round was invisible for exactly its own duration (briefs land at round end). Now: each fire, before its first write, reads two data points — the most recent closing brief AND the latest round-open marker on the seat post. Brief younger than one round interval, or a marker newer than the brief and itself younger than one round interval (a mid-flight round has by design not yet posted its brief; the marker is its only visible trace) ⇒ self-exit. Both readings clear ⇒ post a one-line round-open marker (session ID + fire time) on the seat post, then run. No new time constant: the window is expressed in round intervals, matching the existing guard's unit.
Line ratchet: 682/682, net zero (+22/−22)
Ratchet ruling honored: ceiling 682 shrink-only, no re-wrap accounting. Both additions are paid for by removing text that survives verbatim elsewhere — each cut site already cites the file that keeps the content:
references/seat-post-protocol.md, Routine-creation section (verbatim, with more detail); a one-line trap pointer staysreferences/seat-post-protocol.md, release-board ops section (verbatim); three-boards fact also in the main file's round-report metricsreferences/seat-post-protocol.md, epic section (verbatim); "declarative, narrower is more honest" kernel stays inlinereferences/platform-readings.mdqueue-membership entries + main file landing section; pointer to the fact table staysGates (union re-run post-commit on
b6911a8db)pnpm check:pm-skill-ratchet— green: 682 lines, ceiling 682, headroom 0pnpm check:pm-skill-id-lint— green: 9 files clean (no issue IDs in operational text; both new passages self-contained)pnpm check:skill-frame-sync— green: 4 copies structurally isomorphic (decision frame untouched)pnpm check:doc-authoring— green: 377 files cleanpnpm --filter @objectstack/lint run check:doc-formula-expressions— green (after building the lint dependency closure in the fresh worktree)pnpm check:nul-bytes— green (plus a direct control-byte grep over the edited file: no hits)node scripts/check-adr-merge-approval.mjs— exit 1 locally (HTTP 401: no GitHub credentials in this container) — expected; in CI this gate stays red until the maintainer's own approval, by design for a skills-root PRnode scripts/pm/dispatch-gates.mjs(no-args self-derived change set, 1 path vs merge basee3a86e390): 6 matched families = exactly the six above, nothing additional; model floor claude-fable-5 (clause ①) satisfied by this dispatch..claude/internal tooling only — publishes nothing;skip-changesetlabel applied on this PR.Generated by Claude Code