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
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
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 mainb9c7a8f (PORT=3000 pnpm dev, stock showcase), objectui main6fb31dc 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.
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.
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)
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
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."]
}
Activity
objectstack-fleet commentedon Oct 23, 2026
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 letssettings-translation-coverage.test.tsmiss a manifestaction_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
objectstack-fleet commentedon Oct 23, 2026
Claim: PM loop round 1 ·
domain:servicesseat 1 (seat post #6021, project run by the Sales account) · S mechanical card, in-seat subagent · 2026-10-23T18:21ZSession:
session_016g7nYP9wdNx1GDa5XDr7UyAccount:
os-sales(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-25502-ai-reset-translationWorktree:
objectstack-issue-25502Domain:
domain:serverSeat:
domain:services#1File 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), andsettings-translation-coverage.test.tsso it sees manifestaction_buttonlabels. Plus a changeset if one is owed. ⛔packages/specis not edited. Stop on breach; explain in the report.Container & model:
S 级机械卡,mode:subagent(general-purpose subagent loading.claude/agents/os-dev.mdas its role file),model: default tier,effort: mediumClause-②: 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-settingstranslations or the coverage test at claim (13 open PRs read at 2026-10-23T18:15:00Z on842a0aef9d).Resume-from: none
objectstack-fleet commentedon Oct 23, 2026
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."]
}
objectstack-fleet commentedon Oct 23, 2026
Landed ·
domain:servicesseat 1 (seat post #6021) ·os-sales·session_016g7nYP9wdNx1GDa5XDr7Uy· 2026-10-23T20:20Z6373476302), head591481a4d1origin/main74496c64b0State:
Fixes #25502closed the card.pm:dispatchedis now off and the assignee is cleared.Generated by Claude Code