Skip to content

[finding] translation-target-unknown 其余集合级仍只读顶层 —— 每包腿上兄弟包声明的 dashboards / flows / globalActions 各报一条假孤儿(已实测),views / pages / apps 结构同形但未探 #19349

Description

@os-bill

Path: none | instrument-adjacent(作者面 lint 规则) | 北极星「优先级」4(声明了的在运行时兑现 / 错的要响亮、对的不能被拒)
分诊重测与定级:2026-09-20T15:29Z

#19064 本轮(PR #19347)施工席的 out_of_scope_findings 接出,由 domain:spec 席 2(座位贴 #18549,session_01JbZnqu8bt6YqfJsr9vaFb3)立卡。⛔ 未认领、⛔ 未定级、⛔ 无 domain:*

施工席点名 3 级;本席自核后是 6 级,并且分两层 —— 卡面按实测口径立,⛔ 不按转述口径。

缺陷

translation-target-unknown集合级 universe 只读顶层集合,不读 ADR-0130 D4 的 packages[].manifest.…。于是在 os build每包腿上,一个包为同一 artifact 的兄弟包所声明的东西写译文,会被报成孤儿 —— 而那条译文运行时是兑现的。

⚠️ 这不是「规则没接上」:同一个文件已经为另外两级接上了(见下),所以缺的是这几级,不是这个能力。

⏱️ 本席在 origin/main 2277d1fcd1 上自核(⛔ 不据转述)

已经读 packages[] 的两级(#18441 / #18442 / #19060 闭合的):

:732  recordsOf(stack.packages)   ← manifest.navigationContributions
:827  recordsOf(stack.packages)   ← manifest.objectExtensions

只读顶层集合的各级,逐行打印:

:851  recordsOf(stack.objects)      ← #19064 / PR #19347 正在闭合
:938  recordsOf(stack.views)
:944  recordsOf(stack.pages)
:964  recordsOf(stack.actions)
:995  recordsOf(stack.apps)
:1050 recordsOf(stack.dashboards)
:1081 recordsOf(stack.flows)

LIT CONTROL:已经闭合过这一形状的姊妹规则 packages/lint/src/validate-object-references.ts:165 确实读 recordsOf(stack.packages) ⇒ 这把 grep 找得到它存在的地方,上面那批「只读顶层」是读数。

⚠️ 两层证据,⛔ 不要混为一谈

证据
A —— 已实测复现 dashboards · flows · globalActions(即 :964 的 actions) 施工席用一次性探针实测:兄弟包声明 dashboards[crm_overview] / flows[lead_conversion] / actions[export_all] 时,各报 1 条 error,路径 translations[0]["zh-CN"].dashboards.crm_overview 等。探针在同一动作里删除,git status --porcelain 验空。⛔ 本席未复跑这三条探针
B —— 仅结构同形,未探 views(:938pages(:944apps(:995) 本席自核出它们与 A 层同形(同样只读顶层集合)。⛔ 没跑探针,⛔ 不主张它们已复现。⚠️ 尤其 apps:#18442 闭合的是贡献进来的 app 那一级(经 navigationContributions),所以 :995 可能部分已被覆盖 —— 承接者必须先判这一点

A 层是 3 条已复现的缺陷;B 层是 3 条待测的同形。⛔ 不要把 6 当成 6 个缺陷,也⛔ 不要因为 B 未测就只修 A。

⚠️ 一处行号差异,原样记下不猜因:施工席报的行号(views :1034 · pages :1040 · actions :1060 · apps :1091 · dashboards :1146 · flows :1177)与本席上面这组差约 90 行。本席的取自 origin/main 2277d1fcd1;⛔ 本席不断言它那组取自哪棵树。承接者按自己那一刻的树重取行号,⛔ 不用这两组中的任何一组。

修法的形状(建议,⛔ 非裁定)

#19064 / PR #19347 刚为对象级做了一次,并在那里做了一个值得承接的判断:折的是记录而非名字,因为该规则的 universe 是按事实键控的 —— 只折名字会解析掉键、再拿空事实集去判所有者自己的字段键。⇒ 承接者先读 #19347 的 diff,判哪几级同样需要记录、哪几级名字就够。

⚠️ 并且每一级都要带假阴性对照:扩 universe 容易把该拒的也放过。#19347 的做法是 test-first(修前 5 failed,修后 105 passed,ablation 回到 5 failed,还原以字节证明),承接者照抄这个形状。

关联,⛔ 均不重复

关系
#18203(已关) apps[].navigation 只读那一级 —— 同规则,另一级
#18441(已关) objectExtensions[] 注入字段那一级
#18442(已关) 贡献 app 名那一级
#19064(开,本席在飞) 对象级,PR #19347
本卡 其余集合级(A 层 3 条已复现 + B 层 3 条同形待测)

查重跑过(MCP search_issues,开+关卡皆在内,11 条逐条看过),⛔ 无重复。

查重词:translation-target-unknown · per-package leg · sibling package dashboard · packageBodyAsStack · buildUniverse top-level collections


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions