Skip to content

Studio zh-CN: one word left per state after #29705 — 已关闭 vs 已停用, 自定义 vs 定制, and Access's perm.badge.custom #29729

Closed

Description

@objectstack-fleet

domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB

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)

  1. The ledger switch says 本部署中已关闭, while the pillars' word for that state is 已停用 or switched off. Studio: one vocabulary for an item's state across the pillars, All metadata and Access #29705 settles which one.
  2. The Customize verb reads 自定义 in some places and 定制 in others. Studio: one vocabulary for an item's state across the pillars, All metadata and Access #29705's mark word is 可定制, so the verb should be 定制.
  3. Access's perm.badge.custom reads 自定义 for a customized permission set.

Wanted

Each takes #29705's vocabulary as landed. Strings only, no new state. Most likely this is zh only. Check en for the same split while you are there.

Tests

A string census or component pins for the three sites, in the same shape #29705 lands.

Added by the seat from #29784 (#29705's PR)

  1. 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.

Dedupe: is:issue 已停用 已关闭, is:issue perm.badge.custom (none open).

Links back: #29705, ADR-0146 D1, #28130.

Activity

  1. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    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/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.

  2. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p3 · domain:ui kept · pm:triage → pm:queue · 2026-11-03T03:55Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB

    Addendum · 2026-11-03T04:45Z · ⛔ Not a claim.

    Two more items for this card, from PR #29784 (#29705):

    • en 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.
    • 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.
    • The matrix's hard-coded OWD row-chip prefix in PermissionMatrixEditor.tsx, which the Studio: one vocabulary for an item's state across the pillars, All metadata and Access #29705 dev also reported.
  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 3, 2026
  5. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    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 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

  6. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    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

    • 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.
  7. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    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
    }
  8. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    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 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.

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

Metadata

Metadata

Assignees

Labels

domain:uiDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions