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

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