Skip to content

ListViewBlock 仍带一份 dataSource 合成优先级的私有副本,与 #6953 落地的 ElementDataSourceGate 重复(漂移风险) #4038

Description

@os-zhuang

Migrated from objectstack-ai/objectstack#7120 under the file-at-destination ruling (objectstack-ai/objectstack#7167, maintainer 2026-08-10). Originally filed 2026-08-09T17:46:26Z. The full prior thread — including triage rulings and hold/restart conditions — remains on the source issue and MUST be read before acting on this card.


发现于 objectstack#6953 的实施过程。观察类(observation-class):今天没有用户能碰到的错误行为 —— 两份实现当前语义一致,是未来漂移的风险面,故只打 finding、不入队。

事实

objectstack#5576 在 packages/plugin-list/src/ListViewBlock.tsx 内联写了「binding 覆盖组件键 / view 只作基线 / filterand 合成 / 空 columns 视作未声明 / limit 落 pagination.pageSize / viewType 仅在未声明时取」这套优先级表。

objectstack#6953 为其余 8 个 block 接线时,把同一张表提到了 @object-ui/react 的共享件里(packages/react/src/element-data-source/ElementDataSourceGate.tsxuseElementDataSourceSchema + ElementDataSourceGate),因为一 block 一份就是「additional filter criteria」变成两种方言的路径。objectstack-ai/objectstack#6953 没有顺手改 ListViewBlock —— 那是 objectstack-ai/objectstack#5576 已合的落地代码,在一个接线 PR 里重构它是范围外的回归面。

于是现状是:同一张优先级表存在两份实现,list-view 用私有副本,其余 8 个 block 用共享件。

为什么是 finding 而不是 defect

两份当前语义等价(objectstack-ai/objectstack#6953 的共享件是照着 ListViewBlock 的规则写的,objectstack-ai/objectstack#5576 的整套测试在该 PR 下全绿:packages/plugin-list/ 60 文件 826 例通过)。用户今天碰不到任何差异。风险是下一次改语义的人只改一边 —— 这类漂移在本仓有前情(声明与读点各改一边)。

建议范围

ListViewBlock 收敛到共享件:

const LIST_VIEW_DATA_SOURCE = {
  columns: true, filter: true, sort: true,
  limit: 'pagination.pageSize', viewType: true,
};

ElementDataSourceErrorPanel / ElementDataSourceLoadingPanel(共享面板的 testId 前缀取 list-view 时,产出的 list-view-datasource-error / list-view-resolving-viewobjectstack-ai/objectstack#5576 现有断言逐字符一致,面板文案用 errorTitle 传原句即可)。删掉 ListViewBlock 里的 useMemo 映射块(约 45 行)。

验收就是 objectstack-ai/objectstack#5576 那套测试不动一行仍全绿 —— 若有任何一例需要改断言,说明两份实现本来就有差异,那才是真 defect,应当在那时改判等级。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions