Skip to content

Commit 58ac824

Browse files
os-steveclaude
andauthored
docs(skills): runbook reading three carries the declared population and 同席号 (#19304)
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): ```text - 读数三:本车道 `pm:dispatched` ∪ `pm:queue` 卡最新非本 session 同席号的 `Claim:` 评论。 ``` `references/dispatch-runbook.md` :61, before — **114 B**: ```text - 第三读数(车道 `pm:dispatched` 卡最新非本 session `Claim:`)出自车道盘点,不在座位贴线程。 ``` after — **120 B** (cap 120): ```text - 第三读数(本车道 `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: ```text - 互斥最小尾页读法:尾页配方只覆盖座位贴的两个读数,判空缺另对正文与标题。 ``` :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`: ```text ✓ 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`: ```text ✓ 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: ```text .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](https://claude.ai/code/session_017ETYWqMQD4qMtZzAGovWNi)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3d18877 commit 58ac824

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

‎.claude/skills/pm-dispatch/references/dispatch-runbook.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
- 细节禁止复述:逐卡理由已作审计评论落卡,简报只指不拷。
5959
- 硬预算正文 ≤3000 字符,收班自报字符数;连续两轮超限即漂移。
6060
- 互斥最小尾页读法:尾页配方只覆盖座位贴的两个读数,判空缺另对正文与标题。
61-
- 第三读数(车道 `pm:dispatched` 卡最新非本 session `Claim:`)出自车道盘点,不在座位贴线程。
61+
- 第三读数(本车道 `pm:dispatched` ∪ `pm:queue` 卡最新非本 session 同席号 `Claim:`)出自车道盘点。
6262
- 配方:`issue_read get` 拿评论总数,按小 `perPage`(~15)算末页页码只读尾页。
6363
- 尾页缺读数再回翻一页,⛔ 不读整线程;返回数少于总数 ⇒ 记录可能已消失,报缺口。
6464
- 长线程状态读外包:>~15 条的线程派下限档只读子代理返回结构化摘录,尾部优先。

0 commit comments

Comments
 (0)