Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

objectui check 的 knownTypes 是手写的注册表副本,已与真实注册表漂移:crud 通过校验但无任何渲染器,运行时落 unknown-component 占位符 #5115

Closed

Description

@yinlianghui

发现于 #5098 的实施(核对 resource 键归属时,顺着 CRUDSchema 追到的)。半径外,未夹带进 PR #5114。Filed unassigned, not claiming.

现象

packages/cli/src/commands/check.ts:34-38 用一个硬编码数组判定 schema 的 type 是否已知:

const knownTypes = [
  'page', 'form', 'grid', 'crud', 'kanban', 'calendar', 'dashboard',
  'chart', 'detail', 'list', 'timeline', 'gantt', 'map', 'gallery',
  'object-view', 'detail-view', 'object-chart',
];
if (typeof content.type === 'string' && !knownTypes.includes(content.type)) {
  console.log(chalk.yellow(`⚠️ Unknown schema type "${content.type}" in ${file}`));
}

这份列表是 ComponentRegistry 的手写副本,没有任何东西让两者保持一致。已经漂移:

crud 在列表里,但全仓没有任何渲染器注册它。

grep -rn "register('crud'" packages/*/src apps/*/src    # 零命中

CRUDSchema 的其余声明面都在(packages/types/src/crud.ts:424 的 interface、packages/types/src/zod/crud.zod.ts 的 zod 镜像、packages/core/src/validation/schema-validator.ts:135 的 if (schema.type === 'crud') 分支、packages/core/src/builder/schema-builder.ts:168 的 CRUDBuilder),唯独没有渲染器。

影响

写了 type: 'crud' 的作者会一路拿到绿灯:objectui check 不告警,schema-validator 有专门分支校验它,CRUDBuilder 还能把它构建出来 —— 然后在浏览器里拿到 unknown-component 占位符。README 的 ## Schema API 一节(plugin-form)已经写明这条规则:「A schema whose type names something no registration claims does not fall back to a form — it renders the unknown-component placeholder」。

方向上这比单个键的漂移更值得注意:门禁说 OK 的类型,运行时不存在。而且列表是手写的,crud 未必是唯一一个 —— 反向也成立(注册表里有、列表里没有的类型会被误报为 unknown)。

复核方式

sed -n '33,40p' packages/cli/src/commands/check.ts
grep -rn "register('crud'" packages/*/src apps/*/src        # 零命中
grep -n "type === 'crud'" packages/core/src/validation/schema-validator.ts
grep -n "class CRUDBuilder" packages/core/src/builder/schema-builder.ts

分级

交 PM 分诊,未打 finding 标签:这是今天照着写就会撞上的具体缺陷(校验绿灯 → 运行时占位符),不是休眠代码。但修法有选择(把列表换成从 ComponentRegistry 派生 / 退役 CRUDSchema 走 ADR-0049 enforce-or-remove / 补一个 crud 渲染器),取哪条是契约决定,故只如实立卡不预设方案。

与 #4631(同一 component type 三个声明面互不一致)同族但不同事实:那张卡讲的是 TS type / registry meta / renderer prop reads 三者的分歧,本卡讲的是 CLI 的第四份手写副本与注册表的分歧,以及 crud 这个具体的零渲染器类型。

Activity

  1. self-assigned this
    on Aug 18, 2026
  2. yinlianghui commented on Aug 18, 2026

    @yinlianghui
    ContributorAuthor

    认领(PM 派发,objectui 分片):session_01GTRjn8xBqp75dk7kFupVRt,分支 claude/issue-5115-check-knowntypes-drift,os-dev 席即将开工。

    范围声明:objectui check 的 knownTypes 手写副本(定位待席位侦查,预计 CLI 包)+ 防漂移钉 + changeset。⛔ 本单不实现 crud 渲染器(CRUDSchema 缺渲染器的去留是另案);修剪副本前须实测 type:'crud' 的使用面 —— 零使用则机械对齐,有真实使用(校验收紧会红到别人)则停下报告。文件面与在飞席位(RelatedList.tsx、SchemaRenderer.tsx、skills/schema-expressions.md)不相交。


    Generated by Claude Code

  3. added 2 commits that reference this issue on Aug 23, 2026
    68d9e28
    94021dd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingpm:queue

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions