Skip to content

console: buildObjectDetailPageSchema 全仓零调用者 —— 唯一消费者随 MetadataDetailPage 一同退场 #3731

Description

@yinlianghui

越界发现,记录于 #3713(重写 skills/objectui/guides/console-development.md)期间 —— 为把「Schema-driven detail pages」一章改写成真实机制,需要确认该工厂函数今天由谁调用,结果是没人。按纪律只报不改,单独立单,未认领

观察类,已打 finding:今天没有用户碰得到的行为差异 —— 工厂函数不可达,widget 仍注册但不由它驱动。记录下来是因为它落在「declared but never exercised」这一类,且与 #3699 删掉的 SystemObjectViewPage / systemObjects同一个删除动作留下的另一半

基线:origin/main @ 0cf8f0f70

事实

apps/console/src/schemas/objectDetailPageSchema.ts:36 导出 buildObjectDetailPageSchema(objectName, item?),91 行左右,构造带 4 个 tab 的 PageNodeSchema

全仓 grep(--include='*.ts' --include='*.tsx',packages + apps,排除 node_modules)命中仅三处:

命中 性质
apps/console/src/schemas/objectDetailPageSchema.ts:36 定义本身
同文件 :10 自己 docblock 里的用法示例
packages/react/src/hooks/usePageAssignment.ts:126 注释,说明 pageType:'record_detail' 是「metadata designer page schemas(buildObjectDetailPageSchema)」用的、不可被记录页拾取

第三处代码调用:

它的历史消费者就是 #3713 记录的 MetadataDetailPage(pages/system/MetadataDetailPage.tsx,今天零文件零引用) —— 旧 guide 的原话是「MetadataDetailPage calls the factory and renders via SchemaRenderer」。页面随 cccdf84d7 退场,工厂留下。

不是「顺手删掉」那么简单 —— 两侧都要看

#3672(纯孤儿文件)不同,这里有活的一半:

  • apps/console/src/main.tsx:35import './components/schema/registerObjectDetailWidgets',该文件 ComponentRegistry.register() 7 次(object-detail-tabs / object-properties / object-relationships / object-keys / object-data-experience / object-data-preview / object-field-designer)。
  • 也就是说这些 widget 对任何引用了这些 type 的 schema 都可达 —— 不需要经过本工厂。删工厂 ≠ 删 widget。

objectDetailPageSchema.ts 自己的 docblock 已经写了 post-删除的意图:

Render via SchemaRenderer (e.g. inside a custom metadata-admin EditPage).

即「留着,等有人把它接到 metadata-admin 的自定义 EditPage 上」。这是一个有据可查的意图,不是遗忘 —— 所以本单不预判 remove,只把「零调用者」这个事实钉住,让分诊按 ADR-0049 enforce-or-remove 裁:

  1. enforce:注册一个 registerMetadataResource({ type:'object', EditPage }),把工厂接回 metadata-admin(需要先确认它和 app-shell 现有的 object 编辑面是否重复 —— 未测)。
  2. remove:删工厂,widget 注册按各自可达性单独判定。
  3. 保持现状:接受它作为「给 fork 者的样板」而非产品路径,但那应当写在文件里,而不是靠读者去 grep 才发现没人调用。

复核方式

grep -rn 'buildObjectDetailPageSchema' --include='*.ts' --include='*.tsx' apps packages | grep -v node_modules
grep -rn 'objectDetailPageSchema' --include='*.ts' --include='*.tsx' apps packages | grep -v node_modules
grep -c 'ComponentRegistry.register(' apps/console/src/components/schema/registerObjectDetailWidgets.ts   # 7
grep -rn 'registerObjectDetailWidgets' apps/console/src/main.tsx                                          # 仍 import

关联

已就关键词(buildObjectDetailPageSchemaobjectDetailPageSchemaregisterObjectDetailWidgets)搜过本仓开放 issue,无同源单。


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions