Skip to content

[决策] dataset 的 dimension/measure 声明成内联 locale map 的 label 被生产端整个丢弃 —— 三个渲染端在等,而 schema 授权的形状发不出去 #6761

Description

@os-project-manager

Filed by the services-lane PM (session_01USNUyHEr7uaU6MoEWXitei) out of #5199, whose two successive scopes were both disproven by measurement. This card carries the one gap that survived both, with fresh evidence. #5199 is closed as falsified; see its closing comment for the chain.

2026-08-08 裁决落地(维护者批复 B):本单收窄为 services 半边——queryDataset 两处富化 + dataset-compiler.ts:374/406 改调共享解析器,并盖掉 d.name 替换。契约半边(共享 I18nLabel → string 解析器)见 #6765,归 spec 座位。裁决全文见下方评论。

Blocked-by: #6765

已测量的事实(全部实测,非推断)

origin/main (a5d2573) 的专用 worktree 上直接跑查询,两个策略各测:

dataset 声明的 label 实测下发的 fields[]
label: 'Owner'(字符串) [{name:'owner',type:'string',label:'Owner'}, …] —— 两个策略一致
label: { en:'Owner', 'zh-CN':'负责人' }(内联 map) [{name:'owner',type:'string'}, …] —— label 整个不见了,两个策略一致
不声明 同上,无 label

成因:AnalyticsService.queryDataset 的两处富化(measures ~:1095-1130、dimensions ~:1161-1177)以 typeof … === 'string' 为门槛,非字符串一律跳过;再往上一层 dataset-compiler.ts:374 / :406label: typeof d.label === 'string' ? d.label : d.name 把它替换成机器名,于是 /analytics/meta 还会把 owner 当作展示标题发布出去。

消费端早已就位:三处渲染器都经 buildDatasetFieldHelpersfields[].label 排在第一顺位 —— objectui plugin-dashboard/src/DatasetWidget.tsx:563app-shell/.../previews/DatasetPreview.tsx:128plugin-report/src/DatasetReportRenderer.tsx:440/703/845

内联 map 不是假想形状:I18nLabelSchema#5728 起授权它,平台自己的三个已发布页面就有 31 处在用。中文部署照着写,拿到的是没有标签

线型约束(实施时的硬边界)

线上仍是解析后的字符串,这是被两端声明钉死的:packages/spec/src/contracts/analytics-service.ts:40fields[].label?: string,objectui 的 DatasetResultField.label?: string 与之匹配,且 headerLabel 把它当纯字符串 fallback 喂给 fieldLabel(...) —— 该路径上没有 pickLocalized,原样塞一个 map 会渲染成 [object Object]

⚠️ 必须一并覆盖 dataset-compilerd.name 替换,否则 /analytics/meta 继续拿机器名当展示标题。

⚠️ 另一处已知陷阱(#5199 的 dev 实测):下游富化带 if (f.label == null) / if (f.label != null) continue 守卫,所以任何在上游写入占位值的做法都会永久顶掉文档提供的真标签 —— 这正是 #5199 route A 被判定为「有害而非冗余」的原因。

决策记录(已裁,存档)

修法必须回答「谁来解析、解析器住在哪」,而这个仓今天后端零个内联 map 解析器(已全仓 grep 核实:除 packages/spec 文档与 objectui 外无命中)。三个选项 A(服务内私有孪生)/ B(spec 共享解析器)/ C(拓宽线型交客户端)的完整权衡见下方裁决评论;维护者裁 B

相邻卡(不同机制,非重复)

来源:#5199 的 dev 实测回报(会话 session_01USNUyHEr7uaU6MoEWXitei 派发)。测量探针留在 worktree /home/user/objectstack-issue-5199/packages/services/service-analytics/src/__tests__/zz-probe-5199.test.ts(未跟踪),可复跑。

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions