发现于 #4016(Studio layered 读迁到 GET /meta/:type/:name/layers)的前提测量。不在那个 PR 内修复 —— 超出该卡范围,按 Prime Directive #10 立卡,未认领。
事实(逐条 file:line)
- 消费侧类型过宽 + 注释错误 ——
packages/data-objectstack/src/metadata-client.ts,MetadataLayered.overlayScope 声明为 string | null,紧邻注释写的是 “Overlay scope (organization | environment | package | null)”。 - 生产者(objectui 今天解析到的 GA 包) ——
@objectstack/spec@17.0.0 的 GetMetaItemLayeredResponseSchema:overlayScope: z.enum(['org','env']).nullable(),.describe() 明确 “org for a tenant overlay, env for an environment-level one. null exactly when overlay is null”。 - 生产者实现(framework
origin/main e4e5c6e3c) —— packages/metadata-protocol/src/protocol.ts:6083 声明 overlayScope: 'org' | 'env' | null;6212 / 6222 两处赋值只有 'org' / 'env'。
也就是说注释里那三个拼法一个都不是生产者会发的值,package 这个 scope 在这个字段上根本不存在。类型是 string,所以类型检查对此毫无意见。
用户可见后果
packages/app-shell/src/views/metadata-admin/LayeredDiff.tsx:196 把该值原样当 overlay 层徽标渲染:
{layered.overlayScope ?? translateConsoleValue('layer', 'set', locale)}
同组件另外三个层标签(189 / 200 / 207,artifact / none / merged)全部过 translateConsoleValue。而 CONSOLE_VALUE_ZH.layer(packages/app-shell/src/views/metadata-admin/i18n.ts:4125)只有 artifact / none / merged / set / overlay,没有 org / env。
于是同一个徽标的语言取决于有没有 overlay:有 overlay 的条目在 zh-CN 下显示裸英文 org / env,没有 overlay 的条目(走 ?? 右支)才显示「已设」。
建议(交维护者定,不预设)
- 词表从 spec 派生(读
z.enum 的 options)而不是在消费侧复述,overlayScope 收窄成 'org' | 'env' | null; CONSOLE_VALUE_ZH.layer 补 org / env。注意 translateConsoleValue 目前只对 zh 生效、其余语言恒返回原值 —— 那是它的现有设计,是否扩到十个语言包是另一个决定,别顺手改。
未打 finding 标签:zh-CN 管理员今天打开任一有 overlay 的元数据编辑页就看得到裸值,属具体缺陷,定级交 PM triage。
发现于 #4016(Studio layered 读迁到
GET /meta/:type/:name/layers)的前提测量。不在那个 PR 内修复 —— 超出该卡范围,按 Prime Directive #10 立卡,未认领。事实(逐条 file:line)
packages/data-objectstack/src/metadata-client.ts,MetadataLayered.overlayScope声明为string | null,紧邻注释写的是 “Overlay scope (organization|environment|package| null)”。@objectstack/spec@17.0.0的GetMetaItemLayeredResponseSchema:overlayScope: z.enum(['org','env']).nullable(),.describe()明确 “orgfor a tenant overlay,envfor an environment-level one.nullexactly whenoverlayis null”。origin/maine4e5c6e3c) ——packages/metadata-protocol/src/protocol.ts:6083声明overlayScope: 'org' | 'env' | null;6212 / 6222 两处赋值只有'org'/'env'。也就是说注释里那三个拼法一个都不是生产者会发的值,
package这个 scope 在这个字段上根本不存在。类型是string,所以类型检查对此毫无意见。用户可见后果
packages/app-shell/src/views/metadata-admin/LayeredDiff.tsx:196把该值原样当 overlay 层徽标渲染:同组件另外三个层标签(189 / 200 / 207,artifact / none / merged)全部过
translateConsoleValue。而CONSOLE_VALUE_ZH.layer(packages/app-shell/src/views/metadata-admin/i18n.ts:4125)只有artifact / none / merged / set / overlay,没有org/env。于是同一个徽标的语言取决于有没有 overlay:有 overlay 的条目在 zh-CN 下显示裸英文
org/env,没有 overlay 的条目(走??右支)才显示「已设」。建议(交维护者定,不预设)
z.enum的 options)而不是在消费侧复述,overlayScope收窄成'org' | 'env' | null;CONSOLE_VALUE_ZH.layer补org/env。注意translateConsoleValue目前只对 zh 生效、其余语言恒返回原值 —— 那是它的现有设计,是否扩到十个语言包是另一个决定,别顺手改。未打
finding标签:zh-CN 管理员今天打开任一有 overlay 的元数据编辑页就看得到裸值,属具体缺陷,定级交 PM triage。