Skip to content

console preview-samples: 除 tool 外还有 11 个样例过不了对应的 spec schema(其中 4 个同样带已退役的键) #3266

Description

@xuyushun441-sys

在做 objectui#3257(清 tool 样例的三个已退役键)时,按派发要求逐个核对了 apps/console/src/preview-samples.ts全部 20 个样例。结论:tool 远不是唯一一个,11 个样例当前过不了 spec 的 .parse(),其中 4 个带的是和 #3257 完全同型的已退役键

#3257 已落地一条机器守卫(apps/console/src/__tests__/preview-samples-spec-valid.test.ts),把每个样例塞进整个 stack 交给 ObjectStackSchema.safeParse() 校验。本单列的 11 个当时没有一并修,而是进了该测试里的 KNOWN_STALE 台账 —— 台账带反向断言(某个样例一旦开始通过就报红,要求把它提升到 SPEC_CLEAN),所以这个列表只会缩短,不会烂掉。本单就是把它清空。

核对结论(spec 17.0.0-rc.1,本仓 lockfile 里装着的版本)

校验方式:ObjectStackSchema.safeParse({ tools: [SAMPLES.tool] }) 之类,即「作者把这份样例发布进真实 stack 会怎样」。

✅ 合法(6,已被守卫钉住)

viewjobtool(#3257 修完后)、permissionpositionemail_template

❌ 过不了(11,本单范围)

样例问题是否含已退役键
actionbulkEnabled 已退役;type: 'server' / variant: 'default' / locations: ['record','list'] 都不在 17 的枚举里✅ objectstack#3896
agenttools 已退役(改用 skills)、knowledge 已退役✅ objectstack#3894 / #3896
skilltriggerPhrases 已退役;triggerConditions 需要 field/operator/value✅ objectstack#3896
flowwaitEventConfig.onTimeout 已退役;type: 'scheduled' 不在枚举;variables[].description 不认;13 条 edge 都缺 id✅ objectstack#4158
objectfields 是数组,ObjectSchema 要 record(见下方注意)
pageregion 里的 component 带 props,PageComponentSchema 拒收(ADR-0089 D3a)
reportcolumns 是对象数组,ReportSchema 要列名字符串
dashboardwidget 缺 dataset/values,带不认的 value/format;chart 不是合法 widget type
appnavigation 各项缺 type 判别键;landing 已被 objectstack#4001 移除
datasourcetype/isDefault 拒收;ssl 要对象不要布尔;capabilities 要对象;healthCheck.intervalintervalMs
validationevents 用的是 17 之前的 beforeInsert/beforeUpdate,枚举现在是 insert/update

⚪ spec 里没有对应 schema(2,守卫豁免)

workflow(没有 workflows 集合,也没有 WorkflowSchema)、approval(只有 ApprovalNodeConfigSchema,那是 flow 节点配置,不是审批流程元数据)

⚠️ 映射本身存疑(1)

translation:ObjectStackSchema.translationsArray< Record< locale, TranslationData > >,而 console 这份样例是 { name, label, locale, language, description, data }元数据记录形态。也就是说这里更可能是映射选错了,而不是样例过期。修之前需要先定这个样例到底对应哪个契约。

为什么没在 #3257 里一起修

不是懒 —— 其中几项不是机械替换,动之前需要判断:

  1. object.fields 的数组形态是被 app-shell 有意支持的,不是笔误。packages/app-shell/src/views/metadata-admin/previews/object-fields-io.tsreadFields() 显式分支 shape: 'array' | 'record' 并原样保留。把样例改成 record 会让画廊不再覆盖 array 那条分支。真正的问题其实更深:设计器编辑的是一个 spec 会拒收的形态(AGENTS.md #0.1 的典型场景),该先裁决 readFields 的双形态要不要留,而不是先改样例。
  2. dashboard / app / flow 样例会改变画廊渲染出来的东西,而预览画廊是本仓共用的浏览器验证台(verify skill),并行 agent 正拿它验证别的改动。
  3. console preview-samples 的 tool 样例仍带三个已退役的 ToolSchema 键(category / active / requiresConfirmation) #3257 的 scope fence 是「tool 样例 + 审计 + 守卫」,PD#3 要求越界发现另立单。

建议做法

附带观察(spec 侧,不在本仓)

守卫的强度取决于 spec 的严格度:tools/apps/flows/permissions/positions/datasources 的元素 schema 是 .strict(),而 views/jobs/emailTemplates不是 —— 后者会把未知键悄悄剥掉而不是报错。也就是说这三类样例即便哪天混进一个已退役的键,守卫也照样绿。这是 spec 仓的事(objectstack#4001 / #3896 同一条线),记在这里备查。

相关

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions