Skip to content

fix(app-shell): zh-CN view properties panel reads the empty filter prompt and the description hint in Chinese - #30265

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-saiy6l
Nov 5, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-saiy6l

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Yibo Wang · project thread

Refs #30039

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:中文控制台下,视图属性面板里筛选框的空白提示从英文「+ Add filter…」改为「+ 添加筛选…」,「描述」一栏的说明文字改为中文。
  • 为什么改:Studio on zh-CN still mixes languages and terms: view properties panel, flow nodes, publish sheet labels, and 仪表板 beside 仪表盘 #30039 第 5 项浏览器验证时,卡片点名的六个位置里只有视图属性面板还剩这两处英文,其余五处(发布清单、流程问题页、节点面板、通知节点、仪表盘用词)实测已是中文。
  • 风险与回滚:只改两处界面文字,英文控制台不变,不动数据和接口。回滚即还原本 PR。
  • 先看:ui/packages/app-shell/src/views/metadata-admin/widgets.tsx(筛选按钮取词)、metadata-form-zh-cn.ts(视图 description 的中文说明)。
  • 两分钟验证:pnpm --dir ui exec vitest run packages/app-shell/src/views/metadata-admin/widgets.filterBuilderHeldRow-26738.test.tsx,预期全部通过,其中 objectstack#30039 一组断言中文为「+ 添加筛选…」、英文仍为「+ Add filter…」。
  • 需要你做的:无,席位落地。

What changes

Browser verification of #30039 (Acceptance 5) on a dev boot of the example CRM with the console in zh-CN found two English strings left at position 1, the view properties panel (/studio/com.example.crm/interfaces?surface=view:crm_lead.all). Both are in the card's evidence list for that position:

  • + Add filter…: the filter-builder widget's empty trigger in widgets.tsx was an English literal. It now reads engine.inspector.dataset.addFilter, the Studio string the dataset scope filter (FilterConditionField) already uses for the same button, which has a zh row (+ 添加筛选…). The widget already held locale from useMetadataLocale().
  • View description for documentation/tooltips: the description row's hint was the spec schema's own .describe() text, because neither the form nor the platform's zh-CN metadata-forms bundle carries help for it. The zh-CN view overlay (metadata-form-zh-cn.ts) now gives that row helpText: '视图说明,用于文档与悬停提示'. The file's header said every leaf is copied from the platform bundle; it now names this kind of hand-worded leaf as the one exception and the row is marked.

Changeset: @object-ui/app-shell patch.

Verification

Boot: full turbo run build --filter='!@objectstack/docs' at 6f095b9c under the verify lock (VERDICT command-exit 0), examples/app-crm objectstack dev --seed-admin --fresh, console Vite pointed at it, Playwright Chromium with locale: 'zh-CN', signed in as the dev admin. For positions 2 to 5 a writable package com.qa.zhterms was seeded over the REST door: an object and a record-after-update flow saved active, then five drafts (object label change, flow status change, new dataset, dashboard and permission set) with ?mode=draft. GET /api/v1/automation/_status answered the flow bound: false, unboundCause: missing_trigger.

# Position Result Shot
1 View properties panel, below 条件格式化 Before this PR: two English strings (+ Add filter…, the description hint). After: 基础信息 / 标识与主显示形态 / 描述 / 视图说明,用于文档与悬停提示 / 列与筛选 / + 添加筛选… / 可搜索字段 / 表格选项 / 终端用户控制 / 导航与共享 30039-p1-view-panel.png
2 Publish sheet, a flow's detail 其他变更: ~ 状态 (object row: ~ 显示名称) 30039-p2-p3-publish-sheet.png
3 Publish sheet, summary line 5 项 · 对象 1 · 流程 1 · 数据集 1 · 仪表盘 1 · 权限集 1 30039-p2-p3-publish-sheet.png
4 Flow 问题 tab, trigger not armed 未在此运行 · 此部署不运行由这类触发器启动的流程。开发人员可以在应用中加入相应的触发器包,之后该流程就会运行。 Below it: 结构检查没有发现需要修改的地方。该流程不在此运行的原因见上方说明。 (no 没有问题 line) 30039-p4-flow-problems.png
5 Palette "Save notice", notify "Template" Palette: 保存提示 · 告诉保存记录的人,这次保存触发了什么;提示随保存结果一起显示. Notify node: 邮件模板 and its hint in zh. The save-notice node's 提示内容 row is zh too. All zh already through the ui tables; nothing waits on #30164 here 30039-p5a-palette-save-notice.png, 30039-p5b-notify-template.png
6 Dashboard word: rail, menu, create dialog, publish sheet 仪表盘 in all four (rail chip and group, create menu item, 新建仪表盘 / 仪表盘名称 dialog, sheet group). 仪表板 appears in none of the 15 page text dumps taken 30039-p6a-rail-and-create-menu.png, 30039-p6b-create-dialog.png, 30039-p2-p3-publish-sheet.png

The shots are in the project's ui-orders/30039-shots/ folder (2x, 1440 wide); this repository has no place to commit them, per ui/AGENTS.md Housekeeping.

Tests at 808dbf8
  • pnpm --dir ui exec vitest run on metadata-form-i18n.test.ts, widgets.filterBuilderHeldRow-26738.test.tsx, inspectorStrings.i18n-10586.test.tsx and SchemaForm.controlWidgetGridNaming-9889.test.tsx (every test file that reads either changed string or the filter trigger): Test Files 4 passed (4), Tests 75 passed (75), lock VERDICT command-exit 0.
  • New pins: widgets.filterBuilderHeldRow-26738.test.tsx gains a top-level describe (zh reads + 添加筛选… and not Add filter; en control reads + Add filter…); metadata-form-i18n.test.ts's Studio on zh-CN still mixes languages and terms: view properties panel, flow nodes, publish sheet labels, and 仪表板 beside 仪表盘 #30039 group asserts the zh description help and that en has none.
  • pnpm --filter @object-ui/app-shell run type-check (both tsconfigs): exit 0, VERDICT 0.
  • eslint on the four touched files from the package dir: 0 errors (38 pre-existing warnings).
  • No ablation: the change is copy, and the zh pin is beside its en control.
Gates at 808dbf8

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (5 paths vs merge base 6f095b9): 35 commands, all run under one lock (VERDICT command-exit 0), every one exit 0. --ran with the exit codes recorded: 35 derived, 35 run, 0 NOT-MEASURED (a derived zero). pnpm --dir ui exec vitest run scripts/: Test Files 170 passed | 2 skipped (172), Tests 4985 passed | 2 skipped.

Not run locally: the full ui suite. origin/main moved to 31260ca8 after the branch point, touching none of this PR's files (one unrelated test under metadata-admin); CI's Test UI shards run the suite.

Acceptance notes

  • Out of this card's surface, reported to the seat: with the view panel's collapsed sections opened (表格选项, 分页, 终端用户控制, 导航与共享), about sixty rows still read English: field hints the form declares no help for (Enable column resizing, Row height / density setting, …) and every sub-field of the selection, pagination, userFilters, appearance, userActions, navigation and sharing composites (labels such as Page Size, Element, Allowed Visualizations and its options, and their hints). None of them is in any catalogue: the platform zh-CN metadata-forms bundle carries only keys the form declares, and the overlay's composite rule forbids naming children the form does not declare (naming one would hide the rest). The lasting fix is upstream: the spec view form declares those sub-fields and hints so the extractor emits keys, the platform bundle translates them, and the overlay copies them. Shot: 30039-p1b-view-panel-expanded-finding.png.
  • The design canvas and the panel header show the view's authored label All Leads, while the rail shows the translated 全部线索. Noted, not filed here.
  • zh-CN metadata forms served by the platform still say 仪表板 where the Console now says 仪表盘 #30164 (the platform bundle's 仪表板) did not show at any position: the dashboard inspector read 仪表盘 on this boot.

Generated by Claude Code

…scription hint in Chinese

Claude-Session: https://claude.ai/code/session_01WGufzgWrZ7dEo8uwMCqevS
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tests tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface labels Nov 5, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#1 · os-support-ai · session_01WGufzfE4V9fzZgJLrLDmMC

维护者速读(席位终稿)

席位核对 · ACCEPT · head 808dbf89 · 2026-11-05T04:16Z

  1. Shape: draft, base main, Refs #30039 (not Fixes: zh-CN metadata forms served by the platform still say 仪表板 where the Console now says 仪表盘 #30164 carries the platform half). One changeset: @object-ui/app-shell patch, Clause-②: no / Metadata-protocol: none. 5 files, +48/−3. check-governed-merges --pr 30265: NOT governed.
  2. Read by the seat: the trigger now reads t('engine.inspector.dataset.addFilter', locale), the existing Studio key the dataset scope filter uses; t and locale are already in scope in FilterBuilderField. The overlay row adds only helpText for description, with the header docblock naming hand-worded leaves as the single exception. Pins: zh + 添加筛选… beside en + Add filter…; zh description help beside en undefined. Shot 30039-p1-view-panel.png shows both strings in zh on the live panel.
  3. Accepted deviations: no separate verification comment (code changed, so the table rides in the PR body, per the order's second branch). Shots live in project files, not the repo (ui/AGENTS.md Housekeeping). No ablation: copy change with zh pin beside its en control.
  4. Evidence: 4 test files / 75 tests green; app-shell type-check exit 0; dispatch-gates 35/35 exit 0 with --ran reconciled. CI on this head running at review time; auto-merge waits on it.
  5. Out of scope: expanded-section English rows → filed On a zh-CN console the view properties panel's expanded sections (表格选项, 分页, 终端用户控制, 导航与共享) still show about 60 English rows #30267 (class a, starts in domain:spec). Authored view label vs translated rail label: noted in the PR, not filed. Skills-docs: n/a.
  6. Landing: ordinary queue, now: relay pr_ready + automerge_enable, follow to MERGED, landing record on Studio on zh-CN still mixes languages and terms: view properties panel, flow nodes, publish sheet labels, and 仪表板 beside 仪表盘 #30039. Studio on zh-CN still mixes languages and terms: view properties panel, flow nodes, publish sheet labels, and 仪表板 beside 仪表盘 #30039 stays open until zh-CN metadata forms served by the platform still say 仪表板 where the Console now says 仪表盘 #30164 is accounted for.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 5, 2026 04:17
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge November 5, 2026 04:17
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 5, 2026
@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 41967589721 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

分类:failure —— 按下面的日志分诊。

失败的 job(日志抽取,best effort):

  • Test UI (7/16) — 失败步骤: Run the ui tests (shard 7/16)

    × a view draft → the object list on that view: the Live Canvas opens at the draftPreviewPath target, in draft preview 4099ms
    FAIL   dom  packages/app-shell/src/console/ai/__tests__/AiChatPage.previewDraft-12968.test.tsx > AiChatPage — the any-draft Preview opens the drafted surface (objectui#12968) > a view draft → the obje
      ↳ 失败原因: (这条 FAIL 之后 12 行内没有可识别的原因行 —— 点进 job 看)
    

↳ 失败原因 是判读的关键:超时(Test timed out in … / Hook timed out in …)多半是负载/时序,不是本 PR 的回归;
断言(AssertionError: …)才指向真实的行为改变。两者的 FAIL 行长得一模一样,只有这一行能区分。

⚠️ 断言这一侧有一类例外,判据是断言在测什么,不是它是不是 AssertionError。 断言的对象是产品行为(一个值、一个形状、一次拒收)⇒ 照上面读:真实的行为改变,去查,⛔ 不要重排掉;
断言的对象是这次实验自身的有效性前提(跑完的耗时、负载下的先后、任何只在时间预算内才成立的条件)⇒ 它跟超时是同一类,同样对负载敏感,重排一次是合法的判别手段。
识别是机械的:断言的消息或它比较的值本身点名了一段时长、一个时间戳、一个耗时计数。实测过的一对 —— AssertionError: SecurityPlugin.init() ran: expected false to be true 测的是产品行为(真回归);
AssertionError: this run took over a second, so second-precision stamps could have differed too: expected 1006 to be less than 1000 测的是实验前提:它守护的那条不变式当时是绿的,同一个 head 原样重排一次即成功。
穿着 AssertionError 外衣的时间测量,仍然是时间测量。(⛔ 这只改「怎么读一次红」,不改「哪些测试可以重排」——后者由别处管。)

跨 PR 相同签名(24h,按失败测试文件聚合):

  • packages/app-shell/src/console/ai/__tests__/AiChatPage.previewDraft-12968.test.tsx — 24h 窗口内只有本 PR 撞到过,暂不汇总(再有一个不同 PR 撞到就会自动开汇总 issue)。
  • ⚠️ 24h 评论账本没读完(超过 5 页仍未读到窗口尽头),所以上面的「不同 PR 数」是下界,不是全量。

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 8 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 看上面的「跨 PR 相同签名」;已有汇总 issue ⇒ flaky/环境问题实锤,去那张 issue 上谈,修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 5, 2026
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 5, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#1 · os-support-ai · session_01WGufzfE4V9fzZgJLrLDmMC

Queue ejection read · re-queued · 2026-11-05T04:49Z

  • Queue build 41967589721, Test UI (7/16): FAIL packages/app-shell/src/console/ai/__tests__/AiChatPage.previewDraft-12968.test.tsx › "a view draft → the object list on that view…": Unable to find an element by: [data-testid="live-canvas"] after 4099 ms.
  • Not this diff: fix(app-shell): zh-CN view properties panel reads the empty filter prompt and the description hint in Chinese #30265 changes the filter-builder trigger's text and one zh overlay row; the failing test reads neither (no filter-builder, addFilter or overlay reference in it). This head's own CI ran all 16 Test UI shards green.
  • Read as a timing miss in an unrelated test; auto-merge re-armed once. If the same test ejects it again, the seat files a flake anchor rather than re-queue a second time.

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

Labels

documentation Improvements or additions to documentation size/s tests tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant