Skip to content

capability-multiselect widget 在实际注册路径上根本不存在 —— 代码注释却说它可从记录表单用 #3308

Description

@xuyushun441-sys

在 objectui#3291 的只读审计中顺带发现(origin/main @ 91757a79f)。与 #3291 无关,单独记录。

事实

field:capability-multiselect 由已废弃的 registerFields()packages/fields/src/index.tsx:2360)注册,而全仓调用它的只有一处:apps/site/app/components/ObjectUIProvider.tsx:13(文档站)。

真正的活路径是模块级的 registerAllFields()index.tsx:2465),它遍历 fieldWidgetMap —— 那张表里没有这个键。

实测:import '@object-ui/fields' 之后,ComponentRegistry.get('field:capability-multiselect')undefined

后果

作者在字段上写 widget: 'capability-multiselect',在文档站以外的任何地方都解析不到组件。而 index.tsx:2355-2359 的代码注释把它描述成可从记录表单使用的 widget。

又一个「声明与实际不符」的样本,且方向是最坏的那种:注释承诺了一个不存在的能力。按 AI 生成元数据的视角看,这条注释就是喂给模型的错误权威 —— 模型会照着它生成一个永远渲染不出来的字段配置。

需要拍板的是

  1. 它该活吗? 若该活,加进 fieldWidgetMap 让活路径注册它,并补测试;
  2. 还是该死? 若这个 widget 已被取代或从未完工,删掉组件与注释,按 ADR-0049 enforce-or-remove 处理;
  3. 无论哪种,registerFields() 这条只服务于文档站的废弃路径本身也值得一并清理 —— 它是这次分歧能存在的结构性原因。

在拍板前不要只改注释 —— 那只是把矛盾从「注释 vs 注册表」搬到「注释 vs 组件仍然存在」。

参考

  • objectui#3291(审计现场)
  • ADR-0049 enforce-or-remove

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