Repository navigation
feat(ui): the remaining Studio inspector strings and the package, form and editor strings move into the studio i18n namespace (#25922 slice S3) - #26815
Conversation
…gine.form, engine.edit move into the studio namespace (#25922 slice S3) 551 en and 560 zh keys leave app-shell's designer table for @object-ui/i18n/namespaces/studio, text unchanged; the nine zh-only engine.packages.form.help rows move as zh-only and stay tOptional reads. No call site changes. Claude-Session: https://claude.ai/code/session_01JQwxbX9LnJhjTQPJEmoBYi Co-authored-by: Claude <noreply@anthropic.com>
…ed, zh preloads Twenty suites that assert the moved zh rows synchronously make the zh catalogue resident first (one of them in the shared-graph unit project, where it passed only when another file had loaded zh). The namespace pin now covers the S3 families and the zh-only package help rows. Patch changeset for @object-ui/i18n. Claude-Session: https://claude.ai/code/session_01JQwxbX9LnJhjTQPJEmoBYi Co-authored-by: Claude <noreply@anthropic.com>
维护者速读
席位核对ACCEPT · seat
Generated by Claude Code |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 40557448260 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Warren · project thread
Part of #25922
Clause-②: no
Metadata-protocol: none
维护者速读
engine.inspector.*(223 键)以及全部engine.packages.*、engine.form.*、engine.edit.*从 app-shell 私有表搬进@object-ui/i18n的studio命名空间,共 en 551 键、zh 560 键(多出的 9 个engine.packages.form.help.*按原样保持仅 zh),文案一字未改,调用点不动。ui/packages/i18n/src/namespaces/studio/zh.ts末尾新加的 S3 段(含仅 zh 行的说明),再看inspectors/inspectorStrings.studioNamespace-25922.test.ts的四个新家族下限与仅 zh 断言。cd ui && pnpm run check:i18n-designer-parity && pnpm exec vitest run packages/app-shell/src/views/metadata-admin/inspectors/inspectorStrings.studioNamespace-25922.test.ts,应全绿。What changes
Slice S3 of the (M) item. Every remaining
engine.inspector.*row and everyengine.packages.*,engine.form.*andengine.edit.*row leavesENGINE_STRINGS_EN/ENGINE_STRINGS_ZHinui/packages/app-shell/src/views/metadata-admin/i18n.tsand is appended toSTUDIO_EN/STUDIO_ZHinui/packages/i18n/src/namespaces/studio/{en,zh}.ts, text byte-for-byte unchanged:enzhengine.inspector.*(the rest after S2)engine.packages.*engine.form.*engine.edit.*Same AST pass as S2 (each property with its leading comment block; a mixed group's comment moves only when the group's first row moves); a heading comment marks the S3 section in each catalogue. After this slice no
engine.inspector.*row is left in the app-shell table.zh-only rows stay zh-only. The nine
engine.packages.form.help.*rows have noenentry, before and after: their English is the package schema's own.describe()sentence, read throughtOptional.check:i18n-designer-parityalready lists the family inZH_ONLY_FAMILIES; the zh heading comment says why the rows have noentwin.No runtime change.
lookupStringalready asks the table first and the namespace second (slice 1), sot/tFormat/tOptionaland every call site are untouched. No new file, so the console'si18n-ns-studio-en/i18n-ns-studio-zhchunk groups need no change.Readers. Every reader of the moved keys is in app-shell. All but one are Studio surfaces (metadata-admin, inspectors, previews, studio-design). The exception is
views/RuntimeDraftBar.tsx(engine.edit.*). It sits outside Studio, but it reads its locale throughuseMetadataLocale(), which re-renders when thezhcatalogue lands, the same path the Studio surfaces take. So it needs no await. Dynamic keys (engine.inspector.appNav.type.${…},engine.packages.source.${…},engine.inspector.view.type.${…}) all go throught().Changeset:
.changeset/25922-studio-i18n-editor-chrome.md,@object-ui/i18npatch.⛔ Untouched:
ui/packages/i18n/src/locales/*.ts,ui/.github/**, rootci.yml, and every file PR test(app-shell): flowCanvasChip-11665 awaits the lazy studio zh catalogue before reading the tooltip #26800 owns (inspectorStrings.i18n-10804, the threeFlowNodeInspectortests,datasetPickers.authorText-11161,FlowPreview.removeNode-11772,flow-problems.removalRefusal-11838,previewStrings.i18n-10848,metadataError.heldWidget-11910). None of them needed a preload for this slice.Why
Ruling 6431032267 Q2 = A (upheld by 6431234244): the designer table becomes one lazy
@object-ui/i18nnamespace, moved in slices; S3 is the third row of #26593's slice table.Tests
Widened:
ui/packages/app-shell/src/views/metadata-admin/inspectors/inspectorStrings.studioNamespace-25922.test.ts: four new per-family floors (engine.inspector.700,engine.packages.120,engine.form.90,engine.edit.90, beside S2's six), so one family draining cannot hide behind another. Per family, the namespace carries every key inenandzh, andt()answers every key with the namespace's value inen-US,zh-CNandde-DE. New case: theengine.packages.form.help.*rows (at least 9) are absent fromen,tOptional(k, 'zh-CN')returns thezhvalue, andtOptional(k, 'en-US')staysundefined.Forced edits: the zh rows these suites assert synchronously now arrive in the lazily fetched chunk. Each suite makes
zhresident with a top-levelawait loadStudioCatalogue('zh'); no assertion changed. All files are underui/packages/app-shell/src/views/metadata-admin/:AuditPanel.loadFailure,IconPickerWidget.unknownName-12531,PackageFormDialog(+.helpTextI18n,.idDerive-11792),PackagesPage.installedApps-13356,ResourceEditPage.pickerLoadFailure/.referencesColumns-25916/.referencesErrorState,SchemaForm.deDeveloperize-8218,datasource/DatasourceResourcePage.selectPlaceholderLocale-11252,inspectors/DashboardDefaultInspector,inspectors/FlowReferenceField.flag.i18n-10448,inspectors/HookDefaultInspector.flag.i18n-10448,inspectors/ReportDefaultInspector(+.i18nTitle),inspectors/unknownValueFlag.i18n-9652,previews/previewStrings.i18n-10835,selector-placeholder.i18n.artifact-locked-banner.i18n.test.ts. Theunitproject runs withisolate: false, so in the full run this suite passed only because an earlier file in the same worker had already loadedzh. Run alone, it failed. I found it by running each of the 34 unit-project tests that name a zh locale on its own; the other 33 pass alone.Acceptance notes
f7c95cd1. I then compared them witht()andtOptional()on this branch afterzhis resident. Theenvalue was checked inen-US,en,de-DEandfr. Thezhvalue was checked inzh-CN,zhandzh-TW. Each lookup checked botht()andtOptional(). The nine zh-only rows were also checked inen-USandde-DE, wheret()must echo the key andtOptional()must returnundefined, as before. That is 3,902 lookups, 0 differing.scripts/ablation-replace.mjs, mutation landed by anchor count and blob, restored byte-identical toHEAD):?? studioString(key, locale)arm removed fromlookupString, 12 tests go red (11 in the pin across all ten families plus the zh-only case, and the equivalence check). The equivalence check reports 3,884 of 3,902 lookups differing. The 18 that hold are the zh-only rows inen-USandde-DE, whose expected answer is "not found" either way.engine.edit.publish), the equivalence check reports exactly 3 differing lookups (zh-CN,zh,zh-TW). The pin stays green, as designed, because its oracle is the catalogue itself.i18n.ts, which imports it statically. So the movedenrows sit behind the same import edge before and after, and thezhrows stay in the lazyi18n-ns-studio-zhchunk. CI'sBuild & E2E UIruns the eager-closure budget on the built console.Verification
All at
61332921.Affected tests
os-verify-lock, I ran 341 test files: every app-shell test naming a zh locale, every file naming one of the four families, the i18n namespace tests and the ui i18n script tests. 322 passed and 19 failed, all of them the zh-synchronous suites above.Test Files 21 passed (21),Tests 205 passed (205), VERDICT command-exit 0.artifact-locked-bannerpreload.pnpm --filter @object-ui/i18n --filter @object-ui/app-shell run type-check: VERDICT command-exit 0 (both tsconfigs in each package).Gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 34 commands. Each exited 0, includingpnpm --dir ui exec vitest run scripts/(Test Files 178 passed | 2 skipped (180)).--ran: 34 derived, 34 run, 0 NOT-MEASURED.check:i18n-designer-parity,check:i18n-dead-keys,check:i18n-drift,check:i18n-keysall exit 0, andcheck:i18n-driftreports 0envalues changed in the locale packs and in the designer table.check:new-line-citations: exit 0 (0 new citations).node scripts/check-nul-bytes.mjs: exit 0.Human Minimum
packages/specchange.pnpm lintis CI's.main, one pull request.Generated by Claude Code