From 5d5accd976fa4b811900a41c2adf8f0737c736ea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 10 Jul 2026 09:39:46 +0000 Subject: [PATCH] chore: version packages --- .changeset/action-ctx-user-identity.md | 23 --- .../adr-0090-showcase-permission-zoo.md | 43 ---- .changeset/adr-0090-vocab-leftovers.md | 31 --- .changeset/book-audience-permission-set.md | 13 -- .changeset/connect-agent-ui-bundle.md | 14 -- .changeset/enable-capability-gates-2707.md | 39 ---- .changeset/explain-rest-endpoint.md | 24 --- .../files-capability-attachments-2727.md | 33 --- .../lint-master-detail-ungranted-crud.md | 23 --- .changeset/liveness-authorwarn-sweep.md | 28 --- .changeset/mcp-skill-endpoint.md | 18 -- .../perm-runtime-fixes-2734-2735-2737.md | 32 --- .changeset/position-approver-type.md | 26 --- .changeset/protocol-version-13-lockstep.md | 11 - .changeset/setup-nav-positions-label.md | 12 -- .changeset/setup-positions-nav-label.md | 6 - .../suggested-audience-bindings-surface.md | 39 ---- .changeset/uninstall-permission-cleanup.md | 34 --- examples/app-crm/CHANGELOG.md | 18 ++ examples/app-crm/package.json | 2 +- examples/app-showcase/CHANGELOG.md | 88 ++++++++ examples/app-showcase/package.json | 2 +- examples/app-todo/CHANGELOG.md | 27 +++ examples/app-todo/package.json | 2 +- examples/embed-objectql/CHANGELOG.md | 17 ++ examples/embed-objectql/package.json | 2 +- packages/adapters/hono/CHANGELOG.md | 11 + packages/adapters/hono/package.json | 2 +- packages/apps/account/CHANGELOG.md | 18 ++ packages/apps/account/package.json | 2 +- packages/apps/setup/CHANGELOG.md | 18 ++ packages/apps/setup/package.json | 2 +- packages/apps/studio/CHANGELOG.md | 18 ++ packages/apps/studio/package.json | 2 +- packages/cli/CHANGELOG.md | 171 ++++++++++++++++ packages/cli/package.json | 2 +- packages/client-react/CHANGELOG.md | 16 ++ packages/client-react/package.json | 2 +- packages/client/CHANGELOG.md | 15 ++ packages/client/package.json | 2 +- packages/cloud-connection/CHANGELOG.md | 20 ++ packages/cloud-connection/package.json | 2 +- .../connectors/connector-mcp/CHANGELOG.md | 15 ++ .../connectors/connector-mcp/package.json | 2 +- .../connectors/connector-openapi/CHANGELOG.md | 15 ++ .../connectors/connector-openapi/package.json | 2 +- .../connectors/connector-rest/CHANGELOG.md | 15 ++ .../connectors/connector-rest/package.json | 2 +- .../connectors/connector-slack/CHANGELOG.md | 15 ++ .../connectors/connector-slack/package.json | 2 +- packages/console/CHANGELOG.md | 2 + packages/console/package.json | 2 +- packages/core/CHANGELOG.md | 14 ++ packages/core/package.json | 2 +- packages/create-objectstack/CHANGELOG.md | 2 + packages/create-objectstack/package.json | 2 +- packages/dogfood/CHANGELOG.md | 25 +++ packages/dogfood/package.json | 2 +- packages/downstream-contract/CHANGELOG.md | 14 ++ packages/downstream-contract/package.json | 2 +- packages/formula/CHANGELOG.md | 14 ++ packages/formula/package.json | 2 +- packages/lint/CHANGELOG.md | 58 ++++++ packages/lint/package.json | 2 +- packages/mcp/CHANGELOG.md | 42 ++++ packages/mcp/package.json | 2 +- packages/metadata-core/CHANGELOG.md | 14 ++ packages/metadata-core/package.json | 2 +- packages/metadata-fs/CHANGELOG.md | 6 + packages/metadata-fs/package.json | 2 +- packages/metadata-protocol/CHANGELOG.md | 49 +++++ packages/metadata-protocol/package.json | 2 +- packages/metadata/CHANGELOG.md | 22 ++ packages/metadata/package.json | 2 +- packages/objectql/CHANGELOG.md | 48 +++++ packages/objectql/package.json | 2 +- packages/observability/CHANGELOG.md | 14 ++ packages/observability/package.json | 2 +- packages/platform-objects/CHANGELOG.md | 33 +++ packages/platform-objects/package.json | 2 +- packages/plugins/driver-memory/CHANGELOG.md | 15 ++ packages/plugins/driver-memory/package.json | 2 +- packages/plugins/driver-mongodb/CHANGELOG.md | 15 ++ packages/plugins/driver-mongodb/package.json | 2 +- packages/plugins/driver-sql/CHANGELOG.md | 44 ++++ packages/plugins/driver-sql/package.json | 2 +- .../plugins/driver-sqlite-wasm/CHANGELOG.md | 17 ++ .../plugins/driver-sqlite-wasm/package.json | 2 +- packages/plugins/embedder-openai/CHANGELOG.md | 14 ++ packages/plugins/embedder-openai/package.json | 2 +- .../plugins/knowledge-memory/CHANGELOG.md | 16 ++ .../plugins/knowledge-memory/package.json | 2 +- .../plugins/knowledge-ragflow/CHANGELOG.md | 16 ++ .../plugins/knowledge-ragflow/package.json | 2 +- .../plugins/plugin-approvals/CHANGELOG.md | 43 ++++ .../plugins/plugin-approvals/package.json | 2 +- packages/plugins/plugin-audit/CHANGELOG.md | 81 ++++++++ packages/plugins/plugin-audit/package.json | 2 +- packages/plugins/plugin-auth/CHANGELOG.md | 20 ++ packages/plugins/plugin-auth/package.json | 2 +- packages/plugins/plugin-dev/CHANGELOG.md | 34 +++ packages/plugins/plugin-dev/package.json | 2 +- packages/plugins/plugin-email/CHANGELOG.md | 20 ++ packages/plugins/plugin-email/package.json | 2 +- .../plugins/plugin-hono-server/CHANGELOG.md | 17 ++ .../plugins/plugin-hono-server/package.json | 2 +- packages/plugins/plugin-reports/CHANGELOG.md | 19 ++ packages/plugins/plugin-reports/package.json | 2 +- packages/plugins/plugin-security/CHANGELOG.md | 150 ++++++++++++++ packages/plugins/plugin-security/package.json | 2 +- packages/plugins/plugin-sharing/CHANGELOG.md | 85 ++++++++ packages/plugins/plugin-sharing/package.json | 2 +- packages/plugins/plugin-webhooks/CHANGELOG.md | 16 ++ packages/plugins/plugin-webhooks/package.json | 2 +- packages/rest/CHANGELOG.md | 166 +++++++++++++++ packages/rest/package.json | 2 +- packages/runtime/CHANGELOG.md | 105 ++++++++++ packages/runtime/package.json | 2 +- packages/sdui-parser/CHANGELOG.md | 2 + packages/sdui-parser/package.json | 2 +- .../services/service-analytics/CHANGELOG.md | 15 ++ .../services/service-analytics/package.json | 2 +- .../services/service-automation/CHANGELOG.md | 16 ++ .../services/service-automation/package.json | 2 +- packages/services/service-cache/CHANGELOG.md | 16 ++ packages/services/service-cache/package.json | 2 +- .../service-cluster-redis/CHANGELOG.md | 15 ++ .../service-cluster-redis/package.json | 2 +- .../services/service-cluster/CHANGELOG.md | 15 ++ .../services/service-cluster/package.json | 2 +- .../services/service-datasource/CHANGELOG.md | 15 ++ .../services/service-datasource/package.json | 2 +- packages/services/service-i18n/CHANGELOG.md | 15 ++ packages/services/service-i18n/package.json | 2 +- packages/services/service-job/CHANGELOG.md | 19 ++ packages/services/service-job/package.json | 2 +- .../services/service-knowledge/CHANGELOG.md | 15 ++ .../services/service-knowledge/package.json | 2 +- .../services/service-messaging/CHANGELOG.md | 15 ++ .../services/service-messaging/package.json | 2 +- .../services/service-package/CHANGELOG.md | 15 ++ .../services/service-package/package.json | 2 +- packages/services/service-queue/CHANGELOG.md | 19 ++ packages/services/service-queue/package.json | 2 +- .../services/service-realtime/CHANGELOG.md | 19 ++ .../services/service-realtime/package.json | 2 +- .../services/service-settings/CHANGELOG.md | 20 ++ .../services/service-settings/package.json | 2 +- .../services/service-storage/CHANGELOG.md | 20 ++ .../services/service-storage/package.json | 2 +- packages/spec/CHANGELOG.md | 193 ++++++++++++++++++ packages/spec/package.json | 2 +- packages/triggers/trigger-api/CHANGELOG.md | 15 ++ packages/triggers/trigger-api/package.json | 2 +- .../trigger-record-change/CHANGELOG.md | 15 ++ .../trigger-record-change/package.json | 2 +- .../triggers/trigger-schedule/CHANGELOG.md | 15 ++ .../triggers/trigger-schedule/package.json | 2 +- packages/types/CHANGELOG.md | 14 ++ packages/types/package.json | 2 +- packages/verify/CHANGELOG.md | 35 ++++ packages/verify/package.json | 2 +- packages/vscode-objectstack/CHANGELOG.md | 2 + packages/vscode-objectstack/package.json | 2 +- 164 files changed, 2360 insertions(+), 522 deletions(-) delete mode 100644 .changeset/action-ctx-user-identity.md delete mode 100644 .changeset/adr-0090-showcase-permission-zoo.md delete mode 100644 .changeset/adr-0090-vocab-leftovers.md delete mode 100644 .changeset/book-audience-permission-set.md delete mode 100644 .changeset/connect-agent-ui-bundle.md delete mode 100644 .changeset/enable-capability-gates-2707.md delete mode 100644 .changeset/explain-rest-endpoint.md delete mode 100644 .changeset/files-capability-attachments-2727.md delete mode 100644 .changeset/lint-master-detail-ungranted-crud.md delete mode 100644 .changeset/liveness-authorwarn-sweep.md delete mode 100644 .changeset/mcp-skill-endpoint.md delete mode 100644 .changeset/perm-runtime-fixes-2734-2735-2737.md delete mode 100644 .changeset/position-approver-type.md delete mode 100644 .changeset/protocol-version-13-lockstep.md delete mode 100644 .changeset/setup-nav-positions-label.md delete mode 100644 .changeset/setup-positions-nav-label.md delete mode 100644 .changeset/suggested-audience-bindings-surface.md delete mode 100644 .changeset/uninstall-permission-cleanup.md diff --git a/.changeset/action-ctx-user-identity.md b/.changeset/action-ctx-user-identity.md deleted file mode 100644 index 3caf722c43..0000000000 --- a/.changeset/action-ctx-user-identity.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -"@objectstack/runtime": patch ---- - -fix(runtime): action body `ctx.user` now reflects the session operator, not `system` - -The `POST /actions/:object/:action` route called `handleActions` directly, -bypassing `dispatcher.dispatch()` — so `resolveExecutionContext` never ran and -the action handler's `ctx.user` was hard-coded to `{ id: 'system' }`. Handlers -could not branch on the operator's identity or business roles, nor enforce -server-side ownership. (#2701) - -- The action routes now dispatch through `dispatch()` like the automation/AI - routes, so the per-request pipeline resolves the session identity (and swaps - to the per-project kernel) before the action body runs. -- `handleActions` builds `ctx.user` from the resolved `ExecutionContext`, - exposing `id`, `email`, `roles`/`positions` (ADR-0090 business roles), - `permissions`, and `tenantId` — matching the MCP `runAction` and - record-change trigger paths. It falls back to a `system` principal only for a - genuinely anonymous / self-invoked call. - -No authoring change is required: action handlers that previously always saw -`ctx.user.id === 'system'` will now see the real caller. diff --git a/.changeset/adr-0090-showcase-permission-zoo.md b/.changeset/adr-0090-showcase-permission-zoo.md deleted file mode 100644 index b4e81c4c34..0000000000 --- a/.changeset/adr-0090-showcase-permission-zoo.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -"@objectstack/spec": minor -"@objectstack/example-showcase": minor -"@objectstack/plugin-sharing": patch -"@objectstack/plugin-security": patch ---- - -ADR-0090 permission-model zoo + docs alignment. - -**Showcase (`@objectstack/example-showcase`)** now exercises the full Permission -Model v2 authoring surface and is guarded by a new runtime dogfood test -(`showcase-permission-zoo.dogfood.test.ts`): typed `definePosition`/ -`definePermissionSet`/`defineSharingRule` factories; six flat positions (the -stale pre-D3 `parent` fields are gone); permission sets covering CRUD+FLS+RLS, -org-depth read/write asymmetry (`readScope: 'org'` / `writeScope: 'own'`), -View-All (auditor) and Modify-All (ops) bypasses, `systemPermissions` -(`setup.access`), the `isDefault` everyone-suggestion (incl. personal-data -grants on the `private`-OWD note object), a guest-safe set for the `guest` -anchor (D9), and a delegated-administration `adminScope` bounded to a seeded -`sys_business_unit` subtree (D12). Objects gain `externalSharingModel` dials -(D11). A committed `access-matrix.json` opts the showcase into the D6 snapshot -gate. Hierarchy depths (`own_and_reports`/`unit`/`unit_and_below`) are -deliberately NOT authored — they are enterprise (`hierarchy-security`) and the -open runtime fails closed; BU-shaped visibility is demonstrated via the -enforced `unit_and_subordinates` sharing-rule recipient instead. - -**`@objectstack/spec`**: `defineStack` strict cross-reference validation no -longer rejects permission grants or seed datasets that target platform-provided -objects (`sys_`/`cloud_`/`ai_` prefixes) — a delegated-admin set carrying CRUD -on the RBAC link tables (ADR-0090 D12) and an app seeding the business-unit -tree are legitimate shapes; the typo net stays intact for the stack's own -objects. Stale pre-ADR-0090 vocabulary in zod docstrings (rls/territory/ -sharing/tool/agent) is rewritten; the auto-generated references (including the -previously missing `security/explain.mdx`) are regenerated. - -**Docs**: `protocol/objectql/security.mdx` rewritten to the v2 model (no -profiles, positions, canonical OWD four + D1 private default + -`externalSharingModel`, position-scoped RLS, enforced sharing recipients); -`isProfile` scrubbed from every authoring example; the dead -`/docs/references/identity/role` link fixed; implementation-status and -plugin READMEs aligned. Remaining rename misses are tracked in #2722 -(RLSUserContext.role), #2723 (portal `profiles`), #2724 (sys_record_share -`role` enum). diff --git a/.changeset/adr-0090-vocab-leftovers.md b/.changeset/adr-0090-vocab-leftovers.md deleted file mode 100644 index 8ce851c921..0000000000 --- a/.changeset/adr-0090-vocab-leftovers.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -"@objectstack/spec": minor -"@objectstack/plugin-sharing": patch -"@objectstack/example-showcase": minor ---- - -ADR-0090 vocabulary leftovers (#2722, #2723, #2724) — the last "role"/"profile" -surfaces are renamed one-step, no aliases (launch-window discipline). - -**`PortalSchema.profiles` → `positions`** (#2723, D2 removal miss). FROM → TO: -`profiles: ['client_portal_user']` → `positions: ['client_portal_user']` — -portal admission is now position-scoped; use the built-in `guest` position -for anonymous-only portals. The removed `profiles` key is a loud tombstone: -authoring it fails with the prescription instead of silently stripping. The -showcase Client Portal is migrated and now admits a real declared position -(`client_portal_user`). - -**`RLSUserContextSchema.role` → `positions`** (#2722, D3 rename miss). FROM → -TO: `role: string | string[]` → `positions: string[]` — matches the runtime -shape the RLS compiler resolves as `current_user.positions`. No runtime -consumer read the old field (the compiler has its own context type); public -export names are unchanged. - -**`sys_record_share.recipient_type` `'role'` → `'position'`** (#2724, D3). -The record-share enum and the `ShareRecipientType` contract type now match -the already-migrated spec zod enum. No stored-data migration is required: -no reader expands non-`user` record-share rows (rules materialize per-user -grants), so legacy `'role'` rows were inert. The plugin-sharing translation -bundles are regenerated — fixing the pre-stale `sys_sharing_rule` options -block too — with zh-CN/ja-JP labels patched per the generated-file contract -(业务单元及下级 / ビジネスユニットと下位階層). diff --git a/.changeset/book-audience-permission-set.md b/.changeset/book-audience-permission-set.md deleted file mode 100644 index d0c3a901bd..0000000000 --- a/.changeset/book-audience-permission-set.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@objectstack/spec': major ---- - -`BookAudience` gated arm renamed: `{ profile: string }` → `{ permissionSet: string }`. - -ADR-0090 D2 removed the Profile concept, but `book.audience` (ADR-0046 §6.7) -still modelled its gated arm as a profile reference. Books ship in packages, -and packages own permission sets but never positions (ADR-0090 D9), so the -gate is a capability reference — a permission-set name the reader must hold, -e.g. `{ permissionSet: 'crm_admin' }`. Pre-launch one-step rename, no alias: -the zod union now rejects `{ profile }` at parse time. `'org'` and `'public'` -literals are unchanged (`'public'` ≡ the built-in `guest` position, D9). diff --git a/.changeset/connect-agent-ui-bundle.md b/.changeset/connect-agent-ui-bundle.md deleted file mode 100644 index 91218ee2f6..0000000000 --- a/.changeset/connect-agent-ui-bundle.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@objectstack/mcp': minor -'@objectstack/platform-objects': patch ---- - -feat(mcp): plugin-carried "Connect an agent" Setup page (#2714 Phase 1) - -The MCP plugin now registers a Setup page (`connect_agent`) plus its -navigation entry under Integrations — the nav lives and dies with the -capability (cloud ADR-0009 principle) and follows the surface's default-on -switch: an opted-out deployment (`OS_MCP_SERVER_ENABLED=false`) gets no page -and no entry. The page body is the `mcp:connect-agent` SDUI widget provided -by objectui (objectui#2372): env MCP URL, per-client connect cards, SKILL.md -download, API-key minting. zh-CN nav label included. diff --git a/.changeset/enable-capability-gates-2707.md b/.changeset/enable-capability-gates-2707.md deleted file mode 100644 index 8a82c18f35..0000000000 --- a/.changeset/enable-capability-gates-2707.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -'@objectstack/spec': minor -'@objectstack/plugin-audit': minor -'@objectstack/rest': patch -'@objectstack/cli': patch ---- - -feat(data): make object `enable.feeds`/`enable.activities` real opt-out gates; define the `enable.trackHistory` contract (#2707) - -`ObjectSchema.enable.{files,trackHistory,activities,feeds}` were parsed but -(mostly) unconsumed — an author setting them got nothing, silently. Per the -enforce-or-remove doctrine, each flag now has a defined enforcement contract: - -- `enable.activities` — opt-OUT writer gate. Spec default flips - `false → true`; plugin-audit keeps mirroring CRUD into the `sys_activity` - timeline unless the object declares an explicit `activities: false` - (behavior-preserving for every existing stack; the off-switch is the - per-object lever for activity-row growth, ADR-0057). The compliance - `sys_audit_log` row is NOT gated. -- `enable.feeds` — opt-OUT with server-side enforcement. Spec default flips - `false → true`; an explicit `feeds: false` now rejects `sys_comment` - creation targeting that object at the engine hook seam - (403 `FEEDS_DISABLED`, fail-closed like `CLONE_DISABLED`). -- `enable.trackHistory` — was misclassified `dead` in the liveness ledger: - the console has gated the record History tab on it since 2026-05. - Reclassified live with the two-grain contract documented (object flag = - History-tab master switch; per-field `trackHistory` = diff selector; audit - *capture* stays unconditional as a compliance ledger). -- `enable.files` — stays dead + authorWarn (reserved for the future generic - Attachments panel; use `Field.file`/`Field.image` meanwhile). Its - `describe()` now says so instead of advertising a capability that - doesn't exist. - -The default flips can't be avoided: with `default(false)`, compiled output -materializes `false` for every object with an `enable` block, making -"author explicitly opted out" indistinguishable from "schema default" — so -opt-out semantics require the default to be `true` (same posture as -`trash`/`mru`/`clone`). Liveness ledger + reference docs regenerated; -compile-time authorWarn now fires only for `enable.files`. diff --git a/.changeset/explain-rest-endpoint.md b/.changeset/explain-rest-endpoint.md deleted file mode 100644 index 46ce2e838d..0000000000 --- a/.changeset/explain-rest-endpoint.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -"@objectstack/rest": minor -"@objectstack/plugin-security": minor ---- - -ADR-0090 D6 — the explain engine gets its REST face (#2696). - -**`@objectstack/rest`**: new `GET/POST /api/v1/security/explain` -(`object`/`operation`/`userId`, validated against the spec's -`ExplainRequestSchema`) delegating to the `security` service's -`explain(request, callerContext)` — the same code paths the enforcement -middleware runs, so the returned `ExplainDecision` is explained by -construction. The route is authenticated-only (401 even on -`requireAuth=false` deployments), returns 501 when no security service -exposes `explain`, and maps the service's `PermissionDeniedError` to 403. -Registered on scoped (`/environments/:environmentId`) and unscoped base -paths; the env kernel's own `security` service is preferred, with a new -host-kernel `securityServiceProvider` fallback wired by the REST plugin. - -**`@objectstack/plugin-security`**: `explainAccessForCaller` now honors -delegated administration (D12) — explaining ANOTHER user is authorized by -`manage_users` **or** a delegated `adminScope` whose business-unit subtree -covers the target user (new `DelegatedAdminGate.scopesCoverUser`, fail-closed -on unresolvable scopes/memberships). Self-explain still needs neither. diff --git a/.changeset/files-capability-attachments-2727.md b/.changeset/files-capability-attachments-2727.md deleted file mode 100644 index 0cf783c389..0000000000 --- a/.changeset/files-capability-attachments-2727.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -'@objectstack/spec': minor -'@objectstack/plugin-audit': minor -'@objectstack/rest': patch -'@objectstack/cli': patch ---- - -feat(data): `enable.files` goes live — opt-in gate for the generic Attachments surface (#2727) - -The last dead ObjectCapabilities flag gets its enforcement contract. -`enable.files` is opt-IN (spec default stays `false`): the generic record -Attachments panel is a new surface, not an existing behavior. - -- plugin-audit registers a `sys_attachment` beforeInsert hook: attachment - join rows may only target objects that explicitly declare - `enable: { files: true }` — anything else (absent block, absent flag, - explicit false, unknown object) rejects fail-closed with - 403 `FILES_DISABLED` (CLONE_DISABLED / FEEDS_DISABLED pattern). -- `mapDataError` maps `FILES_DISABLED` → 403 with the gated target object - (generic data routes bypass `sendError`'s `.status` passthrough — the - #2707 lesson, applied at introduction time). -- `Field.file` / `Field.image` are deliberately independent: they store - the file URL in the record's own column and never create - `sys_attachment` rows, so field-level attachments work regardless of - this flag. -- Liveness ledger: `enable.files` dead→live, authorWarn dropped — - ObjectCapabilities is now 100% live. The compile-time - liveness-dead-property warning no longer fires for it; `describe()` and - the reference docs state the real contract. - -Companion objectui PR ships `RecordAttachmentsPanel` (upload/list/ -download/delete over the presigned three-step storage flow), rendered on -record pages when the flag is true. diff --git a/.changeset/lint-master-detail-ungranted-crud.md b/.changeset/lint-master-detail-ungranted-crud.md deleted file mode 100644 index 412c84f68c..0000000000 --- a/.changeset/lint-master-detail-ungranted-crud.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -'@objectstack/lint': patch ---- - -feat(lint): warn when a master-detail child has no object-level CRUD grant (ADR-0090 D7) - -New security-posture rule `security-master-detail-ungranted` (advisory -`warning`; it does not gate the build). A master-detail DETAIL object derives -its RECORD-level access from the master (ADR-0055 `controlled_by_parent`, -gate ②), but object-level CRUD is a SEPARATE gate ① (`checkObjectPermission`) -that is never derived — a permission set that grants the parent but forgets the -child denies role-bound non-admin users a 403 before the parent-derived access -is ever consulted, surfacing as the silent "can't fill in / can't submit the -subtable" trap (framework#2700, downstream os-tianshun-mtc#43). - -The rule flags a non-system detail (has a `master_detail` field) that NO -authored permission set grants (explicit entry or `'*'` wildcard). It stays -silent when the package authors no permission sets, when a package-declared -`'*'` wildcard grant covers every object, or for `sys_*` / `isSystem` objects — -keeping the false-positive rate near zero. The residual per-set gap (one role -grants it, another forgets it) is intentionally out of scope, and CRUD -auto-inheritance is deliberately NOT adopted (secure-by-default, Salesforce -parity). diff --git a/.changeset/liveness-authorwarn-sweep.md b/.changeset/liveness-authorwarn-sweep.md deleted file mode 100644 index ecf8dc238a..0000000000 --- a/.changeset/liveness-authorwarn-sweep.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -'@objectstack/spec': patch -'@objectstack/cli': patch ---- - -chore(liveness): authorWarn sweep across all governed types + lint coverage to match - -Every remaining *misleading* dead property now warns at compile time (12 new -markings): `flow.errorHandling.fallbackNodeId` (engine uses fault edges), -`flow.nodes[].outputSchema` (never validated), `flow.template`, -`action.timeout` (no runtime enforcement), `object.tenancy.strategy` / -`crossTenantAccess` (only enabled+tenantField are read), `object.abstract`, -`field.dependencies`, `agent.tenantId`, `tool.permissions` (invocation not -permission-gated), `permission.contextVariables` (RLS reads current_user.* -only), `dataset.measures[].certified` (governance flag unenforced). - -The compile-time lint previously only checked objects+fields, so markings on -other types were silent — it now covers every governed type (flat stack -collections) and fans container checks out over arrays (one finding per -item+path). Benign display metadata (label/description/tags) stays unmarked -per the README's signal rules. - -Also re-anchors the README: the counts table had drifted badly (field listed -as 34 live/39 dead vs the ledger's actual 54/6; `action.disabled` was still -described as ignored though it went live via metadata-admin) — replaced with -regenerable numbers plus the script to regenerate them, and added the -cross-repo evidence rule (grep ../objectui before classifying dead — the -enable.trackHistory lesson, #2707). diff --git a/.changeset/mcp-skill-endpoint.md b/.changeset/mcp-skill-endpoint.md deleted file mode 100644 index 54ea3e8a41..0000000000 --- a/.changeset/mcp-skill-endpoint.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@objectstack/mcp': minor -'@objectstack/runtime': minor ---- - -feat(mcp): `GET /api/v1/mcp/skill` — download the environment-customized Agent Skill - -`renderSkillMarkdown()` was export-only; nothing served it over HTTP, so the -"one generic skill" distributable (ADR-0036 Amendment C) had no self-serve -outlet. The runtime dispatcher now serves it at `GET /api/v1/mcp/skill` as -`text/markdown` — public like `/discovery` (generic agent instructions plus a -URL the caller already knows; no schema, no tenant data), gated on the same -default-on MCP switch (404 when opted out), 501 when the MCP plugin isn't -loaded. The environment URL comes from the auth service's canonical -`getMcpResourceUrl()` with a request-host fallback. `MCPServerRuntime` gains -`renderSkill()` so hosts reach the renderer via the registered `'mcp'` -service without a package dependency. Feeds the Setup "Connect an agent" -page (objectui#2363) and the distribution shells (#2714). diff --git a/.changeset/perm-runtime-fixes-2734-2735-2737.md b/.changeset/perm-runtime-fixes-2734-2735-2737.md deleted file mode 100644 index 8c9a53dcdf..0000000000 --- a/.changeset/perm-runtime-fixes-2734-2735-2737.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -"@objectstack/driver-sql": patch -"@objectstack/objectql": patch ---- - -Three permission-runtime fixes found dogfooding the ADR-0090 showcase zoo: - -**#2734 — driver tenant wall hid every global row.** `applyTenantScope` used -strict `organization_id = :tenantId` equality, so any caller with an active -org (every logged-in admin) saw ZERO rows in the org-less platform tables -(`sys_position`, `sys_permission_set`, `sys_business_unit` — Setup → Access -Control rendered empty on a fresh deployment) and none of the first-boot -seeds (stamped before the default org exists). The scope is now -`(organization_id = :tenantId OR organization_id IS NULL)`: a NULL tenant -column marks a GLOBAL/platform row that belongs to no other tenant; rows -stamped with a DIFFERENT org stay invisible exactly as before. - -**#2735 — bulkCreate skipped write-side marshaling.** The batch insert path -(the common case for seeds/imports since #2678) handed raw object values -(`location`/`json`/`array` fields) to the SQLite binder — "Wrong API use: -tried to bind a value of an unknown type" — silently failing whole seed -batches (showcase accounts/tasks/field-zoo seeded zero rows). `bulkCreate` -now runs each row through the same `formatInput` + `applyWriteColumnMap` + -timestamp-stamp sequence as `create()`, and decodes the read-back the same -way. - -**#2737 — count()/aggregate() ignored injected read filters.** `engine.count` -and `engine.aggregate` built a LOCAL ast inside the executor, discarding the -RLS/OWD filters the security and sharing middlewares inject into -`opCtx.ast.where` — `GET /data/:object` returned scoped `records` with an -UNSCOPED `total` (a row-count oracle over invisible records, broken -pagination). Both now carry their ast on the opCtx exactly like `find()`. diff --git a/.changeset/position-approver-type.md b/.changeset/position-approver-type.md deleted file mode 100644 index 64069742cb..0000000000 --- a/.changeset/position-approver-type.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -'@objectstack/spec': minor -'@objectstack/plugin-approvals': minor -'@objectstack/lint': minor -'@objectstack/cli': patch ---- - -Add a `position` approver type so approvals can route to org positions (ADR-0090 D3 fallout). - -Post ADR-0090 D3 the `role` approver type resolves against the better-auth org-membership -tier (`sys_member.role`: `owner`/`admin`/`member`) — it was never a position. Downstream -apps that authored `{ type: 'role', value: 'sales_manager' }` silently routed approvals to -nobody. Now: - -- **spec**: `ApproverType` gains `'position'` — `value` is the position machine name; the - approver expands to its holders via `sys_user_position`. Authoring guidance: keep - `type: 'role'` ONLY for membership tiers; for org positions use - `{ type: 'position', value: '' }` (one-line fix for the mismatch above). -- **plugin-approvals**: the engine resolves `position` approvers via `sys_user_position` ∪ - the `sys_member.role` transition source (same semantics as `PositionGraphService` in - plugin-sharing). The `department` approver type is now honored by its spec spelling - (previously only the off-spec `business_unit`/`bu` dialect matched). -- **lint**: new `validateApprovalApprovers` rule — `approval-role-not-membership-tier` - warns when a `role` approver's value is not a membership tier and prescribes the - `position` rewrite; `approval-approver-type-unknown` flags off-spec approver types - (with a `business_unit` → `department` fix-it). Wired into `os lint`. diff --git a/.changeset/protocol-version-13-lockstep.md b/.changeset/protocol-version-13-lockstep.md deleted file mode 100644 index fbf2fb8814..0000000000 --- a/.changeset/protocol-version-13-lockstep.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@objectstack/spec': patch ---- - -fix(spec): bump PROTOCOL_VERSION 12.0.0 → 13.0.0 to match the spec major - -The version-packages roll (#2720) took `@objectstack/spec` to major `13.0.0` -but left `PROTOCOL_VERSION` at `12.0.0`, so `protocol-version.test.ts` (the -lockstep guard that asserts the protocol major equals the package major) failed -on `main` — reddening Test Core for every PR. Restore the lockstep so the -loader/installer handshake advertises the major the package actually ships. diff --git a/.changeset/setup-nav-positions-label.md b/.changeset/setup-nav-positions-label.md deleted file mode 100644 index 888c870dae..0000000000 --- a/.changeset/setup-nav-positions-label.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"@objectstack/plugin-security": patch -"@objectstack/platform-objects": patch ---- - -Setup → Access Control nav: the `sys_position` entry is renamed -`nav_roles`/"Roles" → `nav_positions`/"Positions" (岗位 / ポジション / -Posiciones) — the last "role" leftover in platform UI copy (ADR-0090 D3; -the Studio-side relabel already landed in objectui). The framework's -`.objectui-sha` pin is bumped to pick up the Studio Access-pillar explain -panel ("why can this user access?", ADR-0090 D6) and the suggested -audience-binding install prompt (D5/D9). diff --git a/.changeset/setup-positions-nav-label.md b/.changeset/setup-positions-nav-label.md deleted file mode 100644 index b12bcc902e..0000000000 --- a/.changeset/setup-positions-nav-label.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@objectstack/plugin-security": patch -"@objectstack/platform-objects": patch ---- - -Setup navigation: the Access Control menu entry for `sys_position` is now labeled "Positions" (was still "Roles" after the ADR-0090 D3 rename) — `nav_roles` → `nav_positions`, with zh-CN 岗位 / ja-JP ポジション / es-ES Posiciones translations updated to match the position vocabulary. diff --git a/.changeset/suggested-audience-bindings-surface.md b/.changeset/suggested-audience-bindings-surface.md deleted file mode 100644 index cc1ddcd762..0000000000 --- a/.changeset/suggested-audience-bindings-surface.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -"@objectstack/plugin-security": minor -"@objectstack/runtime": minor -"@objectstack/rest": minor ---- - -ADR-0090 D5/D9 — suggested audience bindings become a queryable, confirmable surface. - -A package permission set declaring `isDefault: true` is an install-time -SUGGESTION to bind the set to the built-in `everyone` position — never -auto-bound. Until now the flag was only read at bootstrap as the fallback-set -name; after an install there was no way to see or act on the suggestion. - -**`@objectstack/plugin-security`**: new `sys_audience_binding_suggestion` -system object (read-only over the data API; unique per -package × set × anchor) plus a convergent reconciler -(`syncAudienceBindingSuggestions`) that reads every declared `isDefault` set — -boot-declared stack metadata AND installed package manifests, so a runtime -`POST /api/v1/packages` install is visible immediately — and keeps the table -honest: undeclared → pending row pruned, bound out-of-band → marked -`confirmed` (observed). The `security` service gains -`listAudienceBindingSuggestions` / `confirmAudienceBindingSuggestion` / -`dismissAudienceBindingSuggestion`, all pre-gated on tenant-level admin -(ADR-0066 superuser wildcard — anchors stay tenant-level only per D12). -Confirm writes the `sys_position_permission_set` row **with the caller's -execution context**, so the D5/D9 audience-anchor gate (no high-privilege -set on `everyone`/`guest`) and the D12 delegated-admin gate enforce the -binding; a set not yet materialized (installed this session) is first -seeded through the same provenance-checked upsert as the boot seeder -(ADR-0086 D4). - -**`@objectstack/rest`** and **`@objectstack/runtime`**: the HTTP surface, -registered on both API layers (the RestServer that `objectstack dev`/hono -serves, and the runtime HttpDispatcher used by the adapters) — -`GET /api/v1/security/suggested-bindings?status=&packageId=`, -`POST /api/v1/security/suggested-bindings/:id/confirm`, -`POST /api/v1/security/suggested-bindings/:id/dismiss` (401 unauthenticated, -403/404/409 mapped from the service's typed errors, 501/503 without -plugin-security). diff --git a/.changeset/uninstall-permission-cleanup.md b/.changeset/uninstall-permission-cleanup.md deleted file mode 100644 index b06f62f86f..0000000000 --- a/.changeset/uninstall-permission-cleanup.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -"@objectstack/metadata-protocol": minor -"@objectstack/plugin-security": minor -"@objectstack/rest": patch ---- - -Package uninstall now revokes the package's data-plane permission rows (#2747, ADR-0086 D3 / ADR-0090 D5 "no ghost grants"). - -**`@objectstack/metadata-protocol`**: `deletePackage` gains an -uninstall-cleanup seam — the exact mirror of the publish materializer: -domain plugins register named cleanups via `registerUninstallCleanup(name, -fn)` and every cleanup runs with the uninstalled package id, its outcome -reported on the new `cleanups` array of the response (a failed revocation is -visible, never silent). `deletePackage` also unregisters the package from -the in-memory SchemaRegistry (best-effort), so the running kernel stops -serving it without waiting for a restart. - -**`@objectstack/plugin-security`**: registers the -`security.package-permissions` cleanup — deletes the package's own -`sys_permission_set` rows (`managed_by: 'package'` + matching `package_id` -only; env-authored and foreign-package rows are never touched, ADR-0086 D4), -their `sys_position_permission_set` / `sys_user_permission_set` bindings -(bindings first, so no dangling grants), and the package's -`sys_audience_binding_suggestion` rows (a reinstall re-prompts fresh). -Also fixes the engine-call signature in the suggestion module: `find`/`delete` -read `context` from their second argument — the previous trailing -`{ context }` argument was ignored, so deletes ran principal-less. - -**`@objectstack/rest`**: `DELETE /api/v1/packages/:id` (no version pin) now -goes through `protocol.deletePackage` — one uninstall semantic instead of a -bare `sys_packages` row delete — removing the package's metadata, durable -record, registry entry, and running the cleanups; the response carries -`deletedCount` + `cleanups`. A version-scoped delete keeps the narrow -durable-registry semantics. diff --git a/examples/app-crm/CHANGELOG.md b/examples/app-crm/CHANGELOG.md index 4bfc8fafeb..a05157344b 100644 --- a/examples/app-crm/CHANGELOG.md +++ b/examples/app-crm/CHANGELOG.md @@ -1,5 +1,23 @@ # @objectstack/example-crm +## 4.0.78 + +### Patch Changes + +- Updated dependencies [57b8fe0] +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [bc26360] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [bd39dc5] + - @objectstack/runtime@14.0.0 + - @objectstack/spec@14.0.0 + ## 4.0.77 ### Patch Changes diff --git a/examples/app-crm/package.json b/examples/app-crm/package.json index acd7acfb06..e9f6dd449f 100644 --- a/examples/app-crm/package.json +++ b/examples/app-crm/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-crm", - "version": "4.0.77", + "version": "4.0.78", "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 09fa68be03..703e753075 100644 --- a/examples/app-showcase/CHANGELOG.md +++ b/examples/app-showcase/CHANGELOG.md @@ -1,5 +1,93 @@ # @objectstack/example-showcase +## 0.3.0 + +### Minor Changes + +- 0a8e685: ADR-0090 permission-model zoo + docs alignment. + + **Showcase (`@objectstack/example-showcase`)** now exercises the full Permission + Model v2 authoring surface and is guarded by a new runtime dogfood test + (`showcase-permission-zoo.dogfood.test.ts`): typed `definePosition`/ + `definePermissionSet`/`defineSharingRule` factories; six flat positions (the + stale pre-D3 `parent` fields are gone); permission sets covering CRUD+FLS+RLS, + org-depth read/write asymmetry (`readScope: 'org'` / `writeScope: 'own'`), + View-All (auditor) and Modify-All (ops) bypasses, `systemPermissions` + (`setup.access`), the `isDefault` everyone-suggestion (incl. personal-data + grants on the `private`-OWD note object), a guest-safe set for the `guest` + anchor (D9), and a delegated-administration `adminScope` bounded to a seeded + `sys_business_unit` subtree (D12). Objects gain `externalSharingModel` dials + (D11). A committed `access-matrix.json` opts the showcase into the D6 snapshot + gate. Hierarchy depths (`own_and_reports`/`unit`/`unit_and_below`) are + deliberately NOT authored — they are enterprise (`hierarchy-security`) and the + open runtime fails closed; BU-shaped visibility is demonstrated via the + enforced `unit_and_subordinates` sharing-rule recipient instead. + + **`@objectstack/spec`**: `defineStack` strict cross-reference validation no + longer rejects permission grants or seed datasets that target platform-provided + objects (`sys_`/`cloud_`/`ai_` prefixes) — a delegated-admin set carrying CRUD + on the RBAC link tables (ADR-0090 D12) and an app seeding the business-unit + tree are legitimate shapes; the typo net stays intact for the stack's own + objects. Stale pre-ADR-0090 vocabulary in zod docstrings (rls/territory/ + sharing/tool/agent) is rewritten; the auto-generated references (including the + previously missing `security/explain.mdx`) are regenerated. + + **Docs**: `protocol/objectql/security.mdx` rewritten to the v2 model (no + profiles, positions, canonical OWD four + D1 private default + + `externalSharingModel`, position-scoped RLS, enforced sharing recipients); + `isProfile` scrubbed from every authoring example; the dead + `/docs/references/identity/role` link fixed; implementation-status and + plugin READMEs aligned. Remaining rename misses are tracked in #2722 + (RLSUserContext.role), #2723 (portal `profiles`), #2724 (sys_record_share + `role` enum). + +- afa8115: ADR-0090 vocabulary leftovers (#2722, #2723, #2724) — the last "role"/"profile" + surfaces are renamed one-step, no aliases (launch-window discipline). + + **`PortalSchema.profiles` → `positions`** (#2723, D2 removal miss). FROM → TO: + `profiles: ['client_portal_user']` → `positions: ['client_portal_user']` — + portal admission is now position-scoped; use the built-in `guest` position + for anonymous-only portals. The removed `profiles` key is a loud tombstone: + authoring it fails with the prescription instead of silently stripping. The + showcase Client Portal is migrated and now admits a real declared position + (`client_portal_user`). + + **`RLSUserContextSchema.role` → `positions`** (#2722, D3 rename miss). FROM → + TO: `role: string | string[]` → `positions: string[]` — matches the runtime + shape the RLS compiler resolves as `current_user.positions`. No runtime + consumer read the old field (the compiler has its own context type); public + export names are unchanged. + + **`sys_record_share.recipient_type` `'role'` → `'position'`** (#2724, D3). + The record-share enum and the `ShareRecipientType` contract type now match + the already-migrated spec zod enum. No stored-data migration is required: + no reader expands non-`user` record-share rows (rules materialize per-user + grants), so legacy `'role'` rows were inert. The plugin-sharing translation + bundles are regenerated — fixing the pre-stale `sys_sharing_rule` options + block too — with zh-CN/ja-JP labels patched per the generated-file contract + (业务单元及下级 / ビジネスユニットと下位階層). + +### Patch Changes + +- Updated dependencies [57b8fe0] +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [bc26360] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [bd39dc5] + - @objectstack/runtime@14.0.0 + - @objectstack/spec@14.0.0 + - @objectstack/driver-sql@14.0.0 + - @objectstack/cloud-connection@14.0.0 + - @objectstack/connector-rest@14.0.0 + - @objectstack/connector-slack@14.0.0 + ## 0.2.23 ### Patch Changes diff --git a/examples/app-showcase/package.json b/examples/app-showcase/package.json index 1c64fa5759..c803068b20 100644 --- a/examples/app-showcase/package.json +++ b/examples/app-showcase/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-showcase", - "version": "0.2.23", + "version": "0.3.0", "description": "Kitchen-sink showcase workspace — exercises every metadata type, every view type, every chart type, and the major end-to-end capability chains (security, automation, analytics). Built for demonstration, debugging, and coverage-driven verification.", "license": "Apache-2.0", "private": true, diff --git a/examples/app-todo/CHANGELOG.md b/examples/app-todo/CHANGELOG.md index ad5dbd9b6c..1406a332cb 100644 --- a/examples/app-todo/CHANGELOG.md +++ b/examples/app-todo/CHANGELOG.md @@ -1,5 +1,32 @@ # @objectstack/example-todo +## 4.0.78 + +### Patch Changes + +- Updated dependencies [57b8fe0] +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [bc26360] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [bd39dc5] + - @objectstack/runtime@14.0.0 + - @objectstack/spec@14.0.0 + - @objectstack/mcp@14.0.0 + - @objectstack/objectql@14.0.0 + - @objectstack/client@14.0.0 + - @objectstack/metadata@14.0.0 + - @objectstack/driver-sqlite-wasm@14.0.0 + - @objectstack/knowledge-memory@14.0.0 + - @objectstack/service-knowledge@14.0.0 + ## 4.0.77 ### Patch Changes diff --git a/examples/app-todo/package.json b/examples/app-todo/package.json index 3d8a7d2113..a0357d969c 100644 --- a/examples/app-todo/package.json +++ b/examples/app-todo/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-todo", - "version": "4.0.77", + "version": "4.0.78", "description": "Example Todo App using ObjectStack Protocol", "license": "Apache-2.0", "private": true, diff --git a/examples/embed-objectql/CHANGELOG.md b/examples/embed-objectql/CHANGELOG.md index 86f7aea6b3..95aa970b41 100644 --- a/examples/embed-objectql/CHANGELOG.md +++ b/examples/embed-objectql/CHANGELOG.md @@ -1,5 +1,22 @@ # @objectstack/example-embed-objectql +## 0.0.18 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/objectql@14.0.0 + - @objectstack/driver-memory@14.0.0 + ## 0.0.17 ### Patch Changes diff --git a/examples/embed-objectql/package.json b/examples/embed-objectql/package.json index e74b3cfa1c..b60459acdf 100644 --- a/examples/embed-objectql/package.json +++ b/examples/embed-objectql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-embed-objectql", - "version": "0.0.17", + "version": "0.0.18", "private": true, "description": "Embed the ObjectQL engine as a plain library via @objectstack/objectql/core — no kernel, no plugins, no metadata protocol (ADR-0076).", "type": "module", diff --git a/packages/adapters/hono/CHANGELOG.md b/packages/adapters/hono/CHANGELOG.md index c1a1400d65..17df740e0d 100644 --- a/packages/adapters/hono/CHANGELOG.md +++ b/packages/adapters/hono/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/hono +## 14.0.0 + +### Patch Changes + +- Updated dependencies [57b8fe0] +- Updated dependencies [bc26360] +- Updated dependencies [bd39dc5] + - @objectstack/runtime@14.0.0 + - @objectstack/plugin-hono-server@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/adapters/hono/package.json b/packages/adapters/hono/package.json index 81be7a3ca0..fb77cce9fe 100644 --- a/packages/adapters/hono/package.json +++ b/packages/adapters/hono/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/hono", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apps/account/CHANGELOG.md b/packages/apps/account/CHANGELOG.md index b096a41bbd..a3de6f20bb 100644 --- a/packages/apps/account/CHANGELOG.md +++ b/packages/apps/account/CHANGELOG.md @@ -1,5 +1,23 @@ # @objectstack/account +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/apps/account/package.json b/packages/apps/account/package.json index 0e70486ce3..56de9603e6 100644 --- a/packages/apps/account/package.json +++ b/packages/apps/account/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/account", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "ObjectStack Account — the end-user account/self-service console app, packaged as its own ObjectStack app package (ADR-0048: one app per package).", "main": "dist/index.js", diff --git a/packages/apps/setup/CHANGELOG.md b/packages/apps/setup/CHANGELOG.md index 22c2d2b7d1..91440290bf 100644 --- a/packages/apps/setup/CHANGELOG.md +++ b/packages/apps/setup/CHANGELOG.md @@ -1,5 +1,23 @@ # @objectstack/setup +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/apps/setup/package.json b/packages/apps/setup/package.json index 648c93b620..123caab078 100644 --- a/packages/apps/setup/package.json +++ b/packages/apps/setup/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/setup", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "ObjectStack Setup — the platform administration app, packaged as its own ObjectStack app package (ADR-0048: one app per package).", "main": "dist/index.js", diff --git a/packages/apps/studio/CHANGELOG.md b/packages/apps/studio/CHANGELOG.md index f797929ee7..4c4ccf12c7 100644 --- a/packages/apps/studio/CHANGELOG.md +++ b/packages/apps/studio/CHANGELOG.md @@ -1,5 +1,23 @@ # @objectstack/studio +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/apps/studio/package.json b/packages/apps/studio/package.json index 9fc3e1aa90..2300e18744 100644 --- a/packages/apps/studio/package.json +++ b/packages/apps/studio/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/studio", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "ObjectStack Studio — the metadata builder app, packaged as its own ObjectStack app package (ADR-0048: one app per package).", "main": "dist/index.js", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index eb2c2184cf..d7c4d61388 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,176 @@ # @objectstack/cli +## 14.0.0 + +### Patch Changes + +- e2fa074: feat(data): make object `enable.feeds`/`enable.activities` real opt-out gates; define the `enable.trackHistory` contract (#2707) + + `ObjectSchema.enable.{files,trackHistory,activities,feeds}` were parsed but + (mostly) unconsumed — an author setting them got nothing, silently. Per the + enforce-or-remove doctrine, each flag now has a defined enforcement contract: + + - `enable.activities` — opt-OUT writer gate. Spec default flips + `false → true`; plugin-audit keeps mirroring CRUD into the `sys_activity` + timeline unless the object declares an explicit `activities: false` + (behavior-preserving for every existing stack; the off-switch is the + per-object lever for activity-row growth, ADR-0057). The compliance + `sys_audit_log` row is NOT gated. + - `enable.feeds` — opt-OUT with server-side enforcement. Spec default flips + `false → true`; an explicit `feeds: false` now rejects `sys_comment` + creation targeting that object at the engine hook seam + (403 `FEEDS_DISABLED`, fail-closed like `CLONE_DISABLED`). + - `enable.trackHistory` — was misclassified `dead` in the liveness ledger: + the console has gated the record History tab on it since 2026-05. + Reclassified live with the two-grain contract documented (object flag = + History-tab master switch; per-field `trackHistory` = diff selector; audit + _capture_ stays unconditional as a compliance ledger). + - `enable.files` — stays dead + authorWarn (reserved for the future generic + Attachments panel; use `Field.file`/`Field.image` meanwhile). Its + `describe()` now says so instead of advertising a capability that + doesn't exist. + + The default flips can't be avoided: with `default(false)`, compiled output + materializes `false` for every object with an `enable` block, making + "author explicitly opted out" indistinguishable from "schema default" — so + opt-out semantics require the default to be `true` (same posture as + `trash`/`mru`/`clone`). Liveness ledger + reference docs regenerated; + compile-time authorWarn now fires only for `enable.files`. + +- 23c8668: feat(data): `enable.files` goes live — opt-in gate for the generic Attachments surface (#2727) + + The last dead ObjectCapabilities flag gets its enforcement contract. + `enable.files` is opt-IN (spec default stays `false`): the generic record + Attachments panel is a new surface, not an existing behavior. + + - plugin-audit registers a `sys_attachment` beforeInsert hook: attachment + join rows may only target objects that explicitly declare + `enable: { files: true }` — anything else (absent block, absent flag, + explicit false, unknown object) rejects fail-closed with + 403 `FILES_DISABLED` (CLONE_DISABLED / FEEDS_DISABLED pattern). + - `mapDataError` maps `FILES_DISABLED` → 403 with the gated target object + (generic data routes bypass `sendError`'s `.status` passthrough — the + #2707 lesson, applied at introduction time). + - `Field.file` / `Field.image` are deliberately independent: they store + the file URL in the record's own column and never create + `sys_attachment` rows, so field-level attachments work regardless of + this flag. + - Liveness ledger: `enable.files` dead→live, authorWarn dropped — + ObjectCapabilities is now 100% live. The compile-time + liveness-dead-property warning no longer fires for it; `describe()` and + the reference docs state the real contract. + + Companion objectui PR ships `RecordAttachmentsPanel` (upload/list/ + download/delete over the presigned three-step storage flow), rendered on + record pages when the flag is true. + +- 29f017d: chore(liveness): authorWarn sweep across all governed types + lint coverage to match + + Every remaining _misleading_ dead property now warns at compile time (12 new + markings): `flow.errorHandling.fallbackNodeId` (engine uses fault edges), + `flow.nodes[].outputSchema` (never validated), `flow.template`, + `action.timeout` (no runtime enforcement), `object.tenancy.strategy` / + `crossTenantAccess` (only enabled+tenantField are read), `object.abstract`, + `field.dependencies`, `agent.tenantId`, `tool.permissions` (invocation not + permission-gated), `permission.contextVariables` (RLS reads current_user.\* + only), `dataset.measures[].certified` (governance flag unenforced). + + The compile-time lint previously only checked objects+fields, so markings on + other types were silent — it now covers every governed type (flat stack + collections) and fans container checks out over arrays (one finding per + item+path). Benign display metadata (label/description/tags) stays unmarked + per the README's signal rules. + + Also re-anchors the README: the counts table had drifted badly (field listed + as 34 live/39 dead vs the ledger's actual 54/6; `action.disabled` was still + described as ignored though it went live via metadata-admin) — replaced with + regenerable numbers plus the script to regenerate them, and added the + cross-repo evidence rule (grep ../objectui before classifying dead — the + enable.trackHistory lesson, #2707). + +- 216fa9a: Add a `position` approver type so approvals can route to org positions (ADR-0090 D3 fallout). + + Post ADR-0090 D3 the `role` approver type resolves against the better-auth org-membership + tier (`sys_member.role`: `owner`/`admin`/`member`) — it was never a position. Downstream + apps that authored `{ type: 'role', value: 'sales_manager' }` silently routed approvals to + nobody. Now: + + - **spec**: `ApproverType` gains `'position'` — `value` is the position machine name; the + approver expands to its holders via `sys_user_position`. Authoring guidance: keep + `type: 'role'` ONLY for membership tiers; for org positions use + `{ type: 'position', value: '' }` (one-line fix for the mismatch above). + - **plugin-approvals**: the engine resolves `position` approvers via `sys_user_position` ∪ + the `sys_member.role` transition source (same semantics as `PositionGraphService` in + plugin-sharing). The `department` approver type is now honored by its spec spelling + (previously only the off-spec `business_unit`/`bu` dialect matched). + - **lint**: new `validateApprovalApprovers` rule — `approval-role-not-membership-tier` + warns when a `role` approver's value is not a membership tier and prescribes the + `position` rewrite; `approval-approver-type-unknown` flags off-spec approver types + (with a `business_unit` → `department` fix-it). Wired into `os lint`. + +- Updated dependencies [57b8fe0] +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [ac08698] +- Updated dependencies [23c8668] +- Updated dependencies [2f3581f] +- Updated dependencies [29f017d] +- Updated dependencies [bc26360] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] +- Updated dependencies [bd39dc5] +- Updated dependencies [1056c5f] + - @objectstack/runtime@14.0.0 + - @objectstack/spec@14.0.0 + - @objectstack/plugin-sharing@14.0.0 + - @objectstack/plugin-security@14.0.0 + - @objectstack/mcp@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/plugin-audit@14.0.0 + - @objectstack/rest@14.0.0 + - @objectstack/lint@14.0.0 + - @objectstack/driver-sql@14.0.0 + - @objectstack/objectql@14.0.0 + - @objectstack/plugin-approvals@14.0.0 + - @objectstack/client@14.0.0 + - @objectstack/cloud-connection@14.0.0 + - @objectstack/verify@14.0.0 + - @objectstack/account@14.0.0 + - @objectstack/setup@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + - @objectstack/observability@14.0.0 + - @objectstack/driver-memory@14.0.0 + - @objectstack/driver-mongodb@14.0.0 + - @objectstack/driver-sqlite-wasm@14.0.0 + - @objectstack/plugin-auth@14.0.0 + - @objectstack/plugin-email@14.0.0 + - @objectstack/plugin-hono-server@14.0.0 + - @objectstack/plugin-reports@14.0.0 + - @objectstack/plugin-webhooks@14.0.0 + - @objectstack/service-analytics@14.0.0 + - @objectstack/service-automation@14.0.0 + - @objectstack/service-cache@14.0.0 + - @objectstack/service-datasource@14.0.0 + - @objectstack/service-job@14.0.0 + - @objectstack/service-messaging@14.0.0 + - @objectstack/service-package@14.0.0 + - @objectstack/service-queue@14.0.0 + - @objectstack/service-realtime@14.0.0 + - @objectstack/service-settings@14.0.0 + - @objectstack/service-storage@14.0.0 + - @objectstack/trigger-api@14.0.0 + - @objectstack/trigger-record-change@14.0.0 + - @objectstack/trigger-schedule@14.0.0 + - @objectstack/types@14.0.0 + - @objectstack/console@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 75a35e1d93..8b27c8fff9 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cli", - "version": "13.0.0", + "version": "14.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 3ee32376f3..31a740850d 100644 --- a/packages/client-react/CHANGELOG.md +++ b/packages/client-react/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/client-react +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/client@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/client-react/package.json b/packages/client-react/package.json index 41cac66f59..30dd8ccc11 100644 --- a/packages/client-react/package.json +++ b/packages/client-react/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client-react", - "version": "13.0.0", + "version": "14.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 bfe0ef4522..e24f230107 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/client +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/client/package.json b/packages/client/package.json index 99b1e5ed73..69ab2f463a 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Official Client SDK for ObjectStack Protocol", "main": "dist/index.js", diff --git a/packages/cloud-connection/CHANGELOG.md b/packages/cloud-connection/CHANGELOG.md index 3dd965fb7f..9869ad203c 100644 --- a/packages/cloud-connection/CHANGELOG.md +++ b/packages/cloud-connection/CHANGELOG.md @@ -1,5 +1,25 @@ # @objectstack/cloud-connection +## 14.0.0 + +### Patch Changes + +- Updated dependencies [57b8fe0] +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [bc26360] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [bd39dc5] + - @objectstack/runtime@14.0.0 + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/cloud-connection/package.json b/packages/cloud-connection/package.json index a046fc2c4c..56aa2ee841 100644 --- a/packages/cloud-connection/package.json +++ b/packages/cloud-connection/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cloud-connection", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Runtime-side client for an ObjectStack cloud control plane — marketplace browse proxy, install-local, device-code binding, org catalog and installed views, and the /api/v1/runtime/config discovery endpoint. Open mechanism (ADR-0008): the hub service, plan policy, and entitlements stay server-side.", "type": "module", diff --git a/packages/connectors/connector-mcp/CHANGELOG.md b/packages/connectors/connector-mcp/CHANGELOG.md index 828dcc182c..09f586a330 100644 --- a/packages/connectors/connector-mcp/CHANGELOG.md +++ b/packages/connectors/connector-mcp/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/connector-mcp +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/connectors/connector-mcp/package.json b/packages/connectors/connector-mcp/package.json index a2656190a8..ffb4b4b90f 100644 --- a/packages/connectors/connector-mcp/package.json +++ b/packages/connectors/connector-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-mcp", - "version": "13.0.0", + "version": "14.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 6bc11662c6..c6c14726fd 100644 --- a/packages/connectors/connector-openapi/CHANGELOG.md +++ b/packages/connectors/connector-openapi/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/connector-openapi +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/connectors/connector-openapi/package.json b/packages/connectors/connector-openapi/package.json index 149ba6662d..a9369bb616 100644 --- a/packages/connectors/connector-openapi/package.json +++ b/packages/connectors/connector-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-openapi", - "version": "13.0.0", + "version": "14.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 8dee1119ff..81a099ecf1 100644 --- a/packages/connectors/connector-rest/CHANGELOG.md +++ b/packages/connectors/connector-rest/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/connector-rest +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/connectors/connector-rest/package.json b/packages/connectors/connector-rest/package.json index f36a54a73f..827b2b99c7 100644 --- a/packages/connectors/connector-rest/package.json +++ b/packages/connectors/connector-rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-rest", - "version": "13.0.0", + "version": "14.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 f3ed901702..4872306b5f 100644 --- a/packages/connectors/connector-slack/CHANGELOG.md +++ b/packages/connectors/connector-slack/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/connector-slack +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/connectors/connector-slack/package.json b/packages/connectors/connector-slack/package.json index b73991676d..9c5337920a 100644 --- a/packages/connectors/connector-slack/package.json +++ b/packages/connectors/connector-slack/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-slack", - "version": "13.0.0", + "version": "14.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 60e4fbf816..69ca0c3164 100644 --- a/packages/console/CHANGELOG.md +++ b/packages/console/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/console +## 14.0.0 + ## 13.0.0 ## 12.6.0 diff --git a/packages/console/package.json b/packages/console/package.json index f910280f0e..457bc26f3a 100644 --- a/packages/console/package.json +++ b/packages/console/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/console", - "version": "13.0.0", + "version": "14.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 2ce5bdd64f..5ac4846797 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/core +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/core/package.json b/packages/core/package.json index 3b2e196f4b..3f0c253a0d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/core", - "version": "13.0.0", + "version": "14.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 dd7773eca9..be7e5eda2f 100644 --- a/packages/create-objectstack/CHANGELOG.md +++ b/packages/create-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # create-objectstack +## 14.0.0 + ## 13.0.0 ## 12.6.0 diff --git a/packages/create-objectstack/package.json b/packages/create-objectstack/package.json index 1b558fb5c6..50136c07d6 100644 --- a/packages/create-objectstack/package.json +++ b/packages/create-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "create-objectstack", - "version": "13.0.0", + "version": "14.0.0", "description": "Create a new ObjectStack project — npx create-objectstack", "bin": { "create-objectstack": "./bin/create-objectstack.js" diff --git a/packages/dogfood/CHANGELOG.md b/packages/dogfood/CHANGELOG.md index 96dff2f3c9..ab23ea5cb6 100644 --- a/packages/dogfood/CHANGELOG.md +++ b/packages/dogfood/CHANGELOG.md @@ -1,5 +1,30 @@ # @objectstack/dogfood +## 0.0.26 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [ac08698] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] +- Updated dependencies [bd39dc5] +- Updated dependencies [1056c5f] + - @objectstack/spec@14.0.0 + - @objectstack/example-showcase@0.3.0 + - @objectstack/plugin-security@14.0.0 + - @objectstack/objectql@14.0.0 + - @objectstack/example-crm@4.0.78 + - @objectstack/verify@14.0.0 + ## 0.0.25 ### Patch Changes diff --git a/packages/dogfood/package.json b/packages/dogfood/package.json index 0540beff0f..22866aa64b 100644 --- a/packages/dogfood/package.json +++ b/packages/dogfood/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/dogfood", - "version": "0.0.25", + "version": "0.0.26", "private": true, "license": "Apache-2.0", "description": "Dogfood regression gate — hand-written golden tests that boot real example apps through @objectstack/verify's in-process HTTP stack, pinning historical runtime regressions (#2018 timezone bucketing, #1994 cross-owner RLS, #2004 field fidelity) that static checks miss.", diff --git a/packages/downstream-contract/CHANGELOG.md b/packages/downstream-contract/CHANGELOG.md index 2593a67af5..43dcd3ce8c 100644 --- a/packages/downstream-contract/CHANGELOG.md +++ b/packages/downstream-contract/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/downstream-contract +## 0.0.24 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + ## 0.0.23 ### Patch Changes diff --git a/packages/downstream-contract/package.json b/packages/downstream-contract/package.json index bc776781f5..f7d214ae47 100644 --- a/packages/downstream-contract/package.json +++ b/packages/downstream-contract/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/downstream-contract", - "version": "0.0.23", + "version": "0.0.24", "description": "Frozen third-party consumer fixture — a backward-compatibility gate for @objectstack/spec. Authored the way an external project on a published release authors metadata; if a spec change breaks it, that change is breaking (#2035).", "license": "Apache-2.0", "private": true, diff --git a/packages/formula/CHANGELOG.md b/packages/formula/CHANGELOG.md index 66f29a6bcb..6bd721d630 100644 --- a/packages/formula/CHANGELOG.md +++ b/packages/formula/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/formula +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/formula/package.json b/packages/formula/package.json index a0eadec9df..b5ee728ba9 100644 --- a/packages/formula/package.json +++ b/packages/formula/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/formula", - "version": "13.0.0", + "version": "14.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/lint/CHANGELOG.md b/packages/lint/CHANGELOG.md index 99116ef7aa..bdcb462043 100644 --- a/packages/lint/CHANGELOG.md +++ b/packages/lint/CHANGELOG.md @@ -1,5 +1,63 @@ # @objectstack/lint +## 14.0.0 + +### Minor Changes + +- 216fa9a: Add a `position` approver type so approvals can route to org positions (ADR-0090 D3 fallout). + + Post ADR-0090 D3 the `role` approver type resolves against the better-auth org-membership + tier (`sys_member.role`: `owner`/`admin`/`member`) — it was never a position. Downstream + apps that authored `{ type: 'role', value: 'sales_manager' }` silently routed approvals to + nobody. Now: + + - **spec**: `ApproverType` gains `'position'` — `value` is the position machine name; the + approver expands to its holders via `sys_user_position`. Authoring guidance: keep + `type: 'role'` ONLY for membership tiers; for org positions use + `{ type: 'position', value: '' }` (one-line fix for the mismatch above). + - **plugin-approvals**: the engine resolves `position` approvers via `sys_user_position` ∪ + the `sys_member.role` transition source (same semantics as `PositionGraphService` in + plugin-sharing). The `department` approver type is now honored by its spec spelling + (previously only the off-spec `business_unit`/`bu` dialect matched). + - **lint**: new `validateApprovalApprovers` rule — `approval-role-not-membership-tier` + warns when a `role` approver's value is not a membership tier and prescribes the + `position` rewrite; `approval-approver-type-unknown` flags off-spec approver types + (with a `business_unit` → `department` fix-it). Wired into `os lint`. + +### Patch Changes + +- 2f3581f: feat(lint): warn when a master-detail child has no object-level CRUD grant (ADR-0090 D7) + + New security-posture rule `security-master-detail-ungranted` (advisory + `warning`; it does not gate the build). A master-detail DETAIL object derives + its RECORD-level access from the master (ADR-0055 `controlled_by_parent`, + gate ②), but object-level CRUD is a SEPARATE gate ① (`checkObjectPermission`) + that is never derived — a permission set that grants the parent but forgets the + child denies role-bound non-admin users a 403 before the parent-derived access + is ever consulted, surfacing as the silent "can't fill in / can't submit the + subtable" trap (framework#2700, downstream os-tianshun-mtc#43). + + The rule flags a non-system detail (has a `master_detail` field) that NO + authored permission set grants (explicit entry or `'*'` wildcard). It stays + silent when the package authors no permission sets, when a package-declared + `'*'` wildcard grant covers every object, or for `sys_*` / `isSystem` objects — + keeping the false-positive rate near zero. The residual per-set gap (one role + grants it, another forgets it) is intentionally out of scope, and CRUD + auto-inheritance is deliberately NOT adopted (secure-by-default, Salesforce + parity). + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/formula@14.0.0 + - @objectstack/sdui-parser@14.0.0 + ## 13.0.0 ### Minor Changes diff --git a/packages/lint/package.json b/packages/lint/package.json index 83a8e0fe8b..2af148de3b 100644 --- a/packages/lint/package.json +++ b/packages/lint/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/lint", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Static, build-time validation for an ObjectStack metadata graph — dashboard widget bindings, CEL/predicate expressions, and more. Pure (stack) => Issue[] functions shared by the CLI's `os validate` and any other consumer (e.g. AI authoring). Depends on @objectstack/spec; never on a runtime.", "type": "module", diff --git a/packages/mcp/CHANGELOG.md b/packages/mcp/CHANGELOG.md index a0123308c3..9e8a86b8cc 100644 --- a/packages/mcp/CHANGELOG.md +++ b/packages/mcp/CHANGELOG.md @@ -1,5 +1,47 @@ # @objectstack/plugin-mcp-server +## 14.0.0 + +### Minor Changes + +- 332b711: feat(mcp): plugin-carried "Connect an agent" Setup page (#2714 Phase 1) + + The MCP plugin now registers a Setup page (`connect_agent`) plus its + navigation entry under Integrations — the nav lives and dies with the + capability (cloud ADR-0009 principle) and follows the surface's default-on + switch: an opted-out deployment (`OS_MCP_SERVER_ENABLED=false`) gets no page + and no entry. The page body is the `mcp:connect-agent` SDUI widget provided + by objectui (objectui#2372): env MCP URL, per-client connect cards, SKILL.md + download, API-key minting. zh-CN nav label included. + +- bc26360: feat(mcp): `GET /api/v1/mcp/skill` — download the environment-customized Agent Skill + + `renderSkillMarkdown()` was export-only; nothing served it over HTTP, so the + "one generic skill" distributable (ADR-0036 Amendment C) had no self-serve + outlet. The runtime dispatcher now serves it at `GET /api/v1/mcp/skill` as + `text/markdown` — public like `/discovery` (generic agent instructions plus a + URL the caller already knows; no schema, no tenant data), gated on the same + default-on MCP switch (404 when opted out), 501 when the MCP plugin isn't + loaded. The environment URL comes from the auth service's canonical + `getMcpResourceUrl()` with a request-host fallback. `MCPServerRuntime` gains + `renderSkill()` so hosts reach the renderer via the registered `'mcp'` + service without a package dependency. Feeds the Setup "Connect an agent" + page (objectui#2363) and the distribution shells (#2714). + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Minor Changes diff --git a/packages/mcp/package.json b/packages/mcp/package.json index b72c1867f5..a469cd73ee 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/mcp", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "ObjectStack as an MCP server — exposes your app's objects (and AI tools) over the Model Context Protocol (stdio + Streamable HTTP)", "type": "module", diff --git a/packages/metadata-core/CHANGELOG.md b/packages/metadata-core/CHANGELOG.md index 72c6349fcb..9c3757b35c 100644 --- a/packages/metadata-core/CHANGELOG.md +++ b/packages/metadata-core/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/metadata-core +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/metadata-core/package.json b/packages/metadata-core/package.json index ae74eb871d..5a74f17827 100644 --- a/packages/metadata-core/package.json +++ b/packages/metadata-core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-core", - "version": "13.0.0", + "version": "14.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 27acd7ee12..24e612feff 100644 --- a/packages/metadata-fs/CHANGELOG.md +++ b/packages/metadata-fs/CHANGELOG.md @@ -1,5 +1,11 @@ # @objectstack/metadata-fs +## 14.0.0 + +### Patch Changes + +- @objectstack/metadata-core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/metadata-fs/package.json b/packages/metadata-fs/package.json index b8d8117353..98f92ffe89 100644 --- a/packages/metadata-fs/package.json +++ b/packages/metadata-fs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-fs", - "version": "13.0.0", + "version": "14.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-protocol/CHANGELOG.md b/packages/metadata-protocol/CHANGELOG.md index 133c0782dc..b55df577b8 100644 --- a/packages/metadata-protocol/CHANGELOG.md +++ b/packages/metadata-protocol/CHANGELOG.md @@ -1,5 +1,54 @@ # @objectstack/metadata-protocol +## 14.0.0 + +### Minor Changes + +- 1056c5f: Package uninstall now revokes the package's data-plane permission rows (#2747, ADR-0086 D3 / ADR-0090 D5 "no ghost grants"). + + **`@objectstack/metadata-protocol`**: `deletePackage` gains an + uninstall-cleanup seam — the exact mirror of the publish materializer: + domain plugins register named cleanups via `registerUninstallCleanup(name, +fn)` and every cleanup runs with the uninstalled package id, its outcome + reported on the new `cleanups` array of the response (a failed revocation is + visible, never silent). `deletePackage` also unregisters the package from + the in-memory SchemaRegistry (best-effort), so the running kernel stops + serving it without waiting for a restart. + + **`@objectstack/plugin-security`**: registers the + `security.package-permissions` cleanup — deletes the package's own + `sys_permission_set` rows (`managed_by: 'package'` + matching `package_id` + only; env-authored and foreign-package rows are never touched, ADR-0086 D4), + their `sys_position_permission_set` / `sys_user_permission_set` bindings + (bindings first, so no dangling grants), and the package's + `sys_audience_binding_suggestion` rows (a reinstall re-prompts fresh). + Also fixes the engine-call signature in the suggestion module: `find`/`delete` + read `context` from their second argument — the previous trailing + `{ context }` argument was ignored, so deletes ran principal-less. + + **`@objectstack/rest`**: `DELETE /api/v1/packages/:id` (no version pin) now + goes through `protocol.deletePackage` — one uninstall semantic instead of a + bare `sys_packages` row delete — removing the package's metadata, durable + record, registry entry, and running the cleanups; the response carries + `deletedCount` + `cleanups`. A version-scoped delete keeps the narrow + durable-registry semantics. + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + - @objectstack/metadata-core@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Minor Changes diff --git a/packages/metadata-protocol/package.json b/packages/metadata-protocol/package.json index a46a53c1dd..15e204ac89 100644 --- a/packages/metadata-protocol/package.json +++ b/packages/metadata-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-protocol", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "ObjectStack metadata management protocol: sys_metadata CRUD, draft/publish, locks, package ownership, diagnostics (ADR-0076).", "type": "module", diff --git a/packages/metadata/CHANGELOG.md b/packages/metadata/CHANGELOG.md index 7bab99defe..1f8838392c 100644 --- a/packages/metadata/CHANGELOG.md +++ b/packages/metadata/CHANGELOG.md @@ -1,5 +1,27 @@ # @objectstack/metadata +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/metadata-core@14.0.0 + - @objectstack/types@14.0.0 + - @objectstack/metadata-fs@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/metadata/package.json b/packages/metadata/package.json index 89139d4a30..8769cd1f40 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata", - "version": "13.0.0", + "version": "14.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 b45ee9946b..d4ad8ee0e2 100644 --- a/packages/objectql/CHANGELOG.md +++ b/packages/objectql/CHANGELOG.md @@ -1,5 +1,53 @@ # @objectstack/objectql +## 14.0.0 + +### Patch Changes + +- afa8115: Three permission-runtime fixes found dogfooding the ADR-0090 showcase zoo: + + **#2734 — driver tenant wall hid every global row.** `applyTenantScope` used + strict `organization_id = :tenantId` equality, so any caller with an active + org (every logged-in admin) saw ZERO rows in the org-less platform tables + (`sys_position`, `sys_permission_set`, `sys_business_unit` — Setup → Access + Control rendered empty on a fresh deployment) and none of the first-boot + seeds (stamped before the default org exists). The scope is now + `(organization_id = :tenantId OR organization_id IS NULL)`: a NULL tenant + column marks a GLOBAL/platform row that belongs to no other tenant; rows + stamped with a DIFFERENT org stay invisible exactly as before. + + **#2735 — bulkCreate skipped write-side marshaling.** The batch insert path + (the common case for seeds/imports since #2678) handed raw object values + (`location`/`json`/`array` fields) to the SQLite binder — "Wrong API use: + tried to bind a value of an unknown type" — silently failing whole seed + batches (showcase accounts/tasks/field-zoo seeded zero rows). `bulkCreate` + now runs each row through the same `formatInput` + `applyWriteColumnMap` + + timestamp-stamp sequence as `create()`, and decodes the read-back the same + way. + + **#2737 — count()/aggregate() ignored injected read filters.** `engine.count` + and `engine.aggregate` built a LOCAL ast inside the executor, discarding the + RLS/OWD filters the security and sharing middlewares inject into + `opCtx.ast.where` — `GET /data/:object` returned scoped `records` with an + UNSCOPED `total` (a row-count oracle over invisible records, broken + pagination). Both now carry their ast on the opCtx exactly like `find()`. + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [1056c5f] + - @objectstack/spec@14.0.0 + - @objectstack/metadata-protocol@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + - @objectstack/metadata-core@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/objectql/package.json b/packages/objectql/package.json index 17a803971c..63f86f7bcd 100644 --- a/packages/objectql/package.json +++ b/packages/objectql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/objectql", - "version": "13.0.0", + "version": "14.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 f4fa693ee6..e6ad354c43 100644 --- a/packages/observability/CHANGELOG.md +++ b/packages/observability/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/observability +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/observability/package.json b/packages/observability/package.json index b8e496d49b..16d826ba17 100644 --- a/packages/observability/package.json +++ b/packages/observability/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/observability", - "version": "13.0.0", + "version": "14.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 42523cbe2f..3bf1a47668 100644 --- a/packages/platform-objects/CHANGELOG.md +++ b/packages/platform-objects/CHANGELOG.md @@ -1,5 +1,38 @@ # @objectstack/platform-objects +## 14.0.0 + +### Patch Changes + +- 332b711: feat(mcp): plugin-carried "Connect an agent" Setup page (#2714 Phase 1) + + The MCP plugin now registers a Setup page (`connect_agent`) plus its + navigation entry under Integrations — the nav lives and dies with the + capability (cloud ADR-0009 principle) and follows the surface's default-on + switch: an opted-out deployment (`OS_MCP_SERVER_ENABLED=false`) gets no page + and no entry. The page body is the `mcp:connect-agent` SDUI widget provided + by objectui (objectui#2372): env MCP URL, per-client connect cards, SKILL.md + download, API-key minting. zh-CN nav label included. + +- d0531c4: Setup → Access Control nav: the `sys_position` entry is renamed + `nav_roles`/"Roles" → `nav_positions`/"Positions" (岗位 / ポジション / + Posiciones) — the last "role" leftover in platform UI copy (ADR-0090 D3; + the Studio-side relabel already landed in objectui). The framework's + `.objectui-sha` pin is bumped to pick up the Studio Access-pillar explain + panel ("why can this user access?", ADR-0090 D6) and the suggested + audience-binding install prompt (D5/D9). +- cff5aac: Setup navigation: the Access Control menu entry for `sys_position` is now labeled "Positions" (was still "Roles" after the ADR-0090 D3 rename) — `nav_roles` → `nav_positions`, with zh-CN 岗位 / ja-JP ポジション / es-ES Posiciones translations updated to match the position vocabulary. +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/metadata-core@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/platform-objects/package.json b/packages/platform-objects/package.json index 534f84af14..6b4dcf8b83 100644 --- a/packages/platform-objects/package.json +++ b/packages/platform-objects/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/platform-objects", - "version": "13.0.0", + "version": "14.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 049c4bfd06..3e64920d90 100644 --- a/packages/plugins/driver-memory/CHANGELOG.md +++ b/packages/plugins/driver-memory/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/driver-memory +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/driver-memory/package.json b/packages/plugins/driver-memory/package.json index 5584842d98..ed7dfdc823 100644 --- a/packages/plugins/driver-memory/package.json +++ b/packages/plugins/driver-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-memory", - "version": "13.0.0", + "version": "14.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 cf9c14bf7a..32d80ff157 100644 --- a/packages/plugins/driver-mongodb/CHANGELOG.md +++ b/packages/plugins/driver-mongodb/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/driver-mongodb +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/driver-mongodb/package.json b/packages/plugins/driver-mongodb/package.json index e90f0faebd..b74c73c705 100644 --- a/packages/plugins/driver-mongodb/package.json +++ b/packages/plugins/driver-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-mongodb", - "version": "13.0.0", + "version": "14.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 c585bca09d..dcfe5f11a8 100644 --- a/packages/plugins/driver-sql/CHANGELOG.md +++ b/packages/plugins/driver-sql/CHANGELOG.md @@ -1,5 +1,49 @@ # @objectstack/driver-sql +## 14.0.0 + +### Patch Changes + +- afa8115: Three permission-runtime fixes found dogfooding the ADR-0090 showcase zoo: + + **#2734 — driver tenant wall hid every global row.** `applyTenantScope` used + strict `organization_id = :tenantId` equality, so any caller with an active + org (every logged-in admin) saw ZERO rows in the org-less platform tables + (`sys_position`, `sys_permission_set`, `sys_business_unit` — Setup → Access + Control rendered empty on a fresh deployment) and none of the first-boot + seeds (stamped before the default org exists). The scope is now + `(organization_id = :tenantId OR organization_id IS NULL)`: a NULL tenant + column marks a GLOBAL/platform row that belongs to no other tenant; rows + stamped with a DIFFERENT org stay invisible exactly as before. + + **#2735 — bulkCreate skipped write-side marshaling.** The batch insert path + (the common case for seeds/imports since #2678) handed raw object values + (`location`/`json`/`array` fields) to the SQLite binder — "Wrong API use: + tried to bind a value of an unknown type" — silently failing whole seed + batches (showcase accounts/tasks/field-zoo seeded zero rows). `bulkCreate` + now runs each row through the same `formatInput` + `applyWriteColumnMap` + + timestamp-stamp sequence as `create()`, and decodes the read-back the same + way. + + **#2737 — count()/aggregate() ignored injected read filters.** `engine.count` + and `engine.aggregate` built a LOCAL ast inside the executor, discarding the + RLS/OWD filters the security and sharing middlewares inject into + `opCtx.ast.where` — `GET /data/:object` returned scoped `records` with an + UNSCOPED `total` (a row-count oracle over invisible records, broken + pagination). Both now carry their ast on the opCtx exactly like `find()`. + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/driver-sql/package.json b/packages/plugins/driver-sql/package.json index af1e4a2d03..af0993f55c 100644 --- a/packages/plugins/driver-sql/package.json +++ b/packages/plugins/driver-sql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-sql", - "version": "13.0.0", + "version": "14.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 421f2e379c..739bcb5bac 100644 --- a/packages/plugins/driver-sqlite-wasm/CHANGELOG.md +++ b/packages/plugins/driver-sqlite-wasm/CHANGELOG.md @@ -1,5 +1,22 @@ # @objectstack/driver-sqlite-wasm +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/driver-sql@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/driver-sqlite-wasm/package.json b/packages/plugins/driver-sqlite-wasm/package.json index b23090f038..59032eea9e 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": "13.0.0", + "version": "14.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 5d5f189e01..4a22235d27 100644 --- a/packages/plugins/embedder-openai/CHANGELOG.md +++ b/packages/plugins/embedder-openai/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/embedder-openai +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/embedder-openai/package.json b/packages/plugins/embedder-openai/package.json index bb359199a2..23c9cd087b 100644 --- a/packages/plugins/embedder-openai/package.json +++ b/packages/plugins/embedder-openai/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/embedder-openai", - "version": "13.0.0", + "version": "14.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 46369f8979..03effd966b 100644 --- a/packages/plugins/knowledge-memory/CHANGELOG.md +++ b/packages/plugins/knowledge-memory/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/knowledge-memory +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/service-knowledge@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/knowledge-memory/package.json b/packages/plugins/knowledge-memory/package.json index 2e9817370f..2999234351 100644 --- a/packages/plugins/knowledge-memory/package.json +++ b/packages/plugins/knowledge-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/knowledge-memory", - "version": "13.0.0", + "version": "14.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 09d307589c..6b2f739f79 100644 --- a/packages/plugins/knowledge-ragflow/CHANGELOG.md +++ b/packages/plugins/knowledge-ragflow/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/knowledge-ragflow +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/service-knowledge@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/knowledge-ragflow/package.json b/packages/plugins/knowledge-ragflow/package.json index a79e34603a..767147b5fd 100644 --- a/packages/plugins/knowledge-ragflow/package.json +++ b/packages/plugins/knowledge-ragflow/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/knowledge-ragflow", - "version": "13.0.0", + "version": "14.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 db56b12fbe..19d17e95a3 100644 --- a/packages/plugins/plugin-approvals/CHANGELOG.md +++ b/packages/plugins/plugin-approvals/CHANGELOG.md @@ -1,5 +1,48 @@ # @objectstack/plugin-approvals +## 14.0.0 + +### Minor Changes + +- 216fa9a: Add a `position` approver type so approvals can route to org positions (ADR-0090 D3 fallout). + + Post ADR-0090 D3 the `role` approver type resolves against the better-auth org-membership + tier (`sys_member.role`: `owner`/`admin`/`member`) — it was never a position. Downstream + apps that authored `{ type: 'role', value: 'sales_manager' }` silently routed approvals to + nobody. Now: + + - **spec**: `ApproverType` gains `'position'` — `value` is the position machine name; the + approver expands to its holders via `sys_user_position`. Authoring guidance: keep + `type: 'role'` ONLY for membership tiers; for org positions use + `{ type: 'position', value: '' }` (one-line fix for the mismatch above). + - **plugin-approvals**: the engine resolves `position` approvers via `sys_user_position` ∪ + the `sys_member.role` transition source (same semantics as `PositionGraphService` in + plugin-sharing). The `department` approver type is now honored by its spec spelling + (previously only the off-spec `business_unit`/`bu` dialect matched). + - **lint**: new `validateApprovalApprovers` rule — `approval-role-not-membership-tier` + warns when a `role` approver's value is not a membership tier and prescribes the + `position` rewrite; `approval-approver-type-unknown` flags off-spec approver types + (with a `business_unit` → `department` fix-it). Wired into `os lint`. + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + - @objectstack/metadata-core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/plugin-approvals/package.json b/packages/plugins/plugin-approvals/package.json index ea5fe43792..b4533980ef 100644 --- a/packages/plugins/plugin-approvals/package.json +++ b/packages/plugins/plugin-approvals/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-approvals", - "version": "13.0.0", + "version": "14.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 137c97a478..56de6717eb 100644 --- a/packages/plugins/plugin-audit/CHANGELOG.md +++ b/packages/plugins/plugin-audit/CHANGELOG.md @@ -1,5 +1,86 @@ # @objectstack/plugin-audit +## 14.0.0 + +### Minor Changes + +- e2fa074: feat(data): make object `enable.feeds`/`enable.activities` real opt-out gates; define the `enable.trackHistory` contract (#2707) + + `ObjectSchema.enable.{files,trackHistory,activities,feeds}` were parsed but + (mostly) unconsumed — an author setting them got nothing, silently. Per the + enforce-or-remove doctrine, each flag now has a defined enforcement contract: + + - `enable.activities` — opt-OUT writer gate. Spec default flips + `false → true`; plugin-audit keeps mirroring CRUD into the `sys_activity` + timeline unless the object declares an explicit `activities: false` + (behavior-preserving for every existing stack; the off-switch is the + per-object lever for activity-row growth, ADR-0057). The compliance + `sys_audit_log` row is NOT gated. + - `enable.feeds` — opt-OUT with server-side enforcement. Spec default flips + `false → true`; an explicit `feeds: false` now rejects `sys_comment` + creation targeting that object at the engine hook seam + (403 `FEEDS_DISABLED`, fail-closed like `CLONE_DISABLED`). + - `enable.trackHistory` — was misclassified `dead` in the liveness ledger: + the console has gated the record History tab on it since 2026-05. + Reclassified live with the two-grain contract documented (object flag = + History-tab master switch; per-field `trackHistory` = diff selector; audit + _capture_ stays unconditional as a compliance ledger). + - `enable.files` — stays dead + authorWarn (reserved for the future generic + Attachments panel; use `Field.file`/`Field.image` meanwhile). Its + `describe()` now says so instead of advertising a capability that + doesn't exist. + + The default flips can't be avoided: with `default(false)`, compiled output + materializes `false` for every object with an `enable` block, making + "author explicitly opted out" indistinguishable from "schema default" — so + opt-out semantics require the default to be `true` (same posture as + `trash`/`mru`/`clone`). Liveness ledger + reference docs regenerated; + compile-time authorWarn now fires only for `enable.files`. + +- 23c8668: feat(data): `enable.files` goes live — opt-in gate for the generic Attachments surface (#2727) + + The last dead ObjectCapabilities flag gets its enforcement contract. + `enable.files` is opt-IN (spec default stays `false`): the generic record + Attachments panel is a new surface, not an existing behavior. + + - plugin-audit registers a `sys_attachment` beforeInsert hook: attachment + join rows may only target objects that explicitly declare + `enable: { files: true }` — anything else (absent block, absent flag, + explicit false, unknown object) rejects fail-closed with + 403 `FILES_DISABLED` (CLONE_DISABLED / FEEDS_DISABLED pattern). + - `mapDataError` maps `FILES_DISABLED` → 403 with the gated target object + (generic data routes bypass `sendError`'s `.status` passthrough — the + #2707 lesson, applied at introduction time). + - `Field.file` / `Field.image` are deliberately independent: they store + the file URL in the record's own column and never create + `sys_attachment` rows, so field-level attachments work regardless of + this flag. + - Liveness ledger: `enable.files` dead→live, authorWarn dropped — + ObjectCapabilities is now 100% live. The compile-time + liveness-dead-property warning no longer fires for it; `describe()` and + the reference docs state the real contract. + + Companion objectui PR ships `RecordAttachmentsPanel` (upload/list/ + download/delete over the presigned three-step storage flow), rendered on + record pages when the flag is true. + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/plugin-audit/package.json b/packages/plugins/plugin-audit/package.json index 684aaa544e..589a2be720 100644 --- a/packages/plugins/plugin-audit/package.json +++ b/packages/plugins/plugin-audit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-audit", - "version": "13.0.0", + "version": "14.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 f5c21f6377..de9b3d9570 100644 --- a/packages/plugins/plugin-auth/CHANGELOG.md +++ b/packages/plugins/plugin-auth/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/plugins/plugin-auth/package.json b/packages/plugins/plugin-auth/package.json index 1ff3ad46d5..cb281498f6 100644 --- a/packages/plugins/plugin-auth/package.json +++ b/packages/plugins/plugin-auth/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-auth", - "version": "13.0.0", + "version": "14.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 18adab63fd..703323ec68 100644 --- a/packages/plugins/plugin-dev/CHANGELOG.md +++ b/packages/plugins/plugin-dev/CHANGELOG.md @@ -1,5 +1,39 @@ # @objectstack/plugin-dev +## 14.0.0 + +### Patch Changes + +- Updated dependencies [57b8fe0] +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [ac08698] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [bc26360] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] +- Updated dependencies [bd39dc5] +- Updated dependencies [1056c5f] + - @objectstack/runtime@14.0.0 + - @objectstack/spec@14.0.0 + - @objectstack/plugin-security@14.0.0 + - @objectstack/rest@14.0.0 + - @objectstack/objectql@14.0.0 + - @objectstack/account@14.0.0 + - @objectstack/setup@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/driver-memory@14.0.0 + - @objectstack/plugin-auth@14.0.0 + - @objectstack/plugin-hono-server@14.0.0 + - @objectstack/service-i18n@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/plugin-dev/package.json b/packages/plugins/plugin-dev/package.json index 41c5a6547b..12626e299f 100644 --- a/packages/plugins/plugin-dev/package.json +++ b/packages/plugins/plugin-dev/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-dev", - "version": "13.0.0", + "version": "14.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 e02f41c127..849ae83a85 100644 --- a/packages/plugins/plugin-email/CHANGELOG.md +++ b/packages/plugins/plugin-email/CHANGELOG.md @@ -1,5 +1,25 @@ # @objectstack/plugin-email +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/plugin-email/package.json b/packages/plugins/plugin-email/package.json index dd2e1df704..e6f932d10d 100644 --- a/packages/plugins/plugin-email/package.json +++ b/packages/plugins/plugin-email/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-email", - "version": "13.0.0", + "version": "14.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 04ad00b870..87fd9a579f 100644 --- a/packages/plugins/plugin-hono-server/CHANGELOG.md +++ b/packages/plugins/plugin-hono-server/CHANGELOG.md @@ -1,5 +1,22 @@ # @objectstack/plugin-hono-server +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/observability@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/plugin-hono-server/package.json b/packages/plugins/plugin-hono-server/package.json index c76788e571..aa3b1bb099 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": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Standard Hono Server Adapter for ObjectStack Runtime", "main": "dist/index.js", diff --git a/packages/plugins/plugin-reports/CHANGELOG.md b/packages/plugins/plugin-reports/CHANGELOG.md index 9c6e58c100..b2595a838d 100644 --- a/packages/plugins/plugin-reports/CHANGELOG.md +++ b/packages/plugins/plugin-reports/CHANGELOG.md @@ -1,5 +1,24 @@ # @objectstack/plugin-reports +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/plugin-reports/package.json b/packages/plugins/plugin-reports/package.json index 99289754d3..5dbd75043a 100644 --- a/packages/plugins/plugin-reports/package.json +++ b/packages/plugins/plugin-reports/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-reports", - "version": "13.0.0", + "version": "14.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 3db3b20b08..62dac63592 100644 --- a/packages/plugins/plugin-security/CHANGELOG.md +++ b/packages/plugins/plugin-security/CHANGELOG.md @@ -1,5 +1,155 @@ # @objectstack/plugin-security +## 14.0.0 + +### Minor Changes + +- ac08698: ADR-0090 D6 — the explain engine gets its REST face (#2696). + + **`@objectstack/rest`**: new `GET/POST /api/v1/security/explain` + (`object`/`operation`/`userId`, validated against the spec's + `ExplainRequestSchema`) delegating to the `security` service's + `explain(request, callerContext)` — the same code paths the enforcement + middleware runs, so the returned `ExplainDecision` is explained by + construction. The route is authenticated-only (401 even on + `requireAuth=false` deployments), returns 501 when no security service + exposes `explain`, and maps the service's `PermissionDeniedError` to 403. + Registered on scoped (`/environments/:environmentId`) and unscoped base + paths; the env kernel's own `security` service is preferred, with a new + host-kernel `securityServiceProvider` fallback wired by the REST plugin. + + **`@objectstack/plugin-security`**: `explainAccessForCaller` now honors + delegated administration (D12) — explaining ANOTHER user is authorized by + `manage_users` **or** a delegated `adminScope` whose business-unit subtree + covers the target user (new `DelegatedAdminGate.scopesCoverUser`, fail-closed + on unresolvable scopes/memberships). Self-explain still needs neither. + +- bd39dc5: ADR-0090 D5/D9 — suggested audience bindings become a queryable, confirmable surface. + + A package permission set declaring `isDefault: true` is an install-time + SUGGESTION to bind the set to the built-in `everyone` position — never + auto-bound. Until now the flag was only read at bootstrap as the fallback-set + name; after an install there was no way to see or act on the suggestion. + + **`@objectstack/plugin-security`**: new `sys_audience_binding_suggestion` + system object (read-only over the data API; unique per + package × set × anchor) plus a convergent reconciler + (`syncAudienceBindingSuggestions`) that reads every declared `isDefault` set — + boot-declared stack metadata AND installed package manifests, so a runtime + `POST /api/v1/packages` install is visible immediately — and keeps the table + honest: undeclared → pending row pruned, bound out-of-band → marked + `confirmed` (observed). The `security` service gains + `listAudienceBindingSuggestions` / `confirmAudienceBindingSuggestion` / + `dismissAudienceBindingSuggestion`, all pre-gated on tenant-level admin + (ADR-0066 superuser wildcard — anchors stay tenant-level only per D12). + Confirm writes the `sys_position_permission_set` row **with the caller's + execution context**, so the D5/D9 audience-anchor gate (no high-privilege + set on `everyone`/`guest`) and the D12 delegated-admin gate enforce the + binding; a set not yet materialized (installed this session) is first + seeded through the same provenance-checked upsert as the boot seeder + (ADR-0086 D4). + + **`@objectstack/rest`** and **`@objectstack/runtime`**: the HTTP surface, + registered on both API layers (the RestServer that `objectstack dev`/hono + serves, and the runtime HttpDispatcher used by the adapters) — + `GET /api/v1/security/suggested-bindings?status=&packageId=`, + `POST /api/v1/security/suggested-bindings/:id/confirm`, + `POST /api/v1/security/suggested-bindings/:id/dismiss` (401 unauthenticated, + 403/404/409 mapped from the service's typed errors, 501/503 without + plugin-security). + +- 1056c5f: Package uninstall now revokes the package's data-plane permission rows (#2747, ADR-0086 D3 / ADR-0090 D5 "no ghost grants"). + + **`@objectstack/metadata-protocol`**: `deletePackage` gains an + uninstall-cleanup seam — the exact mirror of the publish materializer: + domain plugins register named cleanups via `registerUninstallCleanup(name, +fn)` and every cleanup runs with the uninstalled package id, its outcome + reported on the new `cleanups` array of the response (a failed revocation is + visible, never silent). `deletePackage` also unregisters the package from + the in-memory SchemaRegistry (best-effort), so the running kernel stops + serving it without waiting for a restart. + + **`@objectstack/plugin-security`**: registers the + `security.package-permissions` cleanup — deletes the package's own + `sys_permission_set` rows (`managed_by: 'package'` + matching `package_id` + only; env-authored and foreign-package rows are never touched, ADR-0086 D4), + their `sys_position_permission_set` / `sys_user_permission_set` bindings + (bindings first, so no dangling grants), and the package's + `sys_audience_binding_suggestion` rows (a reinstall re-prompts fresh). + Also fixes the engine-call signature in the suggestion module: `find`/`delete` + read `context` from their second argument — the previous trailing + `{ context }` argument was ignored, so deletes ran principal-less. + + **`@objectstack/rest`**: `DELETE /api/v1/packages/:id` (no version pin) now + goes through `protocol.deletePackage` — one uninstall semantic instead of a + bare `sys_packages` row delete — removing the package's metadata, durable + record, registry entry, and running the cleanups; the response carries + `deletedCount` + `cleanups`. A version-scoped delete keeps the narrow + durable-registry semantics. + +### Patch Changes + +- 0a8e685: ADR-0090 permission-model zoo + docs alignment. + + **Showcase (`@objectstack/example-showcase`)** now exercises the full Permission + Model v2 authoring surface and is guarded by a new runtime dogfood test + (`showcase-permission-zoo.dogfood.test.ts`): typed `definePosition`/ + `definePermissionSet`/`defineSharingRule` factories; six flat positions (the + stale pre-D3 `parent` fields are gone); permission sets covering CRUD+FLS+RLS, + org-depth read/write asymmetry (`readScope: 'org'` / `writeScope: 'own'`), + View-All (auditor) and Modify-All (ops) bypasses, `systemPermissions` + (`setup.access`), the `isDefault` everyone-suggestion (incl. personal-data + grants on the `private`-OWD note object), a guest-safe set for the `guest` + anchor (D9), and a delegated-administration `adminScope` bounded to a seeded + `sys_business_unit` subtree (D12). Objects gain `externalSharingModel` dials + (D11). A committed `access-matrix.json` opts the showcase into the D6 snapshot + gate. Hierarchy depths (`own_and_reports`/`unit`/`unit_and_below`) are + deliberately NOT authored — they are enterprise (`hierarchy-security`) and the + open runtime fails closed; BU-shaped visibility is demonstrated via the + enforced `unit_and_subordinates` sharing-rule recipient instead. + + **`@objectstack/spec`**: `defineStack` strict cross-reference validation no + longer rejects permission grants or seed datasets that target platform-provided + objects (`sys_`/`cloud_`/`ai_` prefixes) — a delegated-admin set carrying CRUD + on the RBAC link tables (ADR-0090 D12) and an app seeding the business-unit + tree are legitimate shapes; the typo net stays intact for the stack's own + objects. Stale pre-ADR-0090 vocabulary in zod docstrings (rls/territory/ + sharing/tool/agent) is rewritten; the auto-generated references (including the + previously missing `security/explain.mdx`) are regenerated. + + **Docs**: `protocol/objectql/security.mdx` rewritten to the v2 model (no + profiles, positions, canonical OWD four + D1 private default + + `externalSharingModel`, position-scoped RLS, enforced sharing recipients); + `isProfile` scrubbed from every authoring example; the dead + `/docs/references/identity/role` link fixed; implementation-status and + plugin READMEs aligned. Remaining rename misses are tracked in #2722 + (RLSUserContext.role), #2723 (portal `profiles`), #2724 (sys_record_share + `role` enum). + +- d0531c4: Setup → Access Control nav: the `sys_position` entry is renamed + `nav_roles`/"Roles" → `nav_positions`/"Positions" (岗位 / ポジション / + Posiciones) — the last "role" leftover in platform UI copy (ADR-0090 D3; + the Studio-side relabel already landed in objectui). The framework's + `.objectui-sha` pin is bumped to pick up the Studio Access-pillar explain + panel ("why can this user access?", ADR-0090 D6) and the suggested + audience-binding install prompt (D5/D9). +- cff5aac: Setup navigation: the Access Control menu entry for `sys_position` is now labeled "Positions" (was still "Roles" after the ADR-0090 D3 rename) — `nav_roles` → `nav_positions`, with zh-CN 岗位 / ja-JP ポジション / es-ES Posiciones translations updated to match the position vocabulary. +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/plugins/plugin-security/package.json b/packages/plugins/plugin-security/package.json index eba946c5c3..78fc22c7bd 100644 --- a/packages/plugins/plugin-security/package.json +++ b/packages/plugins/plugin-security/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-security", - "version": "13.0.0", + "version": "14.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 8705e5ff76..31a1351024 100644 --- a/packages/plugins/plugin-sharing/CHANGELOG.md +++ b/packages/plugins/plugin-sharing/CHANGELOG.md @@ -1,5 +1,90 @@ # @objectstack/plugin-sharing +## 14.0.0 + +### Patch Changes + +- 0a8e685: ADR-0090 permission-model zoo + docs alignment. + + **Showcase (`@objectstack/example-showcase`)** now exercises the full Permission + Model v2 authoring surface and is guarded by a new runtime dogfood test + (`showcase-permission-zoo.dogfood.test.ts`): typed `definePosition`/ + `definePermissionSet`/`defineSharingRule` factories; six flat positions (the + stale pre-D3 `parent` fields are gone); permission sets covering CRUD+FLS+RLS, + org-depth read/write asymmetry (`readScope: 'org'` / `writeScope: 'own'`), + View-All (auditor) and Modify-All (ops) bypasses, `systemPermissions` + (`setup.access`), the `isDefault` everyone-suggestion (incl. personal-data + grants on the `private`-OWD note object), a guest-safe set for the `guest` + anchor (D9), and a delegated-administration `adminScope` bounded to a seeded + `sys_business_unit` subtree (D12). Objects gain `externalSharingModel` dials + (D11). A committed `access-matrix.json` opts the showcase into the D6 snapshot + gate. Hierarchy depths (`own_and_reports`/`unit`/`unit_and_below`) are + deliberately NOT authored — they are enterprise (`hierarchy-security`) and the + open runtime fails closed; BU-shaped visibility is demonstrated via the + enforced `unit_and_subordinates` sharing-rule recipient instead. + + **`@objectstack/spec`**: `defineStack` strict cross-reference validation no + longer rejects permission grants or seed datasets that target platform-provided + objects (`sys_`/`cloud_`/`ai_` prefixes) — a delegated-admin set carrying CRUD + on the RBAC link tables (ADR-0090 D12) and an app seeding the business-unit + tree are legitimate shapes; the typo net stays intact for the stack's own + objects. Stale pre-ADR-0090 vocabulary in zod docstrings (rls/territory/ + sharing/tool/agent) is rewritten; the auto-generated references (including the + previously missing `security/explain.mdx`) are regenerated. + + **Docs**: `protocol/objectql/security.mdx` rewritten to the v2 model (no + profiles, positions, canonical OWD four + D1 private default + + `externalSharingModel`, position-scoped RLS, enforced sharing recipients); + `isProfile` scrubbed from every authoring example; the dead + `/docs/references/identity/role` link fixed; implementation-status and + plugin READMEs aligned. Remaining rename misses are tracked in #2722 + (RLSUserContext.role), #2723 (portal `profiles`), #2724 (sys_record_share + `role` enum). + +- afa8115: ADR-0090 vocabulary leftovers (#2722, #2723, #2724) — the last "role"/"profile" + surfaces are renamed one-step, no aliases (launch-window discipline). + + **`PortalSchema.profiles` → `positions`** (#2723, D2 removal miss). FROM → TO: + `profiles: ['client_portal_user']` → `positions: ['client_portal_user']` — + portal admission is now position-scoped; use the built-in `guest` position + for anonymous-only portals. The removed `profiles` key is a loud tombstone: + authoring it fails with the prescription instead of silently stripping. The + showcase Client Portal is migrated and now admits a real declared position + (`client_portal_user`). + + **`RLSUserContextSchema.role` → `positions`** (#2722, D3 rename miss). FROM → + TO: `role: string | string[]` → `positions: string[]` — matches the runtime + shape the RLS compiler resolves as `current_user.positions`. No runtime + consumer read the old field (the compiler has its own context type); public + export names are unchanged. + + **`sys_record_share.recipient_type` `'role'` → `'position'`** (#2724, D3). + The record-share enum and the `ShareRecipientType` contract type now match + the already-migrated spec zod enum. No stored-data migration is required: + no reader expands non-`user` record-share rows (rules materialize per-user + grants), so legacy `'role'` rows were inert. The plugin-sharing translation + bundles are regenerated — fixing the pre-stale `sys_sharing_rule` options + block too — with zh-CN/ja-JP labels patched per the generated-file contract + (业务单元及下级 / ビジネスユニットと下位階層). + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/objectql@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/plugins/plugin-sharing/package.json b/packages/plugins/plugin-sharing/package.json index 6fd1811920..16749b4e87 100644 --- a/packages/plugins/plugin-sharing/package.json +++ b/packages/plugins/plugin-sharing/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-sharing", - "version": "13.0.0", + "version": "14.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-webhooks/CHANGELOG.md b/packages/plugins/plugin-webhooks/CHANGELOG.md index 3198616e87..1725c4eeac 100644 --- a/packages/plugins/plugin-webhooks/CHANGELOG.md +++ b/packages/plugins/plugin-webhooks/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/plugin-webhooks +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/service-messaging@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/plugins/plugin-webhooks/package.json b/packages/plugins/plugin-webhooks/package.json index 56b31a07fc..1da77128eb 100644 --- a/packages/plugins/plugin-webhooks/package.json +++ b/packages/plugins/plugin-webhooks/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-webhooks", - "version": "13.0.0", + "version": "14.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 d824b0cdeb..41e55b4b5b 100644 --- a/packages/rest/CHANGELOG.md +++ b/packages/rest/CHANGELOG.md @@ -1,5 +1,171 @@ # @objectstack/rest +## 14.0.0 + +### Minor Changes + +- ac08698: ADR-0090 D6 — the explain engine gets its REST face (#2696). + + **`@objectstack/rest`**: new `GET/POST /api/v1/security/explain` + (`object`/`operation`/`userId`, validated against the spec's + `ExplainRequestSchema`) delegating to the `security` service's + `explain(request, callerContext)` — the same code paths the enforcement + middleware runs, so the returned `ExplainDecision` is explained by + construction. The route is authenticated-only (401 even on + `requireAuth=false` deployments), returns 501 when no security service + exposes `explain`, and maps the service's `PermissionDeniedError` to 403. + Registered on scoped (`/environments/:environmentId`) and unscoped base + paths; the env kernel's own `security` service is preferred, with a new + host-kernel `securityServiceProvider` fallback wired by the REST plugin. + + **`@objectstack/plugin-security`**: `explainAccessForCaller` now honors + delegated administration (D12) — explaining ANOTHER user is authorized by + `manage_users` **or** a delegated `adminScope` whose business-unit subtree + covers the target user (new `DelegatedAdminGate.scopesCoverUser`, fail-closed + on unresolvable scopes/memberships). Self-explain still needs neither. + +- bd39dc5: ADR-0090 D5/D9 — suggested audience bindings become a queryable, confirmable surface. + + A package permission set declaring `isDefault: true` is an install-time + SUGGESTION to bind the set to the built-in `everyone` position — never + auto-bound. Until now the flag was only read at bootstrap as the fallback-set + name; after an install there was no way to see or act on the suggestion. + + **`@objectstack/plugin-security`**: new `sys_audience_binding_suggestion` + system object (read-only over the data API; unique per + package × set × anchor) plus a convergent reconciler + (`syncAudienceBindingSuggestions`) that reads every declared `isDefault` set — + boot-declared stack metadata AND installed package manifests, so a runtime + `POST /api/v1/packages` install is visible immediately — and keeps the table + honest: undeclared → pending row pruned, bound out-of-band → marked + `confirmed` (observed). The `security` service gains + `listAudienceBindingSuggestions` / `confirmAudienceBindingSuggestion` / + `dismissAudienceBindingSuggestion`, all pre-gated on tenant-level admin + (ADR-0066 superuser wildcard — anchors stay tenant-level only per D12). + Confirm writes the `sys_position_permission_set` row **with the caller's + execution context**, so the D5/D9 audience-anchor gate (no high-privilege + set on `everyone`/`guest`) and the D12 delegated-admin gate enforce the + binding; a set not yet materialized (installed this session) is first + seeded through the same provenance-checked upsert as the boot seeder + (ADR-0086 D4). + + **`@objectstack/rest`** and **`@objectstack/runtime`**: the HTTP surface, + registered on both API layers (the RestServer that `objectstack dev`/hono + serves, and the runtime HttpDispatcher used by the adapters) — + `GET /api/v1/security/suggested-bindings?status=&packageId=`, + `POST /api/v1/security/suggested-bindings/:id/confirm`, + `POST /api/v1/security/suggested-bindings/:id/dismiss` (401 unauthenticated, + 403/404/409 mapped from the service's typed errors, 501/503 without + plugin-security). + +### Patch Changes + +- e2fa074: feat(data): make object `enable.feeds`/`enable.activities` real opt-out gates; define the `enable.trackHistory` contract (#2707) + + `ObjectSchema.enable.{files,trackHistory,activities,feeds}` were parsed but + (mostly) unconsumed — an author setting them got nothing, silently. Per the + enforce-or-remove doctrine, each flag now has a defined enforcement contract: + + - `enable.activities` — opt-OUT writer gate. Spec default flips + `false → true`; plugin-audit keeps mirroring CRUD into the `sys_activity` + timeline unless the object declares an explicit `activities: false` + (behavior-preserving for every existing stack; the off-switch is the + per-object lever for activity-row growth, ADR-0057). The compliance + `sys_audit_log` row is NOT gated. + - `enable.feeds` — opt-OUT with server-side enforcement. Spec default flips + `false → true`; an explicit `feeds: false` now rejects `sys_comment` + creation targeting that object at the engine hook seam + (403 `FEEDS_DISABLED`, fail-closed like `CLONE_DISABLED`). + - `enable.trackHistory` — was misclassified `dead` in the liveness ledger: + the console has gated the record History tab on it since 2026-05. + Reclassified live with the two-grain contract documented (object flag = + History-tab master switch; per-field `trackHistory` = diff selector; audit + _capture_ stays unconditional as a compliance ledger). + - `enable.files` — stays dead + authorWarn (reserved for the future generic + Attachments panel; use `Field.file`/`Field.image` meanwhile). Its + `describe()` now says so instead of advertising a capability that + doesn't exist. + + The default flips can't be avoided: with `default(false)`, compiled output + materializes `false` for every object with an `enable` block, making + "author explicitly opted out" indistinguishable from "schema default" — so + opt-out semantics require the default to be `true` (same posture as + `trash`/`mru`/`clone`). Liveness ledger + reference docs regenerated; + compile-time authorWarn now fires only for `enable.files`. + +- 23c8668: feat(data): `enable.files` goes live — opt-in gate for the generic Attachments surface (#2727) + + The last dead ObjectCapabilities flag gets its enforcement contract. + `enable.files` is opt-IN (spec default stays `false`): the generic record + Attachments panel is a new surface, not an existing behavior. + + - plugin-audit registers a `sys_attachment` beforeInsert hook: attachment + join rows may only target objects that explicitly declare + `enable: { files: true }` — anything else (absent block, absent flag, + explicit false, unknown object) rejects fail-closed with + 403 `FILES_DISABLED` (CLONE_DISABLED / FEEDS_DISABLED pattern). + - `mapDataError` maps `FILES_DISABLED` → 403 with the gated target object + (generic data routes bypass `sendError`'s `.status` passthrough — the + #2707 lesson, applied at introduction time). + - `Field.file` / `Field.image` are deliberately independent: they store + the file URL in the record's own column and never create + `sys_attachment` rows, so field-level attachments work regardless of + this flag. + - Liveness ledger: `enable.files` dead→live, authorWarn dropped — + ObjectCapabilities is now 100% live. The compile-time + liveness-dead-property warning no longer fires for it; `describe()` and + the reference docs state the real contract. + + Companion objectui PR ships `RecordAttachmentsPanel` (upload/list/ + download/delete over the presigned three-step storage flow), rendered on + record pages when the flag is true. + +- 1056c5f: Package uninstall now revokes the package's data-plane permission rows (#2747, ADR-0086 D3 / ADR-0090 D5 "no ghost grants"). + + **`@objectstack/metadata-protocol`**: `deletePackage` gains an + uninstall-cleanup seam — the exact mirror of the publish materializer: + domain plugins register named cleanups via `registerUninstallCleanup(name, +fn)` and every cleanup runs with the uninstalled package id, its outcome + reported on the new `cleanups` array of the response (a failed revocation is + visible, never silent). `deletePackage` also unregisters the package from + the in-memory SchemaRegistry (best-effort), so the running kernel stops + serving it without waiting for a restart. + + **`@objectstack/plugin-security`**: registers the + `security.package-permissions` cleanup — deletes the package's own + `sys_permission_set` rows (`managed_by: 'package'` + matching `package_id` + only; env-authored and foreign-package rows are never touched, ADR-0086 D4), + their `sys_position_permission_set` / `sys_user_permission_set` bindings + (bindings first, so no dangling grants), and the package's + `sys_audience_binding_suggestion` rows (a reinstall re-prompts fresh). + Also fixes the engine-call signature in the suggestion module: `find`/`delete` + read `context` from their second argument — the previous trailing + `{ context }` argument was ignored, so deletes ran principal-less. + + **`@objectstack/rest`**: `DELETE /api/v1/packages/:id` (no version pin) now + goes through `protocol.deletePackage` — one uninstall semantic instead of a + bare `sys_packages` row delete — removing the package's metadata, durable + record, registry entry, and running the cleanups; the response carries + `deletedCount` + `cleanups`. A version-scoped delete keeps the narrow + durable-registry semantics. + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/service-package@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/rest/package.json b/packages/rest/package.json index 3361aff102..eced17e249 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/rest", - "version": "13.0.0", + "version": "14.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 991cdca5be..1d4a6084f9 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,110 @@ # @objectstack/runtime +## 14.0.0 + +### Minor Changes + +- bc26360: feat(mcp): `GET /api/v1/mcp/skill` — download the environment-customized Agent Skill + + `renderSkillMarkdown()` was export-only; nothing served it over HTTP, so the + "one generic skill" distributable (ADR-0036 Amendment C) had no self-serve + outlet. The runtime dispatcher now serves it at `GET /api/v1/mcp/skill` as + `text/markdown` — public like `/discovery` (generic agent instructions plus a + URL the caller already knows; no schema, no tenant data), gated on the same + default-on MCP switch (404 when opted out), 501 when the MCP plugin isn't + loaded. The environment URL comes from the auth service's canonical + `getMcpResourceUrl()` with a request-host fallback. `MCPServerRuntime` gains + `renderSkill()` so hosts reach the renderer via the registered `'mcp'` + service without a package dependency. Feeds the Setup "Connect an agent" + page (objectui#2363) and the distribution shells (#2714). + +- bd39dc5: ADR-0090 D5/D9 — suggested audience bindings become a queryable, confirmable surface. + + A package permission set declaring `isDefault: true` is an install-time + SUGGESTION to bind the set to the built-in `everyone` position — never + auto-bound. Until now the flag was only read at bootstrap as the fallback-set + name; after an install there was no way to see or act on the suggestion. + + **`@objectstack/plugin-security`**: new `sys_audience_binding_suggestion` + system object (read-only over the data API; unique per + package × set × anchor) plus a convergent reconciler + (`syncAudienceBindingSuggestions`) that reads every declared `isDefault` set — + boot-declared stack metadata AND installed package manifests, so a runtime + `POST /api/v1/packages` install is visible immediately — and keeps the table + honest: undeclared → pending row pruned, bound out-of-band → marked + `confirmed` (observed). The `security` service gains + `listAudienceBindingSuggestions` / `confirmAudienceBindingSuggestion` / + `dismissAudienceBindingSuggestion`, all pre-gated on tenant-level admin + (ADR-0066 superuser wildcard — anchors stay tenant-level only per D12). + Confirm writes the `sys_position_permission_set` row **with the caller's + execution context**, so the D5/D9 audience-anchor gate (no high-privilege + set on `everyone`/`guest`) and the D12 delegated-admin gate enforce the + binding; a set not yet materialized (installed this session) is first + seeded through the same provenance-checked upsert as the boot seeder + (ADR-0086 D4). + + **`@objectstack/rest`** and **`@objectstack/runtime`**: the HTTP surface, + registered on both API layers (the RestServer that `objectstack dev`/hono + serves, and the runtime HttpDispatcher used by the adapters) — + `GET /api/v1/security/suggested-bindings?status=&packageId=`, + `POST /api/v1/security/suggested-bindings/:id/confirm`, + `POST /api/v1/security/suggested-bindings/:id/dismiss` (401 unauthenticated, + 403/404/409 mapped from the service's typed errors, 501/503 without + plugin-security). + +### Patch Changes + +- 57b8fe0: fix(runtime): action body `ctx.user` now reflects the session operator, not `system` + + The `POST /actions/:object/:action` route called `handleActions` directly, + bypassing `dispatcher.dispatch()` — so `resolveExecutionContext` never ran and + the action handler's `ctx.user` was hard-coded to `{ id: 'system' }`. Handlers + could not branch on the operator's identity or business roles, nor enforce + server-side ownership. (#2701) + + - The action routes now dispatch through `dispatch()` like the automation/AI + routes, so the per-request pipeline resolves the session identity (and swaps + to the per-project kernel) before the action body runs. + - `handleActions` builds `ctx.user` from the resolved `ExecutionContext`, + exposing `id`, `email`, `roles`/`positions` (ADR-0090 business roles), + `permissions`, and `tenantId` — matching the MCP `runAction` and + record-change trigger paths. It falls back to a `system` principal only for a + genuinely anonymous / self-invoked call. + + No authoring change is required: action handlers that previously always saw + `ctx.user.id === 'system'` will now see the real caller. + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [ac08698] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] +- Updated dependencies [bd39dc5] +- Updated dependencies [1056c5f] + - @objectstack/spec@14.0.0 + - @objectstack/plugin-security@14.0.0 + - @objectstack/rest@14.0.0 + - @objectstack/driver-sql@14.0.0 + - @objectstack/objectql@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + - @objectstack/metadata@14.0.0 + - @objectstack/observability@14.0.0 + - @objectstack/driver-memory@14.0.0 + - @objectstack/driver-sqlite-wasm@14.0.0 + - @objectstack/plugin-auth@14.0.0 + - @objectstack/service-cluster@14.0.0 + - @objectstack/service-datasource@14.0.0 + - @objectstack/service-i18n@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/runtime/package.json b/packages/runtime/package.json index cdd80dd86c..bc2b4ae1b8 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/runtime", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "ObjectStack Core Runtime & Query Engine", "type": "module", diff --git a/packages/sdui-parser/CHANGELOG.md b/packages/sdui-parser/CHANGELOG.md index 08de09e446..612903fcca 100644 --- a/packages/sdui-parser/CHANGELOG.md +++ b/packages/sdui-parser/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/sdui-parser +## 14.0.0 + ## 13.0.0 ## 12.6.0 diff --git a/packages/sdui-parser/package.json b/packages/sdui-parser/package.json index f437b411b9..d1b4fe325a 100644 --- a/packages/sdui-parser/package.json +++ b/packages/sdui-parser/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/sdui-parser", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "ObjectStack constrained JSX-source → SDUI SchemaNode tree compiler (parse, never execute). Isomorphic, zero React. ADR-0080.", "main": "dist/index.js", diff --git a/packages/services/service-analytics/CHANGELOG.md b/packages/services/service-analytics/CHANGELOG.md index 63d0fda955..f46c8e44bf 100644 --- a/packages/services/service-analytics/CHANGELOG.md +++ b/packages/services/service-analytics/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog — @objectstack/service-analytics +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-analytics/package.json b/packages/services/service-analytics/package.json index faba51890f..66a2bab7d2 100644 --- a/packages/services/service-analytics/package.json +++ b/packages/services/service-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-analytics", - "version": "13.0.0", + "version": "14.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 043458baea..c98b0544eb 100644 --- a/packages/services/service-automation/CHANGELOG.md +++ b/packages/services/service-automation/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/service-automation +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/formula@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/services/service-automation/package.json b/packages/services/service-automation/package.json index 7980011628..d39b98bc96 100644 --- a/packages/services/service-automation/package.json +++ b/packages/services/service-automation/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-automation", - "version": "13.0.0", + "version": "14.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 6955601c1d..1f32e86956 100644 --- a/packages/services/service-cache/CHANGELOG.md +++ b/packages/services/service-cache/CHANGELOG.md @@ -1,5 +1,21 @@ # @objectstack/service-cache +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/observability@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-cache/package.json b/packages/services/service-cache/package.json index 7666688a49..bf352fb6ca 100644 --- a/packages/services/service-cache/package.json +++ b/packages/services/service-cache/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cache", - "version": "13.0.0", + "version": "14.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 924b1243e9..8dacdff426 100644 --- a/packages/services/service-cluster-redis/CHANGELOG.md +++ b/packages/services/service-cluster-redis/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-cluster-redis +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/service-cluster@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-cluster-redis/package.json b/packages/services/service-cluster-redis/package.json index 0aad5140ad..96fb1deb8b 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": "13.0.0", + "version": "14.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 a02ebe26ce..92fd809387 100644 --- a/packages/services/service-cluster/CHANGELOG.md +++ b/packages/services/service-cluster/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-cluster +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-cluster/package.json b/packages/services/service-cluster/package.json index 6c59817b20..e864474fa1 100644 --- a/packages/services/service-cluster/package.json +++ b/packages/services/service-cluster/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cluster", - "version": "13.0.0", + "version": "14.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 ca5af8d1e8..826e86275a 100644 --- a/packages/services/service-datasource/CHANGELOG.md +++ b/packages/services/service-datasource/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-external-datasource +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-datasource/package.json b/packages/services/service-datasource/package.json index f522cc3cd0..6990cf51f7 100644 --- a/packages/services/service-datasource/package.json +++ b/packages/services/service-datasource/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-datasource", - "version": "13.0.0", + "version": "14.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", diff --git a/packages/services/service-i18n/CHANGELOG.md b/packages/services/service-i18n/CHANGELOG.md index 815d21fae0..d2a0441d41 100644 --- a/packages/services/service-i18n/CHANGELOG.md +++ b/packages/services/service-i18n/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-i18n +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-i18n/package.json b/packages/services/service-i18n/package.json index c7eca7f603..8ccc94990b 100644 --- a/packages/services/service-i18n/package.json +++ b/packages/services/service-i18n/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-i18n", - "version": "13.0.0", + "version": "14.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 c725e1467e..cb9713f3f5 100644 --- a/packages/services/service-job/CHANGELOG.md +++ b/packages/services/service-job/CHANGELOG.md @@ -1,5 +1,24 @@ # @objectstack/service-job +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-job/package.json b/packages/services/service-job/package.json index 4a40c46b1f..2d35bd3ebb 100644 --- a/packages/services/service-job/package.json +++ b/packages/services/service-job/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-job", - "version": "13.0.0", + "version": "14.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 e0b4350f98..711c9e43ec 100644 --- a/packages/services/service-knowledge/CHANGELOG.md +++ b/packages/services/service-knowledge/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-knowledge +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-knowledge/package.json b/packages/services/service-knowledge/package.json index c8b98c8ffe..ceb527ae2f 100644 --- a/packages/services/service-knowledge/package.json +++ b/packages/services/service-knowledge/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-knowledge", - "version": "13.0.0", + "version": "14.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 53b9ad5190..6e3c9fe536 100644 --- a/packages/services/service-messaging/CHANGELOG.md +++ b/packages/services/service-messaging/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-messaging +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-messaging/package.json b/packages/services/service-messaging/package.json index 82feb1a313..c9d5dfb102 100644 --- a/packages/services/service-messaging/package.json +++ b/packages/services/service-messaging/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-messaging", - "version": "13.0.0", + "version": "14.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 1f0034c090..123266a020 100644 --- a/packages/services/service-package/CHANGELOG.md +++ b/packages/services/service-package/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/service-package +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-package/package.json b/packages/services/service-package/package.json index 564943d692..80f7a1d163 100644 --- a/packages/services/service-package/package.json +++ b/packages/services/service-package/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-package", - "version": "13.0.0", + "version": "14.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 2550dc5a0d..805a331a0a 100644 --- a/packages/services/service-queue/CHANGELOG.md +++ b/packages/services/service-queue/CHANGELOG.md @@ -1,5 +1,24 @@ # @objectstack/service-queue +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-queue/package.json b/packages/services/service-queue/package.json index 02babef483..d385ea169c 100644 --- a/packages/services/service-queue/package.json +++ b/packages/services/service-queue/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-queue", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Queue Service for ObjectStack — implements IQueueService with in-memory and durable DB-backed (sys_job_queue) adapters", "type": "module", diff --git a/packages/services/service-realtime/CHANGELOG.md b/packages/services/service-realtime/CHANGELOG.md index eba15d95f5..2536ebe401 100644 --- a/packages/services/service-realtime/CHANGELOG.md +++ b/packages/services/service-realtime/CHANGELOG.md @@ -1,5 +1,24 @@ # @objectstack/service-realtime +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-realtime/package.json b/packages/services/service-realtime/package.json index 3ecdea2f45..bfdab3a4ec 100644 --- a/packages/services/service-realtime/package.json +++ b/packages/services/service-realtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-realtime", - "version": "13.0.0", + "version": "14.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 801ac562df..1e0f54435f 100644 --- a/packages/services/service-settings/CHANGELOG.md +++ b/packages/services/service-settings/CHANGELOG.md @@ -1,5 +1,25 @@ # @objectstack/service-settings +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/types@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-settings/package.json b/packages/services/service-settings/package.json index a5a08906ca..08b8b822f1 100644 --- a/packages/services/service-settings/package.json +++ b/packages/services/service-settings/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-settings", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Settings service for ObjectStack — manifest registry + K/V resolver (OS_* env > Tenant > User > Default) + REST routes. See ADR-0007.", "type": "module", diff --git a/packages/services/service-storage/CHANGELOG.md b/packages/services/service-storage/CHANGELOG.md index ac398e6fb6..f122c79906 100644 --- a/packages/services/service-storage/CHANGELOG.md +++ b/packages/services/service-storage/CHANGELOG.md @@ -1,5 +1,25 @@ # @objectstack/service-storage +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [332b711] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] + - @objectstack/spec@14.0.0 + - @objectstack/platform-objects@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/observability@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/services/service-storage/package.json b/packages/services/service-storage/package.json index 47110bd20f..81f32ef485 100644 --- a/packages/services/service-storage/package.json +++ b/packages/services/service-storage/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-storage", - "version": "13.0.0", + "version": "14.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 9309543120..af3f2933bb 100644 --- a/packages/spec/CHANGELOG.md +++ b/packages/spec/CHANGELOG.md @@ -1,5 +1,198 @@ # @objectstack/spec +## 14.0.0 + +### Major Changes + +- 80f12ca: `BookAudience` gated arm renamed: `{ profile: string }` → `{ permissionSet: string }`. + + ADR-0090 D2 removed the Profile concept, but `book.audience` (ADR-0046 §6.7) + still modelled its gated arm as a profile reference. Books ship in packages, + and packages own permission sets but never positions (ADR-0090 D9), so the + gate is a capability reference — a permission-set name the reader must hold, + e.g. `{ permissionSet: 'crm_admin' }`. Pre-launch one-step rename, no alias: + the zod union now rejects `{ profile }` at parse time. `'org'` and `'public'` + literals are unchanged (`'public'` ≡ the built-in `guest` position, D9). + +### Minor Changes + +- 0a8e685: ADR-0090 permission-model zoo + docs alignment. + + **Showcase (`@objectstack/example-showcase`)** now exercises the full Permission + Model v2 authoring surface and is guarded by a new runtime dogfood test + (`showcase-permission-zoo.dogfood.test.ts`): typed `definePosition`/ + `definePermissionSet`/`defineSharingRule` factories; six flat positions (the + stale pre-D3 `parent` fields are gone); permission sets covering CRUD+FLS+RLS, + org-depth read/write asymmetry (`readScope: 'org'` / `writeScope: 'own'`), + View-All (auditor) and Modify-All (ops) bypasses, `systemPermissions` + (`setup.access`), the `isDefault` everyone-suggestion (incl. personal-data + grants on the `private`-OWD note object), a guest-safe set for the `guest` + anchor (D9), and a delegated-administration `adminScope` bounded to a seeded + `sys_business_unit` subtree (D12). Objects gain `externalSharingModel` dials + (D11). A committed `access-matrix.json` opts the showcase into the D6 snapshot + gate. Hierarchy depths (`own_and_reports`/`unit`/`unit_and_below`) are + deliberately NOT authored — they are enterprise (`hierarchy-security`) and the + open runtime fails closed; BU-shaped visibility is demonstrated via the + enforced `unit_and_subordinates` sharing-rule recipient instead. + + **`@objectstack/spec`**: `defineStack` strict cross-reference validation no + longer rejects permission grants or seed datasets that target platform-provided + objects (`sys_`/`cloud_`/`ai_` prefixes) — a delegated-admin set carrying CRUD + on the RBAC link tables (ADR-0090 D12) and an app seeding the business-unit + tree are legitimate shapes; the typo net stays intact for the stack's own + objects. Stale pre-ADR-0090 vocabulary in zod docstrings (rls/territory/ + sharing/tool/agent) is rewritten; the auto-generated references (including the + previously missing `security/explain.mdx`) are regenerated. + + **Docs**: `protocol/objectql/security.mdx` rewritten to the v2 model (no + profiles, positions, canonical OWD four + D1 private default + + `externalSharingModel`, position-scoped RLS, enforced sharing recipients); + `isProfile` scrubbed from every authoring example; the dead + `/docs/references/identity/role` link fixed; implementation-status and + plugin READMEs aligned. Remaining rename misses are tracked in #2722 + (RLSUserContext.role), #2723 (portal `profiles`), #2724 (sys_record_share + `role` enum). + +- afa8115: ADR-0090 vocabulary leftovers (#2722, #2723, #2724) — the last "role"/"profile" + surfaces are renamed one-step, no aliases (launch-window discipline). + + **`PortalSchema.profiles` → `positions`** (#2723, D2 removal miss). FROM → TO: + `profiles: ['client_portal_user']` → `positions: ['client_portal_user']` — + portal admission is now position-scoped; use the built-in `guest` position + for anonymous-only portals. The removed `profiles` key is a loud tombstone: + authoring it fails with the prescription instead of silently stripping. The + showcase Client Portal is migrated and now admits a real declared position + (`client_portal_user`). + + **`RLSUserContextSchema.role` → `positions`** (#2722, D3 rename miss). FROM → + TO: `role: string | string[]` → `positions: string[]` — matches the runtime + shape the RLS compiler resolves as `current_user.positions`. No runtime + consumer read the old field (the compiler has its own context type); public + export names are unchanged. + + **`sys_record_share.recipient_type` `'role'` → `'position'`** (#2724, D3). + The record-share enum and the `ShareRecipientType` contract type now match + the already-migrated spec zod enum. No stored-data migration is required: + no reader expands non-`user` record-share rows (rules materialize per-user + grants), so legacy `'role'` rows were inert. The plugin-sharing translation + bundles are regenerated — fixing the pre-stale `sys_sharing_rule` options + block too — with zh-CN/ja-JP labels patched per the generated-file contract + (业务单元及下级 / ビジネスユニットと下位階層). + +- e2fa074: feat(data): make object `enable.feeds`/`enable.activities` real opt-out gates; define the `enable.trackHistory` contract (#2707) + + `ObjectSchema.enable.{files,trackHistory,activities,feeds}` were parsed but + (mostly) unconsumed — an author setting them got nothing, silently. Per the + enforce-or-remove doctrine, each flag now has a defined enforcement contract: + + - `enable.activities` — opt-OUT writer gate. Spec default flips + `false → true`; plugin-audit keeps mirroring CRUD into the `sys_activity` + timeline unless the object declares an explicit `activities: false` + (behavior-preserving for every existing stack; the off-switch is the + per-object lever for activity-row growth, ADR-0057). The compliance + `sys_audit_log` row is NOT gated. + - `enable.feeds` — opt-OUT with server-side enforcement. Spec default flips + `false → true`; an explicit `feeds: false` now rejects `sys_comment` + creation targeting that object at the engine hook seam + (403 `FEEDS_DISABLED`, fail-closed like `CLONE_DISABLED`). + - `enable.trackHistory` — was misclassified `dead` in the liveness ledger: + the console has gated the record History tab on it since 2026-05. + Reclassified live with the two-grain contract documented (object flag = + History-tab master switch; per-field `trackHistory` = diff selector; audit + _capture_ stays unconditional as a compliance ledger). + - `enable.files` — stays dead + authorWarn (reserved for the future generic + Attachments panel; use `Field.file`/`Field.image` meanwhile). Its + `describe()` now says so instead of advertising a capability that + doesn't exist. + + The default flips can't be avoided: with `default(false)`, compiled output + materializes `false` for every object with an `enable` block, making + "author explicitly opted out" indistinguishable from "schema default" — so + opt-out semantics require the default to be `true` (same posture as + `trash`/`mru`/`clone`). Liveness ledger + reference docs regenerated; + compile-time authorWarn now fires only for `enable.files`. + +- 23c8668: feat(data): `enable.files` goes live — opt-in gate for the generic Attachments surface (#2727) + + The last dead ObjectCapabilities flag gets its enforcement contract. + `enable.files` is opt-IN (spec default stays `false`): the generic record + Attachments panel is a new surface, not an existing behavior. + + - plugin-audit registers a `sys_attachment` beforeInsert hook: attachment + join rows may only target objects that explicitly declare + `enable: { files: true }` — anything else (absent block, absent flag, + explicit false, unknown object) rejects fail-closed with + 403 `FILES_DISABLED` (CLONE_DISABLED / FEEDS_DISABLED pattern). + - `mapDataError` maps `FILES_DISABLED` → 403 with the gated target object + (generic data routes bypass `sendError`'s `.status` passthrough — the + #2707 lesson, applied at introduction time). + - `Field.file` / `Field.image` are deliberately independent: they store + the file URL in the record's own column and never create + `sys_attachment` rows, so field-level attachments work regardless of + this flag. + - Liveness ledger: `enable.files` dead→live, authorWarn dropped — + ObjectCapabilities is now 100% live. The compile-time + liveness-dead-property warning no longer fires for it; `describe()` and + the reference docs state the real contract. + + Companion objectui PR ships `RecordAttachmentsPanel` (upload/list/ + download/delete over the presigned three-step storage flow), rendered on + record pages when the flag is true. + +- 216fa9a: Add a `position` approver type so approvals can route to org positions (ADR-0090 D3 fallout). + + Post ADR-0090 D3 the `role` approver type resolves against the better-auth org-membership + tier (`sys_member.role`: `owner`/`admin`/`member`) — it was never a position. Downstream + apps that authored `{ type: 'role', value: 'sales_manager' }` silently routed approvals to + nobody. Now: + + - **spec**: `ApproverType` gains `'position'` — `value` is the position machine name; the + approver expands to its holders via `sys_user_position`. Authoring guidance: keep + `type: 'role'` ONLY for membership tiers; for org positions use + `{ type: 'position', value: '' }` (one-line fix for the mismatch above). + - **plugin-approvals**: the engine resolves `position` approvers via `sys_user_position` ∪ + the `sys_member.role` transition source (same semantics as `PositionGraphService` in + plugin-sharing). The `department` approver type is now honored by its spec spelling + (previously only the off-spec `business_unit`/`bu` dialect matched). + - **lint**: new `validateApprovalApprovers` rule — `approval-role-not-membership-tier` + warns when a `role` approver's value is not a membership tier and prescribes the + `position` rewrite; `approval-approver-type-unknown` flags off-spec approver types + (with a `business_unit` → `department` fix-it). Wired into `os lint`. + +### Patch Changes + +- 29f017d: chore(liveness): authorWarn sweep across all governed types + lint coverage to match + + Every remaining _misleading_ dead property now warns at compile time (12 new + markings): `flow.errorHandling.fallbackNodeId` (engine uses fault edges), + `flow.nodes[].outputSchema` (never validated), `flow.template`, + `action.timeout` (no runtime enforcement), `object.tenancy.strategy` / + `crossTenantAccess` (only enabled+tenantField are read), `object.abstract`, + `field.dependencies`, `agent.tenantId`, `tool.permissions` (invocation not + permission-gated), `permission.contextVariables` (RLS reads current_user.\* + only), `dataset.measures[].certified` (governance flag unenforced). + + The compile-time lint previously only checked objects+fields, so markings on + other types were silent — it now covers every governed type (flat stack + collections) and fans container checks out over arrays (one finding per + item+path). Benign display metadata (label/description/tags) stays unmarked + per the README's signal rules. + + Also re-anchors the README: the counts table had drifted badly (field listed + as 34 live/39 dead vs the ledger's actual 54/6; `action.disabled` was still + described as ignored though it went live via metadata-admin) — replaced with + regenerable numbers plus the script to regenerate them, and added the + cross-repo evidence rule (grep ../objectui before classifying dead — the + enable.trackHistory lesson, #2707). + +- 6c22b12: fix(spec): bump PROTOCOL_VERSION 12.0.0 → 13.0.0 to match the spec major + + The version-packages roll (#2720) took `@objectstack/spec` to major `13.0.0` + but left `PROTOCOL_VERSION` at `12.0.0`, so `protocol-version.test.ts` (the + lockstep guard that asserts the protocol major equals the package major) failed + on `main` — reddening Test Core for every PR. Restore the lockstep so the + loader/installer handshake advertises the major the package actually ships. + ## 13.0.0 ### Major Changes diff --git a/packages/spec/package.json b/packages/spec/package.json index 6fd5f42ee5..a4a5f4938d 100644 --- a/packages/spec/package.json +++ b/packages/spec/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/spec", - "version": "13.0.0", + "version": "14.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/triggers/trigger-api/CHANGELOG.md b/packages/triggers/trigger-api/CHANGELOG.md index 0ec9854159..3c1976d2d0 100644 --- a/packages/triggers/trigger-api/CHANGELOG.md +++ b/packages/triggers/trigger-api/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/trigger-api +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/triggers/trigger-api/package.json b/packages/triggers/trigger-api/package.json index 172bf45c38..4c2bbc8b72 100644 --- a/packages/triggers/trigger-api/package.json +++ b/packages/triggers/trigger-api/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/trigger-api", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Inbound HTTP/webhook flow trigger for ObjectStack — per-flow HMAC-verified endpoints with queue-backed ingestion (ADR-0041)", "main": "dist/index.js", diff --git a/packages/triggers/trigger-record-change/CHANGELOG.md b/packages/triggers/trigger-record-change/CHANGELOG.md index cc4caedd35..8afff0fdee 100644 --- a/packages/triggers/trigger-record-change/CHANGELOG.md +++ b/packages/triggers/trigger-record-change/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/plugin-trigger-record-change +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Major Changes diff --git a/packages/triggers/trigger-record-change/package.json b/packages/triggers/trigger-record-change/package.json index 7d8313205a..306f65dd61 100644 --- a/packages/triggers/trigger-record-change/package.json +++ b/packages/triggers/trigger-record-change/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/trigger-record-change", - "version": "13.0.0", + "version": "14.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/triggers/trigger-schedule/CHANGELOG.md b/packages/triggers/trigger-schedule/CHANGELOG.md index ffdaced211..cc86b23e19 100644 --- a/packages/triggers/trigger-schedule/CHANGELOG.md +++ b/packages/triggers/trigger-schedule/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/plugin-trigger-schedule +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + - @objectstack/core@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/triggers/trigger-schedule/package.json b/packages/triggers/trigger-schedule/package.json index 9d16c9585a..2deb22e043 100644 --- a/packages/triggers/trigger-schedule/package.json +++ b/packages/triggers/trigger-schedule/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/trigger-schedule", - "version": "13.0.0", + "version": "14.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/types/CHANGELOG.md b/packages/types/CHANGELOG.md index de2769dd73..92ab604ed3 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/types +## 14.0.0 + +### Patch Changes + +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] + - @objectstack/spec@14.0.0 + ## 13.0.0 ### Minor Changes diff --git a/packages/types/package.json b/packages/types/package.json index e02716347b..c27ce19dde 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/types", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Shared interfaces describing the ObjectStack Runtime environment", "main": "dist/index.js", diff --git a/packages/verify/CHANGELOG.md b/packages/verify/CHANGELOG.md index 55f48adef8..5f655d67f6 100644 --- a/packages/verify/CHANGELOG.md +++ b/packages/verify/CHANGELOG.md @@ -1,5 +1,40 @@ # @objectstack/verify +## 14.0.0 + +### Patch Changes + +- Updated dependencies [57b8fe0] +- Updated dependencies [0a8e685] +- Updated dependencies [afa8115] +- Updated dependencies [80f12ca] +- Updated dependencies [e2fa074] +- Updated dependencies [ac08698] +- Updated dependencies [23c8668] +- Updated dependencies [29f017d] +- Updated dependencies [bc26360] +- Updated dependencies [afa8115] +- Updated dependencies [216fa9a] +- Updated dependencies [6c22b12] +- Updated dependencies [d0531c4] +- Updated dependencies [cff5aac] +- Updated dependencies [bd39dc5] +- Updated dependencies [1056c5f] + - @objectstack/runtime@14.0.0 + - @objectstack/spec@14.0.0 + - @objectstack/plugin-sharing@14.0.0 + - @objectstack/plugin-security@14.0.0 + - @objectstack/rest@14.0.0 + - @objectstack/objectql@14.0.0 + - @objectstack/core@14.0.0 + - @objectstack/driver-sqlite-wasm@14.0.0 + - @objectstack/plugin-auth@14.0.0 + - @objectstack/plugin-hono-server@14.0.0 + - @objectstack/service-analytics@14.0.0 + - @objectstack/service-automation@14.0.0 + - @objectstack/service-datasource@14.0.0 + - @objectstack/service-settings@14.0.0 + ## 13.0.0 ### Patch Changes diff --git a/packages/verify/package.json b/packages/verify/package.json index 73330cafb5..02e38c26fa 100644 --- a/packages/verify/package.json +++ b/packages/verify/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/verify", - "version": "13.0.0", + "version": "14.0.0", "license": "Apache-2.0", "description": "Boot any ObjectStack app in-process and verify it through the real HTTP stack — auto-derived CRUD round-trip fidelity plus the cross-owner RLS invariant. Catches runtime regressions that static checks miss.", "type": "module", diff --git a/packages/vscode-objectstack/CHANGELOG.md b/packages/vscode-objectstack/CHANGELOG.md index 7c13fd0f9d..3e0ae6859a 100644 --- a/packages/vscode-objectstack/CHANGELOG.md +++ b/packages/vscode-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # objectstack-vscode +## 14.0.0 + ## 13.0.0 ## 12.6.0 diff --git a/packages/vscode-objectstack/package.json b/packages/vscode-objectstack/package.json index dc3969ca37..0a9229be25 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": "13.0.0", + "version": "14.0.0", "publisher": "objectstack", "license": "Apache-2.0", "repository": {