从 #6276 的 B 案拆出(维护者 2026-08-08 裁 #6276 走 A 案时明示:B 不废弃,升格为方向性议题挂 v18 评估)。
议题
element:record_picker / element:form / element:filter 等 element 家族共用「dataSource 优先、扁平简写兜底」的双通道数据绑定:
契约最干净的终态是 dataSource 唯一入口:一处声明、一处校验、renderer 单读法,AI 作者不需要在两种拼写间猜。代价是跨 element 的 breaking 面(扁平 object 主流语料全部迁移),必须一次统一裁决,不能按单个 element 零敲碎打 —— packages/lint/src/validate-component-props.ts 里「dataSource 供给了 object 就不报缺失」的豁免正是为这一族写的,退役时一并删除。
v18 评估时需要的输入
- 存量测量:三仓 + 文档中扁平
object/filter/sort/limit 的使用计数(按 element 分组); - ADR-0087 D2 conversion 的可行性(扁平键 →
dataSource.* 是机械改写,无歧义); - 与 ADR-0089(visibleWhen 归一化)同型的先例对读。
关联
#6276(A 案已裁,sort/limit 补声明)、#5775(A 表处置)、#5068(error 升级清单)、ADR-0078 / ADR-0087。
⛔ 本卡是方向性议题,不是工作卡 —— v18 窗口开启前不入 pm:queue。
从 #6276 的 B 案拆出(维护者 2026-08-08 裁 #6276 走 A 案时明示:B 不废弃,升格为方向性议题挂 v18 评估)。
议题
element:record_picker/element:form/element:filter等 element 家族共用「dataSource优先、扁平简写兜底」的双通道数据绑定:object是语料主流(showcase 与文档大量使用);filter双通道并存;sort/limit在element:record_picker的sort/limit扁平简写:renderer 兑现、schema 未声明(#5775 实施中新测出,A 表之外的第 7 处) #6276(A 案)补声明后也成为契约的一部分。契约最干净的终态是
dataSource唯一入口:一处声明、一处校验、renderer 单读法,AI 作者不需要在两种拼写间猜。代价是跨 element 的 breaking 面(扁平object主流语料全部迁移),必须一次统一裁决,不能按单个 element 零敲碎打 ——packages/lint/src/validate-component-props.ts里「dataSource供给了object就不报缺失」的豁免正是为这一族写的,退役时一并删除。v18 评估时需要的输入
object/filter/sort/limit的使用计数(按 element 分组);dataSource.*是机械改写,无歧义);关联
#6276(A 案已裁,sort/limit 补声明)、#5775(A 表处置)、#5068(error 升级清单)、ADR-0078 / ADR-0087。
⛔ 本卡是方向性议题,不是工作卡 —— v18 窗口开启前不入 pm:queue。