Skip to content

Commit 37ca54a

Browse files
os-elon-muskclaude
andauthored
skills(pm-dispatch): a passing control certifies the instrument, not the question — a zero-hit reading names the instrument's reach and one known target outside it (#18921)
Fixes #18755 Clause-②: no ## What the rows add The 平台读数纪律 band pairs every zero with a lit control on the same instrument and reads two zeros on one instrument as a dead instrument (SKILL.md :163–:164, core-rules :45). That catches a DEAD instrument. It does not catch a LIVE instrument pointed at a question its domain cannot see, and from inside the rule the two look identical. The card measured it twice: a content `git grep` with a lit control (53 files) and an absent control (0) read 1 for a test suite that exists — the suite's name is a FILE NAME, which a content grep cannot see; and `git grep -l NamedListView` (16 mentioning files, both controls fine) answered "which file DECLARES it" with `views.ts` when the declaration is in `objectql.ts` — a content grep cannot tell a declaration from a mention. The deliverable's shape is the triage's (comment 5720454579, verbatim): 「承接席:交付物是**判别式**,⛔ 不是口号 —— 要能回答「我这个零,是仪器活着,还是问题问对了」。建议至少包含:**该工具在语料上的可达半径**(它**能**看见哪些形态),以及**一个必然落在半径之外的反例**(一个已知存在、但该问法必定看不见的目标)。」 The filer proposed no wording (「⛔ No rule text is proposed here; the gap is the product」); the wording here is mine. **SKILL.md, 平台读数纪律, directly under the 双零 rule** (bytes measured with `len(line.encode())`, leading `- ` included): - `- 控制通过 ≠ 问题问对:零命中须写仪器可达半径与一个必在半径外的已知目标。` — 107 B - `- 半径按形态写(内容/文件名/声明/字段);所求在半径外 ⇒ 零非读数,换看得见它的仪器。` — 116 B **core-rules, 平台读数纪律, directly under its 零命中/双零 row** (the twin, compressed): - `- 控制通过 ≠ 问题问对:零命中须写仪器可达半径与半径外已知目标,半径外的零非读数。` — 117 B The discriminator is a test the seat performs, not a slogan: (1) write the instrument's reach BY SHAPE — contents, file names, declarations, API fields; (2) name one target known to exist that this asking cannot see; (3) if the sought target is a shape outside that reach, the zero is not a reading — switch to an instrument whose reach contains the shape. The head clause is the sibling sentence the triage asked for beside 「不可验证 ≠ 被违反」; the `≠` spelling already lives on the file (`declared ≠ enforced`, :369). ## Reader test — both instances answered by the rows alone A seat holding 「content grep, lit control fired, absent control 0, target 0」 reads the rows: 1. **File existence by name.** Row 2 makes the seat write the reach by shape: `git grep` sees 内容. The sought thing is a 文件名 — a shape on the list and not the one written — so 所求在半径外 ⇒ the zero is not a reading, and the row sends the seat to an instrument whose reach contains file names (`git ls-tree` / `git ls-files`). Row 1's counterexample obligation produces the same answer from the other side: a target known to exist that a content grep cannot see is exactly "a file whose name no file body mentions" — the very target being sought. 2. **Which file declares a symbol.** Reach by shape: a content grep sees 内容 (mentions). The sought thing is a 声明 — on the list, not the reach — so the 16-file answer is not a reading of "declares", and the seat switches to a declaration-shaped read (the `^(export )?(const|type|interface) NAME` spelling already recorded in `references/platform-readings.md`, 读数六坑 ③). The known-existing target outside the reach: the one declaring file among the sixteen, which the mention grep cannot single out. Neither answer needs the card, the reference, or the triage comment — the shape list on row 2 is what makes the question 「can this instrument see a file name / a declaration?」 mechanical rather than a matter of the seat's imagination. ## Line budget — both files at headroom 0, ratchet's own lines quoted ``` ✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom 0). ✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/core-rules.md is 151 lines (ceiling 151; headroom 0). ``` SKILL.md 812 → 812 (+2 rows, −2 rows, both retirements in-band, both paid by deleting content that survives on a neighbour — ⛔ no re-wrap): - **Retired :175** 「main-red 的跳队例外与事故锚卡约定见 `references/landing-operations.md` B 节。」 — a pointer, not a rule. The two 约定 it points at are unchanged in landing-operations B; the pointer folds into the adjacent rule it serves, :174 → 「advisory 门禁红着进 main 是共享损伤,任何车道发现都立即止血并立单,见 landing-operations B。」 (118 B). - **Retired :178** 「立卡者不查重,只附 3–5 个查重词;分诊按词查自有列表,零命中须控制词背书。」 — three clauses, each already stated on the file: 「零命中须控制词背书」 IS :163; 「分诊按词查自有列表」 is :315 (查重缓存住席内) and :366 (跨仓查重); the filer clause is re-packed onto the adjacent duplicate rule, :180 → 「立卡者不查重、只附 3–5 查重词;真撞上重复,先比数值与作用域再决定关哪个。」 (107 B), and also lives at os-dev.md :50 and core-rules :80. core-rules 151 → 151 (+1 twin row, −1 line): the two intro PROSE lines (:2–:3, not rules) compress into one, 「每行一条规则,按 SKILL.md 章节分组;细节以 SKILL.md 与其它 references 为准,⛔ 不新增规则。」 (114 B). Dropped words: 有约束力的 (the file is 核心条款 by title), 供人工复核 (the title says 人读摘要), 参数、事实表与操作配方 (→ 细节), 同目录. No rule row was demoted. Why not the in-place widening of core-rules :45 the dispatch preferred: :45 is 117/120 B (3 B of headroom); the shortest one-row form carrying reach + counterexample + consequence measures 115 B on its own, so it cannot share a line with :45. Why two SKILL.md rows and not one: a 117 B single row exists (「控制通过 ≠ 问题问对:零命中须写仪器可达半径与半径外已知目标,半径外之零非读数。」) but drops the shape list and the switch-instrument remedy, and the shape list is what answers the reader test above mechanically; both rows are paid. ## Subset relation, held by hand core-rules ⊆ SKILL.md is enforced by no gate. The twin row compresses the two SKILL.md rows and states nothing they do not. Every clause of the two retired SKILL.md rows survives on the lines named above, so core-rules :80 (「立卡者不查重、只附查重词」) keeps its SKILL.md source (:223, the re-packed :180, :777). The four-axis block (SKILL.md :733–:754) is untouched; `check:skill-frame-sync` and `check:skill-frame-freshness` are green. ## In-flight overlap Draft PR #18903 (card #18536) is open on both files. Its hunks: SKILL.md :512, :522, :636–:646 and the retired :672; core-rules :112. This PR's hunks: SKILL.md :164–:166, :174–:175, :178–:180; core-rules :2–:3, :45–:46 — disjoint. `origin/main` was merged at 625db0e (merge commit 6450bcc) and the gates below ran on that head; the four `main` commits that landed after it touch only `scripts/pm/check-half-states.mjs`. ## Gates — derived, run, reconciled at 6450bcc `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths; the change set from the merge base) derived 20 commands, identical before and after the `main` merge. Every one was run with its exit code captured before any pipe; reconciliation: `Run reconciliation — 20 derived, 20 run, 0 NOT-MEASURED, 0 UNRUN.` All 20 exit 0. One needed its declared prerequisite first: `pnpm --filter @objectstack/lint run check:doc-formula-expressions` exited 3 (`PREREQUISITE NOT MET` — `@objectstack/formula` and `@objectstack/lint` not built; nothing measured), the build ran under `os-verify-lock.sh` (`VERDICT command-exit 0 · held the lock 147s`), and the re-run exited 0. Verdict lines: ``` ✓ check-skill-id-lint: 27 file(s) clean (pattern /#[0-9]{3,}/g). ✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces … and claim no others. ✓ check-skill-frame-sync: the one declared copy of the decision frame is internally coherent (.claude/skills/pm-dispatch/SKILL.md; …) check-nul-bytes: OK (scanned 8886 text file(s) … no raw ASCII control bytes). ``` Extra, named by the dispatch and not derived: `pnpm check:skill-frame-freshness` — exit 0 (「the frame itself is unchanged — that is fine」). ## skip-changeset Nothing publishes: both paths are under `.claude/**`, a fast-lane unpublished surface in no package's `files[]`. ## Acceptance notes - noted, not filed: `references/platform-readings.md` :283 already carries the declaration-shaped regex as the harder instrument for the mention-vs-declaration case; the new row sends the seat to "an instrument whose reach contains the shape" and the reference holds the spelling — no change owed there. 承接者:无. - noted, not filed: `check:skill-frame-freshness` is not in the derived list for a diff on these two files while `check:skill-frame-sync` is; run as an extra, green. 承接者:无. ## 维护者速读(草稿) **改了什么**:PM 读数纪律里加了一条判别式,分两行写在「零命中须配控制词」「控制词双零 = 仪器坏」之后:控制词通过只证明工具是活的,不证明问题问对了;报一个零命中时,要写清这个工具在语料上能看见哪些形态(文件内容 / 文件名 / 声明 / 接口字段),并举一个已知存在、这种问法却必定看不见的目标;所求的东西落在可达半径之外,这个零就不是读数,换一个看得见它的工具再报。核心条款同 PR 加一行压缩版。 **为什么改**:这一班量到两次同型事故——用文件内容 grep 去判「这个文件存不存在」(文件名不在内容里,读 1 个命中而文件明明存在),用「哪些文件提到这个符号」去答「哪个文件声明它」(声明和提及在内容 grep 里长得一样,把 `views.ts` 报成了 `objectql.ts` 的活),第二次已经写进认领评论、当成串行围栏用了。既有规则对这两次全部放行:控制词都点亮了、缺席控制也读 0,规则内部看不出问题问错。 **风险与代价(含回滚)**:两个文件都在行数棘轮上限(812 / 151),新增行靠删同文件里已在别处说过的内容付账:SKILL.md 退掉一行纯指针(内容折进它服务的止血规则)和一行三句皆有重复的汇总行(立卡者附查重词那句挪到相邻的查重规则上);核心条款把两行说明文字压成一行。没有规则被降级或删除,门禁全绿。回滚 = revert 这一个提交。 **席位意见**:(留空,由席位定稿) **你要做的**:一个动作——审阅并批准这个 draft PR(受管面 `.claude/**`,需要维护者的批准后由席位落地)。 --- _Generated by [Claude Code](https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7e20f05 commit 37ca54a

2 files changed

Lines changed: 6 additions & 6 deletions

File tree

‎.claude/skills/pm-dispatch/SKILL.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
162162
- ⛔ 不用共享检出的工作树核验 main,它的 HEAD 由别的 agent 摆布。
163163
- 零命中须配同主体必中词,否则该零作废;同主体 = 同语料/路径形/包界/引法/失效形态。
164164
- 同仪器的控制词双零是仪器坏,⛔ 不读作缺席:换法重画再报;哑火仪器与干净结果同值。
165+
- 控制通过 ≠ 问题问对:零命中须写仪器可达半径与一个必在半径外的已知目标。
166+
- 半径按形态写(内容/文件名/声明/字段);所求在半径外 ⇒ 零非读数,换看得见它的仪器。
165167
- 他人据以行动的读数须带单位并答什么本来会让它不是这个值;递 dev 的恒标线索非答案。
166168
- ⛔ 自用即弃的探针不欠此税;「不是这个值」的答案取逐字工件或具名反例。
167169
- 仓不可达 ⛔ 不当查过了干净:在 issue 上贴出给对应座位的现成命令,等读数回贴再派。
@@ -171,13 +173,11 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
171173
- 自设定时器的文本以先重读状态开头,只写关键判据(若 X 则 Y),其余指针化。
172174
- 定时器文本 ⛔ 不写结论、不含未经重读即可执行的祈使句。
173175
- 放行认门禁 job 的结论(`completed: success`),⛔ 不认聚合读数。
174-
- advisory 门禁红着进 main 是共享损伤,任何车道发现都立即止血并立单。
175-
- main-red 的跳队例外与事故锚卡约定见 `references/landing-operations.md` B 节。
176+
- advisory 门禁红着进 main 是共享损伤,任何车道发现都立即止血并立单,见 landing-operations B。
176177
- dev 自己死了不等于维护者中止:子代理消失是正常死法,走死认领回收。
177178
- 维护者中止只认原话或宿主回报 stopped by the user,⛔ 不据推断立无重启条件的门。
178-
- 立卡者不查重,只附 3–5 个查重词;分诊按词查自有列表,零命中须控制词背书。
179179
- 共享基础设施修复入队前按症状复查 main,不按 issue 号。
180-
- 真撞上重复,先比数值与作用域再决定关哪个。
180+
- 立卡者不查重、只附 3–5 查重词;真撞上重复,先比数值与作用域再决定关哪个。
181181
- sweep 晋级与立卡的前提要对此刻的 main;dev 带证据的零实现停手是好产出,不当返工计。
182182
- 裁决明令的动作实施中测出对向事实 ⇒ 照字面执行,被打断行为的 pin 反转为拒绝 pin。
183183
- 对向事实下 ⛔ 同 PR 不做任何 promote/回退;pin 是反转不是删除。

‎.claude/skills/pm-dispatch/references/core-rules.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# PM 核心条款(人读摘要)
2-
每行一条有约束力的规则,按 PM 语料自身的章节分组,供人工复核。
3-
细节参数、事实表与操作配方仍以 SKILL.md 与同目录其它 references 为准;本文不新增规则。
2+
每行一条规则,按 SKILL.md 章节分组;细节以 SKILL.md 与其它 references 为准,⛔ 不新增规则。
43
## 红线
54
- PM 不写任何文件;⛔ 永不合自己的、红的或未复核的 PR,合并只经合并队列发生。
65
- 版本发布必须人工,发现未经人工的发布痕迹按事故立案,⛔ 不代跑补救性发布。
@@ -43,6 +42,7 @@
4342
- 判据取命令输出,⛔ 不取 API 字段字面值、不取本地工作树、不取看着相邻的日志。
4443
- 核验 main 用 fetch 后的 `origin/main`,⛔ 不用共享检出树;仓不可达 ⛔ 不当查过且干净。
4544
- 零命中须配同主体必中词,否则该零作废;同仪器的控制词双零是仪器坏,⛔ 不读作缺席。
45+
- 控制通过 ≠ 问题问对:零命中须写仪器可达半径与半径外已知目标,半径外的零非读数。
4646
- 他人据以行动的读数须带单位并答什么本来会让它不是这个值;递 dev 的恒标线索非答案。
4747
- 板面、树与队列读数一律自带 UTC 取数时刻,无时间戳的读数按未取处理。
4848
- 失效修法按序取:先删掉容许出错的构造,再让正确形态成为唯一拼写,最后才加检查。

0 commit comments

Comments
 (0)