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 只作基线 / filter 走 and 合成 / 空 columns 视作未声明 / limit 落 pagination.pageSize / viewType 仅在未声明时取」这套优先级表。
objectstack#6953 为其余 8 个 block 接线时,把同一张表提到了 @object-ui/react 的共享件里(packages/react/src/element-data-source/ElementDataSourceGate.tsx 的 useElementDataSourceSchema + 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-view 与 objectstack-ai/objectstack#5576 现有断言逐字符一致,面板文案用 errorTitle 传原句即可)。删掉 ListViewBlock 里的 useMemo 映射块(约 45 行)。
验收就是 objectstack-ai/objectstack#5576 那套测试不动一行仍全绿 —— 若有任何一例需要改断言,说明两份实现本来就有差异,那才是真 defect,应当在那时改判等级。
发现于 objectstack#6953 的实施过程。观察类(observation-class):今天没有用户能碰到的错误行为 —— 两份实现当前语义一致,是未来漂移的风险面,故只打
finding、不入队。事实
objectstack#5576 在
packages/plugin-list/src/ListViewBlock.tsx内联写了「binding 覆盖组件键 / view 只作基线 /filter走and合成 / 空columns视作未声明 / limit 落pagination.pageSize/viewType仅在未声明时取」这套优先级表。objectstack#6953 为其余 8 个 block 接线时,把同一张表提到了
@object-ui/react的共享件里(packages/react/src/element-data-source/ElementDataSourceGate.tsx的useElementDataSourceSchema+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收敛到共享件:配
ElementDataSourceErrorPanel/ElementDataSourceLoadingPanel(共享面板的testId前缀取list-view时,产出的list-view-datasource-error/list-view-resolving-view与 objectstack-ai/objectstack#5576 现有断言逐字符一致,面板文案用errorTitle传原句即可)。删掉ListViewBlock里的useMemo映射块(约 45 行)。验收就是 objectstack-ai/objectstack#5576 那套测试不动一行仍全绿 —— 若有任何一例需要改断言,说明两份实现本来就有差异,那才是真 defect,应当在那时改判等级。