Skip to content

Commit b49b752

Browse files
fix(i18n)!: the console translation bundle leaves out Studio's metadataForms (75 KB of 221 KB on app-crm) (#26159)
<!-- claude-projects-attribution: {"github_login":"zhuangjianguo"} --> _Requested by **Steedos** · [project thread](https://claude.ai/code/project/chan_018ETKaNwMZCNRYD7D8Q9Ubb?thread=cmsg_018ETKaNwMZCNRYD7D8Q9UbbRmVkRqDy26wG2qAUXw3LEJ)_ Fixes #25785 Clause-②: yes (narrowing) Metadata-protocol: narrowed ## Summary `GET /i18n/translations/:locale` served the i18n service's whole locale tree, so every console open downloaded `metadataForms`, the translations of Studio's metadata-type authoring forms. On `examples/app-crm` that is 75 KB of the 221 KB raw zh-CN bundle, the second-largest group after `objects`. The card's other half (the `ETag` and `Cache-Control: private, no-cache` validator) already landed with the earlier i18n caching PR; this PR is the composition half. **How Studio gets its forms now: it already does, from the server.** No browser code reads `metadataForms` from this bundle. The `/meta` and `/meta/types` handler (`translateMetaTypesResponse` in `@objectstack/rest`) reads the same i18n service in process, resolves `metadataForms.TYPE` for each type, and serves every form already in the requested locale. The liveness ledger (`packages/spec/liveness/translation.json`) names that handler as the group's only reader. So the group only has to stop being served to the browser. Studio loads nothing new, and there is no new route, key or endpoint. - **spec, `system/translation.zod.ts`.** New `SERVER_RESOLVED_TRANSLATION_GROUPS = ['metadataForms']` and `ServedTranslationDataSchema`: the platform face (`PlatformTranslationDataSchema`) without those groups. It is closed (`strictObject`), so a served document that still carries one fails it by name. - **spec, `api/protocol.zod.ts`.** `GetTranslationsResponseSchema.translations` is now `ServedTranslationDataSchema`, so the declared response is what the door serves. - **runtime, `domains/i18n.ts`.** Both exits (the requested locale and the `zh` to `zh-CN` fallback) serve `servedTranslations(tree)`, a copy without the server-resolved groups. The service's own tree is never edited, because `/meta` translates from that same object (both the core memory i18n and `service-i18n` hand back the stored tree). The `ETag` still hashes the served body, so it now changes only when served bytes change. - **docs.** `i18n-standard.mdx` (Metadata authoring forms) says the console bundle leaves the group out and `/meta` reads it from the service. The reference pages are regenerated. - **changeset.** `25785-served-translations-without-metadata-forms.md`, patch for `@objectstack/spec` and `@objectstack/runtime`. `metadataForms` stays authorable on every bundle face (`TranslationDataSchema`, `PlatformTranslationDataSchema`, app bundles, `i18n:extract`). Only the served document leaves it out. ## Measured live (`examples/app-crm`, signed-in member, same box) | locale | build | raw | gzip | brotli | `metadataForms` | warm reopen | |:--|:--|--:|--:|--:|:--|:--| | zh-CN | main `0a694821` | 221,007 B | 68,580 | 55,391 | 75,127 B | 304, 0 B | | zh-CN | this branch | 145,863 B | 45,107 | 36,555 | absent | 304, 0 B | | en | main `0a694821` | 213,880 B | 58,666 | 49,185 | 75,361 B | 304, 0 B | | en | this branch | 138,502 B | 37,576 | 31,466 | absent | 304, 0 B | Every other group kept its exact byte size (for example zh-CN `objects` 111,504, `settings` 25,868, `apps` 4,469). `GET /api/v1/meta/types` and `GET /api/v1/meta` in zh-CN answered 31 entries on both builds, with identical translated labels: object 对象, field 字段, dashboard 仪表板, view 视图, flow 流程, and the first section and field of each form (基础信息, 名称). ## Tests - New `packages/runtime/src/domains/i18n-translations-served-groups.test.ts` (10 tests): - A: the path and query spellings and the fallback exit serve every other group unchanged and omit `metadataForms`. The body parses the closed `GetTranslationsResponseSchema`, with a control showing the schema refuses the same body when it carries the group. - B: a boot read does not edit the service's tree. A `RestServer` `/api/v1/meta` built over the same service, read after the boot read, still serves the dashboard form translated (仪表板, 布局, 列数). - C: the `ETag` is the hash of the served body, `If-None-Match` answers 304, a change confined to `metadataForms` keeps the validator, and a change to `messages` moves it. - New `packages/spec/src/system/served-translation-data.test.ts`: the served face is the platform face minus the constant (with a positive control); the response schema serves that face; each server-resolved group stays declared on both bundle faces; a document carrying the group is refused with `unrecognized_keys` naming it. - `type-alias-convention.pin.test.ts`: one `Iso` pin for the new schema (789 to 790). `dropped-refinements.baseline.json`: one entry for `system/ServedTranslationData`, the same 3 sites as `PlatformTranslationData`, with header totals 245 / 841. Runs (under `scripts/pm/os-verify-lock.sh`, `--maxWorkers=2`): - `@objectstack/runtime` full suite at `8b2ad27c`: Test Files 455 passed (455), Tests 7415 passed, 19 skipped. VERDICT command-exit 0. - `@objectstack/spec` full suite: Tests 21929 passed, 1 failed, the dropped-refinements header totals. Those were recounted from the body in `8b2ad27c`, and the file then ran 27/27. That commit touches only those two totals, which only that test reads. - Focused: runtime 4 files, 41 tests; spec 5 files, 434 tests; all passed. - Type-check of `@objectstack/spec`, `@objectstack/runtime` and `@objectstack/client`: VERDICT command-exit 0. - `ui/apps/console/src/loadLanguage.test.tsx` (the console's bundle loader): 7 passed. ## Ablation (one-off, mutated on disk, then restored) - **Filter removed.** `servedTranslations` copies every group (blob `3154a44d` to `a28c8f4a`). 6 of 10 tests failed: path and query spellings, fallback exit, schema parse, the `/meta` after-boot read, and the unserved-change validator. Restored blob `3154a44d` equals `HEAD`. - **In-place delete.** `servedTranslations` still serves the right document but also deletes the group from the service's own tree (`return served;` replaced with a loop deleting each server-resolved group from `translations`, blob `3154a44d` to `5e38e852`). Exactly 2 of 10 tests failed, both Studio pins: "a boot read does not edit the service's tree" and the `/meta` after-boot read, which served `'Dashboard'` where `'仪表板'` was expected. The other 8 passed, so the served bytes and the validator do not catch this mistake and only the B pins do. Restored blob `3154a44d` equals `HEAD`, `git diff HEAD` empty. Both runs used `scripts/ablation-replace.mjs` with `src/domains/i18n-translations-served-groups.test.ts` under the verify lock. No permanent test file was added for them. ## Gates Derived with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (114 commands; the list derived at the head `8b2ad27c` is identical to the one run). Each ran with its exit code captured before any pipe, and `--ran` reconciled them at `8b2ad27c`: "114 derived famil(ies) accounted for — 114 run, 0 NOT-MEASURED". All 114 exited 0, among them `check:generated`, `check:api-surface`, `check:authorable-surface`, `check:docs`, `check:liveness`, `check:strictness-ledger`, `check:spec-parsed-alias`, `check:exported-any`, `check:dual-build-cjs-loads` (after a full workspace build), `check:nul-bytes` and `check:type-check-debt` under the verify lock ("26 raw tsc error(s) total, none above its recorded number"). The sweep started before the last commit, which only recounts the two dropped-refinements header totals. The 10 commands that finished before that commit, and `check:query-options-erasure`, which overlapped the 20-second window of the first ablation, were rerun at `8b2ad27c`; all exited 0. The local-only `check:dev-prereqs` and `check:skill-frame-freshness` also exited 0. `dispatch-gates` warned STALE TREE: the branch is behind `main`. No file in this diff is touched by `main`'s newer commits, and `git merge-tree` with `origin/main` reports no conflict, so `main` was not merged in. ## Notes for review - **Contract review owed.** Non-test files under `packages/spec/src` moved (`system/translation.zod.ts`, `api/protocol.zod.ts`), so the `CONTRACT_REVIEW_TIER` review applies. Neither file was on the claim's named file surface; the fix belongs in the spec declaration, so it was made there. - **The response schema narrows on purpose.** `translations` was the platform face, which is closed and declares `metadataForms`. The served face is closed the same way without it, so a body that still carries the group now fails the schema. A client validating this route's responses keeps passing. A client that read `metadataForms` from this route gets nothing; the liveness ledger and a repository search show no such reader (the console loader, the ui dashboard inspector and `TranslationPreview` do not read it). - **The ui side, unchanged and still green.** `ui/apps/console/src/loadLanguage.test.tsx` walks `GetTranslationsResponseSchema.shape.translations` (through the `workspace:^` link to this `packages/spec`, so it reads this change) and requires the loader to namespace every group it finds. It passes with the narrower list: 7 passed. `SPEC_TRANSLATION_GROUPS` in `ui/packages/i18n` deliberately keeps its own copy of the list and is a superset detector, so still listing `metadataForms` changes no behaviour. Two `ui` docblocks now read a little stale — that list's header calls itself "the keys of the `translations` shape", and `metadata-form-i18n.ts` expects "the environment's own translation bundle" to arrive one day as a higher-precedence source for Studio's form labels (it would now be `/meta/types`, which already serves them translated). Neither is on this claim's surface and neither is a behaviour, so both are left alone and reported to the seat. - **Undeclared field.** The fallback exit's `requestedLocale` is served but not declared on `GetTranslationsResponseSchema`. It was like this before and is unchanged here. - **Not taken: scoping `objects` to the current app.** The card marks it optional and a bigger contract change. It is reported to the seat as a separate finding. ## 维护者速读(草稿) **改了什么.** 控制台每次打开都会请求当前语言的翻译包。这个包不再带 `metadataForms`(Studio 元数据编辑表单的翻译)。其余翻译分组一个字节不变。 **为什么改.** 这部分在 app-crm 的中文包里占 75 KB(总共 221 KB),浏览器从来不读它。Studio 的表单翻译一直是服务端在 `/meta/types` 里直接翻好再下发的。去掉之后,中文包压缩后从 68.6 KB 降到 45.1 KB,英文从 58.7 KB 降到 37.6 KB。第二次打开仍然是 304。 **风险与代价(含回滚).** 风险是有外部客户端从这个接口读 `metadataForms`。仓内没有这样的读者。Studio 的表单翻译有测试钉住:先请求翻译包,再读 `/meta`,表单仍是中文。回滚只需要还原本 PR,不涉及数据迁移。没有新增接口,也没有新增配置键。 **席位意见.** **你要做的.** 评审并合并。可选:如果需要,按应用裁剪 `objects` 分组另开卡(本 PR 没做)。 ## Round 2 — the seat's contract review (claim amendment 6418168409) The declarations are corrected at the top of this body: **`Clause-②: yes (narrowing)`**, `Metadata-protocol: none`. The published `GetTranslationsResponseSchema` accepted a body carrying `metadataForms` and now refuses it, and the exported `GetTranslationsResponse` type loses that member; nothing an author writes moves, so the kind stays `none` and the level stays `patch`. - **The changeset carries the BREAKING banner**, the remedy (read the group from `GET /meta/types`, which serves each form already translated) and exactly one ADR-0087 disposition: `not-required (no-migration-prescription)`, accepted by `check-adr-0087-registration` — "1 declared-breaking changeset(s), each carrying an ADR-0087 disposition". The reason closes the other five categories on facts: both packages publish; no ADR-0087 id is named or touched; the diff touches `packages/spec/**` and a `*.zod.ts` face, which closes `type-surface-only`; the narrowed declaration is a Zod projection, which closes `runtime-interface-only`; and no export is retired. The remedy is written as prose rather than a literal `FROM → TO` label block, because that label is branch 1 of the gate's migration-prescription detector and would make the only claimable category unclaimable; the mapping it would carry ("read `metadataForms` from `GET /meta/types`") is in the changeset's "What to do" and above. - **`requestedLocale` is now declared** on `GetTranslationsResponseSchema`, optional (`packages/spec/src/api/protocol.zod.ts`). The door has served it on the locale-fallback exit (`zh` served as `zh-CN`) since that fallback existed, undeclared. Same schema, same class, mechanical — the in-place adjacent fix the amended claim names. Pinned on both sides: the spec test fixes the shape to `locale` / `requestedLocale` / `translations`, parses a fallback body, keeps the field optional and refuses a non-string; the runtime test parses the real fallback body against the schema. - **Two `ui` docblocks this PR had made false are repaired.** `SPEC_TRANSLATION_GROUPS` (`ui/packages/i18n/src/utils/spec-translations.ts`) now says it is deliberately a superset of the groups the server still serves, names `metadataForms` as the first group to have left, and states the one direction that is red (a group the spec serves and the list lacks). `metadata-form-i18n.ts` (`ui/packages/app-shell`) now names `/api/v1/meta/types` as the channel that carries an environment's own `metadataForms`, and says this overlay covers the forms the console renders from its own copy of the spec. - **`origin/main` was merged in** (merge `81dc21e7`), because editing a `ui` registry source moves that package's digest in `scripts/sdui-manifest.sources/` and `main` had just re-shaped those records one-per-package (#26120). No file in this diff overlaps `main`'s range, so the merge is textually clean. The digest was then re-recorded with the merged generator: 1 of 27 package records moved (`i18n`), `sdui.manifest.json` byte-identical at 106 components, `check-sdui-manifest` green. Measured at the head this comment is written against, `4f5d2f0a`: the dogfood battery (closure built first, then `pnpm --filter @objectstack/dogfood test` under the verify lock, no shard and no path) is `Test Files 296 passed | 3 skipped (299)`, `Tests 2523 passed | 18 skipped (2541)`, VERDICT 0. The `@objectstack/spec` suite is `803` files / `23204` tests green, the six runtime i18n files `103` tests, the type-checks clean, and the console loader plus the `@object-ui/i18n` transform suite `22` tests. The derived gate list is now 125 commands and all 125 exited 0, reconciled as "125 run, 0 NOT-MEASURED". The declaration lines and the title of this pull request are the seat's write, not the author's (a dev writes a body once, at creation): the title takes `!` and the body's `Clause-②:` line takes `yes (narrowing)`. Until then the declaration of record for the contract review is the changeset's. --- _Generated by [Claude Code](https://claude.ai/code/session_01Vy85beHdawtEtqNscYBy7V)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent a76f811 commit b49b752

21 files changed

Lines changed: 684 additions & 30 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
'@objectstack/spec': minor
3+
'@objectstack/runtime': minor
4+
---
5+
6+
**BREAKING** fix(i18n)!: the translation bundle a console downloads leaves out Studio's `metadataForms`
7+
8+
Clause-②: yes (narrowing)
9+
Metadata-protocol: narrowed
10+
11+
`GET /i18n/translations/:locale` served the i18n service's whole locale tree, so every console open downloaded `metadataForms`, the translations of Studio's metadata-type authoring forms: 75 KB of the 221 KB raw zh-CN bundle on `examples/app-crm`. No browser reads that group from the bundle. Studio's forms already arrive translated, because `GET /meta` (and `/meta/types`) resolves `metadataForms.<type>` on the server, from the same i18n service, before it serves each form.
12+
13+
The route now serves every group except the ones the server resolves itself. The spec names them in `SERVER_RESOLVED_TRANSLATION_GROUPS`, which today holds only `metadataForms`. `GetTranslationsResponseSchema.translations` is now `ServedTranslationDataSchema`: the platform face without those groups, and closed, so a body that still carries one fails it. The runtime copies the tree and never edits the service's own one, which is the tree `/meta` translates from. The `ETag` still hashes the bytes served, so a warm reopen still gets `304`.
14+
15+
**Why this is breaking, and why `minor`.** A response body that carries `metadataForms` was accepted by the published `GetTranslationsResponseSchema` and now fails it, the exported `GetTranslationsResponse` type loses that member, and the route stops serving a group it served. The published protocol records the move: the authorable surface gains the served face's keys (`ServedTranslationData`) and `GetTranslationsResponse:requestedLocale`, and the response face a client parses against is narrower, so the kind is `narrowed` and both packages that carry it — the spec that declares the face and the runtime that serves it — ship `minor`. What an author writes into a translation bundle does not move.
16+
17+
**What to do.** Nothing, unless you read `metadataForms` from this route. Read it from `GET /meta/types` instead, which serves each form already translated into the requested locale, rather than from the bundle this route returns. Authoring is unchanged: `metadataForms` stays a group on every bundle face (`TranslationData`, `PlatformTranslationData`), in `i18n:extract` and in the i18n service.
18+
19+
Also on this route: `requestedLocale`, which the door has always served when it fell back to another locale (`zh` served as `zh-CN`), is now declared on `GetTranslationsResponseSchema`, optional. It was served undeclared, so no generated client could read it.
20+
21+
<!-- adr-0087: not-required (no-migration-prescription) The narrowed face is a RESPONSE, and no stored metadata holds one: no package source, stored row or object definition carries a `GetTranslationsResponse` body, so there is nothing for `objectstack migrate meta` to reach or rewrite. What an author writes into a translation bundle is unchanged — `metadataForms` stays declared on both authored bundle faces and in the i18n service, and the authorable-surface keys this diff moves are ADDITIONS (the served face's keys and `GetTranslationsResponse:requestedLocale`), none removed or renamed. The affected party is a code consumer reading this route's answer, whose channel is the compiler and the response schema, not the metadata ledger (ADR-0087 D8), and the remedy is a read from another door (`GET /meta/types`, which serves the same forms already translated), never a conversion between two metadata versions. The other categories are closed on facts: both packages publish (not unpublished); no ADR-0087 id is named or touched (not registered or already-registered); the diff touches `packages/spec/**` and a `*.zod.ts` contract face (not type-surface-only); and the narrowed declaration IS a Zod projection, `z.input<typeof GetTranslationsResponseSchema>` (not runtime-interface-only), with no export retired (not runtime-export-retired). -->

‎content/docs/protocol/kernel/i18n-standard.mdx‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -470,9 +470,15 @@ through the one the renderer reads for that node:
470470

471471
Both run in `GET /api/v1/meta`, which serves every type's `form` and `schema`
472472
already localised for the request's locale; a client deriving the schema itself
473-
with `z.toJSONSchema` applies the second one to its own copy. Only `label`
474-
crosses over to the schema (as `title`); `helpText` and `placeholder` stay on
475-
the form.
473+
with `z.toJSONSchema` applies the second one to its own copy, over a bundle it
474+
carries itself. Only `label` crosses over to the schema (as `title`); `helpText`
475+
and `placeholder` stay on the form.
476+
477+
Because the server resolves this group, the bundle a console downloads when it
478+
opens — `GET /api/v1/i18n/translations/:locale` — leaves `metadataForms` out:
479+
`SERVER_RESOLVED_TRANSLATION_GROUPS` names it, and the response's `translations`
480+
is `ServedTranslationData`, the platform groups without it. Author it like any
481+
other group; it stays in the i18n service, which is where `/meta` reads it.
476482

477483
**Naming an item-level property** therefore has three parts, none of which is
478484
a locale-catalog entry alone: the English name is a `.meta({ title: 'Action URL' })`

‎content/docs/references/api/protocol.mdx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1764,6 +1764,7 @@ The published metadata item body, opaque by ruling (1C). Shape is the item's own
17641764
| Property | Type | Required | Description |
17651765
| :--- | :--- | :--- | :--- |
17661766
| **locale** | `string` | ✅ | Locale code |
1767+
| **requestedLocale** | `string` | optional | The locale the caller asked for, when the served locale is a fallback from it |
17671768
| **translations** | `{ objects?: Record<string, object>; picklists?: Record<string, object>; apps?: Record<string, object>; messages?: Record<string, string>; … }` | ✅ | Translation data |
17681769

17691770
### Nested Shape: `GetTranslationsResponse.translations`
@@ -1782,7 +1783,6 @@ The published metadata item body, opaque by ruling (1C). Shape is the item's own
17821783
| **flows** | `Record<string, { label?: string; successMessage?: string; errorMessage?: string; screens?: Record<string, object>; … }>` | optional | Screen-flow translations keyed by flow name |
17831784
| **positions** | `Record<string, { label?: string; description?: string }>` | optional | Position translations keyed by position name |
17841785
| **permissions** | `Record<string, { label?: string; description?: string }>` | optional | Permission-set translations keyed by permission-set name |
1785-
| **metadataForms** | `Record<string, { label?: string; description?: string; sections?: Record<string, object>; fields?: Record<string, object> }>` | optional | Translations for metadata-type configuration forms keyed by metadata type |
17861786
| **settingsCommon** | `{ sourceLabels?: object }` | optional | Cross-namespace Settings UI strings |
17871787
| **settings** | `Record<string, { title?: string; description?: string; groups?: Record<string, object>; keys?: Record<string, object>; … }>` | optional | Settings manifest translations keyed by namespace |
17881788

‎content/docs/references/index.mdx‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Protocol reference — every schema by module
33
navTitle: Protocol Reference
4-
description: Every schema published by @objectstack/spec — 1548 schemas across 14 protocol modules
4+
description: Every schema published by @objectstack/spec — 1549 schemas across 14 protocol modules
55
---
66

77
{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs live in the module folders under content/docs/. */}
@@ -32,9 +32,9 @@ counts are sums of the rows they head. Regenerate with
3232
| [Security Protocol](/docs/references/security) | 5 | 34 | Permission sets, row-level security, sharing rules, tenancy posture. |
3333
| [Shared Protocol](/docs/references/shared) | 10 | 31 | Primitives used across every protocol — identifiers, HTTP, expressions, error maps, enums. |
3434
| [Studio Protocol](/docs/references/studio) | 3 | 35 | Studio designer metadata — the authoring surfaces for the protocols above. |
35-
| [System Protocol](/docs/references/system) | 37 | 286 | The runtime environment — logging, jobs, cache, metrics, notifications, i18n and compliance. |
35+
| [System Protocol](/docs/references/system) | 37 | 287 | The runtime environment — logging, jobs, cache, metrics, notifications, i18n and compliance. |
3636
| [UI Protocol](/docs/references/ui) | 16 | 171 | Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer. |
37-
| **Total** | **200** | **1548** | 14 protocol modules |
37+
| **Total** | **200** | **1549** | 14 protocol modules |
3838

3939
---
4040

@@ -319,7 +319,7 @@ Studio designer metadata — the authoring surfaces for the protocols above.
319319

320320
## System Protocol
321321

322-
**Source:** `packages/spec/src/system/` · **Import:** `@objectstack/spec/system` · **37 pages, 286 schemas**
322+
**Source:** `packages/spec/src/system/` · **Import:** `@objectstack/spec/system` · **37 pages, 287 schemas**
323323

324324
The runtime environment — logging, jobs, cache, metrics, notifications, i18n and compliance.
325325

@@ -360,7 +360,7 @@ The runtime environment — logging, jobs, cache, metrics, notifications, i18n a
360360
| [`supplier-security.zod.ts`](/docs/references/system/supplier-security) | `SupplierAssessmentStatus`, `SupplierRiskLevel`, `SupplierSecurityAssessment`, `SupplierSecurityPolicy`, `SupplierSecurityRequirement` |
361361
| [`tenant.zod.ts`](/docs/references/system/tenant) | `DatabaseLevelIsolationStrategy`, `DatabaseProvider`, `QuotaEnforcementResult`, `RowLevelIsolationStrategy`, `SchemaLevelIsolationStrategy`, `Tenant`, `TenantConnectionConfig`, `TenantIsolationConfig`, `TenantIsolationLevel`, `TenantQuota`, `TenantSecurityPolicy`, `TenantUsage` |
362362
| [`tracing.zod.ts`](/docs/references/system/tracing) | `OpenTelemetryCompatibility`, `OtelExporterType`, `SamplingDecision`, `SamplingStrategyType`, `Span`, `SpanAttributeValue`, `SpanAttributes`, `SpanEvent`, `SpanKind`, `SpanLink`, `SpanStatus`, `TraceContext`, `TraceContextPropagation`, `TraceFlags`, `TracePropagationFormat`, `TraceSamplingConfig`, `TraceState`, `TracingConfig` |
363-
| [`translation.zod.ts`](/docs/references/system/translation) | `ActionResultDialogTranslation`, `CoverageBreakdownEntry`, `FieldTranslation`, `Locale`, `ObjectTranslationData`, `PlatformTranslationBundle`, `PlatformTranslationData`, `TranslationBundle`, `TranslationConfig`, `TranslationCoverageResult`, `TranslationData`, `TranslationDiffItem`, `TranslationDiffStatus`, `TranslationItem` |
363+
| [`translation.zod.ts`](/docs/references/system/translation) | `ActionResultDialogTranslation`, `CoverageBreakdownEntry`, `FieldTranslation`, `Locale`, `ObjectTranslationData`, `PlatformTranslationBundle`, `PlatformTranslationData`, `ServedTranslationData`, `TranslationBundle`, `TranslationConfig`, `TranslationCoverageResult`, `TranslationData`, `TranslationDiffItem`, `TranslationDiffStatus`, `TranslationItem` |
364364
| [`worker.zod.ts`](/docs/references/system/worker) | `BatchProgress`, `QueueConfig`, `Task`, `TaskExecutionResult`, `TaskPriority`, `TaskRetryPolicy`, `TaskStatus`, `WorkerStats` |
365365

366366
---

0 commit comments

Comments
 (0)