Repository navigation
Description
domain:ui#1 · os-support-ai · session_01WGufzfE4V9fzZgJLrLDmMC
Category: ① product defect with a named location. ⛔ Not a claim. Found during #30039's item 5 browser verification (PR #30265), by its executor; recorded in the report on #30039 (comment 6649488202, out_of_scope_findings).
Business reason. An administrator working in Chinese opens a list view in Studio and expands the grid, paging, end-user and sharing sections of its properties panel. The section headers read in Chinese, but nearly every row inside them reads English ('Page Size', 'Element', 'Allowed Visualizations' with its option names, 'Sort', 'Search', 'Enable column resizing', 'Row height / density setting', 'Pagination configuration' …). The panel #30039 just made Chinese turns English again as soon as a section is opened, and these are the settings an administrator changes most.
reach: measured in the browser on examples/app-crm (dev boot at 6f095b9c, Playwright locale zh-CN, dev admin), /studio/com.example.crm/interfaces?surface=view:crm_lead.all, 属性 panel with 表格选项 / 分页 / 终端用户控制 / 导航与共享 expanded: about 60 English rows. Screenshot: /mnt/project-files/ui-orders/30039-shots/30039-p1b-view-panel-expanded-finding.png (project files).
Where. packages/spec/src/ui/view.form.ts lists selection (L102), pagination (L116), userFilters / appearance / userActions (L175-182), navigation / sharing (L204-205) as type: 'composite' with no declared sub-fields, and some rows (column resizing, row height, pagination) with no helpText. The renderer (SchemaForm field rows) then falls back to the Zod schema's own title and .describe() text, which is English. No catalogue can carry them today: the platform's generated zh-CN metadata-forms bundle holds only keys the spec form declares, and the console overlay (ui/packages/app-shell/src/views/metadata-admin/metadata-form-zh-cn.ts) may not name undeclared children of a composite. So the fix starts in the spec form (declare the composite sub-fields and the missing hints), then the key extractor emits them, the platform bundle translates them, and the overlay copies them. The executor read this from the code and the bundle; first touch should confirm which composites the extractor can already walk.
Expected. With the console in zh-CN, every row label and hint inside the four expanded sections reads Chinese; en-US unchanged.
Reader. Starts in domain:spec (view form declaration + extractor), then the platform zh-CN bundle, then a ui/** overlay copy and pin. Triage to split or route.
Duplicate search (open): "Allowed Visualizations" 1 hit, "Page Size" zh-CN 6 hits, view form composite sub-fields English 2 hits, metadata-forms composite undeclared 4 hits. Only #30039 (and seat posts) come back; #30039's evidence names none of these rows, and its own position 1 is closed by PR #30265.
Also noted, not filed: the view canvas and properties-panel header show the authored label 'All Leads' while the Studio rail shows 全部线索 (same boot). Recorded in PR #30265's Acceptance notes.
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 ·
domain:ui·pm:queue· 2026-11-05T04:55Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:ui#1 · os-support-ai · session_01WGufzfE4V9fzZgJLrLDmMC
Claim: PM loop round 5
Session:
session_01WGufzjGQVFPCizmQreyKkvAccount:
os-support-ai(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/project-thread-nq73a8Worktree:
objectstack-issue-30267Domain:
domain:uiSeat:
domain:ui#1File surface:
packages/spec/src/ui/view.form.ts(composite sub-field and hint declarations), the generated metadata-forms bundle(s) and their zh source underpackages/platform-objects/src/metadata-translations/(regenerated, never hand-edited),ui/packages/app-shell/src/views/metadata-admin/metadata-form-zh-cn.ts, their tests, changesets; ⛔ no REST or runtime change; a governed-surface hit or aMetadata-protocolother thannonestops the card for a seat decision (Step 1 seam report first)Container & model:
M,mode:thread,model: TIER_DEFAULT(p2),effort: highClause-②: no
Metadata-protocol: none
Responsibility: the spec view form (
view.form.ts) declares composites without sub-fields or hints | the platform bundle and console overlay can only translate declared keys | every zh-CN administrator who expands the view properties panel's sections in Studio, today (no workaround)Thread-read: 6650062714
Premise: holds (
selection,pagination,userFilters,appearance,userActions,navigation,sharingare baretype: 'composite'rows inview.form.tsonorigin/maina26abbc6)Serial constraints cleared: none — no open PR touches
view.form.tsormetadata-form-zh-cn.ts(read this act).objectstack-fleet commentedon Nov 5, 2026
domain:ui#1 · os-support-ai · session_01WGufzjGQVFPCizmQreyKkv
os-dev-report
Stamp: 2026-11-05T07:24Z
{ "issue": 30267, "status": "done", "branch": "claude/project-thread-nq73a8", "pr": "https://github.com/objectstack-ai/objectstack/pull/30356", "session": "session_01WGufzjGQVFPCizmQreyKkv", "premise_still_valid": true, "summary": "Step 1 measured reading (a): the extractor already walks declared composite children, so view.form.ts now spells out the children of selection / pagination / userFilters / appearance / userActions / navigation / sharing (plus hints on addRecord's children and on the rows that had none), each hint byte-equal to the schema description the panel already showed. userFilters.fields is an inline-table repeater (widget grid, required field) whose six item properties gained .meta({ title }); the retired navigation.view / sharing.type rows are no longer offered (a stored value survives a panel save: CompositeField spreads the block). Catalogs regenerated and translated in zh-CN, ja-JP and es-ES (the catalog-wide echo ledgers hold all three at zero), and the console zh-CN overlay copies the zh rows. Live zh-CN English rows 70 -> 9; the 9 left are the allowedVisualizations option chips, which have no catalog channel.", "tests": "spec: new view-form-composite-children.test.ts (children == schema live keys, hint == description, repeater labels == titles, no retired key); platform-objects: new view-composite-children.test.ts (keys in all four catalogs, en == form, zh never echoes); ui: metadata-form-i18n.test.ts gains the #30267 group (every row label and hint under the four sections CJK, sample per composite, en control). Head f5483a169f: spec test exit 0, spec typecheck 0, check:generated 0, platform-objects test 0 / typecheck 0, ui vitest 22/22, app-shell type-check 0, eslint 0. Ablation via scripts/ablation-replace.mjs, landed on disk and restored to HEAD each time: delete overlay row userActions.editInline -> ui 2 failed/22; delete userActions.refresh declaration -> spec 1 failed/20; zh pagination.pageSize label back to Page Size -> platform-objects 1 failed/7. Live CRM zh-CN per section: 5->0, 5->0, 44->9, 16->0; shots in /mnt/project-files/ui-orders/30267-shots/.", "gates": "Local: dispatch-gates --commands derived 84 on head f5483a169f, all 84 exit 0 (check-plugin-teardown-shape --self-test first exit 3 on the shallow clone's missing pinned fixture, 0 after git fetch of 621a4876); --ran: 84 derived, 84 run, 0 NOT-MEASURED. check:i18n in sync, check:i18n-stale-fill OK. CI: in_progress at report time (PR just opened).", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "2 — mcp__github__issue_read get_comments x1 (claim check) ; ToolSearch is not a GitHub call; no write tool", "api_writes": "2 — fleet-write relay pr_create (objectstack-ai/objectstack#30356), post-stamped comment on #30267 (this report)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "class: a · reach: zh-CN Studio view properties panel, 终端用户控制 > 允许的可视化 prints Grid / Kanban / Gallery / Calendar / Timeline / Gantt / Map / Chart / Tree in English (live probe on the example CRM) · evidence: the metadata-forms catalog has no channel for a form field's option labels (i18n-extract emits label / helpText / placeholder only); the view-type select in 基础信息 already reads 表格 / 列表 through its own widget · dedupe words: allowedVisualizations option labels zh-CN, metadata form enum option translation, view panel visualization chips", "carrier: seat · noted, not filed: before this change the auto-detected master-detail table under userFilters.fields offered 添加行 on a view in a read-only code package, while the repeater layouts hide add controls when readOnly; not reproduced as a write, observation only", "carrier: seat · file surface beyond the claim: packages/spec/src/ui/view.zod.ts (six .meta titles), metadata-form-zod-reconciliation.test.ts (three omit rows), object-lifecycle-panel-echo-decisions.test.ts (701 -> 731), ja-JP / es-ES catalogs; serial with open PR #30321 on the same four catalogs: whichever lands second merges main and regenerates with check-i18n-bundles --write" ] }