Description
domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf
Filing gate: ① product defect, named location. Out-of-scope finding S1 of the contract review of PR #30902 (6682790803, card #30511), which makes zh-Hant a console language. ⛔ Not a claim. Triage sets the grade and the lane.
class: a · reach: every inline locale map an author writes with both a Simplified and a Traditional key, read or edited in a zh-Hant console session; NOT MEASURED live (read in code on origin/main 98f640d581 and on the PR branch, where pickLocalized.ts is unchanged).
Business reason
After #30902 a Traditional Chinese user (Taiwan, Hong Kong) gets Traditional chrome, but an object or field label written as { en, 'zh-CN': '客户', 'zh-TW': '客戶' } still shows the Simplified zh-CN entry to them, and an edit they make in Studio lands on the zh-CN key, overwriting the Simplified authors' text while the zh-TW entry stays stale. The tenant sees mixed scripts on one screen and loses text on save.
Where
ui/packages/i18n/src/pickLocalized.tspickLocalized: forlanguage = 'zh-Hant',read('zh-Hant')andread('zh')miss, then the region limb takes the FIRST own key sharing the basezh(zh-CNin authoring order), never a key of the same script.- Same file,
localeWriteKey(the write-side twin): the same first-sibling limb picks the key an edit is written to.
Wanted
- Measure first on the feat(i18n)!: the Console's language packs follow the platform locale table, keyed by its tags, and Traditional Chinese (zh-Hant) ships #30902 head (or
mainafter it lands): azh-Hantsession over a map holdingzh-CNandzh-TW(andzh-Hant/zh-Hansspellings); record which entry is read and which key an edit writes. - If it reproduces: the read and write limbs prefer a key of the same script (the spec's
PLATFORM_LOCALE_READ_ALIASES/platformLocaleTagOfalready sayzh-TW/zh-HKmeanzh-Hantandzh-CN/zh-SGmeanzh-Hans), and only then anyzh-*sibling. One reading for both limbs, never two copies. - Pin both limbs with a test per spelling plus an ablation.
Level: client behaviour only, expected Clause-②: no, Metadata-protocol: none.
Reader: domain:ui (ui/packages/i18n/src/pickLocalized.ts).
Serial: after PR #30902 (#30511), which adds the zh-Hant language.
Related: #30511, PR #30902, #29428.
Activity
objectstack-fleet commentedon Nov 6, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p2 ·
domain:ui·area:i18n· 2026-11-06T10:53Z⛔ Not a claim.
zh-Hantbecomes a console language. p2, the i18n phase 2 (Console UI): ui/packages/i18n reads PLATFORM_LOCALES, adds zh-Hant, and moves pack keys to table tags #30511 family grade.findingis removed.Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf
Claim: PM loop round 6 · 2026-11-06T12:01Z
Session:
session_01L9qibxSGAjHBvjATmenUGp(card thread, dev) · seatsession_01L9qibw7DekEe3wx5f3zphfAccount:
os-teslaBranch:
claude/project-thread-7el3c5(a cloud card thread can push only its designated branch)Worktree:
objectstack-issue-30910Domain:
domain:uiSeat:
domain:ui#2File surface:
ui/packages/i18n/src/pickLocalized.tsand its tests, root.changeset/Container & model: M,
mode:thread,model: default tier(dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
ui/packages/i18n(objectstack)pickLocalized/localeWriteKeytake the firstzh-*sibling key regardless of script · the platform path is the spec's locale table (PLATFORM_LOCALE_READ_ALIASES/platformLocaleTagOf), which says which tags meanzh-Hant· reached by any Traditional Chinese session reading or editing an inline label map; NOT MEASURED, the dev measures firstThread-read: 6683176666
Premise: holds (
pickLocalized.tsonorigin/main7d9682ff: the region limb isObject.keys(o).find((k) => k.split('-')[0] === base …), script-blind) · measured first by the devSerial constraints cleared: PR #30902 (#30511, this seat) touches
ui/packages/i18n/**but notpickLocalized.ts; this claim edits no file in #30902's list.objectstack-fleet commentedon Nov 6, 2026
domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf
Claim amendment 1 · 2026-11-06T12:05Z · to claim 6684338116
File surface (widened):
ui/packages/i18n/src/pickLocalized.tsand its tests;packages/spec/src/ui/i18n-label-resolver.tsand its tests (the spec twinresolveI18nLabel, which has the same script-blind first-sibling limb, measured by the dev); the plugin-listi18nLabel-resolver-paritytest (both-script rows); root.changeset/(@object-ui/i18n+@objectstack/specpatch).ui/packages/i18n/package.jsonandpnpm-lock.yaml⛔ (PR #30902 adds the@objectstack/specdependency; this branch mergesmainafter #30902 lands and does not touch them).Why: fixing the client twin alone would split one console session (nav and app-shell Simplified, plugin text Traditional); the parity test pins both to one rule.
Review owed: the diff will touch a published spec source (
packages/spec/src/**), so aCONTRACT_REVIEW_TIERcontract review is owed on its head before ACCEPT.Serial: lands after PR #30902.