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

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions