From b602b02d294dd7c27ab3a8617a91df3943ae548d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 14:41:21 +0000 Subject: [PATCH] chore: version packages --- .changeset/metadata-branch-removal.md | 47 ---- .changeset/metadata-core-cache.md | 23 -- .changeset/metadata-core-in-memory.md | 16 -- .changeset/metadata-core-layered.md | 16 -- .changeset/metadata-core-skeleton.md | 15 -- .changeset/metadata-fs-init.md | 37 --- .changeset/metadata-pr6-repo-bridge.md | 25 -- .changeset/objectql-pr7-schema-events.md | 27 --- .changeset/pr10a-overlay-fixtures.md | 8 - .changeset/pr10b-sys-metadata-repo.md | 11 - .changeset/pr10c-layered-integration.md | 9 - .changeset/pr10d1-dryrun-probe.md | 13 - .changeset/pr10d2-schema-alignment.md | 15 -- .changeset/pr10d3-feature-flag-repo-path.md | 20 -- .../pr10d4-rest-plumbing-real-engine-test.md | 23 -- .changeset/pr10d5-flip-flag-default.md | 23 -- .changeset/pr10d6-remove-flag.md | 19 -- .changeset/pr10e-dev-hmr-data-reload.md | 40 --- .changeset/pr10e-hmr-view-name-resolution.md | 30 --- .changeset/pr11-metadata-lifecycle-docs.md | 9 - .changeset/pr8-cli-deshim.md | 21 -- .changeset/pr9-studio-seq.md | 12 - .changeset/publish-account-console.md | 16 -- .changeset/spec-section-translations.md | 8 - .changeset/studio-live-preview-fixes.md | 26 -- .changeset/studio-timeline-dashboard.md | 21 -- apps/account/CHANGELOG.md | 22 ++ apps/account/package.json | 2 +- apps/console/CHANGELOG.md | 15 ++ apps/console/package.json | 2 +- apps/docs/CHANGELOG.md | 10 + apps/docs/package.json | 2 +- apps/studio/CHANGELOG.md | 99 ++++++++ apps/studio/package.json | 2 +- examples/app-crm/CHANGELOG.md | 14 ++ examples/app-crm/package.json | 2 +- examples/app-todo/CHANGELOG.md | 24 ++ examples/app-todo/package.json | 2 +- packages/adapters/express/CHANGELOG.md | 9 + packages/adapters/express/package.json | 2 +- packages/adapters/fastify/CHANGELOG.md | 9 + packages/adapters/fastify/package.json | 2 +- packages/adapters/hono/CHANGELOG.md | 10 + packages/adapters/hono/package.json | 2 +- packages/adapters/nestjs/CHANGELOG.md | 9 + packages/adapters/nestjs/package.json | 2 +- packages/adapters/nextjs/CHANGELOG.md | 9 + packages/adapters/nextjs/package.json | 2 +- packages/adapters/nuxt/CHANGELOG.md | 9 + packages/adapters/nuxt/package.json | 2 +- packages/adapters/sveltekit/CHANGELOG.md | 9 + packages/adapters/sveltekit/package.json | 2 +- packages/cli/CHANGELOG.md | 66 +++++ packages/cli/package.json | 2 +- packages/client-react/CHANGELOG.md | 9 + packages/client-react/package.json | 2 +- packages/client/CHANGELOG.md | 8 + packages/client/package.json | 2 +- packages/core/CHANGELOG.md | 7 + packages/core/package.json | 2 +- packages/create-objectstack/CHANGELOG.md | 2 + packages/create-objectstack/package.json | 2 +- packages/formula/CHANGELOG.md | 7 + packages/formula/package.json | 2 +- packages/metadata-core/CHANGELOG.md | 138 +++++++++++ packages/metadata-core/package.json | 2 +- packages/metadata-fs/CHANGELOG.md | 123 ++++++++++ packages/metadata-fs/package.json | 2 +- packages/metadata/CHANGELOG.md | 170 +++++++++++++ packages/metadata/package.json | 2 +- packages/objectql/CHANGELOG.md | 228 ++++++++++++++++++ packages/objectql/package.json | 2 +- packages/observability/CHANGELOG.md | 8 + packages/observability/package.json | 2 +- packages/platform-objects/CHANGELOG.md | 23 ++ packages/platform-objects/package.json | 2 +- packages/plugins/driver-memory/CHANGELOG.md | 8 + packages/plugins/driver-memory/package.json | 2 +- packages/plugins/driver-mongodb/CHANGELOG.md | 8 + packages/plugins/driver-mongodb/package.json | 2 +- packages/plugins/driver-sql/CHANGELOG.md | 8 + packages/plugins/driver-sql/package.json | 2 +- packages/plugins/driver-turso/CHANGELOG.md | 9 + packages/plugins/driver-turso/package.json | 2 +- .../plugins/plugin-approvals/CHANGELOG.md | 11 + .../plugins/plugin-approvals/package.json | 2 +- packages/plugins/plugin-audit/CHANGELOG.md | 10 + packages/plugins/plugin-audit/package.json | 2 +- packages/plugins/plugin-auth/CHANGELOG.md | 10 + packages/plugins/plugin-auth/package.json | 2 +- packages/plugins/plugin-dev/CHANGELOG.md | 29 +++ packages/plugins/plugin-dev/package.json | 2 +- packages/plugins/plugin-email/CHANGELOG.md | 10 + packages/plugins/plugin-email/package.json | 2 +- .../plugins/plugin-hono-server/CHANGELOG.md | 8 + .../plugins/plugin-hono-server/package.json | 2 +- .../plugins/plugin-mcp-server/CHANGELOG.md | 8 + .../plugins/plugin-mcp-server/package.json | 2 +- packages/plugins/plugin-msw/CHANGELOG.md | 24 ++ packages/plugins/plugin-msw/package.json | 2 +- packages/plugins/plugin-reports/CHANGELOG.md | 10 + packages/plugins/plugin-reports/package.json | 2 +- packages/plugins/plugin-security/CHANGELOG.md | 10 + packages/plugins/plugin-security/package.json | 2 +- packages/plugins/plugin-sharing/CHANGELOG.md | 22 ++ packages/plugins/plugin-sharing/package.json | 2 +- packages/plugins/plugin-webhooks/CHANGELOG.md | 8 + packages/plugins/plugin-webhooks/package.json | 2 +- packages/rest/CHANGELOG.md | 30 +++ packages/rest/package.json | 2 +- packages/runtime/CHANGELOG.md | 119 +++++++++ packages/runtime/package.json | 2 +- packages/services/service-ai/CHANGELOG.md | 8 + packages/services/service-ai/package.json | 2 +- .../services/service-analytics/CHANGELOG.md | 8 + .../services/service-analytics/package.json | 2 +- .../services/service-automation/CHANGELOG.md | 9 + .../services/service-automation/package.json | 2 +- packages/services/service-cache/CHANGELOG.md | 8 + packages/services/service-cache/package.json | 2 +- packages/services/service-feed/CHANGELOG.md | 8 + packages/services/service-feed/package.json | 2 +- packages/services/service-i18n/CHANGELOG.md | 8 + packages/services/service-i18n/package.json | 2 +- packages/services/service-job/CHANGELOG.md | 10 + packages/services/service-job/package.json | 2 +- .../services/service-package/CHANGELOG.md | 8 + .../services/service-package/package.json | 2 +- packages/services/service-queue/CHANGELOG.md | 10 + packages/services/service-queue/package.json | 2 +- .../services/service-realtime/CHANGELOG.md | 10 + .../services/service-realtime/package.json | 2 +- .../services/service-settings/CHANGELOG.md | 10 + .../services/service-settings/package.json | 2 +- .../services/service-storage/CHANGELOG.md | 8 + .../services/service-storage/package.json | 2 +- packages/spec/CHANGELOG.md | 9 + packages/spec/package.json | 2 +- packages/types/CHANGELOG.md | 7 + packages/types/package.json | 2 +- packages/vscode-objectstack/CHANGELOG.md | 2 + packages/vscode-objectstack/package.json | 2 +- 142 files changed, 1560 insertions(+), 588 deletions(-) delete mode 100644 .changeset/metadata-branch-removal.md delete mode 100644 .changeset/metadata-core-cache.md delete mode 100644 .changeset/metadata-core-in-memory.md delete mode 100644 .changeset/metadata-core-layered.md delete mode 100644 .changeset/metadata-core-skeleton.md delete mode 100644 .changeset/metadata-fs-init.md delete mode 100644 .changeset/metadata-pr6-repo-bridge.md delete mode 100644 .changeset/objectql-pr7-schema-events.md delete mode 100644 .changeset/pr10a-overlay-fixtures.md delete mode 100644 .changeset/pr10b-sys-metadata-repo.md delete mode 100644 .changeset/pr10c-layered-integration.md delete mode 100644 .changeset/pr10d1-dryrun-probe.md delete mode 100644 .changeset/pr10d2-schema-alignment.md delete mode 100644 .changeset/pr10d3-feature-flag-repo-path.md delete mode 100644 .changeset/pr10d4-rest-plumbing-real-engine-test.md delete mode 100644 .changeset/pr10d5-flip-flag-default.md delete mode 100644 .changeset/pr10d6-remove-flag.md delete mode 100644 .changeset/pr10e-dev-hmr-data-reload.md delete mode 100644 .changeset/pr10e-hmr-view-name-resolution.md delete mode 100644 .changeset/pr11-metadata-lifecycle-docs.md delete mode 100644 .changeset/pr8-cli-deshim.md delete mode 100644 .changeset/pr9-studio-seq.md delete mode 100644 .changeset/publish-account-console.md delete mode 100644 .changeset/spec-section-translations.md delete mode 100644 .changeset/studio-live-preview-fixes.md delete mode 100644 .changeset/studio-timeline-dashboard.md create mode 100644 packages/metadata-core/CHANGELOG.md create mode 100644 packages/metadata-fs/CHANGELOG.md create mode 100644 packages/observability/CHANGELOG.md diff --git a/.changeset/metadata-branch-removal.md b/.changeset/metadata-branch-removal.md deleted file mode 100644 index ad38542b05..0000000000 --- a/.changeset/metadata-branch-removal.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -"@objectstack/metadata-core": minor -"@objectstack/metadata-fs": minor -"@objectstack/metadata": minor -"@objectstack/objectql": minor -"@objectstack/runtime": minor ---- - -**BREAKING — metadata: remove `project` and `branch` from `MetaRef`** - -The metadata layer no longer models project or branch. Customisation is now -scoped purely to **organisation**. Project remains exclusively as an artifact -packaging concept (the `objectstack.json` bundle envelope); branching is left -to Git. - -What changed: - -- `MetaRef` is now `{ org, type, name, version? }` (was - `{ org, project, branch, type, name, version? }`). `refKey()` is the two - segment string `${org}/${type}/${name}` (was five segments). -- `MetadataItem.seq` is monotonic **per org** (was per branch). -- `BranchRef`, `MergeStrategy`, `MergeResult` types and the optional - `fork`/`merge` methods on `MetadataRepository` are removed. -- `ListFilter` / `WatchFilter` / `HistoryOptions` no longer accept `project` - or `branch`. -- `FileSystemRepository` disk layout simplified to - `//.json` (was `////.json`); - change-log path is now `.objectstack/.log/main.jsonl` regardless of any - branch concept. Constructor no longer accepts `project` / `branch`. -- `SysMetadataRepository`: removed `projectLabel` / `branchLabel` options; - the `sys_metadata` schema's `project_id` / `branch` columns (if present) - are ignored. A future major release will `DROP` them. -- `MetadataManager.setRepository(repo, opts)` no longer takes an opts object - with `branch`. - -Migration: - -```diff --const ref = { org: 'acme', project: 'crm', branch: 'main', type: 'view', name: 'home' }; -+const ref = { org: 'acme', type: 'view', name: 'home' }; - --new FileSystemRepository({ root, org: 'acme', project: 'crm', branch: 'main' }); -+new FileSystemRepository({ root, org: 'acme' }); -``` - -Existing `sys_metadata` rows continue to load; the deprecated columns are -ignored at read time. diff --git a/.changeset/metadata-core-cache.md b/.changeset/metadata-core-cache.md deleted file mode 100644 index 4b6830dbbf..0000000000 --- a/.changeset/metadata-core-cache.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -'@objectstack/metadata-core': minor ---- - -Add `MetadataCache` — bounded, event-invalidated LRU sitting in front of -any `MetadataRepository`. Features: - -- Bounded by `maxEntries` and `maxBytes` (default 1024 / 8 MiB). -- LRU eviction with touch-on-read. -- Lazy fill on read miss; negative caching for known-absent items. -- Subscribes to `repo.watch(filter)` and invalidates affected entries - (including rename: both old and new keys). -- Coalesces concurrent reads for the same key onto a single backend - fetch (thundering-herd safe). -- Generation counter discards in-flight fetches that race an - invalidation, preventing stale-cache poisoning. -- Diagnostics via `getStats()` (entries, bytes, hits, misses, - invalidations, coalesced). - -Includes a property-based test that verifies cache→repo convergence -under randomly-generated update sequences. - -See ADR-0008 §10 PR-3. diff --git a/.changeset/metadata-core-in-memory.md b/.changeset/metadata-core-in-memory.md deleted file mode 100644 index 115ff037be..0000000000 --- a/.changeset/metadata-core-in-memory.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@objectstack/metadata-core': minor ---- - -Add `InMemoryRepository` (reference implementation) and a parameterised -Repository contract test suite. The contract suite, exposed at -`@objectstack/metadata-core/testing`, verifies the seven invariants every -backend must satisfy (atomic put, monotonic seq per branch, optimistic -locking, canonical hashing, event ordering, watch resumability, -tombstones). - -Includes implementation-specific tests covering the injected clock, -canonical-hash insertion-order independence, and deep-copy isolation -between caller and store. - -See ADR-0008 §10 PR-2. diff --git a/.changeset/metadata-core-layered.md b/.changeset/metadata-core-layered.md deleted file mode 100644 index 9757862a79..0000000000 --- a/.changeset/metadata-core-layered.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@objectstack/metadata-core': minor ---- - -Add `LayeredRepository` — composes N `MetadataRepository`s into a -read-through stack. Reads walk top-to-bottom; writes route to the -topmost writable layer; `list()` deduplicates by `refKey` preferring -the top; `history()` and `watch()` merge events from all layers, -tagging each event's `source` with `:`. The -multiplexed `watch()` correctly cancels all child iterators when the -consumer calls `return()`. - -Enables the canonical "system built-ins under user overlay" pattern -described in ADR-0008. - -See ADR-0008 §10 PR-5. diff --git a/.changeset/metadata-core-skeleton.md b/.changeset/metadata-core-skeleton.md deleted file mode 100644 index a76309846f..0000000000 --- a/.changeset/metadata-core-skeleton.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@objectstack/metadata-core': minor ---- - -New package: Repository contracts for the metadata lifecycle (ADR-0008). - -Definitions only — no I/O. Exports Zod schemas, the -`MetadataRepository` interface, canonical-form helpers -(`canonicalize`, `hashSpec`), and typed errors (`ConflictError`, -`NotFoundError`, `SchemaValidationError`). - -This is M0 PR-1 of the four-layer metadata refactor. Subsequent PRs -add `InMemoryRepository`, `MetadataCache`, `FileSystemRepository` -and migrate the existing `MetadataManager` / HMR plumbing onto the -new contracts. diff --git a/.changeset/metadata-fs-init.md b/.changeset/metadata-fs-init.md deleted file mode 100644 index 784bbd1464..0000000000 --- a/.changeset/metadata-fs-init.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -'@objectstack/metadata-fs': minor -'@objectstack/metadata-core': patch ---- - -Add `@objectstack/metadata-fs` — Node-only `FileSystemRepository` -implementation of the M0 Repository contract. - -Layout: - -``` -/ - /.json # canonical body (atomic rename writes) - .objectstack/.log/.jsonl # append-only change log -``` - -Features: - -- All 17 contract tests pass (`singleBranch: true`). -- Per-key serialization via `KeyedMutex`. -- Atomic writes via tmpfile + rename. -- Heads and `seq` recovered from the JSONL log on `start()` — survives - process restart. -- chokidar watcher translates external edits (e.g. VSCode saves) into - `MetadataEvent`s with `source: 'fs'`. -- Self-write suppression: 200ms window prevents the watcher from - re-emitting events for files we wrote ourselves. -- Manual `AsyncIterator` for `watch()` to mirror the in-memory pattern. - -Also (`metadata-core`): - -- Add `singleBranch` option to `runRepositoryContractTests` so - single-branch backends (like the FS one) skip the cross-branch test. -- Switch tsup `splitting: true` so `index.js` and `testing.js` share a - single `ConflictError` class identity (was double-bundled before). - -See ADR-0008 §10 PR-4. diff --git a/.changeset/metadata-pr6-repo-bridge.md b/.changeset/metadata-pr6-repo-bridge.md deleted file mode 100644 index 7741b31ec6..0000000000 --- a/.changeset/metadata-pr6-repo-bridge.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -'@objectstack/metadata': minor ---- - -Attach an `@objectstack/metadata-core` `MetadataRepository` as a -supplementary event source on `MetadataManager` (ADR-0008 M0 PR-6). - -When a repository is configured via `manager.setRepository(repo)`: - -- the manager subscribes to `repo.watch({ branch: 'main' })` and re-emits - each event through the legacy `MetadataWatchEvent` channel that - `manager.subscribe(type, cb)` already exposes, so existing HMR / SSE - pipelines pick up changes from the new layer automatically; -- each event also invalidates the in-memory registry entry and the - `list()` cache for the affected type, so subsequent reads fall - through to the repository / loaders instead of returning stale data; -- a new `manager.dispose()` method drains the watch loop and the FS - watcher cleanly. `MetadataPlugin.stop()` calls it. - -`MetadataPlugin.start()` now instantiates a `FileSystemRepository` -rooted at `/.objectstack/metadata/` (separate from user source -files) and attaches it automatically when not in `artifact-only` mode. - -No write-mirroring yet — `register()` / `unregister()` / `save()` keep -their existing semantics; the canonical write path migrates in PR-10. diff --git a/.changeset/objectql-pr7-schema-events.md b/.changeset/objectql-pr7-schema-events.md deleted file mode 100644 index 687179806b..0000000000 --- a/.changeset/objectql-pr7-schema-events.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -'@objectstack/objectql': minor ---- - -Subscribe `ObjectQLPlugin` to `metadata.subscribe('object', …)` so the -`SchemaRegistry` merge cache is invalidated and the affected object -re-registered on every object metadata change (ADR-0008 M0 PR-7). - -Combined with the PR-6 metadata ↔ repository bridge, this closes the -Studio HMR loop end-to-end: editing an object definition (file, REST -write, or Studio inline edit) emits a `MetadataEvent`, which flows -through `MetadataManager.subscribe('object', …)` into ObjectQL, which -drops the cached merged definition and re-fetches the canonical body -from the metadata service. Subsequent reads see the new schema with -no server restart. - -Additions: - -- `SchemaRegistry.invalidate(fqnOrName)` and `invalidateAll()` — - public hooks for event-driven cache eviction; contributors are - preserved so `resolveObject` recomputes against the next call. -- `ObjectQLPlugin.start()` wires the subscription when the metadata - service exposes `subscribe()`. The handler invalidates, re-fetches - via `metadata.get('object', name)`, and re-registers with the - original `packageId` / `namespace`. Deletes only invalidate. -- `ObjectQLPlugin.stop()` drains the subscription handles so test - reloads don't leak watchers. diff --git a/.changeset/pr10a-overlay-fixtures.md b/.changeset/pr10a-overlay-fixtures.md deleted file mode 100644 index c93f4e0804..0000000000 --- a/.changeset/pr10a-overlay-fixtures.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@objectstack/objectql': patch ---- - -ADR-0008 M0 PR-10a: pin overlay-whitelist + canonical-hash invariants -before re-expressing the overlay path as a LayeredRepository. No -runtime change — adds 28 regression tests that fail loud if a future -PR weakens the shared-DB tenancy contract or breaks hash stability. diff --git a/.changeset/pr10b-sys-metadata-repo.md b/.changeset/pr10b-sys-metadata-repo.md deleted file mode 100644 index f82753db85..0000000000 --- a/.changeset/pr10b-sys-metadata-repo.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@objectstack/objectql': minor ---- - -ADR-0008 M0 PR-10b: introduce `SysMetadataRepository` — a -`MetadataRepository` wrapper over the existing `sys_metadata` table. -M0 keeps single-row update semantics (append-only event log is M1 -work). Whitelist enforcement, optimistic locking via content hash, -and in-process watch fan-out are all live. Not yet wired into any -production write path — PR-10c will compose it under a -LayeredRepository. diff --git a/.changeset/pr10c-layered-integration.md b/.changeset/pr10c-layered-integration.md deleted file mode 100644 index 5aa8b55d30..0000000000 --- a/.changeset/pr10c-layered-integration.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@objectstack/objectql": patch ---- - -test(objectql): integration coverage for `LayeredRepository` composed of -`SysMetadataRepository` (top, writable overlay) over `InMemoryRepository` -(bottom, artifact baseline). Verifies read fallthrough, overlay-wins -precedence, write routing, delete behavior, event source tagging across -layers, and merged-list semantics. Part of ADR-0008 PR-10c. diff --git a/.changeset/pr10d1-dryrun-probe.md b/.changeset/pr10d1-dryrun-probe.md deleted file mode 100644 index 48d4ba3e9b..0000000000 --- a/.changeset/pr10d1-dryrun-probe.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"@objectstack/objectql": patch ---- - -feat(objectql): hash-compat dry-run probe for the legacy → repository -write-path migration (ADR-0008 PR-10d.1). Pure-function `runDryRun()` plus -a CLI (`scripts/dry-run-hash-compat.ts`) that audits a snapshot of -`sys_metadata` for invalid JSON, non-object bodies, unstable hashes across -canonical round-trip, and duplicate overlay keys. Exits non-zero when -incompatibilities are found. 14 unit tests covering happy paths, error -classifications (`invalid_json`, `non_object_body`, `unstable_hash`, -`missing_metadata`, `duplicate_overlay_key`), and boundary conditions -(empty snapshot, deep nesting, unicode). diff --git a/.changeset/pr10d2-schema-alignment.md b/.changeset/pr10d2-schema-alignment.md deleted file mode 100644 index 67e0a9ed55..0000000000 --- a/.changeset/pr10d2-schema-alignment.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@objectstack/objectql": patch ---- - -fix(objectql): SysMetadataRepository reuses the existing `checksum` column -instead of writing a non-existent `_hash` column (ADR-0008 PR-10d.2). The -production `sys_metadata` schema (`packages/platform-objects`) already -ships with `checksum: text(64)` — perfect for sha256 hex — and `version: -number` for the monotonic counter. No DDL migration is required for -PR-10d.3 cutover; legacy rows with NULL checksum will be lazily -backfilled on first put(). - -Also extends the PR-10d.1 dry-run probe with two new checks -(`checksum_missing` warning, `checksum_drift` error) and three additional -tests, taking objectql to 325/325 green. diff --git a/.changeset/pr10d3-feature-flag-repo-path.md b/.changeset/pr10d3-feature-flag-repo-path.md deleted file mode 100644 index fee56a6124..0000000000 --- a/.changeset/pr10d3-feature-flag-repo-path.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -"@objectstack/objectql": minor -"@objectstack/platform-objects": patch ---- - -PR-10d.3 — feature flag for `SysMetadataRepository.put` write path in `saveMetaItem`. - -- `ObjectStackProtocolImplementation` now accepts an `options.useRepositoryWritePath` flag - (also honored via `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH=1`) that routes overlay writes - through `SysMetadataRepository.put`, appending to the change-log and emitting HMR `seq`. -- `saveMetaItem` request grew optional `parentVersion` (If-Match) and `actor` fields. - `ConflictError` is mapped to a 409 `metadata_conflict` API error. -- Plural metadata type aliases (`views`, `dashboards`, ...) are normalized to singular - before the repo's overlay-allowlist gate. -- `SysMetadataRepository.put`/`delete` now update/delete by row `id` (the engine's - strict `.update` semantics require an id or `multi:true`). -- `sys_metadata.checksum` column widened from 64 → 71 chars to hold the `"sha256:"` - prefix produced by `hashSpec()`. -- Default behaviour unchanged: legacy raw-engine path remains until PR-10d.4 flips the - flag and removes it. diff --git a/.changeset/pr10d4-rest-plumbing-real-engine-test.md b/.changeset/pr10d4-rest-plumbing-real-engine-test.md deleted file mode 100644 index f47b4c6486..0000000000 --- a/.changeset/pr10d4-rest-plumbing-real-engine-test.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -"@objectstack/rest": minor -"@objectstack/objectql": patch ---- - -PR-10d.4 — REST plumbing for the metadata repository write path. - -- `PUT /api/v1/meta/:type/:name` (and the compound `:type/:section/:name` variant) - now forwards the `If-Match` header to `saveMetaItem` as `parentVersion`, and - `X-Actor` (or `req.user.id`) as `actor`. ETag-style quotes are stripped. -- A failed optimistic-lock check surfaces as HTTP 409 with body - `{ "error": "...", "code": "metadata_conflict" }` (no protocol changes — - `sendError` already honoured `error.status` + `error.code`). -- Added a real-engine integration test for the repository write path - (`protocol-save-meta-repo-path-real-engine.test.ts`) — addresses the - PR-10d.3 rubber-duck stub-drift concern by exercising - `ObjectStackProtocolImplementation.saveMetaItem` through `new ObjectQL()` - with an inline in-memory driver. Covers insert→update version bump, - parentVersion conflict, checksum length, and plural→singular normalization. - -Default behaviour unchanged: the repository write path remains opt-in via -`options.useRepositoryWritePath` / `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH=1`. -Flag flip and legacy path removal will follow in a separate post-soak PR. diff --git a/.changeset/pr10d5-flip-flag-default.md b/.changeset/pr10d5-flip-flag-default.md deleted file mode 100644 index 247dfe9aae..0000000000 --- a/.changeset/pr10d5-flip-flag-default.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -"@objectstack/objectql": minor ---- - -PR-10d.5 — Flip default of `useRepositoryWritePath` to `true`. - -`saveMetaItem` now routes overlay-allowed metadata types (view, dashboard, -report, email_template) through `SysMetadataRepository.put` by default — -every write appends to the change log and emits a watch event with a -monotonic `seq` for HMR / replay. - -Non-overlay-allowed types (`object`, `flow`, `agent`, ...) still take the -legacy raw-engine path. This preserves control-plane bootstrap behaviour -(which writes `object`/`flow` definitions via `saveMetaItem` and is -permitted by the outer protocol gate to write any type when `projectId` -is undefined). - -Opt-out remains available during the deprecation window: -- Constructor: `new ObjectStackProtocolImplementation(engine, …, { useRepositoryWritePath: false })` -- Env var: `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH=0` - -The legacy raw-engine branch for overlay-allowed types is scheduled for -removal in PR-10d.6 once this default has soaked for one release. diff --git a/.changeset/pr10d6-remove-flag.md b/.changeset/pr10d6-remove-flag.md deleted file mode 100644 index d31b475270..0000000000 --- a/.changeset/pr10d6-remove-flag.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -"@objectstack/objectql": patch ---- - -PR-10d.6 — remove `useRepositoryWritePath` feature flag. - -Overlay-allowed metadata types (`view`, `dashboard`, `report`, -`email_template`) now unconditionally route through -`SysMetadataRepository.put` (change-log + HMR `seq`). The legacy -raw-engine branch is retained for non-overlay types (`object`, `flow`, -`agent`, etc.) used during control-plane bootstrap, since the repository -`assertAllowed()` whitelist would reject them. - -Removed: -- `ObjectStackProtocolImplementation` constructor option - `{ useRepositoryWritePath: boolean }`. -- `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH` environment variable. - -There is no opt-out: behavior is now equivalent to the PR-10d.5 default. diff --git a/.changeset/pr10e-dev-hmr-data-reload.md b/.changeset/pr10e-dev-hmr-data-reload.md deleted file mode 100644 index a6aff9dc92..0000000000 --- a/.changeset/pr10e-dev-hmr-data-reload.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -"@objectstack/objectql": patch -"@objectstack/runtime": patch -"@objectstack/metadata": patch -"@objectstack/metadata-fs": patch ---- - -Fix dev-mode HMR data-reload for `*.view.ts` / `*.flow.ts` source-file edits. - -Three coordinated fixes close the long-standing gap where editing a -declarative-metadata source file in dev (e.g. `case.view.ts`) would -recompile `dist/objectstack.json` but the running server kept serving -the stale boot-time value: - -1. **`@objectstack/objectql`** — `ObjectStackProtocolImplementation.getMetaItem` - now consults `MetadataService` (HMR-aware) **before** the in-memory - `SchemaRegistry` (boot-time cache). Previously the registry shadowed - freshly-registered values: `manager.register('view','case',newDef)` - updated MetadataManager but `getMetaItem` returned the stale registry - copy because step 2 (registry) ran before step 3 (service). Reordered - to "1. sys_metadata overlay → 2. MetadataService → 3. SchemaRegistry". - -2. **`@objectstack/runtime`** — `createStandaloneStack` now enables the - `MetadataPlugin` artifact-file watcher in non-production environments - (`NODE_ENV !== 'production'`). Previously hard-coded to `watch: false`, - leaving nothing watching `dist/objectstack.json` when the CLI dev mode - recompiled it. - -3. **`@objectstack/metadata`** & **`@objectstack/metadata-fs`** — Both - chokidar watchers now use `usePolling: true` to avoid `fs.watch` - EMFILE on macOS / busy dev hosts where the native file-descriptor - pool can be exhausted by other long-running node processes. - -With these three changes: -- CLI edits source → recompile artifact (~400ms) -- Server's polling chokidar detects artifact change → `_loadFromLocalFile` -- `_loadFromLocalFile` calls `manager.register(type, name, item)` -- MetadataService now has the fresh value -- Read path returns the fresh value via the new step-2 lookup -- Studio SSE listeners re-render diff --git a/.changeset/pr10e-hmr-view-name-resolution.md b/.changeset/pr10e-hmr-view-name-resolution.md deleted file mode 100644 index 3a3d286978..0000000000 --- a/.changeset/pr10e-hmr-view-name-resolution.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -'@objectstack/metadata': patch -'@objectstack/runtime': patch ---- - -Fix dev-mode HMR data-reload for view metadata. - -`MetadataPlugin._parseAndRegisterArtifact` previously required a top-level -`name` on every artifact item and silently skipped those without one. -View bundles in the compiled artifact carry no top-level `name` (their -identity is the target object, encoded under `list.data.object` / -`form.data.object` — same pattern used by `ObjectQL.SchemaRegistry`'s -`resolveMetadataItemName`). As a result, artifact-loaded views never -reached `MetadataManager`, and HMR file pushes never affected the read -path: API responses kept returning the boot-time `SchemaRegistry` copy. - -This change derives the registration key from `list.data.object` (or -`form.data.object`) when no top-level `name` is present, mirroring the -ObjectQL convention. - -Also splits the `MetadataPlugin` watch flag into two independent -options so dev mode can enable artifact-file HMR without paying the -cost of the source-file scanner: - -- `watch` — controls `NodeMetadataManager`'s recursive source scan - (default `false`; turning it on in artifact mode would polling-scan - the entire project root including `node_modules`). -- `artifactWatch` — controls the cheap single-file polling watcher on - the compiled artifact (`dist/objectstack.json`). The standalone stack - enables this automatically when `NODE_ENV !== 'production'`. diff --git a/.changeset/pr11-metadata-lifecycle-docs.md b/.changeset/pr11-metadata-lifecycle-docs.md deleted file mode 100644 index 28bffbffcd..0000000000 --- a/.changeset/pr11-metadata-lifecycle-docs.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@objectstack/docs": patch ---- - -docs: add `concepts/metadata-lifecycle.mdx` documenting the Repository → -Change Log → Cache → Registry data path (ADR-0008), the overlay whitelist -invariant (ADR-0005), and end-to-end HMR semantics. Cross-linked from -`concepts/metadata-driven` and `guides/contracts/metadata-service`. Closes -M0 PR-11. diff --git a/.changeset/pr8-cli-deshim.md b/.changeset/pr8-cli-deshim.md deleted file mode 100644 index 847c1e893d..0000000000 --- a/.changeset/pr8-cli-deshim.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@objectstack/metadata': minor -'@objectstack/cli': patch ---- - -Server-side artifact-file watcher; CLI no longer posts to the HMR -endpoint on recompile (ADR-0008 M0 PR-8). - -`MetadataPlugin.start()` now attaches a chokidar watcher on the -`artifactSource.path` when running in local-file mode with `watch !== -false`. On every artifact change it re-invokes `_loadFromLocalFile` -and broadcasts a `reload` event through the HMR hub. This replaces -the previous arrangement where `os dev`'s watch-recompile loop POSTed -`/api/v1/dev/metadata-events` to trigger a reload — the server is now -autonomous. - -The CLI `dev` command's recompile loop drops the POST call; the -`/api/v1/dev/metadata-events` route remains available for external -trigger sources (cloud webhooks, git hooks, ad-hoc curl). - -`MetadataPlugin.stop()` closes the artifact watcher cleanly. diff --git a/.changeset/pr9-studio-seq.md b/.changeset/pr9-studio-seq.md deleted file mode 100644 index b03920063d..0000000000 --- a/.changeset/pr9-studio-seq.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@objectstack/metadata': minor -'@objectstack/studio': minor ---- - -ADR-0008 M0 PR-9: thread the canonical server-side change-log `seq` from -`MetadataRepository` events through to the Studio HMR badge. The -`useMetadataHmr()` hook now exposes `lastSeq` alongside the local -`version` counter, and the badge tooltip renders "Repo seq: #N" so -operators can correlate Studio reloads with what other replicas observe. -Legacy chokidar-driven events still work — they simply leave `seq` -undefined and consumers fall back to the local counter. diff --git a/.changeset/publish-account-console.md b/.changeset/publish-account-console.md deleted file mode 100644 index e8f5683454..0000000000 --- a/.changeset/publish-account-console.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -"@objectstack/account": major -"@objectstack/console": major -"@objectstack/studio": major ---- - -Publish `@objectstack/account` and `@objectstack/console` to npm (major release). - -Previously both apps were marked `private: true`, which prevented `changeset publish` -from releasing them. The CLI (`@objectstack/cli`) resolves these packages from -`node_modules/@objectstack/{account,console,studio}` to serve their built `dist` -assets, so third-party projects could not consume them via `pnpm add`. - -- Removed `private: true` from `apps/account` and `apps/console`. -- Added `publishConfig.access: public` to `account`, `console`, and `studio` for - scoped-package publish safety. diff --git a/.changeset/spec-section-translations.md b/.changeset/spec-section-translations.md deleted file mode 100644 index fe19ad38cc..0000000000 --- a/.changeset/spec-section-translations.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@objectstack/spec': minor ---- - -Add `_sections` to `ObjectTranslationData` so per-section labels on detail -pages can be authored alongside `_views` and `_actions`. Convention: -`objects.._sections..label`. Consumed by -`@object-ui/plugin-detail` when sections declare a stable `name`. diff --git a/.changeset/studio-live-preview-fixes.md b/.changeset/studio-live-preview-fixes.md deleted file mode 100644 index f2ea1b8cea..0000000000 --- a/.changeset/studio-live-preview-fixes.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -'@objectstack/studio': patch ---- - -Fix multiple live-preview rendering bugs surfaced by end-to-end browser -verification: - -- **Grid empty render** – `@object-ui/plugin-grid` serialises `sort:[{field,order}]` - into a space-delimited `$orderby` string which `@object-ui/data-objectstack` - then iterates with `Object.entries()` (character indices), producing - `sort=0,1,2,…` and zero records. The Studio data-source adapter now - intercepts and repairs malformed `$orderby` before it reaches the server. -- **`listViews` sub-tabs** – `MetadataPreview` now discovers and renders tab - entries from a view's `listViews.*` map in addition to top-level keys - (`grid`, `kanban`, `calendar`, `form`, …), labels resolved from - `spec.label` with sensible defaults. -- **Kanban schema transform** – CRM-style specs nest grouping under - `kanban.{groupByField, columns}` and carry a `data:{provider,object}` - block. `MetadataPreview` now promotes `groupByField → groupBy`, exposes - card fields, and strips the `data:` field that would otherwise cause - `@object-ui/plugin-kanban` to treat it as pre-fetched records and skip - its data fetch entirely. -- **Calendar schema transform** – Analogous: promote - `calendar.{startDateField, endDateField, titleField, colorField}` to - the schema root and drop the `data:` provider block so the calendar - fetches real records. diff --git a/.changeset/studio-timeline-dashboard.md b/.changeset/studio-timeline-dashboard.md deleted file mode 100644 index bfe698df08..0000000000 --- a/.changeset/studio-timeline-dashboard.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@objectstack/studio': patch ---- - -Studio: timeline + dashboard preview renderers - -Previously `view + timeline` and `dashboard` metadata fell through to the -"Unsupported" JSON inspector. They now render against the same live -DataSource as the rest of Studio: - -- **TimelinePreview** — vertical chronological list grouped by date, - honouring `timeline.{startDateField, endDateField, titleField, - groupByField, colorField}`. Status-coloured dots, start→end ranges. -- **DashboardPreview** — CSS-grid layout (12-col by default, driven by - `layout.{x,y,w,h}`) that renders each widget by type: `metric` / - `gauge` / `area` as a big aggregate value; `donut` / `pie` / `bar` / - `column` as horizontal bar charts of grouped buckets; `table` as a - small data table fed by `dataSource.find`. - -Both renderers are intentionally minimal — designed for "preview the -spec with real data," not pixel-perfect production rendering. diff --git a/apps/account/CHANGELOG.md b/apps/account/CHANGELOG.md index cf610c64f2..33bd77e9f4 100644 --- a/apps/account/CHANGELOG.md +++ b/apps/account/CHANGELOG.md @@ -1,5 +1,27 @@ # @objectstack/account +## 5.0.0 + +### Major Changes + +- bb32755: Publish `@objectstack/account` and `@objectstack/console` to npm (major release). + + Previously both apps were marked `private: true`, which prevented `changeset publish` + from releasing them. The CLI (`@objectstack/cli`) resolves these packages from + `node_modules/@objectstack/{account,console,studio}` to serve their built `dist` + assets, so third-party projects could not consume them via `pnpm add`. + + - Removed `private: true` from `apps/account` and `apps/console`. + - Added `publishConfig.access: public` to `account`, `console`, and `studio` for + scoped-package publish safety. + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/client@5.0.0 + - @objectstack/client-react@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/apps/account/package.json b/apps/account/package.json index 6ef224b8a7..0d212ac616 100644 --- a/apps/account/package.json +++ b/apps/account/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/account", - "version": "4.2.0", + "version": "5.0.0", "description": "ObjectStack Account - End-user account & organization self-service portal", "license": "Apache-2.0", "type": "module", diff --git a/apps/console/CHANGELOG.md b/apps/console/CHANGELOG.md index c2afd1b2d3..2a55261ee7 100644 --- a/apps/console/CHANGELOG.md +++ b/apps/console/CHANGELOG.md @@ -1,5 +1,20 @@ # @objectstack/console +## 5.0.0 + +### Major Changes + +- bb32755: Publish `@objectstack/account` and `@objectstack/console` to npm (major release). + + Previously both apps were marked `private: true`, which prevented `changeset publish` + from releasing them. The CLI (`@objectstack/cli`) resolves these packages from + `node_modules/@objectstack/{account,console,studio}` to serve their built `dist` + assets, so third-party projects could not consume them via `pnpm add`. + + - Removed `private: true` from `apps/account` and `apps/console`. + - Added `publishConfig.access: public` to `account`, `console`, and `studio` for + scoped-package publish safety. + ## 4.2.0 ### Minor Changes diff --git a/apps/console/package.json b/apps/console/package.json index 34241749e9..34c1147cd2 100644 --- a/apps/console/package.json +++ b/apps/console/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/console", - "version": "4.2.0", + "version": "5.0.0", "description": "ObjectStack Console - opinionated, fork-ready runtime console built on @object-ui/app-shell with the full plugin set wired up.", "license": "Apache-2.0", "type": "module", diff --git a/apps/docs/CHANGELOG.md b/apps/docs/CHANGELOG.md index b3f0c6229b..cc884ea343 100644 --- a/apps/docs/CHANGELOG.md +++ b/apps/docs/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/docs +## 4.2.1 + +### Patch Changes + +- 04a29c7: docs: add `concepts/metadata-lifecycle.mdx` documenting the Repository → + Change Log → Cache → Registry data path (ADR-0008), the overlay whitelist + invariant (ADR-0005), and end-to-end HMR semantics. Cross-linked from + `concepts/metadata-driven` and `guides/contracts/metadata-service`. Closes + M0 PR-11. + ## 4.2.0 ## 4.1.1 diff --git a/apps/docs/package.json b/apps/docs/package.json index c16d371869..febda932b2 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/docs", - "version": "4.2.0", + "version": "4.2.1", "private": true, "description": "ObjectStack Protocol Documentation Site", "license": "Apache-2.0", diff --git a/apps/studio/CHANGELOG.md b/apps/studio/CHANGELOG.md index 72104a33a5..bb6d2adff7 100644 --- a/apps/studio/CHANGELOG.md +++ b/apps/studio/CHANGELOG.md @@ -1,5 +1,104 @@ # @objectstack/studio +## 5.0.0 + +### Major Changes + +- bb32755: Publish `@objectstack/account` and `@objectstack/console` to npm (major release). + + Previously both apps were marked `private: true`, which prevented `changeset publish` + from releasing them. The CLI (`@objectstack/cli`) resolves these packages from + `node_modules/@objectstack/{account,console,studio}` to serve their built `dist` + assets, so third-party projects could not consume them via `pnpm add`. + + - Removed `private: true` from `apps/account` and `apps/console`. + - Added `publishConfig.access: public` to `account`, `console`, and `studio` for + scoped-package publish safety. + +### Minor Changes + +- ddf8080: ADR-0008 M0 PR-9: thread the canonical server-side change-log `seq` from + `MetadataRepository` events through to the Studio HMR badge. The + `useMetadataHmr()` hook now exposes `lastSeq` alongside the local + `version` counter, and the badge tooltip renders "Repo seq: #N" so + operators can correlate Studio reloads with what other replicas observe. + Legacy chokidar-driven events still work — they simply leave `seq` + undefined and consumers fall back to the local counter. + +### Patch Changes + +- e15885f: Fix multiple live-preview rendering bugs surfaced by end-to-end browser + verification: + + - **Grid empty render** – `@object-ui/plugin-grid` serialises `sort:[{field,order}]` + into a space-delimited `$orderby` string which `@object-ui/data-objectstack` + then iterates with `Object.entries()` (character indices), producing + `sort=0,1,2,…` and zero records. The Studio data-source adapter now + intercepts and repairs malformed `$orderby` before it reaches the server. + - **`listViews` sub-tabs** – `MetadataPreview` now discovers and renders tab + entries from a view's `listViews.*` map in addition to top-level keys + (`grid`, `kanban`, `calendar`, `form`, …), labels resolved from + `spec.label` with sensible defaults. + - **Kanban schema transform** – CRM-style specs nest grouping under + `kanban.{groupByField, columns}` and carry a `data:{provider,object}` + block. `MetadataPreview` now promotes `groupByField → groupBy`, exposes + card fields, and strips the `data:` field that would otherwise cause + `@object-ui/plugin-kanban` to treat it as pre-fetched records and skip + its data fetch entirely. + - **Calendar schema transform** – Analogous: promote + `calendar.{startDateField, endDateField, titleField, colorField}` to + the schema root and drop the `data:` provider block so the calendar + fetches real records. + +- ba9f04a: Studio: timeline + dashboard preview renderers + + Previously `view + timeline` and `dashboard` metadata fell through to the + "Unsupported" JSON inspector. They now render against the same live + DataSource as the rest of Studio: + + - **TimelinePreview** — vertical chronological list grouped by date, + honouring `timeline.{startDateField, endDateField, titleField, +groupByField, colorField}`. Status-coloured dots, start→end ranges. + - **DashboardPreview** — CSS-grid layout (12-col by default, driven by + `layout.{x,y,w,h}`) that renders each widget by type: `metric` / + `gauge` / `area` as a big aggregate value; `donut` / `pie` / `bar` / + `column` as horizontal bar charts of grouped buckets; `table` as a + small data table fed by `dataSource.find`. + + Both renderers are intentionally minimal — designed for "preview the + spec with real data," not pixel-perfect production rendering. + +- Updated dependencies [5e9dcb4] +- Updated dependencies [8b298c7] +- Updated dependencies [f139a24] +- Updated dependencies [4eb9f8c] +- Updated dependencies [2f7e42a] +- Updated dependencies [602cce7] +- Updated dependencies [1e625b8] +- Updated dependencies [6ee42b8] +- Updated dependencies [888a5c1] +- Updated dependencies [5cfdc85] +- Updated dependencies [09f005a] +- Updated dependencies [7825394] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] +- Updated dependencies [9e51868] +- Updated dependencies [ddf8080] +- Updated dependencies [2f9073a] + - @objectstack/metadata@5.0.0 + - @objectstack/objectql@5.0.0 + - @objectstack/runtime@5.0.0 + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/client@5.0.0 + - @objectstack/plugin-msw@5.0.0 + - @objectstack/service-ai@5.0.0 + - @objectstack/client-react@5.0.0 + - @objectstack/driver-memory@5.0.0 + - @objectstack/service-analytics@5.0.0 + - @objectstack/service-automation@5.0.0 + - @objectstack/service-feed@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/apps/studio/package.json b/apps/studio/package.json index bdc98f9829..0ffb96b5ed 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/studio", - "version": "4.2.0", + "version": "5.0.0", "description": "ObjectStack Studio - A metadata-driven admin interface for managing data and configuration", "license": "Apache-2.0", "type": "module", diff --git a/examples/app-crm/CHANGELOG.md b/examples/app-crm/CHANGELOG.md index 2f208d9676..21e4a596d1 100644 --- a/examples/app-crm/CHANGELOG.md +++ b/examples/app-crm/CHANGELOG.md @@ -1,5 +1,19 @@ # @objectstack/example-crm +## 4.0.9 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] +- Updated dependencies [2f9073a] + - @objectstack/runtime@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/driver-mongodb@5.0.0 + - @objectstack/service-analytics@5.0.0 + - @objectstack/service-automation@5.0.0 + ## 4.0.8 ### Patch Changes diff --git a/examples/app-crm/package.json b/examples/app-crm/package.json index 8b176aab0f..27491d3dbc 100644 --- a/examples/app-crm/package.json +++ b/examples/app-crm/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/example-crm", - "version": "4.0.8", + "version": "4.0.9", "description": "Example CRM implementation using ObjectStack Protocol", "license": "Apache-2.0", "private": true, diff --git a/examples/app-todo/CHANGELOG.md b/examples/app-todo/CHANGELOG.md index 7f014ad923..d9290ef2e7 100644 --- a/examples/app-todo/CHANGELOG.md +++ b/examples/app-todo/CHANGELOG.md @@ -1,5 +1,29 @@ # @objectstack/example-todo +## 4.0.9 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [f139a24] +- Updated dependencies [4eb9f8c] +- Updated dependencies [2f7e42a] +- Updated dependencies [602cce7] +- Updated dependencies [1e625b8] +- Updated dependencies [6ee42b8] +- Updated dependencies [888a5c1] +- Updated dependencies [5cfdc85] +- Updated dependencies [09f005a] +- Updated dependencies [7825394] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] +- Updated dependencies [2f9073a] + - @objectstack/objectql@5.0.0 + - @objectstack/runtime@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/client@5.0.0 + - @objectstack/driver-memory@5.0.0 + ## 4.0.8 ### Patch Changes diff --git a/examples/app-todo/package.json b/examples/app-todo/package.json index a795d7b568..267158b7a9 100644 --- a/examples/app-todo/package.json +++ b/examples/app-todo/package.json @@ -1,6 +1,6 @@ { "name": "@example/app-todo", - "version": "4.0.8", + "version": "4.0.9", "description": "Example Todo App using ObjectStack Protocol", "license": "Apache-2.0", "private": true, diff --git a/packages/adapters/express/CHANGELOG.md b/packages/adapters/express/CHANGELOG.md index dff46eb38c..206cbff813 100644 --- a/packages/adapters/express/CHANGELOG.md +++ b/packages/adapters/express/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/express +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] + - @objectstack/runtime@5.0.0 + ## 4.2.0 ## 4.1.1 diff --git a/packages/adapters/express/package.json b/packages/adapters/express/package.json index 94c7a684f1..84dee1e5e0 100644 --- a/packages/adapters/express/package.json +++ b/packages/adapters/express/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/express", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/fastify/CHANGELOG.md b/packages/adapters/fastify/CHANGELOG.md index 1d45ddb225..885a6fae16 100644 --- a/packages/adapters/fastify/CHANGELOG.md +++ b/packages/adapters/fastify/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/fastify +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] + - @objectstack/runtime@5.0.0 + ## 4.2.0 ## 4.1.1 diff --git a/packages/adapters/fastify/package.json b/packages/adapters/fastify/package.json index 908b4f6ac8..8da8f9585f 100644 --- a/packages/adapters/fastify/package.json +++ b/packages/adapters/fastify/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/fastify", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/hono/CHANGELOG.md b/packages/adapters/hono/CHANGELOG.md index bf4c40e6d6..fb66286145 100644 --- a/packages/adapters/hono/CHANGELOG.md +++ b/packages/adapters/hono/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/hono +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] + - @objectstack/runtime@5.0.0 + - @objectstack/plugin-hono-server@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/adapters/hono/package.json b/packages/adapters/hono/package.json index 1b26defd35..e1fde9230e 100644 --- a/packages/adapters/hono/package.json +++ b/packages/adapters/hono/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/hono", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nestjs/CHANGELOG.md b/packages/adapters/nestjs/CHANGELOG.md index 0789364a2d..2fbbf96ea6 100644 --- a/packages/adapters/nestjs/CHANGELOG.md +++ b/packages/adapters/nestjs/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/nestjs +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] + - @objectstack/runtime@5.0.0 + ## 4.2.0 ## 4.1.1 diff --git a/packages/adapters/nestjs/package.json b/packages/adapters/nestjs/package.json index 5d30bafb56..965444b7eb 100644 --- a/packages/adapters/nestjs/package.json +++ b/packages/adapters/nestjs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nestjs", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nextjs/CHANGELOG.md b/packages/adapters/nextjs/CHANGELOG.md index 57584fd4cf..fe47504758 100644 --- a/packages/adapters/nextjs/CHANGELOG.md +++ b/packages/adapters/nextjs/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/nextjs +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] + - @objectstack/runtime@5.0.0 + ## 4.2.0 ## 4.1.1 diff --git a/packages/adapters/nextjs/package.json b/packages/adapters/nextjs/package.json index 967c62b21a..092973c029 100644 --- a/packages/adapters/nextjs/package.json +++ b/packages/adapters/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nextjs", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/nuxt/CHANGELOG.md b/packages/adapters/nuxt/CHANGELOG.md index 4ae3f9ef33..74ceca970e 100644 --- a/packages/adapters/nuxt/CHANGELOG.md +++ b/packages/adapters/nuxt/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/nuxt +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] + - @objectstack/runtime@5.0.0 + ## 4.2.0 ## 4.1.1 diff --git a/packages/adapters/nuxt/package.json b/packages/adapters/nuxt/package.json index d415100600..bc57a67d9d 100644 --- a/packages/adapters/nuxt/package.json +++ b/packages/adapters/nuxt/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/nuxt", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/adapters/sveltekit/CHANGELOG.md b/packages/adapters/sveltekit/CHANGELOG.md index 2b21c88d36..741bd14dab 100644 --- a/packages/adapters/sveltekit/CHANGELOG.md +++ b/packages/adapters/sveltekit/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/sveltekit +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] + - @objectstack/runtime@5.0.0 + ## 4.2.0 ## 4.1.1 diff --git a/packages/adapters/sveltekit/package.json b/packages/adapters/sveltekit/package.json index f165f91b89..5b295f7df3 100644 --- a/packages/adapters/sveltekit/package.json +++ b/packages/adapters/sveltekit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/sveltekit", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 30ea5298d8..87f53357a9 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,71 @@ # @objectstack/cli +## 5.0.0 + +### Patch Changes + +- 9e51868: Server-side artifact-file watcher; CLI no longer posts to the HMR + endpoint on recompile (ADR-0008 M0 PR-8). + + `MetadataPlugin.start()` now attaches a chokidar watcher on the + `artifactSource.path` when running in local-file mode with `watch !== +false`. On every artifact change it re-invokes `_loadFromLocalFile` + and broadcasts a `reload` event through the HMR hub. This replaces + the previous arrangement where `os dev`'s watch-recompile loop POSTed + `/api/v1/dev/metadata-events` to trigger a reload — the server is now + autonomous. + + The CLI `dev` command's recompile loop drops the POST call; the + `/api/v1/dev/metadata-events` route remains available for external + trigger sources (cloud webhooks, git hooks, ad-hoc curl). + + `MetadataPlugin.stop()` closes the artifact watcher cleanly. + +- Updated dependencies [5e9dcb4] +- Updated dependencies [f139a24] +- Updated dependencies [4eb9f8c] +- Updated dependencies [2f7e42a] +- Updated dependencies [602cce7] +- Updated dependencies [1e625b8] +- Updated dependencies [6ee42b8] +- Updated dependencies [888a5c1] +- Updated dependencies [5cfdc85] +- Updated dependencies [09f005a] +- Updated dependencies [7825394] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] +- Updated dependencies [2f9073a] + - @objectstack/objectql@5.0.0 + - @objectstack/runtime@5.0.0 + - @objectstack/rest@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/client@5.0.0 + - @objectstack/plugin-sharing@5.0.0 + - @objectstack/plugin-approvals@5.0.0 + - @objectstack/plugin-audit@5.0.0 + - @objectstack/plugin-auth@5.0.0 + - @objectstack/plugin-email@5.0.0 + - @objectstack/plugin-reports@5.0.0 + - @objectstack/plugin-security@5.0.0 + - @objectstack/service-ai@5.0.0 + - @objectstack/service-job@5.0.0 + - @objectstack/service-queue@5.0.0 + - @objectstack/service-realtime@5.0.0 + - @objectstack/service-settings@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/driver-memory@5.0.0 + - @objectstack/driver-mongodb@5.0.0 + - @objectstack/driver-sql@5.0.0 + - @objectstack/driver-turso@5.0.0 + - @objectstack/plugin-hono-server@5.0.0 + - @objectstack/plugin-mcp-server@5.0.0 + - @objectstack/service-analytics@5.0.0 + - @objectstack/service-automation@5.0.0 + - @objectstack/service-cache@5.0.0 + - @objectstack/service-feed@5.0.0 + - @objectstack/service-package@5.0.0 + - @objectstack/service-storage@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index b961f61095..ecb9ca5c7d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/cli", - "version": "4.2.0", + "version": "5.0.0", "description": "Command Line Interface for ObjectStack Protocol", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/client-react/CHANGELOG.md b/packages/client-react/CHANGELOG.md index 8488e191e4..fda5b9dd4a 100644 --- a/packages/client-react/CHANGELOG.md +++ b/packages/client-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/client-react +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/client@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/client-react/package.json b/packages/client-react/package.json index c6f472dc60..f15a6d0ebc 100644 --- a/packages/client-react/package.json +++ b/packages/client-react/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client-react", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "React hooks for ObjectStack Client SDK", "main": "dist/index.js", diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 5b35c5cedf..b885b2174e 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/client +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Minor Changes diff --git a/packages/client/package.json b/packages/client/package.json index 0fdadaf4fa..16fbf8b59f 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/client", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Official Client SDK for ObjectStack Protocol", "main": "dist/index.js", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 63d6d0894e..4b64e3fcd7 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/core +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 97d4636757..6aa82c47da 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/core", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Microkernel Core for ObjectStack", "type": "module", diff --git a/packages/create-objectstack/CHANGELOG.md b/packages/create-objectstack/CHANGELOG.md index ee9eda8927..a94b00e465 100644 --- a/packages/create-objectstack/CHANGELOG.md +++ b/packages/create-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # create-objectstack +## 5.0.0 + ## 4.2.0 ## 4.1.1 diff --git a/packages/create-objectstack/package.json b/packages/create-objectstack/package.json index 10d6c30f17..b5bf1856ee 100644 --- a/packages/create-objectstack/package.json +++ b/packages/create-objectstack/package.json @@ -1,6 +1,6 @@ { "name": "create-objectstack", - "version": "4.2.0", + "version": "5.0.0", "description": "Create a new ObjectStack project — npx create-objectstack", "bin": { "create-objectstack": "./bin/create-objectstack.js" diff --git a/packages/formula/CHANGELOG.md b/packages/formula/CHANGELOG.md index 24fe3b36b2..22d6913336 100644 --- a/packages/formula/CHANGELOG.md +++ b/packages/formula/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/formula +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/formula/package.json b/packages/formula/package.json index 5ca14ed973..9a0b07ec3c 100644 --- a/packages/formula/package.json +++ b/packages/formula/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/formula", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "ObjectStack canonical expression engine — CEL (cel-js) + ObjectStack stdlib + dialect registry", "main": "dist/index.js", diff --git a/packages/metadata-core/CHANGELOG.md b/packages/metadata-core/CHANGELOG.md new file mode 100644 index 0000000000..82c39bde78 --- /dev/null +++ b/packages/metadata-core/CHANGELOG.md @@ -0,0 +1,138 @@ +# @objectstack/metadata-core + +## 5.0.0 + +### Minor Changes + +- 5e9dcb4: **BREAKING — metadata: remove `project` and `branch` from `MetaRef`** + + The metadata layer no longer models project or branch. Customisation is now + scoped purely to **organisation**. Project remains exclusively as an artifact + packaging concept (the `objectstack.json` bundle envelope); branching is left + to Git. + + What changed: + + - `MetaRef` is now `{ org, type, name, version? }` (was + `{ org, project, branch, type, name, version? }`). `refKey()` is the two + segment string `${org}/${type}/${name}` (was five segments). + - `MetadataItem.seq` is monotonic **per org** (was per branch). + - `BranchRef`, `MergeStrategy`, `MergeResult` types and the optional + `fork`/`merge` methods on `MetadataRepository` are removed. + - `ListFilter` / `WatchFilter` / `HistoryOptions` no longer accept `project` + or `branch`. + - `FileSystemRepository` disk layout simplified to + `//.json` (was `////.json`); + change-log path is now `.objectstack/.log/main.jsonl` regardless of any + branch concept. Constructor no longer accepts `project` / `branch`. + - `SysMetadataRepository`: removed `projectLabel` / `branchLabel` options; + the `sys_metadata` schema's `project_id` / `branch` columns (if present) + are ignored. A future major release will `DROP` them. + - `MetadataManager.setRepository(repo, opts)` no longer takes an opts object + with `branch`. + + Migration: + + ```diff + -const ref = { org: 'acme', project: 'crm', branch: 'main', type: 'view', name: 'home' }; + +const ref = { org: 'acme', type: 'view', name: 'home' }; + + -new FileSystemRepository({ root, org: 'acme', project: 'crm', branch: 'main' }); + +new FileSystemRepository({ root, org: 'acme' }); + ``` + + Existing `sys_metadata` rows continue to load; the deprecated columns are + ignored at read time. + +- 4150fe4: Add `MetadataCache` — bounded, event-invalidated LRU sitting in front of + any `MetadataRepository`. Features: + + - Bounded by `maxEntries` and `maxBytes` (default 1024 / 8 MiB). + - LRU eviction with touch-on-read. + - Lazy fill on read miss; negative caching for known-absent items. + - Subscribes to `repo.watch(filter)` and invalidates affected entries + (including rename: both old and new keys). + - Coalesces concurrent reads for the same key onto a single backend + fetch (thundering-herd safe). + - Generation counter discards in-flight fetches that race an + invalidation, preventing stale-cache poisoning. + - Diagnostics via `getStats()` (entries, bytes, hits, misses, + invalidations, coalesced). + + Includes a property-based test that verifies cache→repo convergence + under randomly-generated update sequences. + + See ADR-0008 §10 PR-3. + +- 8337cdb: Add `InMemoryRepository` (reference implementation) and a parameterised + Repository contract test suite. The contract suite, exposed at + `@objectstack/metadata-core/testing`, verifies the seven invariants every + backend must satisfy (atomic put, monotonic seq per branch, optimistic + locking, canonical hashing, event ordering, watch resumability, + tombstones). + + Includes implementation-specific tests covering the injected clock, + canonical-hash insertion-order independence, and deep-copy isolation + between caller and store. + + See ADR-0008 §10 PR-2. + +- 58835a6: Add `LayeredRepository` — composes N `MetadataRepository`s into a + read-through stack. Reads walk top-to-bottom; writes route to the + topmost writable layer; `list()` deduplicates by `refKey` preferring + the top; `history()` and `watch()` merge events from all layers, + tagging each event's `source` with `:`. The + multiplexed `watch()` correctly cancels all child iterators when the + consumer calls `return()`. + + Enables the canonical "system built-ins under user overlay" pattern + described in ADR-0008. + + See ADR-0008 §10 PR-5. + +- 8cc30b4: New package: Repository contracts for the metadata lifecycle (ADR-0008). + + Definitions only — no I/O. Exports Zod schemas, the + `MetadataRepository` interface, canonical-form helpers + (`canonicalize`, `hashSpec`), and typed errors (`ConflictError`, + `NotFoundError`, `SchemaValidationError`). + + This is M0 PR-1 of the four-layer metadata refactor. Subsequent PRs + add `InMemoryRepository`, `MetadataCache`, `FileSystemRepository` + and migrate the existing `MetadataManager` / HMR plumbing onto the + new contracts. + +### Patch Changes + +- 32ce912: Add `@objectstack/metadata-fs` — Node-only `FileSystemRepository` + implementation of the M0 Repository contract. + + Layout: + + ``` + / + /.json # canonical body (atomic rename writes) + .objectstack/.log/.jsonl # append-only change log + ``` + + Features: + + - All 17 contract tests pass (`singleBranch: true`). + - Per-key serialization via `KeyedMutex`. + - Atomic writes via tmpfile + rename. + - Heads and `seq` recovered from the JSONL log on `start()` — survives + process restart. + - chokidar watcher translates external edits (e.g. VSCode saves) into + `MetadataEvent`s with `source: 'fs'`. + - Self-write suppression: 200ms window prevents the watcher from + re-emitting events for files we wrote ourselves. + - Manual `AsyncIterator` for `watch()` to mirror the in-memory pattern. + + Also (`metadata-core`): + + - Add `singleBranch` option to `runRepositoryContractTests` so + single-branch backends (like the FS one) skip the cross-branch test. + - Switch tsup `splitting: true` so `index.js` and `testing.js` share a + single `ConflictError` class identity (was double-bundled before). + + See ADR-0008 §10 PR-4. diff --git a/packages/metadata-core/package.json b/packages/metadata-core/package.json index b9d530aeda..4ff0f74351 100644 --- a/packages/metadata-core/package.json +++ b/packages/metadata-core/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-core", - "version": "0.1.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Metadata Repository contracts: types, canonicalization, errors, interface (ADR-0008).", "type": "module", diff --git a/packages/metadata-fs/CHANGELOG.md b/packages/metadata-fs/CHANGELOG.md new file mode 100644 index 0000000000..50afd040ce --- /dev/null +++ b/packages/metadata-fs/CHANGELOG.md @@ -0,0 +1,123 @@ +# @objectstack/metadata-fs + +## 5.0.0 + +### Minor Changes + +- 5e9dcb4: **BREAKING — metadata: remove `project` and `branch` from `MetaRef`** + + The metadata layer no longer models project or branch. Customisation is now + scoped purely to **organisation**. Project remains exclusively as an artifact + packaging concept (the `objectstack.json` bundle envelope); branching is left + to Git. + + What changed: + + - `MetaRef` is now `{ org, type, name, version? }` (was + `{ org, project, branch, type, name, version? }`). `refKey()` is the two + segment string `${org}/${type}/${name}` (was five segments). + - `MetadataItem.seq` is monotonic **per org** (was per branch). + - `BranchRef`, `MergeStrategy`, `MergeResult` types and the optional + `fork`/`merge` methods on `MetadataRepository` are removed. + - `ListFilter` / `WatchFilter` / `HistoryOptions` no longer accept `project` + or `branch`. + - `FileSystemRepository` disk layout simplified to + `//.json` (was `////.json`); + change-log path is now `.objectstack/.log/main.jsonl` regardless of any + branch concept. Constructor no longer accepts `project` / `branch`. + - `SysMetadataRepository`: removed `projectLabel` / `branchLabel` options; + the `sys_metadata` schema's `project_id` / `branch` columns (if present) + are ignored. A future major release will `DROP` them. + - `MetadataManager.setRepository(repo, opts)` no longer takes an opts object + with `branch`. + + Migration: + + ```diff + -const ref = { org: 'acme', project: 'crm', branch: 'main', type: 'view', name: 'home' }; + +const ref = { org: 'acme', type: 'view', name: 'home' }; + + -new FileSystemRepository({ root, org: 'acme', project: 'crm', branch: 'main' }); + +new FileSystemRepository({ root, org: 'acme' }); + ``` + + Existing `sys_metadata` rows continue to load; the deprecated columns are + ignored at read time. + +- 32ce912: Add `@objectstack/metadata-fs` — Node-only `FileSystemRepository` + implementation of the M0 Repository contract. + + Layout: + + ``` + / + /.json # canonical body (atomic rename writes) + .objectstack/.log/.jsonl # append-only change log + ``` + + Features: + + - All 17 contract tests pass (`singleBranch: true`). + - Per-key serialization via `KeyedMutex`. + - Atomic writes via tmpfile + rename. + - Heads and `seq` recovered from the JSONL log on `start()` — survives + process restart. + - chokidar watcher translates external edits (e.g. VSCode saves) into + `MetadataEvent`s with `source: 'fs'`. + - Self-write suppression: 200ms window prevents the watcher from + re-emitting events for files we wrote ourselves. + - Manual `AsyncIterator` for `watch()` to mirror the in-memory pattern. + + Also (`metadata-core`): + + - Add `singleBranch` option to `runRepositoryContractTests` so + single-branch backends (like the FS one) skip the cross-branch test. + - Switch tsup `splitting: true` so `index.js` and `testing.js` share a + single `ConflictError` class identity (was double-bundled before). + + See ADR-0008 §10 PR-4. + +### Patch Changes + +- 96ad4df: Fix dev-mode HMR data-reload for `*.view.ts` / `*.flow.ts` source-file edits. + + Three coordinated fixes close the long-standing gap where editing a + declarative-metadata source file in dev (e.g. `case.view.ts`) would + recompile `dist/objectstack.json` but the running server kept serving + the stale boot-time value: + + 1. **`@objectstack/objectql`** — `ObjectStackProtocolImplementation.getMetaItem` + now consults `MetadataService` (HMR-aware) **before** the in-memory + `SchemaRegistry` (boot-time cache). Previously the registry shadowed + freshly-registered values: `manager.register('view','case',newDef)` + updated MetadataManager but `getMetaItem` returned the stale registry + copy because step 2 (registry) ran before step 3 (service). Reordered + to "1. sys_metadata overlay → 2. MetadataService → 3. SchemaRegistry". + + 2. **`@objectstack/runtime`** — `createStandaloneStack` now enables the + `MetadataPlugin` artifact-file watcher in non-production environments + (`NODE_ENV !== 'production'`). Previously hard-coded to `watch: false`, + leaving nothing watching `dist/objectstack.json` when the CLI dev mode + recompiled it. + + 3. **`@objectstack/metadata`** & **`@objectstack/metadata-fs`** — Both + chokidar watchers now use `usePolling: true` to avoid `fs.watch` + EMFILE on macOS / busy dev hosts where the native file-descriptor + pool can be exhausted by other long-running node processes. + + With these three changes: + + - CLI edits source → recompile artifact (~400ms) + - Server's polling chokidar detects artifact change → `_loadFromLocalFile` + - `_loadFromLocalFile` calls `manager.register(type, name, item)` + - MetadataService now has the fresh value + - Read path returns the fresh value via the new step-2 lookup + - Studio SSE listeners re-render + +- Updated dependencies [5e9dcb4] +- Updated dependencies [4150fe4] +- Updated dependencies [8337cdb] +- Updated dependencies [58835a6] +- Updated dependencies [8cc30b4] +- Updated dependencies [32ce912] + - @objectstack/metadata-core@5.0.0 diff --git a/packages/metadata-fs/package.json b/packages/metadata-fs/package.json index 9e30e33808..4a8db1a68e 100644 --- a/packages/metadata-fs/package.json +++ b/packages/metadata-fs/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata-fs", - "version": "0.1.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "FileSystemRepository: Node-only Repository implementation backed by JSON files and a JSONL change log (ADR-0008).", "type": "module", diff --git a/packages/metadata/CHANGELOG.md b/packages/metadata/CHANGELOG.md index 9e5ab4f236..4e13e2cef4 100644 --- a/packages/metadata/CHANGELOG.md +++ b/packages/metadata/CHANGELOG.md @@ -1,5 +1,175 @@ # @objectstack/metadata +## 5.0.0 + +### Minor Changes + +- 5e9dcb4: **BREAKING — metadata: remove `project` and `branch` from `MetaRef`** + + The metadata layer no longer models project or branch. Customisation is now + scoped purely to **organisation**. Project remains exclusively as an artifact + packaging concept (the `objectstack.json` bundle envelope); branching is left + to Git. + + What changed: + + - `MetaRef` is now `{ org, type, name, version? }` (was + `{ org, project, branch, type, name, version? }`). `refKey()` is the two + segment string `${org}/${type}/${name}` (was five segments). + - `MetadataItem.seq` is monotonic **per org** (was per branch). + - `BranchRef`, `MergeStrategy`, `MergeResult` types and the optional + `fork`/`merge` methods on `MetadataRepository` are removed. + - `ListFilter` / `WatchFilter` / `HistoryOptions` no longer accept `project` + or `branch`. + - `FileSystemRepository` disk layout simplified to + `//.json` (was `////.json`); + change-log path is now `.objectstack/.log/main.jsonl` regardless of any + branch concept. Constructor no longer accepts `project` / `branch`. + - `SysMetadataRepository`: removed `projectLabel` / `branchLabel` options; + the `sys_metadata` schema's `project_id` / `branch` columns (if present) + are ignored. A future major release will `DROP` them. + - `MetadataManager.setRepository(repo, opts)` no longer takes an opts object + with `branch`. + + Migration: + + ```diff + -const ref = { org: 'acme', project: 'crm', branch: 'main', type: 'view', name: 'home' }; + +const ref = { org: 'acme', type: 'view', name: 'home' }; + + -new FileSystemRepository({ root, org: 'acme', project: 'crm', branch: 'main' }); + +new FileSystemRepository({ root, org: 'acme' }); + ``` + + Existing `sys_metadata` rows continue to load; the deprecated columns are + ignored at read time. + +- 8b298c7: Attach an `@objectstack/metadata-core` `MetadataRepository` as a + supplementary event source on `MetadataManager` (ADR-0008 M0 PR-6). + + When a repository is configured via `manager.setRepository(repo)`: + + - the manager subscribes to `repo.watch({ branch: 'main' })` and re-emits + each event through the legacy `MetadataWatchEvent` channel that + `manager.subscribe(type, cb)` already exposes, so existing HMR / SSE + pipelines pick up changes from the new layer automatically; + - each event also invalidates the in-memory registry entry and the + `list()` cache for the affected type, so subsequent reads fall + through to the repository / loaders instead of returning stale data; + - a new `manager.dispose()` method drains the watch loop and the FS + watcher cleanly. `MetadataPlugin.stop()` calls it. + + `MetadataPlugin.start()` now instantiates a `FileSystemRepository` + rooted at `/.objectstack/metadata/` (separate from user source + files) and attaches it automatically when not in `artifact-only` mode. + + No write-mirroring yet — `register()` / `unregister()` / `save()` keep + their existing semantics; the canonical write path migrates in PR-10. + +- 9e51868: Server-side artifact-file watcher; CLI no longer posts to the HMR + endpoint on recompile (ADR-0008 M0 PR-8). + + `MetadataPlugin.start()` now attaches a chokidar watcher on the + `artifactSource.path` when running in local-file mode with `watch !== +false`. On every artifact change it re-invokes `_loadFromLocalFile` + and broadcasts a `reload` event through the HMR hub. This replaces + the previous arrangement where `os dev`'s watch-recompile loop POSTed + `/api/v1/dev/metadata-events` to trigger a reload — the server is now + autonomous. + + The CLI `dev` command's recompile loop drops the POST call; the + `/api/v1/dev/metadata-events` route remains available for external + trigger sources (cloud webhooks, git hooks, ad-hoc curl). + + `MetadataPlugin.stop()` closes the artifact watcher cleanly. + +- ddf8080: ADR-0008 M0 PR-9: thread the canonical server-side change-log `seq` from + `MetadataRepository` events through to the Studio HMR badge. The + `useMetadataHmr()` hook now exposes `lastSeq` alongside the local + `version` counter, and the badge tooltip renders "Repo seq: #N" so + operators can correlate Studio reloads with what other replicas observe. + Legacy chokidar-driven events still work — they simply leave `seq` + undefined and consumers fall back to the local counter. + +### Patch Changes + +- 96ad4df: Fix dev-mode HMR data-reload for `*.view.ts` / `*.flow.ts` source-file edits. + + Three coordinated fixes close the long-standing gap where editing a + declarative-metadata source file in dev (e.g. `case.view.ts`) would + recompile `dist/objectstack.json` but the running server kept serving + the stale boot-time value: + + 1. **`@objectstack/objectql`** — `ObjectStackProtocolImplementation.getMetaItem` + now consults `MetadataService` (HMR-aware) **before** the in-memory + `SchemaRegistry` (boot-time cache). Previously the registry shadowed + freshly-registered values: `manager.register('view','case',newDef)` + updated MetadataManager but `getMetaItem` returned the stale registry + copy because step 2 (registry) ran before step 3 (service). Reordered + to "1. sys_metadata overlay → 2. MetadataService → 3. SchemaRegistry". + + 2. **`@objectstack/runtime`** — `createStandaloneStack` now enables the + `MetadataPlugin` artifact-file watcher in non-production environments + (`NODE_ENV !== 'production'`). Previously hard-coded to `watch: false`, + leaving nothing watching `dist/objectstack.json` when the CLI dev mode + recompiled it. + + 3. **`@objectstack/metadata`** & **`@objectstack/metadata-fs`** — Both + chokidar watchers now use `usePolling: true` to avoid `fs.watch` + EMFILE on macOS / busy dev hosts where the native file-descriptor + pool can be exhausted by other long-running node processes. + + With these three changes: + + - CLI edits source → recompile artifact (~400ms) + - Server's polling chokidar detects artifact change → `_loadFromLocalFile` + - `_loadFromLocalFile` calls `manager.register(type, name, item)` + - MetadataService now has the fresh value + - Read path returns the fresh value via the new step-2 lookup + - Studio SSE listeners re-render + +- df18ae9: Fix dev-mode HMR data-reload for view metadata. + + `MetadataPlugin._parseAndRegisterArtifact` previously required a top-level + `name` on every artifact item and silently skipped those without one. + View bundles in the compiled artifact carry no top-level `name` (their + identity is the target object, encoded under `list.data.object` / + `form.data.object` — same pattern used by `ObjectQL.SchemaRegistry`'s + `resolveMetadataItemName`). As a result, artifact-loaded views never + reached `MetadataManager`, and HMR file pushes never affected the read + path: API responses kept returning the boot-time `SchemaRegistry` copy. + + This change derives the registration key from `list.data.object` (or + `form.data.object`) when no top-level `name` is present, mirroring the + ObjectQL convention. + + Also splits the `MetadataPlugin` watch flag into two independent + options so dev mode can enable artifact-file HMR without paying the + cost of the source-file scanner: + + - `watch` — controls `NodeMetadataManager`'s recursive source scan + (default `false`; turning it on in artifact mode would polling-scan + the entire project root including `node_modules`). + - `artifactWatch` — controls the cheap single-file polling watcher on + the compiled artifact (`dist/objectstack.json`). The standalone stack + enables this automatically when `NODE_ENV !== 'production'`. + +- Updated dependencies [5e9dcb4] +- Updated dependencies [4150fe4] +- Updated dependencies [8337cdb] +- Updated dependencies [58835a6] +- Updated dependencies [8cc30b4] +- Updated dependencies [32ce912] +- Updated dependencies [888a5c1] +- Updated dependencies [96ad4df] +- Updated dependencies [2f9073a] + - @objectstack/metadata-core@5.0.0 + - @objectstack/metadata-fs@5.0.0 + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/types@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/metadata/package.json b/packages/metadata/package.json index f4ba1cffe8..b50f96f750 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/metadata", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Metadata loading, saving, and persistence for ObjectStack", "type": "module", diff --git a/packages/objectql/CHANGELOG.md b/packages/objectql/CHANGELOG.md index 81ec86d9f3..70f95f26e6 100644 --- a/packages/objectql/CHANGELOG.md +++ b/packages/objectql/CHANGELOG.md @@ -1,5 +1,233 @@ # @objectstack/objectql +## 5.0.0 + +### Minor Changes + +- 5e9dcb4: **BREAKING — metadata: remove `project` and `branch` from `MetaRef`** + + The metadata layer no longer models project or branch. Customisation is now + scoped purely to **organisation**. Project remains exclusively as an artifact + packaging concept (the `objectstack.json` bundle envelope); branching is left + to Git. + + What changed: + + - `MetaRef` is now `{ org, type, name, version? }` (was + `{ org, project, branch, type, name, version? }`). `refKey()` is the two + segment string `${org}/${type}/${name}` (was five segments). + - `MetadataItem.seq` is monotonic **per org** (was per branch). + - `BranchRef`, `MergeStrategy`, `MergeResult` types and the optional + `fork`/`merge` methods on `MetadataRepository` are removed. + - `ListFilter` / `WatchFilter` / `HistoryOptions` no longer accept `project` + or `branch`. + - `FileSystemRepository` disk layout simplified to + `//.json` (was `////.json`); + change-log path is now `.objectstack/.log/main.jsonl` regardless of any + branch concept. Constructor no longer accepts `project` / `branch`. + - `SysMetadataRepository`: removed `projectLabel` / `branchLabel` options; + the `sys_metadata` schema's `project_id` / `branch` columns (if present) + are ignored. A future major release will `DROP` them. + - `MetadataManager.setRepository(repo, opts)` no longer takes an opts object + with `branch`. + + Migration: + + ```diff + -const ref = { org: 'acme', project: 'crm', branch: 'main', type: 'view', name: 'home' }; + +const ref = { org: 'acme', type: 'view', name: 'home' }; + + -new FileSystemRepository({ root, org: 'acme', project: 'crm', branch: 'main' }); + +new FileSystemRepository({ root, org: 'acme' }); + ``` + + Existing `sys_metadata` rows continue to load; the deprecated columns are + ignored at read time. + +- f139a24: Subscribe `ObjectQLPlugin` to `metadata.subscribe('object', …)` so the + `SchemaRegistry` merge cache is invalidated and the affected object + re-registered on every object metadata change (ADR-0008 M0 PR-7). + + Combined with the PR-6 metadata ↔ repository bridge, this closes the + Studio HMR loop end-to-end: editing an object definition (file, REST + write, or Studio inline edit) emits a `MetadataEvent`, which flows + through `MetadataManager.subscribe('object', …)` into ObjectQL, which + drops the cached merged definition and re-fetches the canonical body + from the metadata service. Subsequent reads see the new schema with + no server restart. + + Additions: + + - `SchemaRegistry.invalidate(fqnOrName)` and `invalidateAll()` — + public hooks for event-driven cache eviction; contributors are + preserved so `resolveObject` recomputes against the next call. + - `ObjectQLPlugin.start()` wires the subscription when the metadata + service exposes `subscribe()`. The handler invalidates, re-fetches + via `metadata.get('object', name)`, and re-registers with the + original `packageId` / `namespace`. Deletes only invalidate. + - `ObjectQLPlugin.stop()` drains the subscription handles so test + reloads don't leak watchers. + +- 2f7e42a: ADR-0008 M0 PR-10b: introduce `SysMetadataRepository` — a + `MetadataRepository` wrapper over the existing `sys_metadata` table. + M0 keeps single-row update semantics (append-only event log is M1 + work). Whitelist enforcement, optimistic locking via content hash, + and in-process watch fan-out are all live. Not yet wired into any + production write path — PR-10c will compose it under a + LayeredRepository. +- 888a5c1: PR-10d.3 — feature flag for `SysMetadataRepository.put` write path in `saveMetaItem`. + + - `ObjectStackProtocolImplementation` now accepts an `options.useRepositoryWritePath` flag + (also honored via `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH=1`) that routes overlay writes + through `SysMetadataRepository.put`, appending to the change-log and emitting HMR `seq`. + - `saveMetaItem` request grew optional `parentVersion` (If-Match) and `actor` fields. + `ConflictError` is mapped to a 409 `metadata_conflict` API error. + - Plural metadata type aliases (`views`, `dashboards`, ...) are normalized to singular + before the repo's overlay-allowlist gate. + - `SysMetadataRepository.put`/`delete` now update/delete by row `id` (the engine's + strict `.update` semantics require an id or `multi:true`). + - `sys_metadata.checksum` column widened from 64 → 71 chars to hold the `"sha256:"` + prefix produced by `hashSpec()`. + - Default behaviour unchanged: legacy raw-engine path remains until PR-10d.4 flips the + flag and removes it. + +- 09f005a: PR-10d.5 — Flip default of `useRepositoryWritePath` to `true`. + + `saveMetaItem` now routes overlay-allowed metadata types (view, dashboard, + report, email_template) through `SysMetadataRepository.put` by default — + every write appends to the change log and emits a watch event with a + monotonic `seq` for HMR / replay. + + Non-overlay-allowed types (`object`, `flow`, `agent`, ...) still take the + legacy raw-engine path. This preserves control-plane bootstrap behaviour + (which writes `object`/`flow` definitions via `saveMetaItem` and is + permitted by the outer protocol gate to write any type when `projectId` + is undefined). + + Opt-out remains available during the deprecation window: + + - Constructor: `new ObjectStackProtocolImplementation(engine, …, { useRepositoryWritePath: false })` + - Env var: `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH=0` + + The legacy raw-engine branch for overlay-allowed types is scheduled for + removal in PR-10d.6 once this default has soaked for one release. + +### Patch Changes + +- 4eb9f8c: ADR-0008 M0 PR-10a: pin overlay-whitelist + canonical-hash invariants + before re-expressing the overlay path as a LayeredRepository. No + runtime change — adds 28 regression tests that fail loud if a future + PR weakens the shared-DB tenancy contract or breaks hash stability. +- 602cce7: test(objectql): integration coverage for `LayeredRepository` composed of + `SysMetadataRepository` (top, writable overlay) over `InMemoryRepository` + (bottom, artifact baseline). Verifies read fallthrough, overlay-wins + precedence, write routing, delete behavior, event source tagging across + layers, and merged-list semantics. Part of ADR-0008 PR-10c. +- 1e625b8: feat(objectql): hash-compat dry-run probe for the legacy → repository + write-path migration (ADR-0008 PR-10d.1). Pure-function `runDryRun()` plus + a CLI (`scripts/dry-run-hash-compat.ts`) that audits a snapshot of + `sys_metadata` for invalid JSON, non-object bodies, unstable hashes across + canonical round-trip, and duplicate overlay keys. Exits non-zero when + incompatibilities are found. 14 unit tests covering happy paths, error + classifications (`invalid_json`, `non_object_body`, `unstable_hash`, + `missing_metadata`, `duplicate_overlay_key`), and boundary conditions + (empty snapshot, deep nesting, unicode). +- 6ee42b8: fix(objectql): SysMetadataRepository reuses the existing `checksum` column + instead of writing a non-existent `_hash` column (ADR-0008 PR-10d.2). The + production `sys_metadata` schema (`packages/platform-objects`) already + ships with `checksum: text(64)` — perfect for sha256 hex — and `version: +number` for the monotonic counter. No DDL migration is required for + PR-10d.3 cutover; legacy rows with NULL checksum will be lazily + backfilled on first put(). + + Also extends the PR-10d.1 dry-run probe with two new checks + (`checksum_missing` warning, `checksum_drift` error) and three additional + tests, taking objectql to 325/325 green. + +- 5cfdc85: PR-10d.4 — REST plumbing for the metadata repository write path. + + - `PUT /api/v1/meta/:type/:name` (and the compound `:type/:section/:name` variant) + now forwards the `If-Match` header to `saveMetaItem` as `parentVersion`, and + `X-Actor` (or `req.user.id`) as `actor`. ETag-style quotes are stripped. + - A failed optimistic-lock check surfaces as HTTP 409 with body + `{ "error": "...", "code": "metadata_conflict" }` (no protocol changes — + `sendError` already honoured `error.status` + `error.code`). + - Added a real-engine integration test for the repository write path + (`protocol-save-meta-repo-path-real-engine.test.ts`) — addresses the + PR-10d.3 rubber-duck stub-drift concern by exercising + `ObjectStackProtocolImplementation.saveMetaItem` through `new ObjectQL()` + with an inline in-memory driver. Covers insert→update version bump, + parentVersion conflict, checksum length, and plural→singular normalization. + + Default behaviour unchanged: the repository write path remains opt-in via + `options.useRepositoryWritePath` / `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH=1`. + Flag flip and legacy path removal will follow in a separate post-soak PR. + +- 7825394: PR-10d.6 — remove `useRepositoryWritePath` feature flag. + + Overlay-allowed metadata types (`view`, `dashboard`, `report`, + `email_template`) now unconditionally route through + `SysMetadataRepository.put` (change-log + HMR `seq`). The legacy + raw-engine branch is retained for non-overlay types (`object`, `flow`, + `agent`, etc.) used during control-plane bootstrap, since the repository + `assertAllowed()` whitelist would reject them. + + Removed: + + - `ObjectStackProtocolImplementation` constructor option + `{ useRepositoryWritePath: boolean }`. + - `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH` environment variable. + + There is no opt-out: behavior is now equivalent to the PR-10d.5 default. + +- 96ad4df: Fix dev-mode HMR data-reload for `*.view.ts` / `*.flow.ts` source-file edits. + + Three coordinated fixes close the long-standing gap where editing a + declarative-metadata source file in dev (e.g. `case.view.ts`) would + recompile `dist/objectstack.json` but the running server kept serving + the stale boot-time value: + + 1. **`@objectstack/objectql`** — `ObjectStackProtocolImplementation.getMetaItem` + now consults `MetadataService` (HMR-aware) **before** the in-memory + `SchemaRegistry` (boot-time cache). Previously the registry shadowed + freshly-registered values: `manager.register('view','case',newDef)` + updated MetadataManager but `getMetaItem` returned the stale registry + copy because step 2 (registry) ran before step 3 (service). Reordered + to "1. sys_metadata overlay → 2. MetadataService → 3. SchemaRegistry". + + 2. **`@objectstack/runtime`** — `createStandaloneStack` now enables the + `MetadataPlugin` artifact-file watcher in non-production environments + (`NODE_ENV !== 'production'`). Previously hard-coded to `watch: false`, + leaving nothing watching `dist/objectstack.json` when the CLI dev mode + recompiled it. + + 3. **`@objectstack/metadata`** & **`@objectstack/metadata-fs`** — Both + chokidar watchers now use `usePolling: true` to avoid `fs.watch` + EMFILE on macOS / busy dev hosts where the native file-descriptor + pool can be exhausted by other long-running node processes. + + With these three changes: + + - CLI edits source → recompile artifact (~400ms) + - Server's polling chokidar detects artifact change → `_loadFromLocalFile` + - `_loadFromLocalFile` calls `manager.register(type, name, item)` + - MetadataService now has the fresh value + - Read path returns the fresh value via the new step-2 lookup + - Studio SSE listeners re-render + +- Updated dependencies [5e9dcb4] +- Updated dependencies [4150fe4] +- Updated dependencies [8337cdb] +- Updated dependencies [58835a6] +- Updated dependencies [8cc30b4] +- Updated dependencies [32ce912] +- Updated dependencies [2f9073a] + - @objectstack/metadata-core@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/formula@5.0.0 + - @objectstack/types@5.0.0 + ## 4.2.0 ### Minor Changes diff --git a/packages/objectql/package.json b/packages/objectql/package.json index f0493df62d..511efbbd84 100644 --- a/packages/objectql/package.json +++ b/packages/objectql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/objectql", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Isomorphic ObjectQL Engine for ObjectStack", "main": "dist/index.js", diff --git a/packages/observability/CHANGELOG.md b/packages/observability/CHANGELOG.md new file mode 100644 index 0000000000..8b0ddaf65b --- /dev/null +++ b/packages/observability/CHANGELOG.md @@ -0,0 +1,8 @@ +# @objectstack/observability + +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 diff --git a/packages/observability/package.json b/packages/observability/package.json index 5b4ac5606f..732165ef1e 100644 --- a/packages/observability/package.json +++ b/packages/observability/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/observability", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Observability contracts and exporters for ObjectStack — MetricsRegistry, ErrorReporter, Logger plus noop/console/OTLP-HTTP exporters. Deployment-target neutral; runtime and services depend on this so the same instrumentation works on Cloudflare Workers, Node, and self-hosted Kubernetes.", "type": "module", diff --git a/packages/platform-objects/CHANGELOG.md b/packages/platform-objects/CHANGELOG.md index 39db9339d1..eff07d7789 100644 --- a/packages/platform-objects/CHANGELOG.md +++ b/packages/platform-objects/CHANGELOG.md @@ -1,5 +1,28 @@ # @objectstack/platform-objects +## 5.0.0 + +### Patch Changes + +- 888a5c1: PR-10d.3 — feature flag for `SysMetadataRepository.put` write path in `saveMetaItem`. + + - `ObjectStackProtocolImplementation` now accepts an `options.useRepositoryWritePath` flag + (also honored via `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH=1`) that routes overlay writes + through `SysMetadataRepository.put`, appending to the change-log and emitting HMR `seq`. + - `saveMetaItem` request grew optional `parentVersion` (If-Match) and `actor` fields. + `ConflictError` is mapped to a 409 `metadata_conflict` API error. + - Plural metadata type aliases (`views`, `dashboards`, ...) are normalized to singular + before the repo's overlay-allowlist gate. + - `SysMetadataRepository.put`/`delete` now update/delete by row `id` (the engine's + strict `.update` semantics require an id or `multi:true`). + - `sys_metadata.checksum` column widened from 64 → 71 chars to hold the `"sha256:"` + prefix produced by `hashSpec()`. + - Default behaviour unchanged: legacy raw-engine path remains until PR-10d.4 flips the + flag and removes it. + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/platform-objects/package.json b/packages/platform-objects/package.json index 81235c853e..e125baf64e 100644 --- a/packages/platform-objects/package.json +++ b/packages/platform-objects/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/platform-objects", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Core platform object schemas for ObjectStack — identity, security, audit, tenant, and metadata objects", "main": "dist/index.js", diff --git a/packages/plugins/driver-memory/CHANGELOG.md b/packages/plugins/driver-memory/CHANGELOG.md index 2eb7ae4ddd..01a45a8564 100644 --- a/packages/plugins/driver-memory/CHANGELOG.md +++ b/packages/plugins/driver-memory/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/driver-memory +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/driver-memory/package.json b/packages/plugins/driver-memory/package.json index a5466cb269..ca1deb4a53 100644 --- a/packages/plugins/driver-memory/package.json +++ b/packages/plugins/driver-memory/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-memory", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "In-Memory Driver for ObjectStack (Reference Implementation)", "main": "dist/index.js", diff --git a/packages/plugins/driver-mongodb/CHANGELOG.md b/packages/plugins/driver-mongodb/CHANGELOG.md index dadcfff4b6..0dd2a99cc1 100644 --- a/packages/plugins/driver-mongodb/CHANGELOG.md +++ b/packages/plugins/driver-mongodb/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/driver-mongodb +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/driver-mongodb/package.json b/packages/plugins/driver-mongodb/package.json index 03171b9462..f94218c0f5 100644 --- a/packages/plugins/driver-mongodb/package.json +++ b/packages/plugins/driver-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-mongodb", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "MongoDB Driver for ObjectStack - Native document database driver via official mongodb client", "main": "dist/index.js", diff --git a/packages/plugins/driver-sql/CHANGELOG.md b/packages/plugins/driver-sql/CHANGELOG.md index 4da6554e93..64f56c67fa 100644 --- a/packages/plugins/driver-sql/CHANGELOG.md +++ b/packages/plugins/driver-sql/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/driver-sql +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/driver-sql/package.json b/packages/plugins/driver-sql/package.json index 94dce88706..ac938b221a 100644 --- a/packages/plugins/driver-sql/package.json +++ b/packages/plugins/driver-sql/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-sql", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "SQL Driver for ObjectStack - Supports PostgreSQL, MySQL, SQLite via Knex", "main": "dist/index.js", diff --git a/packages/plugins/driver-turso/CHANGELOG.md b/packages/plugins/driver-turso/CHANGELOG.md index 923ea13722..660209f74f 100644 --- a/packages/plugins/driver-turso/CHANGELOG.md +++ b/packages/plugins/driver-turso/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/driver-turso +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/driver-sql@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/driver-turso/package.json b/packages/plugins/driver-turso/package.json index 8aaf23f223..86ca3c874e 100644 --- a/packages/plugins/driver-turso/package.json +++ b/packages/plugins/driver-turso/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/driver-turso", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Turso/libSQL Driver for ObjectStack — Edge-first SQLite with embedded replicas and multi-tenancy", "keywords": [ diff --git a/packages/plugins/plugin-approvals/CHANGELOG.md b/packages/plugins/plugin-approvals/CHANGELOG.md index b38b3af0c8..9f031994e3 100644 --- a/packages/plugins/plugin-approvals/CHANGELOG.md +++ b/packages/plugins/plugin-approvals/CHANGELOG.md @@ -1,5 +1,16 @@ # @objectstack/plugin-approvals +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/formula@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-approvals/package.json b/packages/plugins/plugin-approvals/package.json index 0ea3469b56..1650bb899a 100644 --- a/packages/plugins/plugin-approvals/package.json +++ b/packages/plugins/plugin-approvals/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-approvals", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Multi-step approval engine for ObjectStack — sys_approval_process + sys_approval_request + sys_approval_action + IApprovalService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-audit/CHANGELOG.md b/packages/plugins/plugin-audit/CHANGELOG.md index 93a039f597..8aa352a4bf 100644 --- a/packages/plugins/plugin-audit/CHANGELOG.md +++ b/packages/plugins/plugin-audit/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/plugin-audit +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-audit/package.json b/packages/plugins/plugin-audit/package.json index e7f530654a..cf2079f8eb 100644 --- a/packages/plugins/plugin-audit/package.json +++ b/packages/plugins/plugin-audit/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-audit", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Audit Plugin for ObjectStack — System audit log object and audit trail", "main": "dist/index.js", diff --git a/packages/plugins/plugin-auth/CHANGELOG.md b/packages/plugins/plugin-auth/CHANGELOG.md index 861ec90d1a..5409fe69cc 100644 --- a/packages/plugins/plugin-auth/CHANGELOG.md +++ b/packages/plugins/plugin-auth/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-auth/package.json b/packages/plugins/plugin-auth/package.json index 1f8c49c924..3a20c4b42d 100644 --- a/packages/plugins/plugin-auth/package.json +++ b/packages/plugins/plugin-auth/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-auth", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Authentication & Identity Plugin for ObjectStack", "main": "dist/index.js", diff --git a/packages/plugins/plugin-dev/CHANGELOG.md b/packages/plugins/plugin-dev/CHANGELOG.md index 23eb1fc74b..a20bceb400 100644 --- a/packages/plugins/plugin-dev/CHANGELOG.md +++ b/packages/plugins/plugin-dev/CHANGELOG.md @@ -1,5 +1,34 @@ # @objectstack/plugin-dev +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [f139a24] +- Updated dependencies [4eb9f8c] +- Updated dependencies [2f7e42a] +- Updated dependencies [602cce7] +- Updated dependencies [1e625b8] +- Updated dependencies [6ee42b8] +- Updated dependencies [888a5c1] +- Updated dependencies [5cfdc85] +- Updated dependencies [09f005a] +- Updated dependencies [7825394] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] +- Updated dependencies [2f9073a] + - @objectstack/objectql@5.0.0 + - @objectstack/runtime@5.0.0 + - @objectstack/rest@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/plugin-auth@5.0.0 + - @objectstack/plugin-security@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/driver-memory@5.0.0 + - @objectstack/plugin-hono-server@5.0.0 + - @objectstack/service-i18n@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-dev/package.json b/packages/plugins/plugin-dev/package.json index 0ae4098657..f410ecc1ac 100644 --- a/packages/plugins/plugin-dev/package.json +++ b/packages/plugins/plugin-dev/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-dev", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Development Mode Plugin for ObjectStack — auto-enables all services with in-memory implementations", "main": "dist/index.js", diff --git a/packages/plugins/plugin-email/CHANGELOG.md b/packages/plugins/plugin-email/CHANGELOG.md index 9ef2f18b36..7acd0f5b34 100644 --- a/packages/plugins/plugin-email/CHANGELOG.md +++ b/packages/plugins/plugin-email/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/plugin-email +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-email/package.json b/packages/plugins/plugin-email/package.json index 3433a2d41d..ff7d2e2a6e 100644 --- a/packages/plugins/plugin-email/package.json +++ b/packages/plugins/plugin-email/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-email", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Email service plugin for ObjectStack — IEmailService + transport-pluggable outbound delivery with sys_email persistence.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-hono-server/CHANGELOG.md b/packages/plugins/plugin-hono-server/CHANGELOG.md index da7988e72a..3719416861 100644 --- a/packages/plugins/plugin-hono-server/CHANGELOG.md +++ b/packages/plugins/plugin-hono-server/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/plugin-hono-server +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-hono-server/package.json b/packages/plugins/plugin-hono-server/package.json index de93ee2f38..d1000302a3 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": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Standard Hono Server Adapter for ObjectStack Runtime", "main": "dist/index.js", diff --git a/packages/plugins/plugin-mcp-server/CHANGELOG.md b/packages/plugins/plugin-mcp-server/CHANGELOG.md index a84c3c7807..ca82b7f6c1 100644 --- a/packages/plugins/plugin-mcp-server/CHANGELOG.md +++ b/packages/plugins/plugin-mcp-server/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/plugin-mcp-server +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-mcp-server/package.json b/packages/plugins/plugin-mcp-server/package.json index abc7906de9..081025f9c5 100644 --- a/packages/plugins/plugin-mcp-server/package.json +++ b/packages/plugins/plugin-mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-mcp-server", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "MCP Runtime Server Plugin for ObjectStack — exposes AI tools, data resources, and agent prompts via the Model Context Protocol", "type": "module", diff --git a/packages/plugins/plugin-msw/CHANGELOG.md b/packages/plugins/plugin-msw/CHANGELOG.md index 315210f6d3..a257505842 100644 --- a/packages/plugins/plugin-msw/CHANGELOG.md +++ b/packages/plugins/plugin-msw/CHANGELOG.md @@ -1,5 +1,29 @@ # @objectstack/plugin-msw +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [f139a24] +- Updated dependencies [4eb9f8c] +- Updated dependencies [2f7e42a] +- Updated dependencies [602cce7] +- Updated dependencies [1e625b8] +- Updated dependencies [6ee42b8] +- Updated dependencies [888a5c1] +- Updated dependencies [5cfdc85] +- Updated dependencies [09f005a] +- Updated dependencies [7825394] +- Updated dependencies [96ad4df] +- Updated dependencies [df18ae9] +- Updated dependencies [2f9073a] + - @objectstack/objectql@5.0.0 + - @objectstack/runtime@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/types@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-msw/package.json b/packages/plugins/plugin-msw/package.json index c4718284d0..da277ac015 100644 --- a/packages/plugins/plugin-msw/package.json +++ b/packages/plugins/plugin-msw/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-msw", - "version": "4.2.0", + "version": "5.0.0", "description": "MSW (Mock Service Worker) Plugin for ObjectStack Runtime", "license": "Apache-2.0", "main": "dist/index.js", diff --git a/packages/plugins/plugin-reports/CHANGELOG.md b/packages/plugins/plugin-reports/CHANGELOG.md index bbbb465446..a55edc960c 100644 --- a/packages/plugins/plugin-reports/CHANGELOG.md +++ b/packages/plugins/plugin-reports/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/plugin-reports +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-reports/package.json b/packages/plugins/plugin-reports/package.json index 4183c8f6f1..9c24a395a2 100644 --- a/packages/plugins/plugin-reports/package.json +++ b/packages/plugins/plugin-reports/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-reports", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Saved reports + scheduled email digests for ObjectStack — sys_saved_report + sys_report_schedule + IReportService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-security/CHANGELOG.md b/packages/plugins/plugin-security/CHANGELOG.md index 79bea36345..e9c3e1c098 100644 --- a/packages/plugins/plugin-security/CHANGELOG.md +++ b/packages/plugins/plugin-security/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/plugin-security +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-security/package.json b/packages/plugins/plugin-security/package.json index c7c7422193..57a4970fa7 100644 --- a/packages/plugins/plugin-security/package.json +++ b/packages/plugins/plugin-security/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-security", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Security Plugin for ObjectStack — RBAC, RLS, and Field-Level Security Runtime", "main": "dist/index.js", diff --git a/packages/plugins/plugin-sharing/CHANGELOG.md b/packages/plugins/plugin-sharing/CHANGELOG.md index 0e1199e869..6700ab7aaf 100644 --- a/packages/plugins/plugin-sharing/CHANGELOG.md +++ b/packages/plugins/plugin-sharing/CHANGELOG.md @@ -1,5 +1,27 @@ # @objectstack/plugin-sharing +## 5.0.0 + +### Patch Changes + +- Updated dependencies [5e9dcb4] +- Updated dependencies [f139a24] +- Updated dependencies [4eb9f8c] +- Updated dependencies [2f7e42a] +- Updated dependencies [602cce7] +- Updated dependencies [1e625b8] +- Updated dependencies [6ee42b8] +- Updated dependencies [888a5c1] +- Updated dependencies [5cfdc85] +- Updated dependencies [09f005a] +- Updated dependencies [7825394] +- Updated dependencies [96ad4df] +- Updated dependencies [2f9073a] + - @objectstack/objectql@5.0.0 + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-sharing/package.json b/packages/plugins/plugin-sharing/package.json index 44c50b4990..3da596fb06 100644 --- a/packages/plugins/plugin-sharing/package.json +++ b/packages/plugins/plugin-sharing/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-sharing", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Record-level sharing for ObjectStack — sys_record_share + middleware that enforces sharingModel + ISharingService.", "main": "dist/index.js", diff --git a/packages/plugins/plugin-webhooks/CHANGELOG.md b/packages/plugins/plugin-webhooks/CHANGELOG.md index 09d4b6491d..4bd88a380e 100644 --- a/packages/plugins/plugin-webhooks/CHANGELOG.md +++ b/packages/plugins/plugin-webhooks/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/plugin-webhooks +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/plugins/plugin-webhooks/package.json b/packages/plugins/plugin-webhooks/package.json index 0daecd6ea2..eed1624d88 100644 --- a/packages/plugins/plugin-webhooks/package.json +++ b/packages/plugins/plugin-webhooks/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/plugin-webhooks", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Outbound webhook delivery plugin for ObjectStack — fan-out data.record.* events to external HTTP(S) sinks with HMAC signing and retry.", "main": "dist/index.js", diff --git a/packages/rest/CHANGELOG.md b/packages/rest/CHANGELOG.md index 2420187052..df515a4970 100644 --- a/packages/rest/CHANGELOG.md +++ b/packages/rest/CHANGELOG.md @@ -1,5 +1,35 @@ # @objectstack/rest +## 5.0.0 + +### Minor Changes + +- 5cfdc85: PR-10d.4 — REST plumbing for the metadata repository write path. + + - `PUT /api/v1/meta/:type/:name` (and the compound `:type/:section/:name` variant) + now forwards the `If-Match` header to `saveMetaItem` as `parentVersion`, and + `X-Actor` (or `req.user.id`) as `actor`. ETag-style quotes are stripped. + - A failed optimistic-lock check surfaces as HTTP 409 with body + `{ "error": "...", "code": "metadata_conflict" }` (no protocol changes — + `sendError` already honoured `error.status` + `error.code`). + - Added a real-engine integration test for the repository write path + (`protocol-save-meta-repo-path-real-engine.test.ts`) — addresses the + PR-10d.3 rubber-duck stub-drift concern by exercising + `ObjectStackProtocolImplementation.saveMetaItem` through `new ObjectQL()` + with an inline in-memory driver. Covers insert→update version bump, + parentVersion conflict, checksum length, and plural→singular normalization. + + Default behaviour unchanged: the repository write path remains opt-in via + `options.useRepositoryWritePath` / `OBJECTSTACK_USE_REPOSITORY_WRITE_PATH=1`. + Flag flip and legacy path removal will follow in a separate post-soak PR. + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/service-package@5.0.0 + ## 4.2.0 ### Minor Changes diff --git a/packages/rest/package.json b/packages/rest/package.json index 6732023c36..f767160e91 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/rest", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "ObjectStack REST API Server - automatic REST endpoint generation from protocol", "type": "module", diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index 58dc02c2f3..e492bb974a 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,124 @@ # @objectstack/runtime +## 5.0.0 + +### Minor Changes + +- 5e9dcb4: **BREAKING — metadata: remove `project` and `branch` from `MetaRef`** + + The metadata layer no longer models project or branch. Customisation is now + scoped purely to **organisation**. Project remains exclusively as an artifact + packaging concept (the `objectstack.json` bundle envelope); branching is left + to Git. + + What changed: + + - `MetaRef` is now `{ org, type, name, version? }` (was + `{ org, project, branch, type, name, version? }`). `refKey()` is the two + segment string `${org}/${type}/${name}` (was five segments). + - `MetadataItem.seq` is monotonic **per org** (was per branch). + - `BranchRef`, `MergeStrategy`, `MergeResult` types and the optional + `fork`/`merge` methods on `MetadataRepository` are removed. + - `ListFilter` / `WatchFilter` / `HistoryOptions` no longer accept `project` + or `branch`. + - `FileSystemRepository` disk layout simplified to + `//.json` (was `////.json`); + change-log path is now `.objectstack/.log/main.jsonl` regardless of any + branch concept. Constructor no longer accepts `project` / `branch`. + - `SysMetadataRepository`: removed `projectLabel` / `branchLabel` options; + the `sys_metadata` schema's `project_id` / `branch` columns (if present) + are ignored. A future major release will `DROP` them. + - `MetadataManager.setRepository(repo, opts)` no longer takes an opts object + with `branch`. + + Migration: + + ```diff + -const ref = { org: 'acme', project: 'crm', branch: 'main', type: 'view', name: 'home' }; + +const ref = { org: 'acme', type: 'view', name: 'home' }; + + -new FileSystemRepository({ root, org: 'acme', project: 'crm', branch: 'main' }); + +new FileSystemRepository({ root, org: 'acme' }); + ``` + + Existing `sys_metadata` rows continue to load; the deprecated columns are + ignored at read time. + +### Patch Changes + +- 96ad4df: Fix dev-mode HMR data-reload for `*.view.ts` / `*.flow.ts` source-file edits. + + Three coordinated fixes close the long-standing gap where editing a + declarative-metadata source file in dev (e.g. `case.view.ts`) would + recompile `dist/objectstack.json` but the running server kept serving + the stale boot-time value: + + 1. **`@objectstack/objectql`** — `ObjectStackProtocolImplementation.getMetaItem` + now consults `MetadataService` (HMR-aware) **before** the in-memory + `SchemaRegistry` (boot-time cache). Previously the registry shadowed + freshly-registered values: `manager.register('view','case',newDef)` + updated MetadataManager but `getMetaItem` returned the stale registry + copy because step 2 (registry) ran before step 3 (service). Reordered + to "1. sys_metadata overlay → 2. MetadataService → 3. SchemaRegistry". + + 2. **`@objectstack/runtime`** — `createStandaloneStack` now enables the + `MetadataPlugin` artifact-file watcher in non-production environments + (`NODE_ENV !== 'production'`). Previously hard-coded to `watch: false`, + leaving nothing watching `dist/objectstack.json` when the CLI dev mode + recompiled it. + + 3. **`@objectstack/metadata`** & **`@objectstack/metadata-fs`** — Both + chokidar watchers now use `usePolling: true` to avoid `fs.watch` + EMFILE on macOS / busy dev hosts where the native file-descriptor + pool can be exhausted by other long-running node processes. + + With these three changes: + + - CLI edits source → recompile artifact (~400ms) + - Server's polling chokidar detects artifact change → `_loadFromLocalFile` + - `_loadFromLocalFile` calls `manager.register(type, name, item)` + - MetadataService now has the fresh value + - Read path returns the fresh value via the new step-2 lookup + - Studio SSE listeners re-render + +- df18ae9: Fix dev-mode HMR data-reload for view metadata. + + `MetadataPlugin._parseAndRegisterArtifact` previously required a top-level + `name` on every artifact item and silently skipped those without one. + View bundles in the compiled artifact carry no top-level `name` (their + identity is the target object, encoded under `list.data.object` / + `form.data.object` — same pattern used by `ObjectQL.SchemaRegistry`'s + `resolveMetadataItemName`). As a result, artifact-loaded views never + reached `MetadataManager`, and HMR file pushes never affected the read + path: API responses kept returning the boot-time `SchemaRegistry` copy. + + This change derives the registration key from `list.data.object` (or + `form.data.object`) when no top-level `name` is present, mirroring the + ObjectQL convention. + + Also splits the `MetadataPlugin` watch flag into two independent + options so dev mode can enable artifact-file HMR without paying the + cost of the source-file scanner: + + - `watch` — controls `NodeMetadataManager`'s recursive source scan + (default `false`; turning it on in artifact mode would polling-scan + the entire project root including `node_modules`). + - `artifactWatch` — controls the cheap single-file polling watcher on + the compiled artifact (`dist/objectstack.json`). The standalone stack + enables this automatically when `NODE_ENV !== 'production'`. + +- Updated dependencies [5cfdc85] +- Updated dependencies [2f9073a] + - @objectstack/rest@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/plugin-auth@5.0.0 + - @objectstack/plugin-security@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/formula@5.0.0 + - @objectstack/observability@5.0.0 + - @objectstack/service-i18n@5.0.0 + - @objectstack/types@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/runtime/package.json b/packages/runtime/package.json index bd87989a69..ce3c512571 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/runtime", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "ObjectStack Core Runtime & Query Engine", "type": "module", diff --git a/packages/services/service-ai/CHANGELOG.md b/packages/services/service-ai/CHANGELOG.md index 5ae39e06cd..ddb9547b6d 100644 --- a/packages/services/service-ai/CHANGELOG.md +++ b/packages/services/service-ai/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-ai +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-ai/package.json b/packages/services/service-ai/package.json index 25affe37c7..e0d4f53367 100644 --- a/packages/services/service-ai/package.json +++ b/packages/services/service-ai/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-ai", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "AI Service for ObjectStack — implements IAIService with LLM adapter layer, conversation management, tool registry, and REST/SSE routes", "type": "module", diff --git a/packages/services/service-analytics/CHANGELOG.md b/packages/services/service-analytics/CHANGELOG.md index 80cfdf87f4..3f7f63b87f 100644 --- a/packages/services/service-analytics/CHANGELOG.md +++ b/packages/services/service-analytics/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog — @objectstack/service-analytics +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-analytics/package.json b/packages/services/service-analytics/package.json index 44463c65cb..364ad6f361 100644 --- a/packages/services/service-analytics/package.json +++ b/packages/services/service-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-analytics", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Analytics Service for ObjectStack — implements IAnalyticsService with multi-driver strategy pattern (NativeSQL, ObjectQL, InMemory)", "type": "module", diff --git a/packages/services/service-automation/CHANGELOG.md b/packages/services/service-automation/CHANGELOG.md index ccf680787c..7f14d2924e 100644 --- a/packages/services/service-automation/CHANGELOG.md +++ b/packages/services/service-automation/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/service-automation +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + - @objectstack/formula@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-automation/package.json b/packages/services/service-automation/package.json index 1b33d60905..e6517f7911 100644 --- a/packages/services/service-automation/package.json +++ b/packages/services/service-automation/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-automation", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Automation Service for ObjectStack — implements IAutomationService with plugin-based DAG flow execution engine", "type": "module", diff --git a/packages/services/service-cache/CHANGELOG.md b/packages/services/service-cache/CHANGELOG.md index 2d10148369..f75e9411d9 100644 --- a/packages/services/service-cache/CHANGELOG.md +++ b/packages/services/service-cache/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-cache +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-cache/package.json b/packages/services/service-cache/package.json index 0f03182bf9..4b7f7c3c4e 100644 --- a/packages/services/service-cache/package.json +++ b/packages/services/service-cache/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-cache", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Cache Service for ObjectStack — implements ICacheService with in-memory and Redis adapters", "type": "module", diff --git a/packages/services/service-feed/CHANGELOG.md b/packages/services/service-feed/CHANGELOG.md index cd6bfa14ab..377925281b 100644 --- a/packages/services/service-feed/CHANGELOG.md +++ b/packages/services/service-feed/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-feed +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-feed/package.json b/packages/services/service-feed/package.json index ffbaf03042..d6b3a734dd 100644 --- a/packages/services/service-feed/package.json +++ b/packages/services/service-feed/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-feed", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Feed/Chatter Service for ObjectStack — implements IFeedService with in-memory adapter for comments, reactions, field changes, and record subscriptions", "type": "module", diff --git a/packages/services/service-i18n/CHANGELOG.md b/packages/services/service-i18n/CHANGELOG.md index 531a86abbc..ac144e121d 100644 --- a/packages/services/service-i18n/CHANGELOG.md +++ b/packages/services/service-i18n/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-i18n +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-i18n/package.json b/packages/services/service-i18n/package.json index 95271938b9..981519b369 100644 --- a/packages/services/service-i18n/package.json +++ b/packages/services/service-i18n/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-i18n", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "I18n Service for ObjectStack — implements II18nService with file-based locale loading", "type": "module", diff --git a/packages/services/service-job/CHANGELOG.md b/packages/services/service-job/CHANGELOG.md index dc84acacae..75d856db84 100644 --- a/packages/services/service-job/CHANGELOG.md +++ b/packages/services/service-job/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/service-job +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-job/package.json b/packages/services/service-job/package.json index 5fc4968d34..12f067e6b1 100644 --- a/packages/services/service-job/package.json +++ b/packages/services/service-job/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-job", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Job Service for ObjectStack — implements IJobService with setInterval and cron scheduling", "type": "module", diff --git a/packages/services/service-package/CHANGELOG.md b/packages/services/service-package/CHANGELOG.md index a607358933..186fcb6bf1 100644 --- a/packages/services/service-package/CHANGELOG.md +++ b/packages/services/service-package/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-package +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-package/package.json b/packages/services/service-package/package.json index 96542bef91..a38a4866bf 100644 --- a/packages/services/service-package/package.json +++ b/packages/services/service-package/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-package", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Package management service for ObjectStack — publish, install, and manage packages", "type": "module", diff --git a/packages/services/service-queue/CHANGELOG.md b/packages/services/service-queue/CHANGELOG.md index e3306ee3df..947ab460a1 100644 --- a/packages/services/service-queue/CHANGELOG.md +++ b/packages/services/service-queue/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/service-queue +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-queue/package.json b/packages/services/service-queue/package.json index 027714c704..9dfe487d37 100644 --- a/packages/services/service-queue/package.json +++ b/packages/services/service-queue/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-queue", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Queue Service for ObjectStack — implements IQueueService with in-memory and BullMQ adapters", "type": "module", diff --git a/packages/services/service-realtime/CHANGELOG.md b/packages/services/service-realtime/CHANGELOG.md index c2dd7c9892..ab005bc05f 100644 --- a/packages/services/service-realtime/CHANGELOG.md +++ b/packages/services/service-realtime/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/service-realtime +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-realtime/package.json b/packages/services/service-realtime/package.json index ad6e030337..b65fa3d703 100644 --- a/packages/services/service-realtime/package.json +++ b/packages/services/service-realtime/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-realtime", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Realtime Service for ObjectStack — implements IRealtimeService with WebSocket and in-memory pub/sub", "type": "module", diff --git a/packages/services/service-settings/CHANGELOG.md b/packages/services/service-settings/CHANGELOG.md index 2e9b47388f..70eebe02de 100644 --- a/packages/services/service-settings/CHANGELOG.md +++ b/packages/services/service-settings/CHANGELOG.md @@ -1,5 +1,15 @@ # @objectstack/service-settings +## 5.0.0 + +### Patch Changes + +- Updated dependencies [888a5c1] +- Updated dependencies [2f9073a] + - @objectstack/platform-objects@5.0.0 + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-settings/package.json b/packages/services/service-settings/package.json index 14c7cbe45f..acb041782a 100644 --- a/packages/services/service-settings/package.json +++ b/packages/services/service-settings/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-settings", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Settings service for ObjectStack — manifest registry + K/V resolver (Env > Tenant > User > Default) + REST routes. See ADR-0007.", "type": "module", diff --git a/packages/services/service-storage/CHANGELOG.md b/packages/services/service-storage/CHANGELOG.md index 3d0dd5a8cc..b2ae8a5277 100644 --- a/packages/services/service-storage/CHANGELOG.md +++ b/packages/services/service-storage/CHANGELOG.md @@ -1,5 +1,13 @@ # @objectstack/service-storage +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + - @objectstack/core@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/services/service-storage/package.json b/packages/services/service-storage/package.json index b6f433f28b..8fdf724e10 100644 --- a/packages/services/service-storage/package.json +++ b/packages/services/service-storage/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/service-storage", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Storage Service for ObjectStack — implements IStorageService with local filesystem and S3 adapter skeleton", "type": "module", diff --git a/packages/spec/CHANGELOG.md b/packages/spec/CHANGELOG.md index ff02e2841f..0ceff874d3 100644 --- a/packages/spec/CHANGELOG.md +++ b/packages/spec/CHANGELOG.md @@ -1,5 +1,14 @@ # @objectstack/spec +## 5.0.0 + +### Minor Changes + +- 2f9073a: Add `_sections` to `ObjectTranslationData` so per-section labels on detail + pages can be authored alongside `_views` and `_actions`. Convention: + `objects.._sections..label`. Consumed by + `@object-ui/plugin-detail` when sections declare a stable `name`. + ## 4.2.0 ### Minor Changes diff --git a/packages/spec/package.json b/packages/spec/package.json index 31a32fe93e..03c8985683 100644 --- a/packages/spec/package.json +++ b/packages/spec/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/spec", - "version": "4.2.0", + "version": "5.0.0", "description": "ObjectStack Protocol & Specification - TypeScript Interfaces, JSON Schemas, and Convention Configurations", "license": "Apache-2.0", "main": "dist/index.js", diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 5a50f7af92..a60eaf1e17 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,12 @@ # @objectstack/types +## 5.0.0 + +### Patch Changes + +- Updated dependencies [2f9073a] + - @objectstack/spec@5.0.0 + ## 4.2.0 ### Patch Changes diff --git a/packages/types/package.json b/packages/types/package.json index fb9594a8d8..9a4a61d84e 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@objectstack/types", - "version": "4.2.0", + "version": "5.0.0", "license": "Apache-2.0", "description": "Shared interfaces describing the ObjectStack Runtime environment", "main": "dist/index.js", diff --git a/packages/vscode-objectstack/CHANGELOG.md b/packages/vscode-objectstack/CHANGELOG.md index 94cb99da00..111dd4d618 100644 --- a/packages/vscode-objectstack/CHANGELOG.md +++ b/packages/vscode-objectstack/CHANGELOG.md @@ -1,5 +1,7 @@ # objectstack-vscode +## 5.0.0 + ## 4.2.0 ## 4.1.1 diff --git a/packages/vscode-objectstack/package.json b/packages/vscode-objectstack/package.json index 638d541015..dd9a6818e4 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": "4.2.0", + "version": "5.0.0", "publisher": "objectstack", "license": "Apache-2.0", "repository": {