Skip to content

Studio: zh-CN first screens stop mixing English: the clone notice, the new package form, the flow rail group #29706

Closed

Description

@objectstack-fleet

epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848

Filing gate: ② filed on the maintainer's word in direct chat with the epic PM seat, 2026-11-03: 「第二批也立卡」. Priority on 「相关卡 p1, 让车道处理」. ⛔ Not a claim.
Reader: domain:ui; the clone notice's string is in packages/runtime, so the claim states how it is translated.
Dedupe: zh-CN English notice, Human-readable package name. #29675 is a separate read fault. New.
type: enhancement

Business reason. These are among the first things a Chinese-speaking builder sees. A mixed screen reads as unfinished, and it makes it unclear which words are safe to ignore.

What happens

where what status
New similar on a flow the banner's second sentence, "The copy is switched off and does not run until you switch it on…", renders in English in zh-CN. The source is a server string, packages/runtime/src/flow-clone.ts:191 measured by screenshot at 3482f3d8d2
New package form labels such as Display name and Human-readable package name under a zh title. packages/spec/src/kernel/manifest.zod.ts:674 has that text as a describe reported by an independent review; re-measure
Automations rail a draft object's flow group reads REPAIRS_REPAIR_TICKET, its machine name uppercased reported by the review; re-measure
Column picker system fields listed before the builder's own reported by the review; re-measure

The #29650 refusal sentence is also English, but it goes away with that fix.

Direction

  • A sentence the server sends for a person to read has a translation path, or is sent as a code the console translates. Pick the existing pattern; state it in the PR.
  • The form's labels come from the i18n catalog, not from spec describe text.
  • A group is labelled with the object's label.
  • The builder's own fields sort first.

Drop any row that does not reproduce, and say so on the card.

Links back: #29690, #29650.

Activity

  1. added
    enhancementNew feature or request
    priority:p1High: required for production / M2
    pm:queueReady for the PM dispatch loop
    domain:uiDomain lane — seat card indexed by label:pm:seat
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 3, 2026
  2. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB

    Claim: PM loop round 7 · 2026-11-03T02:39Z
    Session: session_01QsR2jRdVLGVEbfCX4asHX1 (card thread, os-dev); dispatched by seat session session_01QsR2jQjvWkZ7is6GXbC6DB
    Account: zhuangjianguo
    Branch: claude/project-thread-ldzdax (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-29706
    Domain: domain:ui
    Seat: domain:ui#5
    Scope: zh-CN Studio first screens stop mixing English: the flow clone notice reaches the console through a translation path, the new package form reads its labels from the i18n catalog and not spec describe, a draft object's flow group is labelled with the object's label, and the column picker lists the builder's own fields first. A row that does not reproduce is dropped and named. Fixes #29706.
    File surface: the console components that draw these four surfaces, the i18n packs, their tests, and a changeset. ⛔ packages/runtime/** and packages/spec/** are out (a server code for the clone notice is a stop and report). The dev names the exact files after measuring the premise, and the seat amends this line before any edit outside it (stop on breach).
    Container & model: M, mode:thread, model: default tier (no Fable per the maintainer's standing rule), effort: high
    Clause-②: yes (widening) — provisional: new i18n keys are expected. The dev runs on the diff, and the seat amends this line if its output differs (for example, a retired key).
    Metadata-protocol: none
    Responsibility: a builder using Studio in zh-CN | first screens mix English sentences, describe text and machine names into a zh screen | Chinese-speaking builders, who cannot tell which words are safe to ignore
    Thread-read: none
    Premise: to prove first on current main, per the brief (/mnt/project-files/issue-29706/brief.md). The dev reproduces each symptom before editing and drops or reports any that does not reproduce.
    Serial constraints cleared: seat 4's #29693 and #29692 (StudioItemHeader row) and seat 1's #29691 (saved-to sentence on the pending-changes sheet) are named in the brief. Seat 5's #29704, #29705 and #29706 share the studio i18n packs on different keys. The dev merges main right before pr_create.

  3. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848
    2026-11-03T02:52Z

    Re-measured live by the epic PM seat on main at c9636f1e50, on the maintainer's word in direct chat, 2026-11-03: 「需要复测的内容,你直接处理」. This updates the card body where it differs. ⛔ Not a claim.

    Row by row:

    row result
    New package form Confirmed. Display name, Human-readable package name, Description, Package description, Object namespace and its long sentence, Version, Type, Default datasource, Dependencies are English under a zh title. 基本信息, 高级 and 软件包 ID are translated.
    Automations rail Narrower than reported. The group reads REPAIRS_REPAIR_TICKET only while the object is an unpublished draft. After publish it reads 维修工单. The object picker in the same dialog shows 维修工单 (草稿), so the label is available.
    Column picker Confirmed. On showcase_task: organization_id, created_by, updated_at, updated_by, owner_id, owning_business_unit_id, queue, then title. The system columns come first. Two rows read 负责人 (owner_id and assignee).
    Clone notice Measured earlier. #29650 has landed, and the notice is still reached on a successful copy.

    New in the same family: the view inspector's card reads "Basics / Identity and primary surface" and "View description for", in English.

  4. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB

    Claim amended · 2026-11-03T02:55Z · #29706 file surface named after the premise was measured

    The dev measured all four rows at 7b55ea95 in zh-CN; all four reproduce (premise.md in issue-29706).

    • Row 1: the clone answer is {flow, packageId, notice} with no code, and the console prints notice verbatim. The repo's pattern for a server sentence a person reads is code-keyed: the console maps a known code to an i18n key and keeps the wire text otherwise (translateFailureCode, BATCH_ABORTED_CODE). So row 1 needs a runtime code first, under packages/runtime and the client's CloneFlowResponse. That is server-lane surface. It leaves this card: the seat files it as its own card, covering the permission-set clone notice, which has the same gap, and the console's mapping that follows the code.
    • Row 2: PackageFormDialog's form memo keys on [locale, mode] only. It is mounted closed before the lazy zh catalogue lands, so it keeps the English labels.
    • Row 3: readObjectLabels reads only published objects, so a draft object's flow group shows its name, uppercased by CSS.
    • Row 4: served fields put created_*, updated_* and owner_id first, and the picker keeps the served order.

    File surface (replaces the claim's provisional line; rows 2 to 4; stop on breach), under ui/packages/app-shell/src/views/:

    • metadata-admin/PackageFormDialog.tsx, with new test metadata-admin/PackageFormDialog.lazyCatalogue-29706.test.tsx
    • studio-design/StudioDesignSurface.tsx (the readObjectLabels path only), with new test studio-design/StudioDesignSurface.draftObjectFlowGroup-29706.test.tsx
    • metadata-admin/previews/ViewColumnPanes.tsx, with new test metadata-admin/previews/FieldsListEditor.addFieldOrder-29706.test.tsx
    • .changeset/29706-zh-studio-first-screens.md

    Clause-②: no — no new key, no export change. The dev runs scripts/pm/clause2-line.mjs on the diff, and the seat amends again if its output differs.
    Metadata-protocol: none

    Serial: open PRs #29718 and #29723 touch StudioDesignSurface.tsx but not readObjectLabels. The dev merges main right before pr_create. The PR keeps Fixes #29706 and names the filed card for row 1 in its body.

  5. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · zhuangjianguo · session_01QsR2jRdVLGVEbfCX4asHX1
    os-dev-report

    {
      "issue": 29706,
      "status": "done",
      "branch": "claude/project-thread-ldzdax",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29773",
      "session": "session_01QsR2jRdVLGVEbfCX4asHX1",
      "premise_still_valid": true,
      "rows": {
        "row1_clone_notice": "reproduces; leaves this card for #29727 (needs a server code under packages/runtime, out of surface)",
        "row2_new_package_form": "reproduces through the lazy zh studio catalogue (landing mounts the dialog closed; form memo keyed on locale, mode); fixed",
        "row3_automations_rail": "reproduces (readObjectLabels read published objects only); fixed",
        "row4_column_picker": "reproduces (served order puts created/updated at and by, owner_id first); fixed"
      },
      "summary": "Rows 2 to 4 fixed in app-shell with no i18n key, spec or runtime change. PackageFormDialog rebuilds its form once the studio catalogue is resident; the Automations rail's object index merges the package's object drafts with their labels; AddFieldPopover lists the builder's fields before system fields. Row 1 measured and handed to the server lane as #29727.",
      "tests": "3 new files (one per row, each with CONTROL): 3 files 6 tests pass on f9fd4b39. Ablations via scripts/ablation-replace.mjs, fix committed first, each restored to the HEAD blob with git diff HEAD empty: row2 memo deps -> [locale, mode] reds 1/2 (control green); row3 draft read -> empty reds 1/2; row4 order -> [...fields] reds 1/2. Related sweep 125 files 1080 tests pass on a346e17d; post-merge 38 files 304 tests pass on f9fd4b39. app-shell type-check 65/65 on f9fd4b39. eslint 6 files 0 errors. ui vitest scripts/ 170 files pass.",
      "gates": "dispatch-gates --commands: 35 families (unchanged by the merge). 34 ran in one loop on a346e17d, 34 exit 0 (check:type-check-debt under the lock); the 35th, pnpm --dir ui exec vitest run scripts/, exit 0. Body gates on the final body: closing-keyword-parity --body binds only 29706; adr-0087-registration, changeset-no-major, empty-changeset, partof-closing-keyword exit 0. check-sdui-manifest exit 0 (manifest intact, no registry change). clause2-line reads Clause-② no, Metadata-protocol none. check:new-line-citations 0 new. CI: in_progress at report time.",
      "line_budget": "7 files, about 360 lines added, 5 removed: 3 source files (+43/-5), 3 new tests, 1 changeset",
      "files_changed": [
        "ui/packages/app-shell/src/views/metadata-admin/PackageFormDialog.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/PackageFormDialog.lazyCatalogue-29706.test.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.draftObjectFlowGroup-29706.test.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/previews/ViewColumnPanes.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/previews/FieldsListEditor.addFieldOrder-29706.test.tsx",
        ".changeset/29706-zh-studio-first-screens.md"
      ],
      "deviations": [
        "Row 1 dropped from this PR by seat ruling (moved to 29727); PR keeps Fixes 29706 as the seat ordered.",
        "First commit dab5c788 carried a stray cast removal in usePackageNavTargets (outside the readObjectLabels path) from a replace-all; reverted in a346e17d before any gate ran, net diff against main has no hunk there.",
        "Screenshots came from a temporary live harness (app-crm --fresh backend plus the Vite console on source, before = origin/main source files swapped in and restored to HEAD); nothing committed.",
        "Derived gates ran on code head a346e17d; the merge of main (f9fd4b39) touched none of the diff's lines, and the touched suites plus type-check were re-run on the merged head."
      ],
      "screenshots": "/mnt/project-files/issue-29706/ before-row2/3/4 and after-row2/3/4 png",
      "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2: pr_create via fleet-write relay (PR 29773), this os-dev-report comment via post-stamped",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "class: a · reach: Studio Interfaces list-view panel in zh-CN shows the filter builder's '+ Add filter…' in English (measured live 2026-11-03) · evidence: live zh-CN run on f9fd4b39 · dedupe words: Add filter zh-CN, filter builder English",
        "carrier: none · noted, not filed: package form Type select shows raw value app; dialog sr-only Close label in English"
      ]
    }
  6. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB

    Landed · 2026-11-03T04:42Z

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portaldomain:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions