From d0ae9b64720d4a8cc3c3d959dddeb199ea949465 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 04:16:10 +0000 Subject: [PATCH] chore: version packages --- .changeset/adr-0018-m3-http-notify.md | 36 ---- .../adr-0018-m5-webhooks-shared-outbox.md | 32 ---- .changeset/audit-tar-override.md | 4 - .changeset/bpmn-construct-mapping.md | 25 --- .changeset/docs-adr0031-control-flow.md | 15 -- .changeset/enforce-validation-rules-1475.md | 40 ----- .changeset/fix-dev-seed-admin-in-process.md | 29 ---- .changeset/fix-docs-mdx-escape.md | 5 - .changeset/fix-sqlite-wasm-tx-export-1494.md | 13 -- .changeset/fix-sys-user-unique-validation.md | 17 -- .../local-crypto-provider-fail-loud-1507.md | 38 ---- .changeset/notification-dispatcher-test.md | 4 - .changeset/notification-rest-inbox-surface.md | 36 ---- .changeset/print-seeded-admin-banner.md | 21 --- .changeset/redis-wiring-test-stabilize.md | 4 - .changeset/showcase-validation-examples.md | 4 - .changeset/structured-loop-container.md | 26 --- .changeset/structured-parallel-block.md | 21 --- .changeset/structured-try-catch.md | 24 --- apps/account/CHANGELOG.md | 2 + apps/account/package.json | 2 +- examples/app-crm/CHANGELOG.md | 15 ++ examples/app-crm/package.json | 2 +- examples/app-showcase/CHANGELOG.md | 17 ++ examples/app-showcase/package.json | 2 +- examples/app-todo/CHANGELOG.md | 23 +++ examples/app-todo/package.json | 2 +- packages/adapters/express/CHANGELOG.md | 7 + packages/adapters/express/package.json | 2 +- packages/adapters/fastify/CHANGELOG.md | 7 + packages/adapters/fastify/package.json | 2 +- packages/adapters/hono/CHANGELOG.md | 9 + packages/adapters/hono/package.json | 2 +- packages/adapters/nestjs/CHANGELOG.md | 7 + packages/adapters/nestjs/package.json | 2 +- packages/adapters/nextjs/CHANGELOG.md | 7 + packages/adapters/nextjs/package.json | 2 +- packages/adapters/nuxt/CHANGELOG.md | 7 + packages/adapters/nuxt/package.json | 2 +- packages/adapters/sveltekit/CHANGELOG.md | 7 + packages/adapters/sveltekit/package.json | 2 +- packages/cli/CHANGELOG.md | 135 +++++++++++++++ packages/cli/package.json | 2 +- packages/client-react/CHANGELOG.md | 15 ++ packages/client-react/package.json | 2 +- packages/client/CHANGELOG.md | 14 ++ packages/client/package.json | 2 +- .../connectors/connector-mcp/CHANGELOG.md | 14 ++ .../connectors/connector-mcp/package.json | 2 +- .../connectors/connector-openapi/CHANGELOG.md | 14 ++ .../connectors/connector-openapi/package.json | 2 +- .../connectors/connector-rest/CHANGELOG.md | 14 ++ .../connectors/connector-rest/package.json | 2 +- .../connectors/connector-slack/CHANGELOG.md | 14 ++ .../connectors/connector-slack/package.json | 2 +- packages/console/CHANGELOG.md | 2 + packages/console/package.json | 2 +- packages/core/CHANGELOG.md | 13 ++ packages/core/package.json | 2 +- packages/create-objectstack/CHANGELOG.md | 2 + packages/create-objectstack/package.json | 2 +- packages/formula/CHANGELOG.md | 13 ++ packages/formula/package.json | 2 +- packages/metadata-core/CHANGELOG.md | 2 + packages/metadata-core/package.json | 2 +- packages/metadata-fs/CHANGELOG.md | 6 + packages/metadata-fs/package.json | 2 +- packages/metadata/CHANGELOG.md | 19 ++ packages/metadata/package.json | 2 +- packages/objectql/CHANGELOG.md | 55 ++++++ packages/objectql/package.json | 2 +- packages/observability/CHANGELOG.md | 13 ++ packages/observability/package.json | 2 +- packages/platform-objects/CHANGELOG.md | 27 +++ packages/platform-objects/package.json | 2 +- packages/plugins/driver-memory/CHANGELOG.md | 14 ++ packages/plugins/driver-memory/package.json | 2 +- packages/plugins/driver-mongodb/CHANGELOG.md | 14 ++ packages/plugins/driver-mongodb/package.json | 2 +- packages/plugins/driver-sql/CHANGELOG.md | 14 ++ packages/plugins/driver-sql/package.json | 2 +- .../plugins/driver-sqlite-wasm/CHANGELOG.md | 25 +++ .../plugins/driver-sqlite-wasm/package.json | 2 +- packages/plugins/embedder-openai/CHANGELOG.md | 13 ++ packages/plugins/embedder-openai/package.json | 2 +- .../plugins/knowledge-memory/CHANGELOG.md | 15 ++ .../plugins/knowledge-memory/package.json | 2 +- .../plugins/knowledge-ragflow/CHANGELOG.md | 15 ++ .../plugins/knowledge-ragflow/package.json | 2 +- .../plugins/plugin-approvals/CHANGELOG.md | 18 ++ .../plugins/plugin-approvals/package.json | 2 +- packages/plugins/plugin-audit/CHANGELOG.md | 16 ++ packages/plugins/plugin-audit/package.json | 2 +- packages/plugins/plugin-auth/CHANGELOG.md | 58 +++++++ packages/plugins/plugin-auth/package.json | 2 +- packages/plugins/plugin-dev/CHANGELOG.md | 51 ++++++ packages/plugins/plugin-dev/package.json | 2 +- packages/plugins/plugin-email/CHANGELOG.md | 16 ++ packages/plugins/plugin-email/package.json | 2 +- .../plugins/plugin-hono-server/CHANGELOG.md | 15 ++ .../plugins/plugin-hono-server/package.json | 2 +- .../plugins/plugin-mcp-server/CHANGELOG.md | 15 ++ .../plugins/plugin-mcp-server/package.json | 2 +- packages/plugins/plugin-msw/CHANGELOG.md | 18 ++ packages/plugins/plugin-msw/package.json | 2 +- .../plugins/plugin-org-scoping/CHANGELOG.md | 16 ++ .../plugins/plugin-org-scoping/package.json | 2 +- packages/plugins/plugin-reports/CHANGELOG.md | 16 ++ packages/plugins/plugin-reports/package.json | 2 +- packages/plugins/plugin-security/CHANGELOG.md | 16 ++ packages/plugins/plugin-security/package.json | 2 +- packages/plugins/plugin-sharing/CHANGELOG.md | 17 ++ packages/plugins/plugin-sharing/package.json | 2 +- .../plugin-trigger-record-change/CHANGELOG.md | 14 ++ .../plugin-trigger-record-change/package.json | 2 +- .../plugin-trigger-schedule/CHANGELOG.md | 14 ++ .../plugin-trigger-schedule/package.json | 2 +- packages/plugins/plugin-webhooks/CHANGELOG.md | 47 +++++ packages/plugins/plugin-webhooks/package.json | 2 +- packages/rest/CHANGELOG.md | 15 ++ packages/rest/package.json | 2 +- packages/runtime/CHANGELOG.md | 65 +++++++ packages/runtime/package.json | 2 +- packages/services/service-ai/CHANGELOG.md | 16 ++ packages/services/service-ai/package.json | 2 +- .../services/service-analytics/CHANGELOG.md | 14 ++ .../services/service-analytics/package.json | 2 +- .../services/service-automation/CHANGELOG.md | 109 ++++++++++++ .../services/service-automation/package.json | 2 +- packages/services/service-cache/CHANGELOG.md | 15 ++ packages/services/service-cache/package.json | 2 +- .../service-cluster-redis/CHANGELOG.md | 14 ++ .../service-cluster-redis/package.json | 2 +- .../services/service-cluster/CHANGELOG.md | 14 ++ .../services/service-cluster/package.json | 2 +- .../services/service-datasource/CHANGELOG.md | 17 ++ .../services/service-datasource/package.json | 14 +- packages/services/service-feed/CHANGELOG.md | 14 ++ packages/services/service-feed/package.json | 2 +- packages/services/service-i18n/CHANGELOG.md | 14 ++ packages/services/service-i18n/package.json | 2 +- packages/services/service-job/CHANGELOG.md | 16 ++ packages/services/service-job/package.json | 2 +- .../services/service-knowledge/CHANGELOG.md | 14 ++ .../services/service-knowledge/package.json | 2 +- .../services/service-messaging/CHANGELOG.md | 107 ++++++++++++ .../services/service-messaging/package.json | 2 +- .../services/service-package/CHANGELOG.md | 14 ++ .../services/service-package/package.json | 2 +- packages/services/service-queue/CHANGELOG.md | 16 ++ packages/services/service-queue/package.json | 2 +- .../services/service-realtime/CHANGELOG.md | 16 ++ .../services/service-realtime/package.json | 2 +- .../services/service-settings/CHANGELOG.md | 52 ++++++ .../services/service-settings/package.json | 2 +- .../services/service-storage/CHANGELOG.md | 15 ++ .../services/service-storage/package.json | 2 +- packages/spec/CHANGELOG.md | 163 ++++++++++++++++++ packages/spec/package.json | 2 +- packages/types/CHANGELOG.md | 13 ++ packages/types/package.json | 2 +- packages/vscode-objectstack/CHANGELOG.md | 2 + packages/vscode-objectstack/package.json | 2 +- 163 files changed, 1753 insertions(+), 469 deletions(-) delete mode 100644 .changeset/adr-0018-m3-http-notify.md delete mode 100644 .changeset/adr-0018-m5-webhooks-shared-outbox.md delete mode 100644 .changeset/audit-tar-override.md delete mode 100644 .changeset/bpmn-construct-mapping.md delete mode 100644 .changeset/docs-adr0031-control-flow.md delete mode 100644 .changeset/enforce-validation-rules-1475.md delete mode 100644 .changeset/fix-dev-seed-admin-in-process.md delete mode 100644 .changeset/fix-docs-mdx-escape.md delete mode 100644 .changeset/fix-sqlite-wasm-tx-export-1494.md delete mode 100644 .changeset/fix-sys-user-unique-validation.md delete mode 100644 .changeset/local-crypto-provider-fail-loud-1507.md delete mode 100644 .changeset/notification-dispatcher-test.md delete mode 100644 .changeset/notification-rest-inbox-surface.md delete mode 100644 .changeset/print-seeded-admin-banner.md delete mode 100644 .changeset/redis-wiring-test-stabilize.md delete mode 100644 .changeset/showcase-validation-examples.md delete mode 100644 .changeset/structured-loop-container.md delete mode 100644 .changeset/structured-parallel-block.md delete mode 100644 .changeset/structured-try-catch.md diff --git a/.changeset/adr-0018-m3-http-notify.md b/.changeset/adr-0018-m3-http-notify.md deleted file mode 100644 index db43c79d4..000000000 --- a/.changeset/adr-0018-m3-http-notify.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -"@objectstack/service-messaging": minor -"@objectstack/service-automation": minor -"@objectstack/spec": minor ---- - -ADR-0018 M3: unified `http` / `notify` executors backed by a generic HTTP outbox. - -Promotes a reliable outbound-HTTP delivery outbox into `service-messaging` (the -raw-callout counterpart to the notification outbox) and routes the Flow `http` -node through it — closing the "`http_request` is a bare `fetch()` with no retry" -gap. The five divergent outbound verbs collapse onto canonical `http` / `notify`. - -**`@objectstack/service-messaging` (additive):** - -- `IHttpOutbox` / `HttpDelivery` generic raw-callout shape - (`source` / `refId` / `dedupKey` / `label` / `signingSecret`), `SqlHttpOutbox` - over a new `sys_http_delivery` object, `MemoryHttpOutbox`, `HttpDispatcher` - (per-partition cluster lock, claim/ack/retry/dead-letter), and a shared - `sendOnce` + 7-step jittered retry schedule. -- `MessagingService` gains `setHttpOutbox()` / `isHttpDeliveryReady()` / - `enqueueHttp()`; the plugin wires the outbox + dispatcher at `kernel:ready`. - -**`@objectstack/service-automation`:** - -- Canonical `http` executor — `durable: true` enqueues onto the messaging HTTP - outbox (retry/dead-letter); otherwise an inline `fetch()` preserving - `http_request`'s request/response semantics. -- `engine.registerNodeAlias()` — registers a delegating executor + a - `deprecated` / `aliasOf` descriptor. `http_request` / `http_call` / `webhook` - are now deprecated aliases of `http`; existing flows keep running. -- `notify` descriptor marked `needsOutbox` (its delivery is outbox-backed). - -**`@objectstack/spec`:** `flow.zod` adds `http` to the builtin node-type seed set. - -`plugin-webhooks` cut-over to the shared outbox is a deliberate follow-up. diff --git a/.changeset/adr-0018-m5-webhooks-shared-outbox.md b/.changeset/adr-0018-m5-webhooks-shared-outbox.md deleted file mode 100644 index 2c0922910..000000000 --- a/.changeset/adr-0018-m5-webhooks-shared-outbox.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -"@objectstack/plugin-webhooks": major -"@objectstack/service-messaging": minor ---- - -ADR-0018 M3 (Phase 5): `plugin-webhooks` now delivers through the shared -`service-messaging` HTTP outbox instead of its own. - -The webhook delivery substrate — durable outbox, cluster-coordinated dispatcher, -retry/backoff/dead-letter, retention — is removed from `plugin-webhooks` and -replaced by the generic `sys_http_delivery` outbox + `HttpDispatcher` in -`@objectstack/service-messaging`. Webhooks keep only their domain concerns: the -`sys_webhook` config object, the `AutoEnqueuer` (now enqueues `source: 'webhook'` -rows via `messaging.enqueueHttp`), and the redeliver admin endpoint (now backed -by `messaging.redeliverHttp`). - -**`@objectstack/service-messaging`:** `MessagingService` gains `redeliverHttp(id)` -and `listHttp(filter)` over the HTTP outbox. - -**`@objectstack/plugin-webhooks` — BREAKING:** - -- Now **requires** `MessagingServicePlugin` (declared as a plugin dependency). -- Removed exports: `WebhookDispatcher`, `MemoryWebhookOutbox`, `SqlWebhookOutbox` - (and the `./sql` subpath), `DeliveryRetentionSweeper`, `hashPartition`, - `sendOnce` / `classifyAttempt` / `nextRetryDelayMs`, and the `IWebhookOutbox` / - `WebhookDelivery` / `EnqueueInput` / `AckResult` / `RedeliverError` types. -- Removed the `sys_webhook_delivery` object — webhook deliveries are now rows in - `sys_http_delivery` (`source = 'webhook'`). The Setup nav points there. -- `AutoEnqueuer`'s constructor takes an `HttpEnqueueFn` instead of an - `IWebhookOutbox`. -- `WebhookOutboxPluginOptions` reduced to `{ autoEnqueue }` (dispatcher / outbox / - retention / nodeId options removed — those now live on `MessagingServicePlugin`). diff --git a/.changeset/audit-tar-override.md b/.changeset/audit-tar-override.md deleted file mode 100644 index e73c68064..000000000 --- a/.changeset/audit-tar-override.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -chore(security): override transitive `node-tar` to `>=7.5.11`, clearing 6 high-severity advisories (GHSA-34x7-hfp2-rc4v, -8qq5-rm4j-mr97, -83g3-92jg-28cx, -qffp-2rhf-9h96, -9ppj-qmqm-q256, -r6q2-hw4h-h46w) that failed the Validate Dependencies gate. Lockfile-only; no published package code change. diff --git a/.changeset/bpmn-construct-mapping.md b/.changeset/bpmn-construct-mapping.md deleted file mode 100644 index bcb175fcf..000000000 --- a/.changeset/bpmn-construct-mapping.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -"@objectstack/spec": minor ---- - -feat(automation): BPMN ⇄ structured-construct model mapping (ADR-0031, task 5) - -Add the semantic bridge between the structured control-flow constructs (the -native model) and the BPMN gateway/boundary/multi-instance vocabulary (kept for -interop only), at the **flow-model level** — independent of any wire format -(`automation/bpmn-mapping.ts`): - -- `exportConstructsToBpmn(flow)` expands each construct into its BPMN - interchange shape — `parallel` → `parallel_gateway` (AND-split) + branch - regions + `join_gateway` (AND-join); `try_catch` → the protected activity + - an error `boundary_event` + the handler region; `loop` → its body marked with - multi-instance loop characteristics — so external BPM tools see a well-formed - BPMN graph. Each expansion's anchor carries an `osConstruct` extension marker. -- `importBpmnToConstructs(flow)` folds that BPMN shape back into the constructs: - exact reconstruction from the `osConstruct` marker (so `construct → BPMN → - construct` is identity), and a best-effort structural fold of foreign - `parallel_gateway`/`join_gateway` pairs, with diagnostics for shapes it can't - safely fold. - -BPMN 2.0 **XML** (de)serialization layers on top of this mapping and remains a -plugin concern (per `bpmn-interop.zod.ts`), out of scope here. diff --git a/.changeset/docs-adr0031-control-flow.md b/.changeset/docs-adr0031-control-flow.md deleted file mode 100644 index e4ae16dd1..000000000 --- a/.changeset/docs-adr0031-control-flow.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@objectstack/spec": patch ---- - -docs(automation): document ADR-0031 control-flow constructs; fix dangling reference card - -- **guide**: `content/docs/guides/metadata/flow.mdx` now documents the structured - control-flow constructs — the `loop` container, `parallel` block (implicit - join), and `try_catch` (try/catch/retry) — with config examples and the - region/DAG model. The Node Types table is updated accordingly. -- **doc generator**: `build-docs.ts` now cards only reference pages that were - actually generated. Control-flow's schemas embed CEL-expression transforms - (like `Flow`/`FlowEdge`) and so have no JSON-Schema page; the index previously - carded every `.zod.ts`, producing a dangling "Control Flow" 404 link. Cards - now align with `meta.json` (generated pages only). diff --git a/.changeset/enforce-validation-rules-1475.md b/.changeset/enforce-validation-rules-1475.md deleted file mode 100644 index e586b73b3..000000000 --- a/.changeset/enforce-validation-rules-1475.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -"@objectstack/objectql": minor -"@objectstack/spec": minor ---- - -Enforce every declared validation-rule type on the write path; trim the three that can't be (#1475). - -The `validations` union advertised nine rule types but only three (`state_machine`, -`cross_field`, `script`) ran on insert/update — the other six were accepted by the -schema yet silently did nothing. This closes that gap on both sides: implement the -synchronous types, and trim the ones that don't belong in a write-path rule. - -**`@objectstack/objectql` (additive):** the rule evaluator now enforces three more -types, all deterministic, synchronous, side-effect-free predicates over one record: - -- `format` — a field value against a `regex` and/or a named format - (`email` / `url` / `phone` / `json`). Runs only when the write touches the field - and the value is non-empty; a malformed regex fails open. -- `json_schema` — a JSON field validated against a JSON Schema via `ajv` (compiled - result memoised per schema). Accepts a parsed object or a JSON string; an - unparseable string is itself a violation; an uncompilable schema fails open. -- `conditional` — evaluates `when`, then recurses into `then` / `otherwise`. The - nested rule supplies the message; the outer conditional's `severity` decides - blocking. `needsPriorRecord` now recurses into conditional branches. - -Adds `ajv` as a dependency and three error codes (`invalid_format`, `invalid_json`, -`json_schema_violation`). - -**`@objectstack/spec` (breaking for unused declarations):** removes the -`unique`, `async`, and `custom` validation-rule variants (and the -`UniquenessValidationSchema` / `AsyncValidationSchema` / `CustomValidatorSchema` -exports). They were never enforced and each needs I/O or a handler model a -write-path rule must not carry. Use the layer that already does each correctly: -uniqueness → a unique index (`ObjectSchema.indexes`, `partial` for scope) or -field-level `unique: true`; async/remote → the client form layer; custom code → -a `beforeInsert` / `beforeUpdate` lifecycle hook. Field-level `unique: true` is -unaffected. - -`examples/app-showcase` demonstrates and verifies each newly-enforced type. See the -ADR-0020 addendum for the rationale. diff --git a/.changeset/fix-dev-seed-admin-in-process.md b/.changeset/fix-dev-seed-admin-in-process.md deleted file mode 100644 index 8ffc875e3..000000000 --- a/.changeset/fix-dev-seed-admin-in-process.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -"@objectstack/plugin-auth": patch -"@objectstack/cli": patch -"@objectstack/plugin-dev": patch ---- - -fix(dev): seed the dev admin in-process and fix the port-drift seed failure. - -`os dev` (and `pnpm dev:showcase`) seeded the admin over HTTP against a -hard-coded `localhost:3000`. In dev, `serve` auto-shifts off a busy port, so -the seed POST hit the wrong server (or nothing) and the running instance never -got an admin. A second, divergent seed in `plugin-dev` inserted a -credential-less `sys_user` row that could not log in. - -Consolidate to a single in-process seed: - -- **`@objectstack/plugin-auth`** — `maybeSeedDevAdmin()` runs on `kernel:ready` - and creates `admin@objectos.ai` / `admin123` through better-auth's real - `signUpEmail` pipeline (hashed credential), so the account is loginable; - `plugin-security` then promotes it to platform admin. Empty-DB only - (excludes the system service account), idempotent, never overwrites an - existing account. Hard-gated to `NODE_ENV=development`; opt out with - `OS_SEED_ADMIN=0`. -- **`@objectstack/cli`** — removed the HTTP seed; `--seed-admin` now passes - `OS_SEED_ADMIN[_EMAIL|_PASSWORD]` to the serve child. `serve` publishes its - actually-bound port over IPC and to a `runtime..json` state file under - `OS_HOME`. -- **`@objectstack/plugin-dev`** — removed the credential-less raw insert; - `seedAdminUser` maps to the unified `OS_SEED_ADMIN` toggle. diff --git a/.changeset/fix-docs-mdx-escape.md b/.changeset/fix-docs-mdx-escape.md deleted file mode 100644 index 82dab30b3..000000000 --- a/.changeset/fix-docs-mdx-escape.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@objectstack/spec": patch ---- - -Fix the docs generator (`build-docs.ts`) leaking an unmatched `<` / `{` into generated MDX, which broke the `apps/docs` Turbopack build (e.g. a SemVer range `">=4.0 <5"` in a `.describe()` string was read as the start of a JSX tag). Unmatched openers are now emitted as HTML entities (`<` / `{`); union-variant descriptions also go through the escaper. diff --git a/.changeset/fix-sqlite-wasm-tx-export-1494.md b/.changeset/fix-sqlite-wasm-tx-export-1494.md deleted file mode 100644 index 8925dac3a..000000000 --- a/.changeset/fix-sqlite-wasm-tx-export-1494.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"@objectstack/driver-sqlite-wasm": patch ---- - -Fix `COMMIT; - cannot commit - no transaction is active` under `persist: 'on-write'` (#1494). - -sql.js's `Database.export()` closes and reopens the database (it has no in-place -serialize), which rolls back any open transaction. The fire-and-forget flush -triggered after a write inside a Knex transaction (e.g. the autonumber sequence -`BEGIN…COMMIT`) could therefore abort that transaction, leaving the trailing -`COMMIT` to fail. The connection is now transaction-aware: `flush()` is deferred -while a transaction is open and runs once it fully closes, so committed data is -still persisted without aborting in-flight transactions. diff --git a/.changeset/fix-sys-user-unique-validation.md b/.changeset/fix-sys-user-unique-validation.md deleted file mode 100644 index 610b7ce0b..000000000 --- a/.changeset/fix-sys-user-unique-validation.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@objectstack/platform-objects': patch ---- - -Fix `sys_user` load failure after the validation-rule type trim (#1485) - -#1485 trimmed the unenforceable validation-rule types (`unique`, `async`, -`custom`) from the `ValidationRuleSchema` discriminated union, but `sys_user` -still declared an `email_unique` rule with `type: 'unique'`. Loading the object -then threw a `ZodError` ("Invalid discriminator value … at validations[0].type"), -failing `platform-objects.test.ts` and turning `main` red. - -The rule was redundant: `sys_user` already declares a unique index on `email` -(`indexes: [{ fields: ['email'], unique: true }]`), and the user table is -managed by better-auth which enforces email uniqueness at the source. Removed -the unenforceable validation rule; uniqueness remains enforced by the index. -No other object uses a trimmed validation type. diff --git a/.changeset/local-crypto-provider-fail-loud-1507.md b/.changeset/local-crypto-provider-fail-loud-1507.md deleted file mode 100644 index 5f2975fc1..000000000 --- a/.changeset/local-crypto-provider-fail-loud-1507.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -"@objectstack/service-settings": minor -"@objectstack/cli": patch -"@objectstack/spec": patch ---- - -Fail loud instead of silently minting an ephemeral encryption key; ship a persistent env-master-key provider as the default (#1507). - -The default `ICryptoProvider` backs every secret-at-rest in the platform — -encrypted settings (`sys_setting.value_enc`), ObjectQL `secret` fields, and -runtime datasource credentials. Its key resolution previously fell back, -**silently**, to a fresh per-process `randomBytes(32)` key (or auto-minted a -new on-disk key on every boot) when no stable key was available. In an -ephemeral-FS container or a multi-node cluster, each restart / each node then -encrypts under a different key, and every previously-written `sys_secret` value -becomes undecryptable. The failure was invisible at encrypt and boot time and -only surfaced later as "all my saved passwords / API keys / DB credentials -fail to decrypt". - -- **Renamed `InMemoryCryptoProvider` → `LocalCryptoProvider`.** The old name - implied an ephemeral key when the provider in fact persists one. - `InMemoryCryptoProvider` stays as a deprecated alias for backward - compatibility. -- **Added `OS_SECRET_KEY`** as the canonical production master key (32-byte - hex or base64), the documented production default. `OS_DEV_CRYPTO_KEY` - remains the dev convenience key. -- **Fail-loud in production.** When `NODE_ENV=production` and no stable key - source (env var or a pre-existing persisted file) is available, the provider - now throws an actionable error at construction instead of generating a key — - turning silent data-loss into a config error at boot. It never auto-mints a - key in production. Development and test keep the ergonomic fallback - (persisted dev key / ephemeral test key). -- `serve` surfaces the production-key error verbatim and refuses to wire an - unstable provider for `secret` fields. - -KMS / Vault providers (managed custody, per-tenant keys, automatic rotation) -remain future/enterprise plug-ins behind the same `ICryptoProvider` seam; -"your stored secret is still there after a reboot" stays open-source. diff --git a/.changeset/notification-dispatcher-test.md b/.changeset/notification-dispatcher-test.md deleted file mode 100644 index 9963d5767..000000000 --- a/.changeset/notification-dispatcher-test.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Test-only: dispatcher integration coverage for the ADR-0030 /notifications surface. diff --git a/.changeset/notification-rest-inbox-surface.md b/.changeset/notification-rest-inbox-surface.md deleted file mode 100644 index b3ce168f5..000000000 --- a/.changeset/notification-rest-inbox-surface.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -'@objectstack/service-messaging': minor -'@objectstack/runtime': minor ---- - -Implement the `/api/v1/notifications` REST surface (ADR-0030) - -The notification REST routes (`GET /notifications`, `POST /notifications/read`, -`POST /notifications/read/all`) were declared in the spec but never had a -server-side handler — no plugin registered the `notification` core service, so -the routes were never advertised in discovery and `client.notifications.*` -calls 404'd. (The Console bell works today only because it bypasses these -endpoints and reads the inbox via the generic data API.) - -This wires the surface end-to-end against the ADR-0030 L5 model: - -- **`MessagingService`** gains an inbox read API: `listInbox(userId, opts)` - reads `sys_inbox_message` joined with `sys_notification_receipt` for - read-state (a message is unread until its event has a `read`/`clicked`/ - `dismissed` receipt); `markRead(userId, ids)` and `markAllRead(userId)` - upsert the receipt to `read`, keyed `(notification_id, user_id, - channel:'inbox')` — updating the existing `delivered` receipt in place, - inserting only when absent. No reliance on the re-modeled `sys_notification` - L2 event (which carries no recipient/read columns). -- **`MessagingServicePlugin`** now also registers the messaging service under - the `notification` core service slot, so the dispatcher resolves + advertises - the routes. The legacy `INotificationService.send()` abstraction is unused and - unconsumed. -- **`HttpDispatcher`** gains `handleNotification` + a `/notifications` dispatch - branch: it takes the authenticated user from the execution context and maps - list / mark-read / mark-all-read to the service. Responses match the spec - schemas (`{ notifications, unreadCount }`, `{ success, readCount }`). - -Pairs with the objectui SDK consumer repoint (`useClientNotifications` → -`markRead`/`registerDevice` signatures). Device registration and preference -endpoints remain out of scope (unimplemented as before). diff --git a/.changeset/print-seeded-admin-banner.md b/.changeset/print-seeded-admin-banner.md deleted file mode 100644 index 6a048a64d..000000000 --- a/.changeset/print-seeded-admin-banner.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -"@objectstack/plugin-auth": patch -"@objectstack/cli": patch ---- - -fix(dev): surface the seeded dev-admin credentials in the `serve` startup banner. - -When the runtime seeds the dev admin on an empty DB, the confirmation was -emitted via `ctx.logger` during `runtime.start()` — inside serve's boot-quiet -window — so it was swallowed and never reached the console. plugin-auth now -records the seed result on the `auth` service and `serve` prints it in the -ready banner (after stdout is restored), e.g.: - -``` - 🔑 Dev admin: admin@objectos.ai / admin123 - seeded on empty DB · dev only — do not use in production -``` - -Shown only when an admin was actually seeded this boot (empty DB) — never on a -DB that already had a user, so stale credentials are never displayed. Visible -in both `serve --dev` and `os dev` (the child's stdout is inherited). diff --git a/.changeset/redis-wiring-test-stabilize.md b/.changeset/redis-wiring-test-stabilize.md deleted file mode 100644 index 9b94a4ce4..000000000 --- a/.changeset/redis-wiring-test-stabilize.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Test-only: stabilize the Redis driver wiring contract test (hoist imports out of the timed test body to fix a flaky 5s timeout on slow CI). diff --git a/.changeset/showcase-validation-examples.md b/.changeset/showcase-validation-examples.md deleted file mode 100644 index b576d65c7..000000000 --- a/.changeset/showcase-validation-examples.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -docs(showcase): demonstrate the `format` named-format branch and `conditional` `otherwise` on the Account example. Example-only (private package) — no package release. diff --git a/.changeset/structured-loop-container.md b/.changeset/structured-loop-container.md deleted file mode 100644 index c52e729dc..000000000 --- a/.changeset/structured-loop-container.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -"@objectstack/spec": minor -"@objectstack/service-automation": minor ---- - -feat(automation): structured control-flow constructs (ADR-0031) — loop container - -Adopt structured control-flow as the native, AI-authored flow model (ADR-0031), -choosing representation **(B) nested sub-structure**: containers carry their body -as a self-contained single-entry/single-exit region in `config`. - -- **spec**: new `automation/control-flow.zod.ts` defining the `loop` container - (`config.body`), `parallel` block (`config.branches[]`, implicit join), and - `try/catch/retry` (`config.try`/`config.catch`/`config.retry`) configs, plus - region well-formedness analysis (`analyzeRegion`, `findRegionEntry`) and - `validateControlFlow` (single-entry/single-exit, acyclic; bounded loop). -- **engine**: `registerFlow()` now rejects malformed control-flow regions before - a flow can run; new `AutomationEngine.runRegion()` executes a body region in - the enclosing variable scope without touching the shared DAG traversal. -- **loop executor**: replaces the no-op `loop` stub with a real iteration - container — binds the iterator/index variables and runs the body once per item - under a hard max-iteration guard. Legacy flat-graph loops (no `config.body`) - keep working — the construct is additive. - -Parallel-block and try/catch *engine execution* and BPMN interop mapping remain -follow-ups (issue #1479, tasks 3–5). diff --git a/.changeset/structured-parallel-block.md b/.changeset/structured-parallel-block.md deleted file mode 100644 index 947965db3..000000000 --- a/.changeset/structured-parallel-block.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -"@objectstack/service-automation": minor ---- - -feat(automation): structured parallel block (ADR-0031, task 3) - -Implement engine execution for the `parallel` block — a structured construct -with an **implicit join** (ADR-0031 §Decision 2). The `parallel` node declares N -branch regions in `config.branches[]`; the executor runs them concurrently in -the enclosing variable scope (via `AutomationEngine.runRegion`) and continues -once when all branches complete — no author-visible split/join gateway. - -- New `builtin/parallel-node.ts` executor (registered as a built-in). -- Branch failure fails the block (surfaced as a node failure → fault edge/error - handling); durable pause inside a branch is a clear error. -- Well-formedness (≥2 branches, single-entry/single-exit regions) is already - enforced at `registerFlow()` by `validateControlFlow` (shipped with the loop - container). - -Showcase `FanOutNotifyFlow` demonstrates the parallel block. Try/catch execution -and BPMN interop mapping remain follow-ups (#1479 tasks 4–5). diff --git a/.changeset/structured-try-catch.md b/.changeset/structured-try-catch.md deleted file mode 100644 index 9ea9f12d8..000000000 --- a/.changeset/structured-try-catch.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -"@objectstack/service-automation": minor ---- - -feat(automation): structured try/catch/retry block (ADR-0031, task 4) - -Implement engine execution for the `try_catch` construct — structured error -handling (ADR-0031 §Decision 3). The node runs a protected `try` region; on -failure it retries with exponential backoff (`config.retry`), and if it still -fails the optional `catch` region runs with the caught error bound to -`config.errorVariable` (default `$error`). Both regions execute in the enclosing -variable scope via `AutomationEngine.runRegion`. - -- New `builtin/try-catch-node.ts` executor (registered as a built-in). -- `try` success (incl. a successful retry) → node succeeds; `catch` handling a - failure → node succeeds; no `catch` / failing `catch` → node fails to the - flow's fault edge / error handling. -- Well-formedness (single-entry/single-exit `try`/`catch` regions) is already - enforced at `registerFlow()` by `validateControlFlow` (shipped with the loop - container). - -Showcase `ResilientSyncFlow` demonstrates the construct. This completes the -native control-flow execution trio (loop / parallel / try-catch); BPMN interop -mapping remains a follow-up (#1479 task 5). diff --git a/apps/account/CHANGELOG.md b/apps/account/CHANGELOG.md index 7910940e4..02bc17f2f 100644 --- a/apps/account/CHANGELOG.md +++ b/apps/account/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/account +## 8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/apps/account/package.json b/apps/account/package.json index a928113b2..0bedb0f14 100644 --- a/apps/account/package.json +++ b/apps/account/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/account", - "version": "7.5.0", + "version": "8.0.0", "description": "ObjectStack Account - End-user account & organization self-service portal", "license": "Apache-2.0", "type": "module", diff --git a/examples/app-crm/CHANGELOG.md b/examples/app-crm/CHANGELOG.md index b4897ad48..e25887246 100644 --- a/examples/app-crm/CHANGELOG.md +++ b/examples/app-crm/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/example-crm +## 4.0.34 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [8e539cc] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/runtime@8.0.0 + ## 4.0.33 ### Patch Changes diff --git a/examples/app-crm/package.json b/examples/app-crm/package.json index cdb88dca2..ccaa3480a 100644 --- a/examples/app-crm/package.json +++ b/examples/app-crm/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-crm", - "version": "4.0.33", + "version": "4.0.34", "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 f464ffd73..145f75308 100644 --- a/examples/app-showcase/CHANGELOG.md +++ b/examples/app-showcase/CHANGELOG.md @@ -1,5 +1,22 @@ # @objectstack/example-showcase +## 0.1.4 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [8e539cc] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/runtime@8.0.0 + - @objectstack/connector-rest@8.0.0 + - @objectstack/connector-slack@8.0.0 + ## 0.1.3 ### Patch Changes diff --git a/examples/app-showcase/package.json b/examples/app-showcase/package.json index b2629426a..31b170d13 100644 --- a/examples/app-showcase/package.json +++ b/examples/app-showcase/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-showcase", - "version": "0.1.3", + "version": "0.1.4", "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, AI). 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 85ec8f685..3aeb76728 100644 --- a/examples/app-todo/CHANGELOG.md +++ b/examples/app-todo/CHANGELOG.md @@ -1,5 +1,28 @@ # @objectstack/example-todo +## 4.0.34 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [be20aa4] +- Updated dependencies [55866f5] +- Updated dependencies [8e539cc] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/objectql@8.0.0 + - @objectstack/driver-sqlite-wasm@8.0.0 + - @objectstack/runtime@8.0.0 + - @objectstack/client@8.0.0 + - @objectstack/metadata@8.0.0 + - @objectstack/knowledge-memory@8.0.0 + - @objectstack/service-ai@8.0.0 + - @objectstack/service-knowledge@8.0.0 + ## 4.0.33 ### Patch Changes diff --git a/examples/app-todo/package.json b/examples/app-todo/package.json index 7e3d75246..646cea934 100644 --- a/examples/app-todo/package.json +++ b/examples/app-todo/package.json @@ -1,6 +1,6 @@ { "name": "@example/app-todo", - "version": "4.0.33", + "version": "4.0.34", "description": "Example Todo App using ObjectStack Protocol", "license": "Apache-2.0", "private": true, diff --git a/packages/adapters/express/CHANGELOG.md b/packages/adapters/express/CHANGELOG.md index c0594ac6d..71bdebc99 100644 --- a/packages/adapters/express/CHANGELOG.md +++ b/packages/adapters/express/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/express +## 8.0.0 + +### Patch Changes + +- Updated dependencies [8e539cc] + - @objectstack/runtime@8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/adapters/express/package.json b/packages/adapters/express/package.json index d9b761b77..11bebc2e0 100644 --- a/packages/adapters/express/package.json +++ b/packages/adapters/express/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/express", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/fastify/CHANGELOG.md b/packages/adapters/fastify/CHANGELOG.md index 531d6510d..2674ddb58 100644 --- a/packages/adapters/fastify/CHANGELOG.md +++ b/packages/adapters/fastify/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/fastify +## 8.0.0 + +### Patch Changes + +- Updated dependencies [8e539cc] + - @objectstack/runtime@8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/adapters/fastify/package.json b/packages/adapters/fastify/package.json index 5519e8356..0d60a7c36 100644 --- a/packages/adapters/fastify/package.json +++ b/packages/adapters/fastify/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/fastify", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/hono/CHANGELOG.md b/packages/adapters/hono/CHANGELOG.md index 12ab0cf18..6895df8e9 100644 --- a/packages/adapters/hono/CHANGELOG.md +++ b/packages/adapters/hono/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/hono +## 8.0.0 + +### Patch Changes + +- Updated dependencies [8e539cc] + - @objectstack/runtime@8.0.0 + - @objectstack/plugin-hono-server@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/adapters/hono/package.json b/packages/adapters/hono/package.json index 98c4020aa..606ffb8e3 100644 --- a/packages/adapters/hono/package.json +++ b/packages/adapters/hono/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/hono", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nestjs/CHANGELOG.md b/packages/adapters/nestjs/CHANGELOG.md index c210ec284..8984ab264 100644 --- a/packages/adapters/nestjs/CHANGELOG.md +++ b/packages/adapters/nestjs/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/nestjs +## 8.0.0 + +### Patch Changes + +- Updated dependencies [8e539cc] + - @objectstack/runtime@8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/adapters/nestjs/package.json b/packages/adapters/nestjs/package.json index b66d1d081..cbffa0f1f 100644 --- a/packages/adapters/nestjs/package.json +++ b/packages/adapters/nestjs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nestjs", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nextjs/CHANGELOG.md b/packages/adapters/nextjs/CHANGELOG.md index 87e9054ea..a19a1c48f 100644 --- a/packages/adapters/nextjs/CHANGELOG.md +++ b/packages/adapters/nextjs/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/nextjs +## 8.0.0 + +### Patch Changes + +- Updated dependencies [8e539cc] + - @objectstack/runtime@8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/adapters/nextjs/package.json b/packages/adapters/nextjs/package.json index dadc98e0a..fbbc8d904 100644 --- a/packages/adapters/nextjs/package.json +++ b/packages/adapters/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nextjs", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nuxt/CHANGELOG.md b/packages/adapters/nuxt/CHANGELOG.md index b251ca3ae..e4b08b9d4 100644 --- a/packages/adapters/nuxt/CHANGELOG.md +++ b/packages/adapters/nuxt/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/nuxt +## 8.0.0 + +### Patch Changes + +- Updated dependencies [8e539cc] + - @objectstack/runtime@8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/adapters/nuxt/package.json b/packages/adapters/nuxt/package.json index 81ab72fd5..275bad3bd 100644 --- a/packages/adapters/nuxt/package.json +++ b/packages/adapters/nuxt/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nuxt", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/sveltekit/CHANGELOG.md b/packages/adapters/sveltekit/CHANGELOG.md index 399de4561..5235c71c9 100644 --- a/packages/adapters/sveltekit/CHANGELOG.md +++ b/packages/adapters/sveltekit/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/sveltekit +## 8.0.0 + +### Patch Changes + +- Updated dependencies [8e539cc] + - @objectstack/runtime@8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/adapters/sveltekit/package.json b/packages/adapters/sveltekit/package.json index dcacf7e24..1a5d5eef4 100644 --- a/packages/adapters/sveltekit/package.json +++ b/packages/adapters/sveltekit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/sveltekit", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 695829a2c..862b46608 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,140 @@ # @objectstack/cli +## 8.0.0 + +### Patch Changes + +- 8c01eea: fix(dev): seed the dev admin in-process and fix the port-drift seed failure. + + `os dev` (and `pnpm dev:showcase`) seeded the admin over HTTP against a + hard-coded `localhost:3000`. In dev, `serve` auto-shifts off a busy port, so + the seed POST hit the wrong server (or nothing) and the running instance never + got an admin. A second, divergent seed in `plugin-dev` inserted a + credential-less `sys_user` row that could not log in. + + Consolidate to a single in-process seed: + + - **`@objectstack/plugin-auth`** — `maybeSeedDevAdmin()` runs on `kernel:ready` + and creates `admin@objectos.ai` / `admin123` through better-auth's real + `signUpEmail` pipeline (hashed credential), so the account is loginable; + `plugin-security` then promotes it to platform admin. Empty-DB only + (excludes the system service account), idempotent, never overwrites an + existing account. Hard-gated to `NODE_ENV=development`; opt out with + `OS_SEED_ADMIN=0`. + - **`@objectstack/cli`** — removed the HTTP seed; `--seed-admin` now passes + `OS_SEED_ADMIN[_EMAIL|_PASSWORD]` to the serve child. `serve` publishes its + actually-bound port over IPC and to a `runtime..json` state file under + `OS_HOME`. + - **`@objectstack/plugin-dev`** — removed the credential-less raw insert; + `seedAdminUser` maps to the unified `OS_SEED_ADMIN` toggle. + +- 55866f5: Fail loud instead of silently minting an ephemeral encryption key; ship a persistent env-master-key provider as the default (#1507). + + The default `ICryptoProvider` backs every secret-at-rest in the platform — + encrypted settings (`sys_setting.value_enc`), ObjectQL `secret` fields, and + runtime datasource credentials. Its key resolution previously fell back, + **silently**, to a fresh per-process `randomBytes(32)` key (or auto-minted a + new on-disk key on every boot) when no stable key was available. In an + ephemeral-FS container or a multi-node cluster, each restart / each node then + encrypts under a different key, and every previously-written `sys_secret` value + becomes undecryptable. The failure was invisible at encrypt and boot time and + only surfaced later as "all my saved passwords / API keys / DB credentials + fail to decrypt". + + - **Renamed `InMemoryCryptoProvider` → `LocalCryptoProvider`.** The old name + implied an ephemeral key when the provider in fact persists one. + `InMemoryCryptoProvider` stays as a deprecated alias for backward + compatibility. + - **Added `OS_SECRET_KEY`** as the canonical production master key (32-byte + hex or base64), the documented production default. `OS_DEV_CRYPTO_KEY` + remains the dev convenience key. + - **Fail-loud in production.** When `NODE_ENV=production` and no stable key + source (env var or a pre-existing persisted file) is available, the provider + now throws an actionable error at construction instead of generating a key — + turning silent data-loss into a config error at boot. It never auto-mints a + key in production. Development and test keep the ergonomic fallback + (persisted dev key / ephemeral test key). + - `serve` surfaces the production-key error verbatim and refuses to wire an + unstable provider for `secret` fields. + + KMS / Vault providers (managed custody, per-tenant keys, automatic rotation) + remain future/enterprise plug-ins behind the same `ICryptoProvider` seam; + "your stored secret is still there after a reboot" stays open-source. + +- b7a4f14: fix(dev): surface the seeded dev-admin credentials in the `serve` startup banner. + + When the runtime seeds the dev admin on an empty DB, the confirmation was + emitted via `ctx.logger` during `runtime.start()` — inside serve's boot-quiet + window — so it was swallowed and never reached the console. plugin-auth now + records the seed result on the `auth` service and `serve` prints it in the + ready banner (after stdout is restored), e.g.: + + ``` + 🔑 Dev admin: admin@objectos.ai / admin123 + seeded on empty DB · dev only — do not use in production + ``` + + Shown only when an admin was actually seeded this boot (empty DB) — never on a + DB that already had a user, so stale credentials are never displayed. Visible + in both `serve --dev` and `os dev` (the child's stdout is inherited). + +- Updated dependencies [955d4c8] +- Updated dependencies [11905fa] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8c01eea] +- Updated dependencies [8fa1e7f] +- Updated dependencies [be20aa4] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [8e539cc] +- Updated dependencies [b7a4f14] +- Updated dependencies [60f9c45] +- Updated dependencies [f06a6a5] +- Updated dependencies [4ee139d] + - @objectstack/service-messaging@8.0.0 + - @objectstack/service-automation@8.0.0 + - @objectstack/spec@8.0.0 + - @objectstack/plugin-webhooks@8.0.0 + - @objectstack/objectql@8.0.0 + - @objectstack/plugin-auth@8.0.0 + - @objectstack/driver-sqlite-wasm@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/service-settings@8.0.0 + - @objectstack/runtime@8.0.0 + - @objectstack/plugin-approvals@8.0.0 + - @objectstack/account@8.0.0 + - @objectstack/client@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/observability@8.0.0 + - @objectstack/driver-memory@8.0.0 + - @objectstack/driver-mongodb@8.0.0 + - @objectstack/driver-sql@8.0.0 + - @objectstack/plugin-audit@8.0.0 + - @objectstack/plugin-email@8.0.0 + - @objectstack/plugin-hono-server@8.0.0 + - @objectstack/plugin-mcp-server@8.0.0 + - @objectstack/plugin-org-scoping@8.0.0 + - @objectstack/plugin-reports@8.0.0 + - @objectstack/plugin-security@8.0.0 + - @objectstack/plugin-sharing@8.0.0 + - @objectstack/plugin-trigger-record-change@8.0.0 + - @objectstack/plugin-trigger-schedule@8.0.0 + - @objectstack/rest@8.0.0 + - @objectstack/service-ai@8.0.0 + - @objectstack/service-analytics@8.0.0 + - @objectstack/service-cache@8.0.0 + - @objectstack/service-datasource@8.0.0 + - @objectstack/service-feed@8.0.0 + - @objectstack/service-job@8.0.0 + - @objectstack/service-package@8.0.0 + - @objectstack/service-queue@8.0.0 + - @objectstack/service-realtime@8.0.0 + - @objectstack/service-storage@8.0.0 + - @objectstack/types@8.0.0 + - @objectstack/console@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 2f8d8a541..d3ac1e103 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cli", - "version": "7.5.0", + "version": "8.0.0", "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 24d5723c1..417485d1d 100644 --- a/packages/client-react/CHANGELOG.md +++ b/packages/client-react/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/client-react +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/client@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/client-react/package.json b/packages/client-react/package.json index 2a0d73984..a32b85b2f 100644 --- a/packages/client-react/package.json +++ b/packages/client-react/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client-react", - "version": "7.5.0", + "version": "8.0.0", "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 8c7a4b078..13257d53a 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/client +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/client/package.json b/packages/client/package.json index 292dd05b3..235820187 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "Official Client SDK for ObjectStack Protocol", "main": "dist/index.js", diff --git a/packages/connectors/connector-mcp/CHANGELOG.md b/packages/connectors/connector-mcp/CHANGELOG.md index 261f3a4e6..41baac604 100644 --- a/packages/connectors/connector-mcp/CHANGELOG.md +++ b/packages/connectors/connector-mcp/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/connector-mcp +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/connectors/connector-mcp/package.json b/packages/connectors/connector-mcp/package.json index 28bf44406..805dff543 100644 --- a/packages/connectors/connector-mcp/package.json +++ b/packages/connectors/connector-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-mcp", - "version": "7.5.0", + "version": "8.0.0", "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 1af273dfc..08536ed86 100644 --- a/packages/connectors/connector-openapi/CHANGELOG.md +++ b/packages/connectors/connector-openapi/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/connector-openapi +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/connectors/connector-openapi/package.json b/packages/connectors/connector-openapi/package.json index 7f15a1817..e9f93d1e7 100644 --- a/packages/connectors/connector-openapi/package.json +++ b/packages/connectors/connector-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-openapi", - "version": "7.5.0", + "version": "8.0.0", "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 b89718de2..86b5e9194 100644 --- a/packages/connectors/connector-rest/CHANGELOG.md +++ b/packages/connectors/connector-rest/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/connector-rest +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/connectors/connector-rest/package.json b/packages/connectors/connector-rest/package.json index 28bee42ba..d8849730e 100644 --- a/packages/connectors/connector-rest/package.json +++ b/packages/connectors/connector-rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-rest", - "version": "7.5.0", + "version": "8.0.0", "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 121cea94f..2a4ca1356 100644 --- a/packages/connectors/connector-slack/CHANGELOG.md +++ b/packages/connectors/connector-slack/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/connector-slack +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/connectors/connector-slack/package.json b/packages/connectors/connector-slack/package.json index 703c1a3ec..5d6da5526 100644 --- a/packages/connectors/connector-slack/package.json +++ b/packages/connectors/connector-slack/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-slack", - "version": "7.5.0", + "version": "8.0.0", "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 cc2cfbd0a..a7c602887 100644 --- a/packages/console/CHANGELOG.md +++ b/packages/console/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/console +## 8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/console/package.json b/packages/console/package.json index cbb640192..82d0752ce 100644 --- a/packages/console/package.json +++ b/packages/console/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/console", - "version": "7.5.0", + "version": "8.0.0", "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 0e511a597..c9ccf4f59 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/core +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 078d6e76c..d2603104d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/core", - "version": "7.5.0", + "version": "8.0.0", "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 4e8d2e329..dbd4076e2 100644 --- a/packages/create-objectstack/CHANGELOG.md +++ b/packages/create-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # create-objectstack +## 8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/create-objectstack/package.json b/packages/create-objectstack/package.json index 095b1f1ab..5d8665f86 100644 --- a/packages/create-objectstack/package.json +++ b/packages/create-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "create-objectstack", - "version": "7.5.0", + "version": "8.0.0", "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 edfe5a81e..bb5f42b74 100644 --- a/packages/formula/CHANGELOG.md +++ b/packages/formula/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/formula +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/formula/package.json b/packages/formula/package.json index 8b9ceb01c..12fda58e0 100644 --- a/packages/formula/package.json +++ b/packages/formula/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/formula", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "ObjectStack canonical expression engine — CEL (cel-js) + ObjectStack stdlib + dialect registry", "main": "dist/index.js", diff --git a/packages/metadata-core/CHANGELOG.md b/packages/metadata-core/CHANGELOG.md index e9f706cea..cced59280 100644 --- a/packages/metadata-core/CHANGELOG.md +++ b/packages/metadata-core/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/metadata-core +## 8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/metadata-core/package.json b/packages/metadata-core/package.json index d50737b2d..c5f8d31d0 100644 --- a/packages/metadata-core/package.json +++ b/packages/metadata-core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-core", - "version": "7.5.0", + "version": "8.0.0", "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 e429bd10f..cfe118b4c 100644 --- a/packages/metadata-fs/CHANGELOG.md +++ b/packages/metadata-fs/CHANGELOG.md @@ -1,5 +1,11 @@ # @objectstack/metadata-fs +## 8.0.0 + +### Patch Changes + +- @objectstack/metadata-core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/metadata-fs/package.json b/packages/metadata-fs/package.json index e3ff78226..33402615e 100644 --- a/packages/metadata-fs/package.json +++ b/packages/metadata-fs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-fs", - "version": "7.5.0", + "version": "8.0.0", "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/CHANGELOG.md b/packages/metadata/CHANGELOG.md index 22d8bd3f1..2a6297ad1 100644 --- a/packages/metadata/CHANGELOG.md +++ b/packages/metadata/CHANGELOG.md @@ -1,5 +1,24 @@ # @objectstack/metadata +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/types@8.0.0 + - @objectstack/metadata-core@8.0.0 + - @objectstack/metadata-fs@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/metadata/package.json b/packages/metadata/package.json index 295ae1560..8b76bbd49 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata", - "version": "7.5.0", + "version": "8.0.0", "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 05b12d35f..afa1d63df 100644 --- a/packages/objectql/CHANGELOG.md +++ b/packages/objectql/CHANGELOG.md @@ -1,5 +1,60 @@ # @objectstack/objectql +## 8.0.0 + +### Minor Changes + +- 7648242: Enforce every declared validation-rule type on the write path; trim the three that can't be (#1475). + + The `validations` union advertised nine rule types but only three (`state_machine`, + `cross_field`, `script`) ran on insert/update — the other six were accepted by the + schema yet silently did nothing. This closes that gap on both sides: implement the + synchronous types, and trim the ones that don't belong in a write-path rule. + + **`@objectstack/objectql` (additive):** the rule evaluator now enforces three more + types, all deterministic, synchronous, side-effect-free predicates over one record: + + - `format` — a field value against a `regex` and/or a named format + (`email` / `url` / `phone` / `json`). Runs only when the write touches the field + and the value is non-empty; a malformed regex fails open. + - `json_schema` — a JSON field validated against a JSON Schema via `ajv` (compiled + result memoised per schema). Accepts a parsed object or a JSON string; an + unparseable string is itself a violation; an uncompilable schema fails open. + - `conditional` — evaluates `when`, then recurses into `then` / `otherwise`. The + nested rule supplies the message; the outer conditional's `severity` decides + blocking. `needsPriorRecord` now recurses into conditional branches. + + Adds `ajv` as a dependency and three error codes (`invalid_format`, `invalid_json`, + `json_schema_violation`). + + **`@objectstack/spec` (breaking for unused declarations):** removes the + `unique`, `async`, and `custom` validation-rule variants (and the + `UniquenessValidationSchema` / `AsyncValidationSchema` / `CustomValidatorSchema` + exports). They were never enforced and each needs I/O or a handler model a + write-path rule must not carry. Use the layer that already does each correctly: + uniqueness → a unique index (`ObjectSchema.indexes`, `partial` for scope) or + field-level `unique: true`; async/remote → the client form layer; custom code → + a `beforeInsert` / `beforeUpdate` lifecycle hook. Field-level `unique: true` is + unaffected. + + `examples/app-showcase` demonstrates and verifies each newly-enforced type. See the + ADR-0020 addendum for the rationale. + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/formula@8.0.0 + - @objectstack/types@8.0.0 + - @objectstack/metadata-core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/objectql/package.json b/packages/objectql/package.json index cd090ab34..59146c69a 100644 --- a/packages/objectql/package.json +++ b/packages/objectql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/objectql", - "version": "7.5.0", + "version": "8.0.0", "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 6d1535cd6..131b3c31e 100644 --- a/packages/observability/CHANGELOG.md +++ b/packages/observability/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/observability +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/observability/package.json b/packages/observability/package.json index ce579055f..58ef9c8d5 100644 --- a/packages/observability/package.json +++ b/packages/observability/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/observability", - "version": "7.5.0", + "version": "8.0.0", "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 2058d2e84..a7e42386e 100644 --- a/packages/platform-objects/CHANGELOG.md +++ b/packages/platform-objects/CHANGELOG.md @@ -1,5 +1,32 @@ # @objectstack/platform-objects +## 8.0.0 + +### Patch Changes + +- 7ae6abc: Fix `sys_user` load failure after the validation-rule type trim (#1485) + + #1485 trimmed the unenforceable validation-rule types (`unique`, `async`, + `custom`) from the `ValidationRuleSchema` discriminated union, but `sys_user` + still declared an `email_unique` rule with `type: 'unique'`. Loading the object + then threw a `ZodError` ("Invalid discriminator value … at validations[0].type"), + failing `platform-objects.test.ts` and turning `main` red. + + The rule was redundant: `sys_user` already declares a unique index on `email` + (`indexes: [{ fields: ['email'], unique: true }]`), and the user table is + managed by better-auth which enforces email uniqueness at the source. Removed + the unenforceable validation rule; uniqueness remains enforced by the index. + No other object uses a trimmed validation type. + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/platform-objects/package.json b/packages/platform-objects/package.json index 0f19b3a28..69734ebda 100644 --- a/packages/platform-objects/package.json +++ b/packages/platform-objects/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/platform-objects", - "version": "7.5.0", + "version": "8.0.0", "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 9e8f34b14..e1f7ceb12 100644 --- a/packages/plugins/driver-memory/CHANGELOG.md +++ b/packages/plugins/driver-memory/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/driver-memory +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/driver-memory/package.json b/packages/plugins/driver-memory/package.json index 89a7a7539..cf655d7cd 100644 --- a/packages/plugins/driver-memory/package.json +++ b/packages/plugins/driver-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-memory", - "version": "7.5.0", + "version": "8.0.0", "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 f469c430a..4c2c727f2 100644 --- a/packages/plugins/driver-mongodb/CHANGELOG.md +++ b/packages/plugins/driver-mongodb/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/driver-mongodb +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/driver-mongodb/package.json b/packages/plugins/driver-mongodb/package.json index d58b8afb6..07eeee68d 100644 --- a/packages/plugins/driver-mongodb/package.json +++ b/packages/plugins/driver-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-mongodb", - "version": "7.5.0", + "version": "8.0.0", "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 0dd61198e..05a5660f9 100644 --- a/packages/plugins/driver-sql/CHANGELOG.md +++ b/packages/plugins/driver-sql/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/driver-sql +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/driver-sql/package.json b/packages/plugins/driver-sql/package.json index 79e9bd6e6..134b1bc86 100644 --- a/packages/plugins/driver-sql/package.json +++ b/packages/plugins/driver-sql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-sql", - "version": "7.5.0", + "version": "8.0.0", "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 2a939c027..5472a5479 100644 --- a/packages/plugins/driver-sqlite-wasm/CHANGELOG.md +++ b/packages/plugins/driver-sqlite-wasm/CHANGELOG.md @@ -1,5 +1,30 @@ # @objectstack/driver-sqlite-wasm +## 8.0.0 + +### Patch Changes + +- be20aa4: Fix `COMMIT; - cannot commit - no transaction is active` under `persist: 'on-write'` (#1494). + + sql.js's `Database.export()` closes and reopens the database (it has no in-place + serialize), which rolls back any open transaction. The fire-and-forget flush + triggered after a write inside a Knex transaction (e.g. the autonumber sequence + `BEGIN…COMMIT`) could therefore abort that transaction, leaving the trailing + `COMMIT` to fail. The connection is now transaction-aware: `flush()` is deferred + while a transaction is open and runs once it fully closes, so committed data is + still persisted without aborting in-flight transactions. + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/driver-sql@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/driver-sqlite-wasm/package.json b/packages/plugins/driver-sqlite-wasm/package.json index 6b969f6df..2eb66a649 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": "7.5.0", + "version": "8.0.0", "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 12ba7d5b1..88b7a73af 100644 --- a/packages/plugins/embedder-openai/CHANGELOG.md +++ b/packages/plugins/embedder-openai/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/embedder-openai +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/embedder-openai/package.json b/packages/plugins/embedder-openai/package.json index fbb609c22..00f9c0f04 100644 --- a/packages/plugins/embedder-openai/package.json +++ b/packages/plugins/embedder-openai/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/embedder-openai", - "version": "7.5.0", + "version": "8.0.0", "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 a7a9b9a29..9507f609e 100644 --- a/packages/plugins/knowledge-memory/CHANGELOG.md +++ b/packages/plugins/knowledge-memory/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/knowledge-memory +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/service-knowledge@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/knowledge-memory/package.json b/packages/plugins/knowledge-memory/package.json index db92066fa..5f3d6023c 100644 --- a/packages/plugins/knowledge-memory/package.json +++ b/packages/plugins/knowledge-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/knowledge-memory", - "version": "7.5.0", + "version": "8.0.0", "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 4ce2e3836..7abefa041 100644 --- a/packages/plugins/knowledge-ragflow/CHANGELOG.md +++ b/packages/plugins/knowledge-ragflow/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/knowledge-ragflow +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/service-knowledge@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/knowledge-ragflow/package.json b/packages/plugins/knowledge-ragflow/package.json index 31d7ebecd..a89a1e766 100644 --- a/packages/plugins/knowledge-ragflow/package.json +++ b/packages/plugins/knowledge-ragflow/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/knowledge-ragflow", - "version": "7.5.0", + "version": "8.0.0", "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 d8cdfc49e..97c98ebe0 100644 --- a/packages/plugins/plugin-approvals/CHANGELOG.md +++ b/packages/plugins/plugin-approvals/CHANGELOG.md @@ -1,5 +1,23 @@ # @objectstack/plugin-approvals +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/formula@8.0.0 + - @objectstack/metadata-core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-approvals/package.json b/packages/plugins/plugin-approvals/package.json index 63c45c700..7112ef827 100644 --- a/packages/plugins/plugin-approvals/package.json +++ b/packages/plugins/plugin-approvals/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-approvals", - "version": "7.5.0", + "version": "8.0.0", "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 2a25399f7..9f029082c 100644 --- a/packages/plugins/plugin-audit/CHANGELOG.md +++ b/packages/plugins/plugin-audit/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/plugin-audit +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-audit/package.json b/packages/plugins/plugin-audit/package.json index c453c5136..6421011ba 100644 --- a/packages/plugins/plugin-audit/package.json +++ b/packages/plugins/plugin-audit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-audit", - "version": "7.5.0", + "version": "8.0.0", "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 d2cad39e6..99d2bea09 100644 --- a/packages/plugins/plugin-auth/CHANGELOG.md +++ b/packages/plugins/plugin-auth/CHANGELOG.md @@ -1,5 +1,63 @@ # Changelog +## 8.0.0 + +### Patch Changes + +- 8c01eea: fix(dev): seed the dev admin in-process and fix the port-drift seed failure. + + `os dev` (and `pnpm dev:showcase`) seeded the admin over HTTP against a + hard-coded `localhost:3000`. In dev, `serve` auto-shifts off a busy port, so + the seed POST hit the wrong server (or nothing) and the running instance never + got an admin. A second, divergent seed in `plugin-dev` inserted a + credential-less `sys_user` row that could not log in. + + Consolidate to a single in-process seed: + + - **`@objectstack/plugin-auth`** — `maybeSeedDevAdmin()` runs on `kernel:ready` + and creates `admin@objectos.ai` / `admin123` through better-auth's real + `signUpEmail` pipeline (hashed credential), so the account is loginable; + `plugin-security` then promotes it to platform admin. Empty-DB only + (excludes the system service account), idempotent, never overwrites an + existing account. Hard-gated to `NODE_ENV=development`; opt out with + `OS_SEED_ADMIN=0`. + - **`@objectstack/cli`** — removed the HTTP seed; `--seed-admin` now passes + `OS_SEED_ADMIN[_EMAIL|_PASSWORD]` to the serve child. `serve` publishes its + actually-bound port over IPC and to a `runtime..json` state file under + `OS_HOME`. + - **`@objectstack/plugin-dev`** — removed the credential-less raw insert; + `seedAdminUser` maps to the unified `OS_SEED_ADMIN` toggle. + +- b7a4f14: fix(dev): surface the seeded dev-admin credentials in the `serve` startup banner. + + When the runtime seeds the dev admin on an empty DB, the confirmation was + emitted via `ctx.logger` during `runtime.start()` — inside serve's boot-quiet + window — so it was swallowed and never reached the console. plugin-auth now + records the seed result on the `auth` service and `serve` prints it in the + ready banner (after stdout is restored), e.g.: + + ``` + 🔑 Dev admin: admin@objectos.ai / admin123 + seeded on empty DB · dev only — do not use in production + ``` + + Shown only when an admin was actually seeded this boot (empty DB) — never on a + DB that already had a user, so stale credentials are never displayed. Visible + in both `serve --dev` and `os dev` (the child's stdout is inherited). + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-auth/package.json b/packages/plugins/plugin-auth/package.json index 30f92358b..3bd24e9a8 100644 --- a/packages/plugins/plugin-auth/package.json +++ b/packages/plugins/plugin-auth/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-auth", - "version": "7.5.0", + "version": "8.0.0", "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 83800831f..5bffc08a3 100644 --- a/packages/plugins/plugin-dev/CHANGELOG.md +++ b/packages/plugins/plugin-dev/CHANGELOG.md @@ -1,5 +1,56 @@ # @objectstack/plugin-dev +## 8.0.0 + +### Patch Changes + +- 8c01eea: fix(dev): seed the dev admin in-process and fix the port-drift seed failure. + + `os dev` (and `pnpm dev:showcase`) seeded the admin over HTTP against a + hard-coded `localhost:3000`. In dev, `serve` auto-shifts off a busy port, so + the seed POST hit the wrong server (or nothing) and the running instance never + got an admin. A second, divergent seed in `plugin-dev` inserted a + credential-less `sys_user` row that could not log in. + + Consolidate to a single in-process seed: + + - **`@objectstack/plugin-auth`** — `maybeSeedDevAdmin()` runs on `kernel:ready` + and creates `admin@objectos.ai` / `admin123` through better-auth's real + `signUpEmail` pipeline (hashed credential), so the account is loginable; + `plugin-security` then promotes it to platform admin. Empty-DB only + (excludes the system service account), idempotent, never overwrites an + existing account. Hard-gated to `NODE_ENV=development`; opt out with + `OS_SEED_ADMIN=0`. + - **`@objectstack/cli`** — removed the HTTP seed; `--seed-admin` now passes + `OS_SEED_ADMIN[_EMAIL|_PASSWORD]` to the serve child. `serve` publishes its + actually-bound port over IPC and to a `runtime..json` state file under + `OS_HOME`. + - **`@objectstack/plugin-dev`** — removed the credential-less raw insert; + `seedAdminUser` maps to the unified `OS_SEED_ADMIN` toggle. + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8c01eea] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [8e539cc] +- Updated dependencies [b7a4f14] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/objectql@8.0.0 + - @objectstack/plugin-auth@8.0.0 + - @objectstack/runtime@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/driver-memory@8.0.0 + - @objectstack/plugin-hono-server@8.0.0 + - @objectstack/plugin-org-scoping@8.0.0 + - @objectstack/plugin-security@8.0.0 + - @objectstack/rest@8.0.0 + - @objectstack/service-i18n@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-dev/package.json b/packages/plugins/plugin-dev/package.json index 293cbdded..ebccbd5a5 100644 --- a/packages/plugins/plugin-dev/package.json +++ b/packages/plugins/plugin-dev/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-dev", - "version": "7.5.0", + "version": "8.0.0", "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 99ebfd710..7b5066668 100644 --- a/packages/plugins/plugin-email/CHANGELOG.md +++ b/packages/plugins/plugin-email/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/plugin-email +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-email/package.json b/packages/plugins/plugin-email/package.json index 8bf2d524c..bfba62f43 100644 --- a/packages/plugins/plugin-email/package.json +++ b/packages/plugins/plugin-email/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-email", - "version": "7.5.0", + "version": "8.0.0", "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 ea5851395..ab0df445f 100644 --- a/packages/plugins/plugin-hono-server/CHANGELOG.md +++ b/packages/plugins/plugin-hono-server/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/plugin-hono-server +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-hono-server/package.json b/packages/plugins/plugin-hono-server/package.json index 12435a5cb..7af332f93 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": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "Standard Hono Server Adapter for ObjectStack Runtime", "main": "dist/index.js", diff --git a/packages/plugins/plugin-mcp-server/CHANGELOG.md b/packages/plugins/plugin-mcp-server/CHANGELOG.md index 30c308f8f..7238589b4 100644 --- a/packages/plugins/plugin-mcp-server/CHANGELOG.md +++ b/packages/plugins/plugin-mcp-server/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/plugin-mcp-server +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-mcp-server/package.json b/packages/plugins/plugin-mcp-server/package.json index 9243337c7..6651e8a8f 100644 --- a/packages/plugins/plugin-mcp-server/package.json +++ b/packages/plugins/plugin-mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-mcp-server", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "MCP Runtime Server Plugin for ObjectStack — exposes AI tools, data resources, and agent prompts via the Model Context Protocol", "type": "module", diff --git a/packages/plugins/plugin-msw/CHANGELOG.md b/packages/plugins/plugin-msw/CHANGELOG.md index 02cd4facd..fe1e6fddd 100644 --- a/packages/plugins/plugin-msw/CHANGELOG.md +++ b/packages/plugins/plugin-msw/CHANGELOG.md @@ -1,5 +1,23 @@ # @objectstack/plugin-msw +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [8e539cc] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/objectql@8.0.0 + - @objectstack/runtime@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-msw/package.json b/packages/plugins/plugin-msw/package.json index 40bf1cde8..6fee9b372 100644 --- a/packages/plugins/plugin-msw/package.json +++ b/packages/plugins/plugin-msw/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-msw", - "version": "7.5.0", + "version": "8.0.0", "description": "MSW (Mock Service Worker) Plugin for ObjectStack Runtime", "license": "Apache-2.0", "main": "dist/index.js", diff --git a/packages/plugins/plugin-org-scoping/CHANGELOG.md b/packages/plugins/plugin-org-scoping/CHANGELOG.md index 183b2b144..a6800473e 100644 --- a/packages/plugins/plugin-org-scoping/CHANGELOG.md +++ b/packages/plugins/plugin-org-scoping/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/plugin-org-scoping +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-org-scoping/package.json b/packages/plugins/plugin-org-scoping/package.json index 08659ff2e..b99d98bdb 100644 --- a/packages/plugins/plugin-org-scoping/package.json +++ b/packages/plugins/plugin-org-scoping/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-org-scoping", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "Organization-Scoping Plugin for ObjectStack — row-level Organization isolation, per-org seed replay, default-org bootstrap", "main": "dist/index.js", diff --git a/packages/plugins/plugin-reports/CHANGELOG.md b/packages/plugins/plugin-reports/CHANGELOG.md index 32356ad0b..8179ce52c 100644 --- a/packages/plugins/plugin-reports/CHANGELOG.md +++ b/packages/plugins/plugin-reports/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/plugin-reports +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-reports/package.json b/packages/plugins/plugin-reports/package.json index 23663b2c8..872bf3052 100644 --- a/packages/plugins/plugin-reports/package.json +++ b/packages/plugins/plugin-reports/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-reports", - "version": "7.5.0", + "version": "8.0.0", "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 b266b9bc0..794a19897 100644 --- a/packages/plugins/plugin-security/CHANGELOG.md +++ b/packages/plugins/plugin-security/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/plugin-security +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-security/package.json b/packages/plugins/plugin-security/package.json index d311d2cb3..e6495aeed 100644 --- a/packages/plugins/plugin-security/package.json +++ b/packages/plugins/plugin-security/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-security", - "version": "7.5.0", + "version": "8.0.0", "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 480d05593..539720809 100644 --- a/packages/plugins/plugin-sharing/CHANGELOG.md +++ b/packages/plugins/plugin-sharing/CHANGELOG.md @@ -1,5 +1,22 @@ # @objectstack/plugin-sharing +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/objectql@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-sharing/package.json b/packages/plugins/plugin-sharing/package.json index 736641f92..6023f780d 100644 --- a/packages/plugins/plugin-sharing/package.json +++ b/packages/plugins/plugin-sharing/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-sharing", - "version": "7.5.0", + "version": "8.0.0", "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-trigger-record-change/CHANGELOG.md b/packages/plugins/plugin-trigger-record-change/CHANGELOG.md index b5cc0c46b..bed9f5546 100644 --- a/packages/plugins/plugin-trigger-record-change/CHANGELOG.md +++ b/packages/plugins/plugin-trigger-record-change/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/plugin-trigger-record-change +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-trigger-record-change/package.json b/packages/plugins/plugin-trigger-record-change/package.json index 400f36b0f..b4a92d435 100644 --- a/packages/plugins/plugin-trigger-record-change/package.json +++ b/packages/plugins/plugin-trigger-record-change/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-trigger-record-change", - "version": "7.5.0", + "version": "8.0.0", "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/plugins/plugin-trigger-schedule/CHANGELOG.md b/packages/plugins/plugin-trigger-schedule/CHANGELOG.md index 7abe27cf9..264d96e84 100644 --- a/packages/plugins/plugin-trigger-schedule/CHANGELOG.md +++ b/packages/plugins/plugin-trigger-schedule/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/plugin-trigger-schedule +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-trigger-schedule/package.json b/packages/plugins/plugin-trigger-schedule/package.json index 513554d93..1d47d3753 100644 --- a/packages/plugins/plugin-trigger-schedule/package.json +++ b/packages/plugins/plugin-trigger-schedule/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-trigger-schedule", - "version": "7.5.0", + "version": "8.0.0", "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/plugins/plugin-webhooks/CHANGELOG.md b/packages/plugins/plugin-webhooks/CHANGELOG.md index a3ec179a5..336cfdfc6 100644 --- a/packages/plugins/plugin-webhooks/CHANGELOG.md +++ b/packages/plugins/plugin-webhooks/CHANGELOG.md @@ -1,5 +1,52 @@ # @objectstack/plugin-webhooks +## 8.0.0 + +### Major Changes + +- 11905fa: ADR-0018 M3 (Phase 5): `plugin-webhooks` now delivers through the shared + `service-messaging` HTTP outbox instead of its own. + + The webhook delivery substrate — durable outbox, cluster-coordinated dispatcher, + retry/backoff/dead-letter, retention — is removed from `plugin-webhooks` and + replaced by the generic `sys_http_delivery` outbox + `HttpDispatcher` in + `@objectstack/service-messaging`. Webhooks keep only their domain concerns: the + `sys_webhook` config object, the `AutoEnqueuer` (now enqueues `source: 'webhook'` + rows via `messaging.enqueueHttp`), and the redeliver admin endpoint (now backed + by `messaging.redeliverHttp`). + + **`@objectstack/service-messaging`:** `MessagingService` gains `redeliverHttp(id)` + and `listHttp(filter)` over the HTTP outbox. + + **`@objectstack/plugin-webhooks` — BREAKING:** + + - Now **requires** `MessagingServicePlugin` (declared as a plugin dependency). + - Removed exports: `WebhookDispatcher`, `MemoryWebhookOutbox`, `SqlWebhookOutbox` + (and the `./sql` subpath), `DeliveryRetentionSweeper`, `hashPartition`, + `sendOnce` / `classifyAttempt` / `nextRetryDelayMs`, and the `IWebhookOutbox` / + `WebhookDelivery` / `EnqueueInput` / `AckResult` / `RedeliverError` types. + - Removed the `sys_webhook_delivery` object — webhook deliveries are now rows in + `sys_http_delivery` (`source = 'webhook'`). The Setup nav points there. + - `AutoEnqueuer`'s constructor takes an `HttpEnqueueFn` instead of an + `IWebhookOutbox`. + - `WebhookOutboxPluginOptions` reduced to `{ autoEnqueue }` (dispatcher / outbox / + retention / nodeId options removed — those now live on `MessagingServicePlugin`). + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [11905fa] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [8e539cc] +- Updated dependencies [60f9c45] + - @objectstack/service-messaging@8.0.0 + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/plugins/plugin-webhooks/package.json b/packages/plugins/plugin-webhooks/package.json index cd292227e..516298c57 100644 --- a/packages/plugins/plugin-webhooks/package.json +++ b/packages/plugins/plugin-webhooks/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-webhooks", - "version": "7.5.0", + "version": "8.0.0", "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/rest/CHANGELOG.md b/packages/rest/CHANGELOG.md index a907c17eb..0730116c2 100644 --- a/packages/rest/CHANGELOG.md +++ b/packages/rest/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/rest +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/service-package@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/rest/package.json b/packages/rest/package.json index 82d491901..b051f022c 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/rest", - "version": "7.5.0", + "version": "8.0.0", "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 ac107d605..042674a15 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,70 @@ # @objectstack/runtime +## 8.0.0 + +### Minor Changes + +- 8e539cc: Implement the `/api/v1/notifications` REST surface (ADR-0030) + + The notification REST routes (`GET /notifications`, `POST /notifications/read`, + `POST /notifications/read/all`) were declared in the spec but never had a + server-side handler — no plugin registered the `notification` core service, so + the routes were never advertised in discovery and `client.notifications.*` + calls 404'd. (The Console bell works today only because it bypasses these + endpoints and reads the inbox via the generic data API.) + + This wires the surface end-to-end against the ADR-0030 L5 model: + + - **`MessagingService`** gains an inbox read API: `listInbox(userId, opts)` + reads `sys_inbox_message` joined with `sys_notification_receipt` for + read-state (a message is unread until its event has a `read`/`clicked`/ + `dismissed` receipt); `markRead(userId, ids)` and `markAllRead(userId)` + upsert the receipt to `read`, keyed `(notification_id, user_id, +channel:'inbox')` — updating the existing `delivered` receipt in place, + inserting only when absent. No reliance on the re-modeled `sys_notification` + L2 event (which carries no recipient/read columns). + - **`MessagingServicePlugin`** now also registers the messaging service under + the `notification` core service slot, so the dispatcher resolves + advertises + the routes. The legacy `INotificationService.send()` abstraction is unused and + unconsumed. + - **`HttpDispatcher`** gains `handleNotification` + a `/notifications` dispatch + branch: it takes the authenticated user from the execution context and maps + list / mark-read / mark-all-read to the service. Responses match the spec + schemas (`{ notifications, unreadCount }`, `{ success, readCount }`). + + Pairs with the objectui SDK consumer repoint (`useClientNotifications` → + `markRead`/`registerDevice` signatures). Device registration and preference + endpoints remain out of scope (unimplemented as before). + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8c01eea] +- Updated dependencies [8fa1e7f] +- Updated dependencies [be20aa4] +- Updated dependencies [55866f5] +- Updated dependencies [b7a4f14] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/objectql@8.0.0 + - @objectstack/plugin-auth@8.0.0 + - @objectstack/driver-sqlite-wasm@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/formula@8.0.0 + - @objectstack/metadata@8.0.0 + - @objectstack/observability@8.0.0 + - @objectstack/driver-memory@8.0.0 + - @objectstack/driver-sql@8.0.0 + - @objectstack/plugin-org-scoping@8.0.0 + - @objectstack/plugin-security@8.0.0 + - @objectstack/rest@8.0.0 + - @objectstack/service-cluster@8.0.0 + - @objectstack/service-i18n@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 4d43e0247..ff065985c 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/runtime", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "ObjectStack Core Runtime & Query Engine", "type": "module", diff --git a/packages/services/service-ai/CHANGELOG.md b/packages/services/service-ai/CHANGELOG.md index b6cf63640..2401fad75 100644 --- a/packages/services/service-ai/CHANGELOG.md +++ b/packages/services/service-ai/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/service-ai +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/embedder-openai@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-ai/package.json b/packages/services/service-ai/package.json index 9fe991ff0..db04e1616 100644 --- a/packages/services/service-ai/package.json +++ b/packages/services/service-ai/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-ai", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "AI Service for ObjectStack — implements IAIService with LLM adapter layer, conversation management, tool registry, and REST/SSE routes", "type": "module", diff --git a/packages/services/service-analytics/CHANGELOG.md b/packages/services/service-analytics/CHANGELOG.md index cf9597c52..b3002f632 100644 --- a/packages/services/service-analytics/CHANGELOG.md +++ b/packages/services/service-analytics/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog — @objectstack/service-analytics +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-analytics/package.json b/packages/services/service-analytics/package.json index 9b0195962..2c6fe3277 100644 --- a/packages/services/service-analytics/package.json +++ b/packages/services/service-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-analytics", - "version": "7.5.0", + "version": "8.0.0", "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 4a6c929c7..4dff6563b 100644 --- a/packages/services/service-automation/CHANGELOG.md +++ b/packages/services/service-automation/CHANGELOG.md @@ -1,5 +1,114 @@ # @objectstack/service-automation +## 8.0.0 + +### Minor Changes + +- 955d4c8: ADR-0018 M3: unified `http` / `notify` executors backed by a generic HTTP outbox. + + Promotes a reliable outbound-HTTP delivery outbox into `service-messaging` (the + raw-callout counterpart to the notification outbox) and routes the Flow `http` + node through it — closing the "`http_request` is a bare `fetch()` with no retry" + gap. The five divergent outbound verbs collapse onto canonical `http` / `notify`. + + **`@objectstack/service-messaging` (additive):** + + - `IHttpOutbox` / `HttpDelivery` generic raw-callout shape + (`source` / `refId` / `dedupKey` / `label` / `signingSecret`), `SqlHttpOutbox` + over a new `sys_http_delivery` object, `MemoryHttpOutbox`, `HttpDispatcher` + (per-partition cluster lock, claim/ack/retry/dead-letter), and a shared + `sendOnce` + 7-step jittered retry schedule. + - `MessagingService` gains `setHttpOutbox()` / `isHttpDeliveryReady()` / + `enqueueHttp()`; the plugin wires the outbox + dispatcher at `kernel:ready`. + + **`@objectstack/service-automation`:** + + - Canonical `http` executor — `durable: true` enqueues onto the messaging HTTP + outbox (retry/dead-letter); otherwise an inline `fetch()` preserving + `http_request`'s request/response semantics. + - `engine.registerNodeAlias()` — registers a delegating executor + a + `deprecated` / `aliasOf` descriptor. `http_request` / `http_call` / `webhook` + are now deprecated aliases of `http`; existing flows keep running. + - `notify` descriptor marked `needsOutbox` (its delivery is outbox-backed). + + **`@objectstack/spec`:** `flow.zod` adds `http` to the builtin node-type seed set. + + `plugin-webhooks` cut-over to the shared outbox is a deliberate follow-up. + +- 60f9c45: feat(automation): structured control-flow constructs (ADR-0031) — loop container + + Adopt structured control-flow as the native, AI-authored flow model (ADR-0031), + choosing representation **(B) nested sub-structure**: containers carry their body + as a self-contained single-entry/single-exit region in `config`. + + - **spec**: new `automation/control-flow.zod.ts` defining the `loop` container + (`config.body`), `parallel` block (`config.branches[]`, implicit join), and + `try/catch/retry` (`config.try`/`config.catch`/`config.retry`) configs, plus + region well-formedness analysis (`analyzeRegion`, `findRegionEntry`) and + `validateControlFlow` (single-entry/single-exit, acyclic; bounded loop). + - **engine**: `registerFlow()` now rejects malformed control-flow regions before + a flow can run; new `AutomationEngine.runRegion()` executes a body region in + the enclosing variable scope without touching the shared DAG traversal. + - **loop executor**: replaces the no-op `loop` stub with a real iteration + container — binds the iterator/index variables and runs the body once per item + under a hard max-iteration guard. Legacy flat-graph loops (no `config.body`) + keep working — the construct is additive. + + Parallel-block and try/catch _engine execution_ and BPMN interop mapping remain + follow-ups (issue #1479, tasks 3–5). + +- f06a6a5: feat(automation): structured parallel block (ADR-0031, task 3) + + Implement engine execution for the `parallel` block — a structured construct + with an **implicit join** (ADR-0031 §Decision 2). The `parallel` node declares N + branch regions in `config.branches[]`; the executor runs them concurrently in + the enclosing variable scope (via `AutomationEngine.runRegion`) and continues + once when all branches complete — no author-visible split/join gateway. + + - New `builtin/parallel-node.ts` executor (registered as a built-in). + - Branch failure fails the block (surfaced as a node failure → fault edge/error + handling); durable pause inside a branch is a clear error. + - Well-formedness (≥2 branches, single-entry/single-exit regions) is already + enforced at `registerFlow()` by `validateControlFlow` (shipped with the loop + container). + + Showcase `FanOutNotifyFlow` demonstrates the parallel block. Try/catch execution + and BPMN interop mapping remain follow-ups (#1479 tasks 4–5). + +- 4ee139d: feat(automation): structured try/catch/retry block (ADR-0031, task 4) + + Implement engine execution for the `try_catch` construct — structured error + handling (ADR-0031 §Decision 3). The node runs a protected `try` region; on + failure it retries with exponential backoff (`config.retry`), and if it still + fails the optional `catch` region runs with the caught error bound to + `config.errorVariable` (default `$error`). Both regions execute in the enclosing + variable scope via `AutomationEngine.runRegion`. + + - New `builtin/try-catch-node.ts` executor (registered as a built-in). + - `try` success (incl. a successful retry) → node succeeds; `catch` handling a + failure → node succeeds; no `catch` / failing `catch` → node fails to the + flow's fault edge / error handling. + - Well-formedness (single-entry/single-exit `try`/`catch` regions) is already + enforced at `registerFlow()` by `validateControlFlow` (shipped with the loop + container). + + Showcase `ResilientSyncFlow` demonstrates the construct. This completes the + native control-flow execution trio (loop / parallel / try-catch); BPMN interop + mapping remains a follow-up (#1479 task 5). + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/formula@8.0.0 + ## 7.5.0 ### Minor Changes diff --git a/packages/services/service-automation/package.json b/packages/services/service-automation/package.json index 5ac89a65c..001390c47 100644 --- a/packages/services/service-automation/package.json +++ b/packages/services/service-automation/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-automation", - "version": "7.5.0", + "version": "8.0.0", "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 c97cada4a..aaf24dbad 100644 --- a/packages/services/service-cache/CHANGELOG.md +++ b/packages/services/service-cache/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-cache +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/observability@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-cache/package.json b/packages/services/service-cache/package.json index 99b9e7074..6ee4e18db 100644 --- a/packages/services/service-cache/package.json +++ b/packages/services/service-cache/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cache", - "version": "7.5.0", + "version": "8.0.0", "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 f7f9d5694..06c93e5fa 100644 --- a/packages/services/service-cluster-redis/CHANGELOG.md +++ b/packages/services/service-cluster-redis/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/service-cluster-redis +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/service-cluster@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-cluster-redis/package.json b/packages/services/service-cluster-redis/package.json index daab70c70..8230e675d 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": "7.5.0", + "version": "8.0.0", "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 a9ecfac25..832d42d51 100644 --- a/packages/services/service-cluster/CHANGELOG.md +++ b/packages/services/service-cluster/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/service-cluster +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-cluster/package.json b/packages/services/service-cluster/package.json index 3451879bd..ce6e47ded 100644 --- a/packages/services/service-cluster/package.json +++ b/packages/services/service-cluster/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cluster", - "version": "7.5.0", + "version": "8.0.0", "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 81c172777..5b6ee2a3f 100644 --- a/packages/services/service-datasource/CHANGELOG.md +++ b/packages/services/service-datasource/CHANGELOG.md @@ -1,5 +1,22 @@ # @objectstack/service-external-datasource +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/driver-memory@8.0.0 + - @objectstack/driver-mongodb@8.0.0 + - @objectstack/driver-sql@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-datasource/package.json b/packages/services/service-datasource/package.json index ff3978aef..eb40bc797 100644 --- a/packages/services/service-datasource/package.json +++ b/packages/services/service-datasource/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-datasource", - "version": "7.5.0", + "version": "8.0.0", "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", @@ -35,9 +35,15 @@ "@objectstack/driver-sql": "workspace:*" }, "peerDependenciesMeta": { - "@objectstack/driver-sql": { "optional": true }, - "@objectstack/driver-mongodb": { "optional": true }, - "@objectstack/driver-memory": { "optional": true } + "@objectstack/driver-sql": { + "optional": true + }, + "@objectstack/driver-mongodb": { + "optional": true + }, + "@objectstack/driver-memory": { + "optional": true + } }, "devDependencies": { "@objectstack/driver-memory": "workspace:*", diff --git a/packages/services/service-feed/CHANGELOG.md b/packages/services/service-feed/CHANGELOG.md index c2c5575fe..ba08442a2 100644 --- a/packages/services/service-feed/CHANGELOG.md +++ b/packages/services/service-feed/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/service-feed +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-feed/package.json b/packages/services/service-feed/package.json index 50d90e5a0..881cc7804 100644 --- a/packages/services/service-feed/package.json +++ b/packages/services/service-feed/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-feed", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "Feed/Chatter Service for ObjectStack — implements IFeedService with in-memory adapter for comments, reactions, field changes, and record subscriptions", "type": "module", diff --git a/packages/services/service-i18n/CHANGELOG.md b/packages/services/service-i18n/CHANGELOG.md index 6181a14e8..5f618a2ef 100644 --- a/packages/services/service-i18n/CHANGELOG.md +++ b/packages/services/service-i18n/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/service-i18n +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-i18n/package.json b/packages/services/service-i18n/package.json index 6f81a46f2..d4d6e0603 100644 --- a/packages/services/service-i18n/package.json +++ b/packages/services/service-i18n/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-i18n", - "version": "7.5.0", + "version": "8.0.0", "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 8fcd97d33..53a895617 100644 --- a/packages/services/service-job/CHANGELOG.md +++ b/packages/services/service-job/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/service-job +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-job/package.json b/packages/services/service-job/package.json index 22d1d121c..d65a59030 100644 --- a/packages/services/service-job/package.json +++ b/packages/services/service-job/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-job", - "version": "7.5.0", + "version": "8.0.0", "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 3350714b0..471a2b3cb 100644 --- a/packages/services/service-knowledge/CHANGELOG.md +++ b/packages/services/service-knowledge/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/service-knowledge +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-knowledge/package.json b/packages/services/service-knowledge/package.json index 0f76b6253..c4fd671d7 100644 --- a/packages/services/service-knowledge/package.json +++ b/packages/services/service-knowledge/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-knowledge", - "version": "7.5.0", + "version": "8.0.0", "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 8b87b27ce..1938da29e 100644 --- a/packages/services/service-messaging/CHANGELOG.md +++ b/packages/services/service-messaging/CHANGELOG.md @@ -1,5 +1,112 @@ # @objectstack/service-messaging +## 8.0.0 + +### Minor Changes + +- 955d4c8: ADR-0018 M3: unified `http` / `notify` executors backed by a generic HTTP outbox. + + Promotes a reliable outbound-HTTP delivery outbox into `service-messaging` (the + raw-callout counterpart to the notification outbox) and routes the Flow `http` + node through it — closing the "`http_request` is a bare `fetch()` with no retry" + gap. The five divergent outbound verbs collapse onto canonical `http` / `notify`. + + **`@objectstack/service-messaging` (additive):** + + - `IHttpOutbox` / `HttpDelivery` generic raw-callout shape + (`source` / `refId` / `dedupKey` / `label` / `signingSecret`), `SqlHttpOutbox` + over a new `sys_http_delivery` object, `MemoryHttpOutbox`, `HttpDispatcher` + (per-partition cluster lock, claim/ack/retry/dead-letter), and a shared + `sendOnce` + 7-step jittered retry schedule. + - `MessagingService` gains `setHttpOutbox()` / `isHttpDeliveryReady()` / + `enqueueHttp()`; the plugin wires the outbox + dispatcher at `kernel:ready`. + + **`@objectstack/service-automation`:** + + - Canonical `http` executor — `durable: true` enqueues onto the messaging HTTP + outbox (retry/dead-letter); otherwise an inline `fetch()` preserving + `http_request`'s request/response semantics. + - `engine.registerNodeAlias()` — registers a delegating executor + a + `deprecated` / `aliasOf` descriptor. `http_request` / `http_call` / `webhook` + are now deprecated aliases of `http`; existing flows keep running. + - `notify` descriptor marked `needsOutbox` (its delivery is outbox-backed). + + **`@objectstack/spec`:** `flow.zod` adds `http` to the builtin node-type seed set. + + `plugin-webhooks` cut-over to the shared outbox is a deliberate follow-up. + +- 11905fa: ADR-0018 M3 (Phase 5): `plugin-webhooks` now delivers through the shared + `service-messaging` HTTP outbox instead of its own. + + The webhook delivery substrate — durable outbox, cluster-coordinated dispatcher, + retry/backoff/dead-letter, retention — is removed from `plugin-webhooks` and + replaced by the generic `sys_http_delivery` outbox + `HttpDispatcher` in + `@objectstack/service-messaging`. Webhooks keep only their domain concerns: the + `sys_webhook` config object, the `AutoEnqueuer` (now enqueues `source: 'webhook'` + rows via `messaging.enqueueHttp`), and the redeliver admin endpoint (now backed + by `messaging.redeliverHttp`). + + **`@objectstack/service-messaging`:** `MessagingService` gains `redeliverHttp(id)` + and `listHttp(filter)` over the HTTP outbox. + + **`@objectstack/plugin-webhooks` — BREAKING:** + + - Now **requires** `MessagingServicePlugin` (declared as a plugin dependency). + - Removed exports: `WebhookDispatcher`, `MemoryWebhookOutbox`, `SqlWebhookOutbox` + (and the `./sql` subpath), `DeliveryRetentionSweeper`, `hashPartition`, + `sendOnce` / `classifyAttempt` / `nextRetryDelayMs`, and the `IWebhookOutbox` / + `WebhookDelivery` / `EnqueueInput` / `AckResult` / `RedeliverError` types. + - Removed the `sys_webhook_delivery` object — webhook deliveries are now rows in + `sys_http_delivery` (`source = 'webhook'`). The Setup nav points there. + - `AutoEnqueuer`'s constructor takes an `HttpEnqueueFn` instead of an + `IWebhookOutbox`. + - `WebhookOutboxPluginOptions` reduced to `{ autoEnqueue }` (dispatcher / outbox / + retention / nodeId options removed — those now live on `MessagingServicePlugin`). + +- 8e539cc: Implement the `/api/v1/notifications` REST surface (ADR-0030) + + The notification REST routes (`GET /notifications`, `POST /notifications/read`, + `POST /notifications/read/all`) were declared in the spec but never had a + server-side handler — no plugin registered the `notification` core service, so + the routes were never advertised in discovery and `client.notifications.*` + calls 404'd. (The Console bell works today only because it bypasses these + endpoints and reads the inbox via the generic data API.) + + This wires the surface end-to-end against the ADR-0030 L5 model: + + - **`MessagingService`** gains an inbox read API: `listInbox(userId, opts)` + reads `sys_inbox_message` joined with `sys_notification_receipt` for + read-state (a message is unread until its event has a `read`/`clicked`/ + `dismissed` receipt); `markRead(userId, ids)` and `markAllRead(userId)` + upsert the receipt to `read`, keyed `(notification_id, user_id, +channel:'inbox')` — updating the existing `delivered` receipt in place, + inserting only when absent. No reliance on the re-modeled `sys_notification` + L2 event (which carries no recipient/read columns). + - **`MessagingServicePlugin`** now also registers the messaging service under + the `notification` core service slot, so the dispatcher resolves + advertises + the routes. The legacy `INotificationService.send()` abstraction is unused and + unconsumed. + - **`HttpDispatcher`** gains `handleNotification` + a `/notifications` dispatch + branch: it takes the authenticated user from the execution context and maps + list / mark-read / mark-all-read to the service. Responses match the spec + schemas (`{ notifications, unreadCount }`, `{ success, readCount }`). + + Pairs with the objectui SDK consumer repoint (`useClientNotifications` → + `markRead`/`registerDevice` signatures). Device registration and preference + endpoints remain out of scope (unimplemented as before). + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-messaging/package.json b/packages/services/service-messaging/package.json index 65f99d089..1a0cad997 100644 --- a/packages/services/service-messaging/package.json +++ b/packages/services/service-messaging/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-messaging", - "version": "7.5.0", + "version": "8.0.0", "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 ec503c57a..6aead49c3 100644 --- a/packages/services/service-package/CHANGELOG.md +++ b/packages/services/service-package/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/service-package +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-package/package.json b/packages/services/service-package/package.json index dff580796..3c3589620 100644 --- a/packages/services/service-package/package.json +++ b/packages/services/service-package/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-package", - "version": "7.5.0", + "version": "8.0.0", "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 aee3d47e3..50ad3a697 100644 --- a/packages/services/service-queue/CHANGELOG.md +++ b/packages/services/service-queue/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/service-queue +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-queue/package.json b/packages/services/service-queue/package.json index 3e4238477..312f54fb0 100644 --- a/packages/services/service-queue/package.json +++ b/packages/services/service-queue/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-queue", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "Queue Service for ObjectStack — implements IQueueService with in-memory and BullMQ adapters", "type": "module", diff --git a/packages/services/service-realtime/CHANGELOG.md b/packages/services/service-realtime/CHANGELOG.md index d5bd55524..25a976e28 100644 --- a/packages/services/service-realtime/CHANGELOG.md +++ b/packages/services/service-realtime/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/service-realtime +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-realtime/package.json b/packages/services/service-realtime/package.json index e6f3c6974..70fda9e30 100644 --- a/packages/services/service-realtime/package.json +++ b/packages/services/service-realtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-realtime", - "version": "7.5.0", + "version": "8.0.0", "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 277bfc456..21da3fd56 100644 --- a/packages/services/service-settings/CHANGELOG.md +++ b/packages/services/service-settings/CHANGELOG.md @@ -1,5 +1,57 @@ # @objectstack/service-settings +## 8.0.0 + +### Minor Changes + +- 55866f5: Fail loud instead of silently minting an ephemeral encryption key; ship a persistent env-master-key provider as the default (#1507). + + The default `ICryptoProvider` backs every secret-at-rest in the platform — + encrypted settings (`sys_setting.value_enc`), ObjectQL `secret` fields, and + runtime datasource credentials. Its key resolution previously fell back, + **silently**, to a fresh per-process `randomBytes(32)` key (or auto-minted a + new on-disk key on every boot) when no stable key was available. In an + ephemeral-FS container or a multi-node cluster, each restart / each node then + encrypts under a different key, and every previously-written `sys_secret` value + becomes undecryptable. The failure was invisible at encrypt and boot time and + only surfaced later as "all my saved passwords / API keys / DB credentials + fail to decrypt". + + - **Renamed `InMemoryCryptoProvider` → `LocalCryptoProvider`.** The old name + implied an ephemeral key when the provider in fact persists one. + `InMemoryCryptoProvider` stays as a deprecated alias for backward + compatibility. + - **Added `OS_SECRET_KEY`** as the canonical production master key (32-byte + hex or base64), the documented production default. `OS_DEV_CRYPTO_KEY` + remains the dev convenience key. + - **Fail-loud in production.** When `NODE_ENV=production` and no stable key + source (env var or a pre-existing persisted file) is available, the provider + now throws an actionable error at construction instead of generating a key — + turning silent data-loss into a config error at boot. It never auto-mints a + key in production. Development and test keep the ergonomic fallback + (persisted dev key / ephemeral test key). + - `serve` surfaces the production-key error verbatim and refuses to wire an + unstable provider for `secret` fields. + + KMS / Vault providers (managed custody, per-tenant keys, automatic rotation) + remain future/enterprise plug-ins behind the same `ICryptoProvider` seam; + "your stored secret is still there after a reboot" stays open-source. + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [7ae6abc] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/platform-objects@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/types@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-settings/package.json b/packages/services/service-settings/package.json index 3aa1c06ed..47952581a 100644 --- a/packages/services/service-settings/package.json +++ b/packages/services/service-settings/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-settings", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "Settings service for ObjectStack — manifest registry + K/V resolver (Env > Tenant > User > Default) + REST routes. See ADR-0007.", "type": "module", diff --git a/packages/services/service-storage/CHANGELOG.md b/packages/services/service-storage/CHANGELOG.md index 86b24c925..94dbd74e1 100644 --- a/packages/services/service-storage/CHANGELOG.md +++ b/packages/services/service-storage/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-storage +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + - @objectstack/core@8.0.0 + - @objectstack/observability@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/services/service-storage/package.json b/packages/services/service-storage/package.json index c5aa26c39..52374f9d0 100644 --- a/packages/services/service-storage/package.json +++ b/packages/services/service-storage/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-storage", - "version": "7.5.0", + "version": "8.0.0", "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 6fd4448bc..fba060fed 100644 --- a/packages/spec/CHANGELOG.md +++ b/packages/spec/CHANGELOG.md @@ -1,5 +1,168 @@ # @objectstack/spec +## 8.0.0 + +### Minor Changes + +- 955d4c8: ADR-0018 M3: unified `http` / `notify` executors backed by a generic HTTP outbox. + + Promotes a reliable outbound-HTTP delivery outbox into `service-messaging` (the + raw-callout counterpart to the notification outbox) and routes the Flow `http` + node through it — closing the "`http_request` is a bare `fetch()` with no retry" + gap. The five divergent outbound verbs collapse onto canonical `http` / `notify`. + + **`@objectstack/service-messaging` (additive):** + + - `IHttpOutbox` / `HttpDelivery` generic raw-callout shape + (`source` / `refId` / `dedupKey` / `label` / `signingSecret`), `SqlHttpOutbox` + over a new `sys_http_delivery` object, `MemoryHttpOutbox`, `HttpDispatcher` + (per-partition cluster lock, claim/ack/retry/dead-letter), and a shared + `sendOnce` + 7-step jittered retry schedule. + - `MessagingService` gains `setHttpOutbox()` / `isHttpDeliveryReady()` / + `enqueueHttp()`; the plugin wires the outbox + dispatcher at `kernel:ready`. + + **`@objectstack/service-automation`:** + + - Canonical `http` executor — `durable: true` enqueues onto the messaging HTTP + outbox (retry/dead-letter); otherwise an inline `fetch()` preserving + `http_request`'s request/response semantics. + - `engine.registerNodeAlias()` — registers a delegating executor + a + `deprecated` / `aliasOf` descriptor. `http_request` / `http_call` / `webhook` + are now deprecated aliases of `http`; existing flows keep running. + - `notify` descriptor marked `needsOutbox` (its delivery is outbox-backed). + + **`@objectstack/spec`:** `flow.zod` adds `http` to the builtin node-type seed set. + + `plugin-webhooks` cut-over to the shared outbox is a deliberate follow-up. + +- b046ec2: feat(automation): BPMN ⇄ structured-construct model mapping (ADR-0031, task 5) + + Add the semantic bridge between the structured control-flow constructs (the + native model) and the BPMN gateway/boundary/multi-instance vocabulary (kept for + interop only), at the **flow-model level** — independent of any wire format + (`automation/bpmn-mapping.ts`): + + - `exportConstructsToBpmn(flow)` expands each construct into its BPMN + interchange shape — `parallel` → `parallel_gateway` (AND-split) + branch + regions + `join_gateway` (AND-join); `try_catch` → the protected activity + + an error `boundary_event` + the handler region; `loop` → its body marked with + multi-instance loop characteristics — so external BPM tools see a well-formed + BPMN graph. Each expansion's anchor carries an `osConstruct` extension marker. + - `importBpmnToConstructs(flow)` folds that BPMN shape back into the constructs: + exact reconstruction from the `osConstruct` marker (so `construct → BPMN → +construct` is identity), and a best-effort structural fold of foreign + `parallel_gateway`/`join_gateway` pairs, with diagnostics for shapes it can't + safely fold. + + BPMN 2.0 **XML** (de)serialization layers on top of this mapping and remains a + plugin concern (per `bpmn-interop.zod.ts`), out of scope here. + +- 7648242: Enforce every declared validation-rule type on the write path; trim the three that can't be (#1475). + + The `validations` union advertised nine rule types but only three (`state_machine`, + `cross_field`, `script`) ran on insert/update — the other six were accepted by the + schema yet silently did nothing. This closes that gap on both sides: implement the + synchronous types, and trim the ones that don't belong in a write-path rule. + + **`@objectstack/objectql` (additive):** the rule evaluator now enforces three more + types, all deterministic, synchronous, side-effect-free predicates over one record: + + - `format` — a field value against a `regex` and/or a named format + (`email` / `url` / `phone` / `json`). Runs only when the write touches the field + and the value is non-empty; a malformed regex fails open. + - `json_schema` — a JSON field validated against a JSON Schema via `ajv` (compiled + result memoised per schema). Accepts a parsed object or a JSON string; an + unparseable string is itself a violation; an uncompilable schema fails open. + - `conditional` — evaluates `when`, then recurses into `then` / `otherwise`. The + nested rule supplies the message; the outer conditional's `severity` decides + blocking. `needsPriorRecord` now recurses into conditional branches. + + Adds `ajv` as a dependency and three error codes (`invalid_format`, `invalid_json`, + `json_schema_violation`). + + **`@objectstack/spec` (breaking for unused declarations):** removes the + `unique`, `async`, and `custom` validation-rule variants (and the + `UniquenessValidationSchema` / `AsyncValidationSchema` / `CustomValidatorSchema` + exports). They were never enforced and each needs I/O or a handler model a + write-path rule must not carry. Use the layer that already does each correctly: + uniqueness → a unique index (`ObjectSchema.indexes`, `partial` for scope) or + field-level `unique: true`; async/remote → the client form layer; custom code → + a `beforeInsert` / `beforeUpdate` lifecycle hook. Field-level `unique: true` is + unaffected. + + `examples/app-showcase` demonstrates and verifies each newly-enforced type. See the + ADR-0020 addendum for the rationale. + +- 60f9c45: feat(automation): structured control-flow constructs (ADR-0031) — loop container + + Adopt structured control-flow as the native, AI-authored flow model (ADR-0031), + choosing representation **(B) nested sub-structure**: containers carry their body + as a self-contained single-entry/single-exit region in `config`. + + - **spec**: new `automation/control-flow.zod.ts` defining the `loop` container + (`config.body`), `parallel` block (`config.branches[]`, implicit join), and + `try/catch/retry` (`config.try`/`config.catch`/`config.retry`) configs, plus + region well-formedness analysis (`analyzeRegion`, `findRegionEntry`) and + `validateControlFlow` (single-entry/single-exit, acyclic; bounded loop). + - **engine**: `registerFlow()` now rejects malformed control-flow regions before + a flow can run; new `AutomationEngine.runRegion()` executes a body region in + the enclosing variable scope without touching the shared DAG traversal. + - **loop executor**: replaces the no-op `loop` stub with a real iteration + container — binds the iterator/index variables and runs the body once per item + under a hard max-iteration guard. Legacy flat-graph loops (no `config.body`) + keep working — the construct is additive. + + Parallel-block and try/catch _engine execution_ and BPMN interop mapping remain + follow-ups (issue #1479, tasks 3–5). + +### Patch Changes + +- 02d6359: docs(automation): document ADR-0031 control-flow constructs; fix dangling reference card + + - **guide**: `content/docs/guides/metadata/flow.mdx` now documents the structured + control-flow constructs — the `loop` container, `parallel` block (implicit + join), and `try_catch` (try/catch/retry) — with config examples and the + region/DAG model. The Node Types table is updated accordingly. + - **doc generator**: `build-docs.ts` now cards only reference pages that were + actually generated. Control-flow's schemas embed CEL-expression transforms + (like `Flow`/`FlowEdge`) and so have no JSON-Schema page; the index previously + carded every `.zod.ts`, producing a dangling "Control Flow" 404 link. Cards + now align with `meta.json` (generated pages only). + +- 8fa1e7f: Fix the docs generator (`build-docs.ts`) leaking an unmatched `<` / `{` into generated MDX, which broke the `apps/docs` Turbopack build (e.g. a SemVer range `">=4.0 <5"` in a `.describe()` string was read as the start of a JSX tag). Unmatched openers are now emitted as HTML entities (`<` / `{`); union-variant descriptions also go through the escaper. +- 55866f5: Fail loud instead of silently minting an ephemeral encryption key; ship a persistent env-master-key provider as the default (#1507). + + The default `ICryptoProvider` backs every secret-at-rest in the platform — + encrypted settings (`sys_setting.value_enc`), ObjectQL `secret` fields, and + runtime datasource credentials. Its key resolution previously fell back, + **silently**, to a fresh per-process `randomBytes(32)` key (or auto-minted a + new on-disk key on every boot) when no stable key was available. In an + ephemeral-FS container or a multi-node cluster, each restart / each node then + encrypts under a different key, and every previously-written `sys_secret` value + becomes undecryptable. The failure was invisible at encrypt and boot time and + only surfaced later as "all my saved passwords / API keys / DB credentials + fail to decrypt". + + - **Renamed `InMemoryCryptoProvider` → `LocalCryptoProvider`.** The old name + implied an ephemeral key when the provider in fact persists one. + `InMemoryCryptoProvider` stays as a deprecated alias for backward + compatibility. + - **Added `OS_SECRET_KEY`** as the canonical production master key (32-byte + hex or base64), the documented production default. `OS_DEV_CRYPTO_KEY` + remains the dev convenience key. + - **Fail-loud in production.** When `NODE_ENV=production` and no stable key + source (env var or a pre-existing persisted file) is available, the provider + now throws an actionable error at construction instead of generating a key — + turning silent data-loss into a config error at boot. It never auto-mints a + key in production. Development and test keep the ergonomic fallback + (persisted dev key / ephemeral test key). + - `serve` surfaces the production-key error verbatim and refuses to wire an + unstable provider for `secret` fields. + + KMS / Vault providers (managed custody, per-tenant keys, automatic rotation) + remain future/enterprise plug-ins behind the same `ICryptoProvider` seam; + "your stored secret is still there after a reboot" stays open-source. + ## 7.5.0 ## 7.4.1 diff --git a/packages/spec/package.json b/packages/spec/package.json index 2e2f7e524..4802cf9a3 100644 --- a/packages/spec/package.json +++ b/packages/spec/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/spec", - "version": "7.5.0", + "version": "8.0.0", "description": "ObjectStack Protocol & Specification - TypeScript Interfaces, JSON Schemas, and Convention Configurations", "license": "Apache-2.0", "main": "dist/index.js", diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 574308c0c..0649241f5 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/types +## 8.0.0 + +### Patch Changes + +- Updated dependencies [955d4c8] +- Updated dependencies [b046ec2] +- Updated dependencies [02d6359] +- Updated dependencies [7648242] +- Updated dependencies [8fa1e7f] +- Updated dependencies [55866f5] +- Updated dependencies [60f9c45] + - @objectstack/spec@8.0.0 + ## 7.5.0 ### Patch Changes diff --git a/packages/types/package.json b/packages/types/package.json index b7d36269f..f5651e378 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/types", - "version": "7.5.0", + "version": "8.0.0", "license": "Apache-2.0", "description": "Shared interfaces describing the ObjectStack Runtime environment", "main": "dist/index.js", diff --git a/packages/vscode-objectstack/CHANGELOG.md b/packages/vscode-objectstack/CHANGELOG.md index 14f1f1868..b20a7eb0e 100644 --- a/packages/vscode-objectstack/CHANGELOG.md +++ b/packages/vscode-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # objectstack-vscode +## 8.0.0 + ## 7.5.0 ## 7.4.1 diff --git a/packages/vscode-objectstack/package.json b/packages/vscode-objectstack/package.json index 55844d75a..8228babad 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": "7.5.0", + "version": "8.0.0", "publisher": "objectstack", "license": "Apache-2.0", "repository": {