Repository navigation
docs(agents): an inertness claim needs a runtime reading, and any population-size reading needs a control - #9226
Conversation
…ontrol for any population-size reading Two rules land in the section 9 reading-discipline cluster. 1. The control requirement is widened in place. A non-empty result was treated as self-verifying; it only verifies that the channel is alive, never the size it reports. Any reading that claims a population size -- a zero or a count -- now needs a control that fires in the same run, and the non-zero failure mode (a pattern anchored to a boundary the data does not respect returns a confident count) is named beside it. A published command must also be reproducible in the form it was printed in: a distilled input that is not written down does not exist. 2. A new block states that a source grep cannot answer "no renderer reads this declared key". The runtime hands a node's leftover keys to the component as React props, so a renderer can consume a key it never names; the instrument is a runtime reading, and the parity ledger's RUNTIME SLOT entries are the list to consult first. Both rules point at their instrument and never at its answer, per commandment #9. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MCLBsUgfykL74aU716rzVK
维护者速读(终稿)改了什么 — objectui 为什么改 — 两条都是分诊席已裁的方向,本 PR 只是写下来。拓宽那条来自一天四次实测:一个自信的计数和一个自信的零一样不可证伪,而计数更难看见。新增那节来自已经发生过一次的代价:一张卡凭 grep 的零判定某键已死,差点撤掉一个正在工作的已发布行为(#8236),靠 dev 编辑前停手才没成事。 风险与代价(含回滚) — 两条规则只拒绝「本来就不成立」的声称,不封闭任何选择、不新增机械门禁(两个裁决都明确排除建门)。文件从 572 行到 577 行;文件里没有写下任何计数,规则只指仪器不写答案(本仓第 9 条诫命)。回滚 = revert 一个提交。 席位意见 — 席内按契约复审档复核通过:两条规则与各自裁决的承认范围一一对应,没有越界(无门、无键枚举、无站点扫描);dev 把派发里的每条前提都带对照重测,还纠正了本席一条错误假设并如实上报。一处提请你注意:新增小节挂在「Actions workflow 注册表」那个 你要做的 — 受管面( Generated by Claude Code |
Fixes #8410
Fixes #8492
Two evidentiary rules for objectui
AGENTS.mdsection 9, both written as the rulings limited them: option 1 only on the head card (5582275228), answer B as limited on the member (5582320343). No gate, no key enumeration, no doc-site sweep — all three were refused by those rulings.Net +5 lines (572 → 577), against the dispatch budget of +8. One file changed.
The two rules
1. The control requirement, widened in place (member card). The existing bullet said a non-empty result self-verifies and needs no control. Measured against this family's own evidence that is too strong: a non-empty result verifies only that the channel is alive, never the size it reports. The clause now reaches any reading that claims a population size — a zero or a count — and the non-zero failure mode is named beside it: a pattern anchored to a boundary the data does not respect returns a confident count, over-counting prose or missing another spelling, and a number reads exactly like a successful measurement. A second bullet adds the printed-form half: a published command must be reproducible in the form it was printed in, because a distilled input nobody wrote down leaves the next reader re-running the published line and getting a confident zero — which here reads as "the finding does not exist".
2. A source grep cannot answer "no renderer reads this declared key" (head card). A new
####block in the same cluster.SchemaRendererhands a node's leftover keys to the component as React props, so a renderer can consume a key it never names; aschema.KEYgrep cannot see that channel and returns a confident zero. Agrep -lfor the rest-spread is not the instrument either — forwarding and non-forwarding renderers both match, and the granularity is the render function's signature, not the file. The rule requires a runtime reading instead: the objectui#6158 instrument (next build, then read the prerendered HTML) or a real-SchemaRenderer-plus-real-registry probe varying one key. It points at the parity ledger'sRUNTIME SLOTentries as the list to consult before re-measuring a ruled retirement.Both rules obey commandment #9: they name the instrument and never its answer. No count is written into the file — not the ledger's entry count, not the strip-list size, not the 83-of-185 bound, and the rule says in as many words that the affected keys are ⛔ not to be enumerated from it.
Readings re-verified on
b775500afbefore the edit, each with its control阳性对照→ 2 hits阳性对照over the identical file list → 1 fileRUNTIME SLOT→ 0,rest-spread→ 0,6158→ 0;SchemaRenderer→ 5, but all five are topology/pattern prose, none an evidentiary rule阳性对照→ 2 hitsRUNTIME SLOTentriespackages/types/src/__tests__/zod-mirror-parity.test.ts—Gates
node scripts/check-governed-queue-guard.mjs --test AGENTS.md⛔ GOVERNED — 1 of 1 path(s) are on a governed surfacepnpm check:new-line-citationsVERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0(4 synthetic controls PASS)pnpm check:control-bytes✅ check-control-bytes: OK (scanned 7408 tracked text file(s))pnpm check:shell-escape-residue✅ check-shell-escape-residue: OK (5/5 root(s) resolved — AGENTS.md: 15 fence(s))node scripts/check-changeset-presence.mjs✅ No source or published contract of a released package changed in this range, so no changeset is owed.node scripts/check-doc-links.mjsLinks are valid across 17 scan roots.node scripts/check-bash32-floor.mjs✓ check-bash32-floor: … floor bash 3.2(its population is this file's fences)pnpm check:comment-mask-corpusPREREQUISITE NOT MET— NOT MEASURED, needspnpm install. Its corpus isSOURCE_EXTENSIONS(.ts/.tsx/.mts/.cts/.js/.mjs/.cjs/.jsx); a markdown-only diff cannot move its input, so CI's answer is unchanged by this branch.No changeset is added: the presence gate says none is owed, and ⛔ the
skip-changesetlabel is never applied in this repository.维护者速读(草稿)
改了什么 — objectui
AGENTS.md第 9 节的「读数纪律」那一簇,净增 5 行、一个文件。第一处是就地拓宽已有的那条对照要求:原文说「非空结果自我验证,不需要对照」,现在改成「非空结果只自我验证通道还活着,不验证它报出来的那个大小」,任何声称总体大小的读数(一个零或一个计数)都要在同一次运行里带一个会响的对照;旁边新加一条:一条被发布的命令,必须在它被印出的那个形态下可复现。第二处是新增一个小节:主张「某个声明键没有渲染器读」的卡,必须带一次运行期读数,源码 grep 不算。为什么改 — 两条都是分诊席已经裁定过的方向,这个 PR 只是把裁决写下来,不重开任何判断。拓宽那条来自一个实测:一个自信的计数和一个自信的零一样不可证伪,而计数更难看见,因为数字读上去就像一次成功的测量。新增那节来自一次已经发生过的代价:一张卡凭一次 grep 的零判定某个键是死的,而运行时其实是把节点剩下的键当 React props 交给组件的 —— 那次退役裁定建立在假前提上,靠 dev 在第一次编辑前停手才没有撤掉一个正在工作的已发布行为。
风险与代价(含回滚) — 风险低:两条规则都只拒绝「本来就不成立」的声称,不封闭任何选择,也不新增任何机械门禁(建门这条被两个裁决都明确排除了)。代价是这一簇又长了 5 行,而这个文件已经 577 行;缓解是两条都写成自含句子并各自带上失败形态,不需要读上下文就能用。回滚 = revert 这一个提交,没有任何代码、生成物或发布面依赖它。
席位意见 —
你要做的 — 这是受管面(
AGENTS.md),PR 停在 draft、等你合并,你的那次合并动作本身就是审核记录。请特别看两处措辞:① 拓宽后的那句是否把「非空结果」说得太严(它现在只保证「通道活着」);② 新增小节挂在「Actions workflow 注册表」那个###之下 —— 它和 workflow 无关,是跟着这一簇的读数纪律走的,若你希望它单独成节请直说。Drafted by the skills seat, session
session_01MCLBsUgfykL74aU716rzVK; the anchor claim is comment 5642462310 on the head card.Generated by Claude Code