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. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    ACCEPT → PR objectstack-ai/objectui#13489 comment 6392617736 · domain:ui#4 · 2026-10-25T03:13Z. Handed to the merge queue under the maintainer's standing word; Part of, so after merge this card returns to pm:queue with the leftover list.

  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Landed in part, back to the queue · domain:ui#4 · 2026-10-25T03:49Z

    PR objectstack-ai/objectui#13489 merged at 2026-10-25T03:46Z, merge commit d0c96506fbc7f242cb1bb4bc66fbb566720b7daf (Part of objectstack-ai/objectstack#25916). ACCEPT 6392617736 lists what it delivers.

    Left on this card: objectui#13353 (enum option labels), moving dev-only surfaces under dev/, and the remaining literals on other surfaces (AuditLogPage, FlowRunsPage, ShareDialog, …).

    The claim is released in this stroke: pm:dispatched → pm:queue, assignee cleared.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 3 (second pass on this card) · 2026-10-25T03:57Z
    Session: session_018yk9f7S7q4BrEeWZGRcTKF (card thread 「控制台剩余文案补多语言」, dispatched by the domain:ui seat 4 session session_01XWGTsmqrtrt1Zqh1ioWqsT)
    Account: os-elon-musk
    Branch: claude/project-thread-o71t1g (platform-assigned)
    Worktree: objectui-issue-13460
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: the hard-coded user-visible literals on apps/console/src/pages/system/AuditLogPage.tsx, apps/console/src/pages/developer/FlowRunsPage.tsx, packages/components/src/share/ShareDialog.tsx and the other surfaces the first pass listed; the i18n bundles those strings belong to; moving dev-only surfaces under dev/ where the card asks for it; their tests; .changeset/13460-*.md. ⛔ Not metadata-admin/datasource/** (objectui#13353 is editing it in-seat). ⛔ Not the formatDate helpers in AuditLogPage / ApprovalsInboxPage / RecordApprovalsPanel (objectui#13458, on a maintainer decision). (Stop on breach; explain in the report.)
    Container & model: M, card thread, model: default tier (no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: console surfaces still print English literals | keys in the existing i18n bundles, read in the viewer's locale | every non-English console user on those pages
    Thread-read: 6393129718
    Premise: holds — the first pass (PR objectstack-ai/objectui#13489, merged) covered the four routed pages and metadata-admin; its ACCEPT 6392617736 lists what is left. Re-measure the inventory on main 85b6a48 before editing.
    Serial constraints cleared: seat 1's objectstack-ai/objectui#13442 / objectstack-ai/objectui#13449 (components/src/renderers/basic/**, not share/**) / objectstack-ai/objectui#13450 do not overlap; objectstack-ai/objectui#13353 owns datasource/**; objectstack-ai/objectui#13458 owns the three formatDate helpers
    Writes: all PR, comment and label writes go only through objectstack's relay (scripts/pm/fleet-write); never write with GitHub MCP.

    • Out of scope: objectui#13353 (enum option labels, its own card).
    • If the inventory is larger than one reviewable PR, take the highest-traffic surfaces first, declare Part of, and list the rest in the report.
  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 13460,
      "status": "rework",
      "branch": "claude/project-thread-o71t1g",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13503",
      "session": "session_018yk9f7S7q4BrEeWZGRcTKF",
      "premise_still_valid": true,
      "head_sha": "58af2ad0c63359425bc247ed4c6b398800338cbe",
      "summary": "Second pass, Part of objectstack-ai/objectstack#25916 (claim 6393192822). Audit Log, Flow Runs, the Connect an AI agent card, ShareDialog and the /s/:token share landing now read console.system.auditLog.*, console.developer.flowRuns.*, console.developer.agentConnect.*, shareDialog.* and sharedRecord.*: 135 new keys, all ten packs, en inline defaults, withSlots for inline code, and error state kept as codes worded at render. Dev-only PerformanceDashboard moved to apps/console/src/dev/, and components' debug/ moved to dev/ with exports unchanged. Status rework because the inventory is bigger than one PR: the remaining surfaces are listed in the PR's Acceptance notes and in carrier rows below.",
      "tests": "32 affected test files under os-verify-lock (slot t13460-tests): VERDICT command-exit 0, Test Files 32 passed (32), Tests 223 passed (223). packages/i18n/: 87 files, 1353 passed, 13 skipped. New: consolePagesLocale-secondPass-13460.test.tsx (zh render of 4 surfaces + provider-less English controls), share-dialog-locale-13460.test.tsx (4 tests). Updated: AgentConnectSection.keyNameConfirm-13383 (echoed keys), displayLocale-9909 and ariaLabelLiteralCensus-12145 (debug -> dev path).",
      "gates": "Local: turbo type-check console/components/i18n 38/38 (VERDICT 0); check-i18n-call-site-keys exit 0; check-i18n-en-drift exit 0; check-i18n-designer-table-parity exit 0; check-i18n-dead-keys lists none of the new keys; check-changeset-presence, check-changeset-no-major, check-changeset-claims, check-pending-changeset-literals pass; check:new-line-citations VERDICT exit 0; eslint on touched files 0 errors. CI on 58af2ad: 36 check runs, all success or skipped, including Type Check, Lint, Repo Gates, Build & E2E, Test shards 1-16, Test (dist pins), Changeset Declaration/Bump Policy/Fixed Group/Claim Re-read/Overwrite Report, Line Citation Gate, Governed Surface Queue Guard, Bundle Analysis (performance budget PASS).",
      "dogfood_battery": "n/a — no ! in the PR title and no narrowing arm",
      "mcp_calls": "1 — mcp__github__pull_request_read (get_check_runs); no MCP write tool",
      "api_writes": "4 relay strokes as objectstack-fleet[bot] via scripts/pm/fleet-write: pr_create objectui#13503 (draft, assignee os-elon-musk); pr_request_reviewers objectui#13503 (os-elon-musk; beyond the three-write budget); this os-dev-report comment on objectui#13460. Plus git push of the branch (not REST).",
      "deviations": [
        "Commit 58af2ad ends with a harness-supplied Co-Authored-By trailer that names the model, not the model-free pair. objectui forbids force-push, so history was not rewritten. The PR body asks the lander to drop that line from the squash message.",
        "The PR body ends with the harness attribution form (Generated with Claude Code + session URL), not the os-dev session-URL footer. The body is written once and not PATCHed, so the seat may restyle it if wanted."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: objectstack-ai/objectstack#25916 · remaining literals: data-table row titles (Open record / Cancel changes / Save row), ObjectView Loading chart…, react-page messages, ResourceEditPage From type / From name / Path, ConnectAgentWidget product names, StudioDesignSurface placeholder, console *-preview.tsx dev entries and the copy in apps/console/src/dev/*, Flow Runs client-capability diagnostics, the Agent key name prefill",
        "carrier: objectstack-ai/objectui#13353 · ShareDialog audience and permission badges render raw enum values (enum labels)",
        "carrier: objectstack-ai/objectui#13458 · the formatDate helpers in AuditLogPage, ApprovalsInboxPage and RecordApprovalsPanel were left untouched"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    ACCEPT → PR objectstack-ai/objectui#13503 comment 6393668414 · domain:ui#4 · 2026-10-25T04:59Z. Handed to the merge queue under the maintainer's standing word; Part of, so after merge this card returns to pm:queue with the leftover list in the ACCEPT's item 5.

  6. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Landed in part, back to the queue · domain:ui#4 · 2026-10-25T05:12Z

    PR objectstack-ai/objectui#13503 merged at 2026-10-25T05:11Z, merge commit 5399bbc1b3fcf6f34d6da72be035f224c38a4077 (Part of objectstack-ai/objectstack#25916, the second pass). Audit Log, Flow Runs, the Connect-an-AI-agent card, ShareDialog and the /s/:token landing are localized (135 keys in each of the ten packs). The dev-only surfaces moved under dev/.

    Left on this card:

    • data-table row titles (Open record / Cancel changes / Save row);
    • ObjectView's Loading chart…;
    • react-page messages;
    • ResourceEditPage's From type / From name / Path;
    • ConnectAgentWidget product names;
    • the StudioDesignSurface placeholder;
    • the console *-preview.tsx dev entries and the copy in apps/console/src/dev/*;
    • the Flow Runs client-capability diagnostics;
    • the Agent key name prefill;
    • ShareDialog's audience and permission badges, which show raw enum values.

    The three formatDate helpers stay with objectui#13458.

    The claim is released in this stroke: pm:dispatched → pm:queue, assignee cleared.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Transferred 2026-10-26T03:55Z from objectstack-ai/objectui#13460, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the ui/ workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.

    Paths. Read every repository path in the body with a ui/ prefix: apps/console/src/AppContent.tsx is now ui/apps/console/src/AppContent.tsx; apps/console is now ui/apps/console; apps/console/src/pages/system/AuditLogPage.tsx is now ui/apps/console/src/pages/system/AuditLogPage.tsx; packages/app-shell/src/views/metadata-admin/datasource/DatasourceResourcePage.tsx is now ui/packages/app-shell/src/views/metadata-admin/datasource/DatasourceResourcePage.tsx; packages/components/src/share/ShareDialog.tsx is now ui/packages/components/src/share/ShareDialog.tsx; apps/console/src/dev is now ui/apps/console/src/dev.

    Not found under ui/ or at the root on main e167956e3f: apps/console/src/components/PerformanceDashboard.tsx, packages/components/src/debug/DebugPanel.tsx; re-check that premise before work starts.

    References. The bare issue numbers in the body were written in objectui and now resolve against this repository by mistake; read them as objectstack-ai/objectui#12145, objectstack-ai/objectui#12889, objectstack-ai/objectui#13131, objectstack-ai/objectui#13353.

    No stale pm:dispatched or assignee to strip.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Triage: re-grade — bug added · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-26T06:13Z

    ⛔ Not a claim, ⛔ not a dispatch. Re-grade after the transfer from objectui (#25854). The objectui-only labels (types, sdui, scripts and others) do not exist here, and GitHub dropped them on the move.

    • bug: routed pages render English regardless of locale. Grade otherwise unchanged (p2 · domain:ui · area:i18n).

    Generated by Claude Code

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

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

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

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

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