Uh oh!
There was an error while loading. Please reload this page.
docs(pm-skill): three review-chain protocol rows, paid by compression - #12083
Merged
Conversation
Folded pack of three one-line protocol rows across the two pm-dispatch reference files, both at zero ratchet headroom — every row paid in place, no ceiling raised. contract-review.md (48 -> 48, ceiling 48): a re-hang guard on the gate label — grep the card thread for a standing verdict before re-hanging; PASS comment + label absence + unchanged PR head reads as CLEARED, not dropped. Paid by canonically re-wrapping three bullets; folded content is byte-identical, only line breaks moved. state-machine.md (43 -> 43, ceiling 43): the handoff IS the label — a handoff comment without the same-stroke label write is a null handoff; and a card waiting on a PR merging or a release landing names an issue that closes at the right moment, the vocabulary staying issue-only. Paid by dropping one rationale story and one same-sentence restatement; every rule and every prohibition survives. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
This was referenced Aug 25, 2026
hotlong
marked this pull request as ready for review
August 25, 2026 09:15
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.
Closes#11399, closes#11994, closes#11220
A folded pack of three one-line protocol rows across the two
pm-dispatchreference files. Both files sit at zero ratchet headroom, so every row is
paid in place — no ceiling is raised, and no ceiling row in
scripts/pm/check-skill-line-ratchet.mjsis touched.Ceilings read from the gate (not recalled):
contract-review.md48,state-machine.md43. Note the #11399 card body says "ceiling 44" forcontract-review.md— that is stale; the script is authoritative.Per-item
1. #11399 — re-hang guard
落点
references/contract-review.md, tail of 载体纪律(挂与清).before — nothing in the file told a would-be re-hanger where the
distinguishing evidence lives; 「被剥不是红灯是放行」 (in
state-machine.md)covers only the reverse direction.
after — new bullet:
2. #11994 — the handoff IS the label
落点
references/state-machine.md, the 通则needs:contract-reviewdual-carrier bullet (its natural home, per the grading comment).
before —
…卡侧先挂而 PR 尚不存在是合法中间态,不是半写。after — same bullet, extended:
The read-back half of the graded row is deliberately not re-stated: the same
bullet already opens with 「挂与清各一笔、两向都读回」, so adding it again would
have been duplication bought at a line of a zero-headroom file.
Per the grading comment, the prose-matching patrol heuristic is declined —
only the protocol row is implemented here.
3. #11220 — Blocked-by discipline (option 3 only)
落点
references/state-machine.md, thepm:blocked正典标记 bullet.before —
…句中提及**刻意拒收** —— 指令是行,提及是散文。after — same bullet, extended:
Scope is option 3 as the discipline row only. Options 1/2 (a
!PRform, arelease/lockfile form) stay unmechanized, per the maintainer ruling recorded on
the card (2026-08-23, verbatim and untranslated:
「10950 不考虑存量,其他接受你的建议」).
The live precedent that motivates the row is cited on the card, not in the file:
.claude/skills/pm-dispatch/**is scanned bycheck:pm-skill-id-lint(
/#[0-9]{3,}/), so the row is written as a self-contained lesson with no issueIDs. The
Part ofclause is the third instance recorded on the card: when theblocking PR carries
Part ofrather than a closing keyword, its tracking issuecannot close when that PR lands, so naming it over-waits by construction.
How each file paid
contract-review.md— 48 → 48, paid by canonical re-wrap (no content change)Three bullets were re-wrapped using the gate's own exported
wrapLine, sothe result is canonical by construction rather than by hand:
get_sessionThat frees exactly the 3 lines the new row costs. Proof this moved no
content: both versions were folded back to their logical blocks (line breaks
removed per the CSS segment-break rule the wrapper documents — a break between
two wide characters is removed, any other break renders as a space) and the
block lists compared:
All 19 pre-existing blocks are byte-identical; the only delta is the added row.
Every 「…」 verbatim ruling survives intact — the wrapper treats a corner-bracket
quotation as a single atom, so no ruling is re-flowed. A side effect worth
naming: the 资格 bullet previously wrapped as
…免复审/直/放,…, aone-character line; it now reads
免复审直放.state-machine.md— 43 → 43, paid by two compressionsThis file had no re-wrap slack (a canonical re-wrap of the whole file yields
43 → 43), so its 2 lines came from real cuts. Both are rationale/duplication;
every rule, every mechanical step and every ⛔ prohibition survives.
放行双查 (3 → 2) — dropped the rationale story
—— 已放行过的条件是花掉的,再点火就把过期前提立成现行, plus所载→的and该转换评论之后→该评论之后. Both checks, both ⛔, and「两查皆机械、零判断」 are kept verbatim. The rule is fully mechanical on its
own; the ratchet's own header is explicit that stories live on cards, not in
operational text.
完工停放 (4 → 3) — dropped the parenthetical
回队前提检查见到已完工的 open PR 即按落地工作处理, which re-states the samesentence's own main clause from the 回队 side, and the trailing rationale
让链路两端可读; also据此.⛔ 永不给完工卡重派 dev,Unlock-action: re-check PR #Mand停放 PR 正文须点名门禁卡are kept.Fold-level diff: 22 of 26 blocks byte-identical, 4 changed — the two rows
above and these two compressions, nothing else.
Gates
Derived from the real change set with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(no pathspassed — the script reads the change set itself). The derivation added four
families the dispatch did not name:
check:agent-test-spelling,check:doc-formula-expressions,check:pm-governed-merges,check:pm-skill-id-lint.Union re-run after the final commit, at
7f6f25ba5. Exit codes capturedbefore any pipe; the verdict lines below are the gates' own:
check:doc-formula-expressionsneededpnpm installplus a build of@objectstack/lintand its dependency closure in this fresh worktree — its firsttwo runs were prerequisite failures that measured nothing, not findings, and
the numbers above come from the run after the build.
Notes
.claude/internal agent tooling publishes nothing. Theskip-changesetlabel is applied on this PR via the additive labels endpointand read back.
skillsdiff, so the published-catalog line-budget reading does notapply — this is the internal, never-published surface.
Generated by Claude Code