在 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 生成元数据的视角看,这条注释就是喂给模型的错误权威 —— 模型会照着它生成一个永远渲染不出来的字段配置。
需要拍板的是
- 它该活吗? 若该活,加进
fieldWidgetMap 让活路径注册它,并补测试;
- 还是该死? 若这个 widget 已被取代或从未完工,删掉组件与注释,按 ADR-0049 enforce-or-remove 处理;
- 无论哪种,
registerFields() 这条只服务于文档站的废弃路径本身也值得一并清理 —— 它是这次分歧能存在的结构性原因。
在拍板前不要只改注释 —— 那只是把矛盾从「注释 vs 注册表」搬到「注释 vs 组件仍然存在」。
参考
- objectui#3291(审计现场)
- ADR-0049 enforce-or-remove
Generated by Claude Code
在 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 生成元数据的视角看,这条注释就是喂给模型的错误权威 —— 模型会照着它生成一个永远渲染不出来的字段配置。
需要拍板的是
fieldWidgetMap让活路径注册它,并补测试;registerFields()这条只服务于文档站的废弃路径本身也值得一并清理 —— 它是这次分歧能存在的结构性原因。在拍板前不要只改注释 —— 那只是把矛盾从「注释 vs 注册表」搬到「注释 vs 组件仍然存在」。
参考
Generated by Claude Code