Repository navigation
feat(ui): the rest of the Studio strings and the metadata preview panes move into the studio i18n namespace (#25922 slice S5) - #26942
Merged
Conversation
…es move into the studio namespace (slice S5) Every remaining engine.studio.* row except engine.studio.inspector.*, and the preview panes' engine.*Preview / engine.previewShell rows (the doc, book, flow, page-block and translation previews stay for later slices), 596 keys in en and in zh, leave app-shell's designer table for @object-ui/i18n's lazy studio namespace, text unchanged. lookupString already asks the table first and the namespace second, so no call site changes. Claude-Session: https://claude.ai/code/session_01JQwxbX9LnJhjTQPJEmoBYi Co-authored-by: Claude <noreply@anthropic.com>
…ed, zh preloads The pin gains floors for engine.studio as a whole, its three largest S5 families and each preview family. Ten dom suites and two unit suites that read moved S5 zh rows synchronously make the zh catalogue resident first; the sweep ran every app-shell test naming zh with the zh loader delayed 4000 ms, and each unit-project test alone. AddFieldPopover's lazy-namespace test no longer has a table key to point at, so it reads its chrome key through t() from the namespace. Claude-Session: https://claude.ai/code/session_01JQwxbX9LnJhjTQPJEmoBYi Co-authored-by: Claude <noreply@anthropic.com>
…-n6i8le # Conflicts: # ui/packages/i18n/src/namespaces/studio/en.ts # ui/packages/i18n/src/namespaces/studio/zh.ts
This was referenced Oct 27, 2026
Contributor
Author
维护者速读
席位核对ACCEPT · seat
Generated by Claude Code |
8 tasks done
This was referenced Oct 28, 2026
os-project-manager
pushed a commit
that referenced
this pull request
Oct 28, 2026
Brings in #26942, which moves the Studio strings into the studio i18n namespace. The two Studio not-found strings this branch adds move with them: from app-shell's metadata-admin table into @object-ui/i18n's studio namespace (en and zh), beside desktopHint. Claude-Session: https://claude.ai/code/session_01FEkQ5nhhuhjVQJ8R3qK9UB Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 28, 2026
This was referenced Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Warren · project thread
Part of #25922
Clause-②: no
Metadata-protocol: none
维护者速读
engine.studio.inspector之外的全部engine.studio.*(309 键,含上一片顺延的 rules),加上 19 个元数据预览面板家族(engine.*Preview、engine.previewShell,287 键),共 en、zh 各 596 键,从 app-shell 私有表搬进@object-ui/i18n的studio命名空间,文案一字未改,调用点不动。ui/packages/i18n/src/namespaces/studio/en.ts末尾的 S5 段,再看钉测试新增的家族下限与AddFieldPopover.studioNamespace-25922的改写。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 S5 of the (M) item. These rows leave
ENGINE_STRINGS_EN/ENGINE_STRINGS_ZHinui/packages/app-shell/src/views/metadata-admin/i18n.tsand are appended toSTUDIO_EN/STUDIO_ZHinui/packages/i18n/src/namespaces/studio/{en,zh}.ts, text byte-for-byte unchanged. Each family has the same keys inenandzh, and none is zh-only:engine.studio.*rules63,interfaces33,designer25,landing17,actions15,owd15,pkg13,app12,refusal12,held11,nav10,draftMark10,api10,slot7,formDnd7,hooks6,org5,pillar4,createItem2,newAutoTrigger1, and 31 single keys (engine.studio.publish,engine.studio.cancel, …)actionPreview57,permissionPreview37,validationPreview36,jobPreview20,agentPreview19,skillPreview16,datasetPreview15,toolPreview14,picklistPreview13,dashboardPreview9,appPreview9,emailTemplatePreview9,pagePreview8,screenPreview7,positionPreview6,reportPreview6,viewPreview4,objectPreview1,previewShell1The
engine.studio.*rows are the order's scope. Onlyengine.studio.inspector.*stays, because open PR feat(spec,ui)!: a record opens one way per object — navigation.mode keeps drawer (the default), page, new_window and none; modal, split and popover are retired; the split pane becomes a reader preference #26804 adds rows to it. For the other families I took the preview panes: 574 key lines against the order's "about 650". I left outdocPreview,bookPreview,flowPreviewand the page-block and translation previews:engine.pageBlockCanvas.*andengine.translationPreview.*are excluded by the order (feat(app-shell): the page designer's add-block picker offers the list view block #26915 and feat(spec): a hook declares its refusal catalogue, and its body refuses by code, answered in the caller's language #26831).flowPreviewbelongs with the other flow families in S6.docPreviewandbookPreviewkeeps the PR at 2,922 changed lines, under the 3,000 threshold. The full preview set would have crossed it.I checked the patches of every open PR that touches either home (feat(spec,ui)!: a record opens one way per object — navigation.mode keeps drawer (the default), page, new_window and none; modal, split and popover are retired; the split pane becomes a reader preference #26804, feat(spec): a hook declares its refusal catalogue, and its body refuses by code, answered in the caller's language #26831, fix(app-shell): Studio Access refuses a new permission set over a taken identifier and can discard a set's draft #26916): none touches a moved family.
The S2–S4 AST pass, with a heading comment marking the S5 section in each catalogue.
No runtime change.
lookupStringalready asks the table first and the namespace second, sot/tFormat/tOptionaland every call site are untouched. No new source file, so the console chunk groups need no change.Readers. Every non-test reader of a moved family is under app-shell's
views/metadata-admin/orviews/studio-design/. None callst()at module scope. Every dynamic key (engine.studio.rules.event.${…},engine.studio.pillar.${…},engine.studio.if.kind.${…},engine.studio.access.explain.*.${…}) goes throught(). There is nothing to stop and report.Main merged once to pick up feat(app-shell): the page designer's add-block picker offers the list view block #26915, which added
engine.pageBlockCanvasrows to the namespace files. The merge was clean, and the i18n gates and the namespace tests were re-run after it.Changeset:
.changeset/25922-studio-i18n-studio-previews.md,@object-ui/i18npatch.⛔ Untouched:
ui/packages/i18n/src/locales/*.ts,ui/.github/**, rootci.yml,engine.studio.inspector.*,engine.pageBlockCanvas.*,engine.translationPreview.*.Why
Ruling 6431032267 Q2 = A (upheld by 6431234244): the designer table becomes one lazy
@object-ui/i18nnamespace, moved in slices.Tests
inspectors/inspectorStrings.studioNamespace-25922.test.tsgains floors forengine.studio.as a whole (600), forrules,interfacesanddesigner, and for each of the 19 preview families. Every key in each family must resolve throught()to the namespace value inen-US,zh-CNandde-DE.zhcatalogue first with a top-levelawait loadStudioCatalogue('zh'). No assertion changed.metadata-admin/previews/:AppPreview.areas-11027,DashboardPreview.i18nTitle-10847,ScreenPreview.fieldProjection-11190,automationPreviews.i18n-10862,previewStrings.i18n-10848metadata-admin/:studio-locale.i18nstudio-design/:CreateItemDialog.notDerived-13389,ObjectFormDesigner.dndAnnouncements-11802,ObjectFormDesigner.roleDescription-11872,StudioDesignSurface.interfacePolishstudio-design/StudioDraftMark.test.tsandstudio-design/metadataError.authorRefusal-11785.test.ts. Both are in theunitproject (isolate: false). Each passed in the full run only because an earlier file had already loadedzh, and failed when run alone.studio-design/AddFieldPopover.studioNamespace-25922.test.tsxfrom slice 1 contrasted the namespace with "a key still in the app-shell table". Noengine.studio.*key that this popover renders is left in the table. The test now checks the same zh flow (English first, then Chinese on the same mount) for the field labels, read from the namespace directly, and for the chrome keyengine.studio.cancel, read throught().The sweep
I delayed the
zhloader innamespaces/studio/index.tsby 4000 ms (scripts/ablation-replace.mjs --hold, restored byte-identical). Under that delay I ran every app-shell test that names zh (437 files), then each of the 54 unit-project files alone.i18n/src/__tests__/studio-namespace-lazy.test.tsx. It fails by construction under the delay, because itsfindByTextwaits 1 s against a 4 s delay.Tests 211 passed (211)both times).PageBlockCanvas.addListView-26794, the pin and bothblock-configtests pass under the delay.Acceptance notes
57820085. I compared them witht()andtOptional()on this branch, withzhresident: the baseenvalue inen-US,en,de-DEandfr, and the basezhvalue inzh-CN,zhandzh-TW. Result: 4,172 lookups, 0 differing.HEAD):?? studioString(key, locale)arm fromlookupStringturns 46 tests red: the pin'st()case for all 44 families, its zh-only case, and the equivalence check. The equivalence check reports 4,172 of 4,172 lookups differing.engine.actionPreview.empty) makes the equivalence check report exactly 3 differing lookups (zh-CN,zh,zh-TW). The pin stays green, as designed.Build & E2E UImeasures it.Verification
At
1e3fed1d (the merge of main into the two slice commits).Tests and gates
pnpm --filter @object-ui/i18n --filter @object-ui/app-shell run type-check: VERDICT command-exit 0.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 34 commands, each exit 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(0envalues changed) andcheck:i18n-keysall exit 0, before and after the main merge.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