Skip to content

docs(skills): runbook reading three carries the declared population and 同席号 - #19304

Merged
os-steve merged 1 commit into
mainfrom
claude/issue-18957-runbook-reading-three-population
Sep 20, 2026
Merged

os-steve merged 1 commit into
mainfrom
claude/issue-18957-runbook-reading-three-population

Conversation

@os-steve

Copy link
Copy Markdown
Collaborator

Fixes #18957

Clause-②: no

One line of .claude/skills/pm-dispatch/references/dispatch-runbook.md, rewritten in place. No SKILL.md edit: the contract is right, only the paraphrase moves.

The change, with byte counts

The contract :61 paraphrases, .claude/skills/pm-dispatch/SKILL.md :80 (verbatim, untranslated):

- 读数三:本车道 `pm:dispatched` ∪ `pm:queue` 卡最新非本 session 同席号的 `Claim:` 评论。

references/dispatch-runbook.md :61, before — 114 B:

- 第三读数(车道 `pm:dispatched` 卡最新非本 session `Claim:`)出自车道盘点,不在座位贴线程。

after — 120 B (cap 120):

- 第三读数(本车道 `pm:dispatched` ∪ `pm:queue` 卡最新非本 session 同席号 `Claim:`)出自车道盘点。

Both missing clauses now stand in the contract's own words: the population 本车道 pm:dispatched ∪ pm:queue, and 同席号. The 同席号 spelling is SKILL.md :82's (「首张带同席号 Claim: 卡」) rather than :80's 「同席号的 Claim: 评论」 — the same word, and not a third one; :80's full form measures 130 B and does not fit.

What paid for it: a retirement inside the same block

Net 0 lines: 241 / 241, ceiling 241, headroom 0 — the file's line count never moves, and no line was bought.

The 「不在座位贴线程」 tail is retired as the negative restatement of :60, which is unchanged and reads:

- 互斥最小尾页读法:尾页配方只覆盖座位贴的两个读数,判空缺另对正文与标题。

:60 already states that the tail-page recipe covers only the seat post's two readings — the same fact, from the other direction. What :61 keeps is the half :60 does not carry: where reading three DOES come from (车道盘点). Nothing else in the file is touched; #18964 queues behind this card on the same file.

Why nothing smaller fits

Measured on the landed bytes, all four candidates against the 120-byte cap:

candidate bytes verdict
both clauses kept, population and 同席号 added 142 over the cap
:80's exact 「同席号的 Claim: 评论」 130 over the cap
「不在座位贴线程」 kept, 「出自车道盘点」 dropped 123 over the cap
landed — 「不在座位贴线程」 retired 120 at the cap, green

Folding the retired clause into :60 instead was measured and refused: :60 is 106 B, so it carries 14 B of headroom against the 22 B the clause plus its separator needs, and buying the room would mean rewriting a line PR #18950 landed three days ago.

Predecessor read first

a85b5dc (PR #18950) rewrote this same block on 2026-09-18. It touched :60 and :63 and deliberately left :61 alone, recording its headroom at 6 B. Neither of its two lines is undone here; :61 was not one of them.

Landing tier

node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/dispatch-runbook.md reads Tier S (席内达档复核落地) — .claude/** ×1, the agent instruction tree. The PR stays DRAFT; the owning seat lands it once the thread carries a ## Contract review record for the current head. Size: 2 changed lines, far under the 5,000-line human-merge threshold.

Gates — head cec2518

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack with no paths derived 16 families from the tree at cec2518; every one was run and every exit code captured before any pipe.

gate exit
node scripts/check-closing-keyword-parity.mjs 0
node scripts/check-closing-keyword-parity.mjs --self-test 0
node scripts/check-comment-mask-corpus.mjs 0
node scripts/pm/check-harness-current.mjs --self-test 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0
pnpm check:agent-test-spelling 0
pnpm check:cross-package-test-inputs 0
pnpm check:doc-authoring 0
pnpm check:driver-memory-census 0
pnpm check:nul-bytes 0
pnpm check:pm-governed-merges 0
pnpm check:pm-skill-id-lint 0
pnpm check:pm-skill-ratchet 0
pnpm check:refd-timer-probe 0
pnpm check:skill-frame-sync 0
pnpm check:watch-hint-literal 0

Reconciliation, dispatch-gates.mjs --repo objectstack-ai/objectstack --ran:

✓ dispatch-gates --ran: 16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED
  (a DERIVED zero — all 16 recorded an exit code and none of them is 3).

check:doc-formula-expressions first returned exit 3 — PREREQUISITE NOT MET, an unbuilt @objectstack/formula and @objectstack/lint, nothing measured. It was re-run at exit 0 after pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint under scripts/pm/os-verify-lock.sh (VERDICT command-exit 0).

Two families the derivation flagged rather than cleared were also run:

  • pnpm check:pm-settings-deny-roster — exit 0; the derivation marks its roster as living under .claude, which one of the changed paths is in, so its silence is evidence in neither direction.
  • node scripts/pm/check-governed-merges.mjs --test — the tier read above.

The ratchet's own verdict lines, from pnpm check:pm-skill-ratchet:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/dispatch-runbook.md is 241 lines (ceiling 241; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/dispatch-runbook.md: widest table row is 0 bytes (pin 0; headroom 0).

and its 120-byte rule, read back through the gate's own lengthVerdict on the edited tree:

.claude/skills/pm-dispatch/references/dispatch-runbook.md: every line is within 120 bytes (or structurally exempt). | offenders: 0

Lint: a measured narrowing, not a skipped run

pnpm lint (eslint . --no-inline-config) is CI's repo-wide run. Narrowed here to the one changed path, with the three readings that make the narrowing a measurement:

  1. Population, read from eslint's own config — every block in eslint.config.mjs matches **/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs} or a subtree of it. No block names .md.
  2. File count, from --format json — pnpm exec eslint --no-inline-config --format json .claude/skills/pm-dispatch/references/dispatch-runbook.md exits 0 over 1 file, 0 errors, and the single message is File ignored because no matching configuration was supplied.
  3. Invariance for untouched files — the diff contains no file of a linted extension at all, so no eslint verdict anywhere in the repo can move; type-aware linting is not enabled, so nothing reaches an untouched file through a program graph either.

Acceptance notes

  • references/core-rules.md :18 (「开轮互斥四读数:收班简报、开轮标记、本车道同席号最新他会话认领与最新关闭卡认领。」) is the nearest sibling paraphrase and was checked: it NAMES the four readings and spells no population at all, so it is not a narrower restatement and needs no matching edit. Noted, not filed; no queued card carries core-rules.md.
  • No changeset: .claude/** publishes nothing from any released package. Label skip-changeset.

Generated by Claude Code

…nd 同席号

Clause-②: no

`references/dispatch-runbook.md` :61 paraphrased SKILL.md :80's reading
three over `pm:dispatched` alone and without 同席号, so a seat following
the runbook misses a live `Claim:` sitting on a `pm:queue` card of its own
seat number and never self-retires — two writers on one seat.

:61 now restates the contract's own population and clause. Paid in-file:
the 「不在座位贴线程」 tail is retired as the negative restatement of :60
(「尾页配方只覆盖座位贴的两个读数」), which states the same fact from the
other direction. 114 B -> 120 B (cap 120), 241 / 241 lines, net 0.

Claude-Session: https://claude.ai/code/session_017ETYWqMQD4qMtZzAGovWNi
Co-authored-by: Claude <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: cec2518d9edbabd3b879e978087be28511c579f5

① Derived judgments

  • Accept set / public surface: none moves — one prose line in references/dispatch-runbook.md (facts layer, .claude/**). Judged correct.
  • The restatement: :61 now carries SKILL.md :80's population (pm:dispatched ∪ pm:queue) and the 同席号 clause in the contract's own words, and keeps 「出自车道盘点」; the retired tail 「不在座位贴线程」 is the negative of :60's 「尾页配方只覆盖座位贴的两个读数」, so its substance survives one line up. Judged correct — no clause of the runbook is narrower than the contract on reading three any more; ⛔ no SKILL.md edit, as the grading ruled.
  • Ratchet: 241 / 241 lines, :61 at exactly 120 B against the 120 B cap (≤ passes) — seat-run node scripts/pm/check-skill-line-ratchet.mjs on this head exits 0 with both verdict lines for the runbook green.

② Semver level

None — .claude/** publishes nothing; skip-changeset on the PR is the correct declaration. Judged correct.

③ Boundary flags

open_questions empty. Two noted, not filed read and accepted: core-rules.md :18 names the four readings without a population (not narrower, not class (b)); SKILL.md :80 and :82 are two spellings of one contract clause (both the contract, out of this card's scope). Neither owes a card.

Implemented-by: claude/issue-18957-runbook-reading-three-population
Reviewed-by: session_017ETYWqMQD4qMtZzAGovWNi

VERDICT: PASS


Generated by Claude Code

@os-steve
os-steve marked this pull request as ready for review September 20, 2026 11:01
@os-steve
os-steve enabled auto-merge September 20, 2026 11:01
@os-steve
os-steve added this pull request to the merge queue Sep 20, 2026
Merged via the queue into main with commit 58ac824 Sep 20, 2026
32 checks passed
@os-steve
os-steve deleted the claude/issue-18957-runbook-reading-three-population branch September 20, 2026 11:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants