Commit 9c93465
它的文件头原话是"confirms the objectui components ACTUALLY implement the props the
spec protocol declares"。它做不到,也从来没做过。它 diff 的两边都是**声明**:左边是
spec zod schema 的 props,右边是 objectui 注册表配置声明的 inputs——由
`manifestFromConfigs` 原样抄进 sdui.manifest.json。整条链路里没有渲染器。所以一个
**两边都声明、没有任何东西读**的 prop,在这道门禁眼里是完美一致。
#4413 就是代价:四个 record:* 块发布了没人读的 objectName/recordId,在
kind:'react' 页面上渲染成 "bind a record to preview" 占位符,而 baseline 里
`{ "frontendOnly": [], "missing": false }` 稳稳绿了整个缺陷存续期。最后是人肉读
objectui 渲染器发现的。**一道报绿的假门禁比没有门禁更危险**——没有门禁时人会去核对。
Prime Directive #10(declared ≠ enforced)落在本该抓 #10 的东西自己身上,和 #1475
「spec 声明 9 种校验规则、执行器只认 3 种」同形。
- 改名到它真正做的事,名字和文件头一起改(名字本身是误信任的一部分):
check-react-blocks-declaration-parity.ts、react-declaration-parity.baseline.json,
baseline 键 frontendOnly → registryOnly(是"注册表声明了",不是"前端实现了")。
- 作用域说明随**每一次**输出走,包括绿的那次。对这道门禁形成判断的人读的是 CI 日志,
不是文件头。
- 它现在真的 gate。gen-sdui-manifest.sh 调用时没传 --strict,还把退出码吞进一个 ⚠,
所以连它看得见的那部分也只是被记录、从未被拦住(#4472 次要发现 1)。ratchet 只对
相对 baseline 的**新增**分歧开火,所以失败必定是一次有意的注册表改动。
- 声明由测试钉住。check-react-blocks-declaration-parity.test.ts 断言它能看见的两个
方向、caveat 确实被打印、以及那句"实现"声明不会回来——Prime Directive #10 可执行的
那一半。
它看得见的东西没变,也仍然值得留着:spec-only(palette 缺口,软信号)、registry-only
(未文档化的扩展,被 ratchet)、missing(没注册/非 public)。看不见的只有一类:两边都
声明了,没人读。
渲染路径上的证据只能从渲染路径上取,那是 objectui 那侧。那里的
public-block-binding-reach.test.tsx 把每个声明了 objectName 的 public block 挂在一个
会记录调用的 dataSource 下,断言绑定确实到达了数据层;首跑就把五个绑上的和三个没绑上
的分开,并暴露两个同形真缺陷(objectui#3144)——这恰好证明这类证据在 spec 侧从来取不到。
ADR-0082 带 addendum;2026-06 那份 audit 顶上加了更正横幅,指出那句让整件事看起来安全的
假设("the component reads its full config from the spec schema at render")是预期,
从未被测量。
Closes #4472
Claude-Session: https://claude.ai/code/session_01S3cP1eY1novcNhQEDBrSZD
Co-authored-by: Claude <noreply@anthropic.com>
1 parent f3141d8 commit 9c93465
13 files changed
Lines changed: 573 additions & 231 deletions
File tree
- .changeset
- docs
- adr
- audits
- packages/spec
- scripts
- scripts
Lines changed: 50 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
342 | 342 | | |
343 | 343 | | |
344 | 344 | | |
345 | | - | |
346 | | - | |
347 | | - | |
348 | | - | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
349 | 359 | | |
350 | 360 | | |
351 | 361 | | |
| |||
0 commit comments