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

  5. 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.
  6. 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
    }
  7. 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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions