Skip to content

docs(pm): bind hold discharge to the most recent transition comment; refuse when newer merged PRs exist - #9855

Merged
os-warren merged 1 commit into
mainfrom
claude/issue-9315-hold-discharge-vintage
Aug 19, 2026
Merged

docs(pm): bind hold discharge to the most recent transition comment; refuse when newer merged PRs exist#9855
os-warren merged 1 commit into
mainfrom
claude/issue-9315-hold-discharge-vintage

Conversation

@os-warren

Copy link
Copy Markdown
Collaborator

Fixes#9315

What

Adds the two-part mechanical discharge guard (per the dispatch ruling) to the hold/unlock discipline in .claude/skills/pm-dispatch/SKILL.md:

  1. Discharge only against a condition stated in the most recentpm:on-hold / pm:blocked transition comment on the card — never any earlier blocker named in the thread (a condition already discharged is spent; re-firing it restores a stale premise as current).
  2. Refuse to discharge when the card has merged PRs newer than that transition comment — the signal the card moved on after the condition was written (the cited fact can be true and still not be the current condition).

Both halves are judgment-free checks, stated as such in the rule text.

Home choice (ruling allowed row ~77 or the daily-batch text ~293 — single home)

Landed in the pm:on-holdstate-model row (the ~77 row), extended in place, because: (a) the discharge-fire mechanics already live in that row's parenthetical (the unlock-scan fire channel), so the vintage binding continues the same sentence; (b) the daily-batch text explicitly defers to the state model for hold-comment discipline, so the state model is where its own cross-reference already points; (c) an in-row extension adds zero lines against a headroom-1 ratchet — no re-wrap, no forced deletion.

Not duplicated anywhere else; no changes outside the one row.

Line budget

SKILL.md: 681 lines before → 681 after (ceiling 682, headroom 1 preserved).

Gates (all at 174a366, the PR head)

Derived by node scripts/pm/dispatch-gates.mjs (no paths; change set from merge base 55d29935b): 7 families matched, all run, all green — check:pm-skill-ratchet (verdict: "SKILL.md is 681 lines (ceiling 682; headroom 1)"), check:pm-skill-id-lint ("9 file(s) clean"), check:doc-authoring ("377 files clean"), check:pm-governed-merges (77 self-test assertions), check:pm-governed-prose ("2 instruction surface(s) name all 5 registered governed surfaces"), check:skill-frame-sync ("4 copies of the decision frame are structurally isomorphic"), check:doc-formula-expressions ("1413 TS blocks judged clean"). Plus check:nul-bytes ("no raw ASCII control bytes").

Governance

.claude/skills/** is a governed surface (Prime Directive #14): this PR opens draft and stays draft — a human merges it. No changeset (repo-internal agent instruction file; nothing publishes).


Generated by Claude Code

…nd refuse on newer merged PRs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeA3nU1B5Q2pgxqxgUrexd
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Aug 19, 2026
@os-warrenos-warren added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed documentation Improvements or additions to documentation labels Aug 19, 2026 — with Claude
@os-warren
os-warren marked this pull request as ready for review August 19, 2026 05:44
@os-warren
os-warren added this pull request to the merge queueAug 19, 2026
Merged via the queue into main with commit 5af0685Aug 19, 2026
27 checks passed
@os-warren
os-warren deleted the claude/issue-9315-hold-discharge-vintage branch August 19, 2026 06:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-warren@claude