Skip to content

Commit ef9557c

Browse files
docs(pm-dispatch): the dispatch-gates freeze admits derivation-truth fixes (#24258)
Fixes #24171 Clause-②: no Executes term 1 of ruling 6243472660 on the card (letter B, the maintainer's 「24171 B」, 2026-10-18). `.claude/skills/pm-dispatch/references/instrument-discipline.md` L10 is narrowed in place with no new line, and L12 records the narrowing ruling beside ruling 208. One file, +2/−2. The file has 12 lines before and after. ## What changed L10, before and after: ```text - 工具位只有一个,先花在删除上;`dispatch-gates.mjs` 冻结,只在它喂的 workflow 坏了时碰。 - 工具位只有一个,先花在删除上;`dispatch-gates.mjs` 冻结,只在它喂的 workflow 坏了或推导失真时碰:输出须与 CI 实跑一致(含从既有门禁自己的扫描根推导它),⛔ 不新增门禁、推导行、棘轮、`--tier` 强制档或常量。 ``` L12, before and after: ```text - 裁决记录:裁决 208,卡 19491,评论 5755284987(编号不带 # 前缀,id-lint 拒)。 - 裁决记录:裁决 208,卡 19491,评论 5755284987;2026-10-18 收窄裁决:维护者逐字「24171 B」,卡 24171,评论 6243472660(编号不带 # 前缀,id-lint 拒)。 ``` How each clause of ruling term 1 maps onto the new L10: - "derivation-truth fixes are allowed under the freeze": the freeze's one exception gains a second one, 「或推导失真时碰」. - "The tool's output must be true of what CI runs": 「输出须与 CI 实跑一致」. - "including deriving an existing gate from its own scan roots": 「含从既有门禁自己的扫描根推导它」. - "No new gate, row, ratchet, `--tier` mandate or constant": 「⛔ 不新增门禁、推导行、棘轮、`--tier` 强制档或常量」. "Row" is written 推导行 (a derived row, which is the sense of the ruling's terms 2 and 3), so nobody reads it as a text line. "`--tier` mandate" is written 强制档, meaning the `MANDATORY_TIER_GLOB_ROWS` rows in `dispatch-gates`. - "Ruling 208 R6's other clauses stand": the slot sentence 「工具位只有一个,先花在删除上」, the freeze and the original workflow exception are kept word for word. - Provenance: L12 cites the ruling by comment id with no hash prefix, which is the id-lint convention L12 already uses. ## Line width (measured) - Before the edit, the widest line in the file was 111 bytes (L5 and L10). After it, L10 is 273 bytes and L12 is 172 bytes. - The file has no `CEILINGS` row in `scripts/pm/check-skill-line-ratchet.mjs`. The 120-byte max-line-length rule binds only files with a row, so it does not read this one. - The ruling's 「no new line」 outranks the file's habit of keeping lines at 120 bytes or less. So the sentence was tightened instead of split. - The PM's suggested spelling measured 264 bytes. The landed one is 9 bytes longer: 推导行 instead of a bare 行 (+6), and 强制档或 instead of 档位与 (+3). ## Verification at head 50b11c7 The derivation ran with no paths: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`. Its change set came from merge base f5ef054 (1 path, +2/−2). It names 16 commands, the same list as the path-derived run at f5ef054. All 16 ran locally, and each exit code was captured before any pipe: | command | 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 (the first run exited 3, PREREQUISITE NOT MET, because formula and lint were not built; after building them under the verify lock, VERDICT command-exit 0, the re-run exited 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:gitlink-declared` | 0 | | `pnpm check:nul-bytes` | 0 | | `pnpm check:pm-governed-merges` | 0 | | `pnpm check:pm-skill-id-lint` | 0 (87 files clean) | | `pnpm check:refd-timer-probe` | 0 | | `pnpm check:skill-frame-sync` | 0 | | `pnpm check:watch-hint-literal` | 0 | The `--ran` reconciliation used the exit-coded record and printed: "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)". Outside the derivation, `pnpm check:pm-skill-ratchet` exited 0. Its output names this file 0 times, which confirms the ratchet does not read it. Card premise re-check after the edit: `grep -c "冻结"` gives 1 and `grep -c "工具位"` gives 2. The second count was already 2 on origin/main f5ef054, because L3 also contains the word. Not run locally: `check:dev-prereqs` and `check:skill-frame-freshness`, the two local-only families. The diff touches neither `packages/spec` nor the copy of the decision frame in SKILL.md. Everything outside the 16 runs in CI. No changeset: `.claude/**` publishes nothing, and `skip-changeset` is declared in the same call that creates this PR. ## Acceptance notes - Assumption (a) holds: this file has no `CEILINGS` row. The dispatch order expected `pnpm check:pm-skill-ratchet` in the derived list, but it is not there. It was run anyway and passed. - Assumption (b): `git grep -n "冻结" -- .claude scripts/pm` finds 4 hits. The other 3 (compile-surfaces.md twice, lanes/devx.md once) use the word for something unrelated. No script or text quotes L10. The only file that names this one is reading-discipline.md L26, a pointer line that is still accurate. L12 avoids the word 冻结 so that the card's premise re-check still reads 1. - Assumption (c): the two sibling worktrees in this container (cards 24037 and 24241) do not touch this file. - Observation (no card, no carrier; 承接者:无): the ratchet header says its `CEILINGS` enumeration covers "the pm-dispatch surface (SKILL.md, its references/, the per-lane job descriptions)". Its self-test also calls `compile-surfaces.md` "the last uncovered pm-dispatch references file". Today, though, `references/instrument-discipline.md` and `references/external-contributions.md` have no row. The same header says absence is "a fact to check, not an oversight to infer", so this is prose drifting from the map, not a defect. - Observation for the contract review: the Chinese option B in the card body (the text the 速读 showed) reads 「不动 `--tier` 档位表与常量」, which means "do not touch". The ruling record's term 1 reads "No new ... `--tier` mandate or constant". As the dispatch order requires, this PR follows the ruling record word for word. ## 维护者速读(草稿) - **改了什么:** 仪器纪律文件里 `dispatch-gates.mjs` 冻结那一行原地改写,没有加行,文件仍是 12 行。冻结照旧。原来只有「它喂的 workflow 坏了」时可以动它,现在「推导失真」时也可以:工具说 CI 会跑什么,必须和 CI 实际跑的一致,包括按既有门禁自己的扫描根推导它。同一句明写:不准借此新增门禁、推导行、棘轮、`--tier` 强制档或常量。出处行补记了本次收窄裁决(评论 6243472660,您的「24171 B」)。 - **为什么改:** 执行您 2026-10-18 的裁决 B。按字面冻结,两张"让推导说真话"的卡(24037、24073)派不出去,而工具确实在对 dev 说假话:一次让 main 红了一轮,一次让本地 98/98 对账全绿而 CI 是红的。 - **风险与代价(含回滚):** 只改了一份给内部 agent 读的文档,不发布,不影响产品代码和 CI。风险是有人把"推导失真"宽读成扩张工具的口子,所以句中明写了四个"不新增"。这一行偏长(273 字节,其余行在 111 字节以内),因为裁决要求不加新行;该文件不在行数棘轮内,门禁不受影响。回滚就是 revert 本 PR 的一个提交。 - **席位意见:** - **你要做的:** 不需要操作。席位做完契约档复核后自行落地。如果对措辞有意见(比如「推导行」「强制档」的译法),在 PR 上说一句即可。 --- _Generated by [Claude Code](https://claude.ai/code/session_01QBcLjVCmcWbZEk6qhYMib2)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent e9bc60b commit ef9557c

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

‎.claude/skills/pm-dispatch/references/instrument-discipline.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
- 放宽 tell(C5)不设仪器,Clause-② 的方向由达档复核裁。
88
- 只报告的仪器不配 dev:⛔ 不立卡、不派 dev、不开 PR;它的在途工作只有删除。
99
- 新增门禁、巡查行或棘轮须在卡上引维护者原话,⛔ 无原话不新增;首行四件恒硬。
10-
- 工具位只有一个,先花在删除上;`dispatch-gates.mjs` 冻结,只在它喂的 workflow 坏了时碰。
10+
- 工具位只有一个,先花在删除上;`dispatch-gates.mjs` 冻结,只在它喂的 workflow 坏了或推导失真时碰:输出须与 CI 实跑一致(含从既有门禁自己的扫描根推导它),⛔ 不新增门禁、推导行、棘轮、`--tier` 强制档或常量。
1111
- 出处:维护者 2026-09-21 逐字「19491 接受你的建议,并立刻派发处理相关任务。」
12-
- 裁决记录:裁决 208,卡 19491,评论 5755284987(编号不带 # 前缀,id-lint 拒)。
12+
- 裁决记录:裁决 208,卡 19491,评论 5755284987;2026-10-18 收窄裁决:维护者逐字「24171 B」,卡 24171,评论 6243472660(编号不带 # 前缀,id-lint 拒)。

0 commit comments

Comments
 (0)