Repository navigation
ui/ 五个交互配置文件(22 个 z.object 站点)没有任何承载键:实测「无授权门」,按 ADR-0049 定去留 #4988
Description
Activity
xuyushun441-sys commented
on Aug 4, 2026 CollaboratorAuthorMore actions维护者裁决(2026-08-04):A —— 退役(经三轴复评确认)
touch/dnd/keyboard/animation/offline 五文件 22 站点整体退役,参考文档随删。业务定性:这五类是渲染器内建行为,不是作者逐页配置的元数据(离线是平台级能力,真做时词表长在同步引擎上);三仓零 parse + objectui helper 零调用是业务判断的实证。执行按 spec-property-retirement 套件:墓碑/整形状删除按 skill 判、ADR-0087 逐条论证、ratchet 自证路径、三仓精确名扫描带对照。⛔ 反推荐 D 的论证成立并归档:被精确校验的死槽位是更有说服力的谎言。哪类能力将来被产品拉动,随实现带自己的词表回归。
needs-user-decision摘除,入队(v17 窗口)。
Generated by Claude Code
- added a commit that references this issue
on Aug 4, 2026 认领:PM 循环第 3 批补位(spec 车道,batch:5;v17 链)
会话:session_01ErbEDVAg1No9gdg1pgDAGB
分支:claude/issue-4988-interaction-files-retirement
Worktree:objectstack-issue-4988
域:domain:spec
文件面:packages/spec/src/ui/五个交互配置文件(touch/dnd/keyboard/animation/offline 一族,以实测认定)及其测试、ui/index.tsbarrel、ADR-0087 conversion/migration registry、spec 生成基线 + strictness 台账(⚠️ 落地链 #5289 已合并、#5293/#5300/#5304/#5306/#5308 正在串行进 main,末段同步必须按 os-regen 四步互保全部兄弟条目)、content/docs/references/**随删、.changeset/*.md执行依据:维护者裁决 A(2026-08-04 00:21Z,三轴复评确认;⛔ 反推荐 D 论证已归档)。注意与 #5021 已落地的 theme 退役区分:
ui/animation.zod.ts的ComponentAnimation族与 theme 的animation块是两张面,manifest 条目名不同,勿混。
Generated by Claude Code
验收:ACCEPT(PM 复核毕,PR #5321)
复核依据(GitHub 实据,41 文件逐一核名):
- 裁决 A 全量兑现:五模块整删(32 defs / 64 导出 / 109 authorable 键 / 5 参考页),逐文件核过无族外幸存导出被误删(
system/HttpServerConfigSchema九个键全仓零 reader,且没有任何作者面入口(defineStack无server:,不在 config-schema) #4938 教训);路线 3 + D3ui-interaction-config-family-retired;存量实测零(键本不可写,必然如此); - 前提复核带仪器对照(BFS 25 roots/4742 节点,合成承载键翻转全部 21 形状),并两次纠正 issue 正文(109 键非 58;objectui 耦合被低估 ——
useOffline.ts是生产源码); - 反向验证双向且落在 pin 的不同半边(恢复 offline 模块 → 6 条缺席红零存活红;模拟过宽扫除 → 2 条存活红零缺席红)—— 教科书级;
- 台账机器重算:476→454 sites、strip 221→199、no-door 38→16,strict 列 249 不动(退役只摘开门,算术自洽);棘轮自证(manifest −32 先开火,authorable-surface 的 tombstone 门禁可被手编基线绕过 —— 删掉基线行就删掉了证据(#4638 / #4643 已两次这样过绿) #4650 路径 3 自判);
- check:i18n 红的处置正确:控制实验证明预存在(未触碰检出、不同 commit 复现),按查重纪律评论进既有 check-i18n-bundles 在工作区未构建时把「CLI 没 build」报成 9 个包各自的 bundle 问题 #5217 而非开孪生单,顺带给该单补了
| tail吞退出码的测法勘误; - spec 双源清账 C13+C15(一单):DataSyncConfig + ConflictResolution(automation 死删 / integration 改名 / ui 保名)—— 4 条 #4738 changeset 就地订正是对的 —— 同版本 CHANGELOG 不能指向本 PR 删除的符号。
后续:PR #5321 进落地链尾部;objectui 适配单已按 dev 的逐文件测量立案(见下),含
useOffline.ts生产耦合与 parity 测试的「解锁」项。
Generated by Claude Code
- 裁决 A 全量兑现:五模块整删(32 defs / 64 导出 / 109 authorable 键 / 5 参考页),逐文件核过无族外幸存导出被误删(
- added 3 commits that reference this issue
on Aug 6, 2026 - added a commit that references this issue
on Aug 8, 2026 - added a commit that references this issue
on Sep 28, 2026
从 #4001 批 13 拆出(发现,不是缺陷修复)。批 13 的任务是把
ui/六个交互/呈现配置文件从.strip收紧。其中五个在「收紧前先验证可授权性」这一步上实测为负,所以没有收紧 —— 本 issue 记录测量结果与它引出的那个真正的问题。测量结果
packages/spec/src/ui/touch.zod.tspackages/spec/src/ui/animation.zod.tspackages/spec/src/ui/dnd.zod.tspackages/spec/src/ui/keyboard.zod.tspackages/spec/src/ui/offline.zod.ts同批的第六个文件
ui/responsive.zod.ts(4 站点)测量为可达(page.components[].responsive/.responsiveStyles),已在 #4001 批 13 收紧,不在本 issue 范围内。三条独立证据(2026-08-03,
origin/mainfe83042)1. 静态 —— 没有承载键。
packages/spec/src里除了ui/index.ts这个 barrel 之外,没有任何模块 import 这五个文件。协议里不存在component.touch、page.dnd、app.motion这类槽位,也就是说作者在任何一份元数据里都写不出通向这些形状的键。2. 图可达性 —— BFS 全不命中。 用
build-schemas.ts给 #4650 删除检查所用的同一套闭包(24 个 metadata-type root,来自listMetadataTypeSchemaTypes(),外加defineStack的ObjectStackSchema)对本次构建的内存 Zod 图做 BFS,6849 个节点,这 22 个 schema 一个都没走到。同一次运行里三个阳性对照全部命中root-graph:PageSchema(metadata-type root)WebhookSchema(批 11 判定「可授权」所依据的defineStack({ webhooks })那条门)StateMachineSchema(批 10 判定「可授权」所依据的agent.lifecycle那条门)对照通过,说明「不可达」是关于图的事实,而不是仪器坏了 —— 这正是 #4852 重测留下的教训:先证明尺子是准的。
3. 调用点 —— 没有 parse。
objectstack/objectui/ 三个示例应用里,除各文件自己的单测外,不存在对这些 schema 的.parse()/.safeParse()。objectui 只 re-export 推断出的类型,并且明确写了不 re-export 校验器(@object-ui/types,#2561 的注释)。由此引出的问题
这不是「要不要 strict」的问题。strict 是 parse 的属性,而这里根本没有 parse —— 收紧它们不会拦住任何东西,只会花掉一次 v17 的破坏性变更让文件「看起来完成了」,并留下本仓账本自己警告过的那件东西:「一个被精确校验的死槽位是更有说服力的谎言」(
docs/audits/2026-07-unknown-key-strictness-ledger.md,#4583DatasourceCapabilities那一行)。真正要决的是 ADR-0049 enforce-or-remove:
Notification/NotificationConfig、spec 双源清账 C13+C15(一单):DataSyncConfig + ConflictResolution(automation 死删 / integration 改名 / ui 保名)—— 4 条 #4738 删除automation/sync.zod.ts同类。代价:@objectstack/spec/ui的公开导出面收缩,需要墓碑 + 变更集迁移说明;并且要和 objectui 协调 ——@object-ui/core的DndProtocol/KeyboardProtocol与@object-ui/mobile的useSpecGesture/useTouchTarget都按这些类型写成(注意:这些 helper 本身在两个仓里也都没有调用方,只是导出的库 API),另有跨仓 parity 测试。ui/component.zod.ts的 SDUI 组件定义,或page.components[])加上touch/dnd/keyboard/animation/offline槽位,并让渲染器真的读。这是把 objectui 那几个 helper 从「导出但没人调」变成活的接线 —— 但那是一个真正的特性,不是清账。authorable-surface.json。为什么这条不能拖着不判
content/docs/references/ui/{touch,dnd,keyboard,animation,offline}.mdx是已生成并已发布的,读起来就是一张授权表(| **dragItem** | … | optional | Configuration for draggable item |)。authorable-surface.json里也躺着这五个文件的 58 个键,而那份文件的自述是「every AUTHORABLE key in the spec — what a metadata author may write, which for this platform IS the third-party API」。也就是说,对 AI 作者而言,当前状态的失效模式不是「
DndConfigSchema里的静默剥离」,而是文档在宣传一套没有承载键的词汇:AI 照着dnd.mdx往页面组件上写一个dnd:块,会被PageComponentSchema.strict()(ADR-0089 D3a)直接拒绝,因为任何组件上都没有dnd这个键。这正是 Prime Directive #10 那句「never advertise or demo a capability the runtime doesn't actually deliver」。相关
Notification/NotificationConfig零 importer 删除的先例)、spec 双源清账 C13+C15(一单):DataSyncConfig + ConflictResolution(automation 死删 / integration 改名 / ui 保名)—— 4 条 #4738(automation/sync.zod.ts整文件删除的先例)、POST /data/sharing/rules绕过SharingRuleSchema:criteria缺失或拼错静默变成"共享该对象全部记录",与 ADR-0049 "never seeded as a permissive match-all" 直接冲突 #3896(view.responsive/view.performance的 inert 清退)、spec:DashboardWidgetSchema.responsive按断点建模 —— objectui#3173 维护者已裁决;目标 17.0.0 正式版,带回退条款 #4876(dashboard.widgets[].responsive清退,同日)按 AGENTS.md Prime Directive #10 归档,未指派。