diff --git a/.changeset/adr-0057-lifecycle-p1-p4.md b/.changeset/adr-0057-lifecycle-p1-p4.md deleted file mode 100644 index 0a348ade6e..0000000000 --- a/.changeset/adr-0057-lifecycle-p1-p4.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@objectstack/spec': minor -'@objectstack/objectql': minor -'@objectstack/driver-sql': minor -'@objectstack/driver-sqlite-wasm': minor -'@objectstack/platform-objects': minor -'@objectstack/metadata-core': minor -'@objectstack/service-messaging': minor -'@objectstack/service-automation': minor -'@objectstack/plugin-audit': minor ---- - -ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. - -- **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). -- **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. -- **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. -- **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). - -**Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. diff --git a/.changeset/adr-0091-l1-grant-validity.md b/.changeset/adr-0091-l1-grant-validity.md deleted file mode 100644 index 65d448339c..0000000000 --- a/.changeset/adr-0091-l1-grant-validity.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@objectstack/spec': minor -'@objectstack/core': minor -'@objectstack/plugin-security': minor -'@objectstack/plugin-sharing': minor -'@objectstack/lint': minor ---- - -ADR-0091 L1 — grant validity windows: effective-dated assignments, resolution-time filtering, explain expired state, authoring lint. - -- **plugin-security (objects)**: `sys_user_position` and `sys_user_permission_set` gain the D1 lifecycle columns — `valid_from`, `valid_until` (half-open `[from, until)`, UTC; null = unbounded, existing rows unchanged), `reason`, `delegated_from`, `last_certified_at`, `certified_by`. -- **core**: new shared predicate `isGrantActive` / `isGrantExpired` (`@objectstack/core`), and `resolveAuthzContext` now filters BOTH grant tables through it (D2, fail-closed — an expired unscoped `admin_full_access` grant no longer derives `platform_admin`). Present-but-unparseable bounds fail closed. -- **plugin-security (explain)**: `buildContextForUser` applies the same filter and returns `expiredGrants`; the principal layer reports the dedicated "held until … — expired" contributor state so "why did access disappear" is self-answering. Spec `ExplainLayerSchema` contributors gain an optional `state: 'active' | 'expired'`. -- **plugin-sharing**: `PositionGraphService.expandPositionUsers` filters expired holders — sharing-rule recipients stop including them at resolution time. -- **lint (D7)**: two new error rules over seed data — `security-grant-expired-at-authoring` (a `valid_until` in the past, or unparseable, is a grant that can never resolve) and `security-delegation-missing-reason` (a `delegated_from` row without `reason` breaks the D3 dual audit). Also re-exported the missing `SECURITY_MASTER_DETAIL_UNGRANTED` constant. - -No background job is involved anywhere — per ADR-0049, an expired grant simply stops resolving, in every edition. diff --git a/.changeset/agent-docs-open-edition-honesty.md b/.changeset/agent-docs-open-edition-honesty.md deleted file mode 100644 index b257b2cbbb..0000000000 --- a/.changeset/agent-docs-open-edition-honesty.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -"@objectstack/spec": patch ---- - -Agent capability — open-edition honesty pass (docs + liveness annotation), no -behavior change: - -- The `agent`/`skill`/`tool`/`action` liveness files cite - `packages/services/service-ai/...` as evidence, but that tree is a stale, - untracked build artifact — the real runtime is the closed cloud - `@objectstack/service-ai`. Each file's `_note` now says so explicitly, so an - auditor reading the ledger understands these props are `live` because a - CLOUD/EE runtime consumes them and the OPEN framework edition does not. -- Docs (`content/docs/ai`): removed the `aggregate_data` over-claim from - Natural Language Queries — the open MCP surface registers 9 tools and - `query_records` has no aggregation args; `aggregate_data` is a cloud data - tool. And disambiguated the two things called "skill" (authoring `SKILL.md` - modules vs. runtime `defineSkill` agent capability bundles) with cross-linked - callouts on both pages. diff --git a/.changeset/docs-sms-phone-otp.md b/.changeset/docs-sms-phone-otp.md deleted file mode 100644 index 5f69ef4633..0000000000 --- a/.changeset/docs-sms-phone-otp.md +++ /dev/null @@ -1,6 +0,0 @@ ---- ---- - -Docs-only: `services.sms` runtime-service reference + phone-number -authentication (SMS OTP) section in the authentication guide. No package -changes. diff --git a/.changeset/fix-resend-verification-email.md b/.changeset/fix-resend-verification-email.md deleted file mode 100644 index 84eefe7a9b..0000000000 --- a/.changeset/fix-resend-verification-email.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@objectstack/plugin-auth": patch ---- - -fix(auth): make the self-service "Resend Verification Email" action work - -better-auth's stock `POST /send-verification-email` requires `{ email }` in the -body, but the `sys_user` `resend_verification_email` action (record-header -button, "email unverified" record alert, and record-section quick action) fires -with an empty body — so the request bounced with `[body.email] Invalid input: -expected string, received undefined` and the button was permanently broken. A -thin wrapper route now defaults the address to the authenticated caller's own -session email when the body omits it, then re-dispatches through the real route. -An explicitly-supplied `email` (admin / verify-screen path) passes through -untouched. diff --git a/.changeset/fls-keys-release-sync-d11.md b/.changeset/fls-keys-release-sync-d11.md deleted file mode 100644 index 12f3b820c3..0000000000 --- a/.changeset/fls-keys-release-sync-d11.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -"@objectstack/lint": minor -"@objectstack/example-showcase": patch -"@objectstack/spec": patch ---- - -Permission-zoo audit follow-ups: - -**FLS keys must be object-qualified (`security-fls-unqualified-key`, error).** -The runtime evaluator matches field-permission keys by `.` -prefix — a bare `budget` key matches NOTHING and the declared masking -silently never enforces. The showcase itself shipped exactly that bug: its -contributor FLS block (bare `budget`/`spent`/`budget_remaining`) was a -runtime no-op, and the "FLS proof" in earlier verification was actually a -validation-rule rejection. Fixed: keys qualified -(`showcase_project.budget` …), a new D7 lint rule rejects bare keys at -compile time with a fix-it, and the permission-zoo dogfood now proves the -served pipeline denies a contributor's budget write while allowing ordinary -field edits. - -**Release pipeline: PROTOCOL_VERSION auto-sync.** `changeset version` now -runs `scripts/sync-protocol-version.mjs`, regenerating the handshake -constant from the spec package major. Release PRs opened by -changesets/action with the default GITHUB_TOKEN never trigger CI (GitHub's -anti-recursion rule), so the lockstep guard could only fire AFTER a release -merged — the drift class that broke main at 14.0.0 (#2769) is now fixed at -version time, the one spot that cannot be skipped. - -**D11 `externalSharingModel` honestly marked.** The dial has no runtime -consumer yet (authoring lint + Studio badges only); its liveness entry -moves from a bespoke `authorable` status to the documented `planned` + -`authorWarn`, and the sharing docs / design doc / showcase comments now say -explicitly that evaluation of external principals lands with the -principal-taxonomy phase (#2696). diff --git a/.changeset/rename-plugin-sms-to-service-sms.md b/.changeset/rename-plugin-sms-to-service-sms.md deleted file mode 100644 index cb8ca089df..0000000000 --- a/.changeset/rename-plugin-sms-to-service-sms.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@objectstack/service-sms": patch -"@objectstack/cli": patch ---- - -refactor(sms): rename `@objectstack/plugin-sms` to `@objectstack/service-sms` - -Infrastructure services follow the `service-*` convention -(`service-messaging`, `service-settings`, …) — the `plugin-*` prefix was a -misfit for a package whose whole job is registering the `sms` kernel -service (`plugin-email` is legacy debt, not precedent). Same exports, same -`SmsServicePlugin` class, same `sms` service id and settings namespace — -only the package name and its home (`packages/services/service-sms`) -change. The one published `@objectstack/plugin-sms@14.3.0` release should -be npm-deprecated in favour of `@objectstack/service-sms`. diff --git a/examples/app-crm/CHANGELOG.md b/examples/app-crm/CHANGELOG.md index 84f0b3a7e1..43edda1912 100644 --- a/examples/app-crm/CHANGELOG.md +++ b/examples/app-crm/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/example-crm +## 4.0.82 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/runtime@14.4.0 + ## 4.0.81 ### Patch Changes diff --git a/examples/app-crm/package.json b/examples/app-crm/package.json index 2d67ac4c9b..6a4606ea88 100644 --- a/examples/app-crm/package.json +++ b/examples/app-crm/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-crm", - "version": "4.0.81", + "version": "4.0.82", "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 763e144f4b..1daba18df8 100644 --- a/examples/app-showcase/CHANGELOG.md +++ b/examples/app-showcase/CHANGELOG.md @@ -1,5 +1,49 @@ # @objectstack/example-showcase +## 0.3.4 + +### Patch Changes + +- 7449476: Permission-zoo audit follow-ups: + + **FLS keys must be object-qualified (`security-fls-unqualified-key`, error).** + The runtime evaluator matches field-permission keys by `.` + prefix — a bare `budget` key matches NOTHING and the declared masking + silently never enforces. The showcase itself shipped exactly that bug: its + contributor FLS block (bare `budget`/`spent`/`budget_remaining`) was a + runtime no-op, and the "FLS proof" in earlier verification was actually a + validation-rule rejection. Fixed: keys qualified + (`showcase_project.budget` …), a new D7 lint rule rejects bare keys at + compile time with a fix-it, and the permission-zoo dogfood now proves the + served pipeline denies a contributor's budget write while allowing ordinary + field edits. + + **Release pipeline: PROTOCOL_VERSION auto-sync.** `changeset version` now + runs `scripts/sync-protocol-version.mjs`, regenerating the handshake + constant from the spec package major. Release PRs opened by + changesets/action with the default GITHUB_TOKEN never trigger CI (GitHub's + anti-recursion rule), so the lockstep guard could only fire AFTER a release + merged — the drift class that broke main at 14.0.0 (#2769) is now fixed at + version time, the one spot that cannot be skipped. + + **D11 `externalSharingModel` honestly marked.** The dial has no runtime + consumer yet (authoring lint + Studio badges only); its liveness entry + moves from a bespoke `authorable` status to the documented `planned` + + `authorWarn`, and the sharing docs / design doc / showcase comments now say + explicitly that evaluation of external principals lands with the + principal-taxonomy phase (#2696). + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/driver-sql@14.4.0 + - @objectstack/cloud-connection@14.4.0 + - @objectstack/connector-rest@14.4.0 + - @objectstack/connector-slack@14.4.0 + - @objectstack/runtime@14.4.0 + ## 0.3.3 ### Patch Changes diff --git a/examples/app-showcase/package.json b/examples/app-showcase/package.json index 93cdcada31..4ed0cceb92 100644 --- a/examples/app-showcase/package.json +++ b/examples/app-showcase/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-showcase", - "version": "0.3.3", + "version": "0.3.4", "description": "Kitchen-sink showcase workspace — exercises every metadata type, every view type, every chart type, and the major end-to-end capability chains (security, automation, 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 ea221a14c1..a9abcbe2bd 100644 --- a/examples/app-todo/CHANGELOG.md +++ b/examples/app-todo/CHANGELOG.md @@ -1,5 +1,23 @@ # @objectstack/example-todo +## 4.0.82 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/objectql@14.4.0 + - @objectstack/driver-sqlite-wasm@14.4.0 + - @objectstack/client@14.4.0 + - @objectstack/mcp@14.4.0 + - @objectstack/metadata@14.4.0 + - @objectstack/knowledge-memory@14.4.0 + - @objectstack/runtime@14.4.0 + - @objectstack/service-knowledge@14.4.0 + ## 4.0.81 ### Patch Changes diff --git a/examples/app-todo/package.json b/examples/app-todo/package.json index dd30acf1f8..2b06084ae7 100644 --- a/examples/app-todo/package.json +++ b/examples/app-todo/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-todo", - "version": "4.0.81", + "version": "4.0.82", "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 fdf2392508..444fbfcd60 100644 --- a/examples/embed-objectql/CHANGELOG.md +++ b/examples/embed-objectql/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/example-embed-objectql +## 0.0.22 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/objectql@14.4.0 + - @objectstack/driver-memory@14.4.0 + ## 0.0.21 ### Patch Changes diff --git a/examples/embed-objectql/package.json b/examples/embed-objectql/package.json index c3c69adde3..ec3974b21e 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.21", + "version": "0.0.22", "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 cedd99b3e0..3323040239 100644 --- a/packages/adapters/hono/CHANGELOG.md +++ b/packages/adapters/hono/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/hono +## 14.4.0 + +### Patch Changes + +- @objectstack/plugin-hono-server@14.4.0 +- @objectstack/runtime@14.4.0 +- @objectstack/types@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/adapters/hono/package.json b/packages/adapters/hono/package.json index 5f4d3cd97f..2d9fcff754 100644 --- a/packages/adapters/hono/package.json +++ b/packages/adapters/hono/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/hono", - "version": "14.3.0", + "version": "14.4.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 ffe79b7e52..93badaafac 100644 --- a/packages/apps/account/CHANGELOG.md +++ b/packages/apps/account/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/account +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/apps/account/package.json b/packages/apps/account/package.json index 37923dad8e..f423c2ca09 100644 --- a/packages/apps/account/package.json +++ b/packages/apps/account/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/account", - "version": "14.3.0", + "version": "14.4.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 03c3a03d81..f82b003fe9 100644 --- a/packages/apps/setup/CHANGELOG.md +++ b/packages/apps/setup/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/setup +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/apps/setup/package.json b/packages/apps/setup/package.json index 100335490d..f3d1006aed 100644 --- a/packages/apps/setup/package.json +++ b/packages/apps/setup/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/setup", - "version": "14.3.0", + "version": "14.4.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 38371b43f6..d8934eb99d 100644 --- a/packages/apps/studio/CHANGELOG.md +++ b/packages/apps/studio/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/studio +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/apps/studio/package.json b/packages/apps/studio/package.json index 7c212fa3f1..2a73e3bf7a 100644 --- a/packages/apps/studio/package.json +++ b/packages/apps/studio/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/studio", - "version": "14.3.0", + "version": "14.4.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 ba098cc9ba..be8ffb72c1 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,72 @@ # @objectstack/cli +## 14.4.0 + +### Patch Changes + +- 1c19139: refactor(sms): rename `@objectstack/plugin-sms` to `@objectstack/service-sms` + + Infrastructure services follow the `service-*` convention + (`service-messaging`, `service-settings`, …) — the `plugin-*` prefix was a + misfit for a package whose whole job is registering the `sms` kernel + service (`plugin-email` is legacy debt, not precedent). Same exports, same + `SmsServicePlugin` class, same `sms` service id and settings namespace — + only the package name and its home (`packages/services/service-sms`) + change. The one published `@objectstack/plugin-sms@14.3.0` release should + be npm-deprecated in favour of `@objectstack/service-sms`. + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [9887465] +- Updated dependencies [7449476] +- Updated dependencies [1c19139] + - @objectstack/spec@14.4.0 + - @objectstack/objectql@14.4.0 + - @objectstack/driver-sql@14.4.0 + - @objectstack/driver-sqlite-wasm@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/service-messaging@14.4.0 + - @objectstack/service-automation@14.4.0 + - @objectstack/plugin-audit@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/plugin-security@14.4.0 + - @objectstack/plugin-sharing@14.4.0 + - @objectstack/lint@14.4.0 + - @objectstack/plugin-auth@14.4.0 + - @objectstack/service-sms@14.4.0 + - @objectstack/account@14.4.0 + - @objectstack/setup@14.4.0 + - @objectstack/client@14.4.0 + - @objectstack/cloud-connection@14.4.0 + - @objectstack/formula@14.4.0 + - @objectstack/mcp@14.4.0 + - @objectstack/observability@14.4.0 + - @objectstack/driver-memory@14.4.0 + - @objectstack/driver-mongodb@14.4.0 + - @objectstack/plugin-approvals@14.4.0 + - @objectstack/plugin-email@14.4.0 + - @objectstack/plugin-hono-server@14.4.0 + - @objectstack/plugin-reports@14.4.0 + - @objectstack/plugin-webhooks@14.4.0 + - @objectstack/rest@14.4.0 + - @objectstack/runtime@14.4.0 + - @objectstack/service-analytics@14.4.0 + - @objectstack/service-cache@14.4.0 + - @objectstack/service-datasource@14.4.0 + - @objectstack/service-job@14.4.0 + - @objectstack/service-package@14.4.0 + - @objectstack/service-queue@14.4.0 + - @objectstack/service-realtime@14.4.0 + - @objectstack/service-settings@14.4.0 + - @objectstack/service-storage@14.4.0 + - @objectstack/trigger-api@14.4.0 + - @objectstack/trigger-record-change@14.4.0 + - @objectstack/trigger-schedule@14.4.0 + - @objectstack/types@14.4.0 + - @objectstack/verify@14.4.0 + - @objectstack/console@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 307db038e1..d496b14d9b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cli", - "version": "14.3.0", + "version": "14.4.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 86618ce626..ebbf3225cb 100644 --- a/packages/client-react/CHANGELOG.md +++ b/packages/client-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/client-react +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/client@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/client-react/package.json b/packages/client-react/package.json index cfa2aa45ff..be8a937652 100644 --- a/packages/client-react/package.json +++ b/packages/client-react/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client-react", - "version": "14.3.0", + "version": "14.4.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 27c014c6e8..4f24ce7173 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/client +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/client/package.json b/packages/client/package.json index 40de4615bc..c5a15691a7 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client", - "version": "14.3.0", + "version": "14.4.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 5b63f440c0..6001292ebf 100644 --- a/packages/cloud-connection/CHANGELOG.md +++ b/packages/cloud-connection/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/cloud-connection +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/runtime@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/cloud-connection/package.json b/packages/cloud-connection/package.json index 6ea95d93df..304e6257ae 100644 --- a/packages/cloud-connection/package.json +++ b/packages/cloud-connection/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cloud-connection", - "version": "14.3.0", + "version": "14.4.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 e9f9300238..046b55b182 100644 --- a/packages/connectors/connector-mcp/CHANGELOG.md +++ b/packages/connectors/connector-mcp/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/connector-mcp +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/connectors/connector-mcp/package.json b/packages/connectors/connector-mcp/package.json index e6a3fd2cc2..5e2d4d4ebf 100644 --- a/packages/connectors/connector-mcp/package.json +++ b/packages/connectors/connector-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-mcp", - "version": "14.3.0", + "version": "14.4.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 8a38609c4b..84caad18fd 100644 --- a/packages/connectors/connector-openapi/CHANGELOG.md +++ b/packages/connectors/connector-openapi/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/connector-openapi +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/connectors/connector-openapi/package.json b/packages/connectors/connector-openapi/package.json index 318242702e..c7d3d8bfd8 100644 --- a/packages/connectors/connector-openapi/package.json +++ b/packages/connectors/connector-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-openapi", - "version": "14.3.0", + "version": "14.4.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 1ad30d8a1e..1a0e61cde1 100644 --- a/packages/connectors/connector-rest/CHANGELOG.md +++ b/packages/connectors/connector-rest/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/connector-rest +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/connectors/connector-rest/package.json b/packages/connectors/connector-rest/package.json index e95666f2dc..700b5499eb 100644 --- a/packages/connectors/connector-rest/package.json +++ b/packages/connectors/connector-rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-rest", - "version": "14.3.0", + "version": "14.4.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 0a8eafeae4..33a2c659a9 100644 --- a/packages/connectors/connector-slack/CHANGELOG.md +++ b/packages/connectors/connector-slack/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/connector-slack +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/connectors/connector-slack/package.json b/packages/connectors/connector-slack/package.json index 2a1541c3c2..35684c5cbc 100644 --- a/packages/connectors/connector-slack/package.json +++ b/packages/connectors/connector-slack/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/connector-slack", - "version": "14.3.0", + "version": "14.4.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 f9f94118dd..1a78597592 100644 --- a/packages/console/CHANGELOG.md +++ b/packages/console/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/console +## 14.4.0 + ## 14.3.0 ## 14.2.0 diff --git a/packages/console/package.json b/packages/console/package.json index 8b9ac2a5e6..714dd65c6c 100644 --- a/packages/console/package.json +++ b/packages/console/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/console", - "version": "14.3.0", + "version": "14.4.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 6a1237647d..11fc9e0bae 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,27 @@ # @objectstack/core +## 14.4.0 + +### Minor Changes + +- 82e745e: ADR-0091 L1 — grant validity windows: effective-dated assignments, resolution-time filtering, explain expired state, authoring lint. + + - **plugin-security (objects)**: `sys_user_position` and `sys_user_permission_set` gain the D1 lifecycle columns — `valid_from`, `valid_until` (half-open `[from, until)`, UTC; null = unbounded, existing rows unchanged), `reason`, `delegated_from`, `last_certified_at`, `certified_by`. + - **core**: new shared predicate `isGrantActive` / `isGrantExpired` (`@objectstack/core`), and `resolveAuthzContext` now filters BOTH grant tables through it (D2, fail-closed — an expired unscoped `admin_full_access` grant no longer derives `platform_admin`). Present-but-unparseable bounds fail closed. + - **plugin-security (explain)**: `buildContextForUser` applies the same filter and returns `expiredGrants`; the principal layer reports the dedicated "held until … — expired" contributor state so "why did access disappear" is self-answering. Spec `ExplainLayerSchema` contributors gain an optional `state: 'active' | 'expired'`. + - **plugin-sharing**: `PositionGraphService.expandPositionUsers` filters expired holders — sharing-rule recipients stop including them at resolution time. + - **lint (D7)**: two new error rules over seed data — `security-grant-expired-at-authoring` (a `valid_until` in the past, or unparseable, is a grant that can never resolve) and `security-delegation-missing-reason` (a `delegated_from` row without `reason` breaks the D3 dual audit). Also re-exported the missing `SECURITY_MASTER_DETAIL_UNGRANTED` constant. + + No background job is involved anywhere — per ADR-0049, an expired grant simply stops resolving, in every edition. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index d7a8323129..76728f1673 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/core", - "version": "14.3.0", + "version": "14.4.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 3876d173b3..7a6364814c 100644 --- a/packages/create-objectstack/CHANGELOG.md +++ b/packages/create-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # create-objectstack +## 14.4.0 + ## 14.3.0 ## 14.2.0 diff --git a/packages/create-objectstack/package.json b/packages/create-objectstack/package.json index ec0b21ed46..a8fb28f73a 100644 --- a/packages/create-objectstack/package.json +++ b/packages/create-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "create-objectstack", - "version": "14.3.0", + "version": "14.4.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 c6e76f4267..4b6ebbc99f 100644 --- a/packages/dogfood/CHANGELOG.md +++ b/packages/dogfood/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/dogfood +## 0.0.30 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/objectql@14.4.0 + - @objectstack/plugin-security@14.4.0 + - @objectstack/example-showcase@0.3.4 + - @objectstack/example-crm@4.0.82 + - @objectstack/verify@14.4.0 + ## 0.0.29 ### Patch Changes diff --git a/packages/dogfood/package.json b/packages/dogfood/package.json index 8939be652c..be03c85139 100644 --- a/packages/dogfood/package.json +++ b/packages/dogfood/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/dogfood", - "version": "0.0.29", + "version": "0.0.30", "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 97d271ac42..a873324162 100644 --- a/packages/downstream-contract/CHANGELOG.md +++ b/packages/downstream-contract/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/downstream-contract +## 0.0.28 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + ## 0.0.27 ### Patch Changes diff --git a/packages/downstream-contract/package.json b/packages/downstream-contract/package.json index a9ee69cfe6..3fdabfac86 100644 --- a/packages/downstream-contract/package.json +++ b/packages/downstream-contract/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/downstream-contract", - "version": "0.0.27", + "version": "0.0.28", "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 843b508187..a67cef8796 100644 --- a/packages/formula/CHANGELOG.md +++ b/packages/formula/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/formula +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/formula/package.json b/packages/formula/package.json index 8594294a77..990cc2cc09 100644 --- a/packages/formula/package.json +++ b/packages/formula/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/formula", - "version": "14.3.0", + "version": "14.4.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 0ef88355fa..63c0aba9bd 100644 --- a/packages/lint/CHANGELOG.md +++ b/packages/lint/CHANGELOG.md @@ -1,5 +1,58 @@ # @objectstack/lint +## 14.4.0 + +### Minor Changes + +- 82e745e: ADR-0091 L1 — grant validity windows: effective-dated assignments, resolution-time filtering, explain expired state, authoring lint. + + - **plugin-security (objects)**: `sys_user_position` and `sys_user_permission_set` gain the D1 lifecycle columns — `valid_from`, `valid_until` (half-open `[from, until)`, UTC; null = unbounded, existing rows unchanged), `reason`, `delegated_from`, `last_certified_at`, `certified_by`. + - **core**: new shared predicate `isGrantActive` / `isGrantExpired` (`@objectstack/core`), and `resolveAuthzContext` now filters BOTH grant tables through it (D2, fail-closed — an expired unscoped `admin_full_access` grant no longer derives `platform_admin`). Present-but-unparseable bounds fail closed. + - **plugin-security (explain)**: `buildContextForUser` applies the same filter and returns `expiredGrants`; the principal layer reports the dedicated "held until … — expired" contributor state so "why did access disappear" is self-answering. Spec `ExplainLayerSchema` contributors gain an optional `state: 'active' | 'expired'`. + - **plugin-sharing**: `PositionGraphService.expandPositionUsers` filters expired holders — sharing-rule recipients stop including them at resolution time. + - **lint (D7)**: two new error rules over seed data — `security-grant-expired-at-authoring` (a `valid_until` in the past, or unparseable, is a grant that can never resolve) and `security-delegation-missing-reason` (a `delegated_from` row without `reason` breaks the D3 dual audit). Also re-exported the missing `SECURITY_MASTER_DETAIL_UNGRANTED` constant. + + No background job is involved anywhere — per ADR-0049, an expired grant simply stops resolving, in every edition. + +- 7449476: Permission-zoo audit follow-ups: + + **FLS keys must be object-qualified (`security-fls-unqualified-key`, error).** + The runtime evaluator matches field-permission keys by `.` + prefix — a bare `budget` key matches NOTHING and the declared masking + silently never enforces. The showcase itself shipped exactly that bug: its + contributor FLS block (bare `budget`/`spent`/`budget_remaining`) was a + runtime no-op, and the "FLS proof" in earlier verification was actually a + validation-rule rejection. Fixed: keys qualified + (`showcase_project.budget` …), a new D7 lint rule rejects bare keys at + compile time with a fix-it, and the permission-zoo dogfood now proves the + served pipeline denies a contributor's budget write while allowing ordinary + field edits. + + **Release pipeline: PROTOCOL_VERSION auto-sync.** `changeset version` now + runs `scripts/sync-protocol-version.mjs`, regenerating the handshake + constant from the spec package major. Release PRs opened by + changesets/action with the default GITHUB_TOKEN never trigger CI (GitHub's + anti-recursion rule), so the lockstep guard could only fire AFTER a release + merged — the drift class that broke main at 14.0.0 (#2769) is now fixed at + version time, the one spot that cannot be skipped. + + **D11 `externalSharingModel` honestly marked.** The dial has no runtime + consumer yet (authoring lint + Studio badges only); its liveness entry + moves from a bespoke `authorable` status to the documented `planned` + + `authorWarn`, and the sharing docs / design doc / showcase comments now say + explicitly that evaluation of external principals lands with the + principal-taxonomy phase (#2696). + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/formula@14.4.0 + - @objectstack/sdui-parser@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/lint/package.json b/packages/lint/package.json index b170ef99d2..8ba3439047 100644 --- a/packages/lint/package.json +++ b/packages/lint/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/lint", - "version": "14.3.0", + "version": "14.4.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 e4b1e7c7c7..42959ed90d 100644 --- a/packages/mcp/CHANGELOG.md +++ b/packages/mcp/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/plugin-mcp-server +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 5e483804b3..4d75bb9ee4 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/mcp", - "version": "14.3.0", + "version": "14.4.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 223e3bfc0e..a8511cf0ad 100644 --- a/packages/metadata-core/CHANGELOG.md +++ b/packages/metadata-core/CHANGELOG.md @@ -1,5 +1,26 @@ # @objectstack/metadata-core +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/metadata-core/package.json b/packages/metadata-core/package.json index 5248dcd80d..e16b9649a7 100644 --- a/packages/metadata-core/package.json +++ b/packages/metadata-core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-core", - "version": "14.3.0", + "version": "14.4.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 512af58fc8..c48580ee8b 100644 --- a/packages/metadata-fs/CHANGELOG.md +++ b/packages/metadata-fs/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/metadata-fs +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] + - @objectstack/metadata-core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/metadata-fs/package.json b/packages/metadata-fs/package.json index 1d1ccc5c94..dc236a8f65 100644 --- a/packages/metadata-fs/package.json +++ b/packages/metadata-fs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-fs", - "version": "14.3.0", + "version": "14.4.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 7d4d6e7888..5da7d7d0ec 100644 --- a/packages/metadata-protocol/CHANGELOG.md +++ b/packages/metadata-protocol/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/metadata-protocol +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/metadata-core@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/formula@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/metadata-protocol/package.json b/packages/metadata-protocol/package.json index a0d38dbcbd..21a5980449 100644 --- a/packages/metadata-protocol/package.json +++ b/packages/metadata-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-protocol", - "version": "14.3.0", + "version": "14.4.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 5c7231c716..592d045e44 100644 --- a/packages/metadata/CHANGELOG.md +++ b/packages/metadata/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/metadata +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/metadata-core@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/types@14.4.0 + - @objectstack/metadata-fs@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/metadata/package.json b/packages/metadata/package.json index 5dfe38efdd..62a03e4af8 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata", - "version": "14.3.0", + "version": "14.4.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 c7ee144c2d..36224eb6db 100644 --- a/packages/objectql/CHANGELOG.md +++ b/packages/objectql/CHANGELOG.md @@ -1,5 +1,31 @@ # @objectstack/objectql +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/metadata-core@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/formula@14.4.0 + - @objectstack/metadata-protocol@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/objectql/package.json b/packages/objectql/package.json index d35b3acb27..45f26195f5 100644 --- a/packages/objectql/package.json +++ b/packages/objectql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/objectql", - "version": "14.3.0", + "version": "14.4.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 997b148568..03bf6a2827 100644 --- a/packages/observability/CHANGELOG.md +++ b/packages/observability/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/observability +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/observability/package.json b/packages/observability/package.json index d30d3c98d4..4094154377 100644 --- a/packages/observability/package.json +++ b/packages/observability/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/observability", - "version": "14.3.0", + "version": "14.4.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 1963a83dab..f6dabf4612 100644 --- a/packages/platform-objects/CHANGELOG.md +++ b/packages/platform-objects/CHANGELOG.md @@ -1,5 +1,27 @@ # @objectstack/platform-objects +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/metadata-core@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/platform-objects/package.json b/packages/platform-objects/package.json index 5bfd0bd4fa..d2d9e2a694 100644 --- a/packages/platform-objects/package.json +++ b/packages/platform-objects/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/platform-objects", - "version": "14.3.0", + "version": "14.4.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 a01e6a9d0e..f67ba4d051 100644 --- a/packages/plugins/driver-memory/CHANGELOG.md +++ b/packages/plugins/driver-memory/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/driver-memory +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/driver-memory/package.json b/packages/plugins/driver-memory/package.json index 576e24f98c..4fafa5893f 100644 --- a/packages/plugins/driver-memory/package.json +++ b/packages/plugins/driver-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-memory", - "version": "14.3.0", + "version": "14.4.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 c047128c76..131cedf464 100644 --- a/packages/plugins/driver-mongodb/CHANGELOG.md +++ b/packages/plugins/driver-mongodb/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/driver-mongodb +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/driver-mongodb/package.json b/packages/plugins/driver-mongodb/package.json index 0e2b54007c..0444598ba0 100644 --- a/packages/plugins/driver-mongodb/package.json +++ b/packages/plugins/driver-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-mongodb", - "version": "14.3.0", + "version": "14.4.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 ecc4fe8d64..0a1280624d 100644 --- a/packages/plugins/driver-sql/CHANGELOG.md +++ b/packages/plugins/driver-sql/CHANGELOG.md @@ -1,5 +1,28 @@ # @objectstack/driver-sql +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/driver-sql/package.json b/packages/plugins/driver-sql/package.json index 157fdac356..4764e6746d 100644 --- a/packages/plugins/driver-sql/package.json +++ b/packages/plugins/driver-sql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-sql", - "version": "14.3.0", + "version": "14.4.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 73e9eca276..80b8108e5c 100644 --- a/packages/plugins/driver-sqlite-wasm/CHANGELOG.md +++ b/packages/plugins/driver-sqlite-wasm/CHANGELOG.md @@ -1,5 +1,28 @@ # @objectstack/driver-sqlite-wasm +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/driver-sql@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/driver-sqlite-wasm/package.json b/packages/plugins/driver-sqlite-wasm/package.json index 0e8689445a..e5121bbee1 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": "14.3.0", + "version": "14.4.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 2d2d79048b..d2f002486d 100644 --- a/packages/plugins/embedder-openai/CHANGELOG.md +++ b/packages/plugins/embedder-openai/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/embedder-openai +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/embedder-openai/package.json b/packages/plugins/embedder-openai/package.json index c414db18d1..9aa7fff0bb 100644 --- a/packages/plugins/embedder-openai/package.json +++ b/packages/plugins/embedder-openai/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/embedder-openai", - "version": "14.3.0", + "version": "14.4.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 b1cba57cc0..315ca16c02 100644 --- a/packages/plugins/knowledge-memory/CHANGELOG.md +++ b/packages/plugins/knowledge-memory/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/knowledge-memory +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/service-knowledge@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/knowledge-memory/package.json b/packages/plugins/knowledge-memory/package.json index 98e43976cc..9cd6d13589 100644 --- a/packages/plugins/knowledge-memory/package.json +++ b/packages/plugins/knowledge-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/knowledge-memory", - "version": "14.3.0", + "version": "14.4.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 b65d55de7c..96e68b819e 100644 --- a/packages/plugins/knowledge-ragflow/CHANGELOG.md +++ b/packages/plugins/knowledge-ragflow/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/knowledge-ragflow +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/service-knowledge@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/knowledge-ragflow/package.json b/packages/plugins/knowledge-ragflow/package.json index 520d65014c..a72bbb6d42 100644 --- a/packages/plugins/knowledge-ragflow/package.json +++ b/packages/plugins/knowledge-ragflow/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/knowledge-ragflow", - "version": "14.3.0", + "version": "14.4.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 c84457c84b..a285e2a239 100644 --- a/packages/plugins/plugin-approvals/CHANGELOG.md +++ b/packages/plugins/plugin-approvals/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/plugin-approvals +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/metadata-core@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/formula@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/plugin-approvals/package.json b/packages/plugins/plugin-approvals/package.json index cb8a706d2f..91609f7915 100644 --- a/packages/plugins/plugin-approvals/package.json +++ b/packages/plugins/plugin-approvals/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-approvals", - "version": "14.3.0", + "version": "14.4.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 05f30ab8b9..be3a920d4a 100644 --- a/packages/plugins/plugin-audit/CHANGELOG.md +++ b/packages/plugins/plugin-audit/CHANGELOG.md @@ -1,5 +1,28 @@ # @objectstack/plugin-audit +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/plugin-audit/package.json b/packages/plugins/plugin-audit/package.json index 6772a705a5..ece4169245 100644 --- a/packages/plugins/plugin-audit/package.json +++ b/packages/plugins/plugin-audit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-audit", - "version": "14.3.0", + "version": "14.4.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 01ae8d172b..e0f643329d 100644 --- a/packages/plugins/plugin-auth/CHANGELOG.md +++ b/packages/plugins/plugin-auth/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## 14.4.0 + +### Patch Changes + +- 9887465: fix(auth): make the self-service "Resend Verification Email" action work + + better-auth's stock `POST /send-verification-email` requires `{ email }` in the + body, but the `sys_user` `resend_verification_email` action (record-header + button, "email unverified" record alert, and record-section quick action) fires + with an empty body — so the request bounced with `[body.email] Invalid input: +expected string, received undefined` and the button was permanently broken. A + thin wrapper route now defaults the address to the authenticated caller's own + session email when the body omits it, then re-dispatches through the real route. + An explicitly-supplied `email` (admin / verify-screen path) passes through + untouched. + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/rest@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/plugins/plugin-auth/package.json b/packages/plugins/plugin-auth/package.json index 97e6b9b3d0..a8ef0de2cc 100644 --- a/packages/plugins/plugin-auth/package.json +++ b/packages/plugins/plugin-auth/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-auth", - "version": "14.3.0", + "version": "14.4.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 27a80dc6c9..d2552ae6f4 100644 --- a/packages/plugins/plugin-dev/CHANGELOG.md +++ b/packages/plugins/plugin-dev/CHANGELOG.md @@ -1,5 +1,28 @@ # @objectstack/plugin-dev +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [9887465] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/objectql@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/plugin-security@14.4.0 + - @objectstack/plugin-auth@14.4.0 + - @objectstack/account@14.4.0 + - @objectstack/setup@14.4.0 + - @objectstack/driver-memory@14.4.0 + - @objectstack/plugin-hono-server@14.4.0 + - @objectstack/rest@14.4.0 + - @objectstack/runtime@14.4.0 + - @objectstack/service-i18n@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/plugin-dev/package.json b/packages/plugins/plugin-dev/package.json index f604106d49..fd444df5ab 100644 --- a/packages/plugins/plugin-dev/package.json +++ b/packages/plugins/plugin-dev/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-dev", - "version": "14.3.0", + "version": "14.4.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 6981499501..cb0c1f3bdc 100644 --- a/packages/plugins/plugin-email/CHANGELOG.md +++ b/packages/plugins/plugin-email/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/plugin-email +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/formula@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/plugin-email/package.json b/packages/plugins/plugin-email/package.json index f6e1928db5..0a70e98ac8 100644 --- a/packages/plugins/plugin-email/package.json +++ b/packages/plugins/plugin-email/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-email", - "version": "14.3.0", + "version": "14.4.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 65cf5657bd..29436f9126 100644 --- a/packages/plugins/plugin-hono-server/CHANGELOG.md +++ b/packages/plugins/plugin-hono-server/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/plugin-hono-server +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/observability@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/plugin-hono-server/package.json b/packages/plugins/plugin-hono-server/package.json index d2d8790b68..d8e0c4e9a6 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": "14.3.0", + "version": "14.4.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 b730a5ffd3..c7a1a21a15 100644 --- a/packages/plugins/plugin-reports/CHANGELOG.md +++ b/packages/plugins/plugin-reports/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/plugin-reports +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/plugin-reports/package.json b/packages/plugins/plugin-reports/package.json index 1126667f74..b21255f5e2 100644 --- a/packages/plugins/plugin-reports/package.json +++ b/packages/plugins/plugin-reports/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-reports", - "version": "14.3.0", + "version": "14.4.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 83fc81474b..fa74cb660d 100644 --- a/packages/plugins/plugin-security/CHANGELOG.md +++ b/packages/plugins/plugin-security/CHANGELOG.md @@ -1,5 +1,30 @@ # @objectstack/plugin-security +## 14.4.0 + +### Minor Changes + +- 82e745e: ADR-0091 L1 — grant validity windows: effective-dated assignments, resolution-time filtering, explain expired state, authoring lint. + + - **plugin-security (objects)**: `sys_user_position` and `sys_user_permission_set` gain the D1 lifecycle columns — `valid_from`, `valid_until` (half-open `[from, until)`, UTC; null = unbounded, existing rows unchanged), `reason`, `delegated_from`, `last_certified_at`, `certified_by`. + - **core**: new shared predicate `isGrantActive` / `isGrantExpired` (`@objectstack/core`), and `resolveAuthzContext` now filters BOTH grant tables through it (D2, fail-closed — an expired unscoped `admin_full_access` grant no longer derives `platform_admin`). Present-but-unparseable bounds fail closed. + - **plugin-security (explain)**: `buildContextForUser` applies the same filter and returns `expiredGrants`; the principal layer reports the dedicated "held until … — expired" contributor state so "why did access disappear" is self-answering. Spec `ExplainLayerSchema` contributors gain an optional `state: 'active' | 'expired'`. + - **plugin-sharing**: `PositionGraphService.expandPositionUsers` filters expired holders — sharing-rule recipients stop including them at resolution time. + - **lint (D7)**: two new error rules over seed data — `security-grant-expired-at-authoring` (a `valid_until` in the past, or unparseable, is a grant that can never resolve) and `security-delegation-missing-reason` (a `delegated_from` row without `reason` breaks the D3 dual audit). Also re-exported the missing `SECURITY_MASTER_DETAIL_UNGRANTED` constant. + + No background job is involved anywhere — per ADR-0049, an expired grant simply stops resolving, in every edition. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/formula@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/plugins/plugin-security/package.json b/packages/plugins/plugin-security/package.json index 8c38a79770..d8cd5c25bc 100644 --- a/packages/plugins/plugin-security/package.json +++ b/packages/plugins/plugin-security/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-security", - "version": "14.3.0", + "version": "14.4.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 0f5c26d223..46a4791640 100644 --- a/packages/plugins/plugin-sharing/CHANGELOG.md +++ b/packages/plugins/plugin-sharing/CHANGELOG.md @@ -1,5 +1,31 @@ # @objectstack/plugin-sharing +## 14.4.0 + +### Minor Changes + +- 82e745e: ADR-0091 L1 — grant validity windows: effective-dated assignments, resolution-time filtering, explain expired state, authoring lint. + + - **plugin-security (objects)**: `sys_user_position` and `sys_user_permission_set` gain the D1 lifecycle columns — `valid_from`, `valid_until` (half-open `[from, until)`, UTC; null = unbounded, existing rows unchanged), `reason`, `delegated_from`, `last_certified_at`, `certified_by`. + - **core**: new shared predicate `isGrantActive` / `isGrantExpired` (`@objectstack/core`), and `resolveAuthzContext` now filters BOTH grant tables through it (D2, fail-closed — an expired unscoped `admin_full_access` grant no longer derives `platform_admin`). Present-but-unparseable bounds fail closed. + - **plugin-security (explain)**: `buildContextForUser` applies the same filter and returns `expiredGrants`; the principal layer reports the dedicated "held until … — expired" contributor state so "why did access disappear" is self-answering. Spec `ExplainLayerSchema` contributors gain an optional `state: 'active' | 'expired'`. + - **plugin-sharing**: `PositionGraphService.expandPositionUsers` filters expired holders — sharing-rule recipients stop including them at resolution time. + - **lint (D7)**: two new error rules over seed data — `security-grant-expired-at-authoring` (a `valid_until` in the past, or unparseable, is a grant that can never resolve) and `security-delegation-missing-reason` (a `delegated_from` row without `reason` breaks the D3 dual audit). Also re-exported the missing `SECURITY_MASTER_DETAIL_UNGRANTED` constant. + + No background job is involved anywhere — per ADR-0049, an expired grant simply stops resolving, in every edition. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/objectql@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/formula@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/plugin-sharing/package.json b/packages/plugins/plugin-sharing/package.json index 7a1bcc9178..ba73760f2d 100644 --- a/packages/plugins/plugin-sharing/package.json +++ b/packages/plugins/plugin-sharing/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-sharing", - "version": "14.3.0", + "version": "14.4.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 5b971b5ae7..9cb185556a 100644 --- a/packages/plugins/plugin-webhooks/CHANGELOG.md +++ b/packages/plugins/plugin-webhooks/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/plugin-webhooks +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/service-messaging@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/plugins/plugin-webhooks/package.json b/packages/plugins/plugin-webhooks/package.json index 14b45dbb94..53b0c11977 100644 --- a/packages/plugins/plugin-webhooks/package.json +++ b/packages/plugins/plugin-webhooks/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-webhooks", - "version": "14.3.0", + "version": "14.4.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 aa0003eead..33d16b711c 100644 --- a/packages/rest/CHANGELOG.md +++ b/packages/rest/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/rest +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/service-package@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/rest/package.json b/packages/rest/package.json index 42ac25e123..abf45b296b 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/rest", - "version": "14.3.0", + "version": "14.4.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 fa7bbf33ce..10f2766cb0 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,31 @@ # @objectstack/runtime +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [9887465] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/objectql@14.4.0 + - @objectstack/driver-sql@14.4.0 + - @objectstack/driver-sqlite-wasm@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/plugin-security@14.4.0 + - @objectstack/plugin-auth@14.4.0 + - @objectstack/formula@14.4.0 + - @objectstack/metadata@14.4.0 + - @objectstack/observability@14.4.0 + - @objectstack/driver-memory@14.4.0 + - @objectstack/rest@14.4.0 + - @objectstack/service-cluster@14.4.0 + - @objectstack/service-datasource@14.4.0 + - @objectstack/service-i18n@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 005f375a7f..f26a116660 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/runtime", - "version": "14.3.0", + "version": "14.4.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 994592058b..151bdd9b66 100644 --- a/packages/sdui-parser/CHANGELOG.md +++ b/packages/sdui-parser/CHANGELOG.md @@ -1,5 +1,7 @@ # @objectstack/sdui-parser +## 14.4.0 + ## 14.3.0 ## 14.2.0 diff --git a/packages/sdui-parser/package.json b/packages/sdui-parser/package.json index 9e95bb6679..9e1b0f2c34 100644 --- a/packages/sdui-parser/package.json +++ b/packages/sdui-parser/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/sdui-parser", - "version": "14.3.0", + "version": "14.4.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 93178aae98..f2c6f3ea76 100644 --- a/packages/services/service-analytics/CHANGELOG.md +++ b/packages/services/service-analytics/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog — @objectstack/service-analytics +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-analytics/package.json b/packages/services/service-analytics/package.json index 0c4c4672b2..20a22b31a1 100644 --- a/packages/services/service-analytics/package.json +++ b/packages/services/service-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-analytics", - "version": "14.3.0", + "version": "14.4.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 aa371003cb..4c4d0ccb2a 100644 --- a/packages/services/service-automation/CHANGELOG.md +++ b/packages/services/service-automation/CHANGELOG.md @@ -1,5 +1,28 @@ # @objectstack/service-automation +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/formula@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-automation/package.json b/packages/services/service-automation/package.json index a2865da65e..11a0bada92 100644 --- a/packages/services/service-automation/package.json +++ b/packages/services/service-automation/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-automation", - "version": "14.3.0", + "version": "14.4.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 db8150109b..64e6088add 100644 --- a/packages/services/service-cache/CHANGELOG.md +++ b/packages/services/service-cache/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-cache +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/observability@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-cache/package.json b/packages/services/service-cache/package.json index 20331e437c..700e99176b 100644 --- a/packages/services/service-cache/package.json +++ b/packages/services/service-cache/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cache", - "version": "14.3.0", + "version": "14.4.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 281f1124bd..bf96f9a4fd 100644 --- a/packages/services/service-cluster-redis/CHANGELOG.md +++ b/packages/services/service-cluster-redis/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/service-cluster-redis +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/service-cluster@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-cluster-redis/package.json b/packages/services/service-cluster-redis/package.json index 67a7010627..f535959d76 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": "14.3.0", + "version": "14.4.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 a70363a544..8dad308522 100644 --- a/packages/services/service-cluster/CHANGELOG.md +++ b/packages/services/service-cluster/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/service-cluster +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-cluster/package.json b/packages/services/service-cluster/package.json index f55bb81ad8..0435f09687 100644 --- a/packages/services/service-cluster/package.json +++ b/packages/services/service-cluster/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cluster", - "version": "14.3.0", + "version": "14.4.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 bd2c643b75..d36bbfb56b 100644 --- a/packages/services/service-datasource/CHANGELOG.md +++ b/packages/services/service-datasource/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/service-external-datasource +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-datasource/package.json b/packages/services/service-datasource/package.json index a41f751d3a..1515b2511b 100644 --- a/packages/services/service-datasource/package.json +++ b/packages/services/service-datasource/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-datasource", - "version": "14.3.0", + "version": "14.4.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 6fceb6155a..bdba3d1f30 100644 --- a/packages/services/service-i18n/CHANGELOG.md +++ b/packages/services/service-i18n/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/service-i18n +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-i18n/package.json b/packages/services/service-i18n/package.json index 71ffdb2d7c..1a8be0889e 100644 --- a/packages/services/service-i18n/package.json +++ b/packages/services/service-i18n/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-i18n", - "version": "14.3.0", + "version": "14.4.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 10e03622c0..0aa965c895 100644 --- a/packages/services/service-job/CHANGELOG.md +++ b/packages/services/service-job/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-job +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-job/package.json b/packages/services/service-job/package.json index 5f18442082..d390c9c478 100644 --- a/packages/services/service-job/package.json +++ b/packages/services/service-job/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-job", - "version": "14.3.0", + "version": "14.4.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 ae89abdcc8..805720ba6c 100644 --- a/packages/services/service-knowledge/CHANGELOG.md +++ b/packages/services/service-knowledge/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/service-knowledge +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-knowledge/package.json b/packages/services/service-knowledge/package.json index da49597632..9840f197cd 100644 --- a/packages/services/service-knowledge/package.json +++ b/packages/services/service-knowledge/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-knowledge", - "version": "14.3.0", + "version": "14.4.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 d2525e2efe..98e8d2a515 100644 --- a/packages/services/service-messaging/CHANGELOG.md +++ b/packages/services/service-messaging/CHANGELOG.md @@ -1,5 +1,27 @@ # @objectstack/service-messaging +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/services/service-messaging/package.json b/packages/services/service-messaging/package.json index fdc973a782..dff3ca90e8 100644 --- a/packages/services/service-messaging/package.json +++ b/packages/services/service-messaging/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-messaging", - "version": "14.3.0", + "version": "14.4.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 719c26b785..d7b10a1555 100644 --- a/packages/services/service-package/CHANGELOG.md +++ b/packages/services/service-package/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/service-package +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-package/package.json b/packages/services/service-package/package.json index 0e84e43ead..7b7f98c2d9 100644 --- a/packages/services/service-package/package.json +++ b/packages/services/service-package/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-package", - "version": "14.3.0", + "version": "14.4.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 9cb794b69a..5f489b1bf0 100644 --- a/packages/services/service-queue/CHANGELOG.md +++ b/packages/services/service-queue/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-queue +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-queue/package.json b/packages/services/service-queue/package.json index eaa0fdf903..8abcbc8f9c 100644 --- a/packages/services/service-queue/package.json +++ b/packages/services/service-queue/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-queue", - "version": "14.3.0", + "version": "14.4.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 023434a85f..cc1e7d2e57 100644 --- a/packages/services/service-realtime/CHANGELOG.md +++ b/packages/services/service-realtime/CHANGELOG.md @@ -1,5 +1,17 @@ # @objectstack/service-realtime +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-realtime/package.json b/packages/services/service-realtime/package.json index fb26e44f84..67106fdec6 100644 --- a/packages/services/service-realtime/package.json +++ b/packages/services/service-realtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-realtime", - "version": "14.3.0", + "version": "14.4.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 e572f5519e..5ca0e3c7a4 100644 --- a/packages/services/service-settings/CHANGELOG.md +++ b/packages/services/service-settings/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/service-settings +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/types@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/services/service-settings/package.json b/packages/services/service-settings/package.json index 3c75be9738..291f842392 100644 --- a/packages/services/service-settings/package.json +++ b/packages/services/service-settings/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-settings", - "version": "14.3.0", + "version": "14.4.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-sms/CHANGELOG.md b/packages/services/service-sms/CHANGELOG.md index 5bfb917f7b..bd5550df88 100644 --- a/packages/services/service-sms/CHANGELOG.md +++ b/packages/services/service-sms/CHANGELOG.md @@ -1,5 +1,27 @@ # @objectstack/service-sms +## 14.4.0 + +### Patch Changes + +- 1c19139: refactor(sms): rename `@objectstack/plugin-sms` to `@objectstack/service-sms` + + Infrastructure services follow the `service-*` convention + (`service-messaging`, `service-settings`, …) — the `plugin-*` prefix was a + misfit for a package whose whole job is registering the `sms` kernel + service (`plugin-email` is legacy debt, not precedent). Same exports, same + `SmsServicePlugin` class, same `sms` service id and settings namespace — + only the package name and its home (`packages/services/service-sms`) + change. The one published `@objectstack/plugin-sms@14.3.0` release should + be npm-deprecated in favour of `@objectstack/service-sms`. + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Minor Changes diff --git a/packages/services/service-sms/package.json b/packages/services/service-sms/package.json index 82f6ac8e97..1a89375bec 100644 --- a/packages/services/service-sms/package.json +++ b/packages/services/service-sms/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-sms", - "version": "14.3.0", + "version": "14.4.0", "license": "Apache-2.0", "description": "SMS service for ObjectStack — ISmsService + transport-pluggable outbound delivery (Aliyun / Twilio / log).", "main": "dist/index.js", diff --git a/packages/services/service-storage/CHANGELOG.md b/packages/services/service-storage/CHANGELOG.md index ff5f1ce2b3..a8d2c713d1 100644 --- a/packages/services/service-storage/CHANGELOG.md +++ b/packages/services/service-storage/CHANGELOG.md @@ -1,5 +1,18 @@ # @objectstack/service-storage +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/platform-objects@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/observability@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/services/service-storage/package.json b/packages/services/service-storage/package.json index 26498658dd..112af1c60f 100644 --- a/packages/services/service-storage/package.json +++ b/packages/services/service-storage/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-storage", - "version": "14.3.0", + "version": "14.4.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 72647f5c3f..3572723434 100644 --- a/packages/spec/CHANGELOG.md +++ b/packages/spec/CHANGELOG.md @@ -1,5 +1,75 @@ # @objectstack/spec +## 14.4.0 + +### Minor Changes + +- 7953832: ADR-0057 data lifecycle P1–P4 (#2786): platform-generated data is now bounded by construction. + + - **P1 — contract**: new `lifecycle` object property (`class: record | audit | telemetry | transient | event` + `retention` / `ttl` / `storage(rotation)` / `archive` / `reclaim`), enforced by the platform-owned **LifecycleService** registered by `ObjectQLPlugin` (default-on; disable via `OS_LIFECYCLE_DISABLED=1` or plugin `lifecycle.enabled=false`). The Reaper batch-deletes rows past `retention.maxAge` / `ttl` under a system context and reclaims space (`SqlDriver.reclaimSpace()` → SQLite `PRAGMA incremental_vacuum`). Non-`record` classes must declare a bounding policy (parse-time invariant + spec-liveness gate + dogfood storage-growth gate). + - **P2 — rotation**: `storage: { strategy: 'rotation', shards, unit }` physically time-shards the table on SQLite — writes land in the current shard, reads go through a UNION-ALL view under the base name, expiry is an O(1) `DROP` of shards past the window. A legacy table is adopted as the first shard on upgrade. Other dialects fall back to an equivalent age-based reap. + - **P3 — separation + Archiver**: registering a datasource named `telemetry` routes telemetry/event/audit objects to it (opt-in by existence; `transient` deliberately stays on the primary). Audit objects with `archive` declared get retain → archive → delete once the archive datasource exists; without it rows are retained, never dropped unarchived. + - **P4 — governance**: new `lifecycle` settings namespace — runtime enable switch, per-object retention overrides (tenant-scoped: regulated tenants set years, dev sets days), per-object/per-class row quotas and growth alerts (observe-and-alert only). + + **Behavior change**: 11 platform objects now carry lifecycle declarations and their telemetry is bounded by default — `sys_activity` 14d (rotated), `sys_audit_log` 90d hot → archive (retained forever until an `archive` datasource is registered), `sys_metadata_audit` 365d → archive, `sys_job_run` / `sys_automation_run` / `sys_http_delivery` 30d, notification pipeline (`sys_notification`, delivery, receipt, inbox) 90d, `sys_device_code` expires_at + 1d. Extend windows per environment/tenant via the `lifecycle.retention_overrides` setting. + +- 82e745e: ADR-0091 L1 — grant validity windows: effective-dated assignments, resolution-time filtering, explain expired state, authoring lint. + + - **plugin-security (objects)**: `sys_user_position` and `sys_user_permission_set` gain the D1 lifecycle columns — `valid_from`, `valid_until` (half-open `[from, until)`, UTC; null = unbounded, existing rows unchanged), `reason`, `delegated_from`, `last_certified_at`, `certified_by`. + - **core**: new shared predicate `isGrantActive` / `isGrantExpired` (`@objectstack/core`), and `resolveAuthzContext` now filters BOTH grant tables through it (D2, fail-closed — an expired unscoped `admin_full_access` grant no longer derives `platform_admin`). Present-but-unparseable bounds fail closed. + - **plugin-security (explain)**: `buildContextForUser` applies the same filter and returns `expiredGrants`; the principal layer reports the dedicated "held until … — expired" contributor state so "why did access disappear" is self-answering. Spec `ExplainLayerSchema` contributors gain an optional `state: 'active' | 'expired'`. + - **plugin-sharing**: `PositionGraphService.expandPositionUsers` filters expired holders — sharing-rule recipients stop including them at resolution time. + - **lint (D7)**: two new error rules over seed data — `security-grant-expired-at-authoring` (a `valid_until` in the past, or unparseable, is a grant that can never resolve) and `security-delegation-missing-reason` (a `delegated_from` row without `reason` breaks the D3 dual audit). Also re-exported the missing `SECURITY_MASTER_DETAIL_UNGRANTED` constant. + + No background job is involved anywhere — per ADR-0049, an expired grant simply stops resolving, in every edition. + +### Patch Changes + +- 82c0d94: Agent capability — open-edition honesty pass (docs + liveness annotation), no + behavior change: + + - The `agent`/`skill`/`tool`/`action` liveness files cite + `packages/services/service-ai/...` as evidence, but that tree is a stale, + untracked build artifact — the real runtime is the closed cloud + `@objectstack/service-ai`. Each file's `_note` now says so explicitly, so an + auditor reading the ledger understands these props are `live` because a + CLOUD/EE runtime consumes them and the OPEN framework edition does not. + - Docs (`content/docs/ai`): removed the `aggregate_data` over-claim from + Natural Language Queries — the open MCP surface registers 9 tools and + `query_records` has no aggregation args; `aggregate_data` is a cloud data + tool. And disambiguated the two things called "skill" (authoring `SKILL.md` + modules vs. runtime `defineSkill` agent capability bundles) with cross-linked + callouts on both pages. + +- 7449476: Permission-zoo audit follow-ups: + + **FLS keys must be object-qualified (`security-fls-unqualified-key`, error).** + The runtime evaluator matches field-permission keys by `.` + prefix — a bare `budget` key matches NOTHING and the declared masking + silently never enforces. The showcase itself shipped exactly that bug: its + contributor FLS block (bare `budget`/`spent`/`budget_remaining`) was a + runtime no-op, and the "FLS proof" in earlier verification was actually a + validation-rule rejection. Fixed: keys qualified + (`showcase_project.budget` …), a new D7 lint rule rejects bare keys at + compile time with a fix-it, and the permission-zoo dogfood now proves the + served pipeline denies a contributor's budget write while allowing ordinary + field edits. + + **Release pipeline: PROTOCOL_VERSION auto-sync.** `changeset version` now + runs `scripts/sync-protocol-version.mjs`, regenerating the handshake + constant from the spec package major. Release PRs opened by + changesets/action with the default GITHUB_TOKEN never trigger CI (GitHub's + anti-recursion rule), so the lockstep guard could only fire AFTER a release + merged — the drift class that broke main at 14.0.0 (#2769) is now fixed at + version time, the one spot that cannot be skipped. + + **D11 `externalSharingModel` honestly marked.** The dial has no runtime + consumer yet (authoring lint + Studio badges only); its liveness entry + moves from a bespoke `authorable` status to the documented `planned` + + `authorWarn`, and the sharing docs / design doc / showcase comments now say + explicitly that evaluation of external principals lands with the + principal-taxonomy phase (#2696). + ## 14.3.0 ### Minor Changes diff --git a/packages/spec/package.json b/packages/spec/package.json index cfd840d510..8da98dbf82 100644 --- a/packages/spec/package.json +++ b/packages/spec/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/spec", - "version": "14.3.0", + "version": "14.4.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 a6b2ee7d56..6caf74e0db 100644 --- a/packages/triggers/trigger-api/CHANGELOG.md +++ b/packages/triggers/trigger-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/trigger-api +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/triggers/trigger-api/package.json b/packages/triggers/trigger-api/package.json index 22a954795c..343717a6e2 100644 --- a/packages/triggers/trigger-api/package.json +++ b/packages/triggers/trigger-api/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/trigger-api", - "version": "14.3.0", + "version": "14.4.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 f56033fd4c..c530030541 100644 --- a/packages/triggers/trigger-record-change/CHANGELOG.md +++ b/packages/triggers/trigger-record-change/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/plugin-trigger-record-change +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/triggers/trigger-record-change/package.json b/packages/triggers/trigger-record-change/package.json index b173757835..8e2ca3e497 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": "14.3.0", + "version": "14.4.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 946f64962d..e367e7f06c 100644 --- a/packages/triggers/trigger-schedule/CHANGELOG.md +++ b/packages/triggers/trigger-schedule/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/plugin-trigger-schedule +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/core@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/triggers/trigger-schedule/package.json b/packages/triggers/trigger-schedule/package.json index 5b7cf5ef6a..ca48c231cc 100644 --- a/packages/triggers/trigger-schedule/package.json +++ b/packages/triggers/trigger-schedule/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/trigger-schedule", - "version": "14.3.0", + "version": "14.4.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 74df93306d..7b7e14994b 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/types +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/types/package.json b/packages/types/package.json index fc0c1b0c71..e06d6e1ca5 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/types", - "version": "14.3.0", + "version": "14.4.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 20be8a71d3..cad05a20dc 100644 --- a/packages/verify/CHANGELOG.md +++ b/packages/verify/CHANGELOG.md @@ -1,5 +1,29 @@ # @objectstack/verify +## 14.4.0 + +### Patch Changes + +- Updated dependencies [7953832] +- Updated dependencies [82e745e] +- Updated dependencies [82c0d94] +- Updated dependencies [9887465] +- Updated dependencies [7449476] + - @objectstack/spec@14.4.0 + - @objectstack/objectql@14.4.0 + - @objectstack/driver-sqlite-wasm@14.4.0 + - @objectstack/service-automation@14.4.0 + - @objectstack/core@14.4.0 + - @objectstack/plugin-security@14.4.0 + - @objectstack/plugin-sharing@14.4.0 + - @objectstack/plugin-auth@14.4.0 + - @objectstack/plugin-hono-server@14.4.0 + - @objectstack/rest@14.4.0 + - @objectstack/runtime@14.4.0 + - @objectstack/service-analytics@14.4.0 + - @objectstack/service-datasource@14.4.0 + - @objectstack/service-settings@14.4.0 + ## 14.3.0 ### Patch Changes diff --git a/packages/verify/package.json b/packages/verify/package.json index a9cd1333e3..b23263550b 100644 --- a/packages/verify/package.json +++ b/packages/verify/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/verify", - "version": "14.3.0", + "version": "14.4.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 272e7954fa..70355c00ef 100644 --- a/packages/vscode-objectstack/CHANGELOG.md +++ b/packages/vscode-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # objectstack-vscode +## 14.4.0 + ## 14.3.0 ## 14.2.0 diff --git a/packages/vscode-objectstack/package.json b/packages/vscode-objectstack/package.json index 96cedef3eb..6dcccf865d 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": "14.3.0", + "version": "14.4.0", "publisher": "objectstack", "license": "Apache-2.0", "repository": {