Repository navigation
Commit ef9557c
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
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
0 commit comments