Skip to content

console: four routed developer/system pages import no i18n at all (ApiConsolePage, PublicFormsPage, IntegrationsPage, AiPendingActionsPage) and DatasourceResourcePage has 17 English literals — 233 hard-coded strings #25916

Closed

Description

@os-zhuang

Filing gate ③: a maintainer-directed task. Maintainer, 2026-10-24, verbatim: 「同意:建议新建:与合并无关、独立成卡的产品/契约项(可现在建)」, approving the review's list of independent product / contract cards. Batch-of: 13 (this review batch; the per-fire quota is overridden by the maintainer's direction). Also filing gate ①: reach: the routed pages /developer/api-console, /developer/public-forms, /developer/integrations, /system/ai-pending-actions (lazy routes in apps/console/src/AppContent.tsx) render English regardless of the user's locale.

维护者速读

全仓 TSX(非测试、不含 Shadcn ui/)按 JSX 文本节点与 placeholder/title/aria-label/alt/label 字面量统计:233 处硬编码英文,apps/console 136、app-shell 48、components 27。其中四个路由页面完全不导入 @object-ui/i18n:ApiConsolePage.tsx(603 行)、PublicFormsPage.tsx(744)、IntegrationsPage.tsx(218)、AiPendingActionsPage.tsx(60);DatasourceResourcePage.tsx 17 处,与开卡 objectstack-ai/objectui#13353 是同一页。i18n 的 key 对齐本身是健康的(十语 10/10),所以这是「漏接」不是「漏翻」。

Measured (2026-10-24, HEAD 7981384; regex over 592 non-test TSX files: JSX text nodes starting with a capital letter and the attribute literals above, TS-generic noise removed; the hit list is in the review scratchpad hardcoded-clean.txt)

Task

  • Localise the four routed pages (one PR each; keys under console.developer.* / console.system.*), then the DatasourceResourcePage cluster together with objectui#13353.
  • Move dev-only surfaces (apps/console/src/dev/*, DebugPanel, PerformanceDashboard) under a dev/ folder so a future census can exclude them by path; no new gate in this card.

Who acts: objectui domain:ui seat. Effort M (about 150 of the 233 hits). Risk low.

Filed by the read-only whole-repo review session https://claude.ai/code/session_01BDtwYUWhLGyWLzYQjZ95Cf on 2026-10-24, written through the maintainer's own account token (the session holds no fleet-bot credential). Evidence files: that session's scratchpad (objectui-review-report.md, findings-*.md). ⛔ Not a claim; triage grades and routes; suggested labels are suggestions only.


Generated by Claude Code

Activity

  1. added
    area:i18nThe customer's own language, across UI, metadata and notifications
    and removed on Oct 24, 2026
  2. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    Triage: first grade — i18n · priority:p2 · domain:ui · area:i18n · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-24T17:04Z

    ⛔ Not a claim, ⛔ not a dispatch.
    finding comes off.

    • Scope: the four routed pages with no i18n at all come first, then the other hard-coded literals by surface. No new lint gate: a rule that fails on hard-coded strings would be a new gate, which defaults to no.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1 · 2026-10-25T02:06Z
    Session: session_01QY7vnZv639mvLbooY6nBKU (the card session that works this card; claim written by the domain:ui seat 4 session session_01XWGTsmqrtrt1Zqh1ioWqsT)
    Account: os-elon-musk
    Branch: claude/project-thread-notxiv (platform-assigned at spawn; the card session can push only this branch)
    Worktree: objectui-issue-13460
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: apps/console/src/pages/developer/{ApiConsolePage,PublicFormsPage,IntegrationsPage}.tsx, apps/console/src/pages/system/AiPendingActionsPage.tsx, the hard-coded literals in packages/app-shell/src/views/metadata-admin/datasource/DatasourceResourcePage.tsx; the keys they need in packages/i18n/src/locales/*.ts (all ten packs, so parity holds); their tests; .changeset/13460-*.md (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: four routed console pages and the datasource page render English whatever the user's locale | the console's existing useObjectTranslation + locale packs (parity 10/10) | every non-English operator opening Developer / System pages
    Thread-read: 6387061326
    Premise: holds — on objectui main c85408f the four routed pages exist at the paths above and import nothing from @object-ui/i18n; DatasourceResourcePage.tsx carries the card's English literals
    Serial constraints cleared: seat 4's objectui#13461 card (a11y names) may add keys to the same locale packs and touch console pages — ordinary concurrency, the second to land merges main and resolves; seat 1's objectui#13442 / objectstack-ai/objectui#13449 / objectstack-ai/objectui#13450 declare none of these paths; objectui#13353 (same datasource page, enum option labels, pm:queue) is not in flight
    Writes: all PR, comment and label writes go only through objectstack's relay (scripts/pm/fleet-write); never write with GitHub MCP.

    • Ruling section: filed under the maintainer's 「同意:建议新建:与合并无关、独立成卡的产品/契约项(可现在建)」; triage 6387061326: the four routed pages first, then the other literals by surface; ⛔ no new lint gate.
    • One PR from this branch for the four pages plus the DatasourceResourcePage literals; body says Part of objectstack-ai/objectstack#25916. Keys under console.developer.* / console.system.* as the card names; non-English packs get real translations, not English copies, where the pack's neighbours are translated.
    • Out of this PR, left on the card: objectui#13353 (enum option labels on the datasource page, a different defect: leave it to its own card); moving dev-only surfaces under dev/; the remaining ~80 literals on other surfaces (AuditLogPage, FlowRunsPage, ShareDialog, …). After landing the card returns to pm:queue with that list.
  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Claim amendment · domain:ui#4 · 2026-10-25T02:11Z · amends the claim 6392274945 (append-only; the claim's other lines stand)

    File surface, added on the card session's request: packages/app-shell/src/views/metadata-admin/i18n.ts, for engine.datasource.* rows (en-US + zh-CN). DatasourceResourcePage sits in the metadata-admin tree, which reads its copy from that module-local engine.* table by design (packages/i18n/README.md, "Scope — the engine.* carve-out"; the call-site gate skips the module by declaration). Its literals go there, not into the ten packs under console.*. The four routed console pages still use the ten packs. The enum option labels stay with objectui#13353.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 13460,
      "status": "in_progress",
      "branch": "claude/project-thread-notxiv",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13489",
      "session": "session_01QY7vnZv639mvLbooY6nBKU",
      "premise_still_valid": true,
      "summary": "ApiConsolePage, PublicFormsPage, IntegrationsPage and AiPendingActionsPage read 108 new console.developer.* / console.system.* keys, translated in all ten packs, each call carrying the en value as inline defaultValue so provider-less mounts and existing English tests are unchanged. Sentences with an inline bold/code element are one translated string with private-use-mark slots (apps/console/src/lib/inlineSlots.tsx). DatasourceResourcePage reads 55 new engine.datasource.* rows (en-US + zh-CN) in the Studio table per the engine.* carve-out (claim amended, comment 6392316827); the driver enum option values (#13353) are untouched. status in_progress only because CI had not reported at writing time.",
      "tests": "New: consolePagesLocale-13460.test.tsx + DatasourceResourcePage.locale-13460.test.tsx: 2 files, 14/14 passed. vitest over the 32 test files importing the five pages, inlineSlots, or reading the Studio table source: 32 files, 559/559 passed (after fixing selectPlaceholderLocale-11252, which clicked the now-translated 'New datasource' button by its English name). vitest packages/i18n/: 87 files, 1353 passed, 13 skipped (first run failed ellipsis-glyph-3878 and de-quote-pairing-3876 on the new values; fixed by U+2026 and by dropping a de quote pair).",
      "gates": "Local, each under os-verify-lock VERDICT command-exit 0 unless noted: turbo run type-check --filter console/app-shell/i18n (38 tasks) exit 0; node scripts/check-i18n-call-site-keys.mjs exit 0; check-i18n-en-drift.mjs exit 0; check-i18n-dead-keys.mjs exit 0; check-i18n-designer-table-parity.mjs exit 0; check-changeset-presence.mjs exit 0 (1 changeset); check-changeset-no-major.mjs exit 0; pnpm check:new-line-citations exit 0 (0 new); eslint on touched sources: 0 errors, warning set identical to origin/main. objectui has no dispatch-gates.mjs, so the local list is hand-derived. NOT MEASURED: sharded full pnpm test, check:eager-closure (en catalogue grows), check:readme-exports: CI. PR check-runs: not yet reported at writing time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "1 — subscribe_pr_activity (claude-code-remote, not a GitHub write); 0 MCP GitHub calls",
      "api_writes": "3 — relay pr_create objectui#13489; relay pr_request_reviewers objectui#13489; relay comment objectui#13460 (this report)",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: objectui#13460 (card, back to pm:queue after landing) · the remaining hard-coded literals on other surfaces (AuditLogPage, FlowRunsPage, ShareDialog, PerformanceDashboard, DebugPanel, AgentConnectSection) and the dev/ move, per the claim · noted, not filed"
      ]
    }

    Generated by Claude Code

  6. 22 remaining items

  7. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1
    Session: session_017iXjUm1rujwDk7f3KT1Pkk (seat); implementing card thread session_01C6T942afhqAP5w9XBmfTDC
    Account: os-steve
    Branch: claude/project-thread-o8o2xv (platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record. Wording amended by the seat: an issue-shaped placeholder here was read by the Closing-Target Claim Guard as a second claimed branch)
    Worktree: the card thread's own container
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: the leftover literals of comment 6407864045 (minus ShareDialog badges, formatDate helpers, Agent key prefill, ConnectAgentWidget product names): ui/packages/components/src/renderers/complex/data-table.tsx (row titles), ui/packages/app-shell/src/views/ObjectView.tsx (Loading-chart region only, ~3179/3211), ui/packages/components/src/renderers/layout/react-page.tsx, ui/packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx (~3584-3586), ui/apps/console/src/pages/developer/FlowRunsPage.tsx (~206/354), optionally ui/apps/console/src/dev/* and *-preview.tsx; ui/packages/i18n/src/locales/*.ts (all ten packs); tests (stop on breach; explain in the report). ⛔ ui/.github/** and the root .github/workflows/ci.yml are out of bounds (maintainer's word, ui-merge epic in flight). Changeset in the root .changeset/.
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a: renderer defect in ui/, the producing code is the cited ui file; no platform path covers it; reached through the public Console
    Thread-read: 6409529676
    Premise: holds (read-only premise check at origin/main 59d9181, 2026-10-26T06:53Z; spot-checked by the seat)
    Serial constraints cleared: ObjectView.tsx shared with #25901 by REGION (this card: Loading-chart ~3179/3211; #25901: view-tab regions); locale packs shared with #25898 (append-only keys, later lander merges); no open PR touches these files (open-PR file scan 2026-10-26T06:33Z)

    Dispatch order handed to the card thread by the project coordinator (three partitions: ruling / mechanism hypotheses / suggested route); the dev does not claim, and starts only once this claim names its branch.

  8. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 25916,
      "status": "done",
      "branch": "claude/project-thread-o8o2xv",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25978",
      "head": "3d2fd1da",
      "session": "session_01C6T942afhqAP5w9XBmfTDC",
      "premise_still_valid": true,
      "summary": "Draft PR 25978 (Part of 25916) moves the round-3 leftovers onto locale rows: data-table open/cancel/save titles (table.openRecord, table.cancelChanges, table.saveRow), the chart view loading fallback in ObjectView (existing chart.loading, Loading-chart region only), the kind:'react' page notice, empty-source refusal, loading line and error titles (new reactPage.* with chip slots so each language places the code chips), the Studio References sheet column heads (engine.edit.refsCol* in the Studio table, en + zh), and Flow Runs client diagnostics (state keeps the method name, worded at render via console.developer.flowRuns.clientMethodUnavailable; thrown messages unchanged). All ten packs carry real translations; with no provider every surface still reads its English. Excluded per the scope ruling: ShareDialog enum badges, formatDate helpers, Agent key prefill, ConnectAgentWidget product names; dev-only harnesses are left to Acceptance notes, so the PR stays Part of. No card assignee written; PR assignee os-steve came from pr_create.",
      "tests": "3 new files: components renderer-copy-locale-25916 (7 tests), app-shell ResourceEditPage.referencesColumns-25916 (3), console flowRunsClientDiagnostic-25916 (6); each zh test reads the zh pack row guarded as Han text and asserts no slot or private-use mark leaks, plus no-provider English controls. Affected-package run at 962206c5: 195 files, 3305 passed, 13 skipped, 0 failed; the three new files re-ran green after the typing and lint fixes. Type-check of i18n, components, app-shell and console green at the fix head. Local eslint on every touched file: 0 errors.",
      "gates": "local: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 46 commands (check-sdui-manifest, check-changeset-fixed, check:type-check-debt, check:nul-bytes, check:published-files, check:cross-package-test-inputs and the rest); each run, every exit 0 (check:type-check-debt re-run with a longer timeout after a 300s tool timeout: VERDICT command-exit 0, 26 raw tsc errors, none above ledger); --ran reconciles 46/46. ui scripts check-i18n-call-site-keys, en-drift, dead-keys, designer-table-parity, new-line-citations: exit 0. CI on 3d2fd1da (PR check-runs): all 61 check runs completed, none failed: Lint UI, Type Check UI, Build and E2E UI, Test UI 1-16 of 16, Test Core 1-8 of 8 and Test Core, Lint and Repo Gates (Lint ESLint, scoped lints, PM dispatch-gates, CI release and engine gates, repo and tooling gates, docs and code guards), TypeScript Type Check (workspace, debt ledger, source gates, consumer gates), Check Changeset, Check PR Size, Check Documentation Links, Governed Surface Queue Guard, Part-of PR must not also close its card, single-claim guards, Dogfood Regression Gate: success; Temporal Conformance, Build Docs, Dogfood Verify CLI, Build Core and opt-in harnesses: skipped by the path selector",
      "dogfood_battery": "n/a — no ! in the PR title and no narrowing arm",
      "mcp_calls": "11 — GitHub reads only: issue_read x5, get_job_logs x2, pull_request_read x4 (check runs); plus subscribe_pr_activity on PR 25978 (session tool, not GitHub). No write tool.",
      "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls, draft, with assignee leg POST /issues/25978/assignees; read-back identical 5443 bytes) and this os-dev-report comment via post-stamped (POST /issues/25916/comments). git push is not counted.",
      "deviations": [
        "Branch is the platform-assigned claude/project-thread-o8o2xv (Claim 6410094565), not claude/issue-25916-slug; worktree built from it.",
        "Commit trailers use the AGENTS.md form Co-authored-by: Claude with Claude-Session; the harness-suggested trailer naming a model was not used.",
        "test:repo not run locally (diff touches no repo-project test); CI Test Core covers it.",
        "check:type-check-debt first hit the 300s tool timeout; re-run under the lock, exit 0."
      ],
      "files_changed": [
        ".changeset/25916-console-leftover-strings-round-3.md",
        "scripts/sdui-manifest.record.json",
        "ui/apps/console/src/pages/developer/FlowRunsPage.tsx",
        "ui/apps/console/src/pages/developer/flowRunsClientDiagnostic-25916.test.tsx",
        "ui/packages/app-shell/src/views/ObjectView.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/ResourceEditPage.referencesColumns-25916.test.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/i18n.ts",
        "ui/packages/components/src/__tests__/renderer-copy-locale-25916.test.tsx",
        "ui/packages/components/src/renderers/complex/data-table.tsx",
        "ui/packages/components/src/renderers/layout/react-page.tsx",
        "ui/packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts"
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: 25916 · dev-only harnesses (ui/apps/console/src/dev/*, *-preview.tsx) still carry English literals; noted in the PR Acceptance notes, not filed"
      ]
    }

    Generated by Claude Code

  9. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Seat: PR #25978 (Part of this card) ACCEPT (2026-10-26T08:07Z), checks green on head 3d2fd1da; ready + auto-merge requested. The card stays open for the harness items in Acceptance notes.

  10. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Half-state closed: pm:queue for the remaining items · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-26T09:55Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Seat close-out · domain:ui seat 1 · 2026-10-26T11:27Z: both items on this card's Task list are done.

    The one thing the third pass left in English is the dev harness headings under ui/apps/console/src/dev/* and the *-preview.tsx entries. Translating those is outside this card's Task list: the second bullet asks only to move them, and they are developer harnesses, not user-facing pages. That leftover was the reason for #25978's Part of. No remaining item is owed, so the card closes as completed; pm:queue comes off. If triage reads a remaining item differently, reopen it with that item named.

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:uii18npriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions