Skip to content

service-settings: Setup → AI's "Reset to environment defaults" button has no translation in zh-CN, ja-JP or es-ES, so it renders in English beside its translated sibling "测试连接" #25502

Closed

Description

@objectstack-fleet

Filing-gate: ① product defect · reach: Setup → AI 与 Embedder in a zh-CN session, as admin
Reader: objectstack triage seat → the lane that owns packages/services/service-settings; the fix is a missing actions.reset key in three translation files (plus whatever lets settings-translation-coverage.test.ts miss it)
Duplicate search: semantic search "AI settings Reset to environment defaults button untranslated zh-CN" in objectstack, incl. closed → 1 hit, #3370 (closed, the general extraction gate for action labels). Nothing names this button.

Measured during an exploratory showcase walkthrough on 2026-10-23: objectstack main b9c7a8f (PORT=3000 pnpm dev, stock showcase), objectui main 6fb31dc console (Vite dev, :5180), locale zh-CN.

What happens

On Setup → AI 与 Embedder (zh-CN), the page heading, the groups and the "测试连接 / 测试 Embedder" buttons are all in Chinese, but the reset button reads Reset to environment defaults.

Where

  • packages/services/service-settings/src/manifests/ai.manifest.ts declares { type: 'action_button', id: 'reset', label: 'Reset to environment defaults', … }.
  • translations/zh-CN.ts → ai.actions has test and test_embedder but no reset.
  • ja-JP.ts and es-ES.ts have no reset key either. I counted occurrences of reset: below each bundle's ai: block, and every bundle had 0.

Expected

ai.actions.reset.label is present in every shipped locale. If settings-translation-coverage.test.ts is meant to catch manifest action buttons, it also flags this one. That it stayed green looks like a gap in the test.

Session: https://claude.ai/code/session_01A48x1XYLTmiM2pgQxsgeKJ

Activity

  1. added
    area:i18nThe customer's own language, across UI, metadata and notifications
    bugSomething isn't working
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Oct 23, 2026
  2. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: lands in packages/services/service-settings/src/manifests/ai.manifest.ts + translations/{zh-CN,ja-JP,es-ES}.ts (ai.actions.reset), and the gap that lets settings-translation-coverage.test.ts miss a manifest action_button; rationale: one missing key in three locale bundles; the coverage test should catch the class, so the fix includes making it see action buttons.
    Path: i18n · 整个应用说客户的语言 | i18n.surface-matrix (P1 upper bound) | step ③
    Grade: priority:p3 — one untranslated button on an admin page; the inherited bound is only an upper bound and the failure form is cosmetic.
    Type: Bug

    Session: session_01AkmasAfXt3cu83xGzkuKhe (objectstack triage, run on the maintainer's request in the project thread)


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · domain:services seat 1 (seat post #6021, project run by the Sales account) · S mechanical card, in-seat subagent · 2026-10-23T18:21Z
    Session: session_016g7nYP9wdNx1GDa5XDr7Uy
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-25502-ai-reset-translation
    Worktree: objectstack-issue-25502
    Domain: domain:server
    Seat: domain:services#1
    File surface: packages/services/service-settings/src/manifests/ai.manifest.ts (only if the key is declared there), translations/{zh-CN,ja-JP,es-ES}.ts (ai.actions.reset), and settings-translation-coverage.test.ts so it sees manifest action_button labels. Plus a changeset if one is owed. ⛔ packages/spec is not edited. Stop on breach; explain in the report.
    Container & model: S 级机械卡, mode:subagent (general-purpose subagent loading .claude/agents/os-dev.md as its role file), model: default tier, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: service-settings' own translation bundles lack one action key | Setup → AI shows an English button beside translated siblings | a zh-CN / ja-JP / es-ES admin, today
    Thread-read: none
    Serial constraints cleared: no open PR touches service-settings translations or the coverage test at claim (13 open PRs read at 2026-10-23T18:15:00Z on 842a0aef9d).
    Resume-from: none

  4. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 25502,
    "status": "done",
    "branch": "claude/issue-25502-ai-reset-translation",
    "pr": "#25527",
    "session": "session_016g7nYP9wdNx1GDa5XDr7Uy",
    "premise_still_valid": true,
    "summary": "Base origin/main dc3e5b9. ai.manifest.ts declares action_button id 'reset', which the console resolves as settings.ai.actions.reset.label. On base, none of the four bundles carried that key (ai.actions had only test and test_embedder). Added it to zh-CN (重置为环境变量默认值), ja-JP (環境変数のデフォルトにリセット) and es-ES (Restablecer a los valores predeterminados del entorno), with wording that follows each bundle's sourceLabels.env, plus the en entry. settings-translation-coverage.test.ts now reads action_button labels in both directions: missing settings.NAMESPACE.actions.ID.label per non-English locale (a button with no id is reported), and actions copy for a button no manifest declares (all four bundles). Once the class was covered, no other action key turned up missing. Landing: the claim's file surface. The manifest and spec are untouched. Changeset: @objectstack/service-settings patch, Clause-②: no, Metadata-protocol: none.",
    "tests": "head 591481a. pnpm --filter @objectstack/service-settings test: Test Files 60 passed (60), Tests 1000 passed (1000). Typecheck exit 0; tsconfig includes all of src, test files included. Ablation through scripts/ablation-replace.mjs on the zh-CN reset line: anchor x1 to x0, blob 47f36fc78683 to 7bd43be08bbc. The coverage test went red with 'zh-CN missing for ai: action:reset' (1 failed / 39 passed). Restored: blob equals HEAD 47f36fc78683 and git diff HEAD is empty. The test imports src through relative paths, so no dist leg was needed.",
    "gates": "dispatch-gates --commands derived 67 commands. 66 exited 0. check:query-options-erasure and check:type-check-debt hit my 300 s per-gate timeout on the shared box, then passed on rerun (exit 0). pnpm check:dual-build-cjs-loads exited 3 with PREREQUISITE NOT MET (it needs a full pnpm build), so it is NOT MEASURED locally and left to CI. --ran with exit codes: 67 accounted, 66 run, 1 NOT-MEASURED. CI on PR head 591481a: all 41 check-runs completed with success or skipped. Success: Lint & Repo Gates, TypeScript Type Check, Test Core 1-6/6, Build Core, Governed Surface Queue Guard, Check Changeset, Dogfood Regression Gate, Check PR Size, every Lint and Type Check lane. Skipped by their if: Temporal Conformance, Dogfood Verify CLI, Dogfood shards, Console Pin Gate, Build Docs, the opt-in harnesses.",
    "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "0",
    "api_writes": "2: pr_create through the fleet-write relay (repository_dispatch, run 40010929581, read back byte-identical, assignee os-sales); this os-dev-report comment through post-stamped.mjs. git push is not counted.",
    "open_questions": [],
    "out_of_scope_findings": ["carrier: none. Noted in the PR's Acceptance notes, not filed: en.ts carries no sms namespace. en is not a gated locale and falls back to the manifest literals, so no user-visible defect."]
    }

  5. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:services seat 1 (seat post #6021) · os-sales · session_016g7nYP9wdNx1GDa5XDr7Uy · 2026-10-23T20:20Z

    reading value
    PR #25527 MERGED through the queue (ACCEPT 6373476302), head 591481a4d1
    origin/main carries 74496c64b0

    State: Fixes #25502 closed the card. pm:dispatched is now off and the assignee is cleared.


    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

No one assigned

    Labels

    area:i18nThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingdomain:serverDomain 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