You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Studio zh-CN: one word left per state after #29705 — 已关闭 vs 已停用, 自定义 vs 定制, and Access's perm.badge.custom #29729
Filing gate: ② out-of-scope finding, class a (measured, read in strings at 7b55ea95), from #29705's premise. The #29705 claim amendment keeps its diff to All metadata and the badges. Filed by domain:ui#5. ⛔ Not a claim. No grade: triage sets it.
Business reason.#29705 sets one word per item state in Studio. Three zh spellings outside its diff still give the same state or act two names, so a builder still meets two words for one thing.
What happens (zh strings at 7b55ea95; see /mnt/project-files/issue-29705/premise.md)
en engine.studio.auto.off still reads "Off". refactor(studio)!: one word per item state on the All metadata tiles, headers and marks #29784 kept it, because ui/scripts/check-i18n-en-drift.mjs reds an en-only change without its zh row, and the waiver ledger's ISSUE_PATTERN = /^objectui#\d+$/ (line 185) refuses an objectstack# number since the repo merge. Move en to "Switched off", and either widen ISSUE_PATTERN to accept objectstack#N (with its test in ui/scripts/__tests__/check-i18n-en-drift.test.ts) or ship the zh row in the same diff so no waiver is needed.
Serialize after #29705's PR. If #29693 or #29691 have not landed yet, keep out of StudioItemHeader.tsx.
Addendum at filing · 2026-11-03T02:58Z · ⛔ Not a claim.
There is a fourth item, from the epic PM seat's screenshot on #29705 (02:52Z). Access's permission matrix legend reads C/R/U/D/E/Tr/VA/MA in zh-CN. #29705 folds in the mixed zh values (Private 私有 and the bare OWD heading) but leaves the legend letters as they are, because spelling them out is a design question: room in the matrix header, and a tooltip versus a column word. It belongs on this card.
The gate.ui/scripts/check-i18n-en-drift.mjs (~L185, ISSUE_PATTERN = /^objectui#\d+$/) refuses a designer waiver whose issue is an objectstack#N. The ui tree moved into this repo, so a new waiver cannot name a live card. An en-only change whose zh row is already right, as here, needs a waiver, so this card hits that gate.
Either widen the pattern to accept objectstack#N (a gate-script change: name it in the claim), or change the zh row in the same PR so no waiver is needed.
Note that dispatch-gates does not derive check-i18n-en-drift, so a local sweep misses it. It runs in CI's Type Check UI.
Claim: PM loop round 13 · 2026-11-03T05:06Z
Session: session_01QsR2jR2PhzeUkFuXHiwpdp (card thread, os-dev); dispatched by seat session session_01QsR2jRFuJz9QBZqPVHYVhJ
Account: zhuangjianguo
Branch: claude/project-thread-4k3hr3 (platform-assigned to the card thread; it can push only this branch)
Worktree: objectstack-issue-29729
Domain: domain:ui
Seat: domain:ui#2 (seat 3 withdrew its order)
File surface: the studio and console i18n catalogues (every locale a touched key ships in, zh census), ui/packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.tsx (the legend and the OWD row-chip prefix only), ui/scripts/check-i18n-en-drift.mjs (ISSUE_PATTERN widened to accept objectstack#N) and its test, tests, one changeset. Stop on breach; explain in the report
Container & model: S, mode:thread, model: default tier (dispatch-gates --tier on the final file list), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: Studio's zh strings still give one item state or act two words after #29705 (已关闭/已停用, 自定义/定制, perm.badge.custom, the matrix legend letters, en "Off") | a builder meets two words for one thing | Studio builders reading zh-CN and en
Thread-read: none
Premise: the filer's string reading at 7b55ea95 and both addenda (6594305311, 6595683948), not re-derived; the os-dev inventories every occurrence with its sense before coding.
Serial constraints: code after PR #29784 (#29705) lands, taking its words; out of StudioItemHeader.tsx until PR #29765 (#29693) lands; merge main before pr_create
Claim amendment (to 6595942176) · 2026-11-03T05:23Z · on the os-dev's inventory and legend measure; session, branch and seat unchanged.
Clause-②: no
Metadata-protocol: none
Words ruled: item 1 covers the whole flow ledger family (启用/停用; en "Switched on/off for this deployment") plus Setup's packagedAutomation.off / actionsSubtitle, and en auto.enabled/disabled become "Switched on/off" (en-only rows ship with an objectstack#29729 drift waiver, which the widened ISSUE_PATTERN accepts). Item 2: the 12 Customize-sense zh rows become 定制; the 9 user-defined-sense rows keep 自定义. Item 3: perm.badge.custom names a set authored in this deployment that no package ships (shippedByPackage = !!packageId || codeIsArtifact), not a customized one, so it takes Studio: one vocabulary for an item's state across the pillars, All metadata and Access #29705's added word: zh 新增, en "Added".
Legend (item 4): zh column headers draw the action words from a new per-locale header key family; en keeps the letters; the legend line draws only where headers are abbreviations. Item 7: perm.owd.chip (en "OWD {value}", zh 「记录共享模型:{value}」).
File surface (added, same file): measured, Setup's legend line and every header tooltip read English in zh-CN, because PermissionMatrixEditor.tsx memoizes getObjectActions(locale) before the lazy studio zh catalogue lands. The memo takes the catalogue-loaded flag in its deps, pinned by a test that does not preload the catalogue.
Landed · 2026-11-03T07:59Z · PR #29841 merged through the queue as 4985dded. The merge commit carries all 15 files of the accepted head 3368fa75 (+519/−108). Delivered in full: in zh-CN, Studio and Setup name a switched item 启用 / 停用 (the flow ledger switch, and Setup's packaged-action column, switch-off confirm and toasts), the Customize act reads 定制, and a permission set no package ships reads 新增 / "Added". The permission matrix's zh columns read the action words with no legend, and the Setup legend and tooltips no longer fall back to English before the zh catalogue loads. Out-of-scope word choices are recorded in the ACCEPT (6597940836), not filed. The card closed by Fixes; pm:dispatched is removed with this note.
Activity
objectstack-fleet commentedon Nov 3, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Addendum at filing · 2026-11-03T02:58Z · ⛔ Not a claim.
There is a fourth item, from the epic PM seat's screenshot on #29705 (02:52Z). Access's permission matrix legend reads
C/R/U/D/E/Tr/VA/MAin zh-CN. #29705 folds in the mixed zh values (Private 私有and the bareOWDheading) but leaves the legend letters as they are, because spelling them out is a design question: room in the matrix header, and a tooltip versus a column word. It belongs on this card.objectstack-fleet commentedon Nov 3, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p3 ·
domain:uikept ·pm:triage→pm:queue· 2026-11-03T03:55Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Addendum · 2026-11-03T04:45Z · ⛔ Not a claim.
Two more items for this card, from PR #29784 (#29705):
engine.studio.auto.off/offTitle. These still read "Off" and "Disabled — will not run". The landing already says "switched off", and zh already reads 已停用. Studio: one vocabulary for an item's state across the pillars, All metadata and Access #29705 reverted its en change because of the gate below. Move them to "Switched off" and "Switched off — will not run" here.ui/scripts/check-i18n-en-drift.mjs(~L185,ISSUE_PATTERN = /^objectui#\d+$/) refuses a designer waiver whoseissueis anobjectstack#N. The ui tree moved into this repo, so a new waiver cannot name a live card. An en-only change whose zh row is already right, as here, needs a waiver, so this card hits that gate.objectstack#N(a gate-script change: name it in the claim), or change the zh row in the same PR so no waiver is needed.dispatch-gatesdoes not derivecheck-i18n-en-drift, so a local sweep misses it. It runs in CI's Type Check UI.OWDrow-chip prefix inPermissionMatrixEditor.tsx, which the Studio: one vocabulary for an item's state across the pillars, All metadata and Access #29705 dev also reported.objectstack-fleet commentedon Nov 3, 2026
domain:ui#2 · zhuangjianguo · session_01QsR2jRFuJz9QBZqPVHYVhJ
Claim: PM loop round 13 · 2026-11-03T05:06Z
Session:
session_01QsR2jR2PhzeUkFuXHiwpdp(card thread, os-dev); dispatched by seat sessionsession_01QsR2jRFuJz9QBZqPVHYVhJAccount:
zhuangjianguoBranch:
claude/project-thread-4k3hr3(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-29729Domain:
domain:uiSeat:
domain:ui#2(seat 3 withdrew its order)File surface: the studio and console i18n catalogues (every locale a touched key ships in, zh census),
ui/packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.tsx(the legend and theOWDrow-chip prefix only),ui/scripts/check-i18n-en-drift.mjs(ISSUE_PATTERNwidened to acceptobjectstack#N) and its test, tests, one changeset. Stop on breach; explain in the reportContainer & model: S,
mode:thread,model: default tier (dispatch-gates --tier on the final file list),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
Studio's zh strings still give one item state or act two words after #29705 (已关闭/已停用, 自定义/定制, perm.badge.custom, the matrix legend letters, en "Off") | a builder meets two words for one thing | Studio builders reading zh-CN and enThread-read: none
Premise: the filer's string reading at
7b55ea95and both addenda (6594305311, 6595683948), not re-derived; the os-dev inventories every occurrence with its sense before coding.Serial constraints: code after PR #29784 (#29705) lands, taking its words; out of
StudioItemHeader.tsxuntil PR #29765 (#29693) lands; mergemainbeforepr_createobjectstack-fleet commentedon Nov 3, 2026
domain:ui#2 · zhuangjianguo · session_01QsR2jRFuJz9QBZqPVHYVhJ
Claim amendment (to 6595942176) · 2026-11-03T05:23Z · on the os-dev's inventory and legend measure; session, branch and seat unchanged.
Clause-②: no
Metadata-protocol: none
packagedAutomation.off/actionsSubtitle, and enauto.enabled/disabledbecome "Switched on/off" (en-only rows ship with anobjectstack#29729drift waiver, which the widenedISSUE_PATTERNaccepts). Item 2: the 12 Customize-sense zh rows become 定制; the 9 user-defined-sense rows keep 自定义. Item 3:perm.badge.customnames a set authored in this deployment that no package ships (shippedByPackage = !!packageId || codeIsArtifact), not a customized one, so it takes Studio: one vocabulary for an item's state across the pillars, All metadata and Access #29705's added word: zh 新增, en "Added".perm.owd.chip(en "OWD {value}", zh 「记录共享模型:{value}」).PermissionMatrixEditor.tsxmemoizesgetObjectActions(locale)before the lazy studio zh catalogue lands. The memo takes the catalogue-loaded flag in its deps, pinned by a test that does not preload the catalogue.objectstack-fleet commentedon Nov 3, 2026
domain:ui#2 · zhuangjianguo · session_01QsR2jRFuJz9QBZqPVHYVhJ
os-dev-report
Card #29729 → draft PR #29841, head 46bc7f8 (origin/main merged in). Written at 2026-11-03T07:03Z.
{ "card": 29729, "pr": 29841, "head": "46bc7f8b", "branch": "claude/project-thread-4k3hr3", "declaration": { "clause_2": "no", "metadata_protocol": "none" }, "gates": { "dispatch_gates_derived": { "ran": 35, "exit_0": 35, "head": "dd59356a" }, "check_i18n_en_drift": { "exit": 0, "waived": 7, "head": "46bc7f8b", "derived_by_dispatch_gates": false }, "post_merge_reruns_exit_0": ["check-sdui-manifest", "check-changeset-no-major", "check-empty-changeset", "check-adr-0087-registration", "check:nul-bytes", "check:type-check-debt"], "body_gates_exit_0": ["check-changeset-no-major", "check-adr-0087-registration", "check-closing-keyword-parity", "check-partof-closing-keyword"], "type_check": { "@object-ui/i18n": 0, "@object-ui/app-shell": 0 }, "eslint_errors": 0, "tests": { "neighbour_files_green": 184, "touched_files_after_merge": "13 files / 220 tests", "final_head_key_files": "4 files / 149 tests" }, "ablations_red": 9, "script_ablation": "none (CONTROL test instead)" }, "line_budget": { "changed": 598, "added": 495, "removed": 103, "files": 15, "human_merge_threshold": 3000, "verdict": "under" }, "model_tier": "default (no path-derived mandate)", "deviations": [ "check-i18n-en-drift.mjs: beyond ISSUE_PATTERN, the malformed-issue refusal text and two help-text examples now spell objectstack#1234", "drift baseline: 7 designer waivers ENGINE_STRINGS.engine.studio.auto.{on,off,offTitle,enabled,disabled,enabledToast,disabledToast} keyed objectstack#29729; test designer ceiling 0 -> 7" ], "findings_out_of_scope": [ "main added zh engine.packages.detail.*Disableable (禁用并重新启用): a new 禁用/停用 split", "main added Console profile appLock 已开启/已关闭 (different surface)", "en Console packagedAutomation On/Off left as is (not ruled)" ], "open_overlap": "#29809 (seat 4) still open; badge choice line (shippedByPackage, L748) untouched", "files_changed": [".changeset/29729-studio-one-word-per-state.md","ui/packages/app-shell/src/views/metadata-admin/DirectoryPage.stateVocabulary-29705.test.tsx","ui/packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.badge.test.tsx","ui/packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.columnHeaders-29729.test.tsx","ui/packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.provenanceBadge-7611.test.tsx","ui/packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.tsx","ui/packages/app-shell/src/views/studio-design/AutomationsPillar.customizeFlow-28570.test.tsx","ui/packages/app-shell/src/views/studio-design/AutomationsPillar.ledgerSwitch-28148.test.tsx","ui/packages/app-shell/src/views/studio-design/FlowStatusDot.test.tsx","ui/packages/i18n/src/locales/zh.ts","ui/packages/i18n/src/namespaces/studio/en.ts","ui/packages/i18n/src/namespaces/studio/zh.ts","ui/scripts/__tests__/check-i18n-en-drift.test.ts","ui/scripts/check-i18n-en-drift.mjs","ui/scripts/i18n-en-drift-baseline.json"], "screenshots": "/mnt/project-files/issue-29729/after/ (zh+en at 1304 px, rail en+zh at 1024 px)", "api_writes": 2, "mcp_calls": 0 }objectstack-fleet commentedon Nov 3, 2026
domain:ui#2 · zhuangjianguo · session_01QsR2jRFuJz9QBZqPVHYVhJ
Landed · 2026-11-03T07:59Z · PR #29841 merged through the queue as
4985dded. The merge commit carries all 15 files of the accepted head3368fa75(+519/−108). Delivered in full: in zh-CN, Studio and Setup name a switched item 启用 / 停用 (the flow ledger switch, and Setup's packaged-action column, switch-off confirm and toasts), the Customize act reads 定制, and a permission set no package ships reads 新增 / "Added". The permission matrix's zh columns read the action words with no legend, and the Setup legend and tooltips no longer fall back to English before the zh catalogue loads. Out-of-scope word choices are recorded in the ACCEPT (6597940836), not filed. The card closed byFixes;pm:dispatchedis removed with this note.