Skip to content

feat(ui): five Studio pillars, the data source pages and the field types move into the studio i18n namespace (#25922 slice S4) - #26900

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-n6i8le
Oct 27, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-n6i8le

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Warren · project thread

Part of #25922

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:Studio 设计器表里 engine.studio 的 access、if、data、auto、settings 五个支柱,加上数据源三族(engine.datasource / externalDatasource / datasourcePreview)和字段类型三族(engine.fieldType / fieldTypeDesc / fieldCategory),共 en、zh 各 549 键,从 app-shell 私有表搬进 @object-ui/i18n 的 studio 命名空间,文案一字未改,调用点不动。
  • 为什么改:执行 app-shell: a published library that is 66% Console product surface — retire the 67 zero-reference exports now, decide the split, and fold the second i18n table into @object-ui/i18n #25922 裁决 6431032267(Q2 = A,6431234244 维持),这是 (M) 的第 4 片(S4),派单 6450441124;engine.studio.rules 按席位改单留给 S5。
  • 风险与回滚:与前几片相同,zh 用户首次打开这些页面时标签先显示英文、zh 分片到达后同一挂载重渲染为中文;回滚即 revert 本 PR。
  • 先看:ui/packages/i18n/src/namespaces/studio/en.ts 末尾的 S4 段,再看钉测试新增的 11 个家族下限。
  • 两分钟验证: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

Why

Ruling 6431032267 Q2 = A (upheld by 6431234244): the designer table becomes one lazy @object-ui/i18n namespace, moved in slices.

Tests

  • Pin widened: inspectors/inspectorStrings.studioNamespace-25922.test.ts gains a floor for each of the eleven S4 families. For each family, t() must answer every key with the namespace value in en-US, zh-CN and de-DE.
  • Forced edits: zh preloads. Each of these suites reads a moved S4 zh row synchronously, so it now makes zh resident with a top-level await loadStudioCatalogue('zh'). No assertion changed:
    • Seven dom suites: datasource/DatasourceResourcePage.locale-13460, previews/adminPreviews.i18n-10862-s2, previews/externalDatasourcePanel.i18n-10862-s3, previews/federationTabs.i18n-10862-s4, studio-design/ObjectFormDesigner.typeName-13148, studio-design/StudioDesignSurface.emptyPackage, studio-design/StudioDesignSurface.railLabels.
    • One unit suite: metadata-admin/studioAutomationCopy.plainLanguage-11659.test.ts. It runs in the unit project (isolate: false), so it passed in the full run only because an earlier file had already loaded zh. Run alone, it failed.
  • Forced edits: tests that leaned on the table.
    • studio-design/AddFieldPopover.studioNamespace-25922.test.tsx (slice 1) used engine.studio.data.addField as "a key still in the app-shell table". That key moved, so the test now uses engine.studio.cancel, which the same popover renders and which stays in the table.
    • previews/__tests__/block-config-i18n.test.ts floored the app-shell table at 1,500 keys. The table now holds 1,152, so the 3,000-key floor applies to both homes together, and the table only has to be non-empty.

The sweep, and the S3 leftovers

Every app-shell test that names zh was run with namespaces/studio/index.ts's zh loader delayed 4000 ms, using scripts/ablation-replace.mjs and restored byte-identical. That is 403 files (the S3 list plus every other app-shell test naming zh). Each of the 52 unit-project files was also run alone under the delay.

Acceptance notes

  • Every moved key resolves identically before and after. This is a one-off measurement and is not committed:
    • The 549 + 549 base values were read by AST from the table at e9e344a9.
    • They were compared with t() and tOptional() on this branch after zh is resident: en-US, en, de-DE and fr against the base en value, and zh-CN, zh and zh-TW against the base zh value.
    • Result: 3,843 lookups, 0 differing.
  • Ablations (mutation landed by anchor count and blob, then restored byte-identical to HEAD):
    • With the ?? studioString(key, locale) arm removed from lookupString, 23 tests go red: the pin's t() case for all 21 families, its zh-only case, and the equivalence check. The equivalence check reports 3,843 of 3,843 lookups differing.
    • With one moved zh row altered (engine.datasource.title), the equivalence check reports exactly 3 differing lookups (zh-CN, zh, zh-TW). The pin stays green, as designed.
  • Eager bundle: not re-measured locally, as in S2 and S3. CI's Build & E2E UI measures it.

Verification

All at the tree of 7c7bbb87.

Tests and gates
  • The 11 changed test files at normal speed: Test Files 11 passed (11), Tests 211 passed (211).
  • 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 derived 34 commands, and each exited 0, including pnpm --dir ui exec vitest run scripts/ (Test Files 178 passed | 2 skipped (180)). --ran shows 34 derived, 34 run and 0 NOT-MEASURED. These gates ran with two more test files in the diff than 7c7bbb87 has: the S3-leftover preloads, which I later handed to fix(app-shell): an edit a Studio pillar holds unsent guards departure like a dirty pillar #26839. Re-deriving on the final diff gives the same 34 commands.
  • ui check:i18n-designer-parity, check:i18n-dead-keys, check:i18n-drift (0 en values changed) and check:i18n-keys: all exit 0. check:new-line-citations: exit 0. node scripts/check-nul-bytes.mjs: exit 0.
  • Changed lines: 2,597 (+1,341 / −1,256) over 15 files, under the 3,000-line threshold.

Human Minimum

  • 1. No packages/spec change.
  • 2. No new names; the only new file is the changeset.
  • 3. No formatter ran; pnpm lint is CI's.
  • 4. One card slice, one branch off main, one pull request.
  • 5. Patch changeset with both declaration lines.
  • 6. n/a.
  • 7. No hand edits to generated or release-owned files.
  • 8. English.

Generated by Claude Code

…pes move into the studio namespace (slice S4)

The engine.studio.{access,if,data,auto,settings} rows, the data source
pages' engine.datasource / engine.externalDatasource /
engine.datasourcePreview rows and the field types' engine.fieldType /
engine.fieldTypeDesc / engine.fieldCategory rows (549 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 a floor for each of the eleven S4 families. Seven dom
suites and one unit suite that read moved S4 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 takes engine.studio.cancel
as its table key now that engine.studio.data.addField moved, and
block-config-i18n holds its 3,000-key floor over both homes together.

Claude-Session: https://claude.ai/code/session_01JQwxbX9LnJhjTQPJEmoBYi
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/xl documentation Improvements or additions to documentation tests tooling labels Oct 27, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

维护者速读

  • 改了什么:Studio 访问 / 条件 / 数据 / 自动化 / 设置五个支柱的文案,以及数据源、外部数据源、字段类型及其说明与分类等族(中英各 549 个 key),从 app-shell 私有表搬进 @object-ui/i18n 的懒加载 studio 命名空间;原文不变,调用处不变。
  • 为什么改:执行裁决 6431032267 Q2 A(维护者「同意」,6431234244 维持);这是 S4,私有表再少约 1.2k 行。engine.studio.rules 因 Studio Data › Validations: new state_machine / format / json_schema rules save immediately with field: created_at and an empty message (an empty transition row persists and publishes); the conditional rule's when is captioned as a fail condition #26731 在途,顺延到 S5。
  • 风险与回滚:中文首次打开相关页面时多一次懒加载;查找结果前后一致(3843 次查找 0 差异)。读这些 key 的代码都在 Studio / 元数据管理页内。revert 即可。
  • 先看:ui/packages/i18n/src/namespaces/studio/zh.ts 与 inspectorStrings.studioNamespace-25922.test.ts。
  • 两分钟验证:pin 按家族逐 key 比对中英两份,消融即红。
  • 需要你做的:无,席位落地。
  • 席位意见:席位独立复算:私有表删掉的 1216 条非空行全部原样出现在命名空间新增行里,0 条缺失;本片的扫描在 zh 包延迟 4 秒下跑全部 403 个相关测试文件。

席位核对

ACCEPT · seat domain:ui#1 · session_01JQwxbZeBv2y91towxasSUT · head 7c7bbb87 · 2026-10-27T20:27Z

  1. Shape: slice S4 of app-shell: a published library that is 66% Console product surface — retire the 67 zero-reference exports now, decide the split, and fold the second i18n table into @object-ui/i18n #25922 (Part of #25922); 15 files, +1341/−1256 (under the 3000-line threshold): rows out of metadata-admin/i18n.ts, into namespaces/studio/{en,zh}.ts; 7 DOM suites and studioAutomationCopy gain the zh preload; AddFieldPopover's table key and the block-config floor are adapted; a patch changeset. The seat amended the scope: engine.studio.rules.* is deferred to S5 behind Studio Data › Validations: new state_machine / format / json_schema rules save immediately with field: created_at and an empty message (an empty transition row persists and publishes); the conditional rule's when is captioned as a fail condition #26731.
  2. Premise measured: the seat recomputed the move on the merge base e9e344a9: every one of the 1216 distinct non-blank lines removed from i18n.ts is present verbatim in the namespace files' added lines (0 missing). Every non-test reader of the moved non-Studio families (datasource, externalDatasource, datasourcePreview, fieldType, fieldTypeDesc, fieldCategory) sits under views/metadata-admin/, and no file outside the Studio views imports previews/{fieldTypeName,field-types}. Dev: 3,843 lookups, 0 differ; two ablations red, restored; the delayed-loader sweep (4000 ms) covered 403 files plus 52 unit files run alone, and its only red is studio-namespace-lazy, by construction.
  3. Gates / check-runs: On head 7c7bbb87, 43 success · 9 skipped · 0 failed · 0 pending; mergeable_state: clean. Dev's local run: 34/34 derived gates exit 0, --ran 0 NOT-MEASURED.
  4. Accepted deviations: both unpublished commits were reworded for the new check:commit-card-trailers pre-push rule (tree identical, no override). The three S1–S3 leftovers the sweep found ride fix(app-shell): hold a new state_machine / format / json_schema validation rule until it has a field and a message #26855 and fix(app-shell): an edit a Studio pillar holds unsent guards departure like a dirty pillar #26839, not this PR.
  5. Out of scope: none filed. Skills-docs: none — strings move between homes, no metadata-protocol change.
  6. Landing: not Tier H; the seat readies and arms auto-merge. S5 (engine.studio.rules + the rest of engine.studio + ~650 other engine.*) is dispatched after this merges; S7 (the ci.yml step) stays Tier H.

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 27, 2026 20:28
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 27, 2026 20:29
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 27, 2026
Merged via the queue into main with commit 94e29cd Oct 27, 2026
53 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-n6i8le branch October 27, 2026 21:08
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/xl tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants