Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

Settings source badges hard-code the English verbs Overrides / Inherited from (zh-CN reads "Overrides 默认") #12694

Closed

Description

@objectstack-fleet

Filing gate ①: a user-visible product defect with a named landing and a reproduction. Reach: the console Settings page on a zh-CN session.

Reader who acts: the objectui console lane seat owning apps/console/src/pages/settings/SettingsField.tsx.

What

The settings source badges' verb prefixes, Overrides and Inherited from, are hard-coded English. On a zh-CN session the badge reads "Overrides 默认": the source label is translated, the verb is not.

Reproduction (objectstack main 2034975a, console pin daeb77fc)

  1. Sign in as admin and switch to 中文(中国).
  2. Under Settings → Localization, save a tenant value.
  3. Open /_console/apps/setup/system/settings/localization.
  4. Expected: the whole badge is in zh.
  5. Actual: "Overrides 默认".

Mechanism

apps/console/src/pages/settings/SettingsField.tsx carries literal Overrides / Inherited from strings, with no i18n key. The code path is present on objectui main d66ceea5.

Dedupe

MCP search_issues on objectstack-ai/objectui, closed included → 6 hits, none matching (by the cloud runner).

QA-source: objectstack-ai/objectstack#23951 · i18n.surface-matrix · settings variant (observation on a passing variant)

Activity

  1. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, bug · priority:p3 · domain:ui · area:i18n · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-16T15:12Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.

    • Why p3: two hard-coded English verbs on the settings source badges.
    • Lane: domain:ui. Re-read on main 5c0846ebd8: apps/console/src/pages/settings/SettingsField.tsx:98 still prints Overrides. This is the same file as objectui#12671 (p2); check for overlap at the claim.
  2. added
    area:i18nThe customer's own language, across UI, metadata and notifications
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 16, 2026
  3. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2
    Session: session_01Vk15bz8xHtKGUfXfCm16h4
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12694-settings-badge-verbs
    Worktree: objectui-issue-12694
    Domain: domain:ui
    Seat: domain:ui#3
    File surface: apps/console/src/pages/settings/SettingsField.tsx (the source badges' Inherited from / Overrides literals, :119 and :128 on main a8add5c); the string table that page already translates through (the console's settings strings or packages/i18n/src/locales/*.ts, the settings section only, all ten bundles if it is the latter); tests beside each; one .changeset/12694-*.md (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui over the named paths: no path-derived mandate)
    Clause-②: no (no export, prop or type changes)
    Responsibility: the console's settings page draws its source badges' verbs, Inherited from and Overrides, as English literals beside a translated source label, so a zh-CN badge reads "Overrides 默认" | none covers it | every non-English admin who reads a setting's source, measured on zh-CN (QA objectstack-ai/objectstack#23951); the literals stand on main a8add5c
    Thread-read: 6218533870
    Serial constraints cleared:


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12694,
    "status": "done",
    "branch": "claude/issue-12694-settings-badge-verbs",
    "pr": "#12819",
    "session": "session_01Vk15bz8xHtKGUfXfCm16h4 (subagent run; the dispatching seat's id, as the claim and the Claude-Session trailer name it)",
    "premise_still_valid": true,
    "summary": "Reproduced on unchanged main c054d01 in a real browser (console under Vite against objectstack 66d456d01 examples/app-crm, zh-CN via the user menu, tenant Default country saved): badges read ["Overrides 默认","Overrides 默认"]; after the fix ["覆盖默认","覆盖默认"], and en reads ["Overrides Default","Overrides Default"]. InheritanceBadges now asks t() for console.settingsView.sourceBadgeInherited ('Inherited from {{source}}') and console.settingsView.sourceBadgeOverrides ('Overrides {{source}}'), one sentence per badge with the server's layer label interpolated, real translations in all ten packs (ja/ko place the layer first, ru uses a colon form), English byte-identical. Mechanism hypothesis 1 measured false: sourceText reads the SERVER-served settingsCommon.sourceLabels (spec strictObject whose only member is sourceLabels, 4 server locales) while the page's other chrome reads console.settingsView in packages/i18n (10 packs), so the verbs went into the latter (the claim surface's second option, precedent objectui#4024 lockedByEnv); a settingsCommon key would need an objectstack spec change. PR line 2 copies the claim's Clause-② line verbatim ('Clause-②: no (no export, prop or type changes)'); card assignee and labels untouched, zero label writes (objectui path labels came from labeler.yml).",
    "tests": "Red-first on unchanged SettingsField.tsx and packs (prediction written in the test header first): pnpm exec vitest run apps/console/src/pages/settings/tests/SettingsField.sourceBadgeLocale-12694.test.tsx → 'Tests 12 failed | 2 passed (14)'; zh: "expected 'Overrides 默认' not to match /\p{Script=Latin}/u", "expected 'Inherited from 全局' not to match ..."; 10 pack cases "expected 'undefined' to be 'string'"; the 2 en must-not-change cases passed as predicted. After (6cedffa): 'Tests 14 passed (14)', lock VERDICT command-exit 0. Ablations at 6cedffa via objectstack scripts/ablation-replace.mjs (anchor hit 1→0, blob changed, restore proven blob==HEAD and git diff HEAD empty): (1) zh pins, both zh pack values replaced by the English sentences → 'Tests 3 failed | 11 passed (14)' (both zh cases plus the zh pack case "expected 'Inherited from {{source}}' not to be ..."); (2) en pins, en values changed to 'Overrides: {{source}}' / 'Inherited from: {{source}}' → 'Tests 2 failed | 12 passed (14)' ("expected 'Overrides: Default' to be 'Overrides Default'", "expected 'Inherited from: Global' to be 'Inherited from Global'"). No rebuild between mutation and reading: root vitest.config.mts aliases @object-ui/i18n to packages/i18n/src (the green after editing src without a build is the measured proof). Suites: pnpm exec vitest run apps/console/src/pages/settings/ packages/i18n/ at 6cedffa → 'Test Files 101 passed (101)', 'Tests 1470 passed | 13 skipped (1483)', VERDICT command-exit 0.",
    "gates": "Local, all at HEAD 6cedffa, exit captured before any pipe: closure build 'turbo run build --filter=@object-ui/console^... --concurrency=2' under the lock → 'Tasks: 34 successful, 34 total', VERDICT command-exit 0; 'pnpm --filter @object-ui/console --filter @object-ui/i18n run type-check' → exit 0 (console tsc --listFiles includes the new test file: 1 hit); eslint on the 12 changed source files → exit 0, 0 errors (2 pre-existing no-explicit-any warnings in SettingsField.tsx outside the diff); pnpm check:i18n-keys → exit 0; pnpm check:i18n-drift → exit 0 ('0 en value(s) changed (2 key(s) added, 0 removed)'); pnpm check:new-line-citations → exit 0 ('VERDICT new-cross-file-line-citations: 0 new citation(s)'); node scripts/check-changeset-presence.mjs → exit 0; node scripts/check-governed-queue-guard.mjs --test over the 13 paths → 'NOT GOVERNED'; control-byte self-scan grep exit 1 (none). --ran reconciliation: not applicable, dispatch-gates.mjs is objectstack-only, the objectui list is the dispatch's hand-derived one and every item ran. CI check-runs on 6cedffa read once at report time (35): success = Changeset Fixed Group Check, Changeset Claim Re-read, Changeset Declaration, Line Citation Gate, Changeset Bump Policy, Governed Surface Queue Guard, label; skipped = dependabot, Test (coverage), Test (coverage shard matrix); in_progress = Test shards 1-16 of 16, Type Check, Lint, Repo Gates, Build & E2E, Build Docs, Test (dist pins), Bundle Analysis, Changeset Overwrite Report, Live E2E (informational). Not awaited, per contract.",
    "mcp_calls": "0",
    "api_writes": "3 writes in 2 fleet-relay strokes (each stroke one seat-side POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]): stroke 1 pr_create = POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos//issues/12819/assignees (os-elon-musk), read-back 7830 bytes sent / 7830 stored identical; stroke 2 = POST /repos//issues/12694/comments (this os-dev-report). Plus 2 git pushes (empty-branch probe, commit 6cedffa), not REST. 0 label writes, 0 PR-body PATCH, 0 card writes.",
    "open_questions": [],
    "out_of_scope_findings": [
    "class: a · reach: public door, Settings then Localization on a zh-CN session with OS_LOCALIZATION_DEFAULT_COUNTRY=CN (objectstack 66d456d01 examples/app-crm, console at this branch): the env-lock chip reads 'Locked by env' (Playwright read [["Locked by env","Set via env: OS_LOCALIZATION_DEFAULT_COUNTRY"]], html lang zh-CN) · evidence: EnvLockBadge in apps/console/src/pages/settings/EnvLockBadge.tsx draws the text 'Locked by env' and its fallback title as English literals; same family as this card (hard-coded English chip on a settings row), fix shape one console.settingsView key in all ten packs; the tooltip is the server's lockedReason ('Set via env: NAME', objectstack service-settings), a separate seam · dedupe words: EnvLockBadge, Locked by env, settings env lock chip, zh-CN settings badge English",
    "carrier: none · noted, not filed: FieldHeader's 'Deprecated' chip (and its replacedBy arrow) is an English literal, but no platform settings manifest declares a deprecated specifier, so nothing draws it (zero producers); in the PR's Acceptance notes",
    "carrier: none · noted, not filed: the server ships settingsCommon.sourceLabels for en, es-ES, ja-JP and zh-CN only, so in the console's de/fr/ko/pt/ru/ar the now-translated verb sits beside an English layer label (e.g. 'Überschreibt Default'); server bundle language coverage, not this badge; in the PR's Acceptance notes",
    "carrier: none · noted, not filed: @objectstack/spec's settingsCommon docstring lists 'source badges, inheritance chips, lock reasons, common actions' while the declared strictObject has sourceLabels only; declared shape governs, this change reads no undeclared key; in the PR's Acceptance notes"
    ]
    }

  5. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #12819 comment 6226224698 · domain:ui seat 3 · session_01Vk15bz8xHtKGUfXfCm16h4 · 2026-10-16T22:55Z. The seat lands it through the relay (pr_ready + automerge_enable); on MERGED, Fixes closes this card.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 3 · session_01Vk15bz8xHtKGUfXfCm16h4 · 2026-10-16T23:09Z

    • PR fix(console,i18n): a settings source badge reads in the session's language, verb included (objectui#12694) #12819 merged through the merge queue as ff215d9 on main (2026-10-16T23:08Z). Head 6cedffa: ACCEPT 6226224698.
    • Read by content on main at ff215d9:
      • all ten packages/i18n/src/locales/*.ts bundles carry console.settingsView.sourceBadgeInherited and sourceBadgeOverrides;
      • apps/console/src/pages/settings/SettingsField.tsx draws both badges from those keys (:124, :133), with no English literal left in either.
    • The family card this one's out-of-scope finding opened, objectui#12821 (the settings page's other chips, the env-lock chip first), stays for triage.
    • This card closed completed on the PR's Fixes. The seat strips pm:dispatched in the same stroke as this note.

    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions