diff --git a/.changeset/pre.json b/.changeset/pre.json index 4276dfca13..2c26439e89 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -83,6 +83,7 @@ "changesets": [ "action-body-org-identifier", "action-param-widget-config", + "action-result-dialog-i18n", "adr-0097-openapi-upstream-classify", "adr-0099-p0-equivalence-gate", "adr-0099-p1-layer0-reads-rung", @@ -90,6 +91,8 @@ "adr-0103-managedby-write-policy", "analytics-drill-raw-totals", "annotate-schema-only-enums", + "approvals-decision-attachments", + "approvals-viewer-can-act", "approver-type-org-membership-level", "automation-schema-resolver-e2e", "betterauth-adapter-system-writes", @@ -100,8 +103,12 @@ "cli-turso-loud-error", "client-batch-transaction-sdk", "collapse-hook-event-taxonomy", + "console-0318118e02fd", "console-2e7d7f0f7ee7", + "console-3b2e4d98d904", + "console-69fa5d163a97", "console-94d4876df090", + "console-af1b0db96e44", "console-e164196801bd", "console-fd45313b4d00", "create-user-result-dialog-phone", @@ -110,6 +117,7 @@ "date-equality-runtime-fix", "date-field-equality-guardrail", "dev-loop-dx-p2", + "discovery-transactional-batch-capability", "document-validation-governance-crossfield", "drill-range-datetime-tz", "driver-sql-sqlite3-peer", @@ -117,19 +125,26 @@ "fix-explain-ownership-values", "flow-registration-schema-aware-validation", "flow-trigger-observability", + "formula-null-guard-floor-date-arith-3306", "hook-nested-write-timeout", "i18n-inline-label-default-locale", "import-users-auto-policy", + "keyvalue-node-config-schemas", "lint-hide-platform-baseline", + "localize-collab-notifications-and-storage-objects", "logger-esm-file-destination", "logger-honors-no-color", "loop-collection-xexpression", + "managed-deny-registry-drift", + "managedby-engine-owned-bucket", + "map-node-config-schema", "mcp-dev-connect-hint", "mcp-stdio-principal-admission", "mcp-stdio-switch-split-and-dev-connect-hint", "mcp-validate-expression-tool", "metadata-list-package-aware-dedup", "metadata-register-notifies-watchers", + "objectql-checkboxes-option-gating", "ownership-record-model-field", "perf-timing-admin-detail", "perf-timing-per-request-gating", @@ -138,6 +153,7 @@ "reconcile-system-append-only-api-methods", "region-aware-history-compaction", "remove-agent-visibility", + "remove-capability-aliases-3308", "remove-dead-metadata-props-2377", "remove-form-surfaced-dead-props-2377", "remove-session-tenantid-alias", diff --git a/examples/app-crm/CHANGELOG.md b/examples/app-crm/CHANGELOG.md index 01612fa52a..38dd167d4f 100644 --- a/examples/app-crm/CHANGELOG.md +++ b/examples/app-crm/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/example-crm +## 4.0.90-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [ee0a499] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/runtime@16.0.0-rc.1 + ## 4.0.90-rc.0 ### Patch Changes diff --git a/examples/app-crm/package.json b/examples/app-crm/package.json index 47857d5169..03a1261b1e 100644 --- a/examples/app-crm/package.json +++ b/examples/app-crm/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-crm", - "version": "4.0.90-rc.0", + "version": "4.0.90-rc.1", "description": "Minimal CRM example — a smoke-test workspace that exercises the metadata loading pipeline (objects → views → app → dashboard → hook → flow → seed). For a full-featured enterprise CRM see https://github.com/objectstack-ai/hotcrm.", "license": "Apache-2.0", "private": true, diff --git a/examples/app-showcase/CHANGELOG.md b/examples/app-showcase/CHANGELOG.md index 80cbaa93a6..20c3f0d2c4 100644 --- a/examples/app-showcase/CHANGELOG.md +++ b/examples/app-showcase/CHANGELOG.md @@ -1,5 +1,25 @@ # @objectstack/example-showcase +## 0.3.12-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [ee0a499] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/runtime@16.0.0-rc.1 + - @objectstack/cloud-connection@16.0.0-rc.1 + - @objectstack/connector-mcp@16.0.0-rc.1 + - @objectstack/connector-openapi@16.0.0-rc.1 + - @objectstack/connector-rest@16.0.0-rc.1 + - @objectstack/connector-slack@16.0.0-rc.1 + - @objectstack/driver-sql@16.0.0-rc.1 + - @objectstack/service-datasource@16.0.0-rc.1 + ## 0.3.12-rc.0 ### Patch Changes diff --git a/examples/app-showcase/package.json b/examples/app-showcase/package.json index 81eb3fbcf8..5f61141048 100644 --- a/examples/app-showcase/package.json +++ b/examples/app-showcase/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-showcase", - "version": "0.3.12-rc.0", + "version": "0.3.12-rc.1", "description": "Kitchen-sink showcase workspace — exercises every metadata type, every view type, every chart type, and the major end-to-end capability chains (security, automation, analytics). Built for demonstration, debugging, and coverage-driven verification.", "license": "Apache-2.0", "private": true, diff --git a/examples/app-todo/CHANGELOG.md b/examples/app-todo/CHANGELOG.md index 432feb28cd..b802b98e52 100644 --- a/examples/app-todo/CHANGELOG.md +++ b/examples/app-todo/CHANGELOG.md @@ -1,5 +1,26 @@ # @objectstack/example-todo +## 4.0.90-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [ee0a499] +- Updated dependencies [62a2117] +- Updated dependencies [674457a] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/client@16.0.0-rc.1 + - @objectstack/runtime@16.0.0-rc.1 + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/mcp@16.0.0-rc.1 + - @objectstack/metadata@16.0.0-rc.1 + - @objectstack/driver-sqlite-wasm@16.0.0-rc.1 + - @objectstack/knowledge-memory@16.0.0-rc.1 + - @objectstack/service-knowledge@16.0.0-rc.1 + ## 4.0.90-rc.0 ### Patch Changes diff --git a/examples/app-todo/package.json b/examples/app-todo/package.json index e8145520b6..4ed00d939a 100644 --- a/examples/app-todo/package.json +++ b/examples/app-todo/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-todo", - "version": "4.0.90-rc.0", + "version": "4.0.90-rc.1", "description": "Example Todo App using ObjectStack Protocol", "license": "Apache-2.0", "private": true, diff --git a/examples/embed-objectql/CHANGELOG.md b/examples/embed-objectql/CHANGELOG.md index 4002928588..3945845c81 100644 --- a/examples/embed-objectql/CHANGELOG.md +++ b/examples/embed-objectql/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/example-embed-objectql +## 0.0.30-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [674457a] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/driver-memory@16.0.0-rc.1 + ## 0.0.30-rc.0 ### Patch Changes diff --git a/examples/embed-objectql/package.json b/examples/embed-objectql/package.json index b29e003efd..e680aeb067 100644 --- a/examples/embed-objectql/package.json +++ b/examples/embed-objectql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-embed-objectql", - "version": "0.0.30-rc.0", + "version": "0.0.30-rc.1", "private": true, "description": "Embed the ObjectQL engine as a plain library via @objectstack/objectql/core — no kernel, no plugins, no metadata protocol (ADR-0076).", "type": "module", diff --git a/packages/adapters/hono/CHANGELOG.md b/packages/adapters/hono/CHANGELOG.md index 32d5845e68..e25eb13b77 100644 --- a/packages/adapters/hono/CHANGELOG.md +++ b/packages/adapters/hono/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/hono +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [bfa3c3f] +- Updated dependencies [ee0a499] +- Updated dependencies [62a2117] + - @objectstack/plugin-hono-server@16.0.0-rc.1 + - @objectstack/runtime@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/adapters/hono/package.json b/packages/adapters/hono/package.json index d918d1624f..b1ede15e62 100644 --- a/packages/adapters/hono/package.json +++ b/packages/adapters/hono/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/hono", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apps/account/CHANGELOG.md b/packages/apps/account/CHANGELOG.md index 996349352c..050bfa9390 100644 --- a/packages/apps/account/CHANGELOG.md +++ b/packages/apps/account/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/account +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/apps/account/package.json b/packages/apps/account/package.json index 373e8362fb..a2cd02034d 100644 --- a/packages/apps/account/package.json +++ b/packages/apps/account/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/account", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack Account — the end-user account/self-service console app, packaged as its own ObjectStack app package (ADR-0048: one app per package).", "main": "dist/index.js", diff --git a/packages/apps/setup/CHANGELOG.md b/packages/apps/setup/CHANGELOG.md index 323f9b6621..6704fc9ab0 100644 --- a/packages/apps/setup/CHANGELOG.md +++ b/packages/apps/setup/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/setup +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/apps/setup/package.json b/packages/apps/setup/package.json index 37e4c3bc59..6fbe625ae0 100644 --- a/packages/apps/setup/package.json +++ b/packages/apps/setup/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/setup", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack Setup — the platform administration app, packaged as its own ObjectStack app package (ADR-0048: one app per package).", "main": "dist/index.js", diff --git a/packages/apps/studio/CHANGELOG.md b/packages/apps/studio/CHANGELOG.md index 343ccdd079..8162b7d1dc 100644 --- a/packages/apps/studio/CHANGELOG.md +++ b/packages/apps/studio/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/studio +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/apps/studio/package.json b/packages/apps/studio/package.json index 98c235ce67..57cf6778a1 100644 --- a/packages/apps/studio/package.json +++ b/packages/apps/studio/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/studio", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack Studio — the metadata builder app, packaged as its own ObjectStack app package (ADR-0048: one app per package).", "main": "dist/index.js", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 806ffb7aef..d7d9c403e0 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,121 @@ # @objectstack/cli +## 16.0.0-rc.1 + +### Minor Changes + +- 06ff734: feat(spec)!: remove deprecated `aiStudio`/`aiSeat` capability aliases (#3308) + + **BREAKING** (shipped as minor per the launch-window convention). The one-cycle + deprecation window from #3265 is over: the legacy camelCase `requires` spellings + `aiStudio`/`aiSeat` are no longer canonicalized to `ai-studio`/`ai-seat` — they + are now plain unknown tokens, rejected by `defineStack` like any other typo. + + - Removed exports `DEPRECATED_PLATFORM_CAPABILITY_ALIASES` and + `canonicalizePlatformCapability` from `@objectstack/spec`; `isKnownPlatformCapability` + no longer canonicalizes. + - `defineStack` no longer rewrites aliases (the `canonicalizeStackRequires` pass + is gone); the serve resolver no longer canonicalizes raw-artifact `requires`. + + Migration: use the canonical kebab-case tokens `ai-studio` / `ai-seat`. All + first-party configs were migrated in #862/#863; only stacks still carrying the + legacy spelling are affected. Cloud's `objectos-runtime` (pinned to an older + framework) follows on its next `.framework-sha` bump. + +### Patch Changes + +- 6289ec3: feat(i18n): translation slot for action `resultDialog` copy — the one-shot secret-reveal dialogs are now localizable + + The post-success `resultDialog` (temporary passwords, 2FA backup codes, OAuth + client secrets) had no slot in the translation protocol, so its title / + description / acknowledge button / field labels always rendered the hardcoded + English metadata literals even on fully-translated locales. + + - **spec.** `_actions.` (object + object-first node) and + `globalActions.` gain an optional `resultDialog` translation node + (`ActionResultDialogTranslationSchema`): `title`, `description`, + `acknowledge`, and `fields` keyed by the **literal** result-field path + (e.g. `"user.email"` — keys may contain dots; resolvers index the record + directly, never split on `.`). New `resolveActionResultDialog` overlay + resolver, wired into `translateAction` for API-boundary translation. + - **cli.** `os i18n extract` emits the new `resultDialog.*` keys (title / + description / acknowledge / `fields.` for labelled fields), so + coverage and skeleton generation see them. + - **platform-objects.** en / zh-CN / ja-JP / es-ES bundles ship the + resultDialog copy for all six shipped dialogs: `sys_user.create_user`, + `sys_user.set_user_password`, `sys_two_factor.enable_two_factor`, + `sys_two_factor.regenerate_backup_codes`, + `sys_oauth_application.create_oauth_application`, and + `sys_oauth_application.rotate_client_secret`. + + Client-side rendering lands in objectui (`actionResultDialog` resolver in + `@object-ui/i18n` + result-dialog handlers). Purely additive — untranslated + locales keep falling back to the metadata literals. + +- Updated dependencies [6289ec3] +- Updated dependencies [e412fb6] +- Updated dependencies [8efa395] +- Updated dependencies [a276969] +- Updated dependencies [bfa3c3f] +- Updated dependencies [a791200] +- Updated dependencies [1965549] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [b320158] +- Updated dependencies [ee0a499] +- Updated dependencies [9d897b3] +- Updated dependencies [62a2117] +- Updated dependencies [f8c1b69] +- Updated dependencies [674457a] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/plugin-approvals@16.0.0-rc.1 + - @objectstack/console@16.0.0-rc.1 + - @objectstack/rest@16.0.0-rc.1 + - @objectstack/plugin-hono-server@16.0.0-rc.1 + - @objectstack/client@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/service-automation@16.0.0-rc.1 + - @objectstack/plugin-audit@16.0.0-rc.1 + - @objectstack/service-storage@16.0.0-rc.1 + - @objectstack/runtime@16.0.0-rc.1 + - @objectstack/plugin-security@16.0.0-rc.1 + - @objectstack/plugin-sharing@16.0.0-rc.1 + - @objectstack/service-messaging@16.0.0-rc.1 + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/account@16.0.0-rc.1 + - @objectstack/setup@16.0.0-rc.1 + - @objectstack/cloud-connection@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/lint@16.0.0-rc.1 + - @objectstack/mcp@16.0.0-rc.1 + - @objectstack/metadata@16.0.0-rc.1 + - @objectstack/observability@16.0.0-rc.1 + - @objectstack/driver-memory@16.0.0-rc.1 + - @objectstack/driver-mongodb@16.0.0-rc.1 + - @objectstack/driver-sql@16.0.0-rc.1 + - @objectstack/driver-sqlite-wasm@16.0.0-rc.1 + - @objectstack/plugin-auth@16.0.0-rc.1 + - @objectstack/plugin-email@16.0.0-rc.1 + - @objectstack/plugin-reports@16.0.0-rc.1 + - @objectstack/plugin-webhooks@16.0.0-rc.1 + - @objectstack/service-analytics@16.0.0-rc.1 + - @objectstack/service-cache@16.0.0-rc.1 + - @objectstack/service-datasource@16.0.0-rc.1 + - @objectstack/service-job@16.0.0-rc.1 + - @objectstack/service-package@16.0.0-rc.1 + - @objectstack/service-queue@16.0.0-rc.1 + - @objectstack/service-realtime@16.0.0-rc.1 + - @objectstack/service-settings@16.0.0-rc.1 + - @objectstack/service-sms@16.0.0-rc.1 + - @objectstack/trigger-api@16.0.0-rc.1 + - @objectstack/trigger-record-change@16.0.0-rc.1 + - @objectstack/trigger-schedule@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + - @objectstack/verify@16.0.0-rc.1 + - @objectstack/plugin-pinyin-search@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index cabe4e80d5..55c8305d8e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cli", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "description": "Command Line Interface for ObjectStack Protocol", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/client-react/CHANGELOG.md b/packages/client-react/CHANGELOG.md index 1391803453..8f467bb7e9 100644 --- a/packages/client-react/CHANGELOG.md +++ b/packages/client-react/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/client-react +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/client@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/client-react/package.json b/packages/client-react/package.json index 0c6fce6a8d..074eec54c5 100644 --- a/packages/client-react/package.json +++ b/packages/client-react/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client-react", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "React hooks for ObjectStack Client SDK", "main": "dist/index.js", diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 659a28bb76..dd2dfcee1f 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,32 @@ # @objectstack/client +## 16.0.0-rc.1 + +### Minor Changes + +- bfa3c3f: **Broadcast a `transactionalBatch` capability bit in discovery so clients negotiate the atomic cross-object batch declaratively, instead of runtime-probing 404/405/501 (#3298).** + + The atomic cross-object batch endpoint (`POST {basePath}/batch`, #1604 / ADR-0034 item 4) and its typed SDK surface (`client.data.batchTransaction`, #3271) already shipped, but discovery never told a client whether a backend actually supports it. Consumers (notably ObjectUI's `ObjectStackAdapter`) had to _probe_: fire a `/batch`, read `404`/`405` (no route) or `501` (no runtime transaction), and only then fall back to non-atomic client-side simulation. That is "find out by calling", not capability negotiation — it cannot be decided at connect time and cannot serve as the "minimum backend supports `/batch`" gate that blocks hard-deleting the non-atomic fallback downstream. + + `WellKnownCapabilitiesSchema` gains a required `transactionalBatch: boolean`, and **every** discovery producer fills it honestly (`declared === enforced`), so it never becomes a declared-but-unpopulated bit: + + - **`@objectstack/metadata-protocol`** (`getDiscovery`) — reports whether the runtime engine can honour a transaction (`typeof engine.transaction === 'function'`). The `/batch` handler runs its ops inside `engine.transaction()`, which degrades to a non-atomic passthrough (or 501) without one. + - **`@objectstack/rest`** (`/discovery`) — ANDs the engine signal with whether it actually mounts the route (`api.enableBatch`), so a server with batch disabled reports `false` even on a transaction-capable engine (never advertise an endpoint that would 404). + - **`@objectstack/plugin-hono-server`** (standalone discovery) — reports `false`: this minimal surface registers CRUD only and does not mount `/batch` (that ships with `@objectstack/rest`). Under-reporting is the safe direction — a client keeps its correct-but-slower fallback rather than losing atomicity. + - **`@objectstack/client`** — already normalizes hierarchical `capabilities` to flat booleans, so `client.capabilities.transactionalBatch` is exposed (and now typed) for declarative consumers. + + The bit follows the existing capability semantics: `true` ⟺ the `/batch` route is mounted **and** the runtime can honour a transaction — the exact condition under which the endpoint returns `200` rather than `404`/`405`/`501`. Additive and behavior-preserving; only the discovery payload gains a field. + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/client/package.json b/packages/client/package.json index 45dcd3ba6a..5dfd9026d7 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Official Client SDK for ObjectStack Protocol", "main": "dist/index.js", diff --git a/packages/cloud-connection/CHANGELOG.md b/packages/cloud-connection/CHANGELOG.md index e6f25fc817..b03bb3848e 100644 --- a/packages/cloud-connection/CHANGELOG.md +++ b/packages/cloud-connection/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/cloud-connection +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [ee0a499] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/runtime@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/cloud-connection/package.json b/packages/cloud-connection/package.json index 33c9948679..5e0c79f105 100644 --- a/packages/cloud-connection/package.json +++ b/packages/cloud-connection/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cloud-connection", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Runtime-side client for an ObjectStack cloud control plane — marketplace browse proxy, install-local, device-code binding, org catalog and installed views, and the /api/v1/runtime/config discovery endpoint. Open mechanism (ADR-0008): the hub service, plan policy, and entitlements stay server-side.", "type": "module", diff --git a/packages/connectors/connector-mcp/CHANGELOG.md b/packages/connectors/connector-mcp/CHANGELOG.md index 6e4b6df48d..cb2fa28cf3 100644 --- a/packages/connectors/connector-mcp/CHANGELOG.md +++ b/packages/connectors/connector-mcp/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/connector-mcp +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/connectors/connector-mcp/package.json b/packages/connectors/connector-mcp/package.json index 7bc943ce9f..3d302ea7a4 100644 --- a/packages/connectors/connector-mcp/package.json +++ b/packages/connectors/connector-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-mcp", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Model Context Protocol (MCP) connector for ObjectStack — a generic adapter that turns any MCP server's tools into a connector's actions on the automation engine's connector registry (ADR-0024).", "main": "dist/index.js", diff --git a/packages/connectors/connector-openapi/CHANGELOG.md b/packages/connectors/connector-openapi/CHANGELOG.md index 99c546cd4a..478ab4e11f 100644 --- a/packages/connectors/connector-openapi/CHANGELOG.md +++ b/packages/connectors/connector-openapi/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/connector-openapi +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/connectors/connector-openapi/package.json b/packages/connectors/connector-openapi/package.json index 46f7909ba3..a32b4b5fe7 100644 --- a/packages/connectors/connector-openapi/package.json +++ b/packages/connectors/connector-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-openapi", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "OpenAPI 3.x connector generator for ObjectStack — turns a declarative OpenAPI document into connector actions on the automation engine's registry, with a self-contained static-auth HTTP transport (ADR-0023).", "main": "dist/index.js", diff --git a/packages/connectors/connector-rest/CHANGELOG.md b/packages/connectors/connector-rest/CHANGELOG.md index ed69eadc6a..bae0a2df51 100644 --- a/packages/connectors/connector-rest/CHANGELOG.md +++ b/packages/connectors/connector-rest/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/connector-rest +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/connectors/connector-rest/package.json b/packages/connectors/connector-rest/package.json index 431a22580a..08f20330ab 100644 --- a/packages/connectors/connector-rest/package.json +++ b/packages/connectors/connector-rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-rest", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Generic REST connector for ObjectStack — the reference concrete connector that registers a `request` action on the automation engine's connector registry (ADR-0018 §Addendum).", "main": "dist/index.js", diff --git a/packages/connectors/connector-slack/CHANGELOG.md b/packages/connectors/connector-slack/CHANGELOG.md index 5162c5c601..2e489208e1 100644 --- a/packages/connectors/connector-slack/CHANGELOG.md +++ b/packages/connectors/connector-slack/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/connector-slack +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/connectors/connector-slack/package.json b/packages/connectors/connector-slack/package.json index 8ce228ce30..cc0759b268 100644 --- a/packages/connectors/connector-slack/package.json +++ b/packages/connectors/connector-slack/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-slack", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Slack Web API connector for ObjectStack — registers `chat.postMessage` / `chat.update` / `call` actions on the automation engine's connector registry (ADR-0018 §Addendum, ADR-0022).", "main": "dist/index.js", diff --git a/packages/console/CHANGELOG.md b/packages/console/CHANGELOG.md index ca8b679344..6613dc713c 100644 --- a/packages/console/CHANGELOG.md +++ b/packages/console/CHANGELOG.md @@ -1,5 +1,52 @@ # @objectstack/console +## 16.0.0-rc.1 + +### Minor Changes + +- bfa3c3f: Console (objectui) refreshed to `3b2e4d98d904`. Frontend changes in this range: + + - fix(list): route remaining system-field groupings through shared classifier (#2706) + - feat(console): user-import wizard defaults to the `auto` password policy (tracks framework#3236) (#2701) + - feat(flow-designer): schema-driven keyValue + numberList mapping (#3304) (#2708) + + objectui range: `0318118e02fd...3b2e4d98d904` + +### Patch Changes + +- a276969: Console (objectui) refreshed to `0318118e02fd`. Frontend changes in this range: + + - fix(app-shell): guard ActionParamDialog submit during file upload + map spec `autonumber` (ADR-0059 follow-ups) (#2707) + + objectui range: `94d4876df090...0318118e02fd` + +- a791200: Console (objectui) refreshed to `69fa5d163a97`. Frontend changes in this range: + + - fix(app-shell): mark notifications read via the REST surface, not direct receipt writes (#2743) + + objectui range: `af1b0db96e44...69fa5d163a97` + +- 1965549: Console (objectui) refreshed to `af1b0db96e44`. Frontend changes in this range: + + - feat(i18n): localize action result dialogs via \_actions..resultDialog (#2736) + - feat(data): thread the host's authenticated fetch into provider:'api' data sources (#2725) (#2732) + - feat(managedBy): add explicit `engine-owned` lifecycle bucket (tracks framework ADR-0103 addendum, #3343) (#2739) + - feat(fields): CheckboxesField visibleWhen cascading + dependsOn gating (completes option-widget parity) (#2735) + - feat(fields): RadioField visibleWhen cascading + dependsOn gating; single-source the option resolver (#2728) + - fix(kanban,calendar): surface write failures instead of silently swallowing them (#2716) + - fix(plugin-charts): draw dashboard bars on first paint via one settle re-mount (#2727) + - feat(dashboard): retire pre-ADR-0021 inline-analytics renderer branches (framework#3320) (#2723) + - fix(data-objectstack): type the exportDownload test fetch mock so its type-check passes (#2726) + - feat(detail): related lists paginate by default with server-side $top/$skip windows (#2711) (#2722) + - fix(approvals-inbox): align participant gating with the server-computed viewer block (#2719) + - fix(plugin-view): coerce i18n tab-label helpers to string (TS2322) (#2721) + - feat(fields): MultiSelectField per-option visibleWhen cascading + dependsOn gating (#2715) (#2717) + - fix(site): make docs build resilient to remote badge fetch failures (#2695) (#2718) + - feat(approvals-inbox): retire the approve/reject composer for declared actions with file attachments (#2698) (#2710) + - feat(fields): select+multiple → multi-value chip picker; restore fields/core lint gates (#2709) + + objectui range: `3b2e4d98d904...af1b0db96e44` + ## 16.0.0-rc.0 ### Major Changes diff --git a/packages/console/package.json b/packages/console/package.json index af987e94d0..5cec0d5f6e 100644 --- a/packages/console/package.json +++ b/packages/console/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/console", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "description": "Prebuilt Console SPA pinned to this @objectstack/framework release. Source of truth: @object-ui/console (https://github.com/objectstack-ai/objectui).", "license": "Apache-2.0", "homepage": "https://github.com/objectstack-ai/framework/tree/main/packages/console", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 7157581de4..2fc1fc240c 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/core +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/core/package.json b/packages/core/package.json index 80ee165ff9..22887e1cf0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/core", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Microkernel Core for ObjectStack", "type": "module", diff --git a/packages/create-objectstack/CHANGELOG.md b/packages/create-objectstack/CHANGELOG.md index 0336762f70..2648e4e86e 100644 --- a/packages/create-objectstack/CHANGELOG.md +++ b/packages/create-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # create-objectstack +## 16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/create-objectstack/package.json b/packages/create-objectstack/package.json index 90c142f3de..f74151d593 100644 --- a/packages/create-objectstack/package.json +++ b/packages/create-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "create-objectstack", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "description": "Create a new ObjectStack project — npx create-objectstack", "bin": { "create-objectstack": "./bin/create-objectstack.js" diff --git a/packages/formula/CHANGELOG.md b/packages/formula/CHANGELOG.md index f82d4483e7..0bd1794106 100644 --- a/packages/formula/CHANGELOG.md +++ b/packages/formula/CHANGELOG.md @@ -1,5 +1,30 @@ # @objectstack/formula +## 16.0.0-rc.1 + +### Minor Changes + +- 7125007: **Stored `Field.formula` fields that compute dates/durations no longer silently evaluate to `null` (#3306).** Three independent CEL gaps made shipped template formulas (e.g. `hr_employee.tenure_years`, `hr_time_off_request.days`) return `null` with no parse/build/runtime error: + + 1. **The null-guard idiom `cond ? : null` now compiles and evaluates.** cel-js's ternary type-unifier rejects a concrete `int`/`double`/`string` branch against `null` — so even `true ? 5 : null` faulted _"Ternary branches must have the same type"_ and the whole formula nulled. A `Field.formula` is inherently nullable and the catalog blesses both ternary and `== null`, so this is the canonical "compute value, else blank" shape. An AST pre-pass (mirroring the #3183 temporal-equality rewrite) wraps the non-null branch in `dyn(...)` — value-preserving, null-branch-only, idempotent — so it type-checks and runs. Applied in `compile()`, `evaluate()`, and the build soundness check alike. + + 2. **`floor(x)` / `ceil(x)` are now registered** (parallel to `round`/`abs`) and advertised in the catalog. They round toward −∞ / +∞, so `floor(-1.2) == -2` — NOT interchangeable with integer division's round-toward-zero. Previously `floor(...)` faulted `found no matching overload` and the formula nulled. + + 3. **Date arithmetic is now a build-time ERROR instead of a silent runtime `null`.** `record.end_date - record.start_date + 1`, `today() + 30`, `record.date + n` type-check clean (operands are `dyn`) but always fault at runtime and never recover (a date string is not numeric, so hydration can't rescue it). The build soundness check now types `date`/`datetime` fields as `google.protobuf.Timestamp` and flags date/duration **arithmetic against a number** with a corrective message pointing at `daysBetween(a, b)` / `daysFromNow(n)` / `addDays(d, n)` / `addMonths(d, n)`. Sound by construction — ordering (`date < today()`, `date < "2026-01-01"` string-lex), equality (#3183), and string concatenation (`"Due: " + date`) are all runtime-tolerated and never flagged; only arithmetic against a number is. A `!= null` guard on a date field no longer masks the inner fault (`== null` no-op overloads registered in the check-only env). + + > **Heads-up for downstream:** (3) adds a NEW build-time error. A stored formula or predicate doing arithmetic on a `date`/`datetime` field (`end - start + 1`, `today() + 30`) that previously built (and nulled at runtime) will now fail `objectstack build` / `validateStackExpressions` with a message telling you to use `daysBetween` / `daysFromNow` / `addDays`. This only fires for genuinely-broken expressions that already returned `null`. + + Fixes #3306. + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/formula/package.json b/packages/formula/package.json index a1964b4ff2..06386223cd 100644 --- a/packages/formula/package.json +++ b/packages/formula/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/formula", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack canonical expression engine — CEL (cel-js) + ObjectStack stdlib + dialect registry", "main": "dist/index.js", diff --git a/packages/lint/CHANGELOG.md b/packages/lint/CHANGELOG.md index fc42dc5cd6..64c01b0962 100644 --- a/packages/lint/CHANGELOG.md +++ b/packages/lint/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/lint +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/sdui-parser@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/lint/package.json b/packages/lint/package.json index 40e6ee3c0f..78a56dfc84 100644 --- a/packages/lint/package.json +++ b/packages/lint/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/lint", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Static, build-time validation for an ObjectStack metadata graph — dashboard widget bindings, CEL/predicate expressions, and more. Pure (stack) => Issue[] functions shared by the CLI's `os validate` and any other consumer (e.g. AI authoring). Depends on @objectstack/spec; never on a runtime.", "type": "module", diff --git a/packages/mcp/CHANGELOG.md b/packages/mcp/CHANGELOG.md index 0863be6675..a8a27ece08 100644 --- a/packages/mcp/CHANGELOG.md +++ b/packages/mcp/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/plugin-mcp-server +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 4bc49ad6b8..4499e98879 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/mcp", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack as an MCP server — exposes your app's objects (and AI tools) over the Model Context Protocol (stdio + Streamable HTTP)", "type": "module", diff --git a/packages/metadata-core/CHANGELOG.md b/packages/metadata-core/CHANGELOG.md index 324db558da..fdccb95d46 100644 --- a/packages/metadata-core/CHANGELOG.md +++ b/packages/metadata-core/CHANGELOG.md @@ -1,5 +1,24 @@ # @objectstack/metadata-core +## 16.0.0-rc.1 + +### Patch Changes + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/metadata-core/package.json b/packages/metadata-core/package.json index 030fff4747..c28103cef8 100644 --- a/packages/metadata-core/package.json +++ b/packages/metadata-core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-core", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Metadata Repository contracts: types, canonicalization, errors, interface (ADR-0008).", "type": "module", diff --git a/packages/metadata-fs/CHANGELOG.md b/packages/metadata-fs/CHANGELOG.md index 62c803c844..1b8334110a 100644 --- a/packages/metadata-fs/CHANGELOG.md +++ b/packages/metadata-fs/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/metadata-fs +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [62a2117] + - @objectstack/metadata-core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/metadata-fs/package.json b/packages/metadata-fs/package.json index 42bf1f46b4..e7b8e5b362 100644 --- a/packages/metadata-fs/package.json +++ b/packages/metadata-fs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-fs", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "FileSystemRepository: Node-only Repository implementation backed by JSON files and a JSONL change log (ADR-0008).", "type": "module", diff --git a/packages/metadata-protocol/CHANGELOG.md b/packages/metadata-protocol/CHANGELOG.md index d0c8a3af0a..d58e96e2d8 100644 --- a/packages/metadata-protocol/CHANGELOG.md +++ b/packages/metadata-protocol/CHANGELOG.md @@ -1,5 +1,36 @@ # @objectstack/metadata-protocol +## 16.0.0-rc.1 + +### Minor Changes + +- bfa3c3f: **Broadcast a `transactionalBatch` capability bit in discovery so clients negotiate the atomic cross-object batch declaratively, instead of runtime-probing 404/405/501 (#3298).** + + The atomic cross-object batch endpoint (`POST {basePath}/batch`, #1604 / ADR-0034 item 4) and its typed SDK surface (`client.data.batchTransaction`, #3271) already shipped, but discovery never told a client whether a backend actually supports it. Consumers (notably ObjectUI's `ObjectStackAdapter`) had to _probe_: fire a `/batch`, read `404`/`405` (no route) or `501` (no runtime transaction), and only then fall back to non-atomic client-side simulation. That is "find out by calling", not capability negotiation — it cannot be decided at connect time and cannot serve as the "minimum backend supports `/batch`" gate that blocks hard-deleting the non-atomic fallback downstream. + + `WellKnownCapabilitiesSchema` gains a required `transactionalBatch: boolean`, and **every** discovery producer fills it honestly (`declared === enforced`), so it never becomes a declared-but-unpopulated bit: + + - **`@objectstack/metadata-protocol`** (`getDiscovery`) — reports whether the runtime engine can honour a transaction (`typeof engine.transaction === 'function'`). The `/batch` handler runs its ops inside `engine.transaction()`, which degrades to a non-atomic passthrough (or 501) without one. + - **`@objectstack/rest`** (`/discovery`) — ANDs the engine signal with whether it actually mounts the route (`api.enableBatch`), so a server with batch disabled reports `false` even on a transaction-capable engine (never advertise an endpoint that would 404). + - **`@objectstack/plugin-hono-server`** (standalone discovery) — reports `false`: this minimal surface registers CRUD only and does not mount `/batch` (that ships with `@objectstack/rest`). Under-reporting is the safe direction — a client keeps its correct-but-slower fallback rather than losing atomicity. + - **`@objectstack/client`** — already normalizes hierarchical `capabilities` to flat booleans, so `client.capabilities.transactionalBatch` is exposed (and now typed) for declarative consumers. + + The bit follows the existing capability semantics: `true` ⟺ the `/batch` route is mounted **and** the runtime can honour a transaction — the exact condition under which the endpoint returns `200` rather than `404`/`405`/`501`. Additive and behavior-preserving; only the discovery payload gains a field. + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/metadata-core@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/metadata-protocol/package.json b/packages/metadata-protocol/package.json index 0abe2e0ede..21dfd27d1c 100644 --- a/packages/metadata-protocol/package.json +++ b/packages/metadata-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-protocol", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack metadata management protocol: sys_metadata CRUD, draft/publish, locks, package ownership, diagnostics (ADR-0076).", "type": "module", diff --git a/packages/metadata/CHANGELOG.md b/packages/metadata/CHANGELOG.md index cacfc66140..0e67c3798c 100644 --- a/packages/metadata/CHANGELOG.md +++ b/packages/metadata/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/metadata +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/metadata-core@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + - @objectstack/metadata-fs@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/metadata/package.json b/packages/metadata/package.json index 5ecb306259..140f310fe3 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Metadata loading, saving, and persistence for ObjectStack", "type": "module", diff --git a/packages/objectql/CHANGELOG.md b/packages/objectql/CHANGELOG.md index 7f44738ae9..143f5405d6 100644 --- a/packages/objectql/CHANGELOG.md +++ b/packages/objectql/CHANGELOG.md @@ -1,5 +1,29 @@ # @objectstack/objectql +## 16.0.0-rc.1 + +### Patch Changes + +- 674457a: **Enforce per-option `visibleWhen` on `checkboxes` fields, and match option values by string form (objectui#2729).** Server-side per-option gating already covered `select` / `multiselect` / `radio`, but two holes let gated values through on write: + + - **`checkboxes` was not enforced.** `CHOICE_FIELD_TYPES` omitted `checkboxes`, so a gated `checkboxes` option (whose client widget cascades identically to `multiselect` since objectui#2715) was hidden in the UI but accepted from a crafted write. Added `checkboxes` to the enforced set — its picked values are now re-evaluated against each option's `visibleWhen` (record + `current_user`) on insert/update/bulk-update, element-wise, like `multiselect`. + - **Numeric option values could slip the gate.** Option matching used strict `===`, but the enum-membership validator compares by `String(...)`. A numeric option value submitted as a string (a normal REST/JSON round-trip) passed the enum check yet missed its `visibleWhen` gate (fail-open). Matching now coerces both sides with `String(...)`, so the two validators agree on which option a written value denotes. + + Behavior for `select` / `multiselect` / `radio` is unchanged. Fail-open on unbound `current_user` / unevaluable predicates is preserved. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/metadata-protocol@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/metadata-core@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Major Changes diff --git a/packages/objectql/package.json b/packages/objectql/package.json index 36c8367543..b20f87a1e7 100644 --- a/packages/objectql/package.json +++ b/packages/objectql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/objectql", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Isomorphic ObjectQL Engine for ObjectStack", "main": "dist/index.js", diff --git a/packages/observability/CHANGELOG.md b/packages/observability/CHANGELOG.md index 68206eb534..d874c5e62b 100644 --- a/packages/observability/CHANGELOG.md +++ b/packages/observability/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/observability +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/observability/package.json b/packages/observability/package.json index 62104e864c..6577dd31bd 100644 --- a/packages/observability/package.json +++ b/packages/observability/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/observability", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Observability contracts and exporters for ObjectStack — MetricsRegistry, ErrorReporter, Logger plus noop/console/OTLP-HTTP exporters. Deployment-target neutral; runtime and services depend on this so the same instrumentation works on Cloudflare Workers, Node, and self-hosted Kubernetes.", "type": "module", diff --git a/packages/platform-objects/CHANGELOG.md b/packages/platform-objects/CHANGELOG.md index c70e2540e8..9757f585f0 100644 --- a/packages/platform-objects/CHANGELOG.md +++ b/packages/platform-objects/CHANGELOG.md @@ -1,5 +1,53 @@ # @objectstack/platform-objects +## 16.0.0-rc.1 + +### Patch Changes + +- 6289ec3: feat(i18n): translation slot for action `resultDialog` copy — the one-shot secret-reveal dialogs are now localizable + + The post-success `resultDialog` (temporary passwords, 2FA backup codes, OAuth + client secrets) had no slot in the translation protocol, so its title / + description / acknowledge button / field labels always rendered the hardcoded + English metadata literals even on fully-translated locales. + + - **spec.** `_actions.` (object + object-first node) and + `globalActions.` gain an optional `resultDialog` translation node + (`ActionResultDialogTranslationSchema`): `title`, `description`, + `acknowledge`, and `fields` keyed by the **literal** result-field path + (e.g. `"user.email"` — keys may contain dots; resolvers index the record + directly, never split on `.`). New `resolveActionResultDialog` overlay + resolver, wired into `translateAction` for API-boundary translation. + - **cli.** `os i18n extract` emits the new `resultDialog.*` keys (title / + description / acknowledge / `fields.` for labelled fields), so + coverage and skeleton generation see them. + - **platform-objects.** en / zh-CN / ja-JP / es-ES bundles ship the + resultDialog copy for all six shipped dialogs: `sys_user.create_user`, + `sys_user.set_user_password`, `sys_two_factor.enable_two_factor`, + `sys_two_factor.regenerate_backup_codes`, + `sys_oauth_application.create_oauth_application`, and + `sys_oauth_application.rotate_client_secret`. + + Client-side rendering lands in objectui (`actionResultDialog` resolver in + `@object-ui/i18n` + result-dialog handlers). Purely additive — untranslated + locales keep falling back to the metadata literals. + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/metadata-core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/platform-objects/package.json b/packages/platform-objects/package.json index 0e36760c26..5c162e6e95 100644 --- a/packages/platform-objects/package.json +++ b/packages/platform-objects/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/platform-objects", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Core platform object schemas for ObjectStack — identity, security, audit, tenant, and metadata objects", "main": "dist/index.js", diff --git a/packages/plugins/driver-memory/CHANGELOG.md b/packages/plugins/driver-memory/CHANGELOG.md index f5ea567003..37b241c5ff 100644 --- a/packages/plugins/driver-memory/CHANGELOG.md +++ b/packages/plugins/driver-memory/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/driver-memory +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/driver-memory/package.json b/packages/plugins/driver-memory/package.json index 9b4c4650a0..b6a4da6075 100644 --- a/packages/plugins/driver-memory/package.json +++ b/packages/plugins/driver-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-memory", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "In-Memory Driver for ObjectStack (Reference Implementation)", "main": "dist/index.js", diff --git a/packages/plugins/driver-mongodb/CHANGELOG.md b/packages/plugins/driver-mongodb/CHANGELOG.md index 4c67cc1abc..339edab2e5 100644 --- a/packages/plugins/driver-mongodb/CHANGELOG.md +++ b/packages/plugins/driver-mongodb/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/driver-mongodb +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/driver-mongodb/package.json b/packages/plugins/driver-mongodb/package.json index 365825406d..8a5320d401 100644 --- a/packages/plugins/driver-mongodb/package.json +++ b/packages/plugins/driver-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-mongodb", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "MongoDB Driver for ObjectStack - Native document database driver via official mongodb client", "main": "dist/index.js", diff --git a/packages/plugins/driver-sql/CHANGELOG.md b/packages/plugins/driver-sql/CHANGELOG.md index ea9af1628b..f3cc0d3c24 100644 --- a/packages/plugins/driver-sql/CHANGELOG.md +++ b/packages/plugins/driver-sql/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/driver-sql +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/observability@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/plugins/driver-sql/package.json b/packages/plugins/driver-sql/package.json index 6b1cc31e8f..10e6ae48e7 100644 --- a/packages/plugins/driver-sql/package.json +++ b/packages/plugins/driver-sql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-sql", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "SQL Driver for ObjectStack - Supports PostgreSQL, MySQL, SQLite via Knex", "main": "dist/index.js", diff --git a/packages/plugins/driver-sqlite-wasm/CHANGELOG.md b/packages/plugins/driver-sqlite-wasm/CHANGELOG.md index 2c718cfadd..46943aedbc 100644 --- a/packages/plugins/driver-sqlite-wasm/CHANGELOG.md +++ b/packages/plugins/driver-sqlite-wasm/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/driver-sqlite-wasm +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/driver-sql@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/driver-sqlite-wasm/package.json b/packages/plugins/driver-sqlite-wasm/package.json index 67aebb9aca..562034dc1b 100644 --- a/packages/plugins/driver-sqlite-wasm/package.json +++ b/packages/plugins/driver-sqlite-wasm/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-sqlite-wasm", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "WASM SQLite Driver for ObjectStack — runs in browser/WebContainer (StackBlitz) without native bindings", "keywords": [ diff --git a/packages/plugins/embedder-openai/CHANGELOG.md b/packages/plugins/embedder-openai/CHANGELOG.md index b8b42f8b5c..1ee7528cd9 100644 --- a/packages/plugins/embedder-openai/CHANGELOG.md +++ b/packages/plugins/embedder-openai/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/embedder-openai +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/embedder-openai/package.json b/packages/plugins/embedder-openai/package.json index 2b303ff027..d3b601229c 100644 --- a/packages/plugins/embedder-openai/package.json +++ b/packages/plugins/embedder-openai/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/embedder-openai", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "OpenAI-compatible embedder for ObjectStack — works against OpenAI, 阿里通义 DashScope, 智谱 BigModel, 硅基流动 SiliconFlow, 火山引擎 Doubao, MiniMax, Ollama, and any drop-in OpenAI-shape endpoint.", "main": "dist/index.js", diff --git a/packages/plugins/knowledge-memory/CHANGELOG.md b/packages/plugins/knowledge-memory/CHANGELOG.md index 6734946a42..fbacab7314 100644 --- a/packages/plugins/knowledge-memory/CHANGELOG.md +++ b/packages/plugins/knowledge-memory/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/knowledge-memory +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/service-knowledge@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/knowledge-memory/package.json b/packages/plugins/knowledge-memory/package.json index b4891c6ebd..6f3222d78a 100644 --- a/packages/plugins/knowledge-memory/package.json +++ b/packages/plugins/knowledge-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/knowledge-memory", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "In-memory knowledge adapter for ObjectStack (dev / test reference implementation).", "main": "dist/index.js", diff --git a/packages/plugins/knowledge-ragflow/CHANGELOG.md b/packages/plugins/knowledge-ragflow/CHANGELOG.md index 904a548d24..6938fba42e 100644 --- a/packages/plugins/knowledge-ragflow/CHANGELOG.md +++ b/packages/plugins/knowledge-ragflow/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/knowledge-ragflow +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/service-knowledge@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/knowledge-ragflow/package.json b/packages/plugins/knowledge-ragflow/package.json index 91294bd3e4..0a574cc304 100644 --- a/packages/plugins/knowledge-ragflow/package.json +++ b/packages/plugins/knowledge-ragflow/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/knowledge-ragflow", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "RAGFlow knowledge adapter for ObjectStack — production-grade RAG via the Apache 2.0 RAGFlow REST API.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-approvals/CHANGELOG.md b/packages/plugins/plugin-approvals/CHANGELOG.md index b91c738e9f..81666084cc 100644 --- a/packages/plugins/plugin-approvals/CHANGELOG.md +++ b/packages/plugins/plugin-approvals/CHANGELOG.md @@ -1,5 +1,68 @@ # @objectstack/plugin-approvals +## 16.0.0-rc.1 + +### Minor Changes + +- e412fb6: feat(approvals): declare file attachments on approve/reject decisions + + The declared `approval_approve` / `approval_reject` actions on + `sys_approval_request` gain an optional multi-file `attachments` param + (`type: 'file'`, `multiple`). The console renders `type:'file'` action params + through the shared upload widget (objectui ADR-0059) and POSTs the resolved + `attachments: string[]`, so a reviewer can attach supporting files to a + decision through the generic declared-action dialog — letting the approvals + inbox retire its hand-wired attachment composer (objectui#2698). + + Purely additive metadata: the decision route already forwards + `body.attachments` to `ApprovalService.decide`, and the + `sys_approval_action.attachments` column (file, multiple) already persists them + (#3266/#3274). No service or route change. + +- 8efa395: feat(approvals): server-computed `viewer` capability for precise decision-action gating + + `getRequest` / `listRequests` now attach a per-viewer block — + `viewer: { can_act, is_submitter }` — computed from the caller's context + (`ApprovalRequestRow.viewer`): + + - `can_act` — the caller is a _current pending approver_ (their user id is in the + request's resolved `pending_approvers` while it is still `pending`). This is + the same check the decision methods authorize with, so it already reflects + position/team/manager resolution — strictly more accurate than a client-side + identity guess. + - `is_submitter` — the caller submitted the request. + + The declared decision actions on `sys_approval_request` now gate on it: approver + actions (approve/reject/reassign/send-back/request-info) use + `record.viewer.can_act`; submitter levers (remind/recall/resubmit) use + `record.viewer.is_submitter`. Previously approver actions only trimmed the + non-pending case, so a submitter viewing their own pending request saw buttons + they couldn't use (the backend 403'd); a position-addressed approver could be + wrongly hidden by the old client heuristic. Where `viewer` is absent (a row + surfaced outside a service read with a user context), the predicate fails closed. + +### Patch Changes + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/metadata-core@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/plugins/plugin-approvals/package.json b/packages/plugins/plugin-approvals/package.json index a78c86a793..42505ed303 100644 --- a/packages/plugins/plugin-approvals/package.json +++ b/packages/plugins/plugin-approvals/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-approvals", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Multi-step approval engine for ObjectStack — sys_approval_process + sys_approval_request + sys_approval_action + IApprovalService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-audit/CHANGELOG.md b/packages/plugins/plugin-audit/CHANGELOG.md index 7dedd6acc1..2c6a59dd94 100644 --- a/packages/plugins/plugin-audit/CHANGELOG.md +++ b/packages/plugins/plugin-audit/CHANGELOG.md @@ -1,5 +1,56 @@ # @objectstack/plugin-audit +## 16.0.0-rc.1 + +### Patch Changes + +- ee0a499: feat(i18n): localize collaboration notification titles and the storage objects; wire the notifications REST routes + + Three gaps behind one report (a `sys_file "repro.png" assigned to you` + notification that was English on an all-Chinese workspace, opened an English + detail page, and never cleared its unread state): + + - **plugin-audit** — the assignment (`collab.assignment`) and @mention + (`collab.mention`) bell titles were hardcoded English literals built from the + raw object API name. They now resolve through the i18n service with the same + key shapes as the activity summaries (framework#3039): new + `messages.assignedToYou` / `messages.mentionedYou` / + `messages.mentionedYouAnonymous` templates (en / zh-CN / ja-JP / es-ES), the + object named by its translated label (`objects.{name}.label` → authored def + label → API name), and the locale resolved for the **recipient** (they read + the bell), not the acting user. Every step stays best-effort: no locale / no + i18n / key miss degrades to the English literal — which now also prefers the + authored object label over the API name. + + - **service-storage** — `sys_file` / `sys_upload_session` had no translation + bundle at all, so the file detail page (labels, and the Pending Upload / + Committed / Deleted status pipeline) rendered English on every locale. The + service now ships its own ADR-0029 D8 bundle (en / zh-CN / ja-JP / es-ES, + `src/translations` + `scripts/i18n-extract.config.ts`) and contributes it via + `i18n.loadTranslations` on `kernel:ready`, matching service-messaging. + (`sys_attachment` stays in platform-objects' bundles pending the + storage-domain decomposition.) + + - **runtime** — the in-app notifications REST surface (`GET +/api/v1/notifications`, `POST /api/v1/notifications/read`, `POST +/api/v1/notifications/read/all`; ADR-0030) had its `handleNotification` + dispatch branch and discovery entry, but no `server.()` mount in + `dispatcher-plugin`, so only the cloud hosts' hono catch-all reached it — the + standalone / `os dev` server 404'd every request. That left mark-read with no + working endpoint (the console's direct `sys_notification_receipt` write is + rejected by ADR-0103's engine-owned gate), so unread notifications could never + clear. The three routes are now mounted explicitly, guarded by the + route-registration regression test. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/plugin-audit/package.json b/packages/plugins/plugin-audit/package.json index 0660e75489..f6d2ee982d 100644 --- a/packages/plugins/plugin-audit/package.json +++ b/packages/plugins/plugin-audit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-audit", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Audit Plugin for ObjectStack — System audit log object and audit trail", "main": "dist/index.js", diff --git a/packages/plugins/plugin-auth/CHANGELOG.md b/packages/plugins/plugin-auth/CHANGELOG.md index 9dc60fde36..3d41ceddd5 100644 --- a/packages/plugins/plugin-auth/CHANGELOG.md +++ b/packages/plugins/plugin-auth/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/rest@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/plugins/plugin-auth/package.json b/packages/plugins/plugin-auth/package.json index a13d00403d..f2b4aa8f6f 100644 --- a/packages/plugins/plugin-auth/package.json +++ b/packages/plugins/plugin-auth/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-auth", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Authentication & Identity Plugin for ObjectStack", "main": "dist/index.js", diff --git a/packages/plugins/plugin-dev/CHANGELOG.md b/packages/plugins/plugin-dev/CHANGELOG.md index 3d1b858179..20a27362f0 100644 --- a/packages/plugins/plugin-dev/CHANGELOG.md +++ b/packages/plugins/plugin-dev/CHANGELOG.md @@ -1,5 +1,31 @@ # @objectstack/plugin-dev +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [ee0a499] +- Updated dependencies [9d897b3] +- Updated dependencies [62a2117] +- Updated dependencies [674457a] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/rest@16.0.0-rc.1 + - @objectstack/plugin-hono-server@16.0.0-rc.1 + - @objectstack/runtime@16.0.0-rc.1 + - @objectstack/plugin-security@16.0.0-rc.1 + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/account@16.0.0-rc.1 + - @objectstack/setup@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/driver-memory@16.0.0-rc.1 + - @objectstack/plugin-auth@16.0.0-rc.1 + - @objectstack/service-i18n@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/plugin-dev/package.json b/packages/plugins/plugin-dev/package.json index 4783a35938..0621b80895 100644 --- a/packages/plugins/plugin-dev/package.json +++ b/packages/plugins/plugin-dev/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-dev", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Development Mode Plugin for ObjectStack — auto-enables all services with in-memory implementations", "main": "dist/index.js", diff --git a/packages/plugins/plugin-email/CHANGELOG.md b/packages/plugins/plugin-email/CHANGELOG.md index ad6778d852..9f9b764df0 100644 --- a/packages/plugins/plugin-email/CHANGELOG.md +++ b/packages/plugins/plugin-email/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/plugin-email +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/plugin-email/package.json b/packages/plugins/plugin-email/package.json index 96fe7f9ebb..e476b14ccf 100644 --- a/packages/plugins/plugin-email/package.json +++ b/packages/plugins/plugin-email/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-email", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Email service plugin for ObjectStack — IEmailService + transport-pluggable outbound delivery with sys_email persistence.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-hono-server/CHANGELOG.md b/packages/plugins/plugin-hono-server/CHANGELOG.md index 2f35acd15e..7135282eb7 100644 --- a/packages/plugins/plugin-hono-server/CHANGELOG.md +++ b/packages/plugins/plugin-hono-server/CHANGELOG.md @@ -1,5 +1,42 @@ # @objectstack/plugin-hono-server +## 16.0.0-rc.1 + +### Minor Changes + +- bfa3c3f: **Broadcast a `transactionalBatch` capability bit in discovery so clients negotiate the atomic cross-object batch declaratively, instead of runtime-probing 404/405/501 (#3298).** + + The atomic cross-object batch endpoint (`POST {basePath}/batch`, #1604 / ADR-0034 item 4) and its typed SDK surface (`client.data.batchTransaction`, #3271) already shipped, but discovery never told a client whether a backend actually supports it. Consumers (notably ObjectUI's `ObjectStackAdapter`) had to _probe_: fire a `/batch`, read `404`/`405` (no route) or `501` (no runtime transaction), and only then fall back to non-atomic client-side simulation. That is "find out by calling", not capability negotiation — it cannot be decided at connect time and cannot serve as the "minimum backend supports `/batch`" gate that blocks hard-deleting the non-atomic fallback downstream. + + `WellKnownCapabilitiesSchema` gains a required `transactionalBatch: boolean`, and **every** discovery producer fills it honestly (`declared === enforced`), so it never becomes a declared-but-unpopulated bit: + + - **`@objectstack/metadata-protocol`** (`getDiscovery`) — reports whether the runtime engine can honour a transaction (`typeof engine.transaction === 'function'`). The `/batch` handler runs its ops inside `engine.transaction()`, which degrades to a non-atomic passthrough (or 501) without one. + - **`@objectstack/rest`** (`/discovery`) — ANDs the engine signal with whether it actually mounts the route (`api.enableBatch`), so a server with batch disabled reports `false` even on a transaction-capable engine (never advertise an endpoint that would 404). + - **`@objectstack/plugin-hono-server`** (standalone discovery) — reports `false`: this minimal surface registers CRUD only and does not mount `/batch` (that ships with `@objectstack/rest`). Under-reporting is the safe direction — a client keeps its correct-but-slower fallback rather than losing atomicity. + - **`@objectstack/client`** — already normalizes hierarchical `capabilities` to flat booleans, so `client.capabilities.transactionalBatch` is exposed (and now typed) for declarative consumers. + + The bit follows the existing capability semantics: `true` ⟺ the `/batch` route is mounted **and** the runtime can honour a transaction — the exact condition under which the endpoint returns `200` rather than `404`/`405`/`501`. Additive and behavior-preserving; only the discovery payload gains a field. + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/observability@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/plugins/plugin-hono-server/package.json b/packages/plugins/plugin-hono-server/package.json index f2cf6cc274..cd4d8125eb 100644 --- a/packages/plugins/plugin-hono-server/package.json +++ b/packages/plugins/plugin-hono-server/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-hono-server", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Standard Hono Server Adapter for ObjectStack Runtime", "main": "dist/index.js", diff --git a/packages/plugins/plugin-pinyin-search/CHANGELOG.md b/packages/plugins/plugin-pinyin-search/CHANGELOG.md index 91eb03791b..fdf05bc20a 100644 --- a/packages/plugins/plugin-pinyin-search/CHANGELOG.md +++ b/packages/plugins/plugin-pinyin-search/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/plugin-pinyin-search +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [674457a] + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/plugin-pinyin-search/package.json b/packages/plugins/plugin-pinyin-search/package.json index 695f05fefd..194f34246f 100644 --- a/packages/plugins/plugin-pinyin-search/package.json +++ b/packages/plugins/plugin-pinyin-search/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-pinyin-search", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Pinyin search recall for ObjectStack — populates the hidden `__search` companion column (full pinyin + initials of the display/name field) so `$search` hits CJK names typed as pinyin. Locale-gated via OS_SEARCH_PINYIN_ENABLED (#2486).", "main": "dist/index.js", diff --git a/packages/plugins/plugin-reports/CHANGELOG.md b/packages/plugins/plugin-reports/CHANGELOG.md index f95fc92dad..fbecb05aa0 100644 --- a/packages/plugins/plugin-reports/CHANGELOG.md +++ b/packages/plugins/plugin-reports/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/plugin-reports +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/plugin-reports/package.json b/packages/plugins/plugin-reports/package.json index 05d4096474..75fe8e3510 100644 --- a/packages/plugins/plugin-reports/package.json +++ b/packages/plugins/plugin-reports/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-reports", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Saved reports + scheduled email digests for ObjectStack — sys_saved_report + sys_report_schedule + IReportService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-security/CHANGELOG.md b/packages/plugins/plugin-security/CHANGELOG.md index f8adf6d85e..de63c08e23 100644 --- a/packages/plugins/plugin-security/CHANGELOG.md +++ b/packages/plugins/plugin-security/CHANGELOG.md @@ -1,5 +1,38 @@ # @objectstack/plugin-security +## 16.0.0-rc.1 + +### Minor Changes + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +### Patch Changes + +- 9d897b3: **Derive the better-auth managed-object write denies from the live registry (#3325, follow-through of ADR-0092 / ADR-0103).** The default permission sets deny generic writes on better-auth identity tables via a hand-maintained `BETTER_AUTH_MANAGED_OBJECTS` list — exactly the drift ADR-0092 forbids, and it had already drifted (the list carried 17 names while 22 schemas declare `managedBy: 'better-auth'`, leaving `sys_scim_provider`, `sys_sso_provider`, and three `sys_oauth_*` tables wildcard-granted for writes at the permission-evaluator layer; the identity write guard still 403'd the actual write, so this was a defense-in-depth gap, not a live hole). + + - New `applyManagedWriteDenies` (`managed-object-write-denies.ts`) injects a read-only-write deny for every registered `managedBy: 'better-auth'` object into the four write-granting default sets (`organization_admin`, `member_default`, `viewer_readonly`, MCP write) at `kernel:ready`, mutating the shared in-memory `bootstrapPermissionSets` in place (the array the evaluator resolves and the seeder serializes — a DB-row-only fix would be dead code). Never touches `admin_full_access`, never overrides an existing explicit entry, ignores `userActions` (the better-auth bucket is hard-denied — `sys_user`'s `userActions.edit` opens only a field-level whitelist the identity guard enforces). + - The static `BETTER_AUTH_MANAGED_OBJECTS` list is completed to 22 and kept as a compile-time baseline (covers the pre-`kernel:ready` window), now pinned bidirectionally against the `@objectstack/platform-objects` schemas by a test so it cannot silently rot again. + - Engine-owned `system`/`append-only` objects are deliberately NOT given deny entries — a per-object entry overrides the wildcard and would drop `viewAllRecords`; their writes are already rejected by the ADR-0103 engine guard. + + No public API change; the helper is internal. Behavior is byte-preserving for the 17 already-listed tables and closes the gap on the 5 that had drifted. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/plugins/plugin-security/package.json b/packages/plugins/plugin-security/package.json index 5edd94b60d..ad8957af19 100644 --- a/packages/plugins/plugin-security/package.json +++ b/packages/plugins/plugin-security/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-security", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Security Plugin for ObjectStack — RBAC, RLS, and Field-Level Security Runtime", "main": "dist/index.js", diff --git a/packages/plugins/plugin-sharing/CHANGELOG.md b/packages/plugins/plugin-sharing/CHANGELOG.md index 4a0100055b..364907f2f2 100644 --- a/packages/plugins/plugin-sharing/CHANGELOG.md +++ b/packages/plugins/plugin-sharing/CHANGELOG.md @@ -1,5 +1,30 @@ # @objectstack/plugin-sharing +## 16.0.0-rc.1 + +### Patch Changes + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [674457a] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/plugin-sharing/package.json b/packages/plugins/plugin-sharing/package.json index 010368616b..513cf73860 100644 --- a/packages/plugins/plugin-sharing/package.json +++ b/packages/plugins/plugin-sharing/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-sharing", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Record-level sharing for ObjectStack — sys_record_share + middleware that enforces sharingModel + ISharingService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-webhooks/CHANGELOG.md b/packages/plugins/plugin-webhooks/CHANGELOG.md index 1ef1e611f7..206295e0d2 100644 --- a/packages/plugins/plugin-webhooks/CHANGELOG.md +++ b/packages/plugins/plugin-webhooks/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/plugin-webhooks +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/service-messaging@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/plugins/plugin-webhooks/package.json b/packages/plugins/plugin-webhooks/package.json index 33b01ba2c7..0a659641d8 100644 --- a/packages/plugins/plugin-webhooks/package.json +++ b/packages/plugins/plugin-webhooks/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-webhooks", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Persistent, cluster-aware webhook dispatcher. Durable outbox + per-partition cluster.lock for exactly-once-ish delivery across nodes. See content/docs/concepts/webhook-delivery.mdx.", "type": "module", diff --git a/packages/qa/dogfood/CHANGELOG.md b/packages/qa/dogfood/CHANGELOG.md index d61208b6a2..260ae175c7 100644 --- a/packages/qa/dogfood/CHANGELOG.md +++ b/packages/qa/dogfood/CHANGELOG.md @@ -1,5 +1,31 @@ # @objectstack/dogfood +## 0.0.38-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [ee0a499] +- Updated dependencies [9d897b3] +- Updated dependencies [62a2117] +- Updated dependencies [674457a] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/plugin-audit@16.0.0-rc.1 + - @objectstack/service-storage@16.0.0-rc.1 + - @objectstack/plugin-security@16.0.0-rc.1 + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/example-crm@4.0.90-rc.1 + - @objectstack/example-showcase@0.3.12-rc.1 + - @objectstack/connector-mcp@16.0.0-rc.1 + - @objectstack/connector-openapi@16.0.0-rc.1 + - @objectstack/connector-rest@16.0.0-rc.1 + - @objectstack/mcp@16.0.0-rc.1 + - @objectstack/plugin-auth@16.0.0-rc.1 + - @objectstack/verify@16.0.0-rc.1 + ## 0.0.38-rc.0 ### Patch Changes diff --git a/packages/qa/dogfood/package.json b/packages/qa/dogfood/package.json index f4f1cd7d2a..b272d9b3ae 100644 --- a/packages/qa/dogfood/package.json +++ b/packages/qa/dogfood/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/dogfood", - "version": "0.0.38-rc.0", + "version": "0.0.38-rc.1", "private": true, "license": "Apache-2.0", "description": "Dogfood regression gate — hand-written golden tests that boot real example apps through @objectstack/verify's in-process HTTP stack, pinning historical runtime regressions (#2018 timezone bucketing, #1994 cross-owner RLS, #2004 field fidelity) that static checks miss.", diff --git a/packages/qa/downstream-contract/CHANGELOG.md b/packages/qa/downstream-contract/CHANGELOG.md index a9c9f1db94..242b4f7e70 100644 --- a/packages/qa/downstream-contract/CHANGELOG.md +++ b/packages/qa/downstream-contract/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/downstream-contract +## 0.0.36-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + ## 0.0.36-rc.0 ### Patch Changes diff --git a/packages/qa/downstream-contract/package.json b/packages/qa/downstream-contract/package.json index 9b269ac477..76fa779fe2 100644 --- a/packages/qa/downstream-contract/package.json +++ b/packages/qa/downstream-contract/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/downstream-contract", - "version": "0.0.36-rc.0", + "version": "0.0.36-rc.1", "description": "Frozen third-party consumer fixture — a backward-compatibility gate for @objectstack/spec. Authored the way an external project on a published release authors metadata; if a spec change breaks it, that change is breaking (#2035).", "license": "Apache-2.0", "private": true, diff --git a/packages/qa/http-conformance/CHANGELOG.md b/packages/qa/http-conformance/CHANGELOG.md index d98e18f9be..bf9929eef4 100644 --- a/packages/qa/http-conformance/CHANGELOG.md +++ b/packages/qa/http-conformance/CHANGELOG.md @@ -1,5 +1,11 @@ # @objectstack/http-conformance +## 0.0.4-rc.1 + +### Patch Changes + +- @objectstack/core@16.0.0-rc.1 + ## 0.0.4-rc.0 ### Patch Changes diff --git a/packages/qa/http-conformance/package.json b/packages/qa/http-conformance/package.json index 566c15c436..225f690e78 100644 --- a/packages/qa/http-conformance/package.json +++ b/packages/qa/http-conformance/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/http-conformance", - "version": "0.0.4-rc.0", + "version": "0.0.4-rc.1", "private": true, "license": "Apache-2.0", "description": "HTTP transport-port conformance gate (ADR-0076 D11/OQ#10, #2462) — a zero-dependency node:http reference implementation of IHttpServer plus a cross-adapter suite that boots the dispatcher bridge and REST generator on it AND on plugin-hono-server, pinning that the port stays free of framework-isms. Not published; validation instrument, not a product server.", diff --git a/packages/rest/CHANGELOG.md b/packages/rest/CHANGELOG.md index 0994f3cfab..d9f8521773 100644 --- a/packages/rest/CHANGELOG.md +++ b/packages/rest/CHANGELOG.md @@ -1,5 +1,35 @@ # @objectstack/rest +## 16.0.0-rc.1 + +### Minor Changes + +- bfa3c3f: **Broadcast a `transactionalBatch` capability bit in discovery so clients negotiate the atomic cross-object batch declaratively, instead of runtime-probing 404/405/501 (#3298).** + + The atomic cross-object batch endpoint (`POST {basePath}/batch`, #1604 / ADR-0034 item 4) and its typed SDK surface (`client.data.batchTransaction`, #3271) already shipped, but discovery never told a client whether a backend actually supports it. Consumers (notably ObjectUI's `ObjectStackAdapter`) had to _probe_: fire a `/batch`, read `404`/`405` (no route) or `501` (no runtime transaction), and only then fall back to non-atomic client-side simulation. That is "find out by calling", not capability negotiation — it cannot be decided at connect time and cannot serve as the "minimum backend supports `/batch`" gate that blocks hard-deleting the non-atomic fallback downstream. + + `WellKnownCapabilitiesSchema` gains a required `transactionalBatch: boolean`, and **every** discovery producer fills it honestly (`declared === enforced`), so it never becomes a declared-but-unpopulated bit: + + - **`@objectstack/metadata-protocol`** (`getDiscovery`) — reports whether the runtime engine can honour a transaction (`typeof engine.transaction === 'function'`). The `/batch` handler runs its ops inside `engine.transaction()`, which degrades to a non-atomic passthrough (or 501) without one. + - **`@objectstack/rest`** (`/discovery`) — ANDs the engine signal with whether it actually mounts the route (`api.enableBatch`), so a server with batch disabled reports `false` even on a transaction-capable engine (never advertise an endpoint that would 404). + - **`@objectstack/plugin-hono-server`** (standalone discovery) — reports `false`: this minimal surface registers CRUD only and does not mount `/batch` (that ships with `@objectstack/rest`). Under-reporting is the safe direction — a client keeps its correct-but-slower fallback rather than losing atomicity. + - **`@objectstack/client`** — already normalizes hierarchical `capabilities` to flat booleans, so `client.capabilities.transactionalBatch` is exposed (and now typed) for declarative consumers. + + The bit follows the existing capability semantics: `true` ⟺ the `/batch` route is mounted **and** the runtime can honour a transaction — the exact condition under which the endpoint returns `200` rather than `404`/`405`/`501`. Additive and behavior-preserving; only the discovery payload gains a field. + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/service-package@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/rest/package.json b/packages/rest/package.json index ad8c117aa5..f363dd3123 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/rest", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack REST API Server - automatic REST endpoint generation from protocol", "type": "module", diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index f594a6f39c..fe07ae48f7 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,73 @@ # @objectstack/runtime +## 16.0.0-rc.1 + +### Patch Changes + +- ee0a499: feat(i18n): localize collaboration notification titles and the storage objects; wire the notifications REST routes + + Three gaps behind one report (a `sys_file "repro.png" assigned to you` + notification that was English on an all-Chinese workspace, opened an English + detail page, and never cleared its unread state): + + - **plugin-audit** — the assignment (`collab.assignment`) and @mention + (`collab.mention`) bell titles were hardcoded English literals built from the + raw object API name. They now resolve through the i18n service with the same + key shapes as the activity summaries (framework#3039): new + `messages.assignedToYou` / `messages.mentionedYou` / + `messages.mentionedYouAnonymous` templates (en / zh-CN / ja-JP / es-ES), the + object named by its translated label (`objects.{name}.label` → authored def + label → API name), and the locale resolved for the **recipient** (they read + the bell), not the acting user. Every step stays best-effort: no locale / no + i18n / key miss degrades to the English literal — which now also prefers the + authored object label over the API name. + + - **service-storage** — `sys_file` / `sys_upload_session` had no translation + bundle at all, so the file detail page (labels, and the Pending Upload / + Committed / Deleted status pipeline) rendered English on every locale. The + service now ships its own ADR-0029 D8 bundle (en / zh-CN / ja-JP / es-ES, + `src/translations` + `scripts/i18n-extract.config.ts`) and contributes it via + `i18n.loadTranslations` on `kernel:ready`, matching service-messaging. + (`sys_attachment` stays in platform-objects' bundles pending the + storage-domain decomposition.) + + - **runtime** — the in-app notifications REST surface (`GET +/api/v1/notifications`, `POST /api/v1/notifications/read`, `POST +/api/v1/notifications/read/all`; ADR-0030) had its `handleNotification` + dispatch branch and discovery entry, but no `server.()` mount in + `dispatcher-plugin`, so only the cloud hosts' hono catch-all reached it — the + standalone / `os dev` server 404'd every request. That left mark-read with no + working endpoint (the console's direct `sys_notification_receipt` write is + rejected by ADR-0103's engine-owned gate), so unread notifications could never + clear. The three routes are now mounted explicitly, guarded by the + route-registration regression test. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [9d897b3] +- Updated dependencies [62a2117] +- Updated dependencies [674457a] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/rest@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/plugin-security@16.0.0-rc.1 + - @objectstack/metadata-core@16.0.0-rc.1 + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/metadata@16.0.0-rc.1 + - @objectstack/observability@16.0.0-rc.1 + - @objectstack/driver-memory@16.0.0-rc.1 + - @objectstack/driver-sql@16.0.0-rc.1 + - @objectstack/driver-sqlite-wasm@16.0.0-rc.1 + - @objectstack/plugin-auth@16.0.0-rc.1 + - @objectstack/service-cluster@16.0.0-rc.1 + - @objectstack/service-datasource@16.0.0-rc.1 + - @objectstack/service-i18n@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Major Changes diff --git a/packages/runtime/package.json b/packages/runtime/package.json index b717b3ef25..4db13a5d86 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/runtime", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack Core Runtime & Query Engine", "type": "module", diff --git a/packages/sdui-parser/CHANGELOG.md b/packages/sdui-parser/CHANGELOG.md index 24b7615fd1..df11e5cb5b 100644 --- a/packages/sdui-parser/CHANGELOG.md +++ b/packages/sdui-parser/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/sdui-parser +## 16.0.0-rc.1 + ## 16.0.0-rc.0 ## 15.1.1 diff --git a/packages/sdui-parser/package.json b/packages/sdui-parser/package.json index bbd2d4871d..e77ebd602a 100644 --- a/packages/sdui-parser/package.json +++ b/packages/sdui-parser/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/sdui-parser", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "ObjectStack constrained JSX-source → SDUI SchemaNode tree compiler (parse, never execute). Isomorphic, zero React. ADR-0080.", "main": "dist/index.js", diff --git a/packages/services/service-analytics/CHANGELOG.md b/packages/services/service-analytics/CHANGELOG.md index 5d9cc28a1c..e07fbefb80 100644 --- a/packages/services/service-analytics/CHANGELOG.md +++ b/packages/services/service-analytics/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog — @objectstack/service-analytics +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/services/service-analytics/package.json b/packages/services/service-analytics/package.json index aab8ce427e..04c2c697fb 100644 --- a/packages/services/service-analytics/package.json +++ b/packages/services/service-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-analytics", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Analytics Service for ObjectStack — implements IAnalyticsService with multi-driver strategy pattern (NativeSQL, ObjectQL, InMemory)", "type": "module", diff --git a/packages/services/service-automation/CHANGELOG.md b/packages/services/service-automation/CHANGELOG.md index 1c691beaa1..c7f2b6ed04 100644 --- a/packages/services/service-automation/CHANGELOG.md +++ b/packages/services/service-automation/CHANGELOG.md @@ -1,5 +1,69 @@ # @objectstack/service-automation +## 16.0.0-rc.1 + +### Patch Changes + +- b320158: feat(automation): publish configSchemas for the keyValue-capable nodes (flow designer parity, #3304) + + The `assignment`, `create_record` / `update_record` / `delete_record` / + `get_record`, and `screen` nodes shipped no `configSchema`, so the flow designer + had no server-driven form for them. Each descriptor now carries one that mirrors + the objectui hardcoded field group field-for-field: object references as `xRef`, + the screen repeater's `visibleWhen` as `xExpression: 'expression'`, and the + free-form maps (`fields` / `filter` / `assignments` / `defaults`) as JSON-Schema + open objects (`additionalProperties: true`, no fixed `properties`) — the shape + the designer's schema adapter renders with its flat keyValue editor. Values stay + fully permissive because real metadata carries operator objects (`{"$ne": null}`), + `{var}` templates, and non-string literals. + + Deliberately still schemaless (no online/offline divergence exists for a node + with no configSchema, and a partial schema would drop editors): `decision` + (virtual Target column derived from edges), `wait` (top-level `waitEventConfig`), + `script` (actionType-conditional form), `subflow` (top-level `timeoutMs`). + + Additive and backward-compatible: descriptor metadata only, no runtime behavior + change. Requires an objectui with the keyValue schema mapping (objectui #2708) + for the maps to render as structured editors; older designers keep their + hardcoded forms. + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +- f8c1b69: feat(automation): publish a configSchema for the `map` node (flow designer parity, #3304) + + The `map` (sequential multi-instance) node shipped no `configSchema`, so the flow + designer fell back to its hardcoded field group online and to raw Advanced-JSON + where that wasn't present. Its descriptor now carries a structured `configSchema` + that mirrors the objectui hardcoded `map` field group field-for-field — + `collection` (marked `xExpression: 'template'`, an `interpolate()` `{items}` + template, same as `loop.collection`), `flowName` + `itemObject` as typed + references (`xRef`), and `iteratorVariable` / `outputVariable` as plain text — so + the online (schema-driven) and offline forms match. + + `map` is the one previously-schemaless flow node whose fields are all scalars and + typed references, so it maps cleanly through objectui's `jsonSchemaToFlowFields` + with zero regression. The remaining schemaless nodes lean on editor kinds the + schema→fields adapter does not yet reproduce (`keyValue` maps, the decision + virtual `target` column, `wait`'s top-level block), and are deferred to #3304 + until that adapter is extended. Additive and backward-compatible: no runtime + behavior change; an older designer that ignores the schema is unaffected. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [7125007] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/formula@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/services/service-automation/package.json b/packages/services/service-automation/package.json index ea164bab20..41ecf0a6ae 100644 --- a/packages/services/service-automation/package.json +++ b/packages/services/service-automation/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-automation", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Automation Service for ObjectStack — implements IAutomationService with plugin-based DAG flow execution engine", "type": "module", diff --git a/packages/services/service-cache/CHANGELOG.md b/packages/services/service-cache/CHANGELOG.md index 4a5f3319a2..70f7ae2823 100644 --- a/packages/services/service-cache/CHANGELOG.md +++ b/packages/services/service-cache/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/service-cache +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/observability@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-cache/package.json b/packages/services/service-cache/package.json index e3e7c46dc8..89e7a96ac1 100644 --- a/packages/services/service-cache/package.json +++ b/packages/services/service-cache/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cache", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Cache Service for ObjectStack — implements ICacheService with in-memory and Redis adapters", "type": "module", diff --git a/packages/services/service-cluster-redis/CHANGELOG.md b/packages/services/service-cluster-redis/CHANGELOG.md index b24e98e53e..eed21db475 100644 --- a/packages/services/service-cluster-redis/CHANGELOG.md +++ b/packages/services/service-cluster-redis/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-cluster-redis +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/service-cluster@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-cluster-redis/package.json b/packages/services/service-cluster-redis/package.json index 84eae4a040..ecd962244a 100644 --- a/packages/services/service-cluster-redis/package.json +++ b/packages/services/service-cluster-redis/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cluster-redis", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Redis cluster driver for ObjectStack — implements IPubSub/ILock/IKV/ICounter against Redis using ioredis.", "type": "module", diff --git a/packages/services/service-cluster/CHANGELOG.md b/packages/services/service-cluster/CHANGELOG.md index a4f49712d8..35f4c346a4 100644 --- a/packages/services/service-cluster/CHANGELOG.md +++ b/packages/services/service-cluster/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-cluster +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-cluster/package.json b/packages/services/service-cluster/package.json index 6bdbd78a25..09b32e8ae3 100644 --- a/packages/services/service-cluster/package.json +++ b/packages/services/service-cluster/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cluster", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Cluster Service for ObjectStack — pluggable PubSub/Lock/KV/Counter primitives. Memory driver included; postgres/redis drivers ship separately.", "type": "module", diff --git a/packages/services/service-datasource/CHANGELOG.md b/packages/services/service-datasource/CHANGELOG.md index 3809e19b29..8d4d254a08 100644 --- a/packages/services/service-datasource/CHANGELOG.md +++ b/packages/services/service-datasource/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-external-datasource +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-datasource/package.json b/packages/services/service-datasource/package.json index 12f85d5c0d..3624b4fe36 100644 --- a/packages/services/service-datasource/package.json +++ b/packages/services/service-datasource/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-datasource", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "The datasource service (ADR-0015): external-table federation (introspect/draft/import/validate) + runtime UI datasource lifecycle (list/test/create/update/remove + REST routes). Open-source mechanism; the tier line falls on which ICryptoProvider / driver factory a host injects.", "type": "module", diff --git a/packages/services/service-i18n/CHANGELOG.md b/packages/services/service-i18n/CHANGELOG.md index 6e798a8be8..34f21c4b07 100644 --- a/packages/services/service-i18n/CHANGELOG.md +++ b/packages/services/service-i18n/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-i18n +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-i18n/package.json b/packages/services/service-i18n/package.json index 5864ac8f3f..fd4dd59293 100644 --- a/packages/services/service-i18n/package.json +++ b/packages/services/service-i18n/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-i18n", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "I18n Service for ObjectStack — implements II18nService with file-based locale loading", "type": "module", diff --git a/packages/services/service-job/CHANGELOG.md b/packages/services/service-job/CHANGELOG.md index c13e35320c..5375a8bff1 100644 --- a/packages/services/service-job/CHANGELOG.md +++ b/packages/services/service-job/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/service-job +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-job/package.json b/packages/services/service-job/package.json index 06899f1e71..ffec857dd9 100644 --- a/packages/services/service-job/package.json +++ b/packages/services/service-job/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-job", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Job Service for ObjectStack — implements IJobService with setInterval and cron scheduling", "type": "module", diff --git a/packages/services/service-knowledge/CHANGELOG.md b/packages/services/service-knowledge/CHANGELOG.md index 439718d689..2b90bbcef6 100644 --- a/packages/services/service-knowledge/CHANGELOG.md +++ b/packages/services/service-knowledge/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-knowledge +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-knowledge/package.json b/packages/services/service-knowledge/package.json index 9883e82507..edcba9edcb 100644 --- a/packages/services/service-knowledge/package.json +++ b/packages/services/service-knowledge/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-knowledge", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Knowledge Service for ObjectStack — orchestrator implementing IKnowledgeService over pluggable IKnowledgeAdapter backends (RAGFlow, LlamaIndex, Dify, in-memory).", "type": "module", diff --git a/packages/services/service-messaging/CHANGELOG.md b/packages/services/service-messaging/CHANGELOG.md index 99fdd7a9d4..08b2b84840 100644 --- a/packages/services/service-messaging/CHANGELOG.md +++ b/packages/services/service-messaging/CHANGELOG.md @@ -1,5 +1,25 @@ # @objectstack/service-messaging +## 16.0.0-rc.1 + +### Patch Changes + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-messaging/package.json b/packages/services/service-messaging/package.json index ccb3770dc3..362750c05d 100644 --- a/packages/services/service-messaging/package.json +++ b/packages/services/service-messaging/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-messaging", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Messaging Service for ObjectStack — outbound notification dispatch (ADR-0012). Ships the MessagingChannel registry, emit() fan-out, and the always-on inbox channel; other channels (email/webhook/push/IM) plug in.", "type": "module", diff --git a/packages/services/service-package/CHANGELOG.md b/packages/services/service-package/CHANGELOG.md index b1182d814c..01c90a2ec1 100644 --- a/packages/services/service-package/CHANGELOG.md +++ b/packages/services/service-package/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/service-package +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/metadata-core@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-package/package.json b/packages/services/service-package/package.json index 6ab61647da..2ac951ad9f 100644 --- a/packages/services/service-package/package.json +++ b/packages/services/service-package/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-package", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Package management service for ObjectStack — publish, install, and manage packages", "type": "module", diff --git a/packages/services/service-queue/CHANGELOG.md b/packages/services/service-queue/CHANGELOG.md index ac8e331a34..6c7e8178f0 100644 --- a/packages/services/service-queue/CHANGELOG.md +++ b/packages/services/service-queue/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/service-queue +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-queue/package.json b/packages/services/service-queue/package.json index 7222031b84..36a08d5961 100644 --- a/packages/services/service-queue/package.json +++ b/packages/services/service-queue/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-queue", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Queue Service for ObjectStack — implements IQueueService with in-memory and durable DB-backed (sys_job_queue) adapters", "type": "module", diff --git a/packages/services/service-realtime/CHANGELOG.md b/packages/services/service-realtime/CHANGELOG.md index b1ca418ab9..f6b127aa2b 100644 --- a/packages/services/service-realtime/CHANGELOG.md +++ b/packages/services/service-realtime/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/service-realtime +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-realtime/package.json b/packages/services/service-realtime/package.json index 009ca12a86..b11612e2a6 100644 --- a/packages/services/service-realtime/package.json +++ b/packages/services/service-realtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-realtime", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Realtime Service for ObjectStack — implements IRealtimeService with WebSocket and in-memory pub/sub", "type": "module", diff --git a/packages/services/service-settings/CHANGELOG.md b/packages/services/service-settings/CHANGELOG.md index 2c2a1ee7ae..ec54b6fea5 100644 --- a/packages/services/service-settings/CHANGELOG.md +++ b/packages/services/service-settings/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/service-settings +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/types@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-settings/package.json b/packages/services/service-settings/package.json index 5aed6194f4..2a3daf6544 100644 --- a/packages/services/service-settings/package.json +++ b/packages/services/service-settings/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-settings", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Settings service for ObjectStack — manifest registry + K/V resolver (OS_* env > Tenant > User > Default) + REST routes. See ADR-0007.", "type": "module", diff --git a/packages/services/service-sms/CHANGELOG.md b/packages/services/service-sms/CHANGELOG.md index 8ff498cf0d..2c7ae85349 100644 --- a/packages/services/service-sms/CHANGELOG.md +++ b/packages/services/service-sms/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-sms +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-sms/package.json b/packages/services/service-sms/package.json index 3b92aed3e3..856d9302c9 100644 --- a/packages/services/service-sms/package.json +++ b/packages/services/service-sms/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-sms", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "SMS service for ObjectStack — ISmsService + transport-pluggable outbound delivery (Aliyun / Twilio / log).", "main": "dist/index.js", diff --git a/packages/services/service-storage/CHANGELOG.md b/packages/services/service-storage/CHANGELOG.md index 3ec8c5b294..8252cd3b3f 100644 --- a/packages/services/service-storage/CHANGELOG.md +++ b/packages/services/service-storage/CHANGELOG.md @@ -1,5 +1,57 @@ # @objectstack/service-storage +## 16.0.0-rc.1 + +### Patch Changes + +- ee0a499: feat(i18n): localize collaboration notification titles and the storage objects; wire the notifications REST routes + + Three gaps behind one report (a `sys_file "repro.png" assigned to you` + notification that was English on an all-Chinese workspace, opened an English + detail page, and never cleared its unread state): + + - **plugin-audit** — the assignment (`collab.assignment`) and @mention + (`collab.mention`) bell titles were hardcoded English literals built from the + raw object API name. They now resolve through the i18n service with the same + key shapes as the activity summaries (framework#3039): new + `messages.assignedToYou` / `messages.mentionedYou` / + `messages.mentionedYouAnonymous` templates (en / zh-CN / ja-JP / es-ES), the + object named by its translated label (`objects.{name}.label` → authored def + label → API name), and the locale resolved for the **recipient** (they read + the bell), not the acting user. Every step stays best-effort: no locale / no + i18n / key miss degrades to the English literal — which now also prefers the + authored object label over the API name. + + - **service-storage** — `sys_file` / `sys_upload_session` had no translation + bundle at all, so the file detail page (labels, and the Pending Upload / + Committed / Deleted status pipeline) rendered English on every locale. The + service now ships its own ADR-0029 D8 bundle (en / zh-CN / ja-JP / es-ES, + `src/translations` + `scripts/i18n-extract.config.ts`) and contributes it via + `i18n.loadTranslations` on `kernel:ready`, matching service-messaging. + (`sys_attachment` stays in platform-objects' bundles pending the + storage-domain decomposition.) + + - **runtime** — the in-app notifications REST surface (`GET +/api/v1/notifications`, `POST /api/v1/notifications/read`, `POST +/api/v1/notifications/read/all`; ADR-0030) had its `handleNotification` + dispatch branch and discovery entry, but no `server.()` mount in + `dispatcher-plugin`, so only the cloud hosts' hono catch-all reached it — the + standalone / `os dev` server 404'd every request. That left mark-read with no + working endpoint (the console's direct `sys_notification_receipt` write is + rejected by ADR-0103's engine-owned gate), so unread notifications could never + clear. The three routes are now mounted explicitly, guarded by the + route-registration regression test. + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/platform-objects@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/observability@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/services/service-storage/package.json b/packages/services/service-storage/package.json index 19ac93f0ca..cd58e2e8f1 100644 --- a/packages/services/service-storage/package.json +++ b/packages/services/service-storage/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-storage", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Storage Service for ObjectStack — implements IStorageService with local filesystem and S3 adapter skeleton", "type": "module", diff --git a/packages/spec/CHANGELOG.md b/packages/spec/CHANGELOG.md index d4bba11e3f..1c2a4ec3e0 100644 --- a/packages/spec/CHANGELOG.md +++ b/packages/spec/CHANGELOG.md @@ -1,5 +1,98 @@ # @objectstack/spec +## 16.0.0-rc.1 + +### Minor Changes + +- 6289ec3: feat(i18n): translation slot for action `resultDialog` copy — the one-shot secret-reveal dialogs are now localizable + + The post-success `resultDialog` (temporary passwords, 2FA backup codes, OAuth + client secrets) had no slot in the translation protocol, so its title / + description / acknowledge button / field labels always rendered the hardcoded + English metadata literals even on fully-translated locales. + + - **spec.** `_actions.` (object + object-first node) and + `globalActions.` gain an optional `resultDialog` translation node + (`ActionResultDialogTranslationSchema`): `title`, `description`, + `acknowledge`, and `fields` keyed by the **literal** result-field path + (e.g. `"user.email"` — keys may contain dots; resolvers index the record + directly, never split on `.`). New `resolveActionResultDialog` overlay + resolver, wired into `translateAction` for API-boundary translation. + - **cli.** `os i18n extract` emits the new `resultDialog.*` keys (title / + description / acknowledge / `fields.` for labelled fields), so + coverage and skeleton generation see them. + - **platform-objects.** en / zh-CN / ja-JP / es-ES bundles ship the + resultDialog copy for all six shipped dialogs: `sys_user.create_user`, + `sys_user.set_user_password`, `sys_two_factor.enable_two_factor`, + `sys_two_factor.regenerate_backup_codes`, + `sys_oauth_application.create_oauth_application`, and + `sys_oauth_application.rotate_client_secret`. + + Client-side rendering lands in objectui (`actionResultDialog` resolver in + `@object-ui/i18n` + result-dialog handlers). Purely additive — untranslated + locales keep falling back to the metadata literals. + +- 8efa395: feat(approvals): server-computed `viewer` capability for precise decision-action gating + + `getRequest` / `listRequests` now attach a per-viewer block — + `viewer: { can_act, is_submitter }` — computed from the caller's context + (`ApprovalRequestRow.viewer`): + + - `can_act` — the caller is a _current pending approver_ (their user id is in the + request's resolved `pending_approvers` while it is still `pending`). This is + the same check the decision methods authorize with, so it already reflects + position/team/manager resolution — strictly more accurate than a client-side + identity guess. + - `is_submitter` — the caller submitted the request. + + The declared decision actions on `sys_approval_request` now gate on it: approver + actions (approve/reject/reassign/send-back/request-info) use + `record.viewer.can_act`; submitter levers (remind/recall/resubmit) use + `record.viewer.is_submitter`. Previously approver actions only trimmed the + non-pending case, so a submitter viewing their own pending request saw buttons + they couldn't use (the backend 403'd); a position-addressed approver could be + wrongly hidden by the old client heuristic. Where `viewer` is absent (a row + surfaced outside a service read with a user context), the predicate fails closed. + +- bfa3c3f: **Broadcast a `transactionalBatch` capability bit in discovery so clients negotiate the atomic cross-object batch declaratively, instead of runtime-probing 404/405/501 (#3298).** + + The atomic cross-object batch endpoint (`POST {basePath}/batch`, #1604 / ADR-0034 item 4) and its typed SDK surface (`client.data.batchTransaction`, #3271) already shipped, but discovery never told a client whether a backend actually supports it. Consumers (notably ObjectUI's `ObjectStackAdapter`) had to _probe_: fire a `/batch`, read `404`/`405` (no route) or `501` (no runtime transaction), and only then fall back to non-atomic client-side simulation. That is "find out by calling", not capability negotiation — it cannot be decided at connect time and cannot serve as the "minimum backend supports `/batch`" gate that blocks hard-deleting the non-atomic fallback downstream. + + `WellKnownCapabilitiesSchema` gains a required `transactionalBatch: boolean`, and **every** discovery producer fills it honestly (`declared === enforced`), so it never becomes a declared-but-unpopulated bit: + + - **`@objectstack/metadata-protocol`** (`getDiscovery`) — reports whether the runtime engine can honour a transaction (`typeof engine.transaction === 'function'`). The `/batch` handler runs its ops inside `engine.transaction()`, which degrades to a non-atomic passthrough (or 501) without one. + - **`@objectstack/rest`** (`/discovery`) — ANDs the engine signal with whether it actually mounts the route (`api.enableBatch`), so a server with batch disabled reports `false` even on a transaction-capable engine (never advertise an endpoint that would 404). + - **`@objectstack/plugin-hono-server`** (standalone discovery) — reports `false`: this minimal surface registers CRUD only and does not mount `/batch` (that ships with `@objectstack/rest`). Under-reporting is the safe direction — a client keeps its correct-but-slower fallback rather than losing atomicity. + - **`@objectstack/client`** — already normalizes hierarchical `capabilities` to flat booleans, so `client.capabilities.transactionalBatch` is exposed (and now typed) for declarative consumers. + + The bit follows the existing capability semantics: `true` ⟺ the `/batch` route is mounted **and** the runtime can honour a transaction — the exact condition under which the endpoint returns `200` rather than `404`/`405`/`501`. Additive and behavior-preserving; only the discovery payload gains a field. + +- 62a2117: **Split the overloaded `managedBy: 'system'` bucket with an explicit `engine-owned` value (ADR-0103 addendum, #3343).** ADR-0103 deferred the enum split ("revisitable later as a rename") because a new `managedBy` value would fall through to the fully-editable `platform` default on deployed Console clients. Both reasons against it are now retired — the server-side write guard / `apiMethods` reconciliation / `/me/permissions` clamp make that fallthrough cosmetic (the write is rejected regardless of what the client renders), and objectui#2712 closed the UI union — so v16 lands it, **additively**. + + - **New enum value `engine-owned`** with the same all-locked default affordance row as `system` (`create/import/edit/delete: false`, `exportCsv: true`). It joins `ENGINE_OWNED_BUCKETS` (the engine write guard) and `GUARDED_WRITE_BUCKETS` (the `/me/permissions` clamp); the guard, `reconcileManagedApiMethods`, and the clamp mechanisms are unchanged — `engine-owned` is an explicit member of the set they already covered by resolved affordance. + - **20 objects relabelled `system → engine-owned`** — the ones the engine owns end to end and that declared no write-opening `userActions` (the metadata store, jobs, approval runtime rows, sharing rows, `sys_automation_run`, the messaging delivery/receipt pipeline, `sys_secret`, settings). One-line, behaviour-identical per object. + - **8 admin/user-writable objects keep `managedBy: 'system'`** (the RBAC link tables, `sys_user_preference`, `sys_approval_delegation`, the messaging config grids) — `system` now reads as "engine-managed schema, writable via `userActions`". + + Behaviour-, enforcement- and wire-identical: resolved affordances, the guard verdict, the 405 `apiMethods` reconciliation, and the permissions clamp are the same before and after — this is a self-documenting relabel, not a policy change. No data migration (`managedBy` is schema metadata) and no code branches on the `'system'` literal. Retiring the overloaded `system` entirely (moving the 8 writable objects to a dedicated bucket) is a breaking rename deferred to v17. + +- 06ff734: feat(spec)!: remove deprecated `aiStudio`/`aiSeat` capability aliases (#3308) + + **BREAKING** (shipped as minor per the launch-window convention). The one-cycle + deprecation window from #3265 is over: the legacy camelCase `requires` spellings + `aiStudio`/`aiSeat` are no longer canonicalized to `ai-studio`/`ai-seat` — they + are now plain unknown tokens, rejected by `defineStack` like any other typo. + + - Removed exports `DEPRECATED_PLATFORM_CAPABILITY_ALIASES` and + `canonicalizePlatformCapability` from `@objectstack/spec`; `isKnownPlatformCapability` + no longer canonicalizes. + - `defineStack` no longer rewrites aliases (the `canonicalizeStackRequires` pass + is gone); the serve resolver no longer canonicalizes raw-artifact `requires`. + + Migration: use the canonical kebab-case tokens `ai-studio` / `ai-seat`. All + first-party configs were migrated in #862/#863; only stacks still carrying the + legacy spelling are affected. Cloud's `objectos-runtime` (pinned to an older + framework) follows on its next `.framework-sha` bump. + ## 16.0.0-rc.0 ### Major Changes diff --git a/packages/spec/package.json b/packages/spec/package.json index 23c01b4fcb..9df62e44fd 100644 --- a/packages/spec/package.json +++ b/packages/spec/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/spec", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "description": "ObjectStack Protocol & Specification - TypeScript Interfaces, JSON Schemas, and Convention Configurations", "license": "Apache-2.0", "main": "dist/index.js", diff --git a/packages/triggers/trigger-api/CHANGELOG.md b/packages/triggers/trigger-api/CHANGELOG.md index 8bbd0d0e76..bc5c97a17c 100644 --- a/packages/triggers/trigger-api/CHANGELOG.md +++ b/packages/triggers/trigger-api/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/trigger-api +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/triggers/trigger-api/package.json b/packages/triggers/trigger-api/package.json index 8c86415f1f..cd694c0b32 100644 --- a/packages/triggers/trigger-api/package.json +++ b/packages/triggers/trigger-api/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/trigger-api", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Inbound HTTP/webhook flow trigger for ObjectStack — per-flow HMAC-verified endpoints with queue-backed ingestion (ADR-0041)", "main": "dist/index.js", diff --git a/packages/triggers/trigger-record-change/CHANGELOG.md b/packages/triggers/trigger-record-change/CHANGELOG.md index aa9d9ba15b..9f56416a57 100644 --- a/packages/triggers/trigger-record-change/CHANGELOG.md +++ b/packages/triggers/trigger-record-change/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/plugin-trigger-record-change +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/triggers/trigger-record-change/package.json b/packages/triggers/trigger-record-change/package.json index 8d0fe4eb47..a2291d4f37 100644 --- a/packages/triggers/trigger-record-change/package.json +++ b/packages/triggers/trigger-record-change/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/trigger-record-change", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Record-change flow trigger for ObjectStack — auto-launches flows on object insert/update/delete via ObjectQL lifecycle hooks (ADR-0018)", "main": "dist/index.js", diff --git a/packages/triggers/trigger-schedule/CHANGELOG.md b/packages/triggers/trigger-schedule/CHANGELOG.md index e191354fd9..892816292a 100644 --- a/packages/triggers/trigger-schedule/CHANGELOG.md +++ b/packages/triggers/trigger-schedule/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/plugin-trigger-schedule +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/triggers/trigger-schedule/package.json b/packages/triggers/trigger-schedule/package.json index efc11a4282..b0425e08b5 100644 --- a/packages/triggers/trigger-schedule/package.json +++ b/packages/triggers/trigger-schedule/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/trigger-schedule", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Schedule flow trigger for ObjectStack — auto-launches flows on a cron/interval/once schedule via the IJobService (ADR-0018)", "main": "dist/index.js", diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 5f62000865..cecdabc2ad 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/types +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [62a2117] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Minor Changes diff --git a/packages/types/package.json b/packages/types/package.json index ac8d3de921..202ed89421 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/types", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Shared interfaces describing the ObjectStack Runtime environment", "main": "dist/index.js", diff --git a/packages/verify/CHANGELOG.md b/packages/verify/CHANGELOG.md index e1236f4b6d..fe93f7c963 100644 --- a/packages/verify/CHANGELOG.md +++ b/packages/verify/CHANGELOG.md @@ -1,5 +1,34 @@ # @objectstack/verify +## 16.0.0-rc.1 + +### Patch Changes + +- Updated dependencies [6289ec3] +- Updated dependencies [8efa395] +- Updated dependencies [bfa3c3f] +- Updated dependencies [b320158] +- Updated dependencies [ee0a499] +- Updated dependencies [9d897b3] +- Updated dependencies [62a2117] +- Updated dependencies [f8c1b69] +- Updated dependencies [674457a] +- Updated dependencies [06ff734] + - @objectstack/spec@16.0.0-rc.1 + - @objectstack/rest@16.0.0-rc.1 + - @objectstack/plugin-hono-server@16.0.0-rc.1 + - @objectstack/service-automation@16.0.0-rc.1 + - @objectstack/runtime@16.0.0-rc.1 + - @objectstack/plugin-security@16.0.0-rc.1 + - @objectstack/plugin-sharing@16.0.0-rc.1 + - @objectstack/objectql@16.0.0-rc.1 + - @objectstack/core@16.0.0-rc.1 + - @objectstack/driver-sqlite-wasm@16.0.0-rc.1 + - @objectstack/plugin-auth@16.0.0-rc.1 + - @objectstack/service-analytics@16.0.0-rc.1 + - @objectstack/service-datasource@16.0.0-rc.1 + - @objectstack/service-settings@16.0.0-rc.1 + ## 16.0.0-rc.0 ### Patch Changes diff --git a/packages/verify/package.json b/packages/verify/package.json index b5d6586df7..2ac6e71b55 100644 --- a/packages/verify/package.json +++ b/packages/verify/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/verify", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "license": "Apache-2.0", "description": "Boot any ObjectStack app in-process and verify it through the real HTTP stack — auto-derived CRUD round-trip fidelity plus the cross-owner RLS invariant. Catches runtime regressions that static checks miss.", "type": "module", diff --git a/packages/vscode-objectstack/CHANGELOG.md b/packages/vscode-objectstack/CHANGELOG.md index 7cab9cc19e..664a6e8721 100644 --- a/packages/vscode-objectstack/CHANGELOG.md +++ b/packages/vscode-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # objectstack-vscode +## 16.0.0-rc.1 + ## 16.0.0-rc.0 ## 15.1.1 diff --git a/packages/vscode-objectstack/package.json b/packages/vscode-objectstack/package.json index 802487f4bb..7579a932f1 100644 --- a/packages/vscode-objectstack/package.json +++ b/packages/vscode-objectstack/package.json @@ -2,7 +2,7 @@ "name": "objectstack-vscode", "displayName": "ObjectStack", "description": "ObjectStack Protocol — Autocomplete, validation, and inline diagnostics for .object.ts, .view.ts, and objectstack.config.ts files", - "version": "16.0.0-rc.0", + "version": "16.0.0-rc.1", "publisher": "objectstack", "license": "Apache-2.0", "repository": {