发现于 #4790 的实施(表单 data-source 允许表收敛)。测量副产物,不在该卡范围内 ,单独立此单。
事实(实读 origin/main @ f2dc8fa )
packages/fields/src/field-type-alias.ts:105 把字段类型 owner 映射到 field:owner;packages/fields/src/index.tsx:2435 把 field:owner 注册到 UserField (与 user 同一个 widget);index.tsx:2190 另有 registerFieldRenderer('owner', UserCellRenderer) 管单元格展示。即 owner 在本仓是一个活的 widget 键 。
但 owner 不在 @objectstack/spec 的 FieldType 枚举里 (17.0.0-rc.6,dist/percent-scale-DQMCB4dC.d.ts 的 declare const FieldType:… lookup / master_detail / tree / user / image … 全表 48 个成员,无 owner)。所以没有任何对象 schema 能声明 type: 'owner' —— 它只能经 widget: 'field:owner' 这条手写 SDUI 路径到达。
两个消费面对它的判断相反:
同一 probe 还读到 field:grid 三项皆 false。而 packages/fields/src/widgets/types.ts:166 的 dataSource TSDoc 写的是「DataSource for widgets that query records (lookup / user / object-ref / recipient-picker / grid ). Injected by the form renderer for the field types that need it」—— grid 从来不在任何 data-source 表里,GridField.tsx 也 grep 不到 dataSource。这句契约文档的 grid 是零消费者的声明。(user 那半已由 DATA_SOURCE_FIELD_TYPES(form 层)与 core 的 EXPANDABLE_FIELD_TYPES 已知不同集且零 gate —— 同 #4770 的第二张允许表待收敛 #4790 / PR 补齐。)
影响
owner:手写 widget: 'field:owner' 的字段落到 UserField → LookupField。dataSource / dependentValues 各有 SchemaRendererContext 兜底,所以有 provider 时能瘸着跑;dependsOnLabels 没有任何兜底 ,于是带 depends_on 的 owner 选择器把裸 API 名插进「先选 … 」提示句 —— objectstack#5407 给 lookup 关掉、这里仍开着的同一个洞。
grid:纯文档失真,今天没有用户碰得到。
需要裁决的是「接线还是退役」,不是补一个 string
owner 既然不是 spec 声明得出来的类型,把它加进表单的 DATA_SOURCE_ONLY_WIDGET_TYPES 等于新造一条 declared-but-unexercised 条目 —— 正是 ADR-0049 enforce-or-remove 要消灭的东西,也正是 #4790 这一族在关的失效模式。所以 #4790 的实施故意没有顺手加 ,留给分诊:
A. 退役 owner 别名 :删 field-type-alias.ts 的 owner 映射、index.tsx 的 field:owner 注册与 plugin-grid 的 USER_WIDGET_TYPES 成员,cell renderer 另议。前提是确认没有产品在用 widget: 'field:owner'。
B. 承认它是一个 widget-hint-only 名 (与 object-ref / filter-condition / recipient-picker同类),补进表单规则并在 paramValueShape.ts 之类的地方登记 widgetHintOnly: true,让「声明即强制」。
grid 那句 TSDoc 无论 A/B 都应改掉或补消费者。
参考
发现于 #4790 的实施(表单 data-source 允许表收敛)。测量副产物,不在该卡范围内,单独立此单。
事实(实读 origin/main @ f2dc8fa)
packages/fields/src/field-type-alias.ts:105把字段类型owner映射到field:owner;packages/fields/src/index.tsx:2435把field:owner注册到UserField(与user同一个 widget);index.tsx:2190另有registerFieldRenderer('owner', UserCellRenderer)管单元格展示。即owner在本仓是一个活的 widget 键。但
owner不在@objectstack/spec的FieldType枚举里(17.0.0-rc.6,dist/percent-scale-DQMCB4dC.d.ts的declare const FieldType:…lookup/master_detail/tree/user/image… 全表 48 个成员,无owner)。所以没有任何对象 schema 能声明type: 'owner'—— 它只能经widget: 'field:owner'这条手写 SDUI 路径到达。两个消费面对它的判断相反:
packages/plugin-grid/src/components/bulkParamToField.ts:43USER_WIDGET_TYPES = new Set(['user', 'owner']),并入DATA_SOURCE_WIDGET_TYPES,批量动作对话框会给owner线上dataSource(BulkActionDialog.tsx:600);needsDataSourceWiring,此前是DATA_SOURCE_FIELD_TYPES)不含owner—— 实测 probe(真渲染field:owner,跑完即删)读数:{hasDataSource:false, hasDependentValues:false, hasDependsOnLabels:false},与field:user修复前完全同形。同一 probe 还读到
field:grid三项皆 false。而packages/fields/src/widgets/types.ts:166的dataSourceTSDoc 写的是「DataSource for widgets that query records (lookup / user / object-ref / recipient-picker / grid). Injected by the form renderer for the field types that need it」——grid从来不在任何 data-source 表里,GridField.tsx也 grep 不到dataSource。这句契约文档的grid是零消费者的声明。(user那半已由 DATA_SOURCE_FIELD_TYPES(form 层)与 core 的 EXPANDABLE_FIELD_TYPES 已知不同集且零 gate —— 同 #4770 的第二张允许表待收敛 #4790 / PR 补齐。)影响
owner:手写widget: 'field:owner'的字段落到UserField→LookupField。dataSource/dependentValues各有SchemaRendererContext兜底,所以有 provider 时能瘸着跑;dependsOnLabels没有任何兜底,于是带depends_on的 owner 选择器把裸 API 名插进「先选 … 」提示句 —— objectstack#5407 给 lookup 关掉、这里仍开着的同一个洞。grid:纯文档失真,今天没有用户碰得到。需要裁决的是「接线还是退役」,不是补一个 string
owner既然不是 spec 声明得出来的类型,把它加进表单的DATA_SOURCE_ONLY_WIDGET_TYPES等于新造一条 declared-but-unexercised 条目 —— 正是 ADR-0049 enforce-or-remove 要消灭的东西,也正是 #4790 这一族在关的失效模式。所以 #4790 的实施故意没有顺手加,留给分诊:owner别名:删field-type-alias.ts的owner映射、index.tsx的field:owner注册与 plugin-grid 的USER_WIDGET_TYPES成员,cell renderer 另议。前提是确认没有产品在用widget: 'field:owner'。object-ref/filter-condition/recipient-picker同类),补进表单规则并在paramValueShape.ts之类的地方登记widgetHintOnly: true,让「声明即强制」。grid那句 TSDoc 无论 A/B 都应改掉或补消费者。参考
EXPANDABLE_FIELD_TYPES)packages/fields/src/field-type-alias.ts:104-105、packages/fields/src/index.tsx:2435、packages/plugin-grid/src/components/bulkParamToField.ts:43-46、packages/fields/src/widgets/types.ts:166