Skip to content

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

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-18755-control-certifies-instrument
Sep 18, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/issue-18755-control-certifies-instrument

Conversation

@os-elon-musk

Copy link
Copy Markdown
Collaborator

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

…the question — a zero-hit reading names the instrument's reach and one known target outside it

The reading discipline caught a dead instrument (control words read zero) but
not a live instrument pointed at a question its domain cannot see: a content
grep with a lit control and a 0 absent control still cannot see a FILE NAME,
and cannot tell a DECLARATION from a MENTION. Two rows in the 平台读数纪律 band
of SKILL.md state the discriminator (reach written by shape, one known target
outside the reach, an out-of-reach zero is not a reading), paid in-band by
folding the landing-operations pointer into the rule it serves and by deleting
the filer/dedupe summary row whose three clauses already live on neighbours;
one twin row in core-rules, paid by compressing the two intro prose lines.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 6450bccb6b8013d0b7d72305d3f8f79af4d8e388

① Derived judgments

  • Surface: .claude/skills/pm-dispatch/SKILL.md (+4 / −4, 812 / 812) and references/core-rules.md (+2 / −2, 151 / 151); two commits (the change, then one origin/main merge at 625db0e85). No published package moves; no contract's accept/reject set moves; the public surface is unchanged. check-governed-merges.mjs --test on the two: GOVERNED, .claude/** ×2 — rules layer.
  • The discriminator (the card's triage row 「控制证明的是仪器,不是问题」) lands as two rows directly under the 双零 rule — SKILL.md :165 「控制通过 ≠ 问题问对:零命中须写仪器可达半径与一个必在半径外的已知目标。」 (107 B) and :166 「半径按形态写(内容/文件名/声明/字段);所求在半径外 ⇒ 零非读数,换看得见它的仪器。」 (116 B) — and as one twin row in core-rules :45 「控制通过 ≠ 问题问对:零命中须写仪器可达半径与半径外已知目标,半径外的零非读数。」 (117 B) under its 零命中/双零 row. Placement correct (the band the card names, adjacent to the rule it extends); the card's two measured incidents (a content grep asked for a FILE NAME; a mention grep asked for a DECLARATION) are both caught by :166's shape list, which is what makes the reader test mechanical. The dispatch's one-row hypothesis holds on bytes (a 117-B single row exists) and fails on the deliverable — the single row drops the shape list and the switch-instrument remedy; two rows, both paid, is the right call.
  • Payment — each retirement read for survivors on the head blob, not by the dev's word: (a) the :175 pointer 「main-red 的跳队例外与事故锚卡约定见 references/landing-operations.md B 节。」 folds into the rule it serves, now :176 「advisory 门禁红着进 main 是共享损伤,任何车道发现都立即止血并立单,见 landing-operations B。」 (118 B): the two conventions it named (the main-red queue-jump exception, the incident anchor card) are untouched in landing-operations B and the sentence that triggers them still points there, in the same short unbackticked form :648 / :655 / :665 / :666 already use; the cost is that 跳队 / 事故锚 no longer appear in SKILL.md (a grep for them reads zero there) — a discoverability cost, no rule lost. (b) the :178 row 「立卡者不查重,只附 3–5 个查重词;分诊按词查自有列表,零命中须控制词背书。」: the filer clause is re-packed onto :180 「立卡者不查重、只附 3–5 查重词;真撞上重复,先比数值与作用域再决定关哪个。」 (107 B); 分诊按词查自有列表 survives at :223 (分诊座位唯一生产 … 查重), :315 (查重缓存住席内 — the list itself) and :366 (跨仓查重); 零命中须控制词背书 IS :163 — nothing left without a home. (c) core-rules :2–:3, two lines of intro prose, compressed to one (114 B): no rule row touched; the dropped words (有约束力的 / 供人工复核 / 参数、事实表与操作配方) are the title's or carried by 细节. core-rules ⊆ SKILL.md holds: the twin row compresses :165–:166 and adds nothing.
  • Serial: the SKILL.md hunks sit at :162–:183, PR skills(pm-dispatch): key the clause-② contract review by lane — spec and skills owe it on every round, other lanes owe none #18903's at :509–:670; core-rules :1–:48 against skills(pm-dispatch): key the clause-② contract review by lane — spec and skills owe it on every round, other lanes owe none #18903's :109 — disjoint, as the dispatch required; whichever lands second merges origin/main before its enqueue.
  • Machine side: none. Seat spot-check on a scratch worktree at this head: check:pm-skill-ratchet exit 0 (812 / 151, both at ceiling), check:pm-skill-id-lint exit 0, check:pm-governed-prose exit 0 (2 surfaces name all 5 registered), check:skill-frame-sync exit 0; lines over 120 bytes 23 / 0, unchanged from origin/main.

② Semver level

  • skip-changeset is correct: .claude/** ships in no package's files[]. Clause-②: no on the claim (5725683048) and in the body; PM_SWEEP_REPO=objectstack-ai/objectstack node scripts/pm/check-clause2-carriers.mjs --pair 18921 at 2026-09-18T06:16Z: exit 0, one live claim, pr-body.clause2-line DECLARED no, no widening tell.

③ Boundary flags

  • Dev flags: no open questions; two noted, not filed items (platform-readings :283 already holds the declaration-shaped regex; check:skill-frame-freshness not derived for this diff, run as an extra, green) — agreed, nothing owed. Deviations accepted: two rows instead of one (above); core-rules :45 not widened in place (117 / 120 B, no room) — the twin is a new row paid by the intro compression, one line outside the band, on no in-flight hunk; the two neighbour folds (:174 → :176, :180); one origin/main merge before the gate run (the four later main commits touch check-half-states.mjs only — the queue rebuild validates it); commit trailers in the repo's model-free form. Gates: 20 derived / 20 run / 0 NOT-MEASURED / 0 UNRUN at this head (check:doc-formula-expressions exit 3 first as PREREQUISITE NOT MET, then 0 after the build under the verify lock); 0 MCP calls; 4 REST writes.
  • CI on this head at 2026-09-18T06:16Z: 13 success · 12 skipped · 4 in_progress (three Type Check lanes, Lint & Repo Gates) — nothing red; the landing act reads it again.

Implemented-by: claude/issue-18755-control-certifies-instrument
Reviewed-by: session_01BTeBejoPUvRHN8WdAJC6oF

VERDICT: PASS


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

维护者速读(终稿)— PR #18921 · 席位定稿 2026-09-18T06:20Z(草稿在正文,以本评论为准)

改了什么:PM 读数纪律加一条判别式,两行,紧跟「零命中须配控制词」「控制词双零 = 仪器坏」之后:控制词通过只证明工具活着,不证明问题问对;报零命中时须写清这个工具能看见哪些形态(文件内容 / 文件名 / 声明 / 字段),并举一个已知存在、这种问法必定看不见的目标;所求落在可达半径之外,这个零就不是读数,换看得见它的工具再报。核心条款同 PR 加一行压缩版。两个文件行数不变(812 / 151)。

为什么改:这一班实测两次同型事故:用内容 grep 判「文件存不存在」(文件名不在内容里),用「哪些文件提到符号」答「哪个文件声明它」(声明与提及在内容 grep 里同形,把 objectql.ts 的声明报成了 views.ts),第二次已写进认领评论当串行围栏用。既有规则全部放行——控制词都亮、缺席控制也读 0——规则内部看不出问题问错。

风险与代价(含回滚):两文件都在棘轮上限,新增行靠删本文件里已在别处说过的内容付账,席位逐行核过幸存:① SKILL.md 那行纯指针(main-red 的跳队例外与事故锚卡见 landing-operations B)折进它服务的止血规则,两个约定原文不动、触发它们的那句仍指向 B,代价只是「跳队 / 事故锚」两个词在 SKILL.md 里搜不到了;② 一行三句皆有重复的汇总行退掉,「立卡者附查重词」挪到相邻查重规则,「分诊按词查自有列表」「零命中须控制词背书」各在别处仍在;③ 核心条款两行说明文字压成一行,无规则降级。门禁全绿。与在等你批准的 PR #18903 同文件不同行段,谁后落谁先合 main。回滚 = revert 一个提交。

席位意见:建议批准。派发时我假设一行能装下,dev 实测一行装得下字节、装不下「形态清单」和「换仪器」两个动作,两行更对——形态清单正是让读者测试可机械化的部分。

你要做的:确认这条判别式该进 PM 读数纪律,是则 APPROVE(GOVERNED_APPROVERS 账户);之后由本席按裁决 C 落地。


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

Landing record — ruling C, on an authorized APPROVED (skills seat, session_01BTeBejoPUvRHN8WdAJC6oF) · 2026-09-18T11:25Z

os-zhuang (GOVERNED_APPROVERS) approved this PR (review 5247217859 at 2026-09-18T11:23Z), marked it ready at 2026-09-18T11:23Z and added it to the merge queue at 2026-09-18T11:23Z — the two CCR calls this seat's channel could not make, made by the approver's own hand. The seat's pre-landing reads on head 6450bccb6b: the review of record 5726029614 names this head; PM_SWEEP_REPO=objectstack-ai/objectstack node scripts/pm/check-clause2-carriers.mjs --pair 18921 exit 0 (card #18755); checks at 2026-09-18T11:25Z: 19 success · 16 skipped, none red. Parallel draft beside PR #18903 on SKILL.md and core-rules with disjoint hunks — PR #18903 (still draft, unreviewed) merges `origin/main` before it lands; the SKILL.md 平台读数纪律 band this PR rewrites lifts the serial on #18958 once the merge lands. needs-user-decision cleared by the seat now (the decision it marked has been made). The merge is the queue's; the card closes on it, and the seat clears its pm:dispatched / assignee residue after the merge lands.


Generated by Claude Code

Merged via the queue into main with commit 37ca54a Sep 18, 2026
39 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-18755-control-certifies-instrument branch September 18, 2026 11:46
This was referenced Sep 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants