Uh oh!
There was an error while loading. Please reload this page.
docs(pm-dispatch): test the governed surface before arming, and say the strip step at MERGED - #13092
Merged
Merged
Conversation
…e arming, and align the MERGED strip wording
This was referenced Aug 29, 2026
os-zhuang
approved these changes
Aug 29, 2026
os-zhuang
marked this pull request as ready for review
August 29, 2026 06:58
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#13034
Fixes#12907
Two cards, one file, one net-0 edit —
.claude/skills/pm-dispatch/references/landing-operations.md(ratchet 80 lines / ceiling 80, zero headroom, 120-byte line cap). Every re-wrap in this diff is
the canonical form produced by the ratchet's own
wrapLine, so no break in it is one the gatewould refuse to offer.
Card 13034 — the landing chain had no governed branch
The ACCEPT-path fork in
SKILL.mdalready reads the path surface before arming, but section B'sown pre-arm paragraph — the one the contract-review chain lands through (清标即落地: PASS to ready
to auto-merge to queue) — tested only
mergeable_state. So a PASS'd PR whose diff toucheddocs/adr/**was armed, enqueued, and then refused by the Governed Surface Queue Guard inside themerge group: one queue cycle spent to learn what a predicate answers for free.
The pre-arm paragraph now runs the governed predicate first, before
mergeable_state. Addedtext, verbatim:
The paragraph's old lead — 转 ready / 挂 auto-merge 之前先读
mergeable_state— becomes再读
mergeable_state, because the WHEN now sits on the new lead sentence and stating ittwice would cost a line the file does not have. The
mergeable_statecontent itself is unchanged.Self-demonstration — the new predicate, run on this PR's own diff:
exit 3. So this PR is a draft: no ready flip, no auto-merge, no queue, no reviewer requests
from this seat.
Card 12907 — the MERGED parenthetical
before:
after:
Judgement taken: correct it, not delete it. Deleting the false half alone was the cheaper edit
and it did fit, but it leaves the sentence implying the auto-closed card needs no label write at
all — which is the exact half the strip-on-close convention (SKILL.md 关闭即摘
pm:*状态标,与关单同一笔) closed, and the half patrol row H22 reports.
标也须摘says it in the smallest wordingthe zero-headroom budget allows; measured against that budget, the longer spellings that keep
GitHubin the clause all cost a fifth line. Scope note honoured: nothing here backfillsalready-closed cards — this is only what the document tells the next seat to do at the next merge.
Ratchet and cut ledger — net 0
Landed 80 lines against ceiling 80, headroom 0, widest line 120 bytes. Two paragraphs grew, two
paid, and the payments are re-flows plus one true cut:
mergeable_state(32-36 / 32-38)标签随卡离开在飞视图deleted, replaced by the shorter true标也须摘; canonical re-flow then closes a line. −1subscribe_pr_activity(51-56 / 52-56)The one content cut, with its surviving homes:
(云卡出生即订阅不越界,报告在 draft PR 开出即到)— the parenthetical justifying why cloudcards are exempt from the do-not-subscribe-before-report rule. Both facts already live elsewhere,
each as the rule itself rather than as an aside:
references/dispatch-runbook.mditem 4, 「云卡 draft PR 一存在,立即subscribe_pr_activity—— 硬步骤」..claude/agents/os-dev.md, 「报告在 draft PR 时点交付」, and thesame runbook's 合法回合终点 clause.
The rule that paragraph states — ⛔ 不订阅 dev 交报告前的 PR —— 双驾驶员互踩 — is untouched.
Deleted as false (card 12907, not a cut needing a home):
标签随卡离开在飞视图.No other paragraph in the file has re-wrap slack — checked by running the ratchet's own
wrapLineover every paragraph and list item; only the two paid ones move, and only after the edits above.
Gates
Union derived at the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(it reads its own change set from the merge base; no hand-built pathlist), then every family run on that same tree —
git rev-parse --short HEAD= 5f9199f.Exit codes captured by redirect-then-capture, never through a pipe.
check:pm-skill-ratchet✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/landing-operations.md is 80 lines (ceiling 80; headroom 0).check:pm-skill-id-lint✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g).check:pm-governed-merges✓ check-governed-merges --self-test: 206 assertions (…)check:agent-test-spelling✓ check-agent-test-spelling: 0 violations — 398 file(s) · 4558 bare -- token(s) · …check:doc-authoring✓ doc authoring guard: 13338 customer-facing string(s) across 672 spec sources clean — no internal issue-id references.check:skill-frame-sync✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 filespnpm --filter @objectstack/lint run check:doc-formula-expressions✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 425 files / 1453 TS blocks judged clean by @objectstack/formula.check:nul-bytescheck-nul-bytes: OK (scanned 7281 text file(s) …; no raw ASCII control bytes).Two of these first answered
PREREQUISITE NOT METin the fresh worktree (check:doc-authoringwanted
typescript;check:doc-formula-expressionswanted@objectstack/formulaand then@objectstack/lintbuilt). Those are NOT MEASURED, not red — both were re-run to a real verdictafter
pnpm installand aturbo run buildtaken throughscripts/pm/os-verify-lock.sh(
VERDICT command-exit 0 · held the lock 2sand1s).No changeset: the diff is
.claude/**only and publishes nothing.skip-changesetapplied atPR-open, read-union-write plus readback.
Generated by Claude Code
Generated by Claude Code