Skip to content

Commit 9bc4dde

Browse files
docs(pm-dispatch): retire rule A — the spec floor follows the commit pin since objectstack-ai/objectui#12958 (#24742)
Fixes #24730 Clause-②: no Retires rule A of the dispatch runbook: the three lines under 〈派发词构造细则〉 that told a dispatching seat to make the first consumer of a new `@objectstack/spec` release raise that package's manifest floor in the same PR. The rule's subject ended with objectstack-ai/objectui#12958, which made objectui compute its `@objectstack/*` floors from the commit pin at publish. Triage shape (comment 6282324835): one Tier S text PR that deletes the three lines. ## The change One file, `.claude/skills/pm-dispatch/references/dispatch-runbook.md`, three whole lines deleted, nothing added. The deleted lines, verbatim: ```text - 卡的代码首读 spec 发布 R 首发的键、类型成员或运行时行为,即 R 的首个消费者: - 同 PR 把消费包 `@objectstack/spec` 下限抬到 R,认领文件面点名 manifest 与 lockfile specifier。 - 「不动 pin」只禁 lockfile 解析版本与 `.objectui-sha`/console pin 的移动,⛔ 永不禁下限。 ``` - Line budget: 241 → 238 lines against the file's ceiling of 241. The deleted lines are 106 / 113 / 110 bytes, newline excluded. Nothing is added, so the 120-byte line cap is not engaged. - The CEILINGS row in `scripts/pm/check-skill-line-ratchet.mjs` stays at 241. That is the card's default: the 3 lines of headroom are left for later ordinary edits to this file. - Rule B (`triage-duties.md` lines 30–31, the bump card's wait list read from the hold index) is not in the diff. - What the edit leaves next to each other: the new line 210 「跨包常等于跨车道,PM 事后补跨座位声明。」 ends the file-surface block (lines 208–210). The new line 211 「模型标识只禁内容工件:…」 starts the model-identifier pair. Neither line depends on the other, so no separator line is added. ## Why: the premise and its ruling source - Ruling source: the maintainer's letter B on objectstack-ai/objectui#12955 (objectui comment 6248859734). Under it, objectui consumes `@objectstack/*` by commit pin (`.objectstack-sha`). - Execution: objectstack-ai/objectui#12958, through objectstack-ai/objectui#13024, merge commit `4484a1104`, merged 2026-10-19T06:37Z. objectui's `changeset:publish` now runs `scripts/objectstack-floor.mjs` first. That script computes each `@objectstack/*` floor from `.objectstack-sha` and, at publish, rewrites any range below the floor. - Parent: #24276. Rule A landed there through #24315 (`83048c686`). The objectui `domain:ui` seat's note `6248946273` on that card had already named this re-read as due once objectstack-ai/objectui#12958 shipped. - No consumer is left for rule A to govern: - objectstack depends on `@objectstack/spec` only through `workspace:` ranges. - hotcrm pins exact published versions. - cloud moves by `.objectstack-sha` bump cards. ## Premise re-checks (the card's 〈Premises〉, each run before the edit) 1. **objectui computes floors at publish: HOLDS.** Read on objectui `origin/main` `4b6774649`, fetched in this run, with `git show origin/main:package.json | grep changeset:publish`. The line reads `"changeset:publish": "node scripts/objectstack-floor.mjs && node scripts/check-published-dist-tooling.mjs && node scripts/check-spec-range-floors.mjs && changeset publish",` and so starts with `node scripts/objectstack-floor.mjs &&`. Ancestry: `git merge-base --is-ancestor 4484a1104 origin/main` exits 0, which proves itself even on a shallow checkout. 2. **The objectui card has a merged PR: HOLDS.** `GET /repos/objectstack-ai/objectui/pulls/13024` returns `merged: true`, `merge_commit_sha` `4484a11041f336b96e545e73277ac61a425c7c74` and `merged_at` `2026-10-19T06:37:07Z`. The issue read of objectstack-ai/objectui#12958 returns `state_reason` `completed`. 3. **The three lines exist only at 211–213: HOLDS.** Read on objectstack `origin/main` `7e7e605de`, this branch's base; the dispatch had read `9b2953d62`. `grep -rnE '永不禁下限|首个消费者|下限抬到' --exclude-dir=node_modules --exclude-dir=.git .` gives 3 hits, all `dispatch-runbook.md:211–213`. After the edit, `grep -cE` on the file with the same pattern gives 0. Control: `grep -c '派发词构造细则'` on the same file gives 1. 4. **Rule B stays untouched: HOLDS.** `grep -n 'hold 索引' .claude/skills/pm-dispatch/references/triage-duties.md` hits lines 30 and 31, and that file is not in the diff. Also checked: no file cites a line number inside `dispatch-runbook.md`, so the 3-line shift leaves nothing stale. `git grep -nE 'dispatch-runbook(\.md)?[:#L ]+[0-9]{3}'` finds 0 hits. The tree grep in premise 3 also shows that no test corpus pins the deleted text. ## Gates 17 commands derived by `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` at HEAD `3969b2c3c`, the final commit. This is the same list the dispatch derived at `9b2953d62`. Every command ran at that head, and each exit code was captured before any pipe: ```text node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-comment-mask-corpus.mjs :: exit 0 node scripts/pm/check-harness-current.mjs --self-test :: exit 0 pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 pnpm check:agent-test-spelling :: exit 0 pnpm check:cross-package-test-inputs :: exit 0 pnpm check:doc-authoring :: exit 0 pnpm check:driver-memory-census :: exit 0 pnpm check:gitlink-declared :: exit 0 pnpm check:nul-bytes :: exit 0 pnpm check:pm-governed-merges :: exit 0 pnpm check:pm-skill-id-lint :: exit 0 pnpm check:pm-skill-ratchet :: exit 0 pnpm check:refd-timer-probe :: exit 0 pnpm check:skill-frame-sync :: exit 0 pnpm check:watch-hint-literal :: exit 0 ``` - Ratchet line for this file: `✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/dispatch-runbook.md is 238 lines (ceiling 241; headroom 3).` - `check:doc-formula-expressions` first answered exit 3 (PREREQUISITE NOT MET: the `@objectstack/formula` and `@objectstack/lint` dist were not built). That is not a measurement. Both packages were then built under the verify lock (`VERDICT command-exit 0`), and the re-run answered exit 0. - `--ran` reconciliation: `✓ dispatch-gates --ran: 17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED (a DERIVED zero — all 17 recorded an exit code and none of them is 3).` - Not run locally: - No package is touched, so there is no build closure and no package test or typecheck to run. - `check:dev-prereqs` and `check:skill-frame-freshness` are not owed: the diff touches neither `packages/spec` nor the four-axis frame file. - No ablation: this is a text deletion and no tested behaviour changes. - The CI families are read from this PR's check-runs. - No changeset: `.claude/**` publishes nothing, so `skip-changeset` is declared on create. ## Acceptance notes - No out-of-scope findings. - `origin/main` moved from `9b2953d62` (the dispatch's read) to `7e7e605de` (this branch's base) between the two reads. The target file did not change between them: line numbers, byte counts and the tree grep are identical. ## 维护者速读(草稿) **改了什么** - 删掉派发运行细则里「规则 A」的三行,只删不加。 - 这条规则原本要求:当一张卡的代码最先读到 spec 新版本首发的键时,同一个 PR 必须把消费包的 `@objectstack/spec` 版本下限一起抬上去。 - 规则 B(bump 单的等待卡清单)保持不动。 **为什么改** - 规则 A 现在没有适用对象了。 - 依据是维护者对 objectstack-ai/objectui#12955 的裁决 B:objectui 改为按提交 pin 消费 `@objectstack/*`。 - objectstack-ai/objectui#12958 已经落地这一点(objectstack-ai/objectui#13024 已合并):objectui 发布时按 `.objectstack-sha` 自动算出每个下限,并改写低于下限的版本区间。 - 其余几处也都不需要手抬下限:objectstack 自身全部用 `workspace:` 依赖,hotcrm 逐包写定版本号,cloud 走 pin bump 单。 - 留着这条规则,派发词就会要求开发者手改一个发布时反正会被覆盖的下限,复核时还要去找一个不存在的预期文件。 **风险与代价(含回滚)** - 风险很低:纯文本删除,不涉及任何代码或发布物。 - 文件从 241 行降到 238 行,上限 241 保持不变。 - 回滚:日后如果出现手写版本区间的新消费者,revert 这一个 commit 即可还原。 **席位意见** **你要做的** - 无需操作。本 PR 属于 Tier S,由席位在达档复核 PASS 且全部检查转绿后落地。 - 这段给你知情,你也可以在此期间否决。 --- _Generated by [Claude Code](https://claude.ai/code/session_01HEdP5tPhqQfzwRmKDxwn85)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent fc34d00 commit 9bc4dde

1 file changed

Lines changed: 0 additions & 3 deletions

File tree

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,6 @@
208208
- 文件面两句原文照抄:预期落点是 X。
209209
- 若实测表明真正的生产者在别包,直接按生产者侧修,落点与理由写进报告和 PR 正文。
210210
- 跨包常等于跨车道,PM 事后补跨座位声明。
211-
- 卡的代码首读 spec 发布 R 首发的键、类型成员或运行时行为,即 R 的首个消费者:
212-
- 同 PR 把消费包 `@objectstack/spec` 下限抬到 R,认领文件面点名 manifest 与 lockfile specifier。
213-
- 「不动 pin」只禁 lockfile 解析版本与 `.objectui-sha`/console pin 的移动,⛔ 永不禁下限。
214211
- 模型标识只禁内容工件:PR 标题与正文、代码注释、文档、changeset、评论。
215212
- 豁免:`.claude/agents/*` frontmatter 的 `model:`,`check:agent-model-declared` 要求。
216213
- 新 changeset 文件名用 `<issue>-<slug>.md`,⛔ 不用随机词对名。

0 commit comments

Comments
 (0)