Skip to content

chore: version packages#2895

Merged
os-zhuang merged 1 commit into
mainfrom
changeset-release/main
Jul 14, 2026
Merged

chore: version packages#2895
os-zhuang merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@objectstack/cli@14.8.0

Minor Changes

  • 16b4bf6: ADR-0087 P2:可重放迁移链 + 机器可读变更清单(D3 / D4)。

    D3 —— 迁移链(@objectstack/spec 新增 migrations/)。 一条永久、有序、按协议大版本组织的迁移链。每个大版本的步骤由两个来源合成:已毕业的转换(P1 的 D2 转换条目从加载路径退役后,以其 id 引用复用,作为该大版本的“机械变换”,转换与 fixture 不重复)和语义变更(无损映射无法表达的破坏,以结构化 TODO —— surface / 原因 / 验收标准 —— 呈现,而非静默或有损自动改写)。

    • applyMetaMigrations(stack, fromMajor, toMajor?) 折叠 fromMajor+1 … 当前 的步骤,一次性把任意历史大版本的元数据迁到当前;跨大版本是设计主场景。每一跳(hop)都做检查点,便于逐跳验证与二分定位。时效性从不承重 —— 迟到的使用方到达时重放链即可。
    • composeMigrationChainMigrationFloorError,以及显式的发布策略旋钮 MIGRATION_SUPPORT_FLOOR(链能回溯到多久)。
    • 种子:protocol 11 步骤 —— 机械项为三条已毕业的 P1 转换;语义项为两个真实存量窗口:titleFormat 复合模板 → nameField(需公式字段,非无损)、SQL 式 RLS 谓词 → 规范 CEL。
    • CI 把整条链当作链来测:每条转换的 old-shape fixture 从支持下限重放到目标大版本,组合性破坏即发布阻断。

    D4 —— spec-changes.json 变更清单。 Zod 定义的机器可读记录 { from, to, added, converted, migrated, removed },由 composeSpecChanges(from, to, surfaceDiff?) 跨大版本折叠转换表(D2)与迁移集(D3),并与发布期 api-surface 差异连接。按大版本的清单可组合成单一 from→to 视图;后续生成式升级指南与 P3 的 MCP spec_changes 工具都是它的投影。

    CLI —— objectstack migrate meta --from N 重放迁移链:展示生成的、经 ObjectStackDefinitionSchema 校验的机械变更 diff(逐条 path: 旧 → 新)与需人工判断的语义 TODO;--to--step(逐跳检查点)、--out <file.json>(把规范化后的栈写为可 diff 的 JSON 快照)、--json。命令不静默改写 TS 配置源(AST 改写不安全且有损)—— 输出供使用方 agent 审阅采纳,这正是握手错误(P0)所指向的命令。

    normalizeStackInput 新增可选 convert: false(仅做 map→array,不跑 D2 转换),供 migrate meta 对原始编写源重放链、把每处改写归因到对应链步。新增导出纯增量,无破坏性移除。

  • 10e8983: ADR-0089 D3b: add the validateVisibilityPredicates lint rule for conditional-visibility keys, wired into os validate and os compile as advisory warnings.

    Two rules, both warning (never fail the build):

    • visibility-alias-deprecated — a visibleOn (view form section/field) or visibility (page component) key in authored source. It still works — the schema normalizes it to visibleWhen at parse — but the canonical key is visibleWhen. Fix: rename the key (same CEL value).
    • visibility-root-mislayered — a runtime view/page visibility predicate rooted at data. (the metadata-editing-form root). Runtime record surfaces bind record + current_user (pages also expose page.<var>), so a data.-rooted predicate here never matches and the element renders unconditionally. Fix: use record./page..

    The rule runs on the pre-parse stack (like validate-list-view-mode) so it can see the deprecated alias the author actually wrote before the schema folds it into visibleWhen.

  • 5540ced: feat(cli): surface the migration guide when an app's specVersion trails the installed platform

    os validate, os build/os compile, and os doctor now emit a non-blocking
    advisory when the app's authored manifest.specVersion declares an OLDER major
    than the @objectstack/spec actually installed in its node_modules — pointing
    at the curated per-major migration guide (https://docs.objectstack.ai/docs/releases/v<major>,
    guaranteed to exist by scripts/check-release-notes.mjs).

    This closes a discoverability gap for downstream/third-party apps: on a platform
    upgrade the release notes were only reachable by reverse-engineering per-package
    CHANGELOG.md files. The advisory now surfaces the guide at the exact moment the
    upgrade is exercised. It never fails a build/validate and is not gated by
    --strict; it also appears in the --json output as specVersionGap. Logic
    lives in a new shared checkSpecVersionGap() util (unit-tested; installed
    version injectable for tests).

  • bb71321: i18n: translate the system account/messaging surfaces end to end.

    • spec: ObjectTranslationDataSchema / ObjectTranslationNodeSchema now
      accept _views.<view>.emptyState.{title,message} so list-view empty states
      are translatable (contract-first for the extractor below).
    • cli: os i18n extract emits _views.<view>.emptyState keys when a view
      declares an empty state.
    • platform-objects: fill every missing zh-CN/ja-JP/es-ES translation for
      sys_user, sys_organization and sys_business_unit (fields, options,
      views, actions); replace the hardcoded English tab/section/action labels in
      the sys_user, sys_organization and sys_position detail pages with
      inline i18n label objects, and route the user Security tab through
      record:quick_actions so object action labels localize.
    • service-messaging: new ADR-0029 D8 translation bundle
      (MessagingTranslations) covering the seven sys_* messaging objects
      (inbox message, receipts, deliveries, preferences, subscriptions, templates,
      HTTP deliveries), registered on kernel:ready; zh-CN is fully translated
      and ja-JP/es-ES cover sys_inbox_message (incl. the mine view empty
      state).

Patch Changes

  • eaff014: os validate now runs the ADR-0090 D7 security posture check, restoring its documented contract of being the artifact-free run of the same gates as os compile/os build. Previously a stack could pass validate and then fail the build — e.g. a custom object with no explicit sharingModel (OWD), which the posture linter rejects at compile. Error findings gate validation; advisory findings print as warnings (and join the --json warnings array).
  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [10e8983]
  • Updated dependencies [a199626]
  • Updated dependencies [d1b1a94]
  • Updated dependencies [84650c5]
  • Updated dependencies [607aaf4]
  • Updated dependencies [e46169c]
  • Updated dependencies [f0acf25]
  • Updated dependencies [712328a]
  • Updated dependencies [1dede32]
  • Updated dependencies [bb71321]
  • Updated dependencies [a199626]
    • @objectstack/spec@14.8.0
    • @objectstack/service-automation@14.8.0
    • @objectstack/lint@14.8.0
    • @objectstack/plugin-security@14.8.0
    • @objectstack/console@14.8.0
    • @objectstack/driver-sql@14.8.0
    • @objectstack/rest@14.8.0
    • @objectstack/plugin-reports@14.8.0
    • @objectstack/client@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/service-messaging@14.8.0
    • @objectstack/driver-sqlite-wasm@14.8.0
    • @objectstack/account@14.8.0
    • @objectstack/setup@14.8.0
    • @objectstack/cloud-connection@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0
    • @objectstack/mcp@14.8.0
    • @objectstack/metadata@14.8.0
    • @objectstack/objectql@14.8.0
    • @objectstack/observability@14.8.0
    • @objectstack/driver-memory@14.8.0
    • @objectstack/driver-mongodb@14.8.0
    • @objectstack/plugin-approvals@14.8.0
    • @objectstack/plugin-audit@14.8.0
    • @objectstack/plugin-auth@14.8.0
    • @objectstack/plugin-email@14.8.0
    • @objectstack/plugin-hono-server@14.8.0
    • @objectstack/plugin-sharing@14.8.0
    • @objectstack/plugin-webhooks@14.8.0
    • @objectstack/runtime@14.8.0
    • @objectstack/service-analytics@14.8.0
    • @objectstack/service-cache@14.8.0
    • @objectstack/service-datasource@14.8.0
    • @objectstack/service-job@14.8.0
    • @objectstack/service-package@14.8.0
    • @objectstack/service-queue@14.8.0
    • @objectstack/service-realtime@14.8.0
    • @objectstack/service-settings@14.8.0
    • @objectstack/service-sms@14.8.0
    • @objectstack/service-storage@14.8.0
    • @objectstack/trigger-api@14.8.0
    • @objectstack/trigger-record-change@14.8.0
    • @objectstack/trigger-schedule@14.8.0
    • @objectstack/types@14.8.0
    • @objectstack/verify@14.8.0

@objectstack/lint@14.8.0

Minor Changes

  • 10e8983: ADR-0089 D3b: add the validateVisibilityPredicates lint rule for conditional-visibility keys, wired into os validate and os compile as advisory warnings.

    Two rules, both warning (never fail the build):

    • visibility-alias-deprecated — a visibleOn (view form section/field) or visibility (page component) key in authored source. It still works — the schema normalizes it to visibleWhen at parse — but the canonical key is visibleWhen. Fix: rename the key (same CEL value).
    • visibility-root-mislayered — a runtime view/page visibility predicate rooted at data. (the metadata-editing-form root). Runtime record surfaces bind record + current_user (pages also expose page.<var>), so a data.-rooted predicate here never matches and the element renders unconditionally. Fix: use record./page..

    The rule runs on the pre-parse stack (like validate-list-view-mode) so it can see the deprecated alias the author actually wrote before the schema folds it into visibleWhen.

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/formula@14.8.0
    • @objectstack/sdui-parser@14.8.0

@objectstack/metadata-protocol@14.8.0

Minor Changes

  • 1dede32: Make the sys_permission_set data record a pure projection of the metadata layer (ADR-0094; framework#2875) — one authoritative store for permission-set definitions, retiring the two-store split-brain behind the sys_permission_set: env-scope permission metadata saves don't project onto the queryable data record #2857 display-freshness class.

    • @objectstack/metadata-protocol: new registerMutationProjector(type, fn) — an awaited, best-effort per-type hook invoked after persistence inside saveMetaItem / publishMetaItem / deleteMetaItem, so a derived data-plane read-model is already consistent when the write returns (outcome surfaced as projectionApplied on the response). Complements the fire-and-forget onMetadataMutation listeners.
    • @objectstack/plugin-security: every non-system data-door write on sys_permission_set (Setup CRUD, bulk imports, any ObjectQL path) is redirected into the metadata store by an engine middleware; the record is written only by the projector. Boot reconciliation projects env overlays onto records (Studio-created sets now appear in Setup), backfills legacy data-door-only records into metadata once, and re-projects drifted records from the effective body (metadata wins). The projector also syncs the metadata manager's in-memory permission entry, so evaluator resolution and the Setup display can no longer disagree.

    Behavior changes: "deleting" an artifact-backed permission set through the data door now resets it to its declared body instead of removing the row; renaming a set through the data door is rejected (400) — clone to a new name instead; record edits that predate this change and are shadowed by a metadata definition are discarded (loud warning) at first boot, since they were never enforced.

    Moved exports (from @objectstack/plugin-security): upsertEnvPermissionSet now lives in permission-set-projection.js (still re-exported from the package root) and creates missing records; projectEnvPermissionOnMutation / subscribeEnvPermissionProjection are replaced by projectPermissionMutation / registerPermissionSetProjection.

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0
    • @objectstack/metadata-core@14.8.0
    • @objectstack/types@14.8.0

@objectstack/plugin-security@14.8.0

Minor Changes

  • f0acf25: Surface a customized flag on sys_permission_set so Setup can tell — at a glance — which packaged permission sets have an environment overlay (ADR-0094).

    • The env projector stamps customized: true on a managed_by:'package' row while an overlay shadows its shipped baseline, and clears it when the overlay is removed (the data-door "reset"). Env-authored rows are never flagged (an env set is the definition, not a customization of one).
    • The new read-only boolean field is added to sys_permission_set and to the "All" Setup list view (alongside managed_by), so a packaged-but-customized set is visible without opening the Studio layered diff.
  • 712328a: Package-owned permission sets are now customizable through the standard environment metadata overlay (ADR-0094 D5, revised — closes framework#2898 by making the overlay FIRST-CLASS instead of rejecting it).

    • An env-scope saveMetaItem('permission', …) on a package-owned set is a real customization: the awaited projector applies the effective (overlay-wins) body to the sys_permission_set record while preserving its managed_by:'package' + package_id provenance, and the evaluator enforces it.
    • A data-door edit of a packaged set (Setup PATCH) is translated into exactly that overlay — no more flat 403; a data-door "delete" removes the overlay and RESETS the record to the shipped declaration (the row survives).
    • The ADR-0086 two-doors data gate narrows to what stays structurally true: forging package provenance through the admin door remains refused, as do the lifecycle ops with no overlay translation (transfer/restore/purge) on package rows; kernels without a metadata overlay layer keep the legacy full refusal.
    • Cross-package roles compose via positions (bind several packages' sets); overlays narrow. Rationale: rejecting the overlay would make permission the one type whose declared allowOrgOverride: true is a lie, and clone-to-customize forks away from vendor baseline updates.

    Note the standard overlay trade, now applicable to permission sets: while an overlay pins a set, later vendor baseline changes (including tightenings) don't take effect for that name until the overlay is reset or re-authored — surfaced by the Studio layered diff and covered by ADR-0091 recertification.

    Also lands a dogfood proof (showcase-permission-projection) covering the full ADR-0094 invariant set — write-through, awaited projection, declared-set edit becomes an enforced overlay, package-set customize/reset lifecycle — registered in the liveness proof registry.

  • 1dede32: Make the sys_permission_set data record a pure projection of the metadata layer (ADR-0094; framework#2875) — one authoritative store for permission-set definitions, retiring the two-store split-brain behind the sys_permission_set: env-scope permission metadata saves don't project onto the queryable data record #2857 display-freshness class.

    • @objectstack/metadata-protocol: new registerMutationProjector(type, fn) — an awaited, best-effort per-type hook invoked after persistence inside saveMetaItem / publishMetaItem / deleteMetaItem, so a derived data-plane read-model is already consistent when the write returns (outcome surfaced as projectionApplied on the response). Complements the fire-and-forget onMetadataMutation listeners.
    • @objectstack/plugin-security: every non-system data-door write on sys_permission_set (Setup CRUD, bulk imports, any ObjectQL path) is redirected into the metadata store by an engine middleware; the record is written only by the projector. Boot reconciliation projects env overlays onto records (Studio-created sets now appear in Setup), backfills legacy data-door-only records into metadata once, and re-projects drifted records from the effective body (metadata wins). The projector also syncs the metadata manager's in-memory permission entry, so evaluator resolution and the Setup display can no longer disagree.

    Behavior changes: "deleting" an artifact-backed permission set through the data door now resets it to its declared body instead of removing the row; renaming a set through the data door is rejected (400) — clone to a new name instead; record edits that predate this change and are shadowed by a metadata definition are discarded (loud warning) at first boot, since they were never enforced.

    Moved exports (from @objectstack/plugin-security): upsertEnvPermissionSet now lives in permission-set-projection.js (still re-exported from the package root) and creates missing records; projectEnvPermissionOnMutation / subscribeEnvPermissionProjection are replaced by projectPermissionMutation / registerPermissionSetProjection.

Patch Changes

  • a199626: claimSeedOwnership now skips external (federated) objects — those with an external remote-table binding (ADR-0015) — the same way it already skips managedBy and sys_* objects.

    The seed-ownership backfill walks every registered object that exposes an owner_id column and re-owns its unowned rows to the first admin. Federated objects get owner_id auto-injected into their schema, so they passed the filter and the backfill issued select id from <remote_table> where owner_id is null against a read-only remote datasource whose table may not be provisioned yet at boot — producing startup errors like Find operation failed … no such table: customers. External objects are read-only (DDL forbidden, writes double-opt-in) and their ownership is not the platform's to reassign, so they are excluded from the scan entirely.

  • Updated dependencies [16b4bf6]

  • Updated dependencies [16b4bf6]

  • Updated dependencies [10e8983]

  • Updated dependencies [607aaf4]

  • Updated dependencies [bb71321]

    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0

@objectstack/service-automation@14.8.0

Minor Changes

  • 16b4bf6: ADR-0087 P1:元数据转换层(conversion layer,D2)——大多数破坏性变更对使用方零操作。

    @objectstack/spec 新增 conversions/ 模块:一张按协议大版本组织、声明式、无损的转换表,在加载时(normalizeStackInput —— defineStack / objectstack validate / lint / info / doctor 共用的同一入口)把旧(N−1)形态的元数据改写为规范的 N 形态,并对每处改写发出结构化弃用通知(OS_METADATA_CONVERTED)。使用方仍按旧形态编写也能零操作加载,运行时只会看到规范形态。这是把 Kubernetes storage-version/conversion 模型套用到元数据上;它与 Prime Directive Add comprehensive test suite for Zod schema validation #12 禁止的“使用方侧方言兜底”在每个维度上都相反:一张集中、随 spec 版本化、声明化、显式(每次应用都发通知)、带测试(每条附 old→new fixture)、会过期(仅在一个大版本内加载期生效,之后退役并沉淀进 P2 迁移链)的表,而非散落的 cfg.a ?? cfg.b

    首批以已发布的 protocol 11 重命名回填播种:

    • flow-node-http-callout-rename:流程回调节点 http_request / http_call / webhookhttp
    • page-kind-jsx-to-html:页面 kind: 'jsx''html'(ADR-0080 规范拼写)。
    • flow-node-crud-filter-alias:CRUD 流程节点 config.filtersconfig.filter

    运行时加载 seam(存量流程零回归的关键)。 转换不仅接在构建/校验入口,也接到运行时 AutomationEngine.registerFlow(在 FlowSchema.parse 之前跑,新增 applyConversionsToFlow)。这样从数据库 rehydrate 的存量流程也会被规范化——否则删掉 filters 执行器兜底会让存量 delete_record / update_record 的过滤条件被静默清空(退化成作用于全表)。这才真正兑现 D2 “applied at load, the same seam”。

    开放命名空间的冲突守卫(第三方零静默误伤)。 flow.node.type 是开放命名空间(ADR-0018 移除了 enum gate),退役的官方名可能被第三方复用为自定义节点。转换层新增“保留名冲突”感知:运行时 seam 传入本环境已注册的执行器类型,若某退役别名(http_request/http_call/webhook)正被活的自定义执行器占用,则拒绝改写并发出响亮的结构化告警 OS_METADATA_CONVERSION_CONFLICT(带节点位置、conversion id、“请改名”的处置建议),而不是静默把它改成 http 破坏第三方节点。构建/校验入口无注册表上下文,历史别名照常转换。

    并落实 PD Add comprehensive test suite for Zod schema validation #12 退役路径示范:filtersfilter 别名从 service-automation 执行器的 readAliasedConfig 兜底中删除,提升为上面这条声明式转换条目;执行器改为直接读取规范键 cfg.filter

    新增导出(纯增量,无破坏):applyConversionsapplyConversionsToFlowcollectConversionNoticesALL_CONVERSIONSCONVERSIONS_BY_MAJORCONVERSION_NOTICE_CODECONVERSION_CONFLICT_CODE,以及类型 MetadataConversionConversionNoticeConversionApplicationConversionFixtureConversionContextConversionConflictNoticeConversionConflictDetailApplyConversionsOptionsNormalizeStackInputOptionsnormalizeStackInput 现接受可选第二参 { onConversionNotice, convert }(向后兼容)。

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0

@objectstack/service-messaging@14.8.0

Minor Changes

  • bb71321: i18n: translate the system account/messaging surfaces end to end.

    • spec: ObjectTranslationDataSchema / ObjectTranslationNodeSchema now
      accept _views.<view>.emptyState.{title,message} so list-view empty states
      are translatable (contract-first for the extractor below).
    • cli: os i18n extract emits _views.<view>.emptyState keys when a view
      declares an empty state.
    • platform-objects: fill every missing zh-CN/ja-JP/es-ES translation for
      sys_user, sys_organization and sys_business_unit (fields, options,
      views, actions); replace the hardcoded English tab/section/action labels in
      the sys_user, sys_organization and sys_position detail pages with
      inline i18n label objects, and route the user Security tab through
      record:quick_actions so object action labels localize.
    • service-messaging: new ADR-0029 D8 translation bundle
      (MessagingTranslations) covering the seven sys_* messaging objects
      (inbox message, receipts, deliveries, preferences, subscriptions, templates,
      HTTP deliveries), registered on kernel:ready; zh-CN is fully translated
      and ja-JP/es-ES cover sys_inbox_message (incl. the mine view empty
      state).

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/spec@14.8.0

Minor Changes

  • 16b4bf6: ADR-0087 P1:元数据转换层(conversion layer,D2)——大多数破坏性变更对使用方零操作。

    @objectstack/spec 新增 conversions/ 模块:一张按协议大版本组织、声明式、无损的转换表,在加载时(normalizeStackInput —— defineStack / objectstack validate / lint / info / doctor 共用的同一入口)把旧(N−1)形态的元数据改写为规范的 N 形态,并对每处改写发出结构化弃用通知(OS_METADATA_CONVERTED)。使用方仍按旧形态编写也能零操作加载,运行时只会看到规范形态。这是把 Kubernetes storage-version/conversion 模型套用到元数据上;它与 Prime Directive Add comprehensive test suite for Zod schema validation #12 禁止的“使用方侧方言兜底”在每个维度上都相反:一张集中、随 spec 版本化、声明化、显式(每次应用都发通知)、带测试(每条附 old→new fixture)、会过期(仅在一个大版本内加载期生效,之后退役并沉淀进 P2 迁移链)的表,而非散落的 cfg.a ?? cfg.b

    首批以已发布的 protocol 11 重命名回填播种:

    • flow-node-http-callout-rename:流程回调节点 http_request / http_call / webhookhttp
    • page-kind-jsx-to-html:页面 kind: 'jsx''html'(ADR-0080 规范拼写)。
    • flow-node-crud-filter-alias:CRUD 流程节点 config.filtersconfig.filter

    运行时加载 seam(存量流程零回归的关键)。 转换不仅接在构建/校验入口,也接到运行时 AutomationEngine.registerFlow(在 FlowSchema.parse 之前跑,新增 applyConversionsToFlow)。这样从数据库 rehydrate 的存量流程也会被规范化——否则删掉 filters 执行器兜底会让存量 delete_record / update_record 的过滤条件被静默清空(退化成作用于全表)。这才真正兑现 D2 “applied at load, the same seam”。

    开放命名空间的冲突守卫(第三方零静默误伤)。 flow.node.type 是开放命名空间(ADR-0018 移除了 enum gate),退役的官方名可能被第三方复用为自定义节点。转换层新增“保留名冲突”感知:运行时 seam 传入本环境已注册的执行器类型,若某退役别名(http_request/http_call/webhook)正被活的自定义执行器占用,则拒绝改写并发出响亮的结构化告警 OS_METADATA_CONVERSION_CONFLICT(带节点位置、conversion id、“请改名”的处置建议),而不是静默把它改成 http 破坏第三方节点。构建/校验入口无注册表上下文,历史别名照常转换。

    并落实 PD Add comprehensive test suite for Zod schema validation #12 退役路径示范:filtersfilter 别名从 service-automation 执行器的 readAliasedConfig 兜底中删除,提升为上面这条声明式转换条目;执行器改为直接读取规范键 cfg.filter

    新增导出(纯增量,无破坏):applyConversionsapplyConversionsToFlowcollectConversionNoticesALL_CONVERSIONSCONVERSIONS_BY_MAJORCONVERSION_NOTICE_CODECONVERSION_CONFLICT_CODE,以及类型 MetadataConversionConversionNoticeConversionApplicationConversionFixtureConversionContextConversionConflictNoticeConversionConflictDetailApplyConversionsOptionsNormalizeStackInputOptionsnormalizeStackInput 现接受可选第二参 { onConversionNotice, convert }(向后兼容)。

  • 16b4bf6: ADR-0087 P2:可重放迁移链 + 机器可读变更清单(D3 / D4)。

    D3 —— 迁移链(@objectstack/spec 新增 migrations/)。 一条永久、有序、按协议大版本组织的迁移链。每个大版本的步骤由两个来源合成:已毕业的转换(P1 的 D2 转换条目从加载路径退役后,以其 id 引用复用,作为该大版本的“机械变换”,转换与 fixture 不重复)和语义变更(无损映射无法表达的破坏,以结构化 TODO —— surface / 原因 / 验收标准 —— 呈现,而非静默或有损自动改写)。

    • applyMetaMigrations(stack, fromMajor, toMajor?) 折叠 fromMajor+1 … 当前 的步骤,一次性把任意历史大版本的元数据迁到当前;跨大版本是设计主场景。每一跳(hop)都做检查点,便于逐跳验证与二分定位。时效性从不承重 —— 迟到的使用方到达时重放链即可。
    • composeMigrationChainMigrationFloorError,以及显式的发布策略旋钮 MIGRATION_SUPPORT_FLOOR(链能回溯到多久)。
    • 种子:protocol 11 步骤 —— 机械项为三条已毕业的 P1 转换;语义项为两个真实存量窗口:titleFormat 复合模板 → nameField(需公式字段,非无损)、SQL 式 RLS 谓词 → 规范 CEL。
    • CI 把整条链当作链来测:每条转换的 old-shape fixture 从支持下限重放到目标大版本,组合性破坏即发布阻断。

    D4 —— spec-changes.json 变更清单。 Zod 定义的机器可读记录 { from, to, added, converted, migrated, removed },由 composeSpecChanges(from, to, surfaceDiff?) 跨大版本折叠转换表(D2)与迁移集(D3),并与发布期 api-surface 差异连接。按大版本的清单可组合成单一 from→to 视图;后续生成式升级指南与 P3 的 MCP spec_changes 工具都是它的投影。

    CLI —— objectstack migrate meta --from N 重放迁移链:展示生成的、经 ObjectStackDefinitionSchema 校验的机械变更 diff(逐条 path: 旧 → 新)与需人工判断的语义 TODO;--to--step(逐跳检查点)、--out <file.json>(把规范化后的栈写为可 diff 的 JSON 快照)、--json。命令不静默改写 TS 配置源(AST 改写不安全且有损)—— 输出供使用方 agent 审阅采纳,这正是握手错误(P0)所指向的命令。

    normalizeStackInput 新增可选 convert: false(仅做 map→array,不跑 D2 转换),供 migrate meta 对原始编写源重放链、把每处改写归因到对应链步。新增导出纯增量,无破坏性移除。

  • 10e8983: ADR-0089: unify the conditional-visibility predicate under one canonical key, visibleWhen, across every layer (data field, view form section/field, page component). This aligns visibility with the existing readonlyWhen / requiredWhen family and the conditionalRequired → requiredWhen precedent.

    Canonical key: visibleWhen — a CEL predicate; the element is shown only when it is TRUE. The binding root is still set by the layer: runtime record forms and pages bind record + current_user (pages also expose page.<var>); metadata-editing forms (*.form.ts) bind data.

    Deprecated aliases (still accepted): the view key visibleOn and the page key visibility are now @deprecated. Both are folded into visibleWhen once, at the schema boundary (a zod .transform()), so consumers only ever read visibleWhen. When both a canonical and an alias key are present, the canonical wins.

    Migration (L1 — no consumer action required; existing metadata keeps working):

    • View form section/field: visibleOn: "<cel>"visibleWhen: "<cel>"
    • Page component: visibility: "<cel>"visibleWhen: "<cel>"
    • Data field / field option: already visibleWhen — unchanged.

    Out of scope (unchanged): the boolean visible (Tab on/off), field hidden, gallery visibleFields, and unrelated visibility enums (feed / package / environment / agent). Aliases remain for the standard deprecation window and are removed in a future major.

  • bb71321: i18n: translate the system account/messaging surfaces end to end.

    • spec: ObjectTranslationDataSchema / ObjectTranslationNodeSchema now
      accept _views.<view>.emptyState.{title,message} so list-view empty states
      are translatable (contract-first for the extractor below).
    • cli: os i18n extract emits _views.<view>.emptyState keys when a view
      declares an empty state.
    • platform-objects: fill every missing zh-CN/ja-JP/es-ES translation for
      sys_user, sys_organization and sys_business_unit (fields, options,
      views, actions); replace the hardcoded English tab/section/action labels in
      the sys_user, sys_organization and sys_position detail pages with
      inline i18n label objects, and route the user Security tab through
      record:quick_actions so object action labels localize.
    • service-messaging: new ADR-0029 D8 translation bundle
      (MessagingTranslations) covering the seven sys_* messaging objects
      (inbox message, receipts, deliveries, preferences, subscriptions, templates,
      HTTP deliveries), registered on kernel:ready; zh-CN is fully translated
      and ja-JP/es-ES cover sys_inbox_message (incl. the mine view empty
      state).

Patch Changes

  • 607aaf4: 导出文件名本地化 + 系统字段标签内置多语言回退。

    @objectstack/rest — 导出下载文件名:GET /data/:object/exportContent-Disposition 不再是裸的 <对象名>.<扩展名>,改为「对象显示名-时间戳」:ASCII 兜底用 API 名(filename="contracts-20260714-153045.xlsx"),本地化标签(如中文)按 RFC 5987/6266 编码进 filename*=UTF-8''…(浏览器直接下载得到 合同-20260714-153045.xlsx)。新增导出 exportContentDisposition(objectName, label, ext, now?)

    @objectstack/spec — 系统字段标签回退:ObjectQL 注册表给每个对象注入的系统字段(owner_id/created_at/created_by/updated_at/updated_by)只带英文标签,自定义对象又没有对应的翻译条目,导致中文界面的列表表头、导出文件、导入模板里漏出 "Owner"/"Created At" 等英文。translateObject 现内置这五个字段的 en/zh-CN/ja-JP/es-ES 标签表(措辞与平台生成的翻译包一致),仅当字段仍是注入的英文默认值时套用——作者自定义的标签绝不覆盖;无翻译包时也生效(translateObject 不再因缺 bundle 而提前返回,REST 元数据翻译路径同步放宽,缓存 ETag 本就按 locale 分键,无缓存串味风险)。

    @objectstack/plugin-reports — 附件文件名:定时报表附件的文件名清洗从「非 ASCII 全部替换成 _」改为按 Unicode 字母/数字保留(\p{L}\p{N}),中文计划名不再变成一串下划线。

    @objectstack/rest — 导入接受翻译后的选项标签(导出 ↔ 导入闭环):导出与导入模板写出的是翻译后的选项标签(如 待规划),但导入强制转换只认作者原始 schema 的标签/值,导致用户把自己刚导出的本地化文件原样导回时 select 字段全部报 invalid_optionprepareImportRequest 新增 localizeSchema 钩子(REST 导入路由传入 translateMetaItem),把当前 locale 的翻译标签合并进字段选项作为匹配同义词——作者标签与选项 code 照常匹配,非法值照常报错,翻译失败时降级为仅作者标签匹配。新增导出 mergeLocalizedOptionSynonyms(metaMap, localizedMetaMap)

@objectstack/hono@14.8.0

Patch Changes

  • @objectstack/plugin-hono-server@14.8.0
  • @objectstack/runtime@14.8.0
  • @objectstack/types@14.8.0

@objectstack/account@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0

@objectstack/setup@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0

@objectstack/studio@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0

@objectstack/client@14.8.0

Patch Changes

  • e46169c: 面向最终用户的错误消息去掉调试噪音:REST 数据路由(mapDataError)对沙箱 hook/action 抛错解包 SandboxError.innerMessage(并对丢失实例的情况正则剥离 hook 'x' threw: Error: 包装,保留 TypeError: 等非默认错误名);客户端 SDK 的 error.message 不再拼 [ObjectStack] CODE: 前缀(code 仍在 error.code 上可编程读取)。控制台报错 toast 从 [ObjectStack] hook 'pm_ref_base' threw: Error: 制作基地被… 变为只显示业务消息本身;完整调试包装仍写入服务端日志。
  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/client-react@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [e46169c]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/client@14.8.0
    • @objectstack/core@14.8.0

@objectstack/cloud-connection@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/runtime@14.8.0
    • @objectstack/types@14.8.0

@objectstack/connector-mcp@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/connector-openapi@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/connector-rest@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/connector-slack@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/console@14.8.0

Patch Changes

@objectstack/core@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0

create-objectstack@14.8.0

Patch Changes

  • eaff014: Scaffolded projects now install the current framework release instead of a stale major. The bundled blank template had ^6.0.0 ranges frozen in while the registry was publishing 14.x, so npm create objectstack produced a project eight majors behind the docs — and the template's code no longer compiled against 14.x anyway (Field.longText removed, api.rest no longer a defineStack key, sharingModel now required by the ADR-0090 security gate). The template is updated to the current API, and the scaffolder now rewrites every @objectstack/* range in the generated package.json to ^<its own version> (all packages version in lockstep), so generated projects track the release even if the committed template drifts again. A consistency test ratchets the template's major and the README's template table against the registry. The template README also documents the seeded dev-admin sign-in that data-API curls need.

@objectstack/formula@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0

@objectstack/mcp@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/types@14.8.0

@objectstack/metadata@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/metadata-core@14.8.0
    • @objectstack/types@14.8.0
    • @objectstack/metadata-fs@14.8.0

@objectstack/metadata-core@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0

@objectstack/metadata-fs@14.8.0

Patch Changes

  • @objectstack/metadata-core@14.8.0

@objectstack/objectql@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [1dede32]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/metadata-protocol@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0
    • @objectstack/metadata-core@14.8.0
    • @objectstack/types@14.8.0

@objectstack/observability@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0

@objectstack/platform-objects@14.8.0

Patch Changes

  • bb71321: i18n: translate the system account/messaging surfaces end to end.

    • spec: ObjectTranslationDataSchema / ObjectTranslationNodeSchema now
      accept _views.<view>.emptyState.{title,message} so list-view empty states
      are translatable (contract-first for the extractor below).
    • cli: os i18n extract emits _views.<view>.emptyState keys when a view
      declares an empty state.
    • platform-objects: fill every missing zh-CN/ja-JP/es-ES translation for
      sys_user, sys_organization and sys_business_unit (fields, options,
      views, actions); replace the hardcoded English tab/section/action labels in
      the sys_user, sys_organization and sys_position detail pages with
      inline i18n label objects, and route the user Security tab through
      record:quick_actions so object action labels localize.
    • service-messaging: new ADR-0029 D8 translation bundle
      (MessagingTranslations) covering the seven sys_* messaging objects
      (inbox message, receipts, deliveries, preferences, subscriptions, templates,
      HTTP deliveries), registered on kernel:ready; zh-CN is fully translated
      and ja-JP/es-ES cover sys_inbox_message (incl. the mine view empty
      state).
  • Updated dependencies [16b4bf6]

  • Updated dependencies [16b4bf6]

  • Updated dependencies [10e8983]

  • Updated dependencies [607aaf4]

  • Updated dependencies [bb71321]

    • @objectstack/spec@14.8.0
    • @objectstack/metadata-core@14.8.0

@objectstack/driver-memory@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/driver-mongodb@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/driver-sql@14.8.0

Patch Changes

  • 84650c5: Log a concise one-liner instead of the full ERR_DLOPEN_FAILED stack trace when native better-sqlite3 cannot load (an ABI / NODE_MODULE_VERSION mismatch after a Node upgrade, or the native addon was never built). The native → wasm SQLite step-down is unchanged — this only stops a handled, non-fatal fallback from reading like a fatal crash in the dev console, and points at pnpm rebuild better-sqlite3 for native speed. Any other PRAGMA failure keeps its full warning.
  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/types@14.8.0

@objectstack/driver-sqlite-wasm@14.8.0

Patch Changes

  • a199626: Harden the wasm SQLite driver (the dev fallback used when native better-sqlite3 has an ABI mismatch) against three failure modes that spammed pnpm dev:

    • Atomic flushes. The database was persisted with a plain writeFile that truncates-then-streams in place, so a process killed mid-write (a dev-server restart, Ctrl-C, or crash — likely under on-write, where every dispatcher tick flushes) left a torn file that sql.js rejected on the next boot with database disk image is malformed. Flushes now write to a sibling temp file, fsync, and atomically rename() over the target, so a reader always sees a complete image.
    • Corruption self-heal. When an on-disk image is already corrupt, the driver now detects it at open (via PRAGMA quick_check), quarantines the bad file to <db>.corrupt-<timestamp>, and boots on a fresh database — instead of failing every query forever with no path to recovery.
    • undefined bindings. A raw undefined binding made sql.js throw a plain string (Wrong API use : tried to bind a value of an unknown type (undefined).), which aborted the write and logged as a garbled char-indexed object. undefined is now coerced to SQL NULL, matching the driver's useNullAsDefault semantics and the native better-sqlite3 path.
  • Updated dependencies [16b4bf6]

  • Updated dependencies [16b4bf6]

  • Updated dependencies [10e8983]

  • Updated dependencies [84650c5]

  • Updated dependencies [607aaf4]

  • Updated dependencies [bb71321]

    • @objectstack/spec@14.8.0
    • @objectstack/driver-sql@14.8.0
    • @objectstack/core@14.8.0

@objectstack/embedder-openai@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0

@objectstack/knowledge-memory@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/service-knowledge@14.8.0

@objectstack/knowledge-ragflow@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/service-knowledge@14.8.0

@objectstack/plugin-approvals@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0
    • @objectstack/metadata-core@14.8.0

@objectstack/plugin-audit@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0

@objectstack/plugin-auth@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [e46169c]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/rest@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/types@14.8.0

@objectstack/plugin-dev@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [a199626]
  • Updated dependencies [607aaf4]
  • Updated dependencies [e46169c]
  • Updated dependencies [f0acf25]
  • Updated dependencies [712328a]
  • Updated dependencies [1dede32]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/plugin-security@14.8.0
    • @objectstack/rest@14.8.0
    • @objectstack/account@14.8.0
    • @objectstack/setup@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/objectql@14.8.0
    • @objectstack/driver-memory@14.8.0
    • @objectstack/plugin-auth@14.8.0
    • @objectstack/plugin-hono-server@14.8.0
    • @objectstack/runtime@14.8.0
    • @objectstack/service-i18n@14.8.0
    • @objectstack/types@14.8.0

@objectstack/plugin-email@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0

@objectstack/plugin-hono-server@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/observability@14.8.0
    • @objectstack/types@14.8.0

@objectstack/plugin-reports@14.8.0

Patch Changes

  • 607aaf4: 导出文件名本地化 + 系统字段标签内置多语言回退。

    @objectstack/rest — 导出下载文件名:GET /data/:object/exportContent-Disposition 不再是裸的 <对象名>.<扩展名>,改为「对象显示名-时间戳」:ASCII 兜底用 API 名(filename="contracts-20260714-153045.xlsx"),本地化标签(如中文)按 RFC 5987/6266 编码进 filename*=UTF-8''…(浏览器直接下载得到 合同-20260714-153045.xlsx)。新增导出 exportContentDisposition(objectName, label, ext, now?)

    @objectstack/spec — 系统字段标签回退:ObjectQL 注册表给每个对象注入的系统字段(owner_id/created_at/created_by/updated_at/updated_by)只带英文标签,自定义对象又没有对应的翻译条目,导致中文界面的列表表头、导出文件、导入模板里漏出 "Owner"/"Created At" 等英文。translateObject 现内置这五个字段的 en/zh-CN/ja-JP/es-ES 标签表(措辞与平台生成的翻译包一致),仅当字段仍是注入的英文默认值时套用——作者自定义的标签绝不覆盖;无翻译包时也生效(translateObject 不再因缺 bundle 而提前返回,REST 元数据翻译路径同步放宽,缓存 ETag 本就按 locale 分键,无缓存串味风险)。

    @objectstack/plugin-reports — 附件文件名:定时报表附件的文件名清洗从「非 ASCII 全部替换成 _」改为按 Unicode 字母/数字保留(\p{L}\p{N}),中文计划名不再变成一串下划线。

    @objectstack/rest — 导入接受翻译后的选项标签(导出 ↔ 导入闭环):导出与导入模板写出的是翻译后的选项标签(如 待规划),但导入强制转换只认作者原始 schema 的标签/值,导致用户把自己刚导出的本地化文件原样导回时 select 字段全部报 invalid_optionprepareImportRequest 新增 localizeSchema 钩子(REST 导入路由传入 translateMetaItem),把当前 locale 的翻译标签合并进字段选项作为匹配同义词——作者标签与选项 code 照常匹配,非法值照常报错,翻译失败时降级为仅作者标签匹配。新增导出 mergeLocalizedOptionSynonyms(metaMap, localizedMetaMap)

  • Updated dependencies [16b4bf6]

  • Updated dependencies [16b4bf6]

  • Updated dependencies [10e8983]

  • Updated dependencies [607aaf4]

  • Updated dependencies [bb71321]

    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0

@objectstack/plugin-sharing@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0
    • @objectstack/objectql@14.8.0

@objectstack/plugin-webhooks@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/service-messaging@14.8.0
    • @objectstack/core@14.8.0

@objectstack/rest@14.8.0

Patch Changes

  • 607aaf4: 导出文件名本地化 + 系统字段标签内置多语言回退。

    @objectstack/rest — 导出下载文件名:GET /data/:object/exportContent-Disposition 不再是裸的 <对象名>.<扩展名>,改为「对象显示名-时间戳」:ASCII 兜底用 API 名(filename="contracts-20260714-153045.xlsx"),本地化标签(如中文)按 RFC 5987/6266 编码进 filename*=UTF-8''…(浏览器直接下载得到 合同-20260714-153045.xlsx)。新增导出 exportContentDisposition(objectName, label, ext, now?)

    @objectstack/spec — 系统字段标签回退:ObjectQL 注册表给每个对象注入的系统字段(owner_id/created_at/created_by/updated_at/updated_by)只带英文标签,自定义对象又没有对应的翻译条目,导致中文界面的列表表头、导出文件、导入模板里漏出 "Owner"/"Created At" 等英文。translateObject 现内置这五个字段的 en/zh-CN/ja-JP/es-ES 标签表(措辞与平台生成的翻译包一致),仅当字段仍是注入的英文默认值时套用——作者自定义的标签绝不覆盖;无翻译包时也生效(translateObject 不再因缺 bundle 而提前返回,REST 元数据翻译路径同步放宽,缓存 ETag 本就按 locale 分键,无缓存串味风险)。

    @objectstack/plugin-reports — 附件文件名:定时报表附件的文件名清洗从「非 ASCII 全部替换成 _」改为按 Unicode 字母/数字保留(\p{L}\p{N}),中文计划名不再变成一串下划线。

    @objectstack/rest — 导入接受翻译后的选项标签(导出 ↔ 导入闭环):导出与导入模板写出的是翻译后的选项标签(如 待规划),但导入强制转换只认作者原始 schema 的标签/值,导致用户把自己刚导出的本地化文件原样导回时 select 字段全部报 invalid_optionprepareImportRequest 新增 localizeSchema 钩子(REST 导入路由传入 translateMetaItem),把当前 locale 的翻译标签合并进字段选项作为匹配同义词——作者标签与选项 code 照常匹配,非法值照常报错,翻译失败时降级为仅作者标签匹配。新增导出 mergeLocalizedOptionSynonyms(metaMap, localizedMetaMap)

  • e46169c: 面向最终用户的错误消息去掉调试噪音:REST 数据路由(mapDataError)对沙箱 hook/action 抛错解包 SandboxError.innerMessage(并对丢失实例的情况正则剥离 hook 'x' threw: Error: 包装,保留 TypeError: 等非默认错误名);客户端 SDK 的 error.message 不再拼 [ObjectStack] CODE: 前缀(code 仍在 error.code 上可编程读取)。控制台报错 toast 从 [ObjectStack] hook 'pm_ref_base' threw: Error: 制作基地被… 变为只显示业务消息本身;完整调试包装仍写入服务端日志。

  • Updated dependencies [16b4bf6]

  • Updated dependencies [16b4bf6]

  • Updated dependencies [10e8983]

  • Updated dependencies [607aaf4]

  • Updated dependencies [bb71321]

    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/service-package@14.8.0
    • @objectstack/types@14.8.0

@objectstack/runtime@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [a199626]
  • Updated dependencies [84650c5]
  • Updated dependencies [607aaf4]
  • Updated dependencies [e46169c]
  • Updated dependencies [f0acf25]
  • Updated dependencies [712328a]
  • Updated dependencies [1dede32]
  • Updated dependencies [bb71321]
  • Updated dependencies [a199626]
    • @objectstack/spec@14.8.0
    • @objectstack/plugin-security@14.8.0
    • @objectstack/driver-sql@14.8.0
    • @objectstack/rest@14.8.0
    • @objectstack/driver-sqlite-wasm@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/formula@14.8.0
    • @objectstack/metadata@14.8.0
    • @objectstack/objectql@14.8.0
    • @objectstack/observability@14.8.0
    • @objectstack/driver-memory@14.8.0
    • @objectstack/plugin-auth@14.8.0
    • @objectstack/service-cluster@14.8.0
    • @objectstack/service-datasource@14.8.0
    • @objectstack/service-i18n@14.8.0
    • @objectstack/types@14.8.0

@objectstack/service-analytics@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-cache@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/observability@14.8.0

@objectstack/service-cluster@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-cluster-redis@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/service-cluster@14.8.0

@objectstack/service-datasource@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-i18n@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-job@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-knowledge@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-package@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-queue@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-realtime@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-settings@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/types@14.8.0

@objectstack/service-sms@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/service-storage@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/platform-objects@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/observability@14.8.0

@objectstack/trigger-api@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/trigger-record-change@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/trigger-schedule@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/core@14.8.0

@objectstack/types@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0

@objectstack/verify@14.8.0

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [a199626]
  • Updated dependencies [607aaf4]
  • Updated dependencies [e46169c]
  • Updated dependencies [f0acf25]
  • Updated dependencies [712328a]
  • Updated dependencies [1dede32]
  • Updated dependencies [bb71321]
  • Updated dependencies [a199626]
    • @objectstack/spec@14.8.0
    • @objectstack/service-automation@14.8.0
    • @objectstack/plugin-security@14.8.0
    • @objectstack/rest@14.8.0
    • @objectstack/driver-sqlite-wasm@14.8.0
    • @objectstack/core@14.8.0
    • @objectstack/objectql@14.8.0
    • @objectstack/plugin-auth@14.8.0
    • @objectstack/plugin-hono-server@14.8.0
    • @objectstack/plugin-sharing@14.8.0
    • @objectstack/runtime@14.8.0
    • @objectstack/service-analytics@14.8.0
    • @objectstack/service-datasource@14.8.0
    • @objectstack/service-settings@14.8.0

@objectstack/sdui-parser@14.8.0

objectstack-vscode@14.8.0

@objectstack/example-crm@4.0.86

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/runtime@14.8.0

@objectstack/example-showcase@0.3.8

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [84650c5]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/driver-sql@14.8.0
    • @objectstack/cloud-connection@14.8.0
    • @objectstack/connector-rest@14.8.0
    • @objectstack/connector-slack@14.8.0
    • @objectstack/runtime@14.8.0
    • @objectstack/service-datasource@14.8.0

@objectstack/example-todo@4.0.86

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [e46169c]
  • Updated dependencies [bb71321]
  • Updated dependencies [a199626]
    • @objectstack/spec@14.8.0
    • @objectstack/client@14.8.0
    • @objectstack/driver-sqlite-wasm@14.8.0
    • @objectstack/mcp@14.8.0
    • @objectstack/metadata@14.8.0
    • @objectstack/objectql@14.8.0
    • @objectstack/knowledge-memory@14.8.0
    • @objectstack/runtime@14.8.0
    • @objectstack/service-knowledge@14.8.0

@objectstack/example-embed-objectql@0.0.26

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/objectql@14.8.0
    • @objectstack/driver-memory@14.8.0

@objectstack/dogfood@0.0.34

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [a199626]
  • Updated dependencies [607aaf4]
  • Updated dependencies [f0acf25]
  • Updated dependencies [712328a]
  • Updated dependencies [1dede32]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0
    • @objectstack/plugin-security@14.8.0
    • @objectstack/example-crm@4.0.86
    • @objectstack/example-showcase@0.3.8
    • @objectstack/objectql@14.8.0
    • @objectstack/plugin-auth@14.8.0
    • @objectstack/verify@14.8.0

@objectstack/downstream-contract@0.0.32

Patch Changes

  • Updated dependencies [16b4bf6]
  • Updated dependencies [16b4bf6]
  • Updated dependencies [10e8983]
  • Updated dependencies [607aaf4]
  • Updated dependencies [bb71321]
    • @objectstack/spec@14.8.0

@vercel

vercel Bot commented Jul 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 14, 2026 3:26pm

Request Review

@github-actions github-actions Bot force-pushed the changeset-release/main branch from 000ff13 to 2a75517 Compare July 14, 2026 05:33
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 2a75517 to e0a0126 Compare July 14, 2026 06:45
@github-actions github-actions Bot force-pushed the changeset-release/main branch from e0a0126 to 32b3d81 Compare July 14, 2026 07:45
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 32b3d81 to c8b1370 Compare July 14, 2026 09:00
@github-actions github-actions Bot force-pushed the changeset-release/main branch from c8b1370 to 7cc5a29 Compare July 14, 2026 09:59
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 7cc5a29 to c7c3c8b Compare July 14, 2026 10:09
@github-actions github-actions Bot force-pushed the changeset-release/main branch from c7c3c8b to 870d33f Compare July 14, 2026 11:02
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 870d33f to ca387da Compare July 14, 2026 11:11
@github-actions github-actions Bot force-pushed the changeset-release/main branch from ca387da to d8615b8 Compare July 14, 2026 11:49
@github-actions github-actions Bot force-pushed the changeset-release/main branch from d8615b8 to 6ca3059 Compare July 14, 2026 12:04
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 6ca3059 to b87fb6b Compare July 14, 2026 12:36
@github-actions github-actions Bot force-pushed the changeset-release/main branch from b87fb6b to 5d449c9 Compare July 14, 2026 14:00
@github-actions github-actions Bot force-pushed the changeset-release/main branch 2 times, most recently from 2a98d9a to 86f5d8d Compare July 14, 2026 14:19
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 86f5d8d to 52121a9 Compare July 14, 2026 14:27
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 37b1ae5 to 7e8096d Compare July 14, 2026 15:11
@os-zhuang os-zhuang merged commit 77d9618 into main Jul 14, 2026
1 of 2 checks passed
@os-zhuang os-zhuang deleted the changeset-release/main branch July 14, 2026 15:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant