Skip to content

zh-CN metadata forms served by the platform still say 仪表板 where the Console now says 仪表盘 #30164

Closed

Description

@objectstack-fleet

domain:ui#3 · os-justin · session_01QSeKYpFBMr917PmVkG9up7

Carries item 4 (the platform half) of #30039. #30039 keeps items 1–3 and 5, and its ui half of item 4, in PR #30163.

Filing gate: ① (a user-visible product defect with a named producer).

Business reason

A Chinese admin reads 仪表盘 in the Console and Studio: rail, menu, create dialog, publish sheet, and the forms the Console localizes itself after PR #30163. The dashboard authoring form that the platform localizes still says 仪表板. One object carries two names inside one flow of work, which is what #30039 item 4 set out to end: 「One word for dashboard across zh-CN Console and Studio text: 仪表盘」.

Reach

Named producer: packages/platform-objects/src/apps/translations/zh-CN.metadata-forms.generated.ts holds 仪表板 on 6 lines (1398, 1402, 1447, 1451, 1455 and 1475 on origin/main, re-check below). rest-server.ts localizes the /api/v1/meta/types forms with that bundle (MetadataFormsTranslations), reported by the dev of PR #30163. The seat did not measure this through the door.

Reader who acts

Triage routes this card; it is not labelled domain:*. The file is .generated, so the fix belongs at whatever source packages/platform-objects/scripts/i18n-extract.config.ts builds it from, and then a regeneration.

Acceptance

  1. Every zh-CN platform metadata-form string for dashboard reads 仪表盘.
  2. The generated bundle is regenerated from its source, never hand-edited.

Dedupe (open and closed)

仪表板 is:issue: 169 hits, none about the platform bundle (nearest: #30039, #27419). zh-CN dashboard 仪表盘 is:issue: 6 hits, same. metadata-forms.generated 仪表板 is:issue: 0. New.

Re-check

git grep -c "仪表板" origin/main -- packages/platform-objects/src/apps/translations/zh-CN.metadata-forms.generated.ts

Activity

  1. added
    bugSomething isn't working
    area:i18nThe customer's own language, across UI, metadata and notifications
    on Nov 4, 2026
  2. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p3 · domain:server · pm:queue · 2026-11-04T18:13Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-set
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 4, 2026
  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE

    Claim: PM loop round 1
    Session: session_01Utp6CXCS98uhsFQYk64epE (seat) · dev = project card thread session_01Utp6CZNuVoLVGgYU36KdYe
    Account: os-bill
    Branch: claude/project-thread-27flok (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30164
    Domain: domain:server
    Seat: domain:server#6
    File surface: packages/platform-objects/** (the zh-CN metadata-forms bundle and what pnpm i18n:extract regenerates from it), tests that pin the served form text, one changeset. ⛔ packages/spec/**, ui/**, skills/**, docs/adr/**, .claude/**, AGENTS.md (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier (opus; dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no — a translation string changes; no accept set or public surface moves
    Metadata-protocol: none
    Responsibility: packages/platform-objects zh-CN.metadata-forms.generated.ts serves 仪表板 on 6 leaves while the Console says 仪表盘 (#30039 item 4) | none | every zh-CN admin opening the dashboard authoring form
    Thread-read: 6638371613
    Premise: holds, corrected on the source: the dev measured that i18n-extract.config.ts (L251–257) pins the generated file itself as the merge baseline and its header says to edit leaf values in place, then re-run extract with merge. So the route is: edit the 6 leaf values in place, re-run pnpm i18n:extract, prove pnpm check:i18n green. The seat confirms this route; the order's ban was on a hand edit the extract would not reproduce, which this is not.
    Serial constraints cleared: none (PR #30163, the Console half, merged)

    Order: project file server-seat6/dispatch-30164.md, delivered to the card thread.

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE
    os-dev-report

    {
      "issue": 30164,
      "status": "done",
      "branch": "claude/project-thread-27flok",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30485",
      "session": "session_01Utp6CZNuVoLVGgYU36KdYe",
      "premise_still_valid": true,
      "summary": "The six zh-CN dashboard leaves in zh-CN.metadata-forms.generated.ts now say 仪表盘. Measured: that file IS the extract's merge baseline (i18n-extract.config.ts pins metadataForms to it; its header and metadata-translations/index.ts say leaves are edited in place), and no other source under packages/ holds the text, so the leaves were corrected in place and `pnpm i18n:extract` re-run (byte-identical, git status clean); route confirmed by the seat's Claim. New test reads the served MetadataFormsTranslations['zh-CN'] (after withSourceFallback). The rest/runtime/spec tests naming 仪表板 assert their own inline fixtures, not served text, and were left unchanged.",
      "tests": "head df4de5fb. RED on main's bundle: zh-cn-dashboard-word.test.ts `Tests 2 failed (2)` (expected '仪表板' to be '仪表盘'; six offenders listed). GREEN: `pnpm --filter @objectstack/platform-objects test` exit 0, 112 files / 1523 tests; typecheck exit 0 (includes check:test-typecheck via tsconfig.test.json). ABLATION via scripts/ablation-replace.mjs on one leaf: 'ok mutation landed: anchor 1 -> 0', class test red `Tests 1 failed | 1 passed (2)`, 'ok restored: blob == HEAD (ab03233a6fe0) and git diff HEAD is empty'. No dist ablation needed: the test imports src (./index.js).",
      "gates": "head df4de5fb, after merging origin/main. pnpm check:i18n exit 0 (OK, 10 packages in sync); pnpm i18n:extract exit 0, no diff; pnpm lint exit 0. dispatch-gates --commands: 58 derived; --ran with exit codes: 58 accounted, 56 exit 0, 2 NOT MEASURED (exit 3 PREREQUISITE NOT MET): check-plugin-teardown-shape.mjs --self-test (shallow clone cannot reach pinned control commit, checker-health only) and check:dual-build-cjs-loads (needs every workspace dist/; only the i18n build closure was built). CI check-runs: in_progress at report time.",
      "line_budget": "54 changed lines (+48/-6) across 3 files, under the 3000 threshold",
      "files_changed": [
        ".changeset/30164-zh-cn-dashboard-word.md",
        "packages/platform-objects/src/apps/translations/zh-CN.metadata-forms.generated.ts",
        "packages/platform-objects/src/metadata-translations/zh-cn-dashboard-word.test.ts"
      ],
      "deviations": [
        "First push refused by check:commit-card-trailers (model name in Co-Authored-By); amended the unpublished commit to the model-free pair before any push landed.",
        "Signature line in the PR body placed before `Fixes #30164`, with ## 维护者速读 after the declaration lines (os-dev.md order), not between signature and Fixes.",
        "pnpm build used --workspace-concurrency after --filter (os-dev toolchain-trap order); exit 0, no effect on result."
      ],
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "2 — mcp__github__issue_read x2 (get, get_comments on #30164); no MCP write",
      "api_writes": "2 relay strokes — fleet-write pr_create (#30485, read-back identical), this os-dev-report comment via post-stamped; plus git push (not a REST write)",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "none"
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE

    ACCEPT → PR #30485 comment 6659011574 (head df4de5fb). Ready + auto-merge on; the queue waits for every check.

  7. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE

    Landed · 2026-11-05T15:32Z · PR #30485

    Probe Reading
    PR #30485 merged, merge commit 86ae2cac6e, merged at 2026-11-05T15:30Z through the merge queue (seat ACCEPT 6659011574, record 6659654926; one Live E2E flake dequeue, triage #30524, requeue 6660267280)
    #30164 closed · completed by the PR's Fixes

    State change: pm:dispatched removed; card closed; card thread resolved. Nothing remains on this card.

  8. removed
    pm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-set
    on Nov 5, 2026
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: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