Skip to content

Commit 4d0bd23

Browse files
huangyiireneclaude
andauthored
fix(platform-objects): decide the six bare metadata types' display en-echoes per leaf, and derive the population from the type registry (#19585)
Part of #19403 Clause-②: no Round 7 of the en-echo decision series. The six **bare** metadata types — `seed`, `mapping`, `api`, `doc`, `book`, `capability` — have no form at all: no `fields`, no `sections`. Their registry `label` and `description` are the only strings an author ever sees for them, and every one of those twelve leaves was still its English source in `zh-CN`, `ja-JP` and `es-ES`. They are decided here, one leaf at a time, with the reason recorded for each. ## The three-exit question, answered: **EXIT 1 — taken, with a stated substitute** Rounds 5 and 6 both refused this family on one standing reason: > only a real panel keeps the DERIVED-POPULATION property with a working dark control — six unrelated types degenerate the derivation and the control has nothing to exclude. **That refusal was right about what it refused.** It was reasoning about a population spelled `['seed','mapping','api','doc','book','capability']` — a hand-list, which derives nothing and excludes nothing. That is not the only population available, and this round names the substitute rather than deferring a third time. **What derives the population, if not one panel's `en` subtree.** `DEFAULT_METADATA_TYPE_REGISTRY` — the spec-side list of every metadata type the platform declares — crossed with one predicate read off the catalog's shape: a type is **bare** when its catalog entry has no `fields` and no `sections`, so the registry entry *is* its whole panel. Both halves are derived and neither is the ledger's own opinion: the registry lives in `packages/spec`, a package this round does not touch, and it is the thing that manufactures these leaves — `seed.label` in the catalog *is* the registry entry's own `label`, and every row is pinned to both. Ten types satisfy the predicate; the six decided here are the six that echoed. **What the dark control can exclude — twice, and the second one is the half a panel walk never has.** 1. **Outward** — the 17 types that do carry a form are excluded, and their own type-level pairs are already authored. The sharpest single exclusion is `dataset`: it carries a registry `description` exactly as these six do, so any walk keyed on "registry entries with a description" would sweep it in. The bare predicate is what leaves it out, and it is already authored, so a walk that wrongly included it would not even go red. Asserted by name. 2. **Inward** — **four** members of the population (`job`, `datasource`, `external_catalog`, `translation`) are in the walk and come back **non-echoing**. A hand-list of six can only ever produce positives; this derivation produces a negative on four of its own members, in the same run, from the same walk. **That is the control the refusal said this family could not have**, and ablation B below is its proof: refilling `job.label` — a leaf *no row in this ledger decides* — reds the file. **And the substitute is strictly stronger than a panel walk in one measurable way.** A panel walk is bounded by a type that already exists. This one is bounded by a shape over the registry, so a *new* metadata type — the actual way this defect class reproduces, since every one of these twelve leaves was born the day its registry entry was added — lands in the population automatically. No single-panel ledger in this series can do that. What is not claimed: that the property is preserved unchanged. It is **substituted**, and the controls are real but are not the same controls. ## The phantom-translation trap — structurally out of reach here Round 5 measured it on `action.fields.ai.label`: `Ai` to `AI` differs in bytes, so it passes the echo predicate in all three locales and drops the census by a key while telling a zh-CN author nothing. **An echo that stops matching is not the same thing as a leaf that got translated.** Here the shortcut is not merely refused, it is unreachable, and that is a property of the family nobody chose: the `en` side of every row is the registry entry in `packages/spec/src/kernel/metadata-plugin.zod.ts`, not a string in this package. Touching up the English would be an edit to another package, outside this round's file surface. The only edit reachable from here is the one that actually renders the leaf — and ablation D proves the registry pin is live and independent. ## The schema readings — five near-misses, each asserted, none described Resolved through `getMetadataTypeSchema` (the registry's own schema map) rather than a hand-picked import list. | leaf | the word | verdict | |:--|:--|:--| | `doc.description`, `capability.description` | `package` | **near-miss REAL** — it is a legal `MetadataProvenanceSchema` value and both schemas accept `_provenance: "package"` while refusing a rendered one. **Cleared** three ways: the key is an envelope field the loader sets (the item parses without it, and the whole `en` catalog names no underscore-prefixed key anywhere); these types are bare, so the string labels no input; and where this catalog does render a leaf whose stored value is literally `package`, it renders the display and keeps the value (`sys_metadata.fields.managed_by.options.package` is 包 / パッケージ / Paquete). | | `mapping.description` | `rename` | not a `TransformType` member (none/constant/lookup/split/join/javascript/map) — rendered. **But `map` is**, and "field mapping" contains it: `'field mapping'.includes('map')` is TRUE while the word-boundary predicate says NO. That pair is the token guard's dark control. | | `seed.description` | `publish` | looks like a `SeedMode`, is not one — rendered, with this catalog's own authored 发布 / 公開 / Publicar. | | `api.description` | `pipeline` | looks like an `ApiEndpointSchema.type`, is not one (flow/script/object_operation/proxy) — rendered. | | `book.description` | `groups` | a key that takes an **array**, so no rendered word can land in it — the rule round 6 used to clear `timeoutMs`. | ## "Capability" in three positions, decided two ways - `hook`/`action.fields.body.capabilities.label` — a `HookBodyCapability` **token list**. Round 6 moved both to 能力 / ケイパビリティ. **Untouched**, and asserted so: the cross-panel invariant stays at 30/30. - `object.sections.capabilities.label` — the object's **feature toggles**, a different concept under the same English stem. Still 功能开关 / 機能 / Capacidades, deliberately, and asserted so. - `capability.label` — the **ADR-0066 metadata type**, whose instances are named authorization capability keys (`export_data`, `billing.refund`, from the schema's own name-regex message). Takes 能力 / ケイパビリティ / **Capacidad** — agreeing with the landed pair by **re-deriving from the same objects-catalog evidence** (`sys_user.fields.ai_access.help`, `sys_email.fields.attachments_json.help`) rather than borrowing its decision, and differing from it in Spanish **number** because this leaf names one capability and that one names a list. A precedent answers only the question it contains; round 6's contained the token list, not this type. ## The remainder, in keys AND leaves — two counts, two questions | family | keys | decidable leaves | `.label` leaves | |:--|--:|--:|--:| | `object.fields.enable.*` (+ `validations`) | **9** | 11 | 27 | | `report.fields.drilldown` + `runtimeFilter` + `sections.dataset_binding` | 3 | 6 | 9 | | **remaining total** | **12** | **17** | **36** | Census re-taken on this branch's base `88920d153` and on the merged head `699e2e862`: | reading | base | head | |:--|--:|--:| | `en` string leaves / `.label` leaves | 893 / 538 | 893 / 538 — same population | | `.label` keys echoing in ALL THREE | **18** (54 `.label` leaves) | **12** (36) | | decidable sibling remainder | **29** | **17** | | POSITIVE CONTROL `zh-CN` / `ja-JP` / `es-ES` | 520 / 504 / 504 | **526 / 510 / 510** | The headline falls by **6** and the decidable remainder by **12**, because this round decides six labels *and* six descriptions and only the labels move the headline. State which count you mean. ## No key added, no key removed Full flattened key sets compared base against head across all four bundles: **3572 entries, 0 added, 0 removed**, `en` untouched. Both directions of the comparator proved on a probe key, each mutation landed on disk and restored: - **added** — injecting `seed.__probe__` into `zh-CN`: `base=3572 head=3573 added=1 removed=0`. - **removed** — deleting `zh-CN` `seed.description`: `base=3572 head=3571 added=0 removed=1`. Regenerated with `pnpm i18n:extract`, which rewrote the three bundles byte-identical to the entered values and dropped exactly the **12** provenance rows per locale that recorded these leaves as unauthored extractor fills, adding none. `metadataForms.TYPE.PROP` is now empty in all three tables where the base held exactly these twelve. ## Ablations — 6 runs, **11 distinct assertions**, 5 mutation targets across 4 files Every one through `scripts/ablation-replace.mjs`: the anchor had to hit and fall, the blob had to change, and each restore is proved by blob-equals-HEAD plus an empty `git diff HEAD`. | # | mutation | reds | |:--|:--|:--| | A | `zh-CN` `seed.label` refilled with its `en` source | `zh-CN: every decided leaf matches its verdict`; `no leaf in the bare class reads its en source unless the ledger decided it is an echo` | | B | `zh-CN` `job.label` refilled — **a leaf no row decides** | `DARK, INWARD — four members of the population come back NON-ECHOING`; the same class rule. **This is the proof the substitute property is real.** | | C | `en` catalog `Seed Data` reworded to `Seed data` | `every row is pinned to the live en source`; `the echo predicate can say "echo"`. The **registry** leg stays green — the two legs are independent. | | D | the **registry** entry in `packages/spec` reworded, spec rebuilt | exactly one: `…and to the REGISTRY entry that manufactures it — the third leg`. The catalog pin stays green. | | E | `rename` made a legal `TransformType` in `packages/spec`, spec rebuilt | `rename is NOT a TransformType — but map is, and "field mapping" contains it` | | F | the derived population swapped for the **hand-list rounds 5/6 assumed** | `the BARE predicate splits that population, and is read off the SHAPE not a name list`; `DARK, INWARD`; `this class is now DONE`. | **Two disclosures, volunteered.** 1. The first key-set negative control was **refused by the tool** — "the anchor count moved 1 to 1, a drop of 0, not the declared 1" — because the replacement re-contained the anchor. It was **re-authored** as a true replacement (and the removal direction re-authored again into `--delete` mode when the replacement count would not rise), not re-run until something landed. 2. Ablation D's first dist marker was `Seed data`, which **pre-exists** in `packages/spec` in 12 unrelated places (`'Seed data loader configuration'`, `'Seed data records'`, doc comments). Its `--absent` restore leg read RED as the tool's own header warns it can — a surviving hit that was never mine — and, worse, its `present` leg would have passed even had the mutation never reached `dist`. **That reading was void**, the marker was re-authored to the discriminating `type: "seed", label: "Seed data"`, and D was re-run from scratch. Both spec-side ablations then carried a real dist preflight (`marker present in 4` / `in 20 built files`) and a real restore leg (`marker absent from all 216` / `218 built files`, tree clean). Because this ledger imports `@objectstack/spec/kernel` — unaliased, so it resolves through `spec/dist` — the spec-side ablations **do** need a rebuild, and each carries one. That is a difference from round 6, whose ledger reached only sibling sources; it is stated rather than inherited. ## Merge with `origin/main`, two-legged `origin/main` moved from `88920d153` to `b3615f1a4` while this round ran, so the check was **not vacuous** — and the two commits (#19538, #19513) touch **nothing** in `packages/platform-objects/src/apps/translations/`. - **Leg 1 — something really moved:** `git diff --stat 88920d1 origin/main` = 10 files, +262 / -60, including `packages/spec/src/data/object.zod.ts`. - **Leg 2 — it survived:** after the merge, `git diff origin/main HEAD` is empty on **all 10** of those paths. Nothing was reverted. The merged head was then rebuilt and every reading below re-taken on it. ## Gates — 60 derived / 60 run / 0 NOT MEASURED / 0 UNRUN Reconciled by `scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran`, with every family recorded as `COMMAND :: exit CODE` and the exit code captured **before** any pipe, so the zero is derived rather than claimed: > 60 derived famil(ies) accounted for — 60 run, 0 NOT-MEASURED (a DERIVED zero — all 60 recorded an exit code and none of them is 3). Plus, on the merged head `699e2e862`: dependency-closure build exit 0; `pnpm --filter @objectstack/platform-objects test` exit 0 — **51 files / 770 passed** (+1 file, +37 tests vs round 6); `typecheck` exit 0; `pnpm check:i18n` exit 0; repo-wide `pnpm lint` exit 0 over **6970 files, 0 messages** — the full population, so no narrowing is claimed and none is owed. **Three exit 3s, all discharged** by building the closure the gate named, then re-run: `check:dual-build-cjs-loads` and `check:i18n` both wanted a full build (`turbo run build --concurrency=2 --filter='!@objectstack/docs'`, 73 tasks, exit 0); `check:type-check-debt` named `@objectstack/platform-objects` specifically. All three then exit 0, and the final sweep on the merged head produced no exit 3 at all. The `--` forwarding trap was avoided by construction: every build in this round is spelled `pnpm exec turbo run build --concurrency=2 --filter=...`. ## Changeset — measured, not assumed `@objectstack/platform-objects` declares no `private` and ships `files: ["dist", ...]`, so `skip-changeset` is measurably wrong. Probed in `dist` after a real build, with controls: | probe | raw | `\uXXXX` lower | `\uXXXX` UPPER | `\xNN` lower | `\xNN` UPPER | |:--|--:|--:|--:|--:|--:| | 种子数据 (`zh` `seed.label`) | 0 | 0 | **6** | 0 | 0 | | ケイパビリティ (`ja` `capability.label`) | 0 | 0 | **42** | 0 | 0 | | Documentación del paquete (`es`) | 0 | 0 | 0 | 0 | **6** | | `Endpoint API` (pure ASCII) | **6** | 6 | 6 | 6 | 6 | | NEGATIVE CONTROL — non-ASCII never written | 0 | 0 | 0 | 0 | 0 | | NEGATIVE CONTROL — ASCII never written | 0 | 0 | 0 | 0 | 0 | CJK ships as **UPPER-CASE** `\uXXXX`; U+0080–U+00FF as **UPPER-CASE** `\xNN`. Both negative controls read 0 everywhere, so a zero on the raw probe reads **"escaped"**, not "absent". The pure-ASCII probe reads 6 in every column because its escaped spellings are identical to its raw one — the sanity note that the counter is counting. `patch`. ## Acceptance notes **Zero cards filed, and that is a reading, not a silence.** The leaf that could have carried a known trap is `doc.description` / `capability.description`'s opening word `Package`: it *is* a legal `MetadataProvenanceSchema` value, both schemas really do accept `_provenance: "package"` and refuse a rendered one, and the check was performed **at the schema** and then **pinned in the ledger**, together with the derived assertion that the `en` metadata-forms catalog names **no** underscore-prefixed key anywhere. None of the five schema readings produced a defect: four of the words are not enum members at all, and the fifth is one an author never writes on these types because these types have no form. Two observations, neither filed, both prose here because neither carries a class or a carrier: - `permission.fields.systemPermissions.helpText` renders "system capability **keys**" as システム**機能**キー in `ja-JP`, using the word round 6 measured as wrong for a capability token and replaced on the `hook` and `action` panels. It is **not an echo** — it is authored — so it is outside this card's family, and it is not a defect against any declared contract: no runtime reads it. Whether the objects-catalog rendering (ケイパビリティ) should reach the `permission` panel is a wording question for whoever takes that panel. **承接者:无** — no open PR and no queued family touches `packages/platform-objects/src/apps/translations/` on the `permission` entry, so nothing is scheduled to pass through that file. Dedupe words: permission systemPermissions capability 機能 ja-JP. - `es-ES` answers "permission sets" two ways in the same catalog — `conjuntos de permisos` (`permission.sections.identity.description`) and the English `permission sets` (`position.sections.position.description`). This round took the Spanish form, because the leaf it describes is the permission domain's own definition side, and the row records the split rather than harmonising the other leaf. Not a defect; a recorded divergence. Dedupe words: es-ES permission sets conjuntos position panel. One scratch file (`packages/spec/probe-tmp.mts`, an exploratory census probe) was swept into a commit by a `git add -A` and removed in its own commit before the merge; the final diff is 8 files, all in `packages/platform-objects/src/apps/translations/` plus the changeset. --- _Generated by [Claude Code](https://claude.ai/code/session_01NcPSwnmJHczmTu6FG7NMjE)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 731f020 commit 4d0bd23

8 files changed

Lines changed: 968 additions & 72 deletions
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
"@objectstack/platform-objects": patch
3+
---
4+
5+
The metadata-type chooser no longer offers a Chinese, Japanese or Spanish author six entries written in English: the display pairs of `seed`, `mapping`, `api`, `doc`, `book` and `capability` — six keys, twelve string leaves — were decided leaf by leaf and rendered in `zh-CN`, `ja-JP` and `es-ES` (#19403). These six are the **bare** metadata types: they declare no form at all, so their registry `label` and `description` are the only strings an author ever sees for them, and until now every one of those strings was its English source.
6+
7+
An en-echo is not automatically a defect, so every leaf carries a recorded reason in `bare-type-display-echo-decisions.test.ts`, naming the authored leaf its wording came from — and saying so out loud where no authored twin exists (`seed`, `book` and the word "export" have none, and the rows state that rather than leaning on one).
8+
9+
- **The population is derived, not listed.** The ledger walks `DEFAULT_METADATA_TYPE_REGISTRY` crossed with one predicate read off the catalog's shape — a type is *bare* when its entry has no `fields` and no `sections` — so a metadata type added later with an unauthored display pair lands in the population automatically. Ten types qualify; the six decided here are the six that echoed, and the other four (`job`, `datasource`, `external_catalog`, `translation`) are already authored and stay in the walk as its control.
10+
- **Machine tokens stay English, and five near-misses were read at the schema before a word was rendered.** `package` in two of the descriptions *is* a legal `_provenance` value and the schemas really do accept it — cleared, because no form asks an author for an envelope key and these types have no form at all. `rename` is **not** a `TransformType` member (but `map` is, and "field mapping" contains it — the token guard judges word boundaries, not substrings); `publish` is not a `SeedMode`; `pipeline` is not an api `type`; `groups` is a key that takes an array. `HTTP`, `URL`, `Markdown`, `API`, `ADR-0121`, `ADR-0046 §6`, `ADR-0066 D1` are kept verbatim in all three locales. Every reading is asserted against the live schema rather than described.
11+
- **"Capability" is decided per meaning, in three positions.** The metadata type takes 能力 / ケイパビリティ / Capacidad, agreeing with the `body.capabilities` token list by re-deriving from the same objects-catalog evidence rather than borrowing its decision, and differing from it in Spanish number because this leaf names one capability. The object panel's `Capabilities` section — feature toggles, a different concept under the same English word — is deliberately untouched, and both the agreement and the non-agreement are asserted.
12+
- **Values only.** No key was added or removed: the full flattened key sets are identical on all four bundles (893 keys, 0 added, 0 removed) with a negative control proving the comparator sees a one-key delta in both directions, and `en` is untouched. Regenerated with `pnpm i18n:extract`, which dropped exactly the 12 provenance rows per locale that recorded these leaves as unauthored extractor fills, and added none — leaving **no** metadata type's display pair recorded as a fill in any locale.
13+
14+
Measured on the metadata-form catalogs: label keys echoing in all three locales fall **18 → 12** while the genuinely-translated control rises **520 → 526** (`zh-CN`) and **504 → 510** (`ja-JP`, `es-ES`), same population (893 string leaves, 538 of them labels), same run. The decidable remainder — a label plus its sibling `description`/`helpText` — falls **29 → 17**, because this round decides six labels *and* six descriptions and only the labels move the headline.

‎packages/platform-objects/src/apps/translations/bare-type-display-echo-decisions.test.ts‎

Lines changed: 918 additions & 0 deletions
Large diffs are not rendered by default.

‎packages/platform-objects/src/apps/translations/es-ES.metadata-forms.generated.ts‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -608,12 +608,12 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
608608
}
609609
},
610610
seed: {
611-
label: "Seed Data",
612-
description: "Fixture / initialization data applied on publish"
611+
label: "Datos semilla",
612+
description: "Datos predefinidos / de inicialización aplicados al publicar"
613613
},
614614
mapping: {
615-
label: "Import Mapping",
616-
description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
615+
label: "Mapeo de importación",
616+
description: "Mapeo de campos de importación/exportación reutilizable (renombrado + transformaciones), referenciado por nombre al importar"
617617
},
618618
view: {
619619
label: "Vista",
@@ -1708,8 +1708,8 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
17081708
label: "Catálogo externo"
17091709
},
17101710
api: {
1711-
label: "API Endpoint",
1712-
description: "Declarative HTTP endpoint — a stable URL and policy layer over an existing pipeline (ADR-0121)"
1711+
label: "Endpoint API",
1712+
description: "Endpoint HTTP declarativo — una URL estable y una capa de política sobre un pipeline existente (ADR-0121)"
17131713
},
17141714
translation: {
17151715
label: "Traducción"
@@ -1795,12 +1795,12 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
17951795
}
17961796
},
17971797
doc: {
1798-
label: "Documentation",
1799-
description: "Package documentation — flat Markdown items (ADR-0046)"
1798+
label: "Documentación",
1799+
description: "Documentación del paquete — elementos Markdown planos (ADR-0046)"
18001800
},
18011801
book: {
1802-
label: "Documentation Book",
1803-
description: "Documentation navigation spine — ordered groups with derived membership (ADR-0046 §6)"
1802+
label: "Libro de documentación",
1803+
description: "Columna vertebral de navegación de la documentación — grupos ordenados con pertenencia derivada (ADR-0046 §6)"
18041804
},
18051805
permission: {
18061806
label: "Conjunto de permisos",
@@ -1875,8 +1875,8 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
18751875
}
18761876
},
18771877
capability: {
1878-
label: "Capability",
1879-
description: "Package-declared authorization capability — the DEFINITION side of ADR-0066 D1 (grants live on permission sets; requirements on resources)"
1878+
label: "Capacidad",
1879+
description: "Capacidad de autorización declarada por el paquete — el lado de la DEFINICIÓN de ADR-0066 D1 (las concesiones residen en los conjuntos de permisos; los requisitos, en los recursos)"
18801880
},
18811881
agent: {
18821882
label: "Agente de IA",

‎packages/platform-objects/src/apps/translations/es-ES.source-hashes.generated.ts‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,7 @@
1818
*/
1919

2020
export const esESGeneratedSourceHashes: Readonly<Record<string, string>> = {
21-
"metadataForms.api.description": "62421e8039e013f5",
22-
"metadataForms.api.label": "589af3fe4aab4af5",
23-
"metadataForms.book.description": "45e72c8c74617530",
24-
"metadataForms.book.label": "b48c719759fca087",
25-
"metadataForms.capability.description": "1130a8a487c35f3d",
26-
"metadataForms.capability.label": "cb58b72c5cc77632",
27-
"metadataForms.doc.description": "f233af60238b0879",
28-
"metadataForms.doc.label": "3f35cf5088b999ad",
2921
"metadataForms.email_template.fields.variables.helpText": "27197774c2cda633",
30-
"metadataForms.mapping.description": "654a322ed6e264bb",
31-
"metadataForms.mapping.label": "9baba989f46cd1e8",
3222
"metadataForms.object.fields.enable.activities.label": "1091422f7f3133d3",
3323
"metadataForms.object.fields.enable.apiEnabled.label": "34396a2f6cfda5d5",
3424
"metadataForms.object.fields.enable.clone.label": "48cbbe43b82f32c2",
@@ -78,8 +68,6 @@ export const esESGeneratedSourceHashes: Readonly<Record<string, string>> = {
7868
"metadataForms.report.fields.runtimeFilter.label": "90fe0e44293633fa",
7969
"metadataForms.report.sections.dataset_binding.description": "54650ff5f09fd1bd",
8070
"metadataForms.report.sections.dataset_binding.label": "34d97a3093d6fc56",
81-
"metadataForms.seed.description": "c22921feb0f06273",
82-
"metadataForms.seed.label": "60e0e22a54230cab",
8371
"objects.sys_account._actions.link_social.params.provider.options.apple": "cfdc41e15ed6699b",
8472
"objects.sys_account._actions.link_social.params.provider.options.discord": "12f931cc062e76ae",
8573
"objects.sys_account._actions.link_social.params.provider.options.facebook": "7eea009178f5b807",

‎packages/platform-objects/src/apps/translations/ja-JP.metadata-forms.generated.ts‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -608,12 +608,12 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
608608
}
609609
},
610610
seed: {
611-
label: "Seed Data",
612-
description: "Fixture / initialization data applied on publish"
611+
label: "シードデータ",
612+
description: "公開時に適用されるフィクスチャ/初期化データ"
613613
},
614614
mapping: {
615-
label: "Import Mapping",
616-
description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
615+
label: "インポートマッピング",
616+
description: "再利用可能なインポート/エクスポートのフィールドマッピング(リネーム + 変換)。インポート時に名前で参照します"
617617
},
618618
view: {
619619
label: "ビュー",
@@ -1708,8 +1708,8 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
17081708
label: "外部カタログ"
17091709
},
17101710
api: {
1711-
label: "API Endpoint",
1712-
description: "Declarative HTTP endpoint — a stable URL and policy layer over an existing pipeline (ADR-0121)"
1711+
label: "API エンドポイント",
1712+
description: "宣言的な HTTP エンドポイント — 既存のパイプラインの上に安定した URL とポリシー層を提供(ADR-0121)"
17131713
},
17141714
translation: {
17151715
label: "翻訳"
@@ -1795,12 +1795,12 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
17951795
}
17961796
},
17971797
doc: {
1798-
label: "Documentation",
1799-
description: "Package documentation — flat Markdown items (ADR-0046)"
1798+
label: "ドキュメント",
1799+
description: "パッケージのドキュメント — フラットな Markdown 項目(ADR-0046)"
18001800
},
18011801
book: {
1802-
label: "Documentation Book",
1803-
description: "Documentation navigation spine — ordered groups with derived membership (ADR-0046 §6)"
1802+
label: "ドキュメントブック",
1803+
description: "ドキュメントナビゲーションの骨格 — 順序付きグループと派生されたメンバーシップ(ADR-0046 §6)"
18041804
},
18051805
permission: {
18061806
label: "権限セット",
@@ -1875,8 +1875,8 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
18751875
}
18761876
},
18771877
capability: {
1878-
label: "Capability",
1879-
description: "Package-declared authorization capability — the DEFINITION side of ADR-0066 D1 (grants live on permission sets; requirements on resources)"
1878+
label: "ケイパビリティ",
1879+
description: "パッケージが宣言する認可ケイパビリティ — ADR-0066 D1 の定義側(付与は権限セットに、要件はリソースに)"
18801880
},
18811881
agent: {
18821882
label: "AI エージェント",

‎packages/platform-objects/src/apps/translations/ja-JP.source-hashes.generated.ts‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,7 @@
1818
*/
1919

2020
export const jaJPGeneratedSourceHashes: Readonly<Record<string, string>> = {
21-
"metadataForms.api.description": "62421e8039e013f5",
22-
"metadataForms.api.label": "589af3fe4aab4af5",
23-
"metadataForms.book.description": "45e72c8c74617530",
24-
"metadataForms.book.label": "b48c719759fca087",
25-
"metadataForms.capability.description": "1130a8a487c35f3d",
26-
"metadataForms.capability.label": "cb58b72c5cc77632",
27-
"metadataForms.doc.description": "f233af60238b0879",
28-
"metadataForms.doc.label": "3f35cf5088b999ad",
2921
"metadataForms.email_template.fields.variables.helpText": "27197774c2cda633",
30-
"metadataForms.mapping.description": "654a322ed6e264bb",
31-
"metadataForms.mapping.label": "9baba989f46cd1e8",
3222
"metadataForms.object.fields.enable.activities.label": "1091422f7f3133d3",
3323
"metadataForms.object.fields.enable.apiEnabled.label": "34396a2f6cfda5d5",
3424
"metadataForms.object.fields.enable.clone.label": "48cbbe43b82f32c2",
@@ -78,8 +68,6 @@ export const jaJPGeneratedSourceHashes: Readonly<Record<string, string>> = {
7868
"metadataForms.report.fields.runtimeFilter.label": "90fe0e44293633fa",
7969
"metadataForms.report.sections.dataset_binding.description": "54650ff5f09fd1bd",
8070
"metadataForms.report.sections.dataset_binding.label": "34d97a3093d6fc56",
81-
"metadataForms.seed.description": "c22921feb0f06273",
82-
"metadataForms.seed.label": "60e0e22a54230cab",
8371
"objects.sys_account._actions.link_social.params.provider.options.apple": "cfdc41e15ed6699b",
8472
"objects.sys_account._actions.link_social.params.provider.options.discord": "12f931cc062e76ae",
8573
"objects.sys_account._actions.link_social.params.provider.options.facebook": "7eea009178f5b807",

‎packages/platform-objects/src/apps/translations/zh-CN.metadata-forms.generated.ts‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -608,12 +608,12 @@ export const zhCNMetadataForms: NonNullable<TranslationData['metadataForms']> =
608608
}
609609
},
610610
seed: {
611-
label: "Seed Data",
612-
description: "Fixture / initialization data applied on publish"
611+
label: "种子数据",
612+
description: "发布时应用的预置/初始化数据"
613613
},
614614
mapping: {
615-
label: "Import Mapping",
616-
description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
615+
label: "导入映射",
616+
description: "可复用的导入/导出字段映射(重命名 + 转换),在导入时按名称引用"
617617
},
618618
view: {
619619
label: "视图",
@@ -1708,8 +1708,8 @@ export const zhCNMetadataForms: NonNullable<TranslationData['metadataForms']> =
17081708
label: "外部目录"
17091709
},
17101710
api: {
1711-
label: "API Endpoint",
1712-
description: "Declarative HTTP endpoint — a stable URL and policy layer over an existing pipeline (ADR-0121)"
1711+
label: "API 端点",
1712+
description: "声明式 HTTP 端点——在既有管道之上提供稳定的 URL 与策略层(ADR-0121)"
17131713
},
17141714
translation: {
17151715
label: "翻译"
@@ -1795,12 +1795,12 @@ export const zhCNMetadataForms: NonNullable<TranslationData['metadataForms']> =
17951795
}
17961796
},
17971797
doc: {
1798-
label: "Documentation",
1799-
description: "Package documentation — flat Markdown items (ADR-0046)"
1798+
label: "文档",
1799+
description: "软件包文档——扁平的 Markdown 文档项(ADR-0046)"
18001800
},
18011801
book: {
1802-
label: "Documentation Book",
1803-
description: "Documentation navigation spine — ordered groups with derived membership (ADR-0046 §6)"
1802+
label: "文档手册",
1803+
description: "文档导航主干——有序分组,成员由派生确定(ADR-0046 §6)"
18041804
},
18051805
permission: {
18061806
label: "权限集",
@@ -1875,8 +1875,8 @@ export const zhCNMetadataForms: NonNullable<TranslationData['metadataForms']> =
18751875
}
18761876
},
18771877
capability: {
1878-
label: "Capability",
1879-
description: "Package-declared authorization capability — the DEFINITION side of ADR-0066 D1 (grants live on permission sets; requirements on resources)"
1878+
label: "能力",
1879+
description: "软件包声明的授权能力——ADR-0066 D1 的定义侧(授予在权限集上;要求在资源上)"
18801880
},
18811881
agent: {
18821882
label: "AI 代理",

‎packages/platform-objects/src/apps/translations/zh-CN.source-hashes.generated.ts‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,6 @@
1818
*/
1919

2020
export const zhCNGeneratedSourceHashes: Readonly<Record<string, string>> = {
21-
"metadataForms.api.description": "62421e8039e013f5",
22-
"metadataForms.api.label": "589af3fe4aab4af5",
23-
"metadataForms.book.description": "45e72c8c74617530",
24-
"metadataForms.book.label": "b48c719759fca087",
25-
"metadataForms.capability.description": "1130a8a487c35f3d",
26-
"metadataForms.capability.label": "cb58b72c5cc77632",
27-
"metadataForms.doc.description": "f233af60238b0879",
28-
"metadataForms.doc.label": "3f35cf5088b999ad",
29-
"metadataForms.mapping.description": "654a322ed6e264bb",
30-
"metadataForms.mapping.label": "9baba989f46cd1e8",
3121
"metadataForms.object.fields.enable.activities.label": "1091422f7f3133d3",
3222
"metadataForms.object.fields.enable.apiEnabled.label": "34396a2f6cfda5d5",
3323
"metadataForms.object.fields.enable.clone.label": "48cbbe43b82f32c2",
@@ -45,8 +35,6 @@ export const zhCNGeneratedSourceHashes: Readonly<Record<string, string>> = {
4535
"metadataForms.report.fields.runtimeFilter.label": "90fe0e44293633fa",
4636
"metadataForms.report.sections.dataset_binding.description": "54650ff5f09fd1bd",
4737
"metadataForms.report.sections.dataset_binding.label": "34d97a3093d6fc56",
48-
"metadataForms.seed.description": "c22921feb0f06273",
49-
"metadataForms.seed.label": "60e0e22a54230cab",
5038
"objects.sys_account._actions.link_social.params.provider.options.apple": "cfdc41e15ed6699b",
5139
"objects.sys_account._actions.link_social.params.provider.options.discord": "12f931cc062e76ae",
5240
"objects.sys_account._actions.link_social.params.provider.options.facebook": "7eea009178f5b807",

0 commit comments

Comments
 (0)