From 33664fc0c8cb2f1a8e8ea933860f6c69d9313c42 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 25 Oct 2026 02:12:58 +0000 Subject: [PATCH] chore(deps): move .objectstack-sha to objectstack main 43edf90b56, translation positions and permissions (objectstack#25727) Catch objectui up to objectstack main: the pin moves from e649c2d91e to 43edf90b56db8b47ad17684c145fb7fa8bf08583, past 19 commits that touch packages/spec. The packed manifests of core, lint and spec move their zod floor to ^4.6.6; pnpm-lock.yaml already resolves zod 4.6.7 and does not change. The one compile break the new spec brings: objectstack 47af3dde42 adds `positions` and `permissions` to TranslationDataSchema, so the TranslationPreview category record (exhaustive by `satisfies`) gains a row for each, with en and zh headings. The console's translation loader lists the served document's groups by hand; it gains the same two, so a bundle carrying only one of them is recognised as a spec payload. Part of objectstack#25727 (epic objectstack#25677). Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01K1ngdG6x8wAt8cjeVx2cSk --- .changeset/25727-spec-catchup-positions-permissions.md | 9 +++++++++ .objectstack-pin/core/package.json | 2 +- .objectstack-pin/lint/package.json | 2 +- .objectstack-pin/spec/package.json | 2 +- .objectstack-sha | 2 +- packages/app-shell/src/views/metadata-admin/i18n.ts | 4 ++++ .../TranslationPreview.categories-11765.test.tsx | 2 ++ .../views/metadata-admin/previews/TranslationPreview.tsx | 4 ++++ .../previews/adminPreviews.i18n-10862-s2.test.tsx | 4 +++- packages/i18n/src/utils/spec-translations.ts | 5 +++++ 10 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 .changeset/25727-spec-catchup-positions-permissions.md diff --git a/.changeset/25727-spec-catchup-positions-permissions.md b/.changeset/25727-spec-catchup-positions-permissions.md new file mode 100644 index 0000000000..67b5461ddc --- /dev/null +++ b/.changeset/25727-spec-catchup-positions-permissions.md @@ -0,0 +1,9 @@ +--- +"@object-ui/app-shell": patch +"@object-ui/i18n": patch +--- + +Clause-②: no +Metadata-protocol: none + +Translation bundles' `positions` and `permissions` groups (the position and permission-set labels `@objectstack/spec` made translatable): the translation preview draws a card for each and counts them in its coverage, and the console's translation loader recognises a served bundle that carries only one of them as a spec payload and namespaces it under `app`, as it does every other group. diff --git a/.objectstack-pin/core/package.json b/.objectstack-pin/core/package.json index 40d33a91e5..3b1ddbd649 100644 --- a/.objectstack-pin/core/package.json +++ b/.objectstack-pin/core/package.json @@ -29,7 +29,7 @@ "dependencies": { "@objectstack/spec": "18.1.0", "@objectstack/types": "18.1.0", - "zod": "^4.6.5" + "zod": "^4.6.6" }, "keywords": [ "objectstack", diff --git a/.objectstack-pin/lint/package.json b/.objectstack-pin/lint/package.json index 618731e343..d72a5b26f0 100644 --- a/.objectstack-pin/lint/package.json +++ b/.objectstack-pin/lint/package.json @@ -50,7 +50,7 @@ "devDependencies": { "@types/node": "^26.6.3", "vitest": "^4.1.11", - "zod": "^4.6.5" + "zod": "^4.6.6" }, "keywords": [ "objectstack", diff --git a/.objectstack-pin/spec/package.json b/.objectstack-pin/spec/package.json index ba0c88a668..4d08a92f7d 100644 --- a/.objectstack-pin/spec/package.json +++ b/.objectstack-pin/spec/package.json @@ -282,7 +282,7 @@ }, "dependencies": { "pg-connection-string": "^2.14.0", - "zod": "^4.6.5" + "zod": "^4.6.6" }, "peerDependencies": { "ai": "^7.0.0" diff --git a/.objectstack-sha b/.objectstack-sha index 406c7555ce..8abcf4de4f 100644 --- a/.objectstack-sha +++ b/.objectstack-sha @@ -1 +1 @@ -e649c2d91e270e3da26820bcfe54a28445305a75 +43edf90b56db8b47ad17684c145fb7fa8bf08583 diff --git a/packages/app-shell/src/views/metadata-admin/i18n.ts b/packages/app-shell/src/views/metadata-admin/i18n.ts index 1a166d2c26..3eb4498491 100644 --- a/packages/app-shell/src/views/metadata-admin/i18n.ts +++ b/packages/app-shell/src/views/metadata-admin/i18n.ts @@ -1785,6 +1785,8 @@ const ENGINE_STRINGS_EN: Record = { 'engine.translationPreview.category.datasets': 'Datasets', 'engine.translationPreview.category.pages': 'Pages', 'engine.translationPreview.category.flows': 'Flows', + 'engine.translationPreview.category.positions': 'Positions', + 'engine.translationPreview.category.permissions': 'Permission Sets', 'engine.translationPreview.category.metadataForms': 'Metadata Forms', 'engine.translationPreview.category.settingsCommon': 'Settings UI', 'engine.translationPreview.coverage': 'Category coverage:', @@ -5407,6 +5409,8 @@ const ENGINE_STRINGS_ZH: Record = { 'engine.translationPreview.category.datasets': '数据集', 'engine.translationPreview.category.pages': '页面', 'engine.translationPreview.category.flows': '流程', + 'engine.translationPreview.category.positions': '岗位', + 'engine.translationPreview.category.permissions': '权限集', 'engine.translationPreview.category.metadataForms': '元数据表单', 'engine.translationPreview.category.settingsCommon': '设置界面', 'engine.translationPreview.coverage': '分类覆盖率:', diff --git a/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.categories-11765.test.tsx b/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.categories-11765.test.tsx index c038d5454f..94d40a586f 100644 --- a/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.categories-11765.test.tsx +++ b/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.categories-11765.test.tsx @@ -58,6 +58,8 @@ const ONE_ENTRY: Record; key: string; ro }, pages: { data: { home: { label: 'Accueil' } }, key: 'home', row: () => keys(1) }, flows: { data: { onboarding: { label: 'Intégration' } }, key: 'onboarding', row: () => keys(1) }, + positions: { data: { sales_manager: { label: 'Responsable des ventes' } }, key: 'sales_manager', row: () => keys(1) }, + permissions: { data: { sales_user: { label: 'Commercial' } }, key: 'sales_user', row: () => keys(1) }, metadataForms: { data: { object: { label: 'Objet' } }, key: 'object', row: () => keys(1) }, // `settingsCommon` is one strict object, not a record of author-named nodes: // its members (`sourceLabels`) are what the card counts and samples. diff --git a/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx b/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx index 06de276d84..34cb2213e0 100644 --- a/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx +++ b/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx @@ -32,6 +32,7 @@ import * as React from 'react'; import { AppWindow, + Briefcase, ClipboardList, Database, FileText, @@ -43,6 +44,7 @@ import { MessageCircle, PanelsTopLeft, Settings2, + ShieldCheck, SquareChevronDown, Workflow, } from 'lucide-react'; @@ -94,6 +96,8 @@ const CATEGORY_DEFS = { datasets: { label: 'engine.translationPreview.category.datasets', icon: Database, flat: false }, pages: { label: 'engine.translationPreview.category.pages', icon: PanelsTopLeft, flat: false }, flows: { label: 'engine.translationPreview.category.flows', icon: Workflow, flat: false }, + positions: { label: 'engine.translationPreview.category.positions', icon: Briefcase, flat: false }, + permissions: { label: 'engine.translationPreview.category.permissions', icon: ShieldCheck, flat: false }, metadataForms: { label: 'engine.translationPreview.category.metadataForms', icon: FileText, flat: false }, settingsCommon: { label: 'engine.translationPreview.category.settingsCommon', icon: Settings2, flat: false }, } satisfies Record>; diff --git a/packages/app-shell/src/views/metadata-admin/previews/adminPreviews.i18n-10862-s2.test.tsx b/packages/app-shell/src/views/metadata-admin/previews/adminPreviews.i18n-10862-s2.test.tsx index 63520a7da9..0b8aeda0ed 100644 --- a/packages/app-shell/src/views/metadata-admin/previews/adminPreviews.i18n-10862-s2.test.tsx +++ b/packages/app-shell/src/views/metadata-admin/previews/adminPreviews.i18n-10862-s2.test.tsx @@ -461,6 +461,8 @@ describe('TranslationPreview reads the designer locale (objectui#10862)', () => { key: 'engine.translationPreview.category.datasets' }, { key: 'engine.translationPreview.category.pages' }, { key: 'engine.translationPreview.category.flows' }, + { key: 'engine.translationPreview.category.positions' }, + { key: 'engine.translationPreview.category.permissions' }, { key: 'engine.translationPreview.category.metadataForms' }, { key: 'engine.translationPreview.category.settingsCommon' }, { key: 'engine.translationPreview.categoryEmpty' }, @@ -468,7 +470,7 @@ describe('TranslationPreview reads the designer locale (objectui#10862)', () => { key: 'engine.translationPreview.keyCountOne', vars: { count: 1 } }, ]); // The bundle's own locale is author data, not the designer's language. - expectAsWritten(['French', 'fr-FR', 'account', '"Un"', '2/11 (18%)']); + expectAsWritten(['French', 'fr-FR', 'account', '"Un"', '2/13 (15%)']); }); } }); diff --git a/packages/i18n/src/utils/spec-translations.ts b/packages/i18n/src/utils/spec-translations.ts index 960eff7287..68934633aa 100644 --- a/packages/i18n/src/utils/spec-translations.ts +++ b/packages/i18n/src/utils/spec-translations.ts @@ -89,6 +89,11 @@ const SPEC_TRANSLATION_GROUPS = [ // `picklist` metadata kind); added at that bump (objectui#11438). The // transform below copies it through onto `app` like any other group. 'picklists', + // `positions` and `permissions` (objectstack `47af3dde42`, position and + // permission-set labels are translatable); added at that bump + // (objectstack#25727), copied through onto `app` the same way. + 'positions', + 'permissions', ] as const; function isPlainObject(value: unknown): value is Record {