@objectstack/metadata 16.1.0 → 17.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,3278 @@
1
+ # @objectstack/metadata
2
+
3
+ ## 17.0.0-rc.1
4
+
5
+ ### Major Changes
6
+
7
+ - ac6c0be: refactor(metadata)!: remove the `artifact-api` artifact source (#4246)
8
+
9
+ `MetadataPluginOptions.artifactSource` loses its `artifact-api` union member;
10
+ `{ mode: 'local-file', path }` is now the single artifact source. The
11
+ `_loadFromArtifactApi` loader, its `environmentId` pre-flight guard, and the
12
+ Bearer-token support in `_fetchJson` go with it.
13
+
14
+ **Why removal, not the doc fix this branch first carried.** #4246 found the
15
+ declaration and the implementation contradicting each other — the option's
16
+ comment called `artifact-api` "reserved for M3/M4" while the loader shipped and
17
+ all three bootstrap modes dispatched to it — and asked the owner to pick a
18
+ direction. Auditing both repos to answer that settled it:
19
+
20
+ - **Zero consumers anywhere.** No `mode: 'artifact-api'` call site exists in
21
+ this repo or in cloud. The two real "pull an artifact from the cloud" paths
22
+ both bypass it: the cloud runtime uses its own `ArtifactApiClient` (TTL
23
+ cache, singleflight, hostname resolution, runtime config injection — a
24
+ superset this option was never going to grow into), and package distribution
25
+ into a running OSS instance goes through `@objectstack/cloud-connection`
26
+ (`os package install`, ADR-0008).
27
+ - **Half its input contract had been dead since v5.0 with no one noticing.**
28
+ The URL builder decided "append the canonical path vs use as-is" by testing
29
+ for an `/api/v{n}/cloud/projects/` segment that the v5.0
30
+ `project → environment` rename deleted, so every already-resolved URL got
31
+ the path appended a second time and 404'd. A year of silence on a bug like
32
+ that is consumer-count evidence of its own.
33
+ - **Its one non-replaceable capability was declined.** A Bearer-authenticated
34
+ pull of a _private_ environment artifact is the single thing `local-file`
35
+ cannot do (`local-file` URLs fetch verbatim, unauthenticated). The owner
36
+ confirmed that sealed-private-artifact deployments are not a supported need
37
+ right now, which removed the last reason to keep the mode.
38
+
39
+ **Migration.** Public or commit-pinned artifacts load through the existing
40
+ `local-file` URL form, which every bootstrap mode already honors:
41
+
42
+ ```ts
43
+ artifactSource: {
44
+ mode: 'local-file',
45
+ path: 'https://cloud.example.com/pub/v1/environments/env_42/artifact?commit=cmt_1a2b',
46
+ }
47
+ ```
48
+
49
+ (`private` environments still serve exact-commit deep links through the same
50
+ `/pub` route; fully private pulls have no replacement — by decision, not
51
+ oversight.) For installing packages into a running runtime, use
52
+ `os package install` / `@objectstack/cloud-connection`.
53
+
54
+ **The removal is loud, not silent.** A still-configured `artifact-api` source
55
+ (reachable from JS or `any`-typed config now that the TS union is
56
+ single-member) throws at `start()` with the migration pointer above. This
57
+ guard exists because the dispatch's old fall-through would have treated
58
+ "unsupported source" as "no source" — under `eager` that silently scans the
59
+ filesystem instead of loading the artifact the caller named. Tests pin the
60
+ rejection in `artifact-only` and `eager`, and pin the migration target
61
+ (`local-file` fetching an http(s) URL and registering the envelope) so the
62
+ path the error message points at stays real.
63
+
64
+ Also replaces a test that passed for the wrong reason: "artifact-only
65
+ bootstrap rejects the not-yet-implemented artifact-api source" matched
66
+ `/artifact-api/` against the missing-`environmentId` guard's message — which
67
+ merely contained the string — proving nothing about implementation status.
68
+ The doc comment, `implementation-status.mdx`, `metadata-service.mdx`, and the
69
+ package ROADMAP now all describe the single `local-file` source, ending the
70
+ docs-audit loop #4246 was filed to stop.
71
+
72
+ ### Minor Changes
73
+
74
+ - ffb003c: **ADR-0110 — an action's identity is its `name`, and anything executable over a
75
+ governed surface must have a declaration.**
76
+
77
+ `POST /api/v1/actions/:object/:action` resolved the DECLARATION from the URL
78
+ segment as a `name` but dispatched the HANDLER using that same segment as a
79
+ registry key. For a target-bound action (`{ name: 'complete_task', target:
80
+ 'completeTask' }`) those are different strings, so the two documented callers
81
+ each worked on exactly the half the other broke: the documented curl resolved
82
+ the declaration then 404ed, while the Console's `target`-addressed call
83
+ dispatched fine and resolved no declaration — silently skipping the ADR-0066 D4
84
+ capability gate and the ADR-0104 param contract (#3935).
85
+
86
+ - **D1/D2** — identity is always the declarative `name`; the handler key is
87
+ derived from the resolved declaration through a rotation now shared with the
88
+ MCP `run_action` bridge (`resolveActionHandlerKeys`, `executeRegisteredAction`).
89
+ The REST route previously rotated only the object key, never the handler key.
90
+ - **D3 (breaking)** — declaration resolution is a trichotomy. A genuinely
91
+ undeclared handler is **refused (404)** with the `defineAction` to add, rather
92
+ than executed ungated with system privileges; an unreachable metadata plane is
93
+ a **503** rather than a silent ungating (`MetadataManager.loadDiagnosed` tells
94
+ a clean miss from an outage). `OS_ALLOW_UNDECLARED_ACTIONS=1` is the migration
95
+ valve — it warns on every invocation and is removed in 18.
96
+ - **D5** — `reconcileActionRegistrations` plus `ObjectQLEngine.listRegisteredActions`
97
+ power a `kernel:ready` inventory logging every registered-but-undeclared
98
+ handler (refused at dispatch) and every declared script action bound to no
99
+ handler — the ADR-0078 converse, mechanised.
100
+ - **D6** — security-gate strictness is opt-**out** (`OS_ALLOW_*`), never opt-in.
101
+
102
+ Apps whose actions are all declared need no changes beyond gaining enforcement
103
+ of the `requiredPermissions` they already declared.
104
+
105
+ ### Patch Changes
106
+
107
+ - 2e836de: chore(packaging): CHANGELOG.md ships in every npm tarball (#4261)
108
+
109
+ The AGENTS.md post-task checklist requires breaking changesets to carry their
110
+ FROM → TO migration because "this text ships to consumers as `CHANGELOG.md`
111
+ inside the npm package and is what an upgrading agent greps after the tombstone
112
+ error." That delivery path was severed for 68 of the 69 publishable packages:
113
+ npm packs `package.json` / `README*` / `LICENSE*` unconditionally but — unlike
114
+ older npm versions — not `CHANGELOG.md`, and the canonical
115
+ `"files": ["dist", "README.md"]` whitelist never named it. Measured on npm
116
+ 10.9.7: `npm pack --dry-run` on `@objectstack/types` shipped 3 files while its
117
+ 70KB `CHANGELOG.md` stayed behind. Only `@objectstack/spec` listed it
118
+ explicitly.
119
+
120
+ The tombstone-error scenario is precisely the one where the repo is out of
121
+ reach — the upgrading agent has `node_modules` and nothing else — so the
122
+ migration text has to ride in the tarball. Every publishable package now
123
+ declares `CHANGELOG.md` in `files`, and the canonical whitelist is
124
+ `["dist", "README.md", "CHANGELOG.md"]`.
125
+
126
+ The other half is the gate: `check:published-files` gains a fifth invariant,
127
+ COMPLETE — a whitelist that fails to cover `CHANGELOG.md` fails the
128
+ always-required lint job, so the next package cannot silently sever the path
129
+ again. `@objectstack/spec`'s per-package EXTRA_ENTRIES exemption dissolves
130
+ into the canonical set.
131
+
132
+ Consumer-visible change: one more file per install (the package's changelog,
133
+ e.g. 70.8KB for `@objectstack/types`), and `grep -r "removed key"
134
+ node_modules/@objectstack/*/CHANGELOG.md` now finds the migration it was
135
+ promised.
136
+
137
+ - f985b3f: fix(spec,core,cloud-connection,metadata): one HTTP contract, one canonical slot name — and the dead shadow copy that helped cause the false exemption is deleted (#4251)
138
+
139
+ **`packages/core/src/contracts/` was a dead near-copy of the real contracts,
140
+ and it is gone.** The directory (http-server.ts, data-engine.ts, logger.ts) had
141
+ ZERO importers — no relative import, no subpath export, not a tsup entry;
142
+ core's barrel has re-exported the `@objectstack/spec/contracts` versions all
143
+ along ("Re-export contracts from @objectstack/spec for backward
144
+ compatibility"). But the shadow had already **diverged** from the live
145
+ contract (spec's `IHttpResponse` grew `write?`/`end?` and `IHttpRequest` grew
146
+ `rawBody?`; the copy never did), so anyone who grepped their way into it read a
147
+ stale contract that nothing enforces — the exact both-humans-and-AI failure
148
+ mode behind the false `http.server` exemption (#4382). Deleting it is
149
+ zero-risk by construction: nothing could reach it.
150
+
151
+ **`http.server` is the canonical slot name, and the ledger now says so.**
152
+ `ServiceSlotContracts` gains `'http.server': IHttpServer` plus the deprecated
153
+ `'http-server'` alias entry (same instance — hono-plugin and qa's node-plugin
154
+ register both two lines apart; cloud's two server entrypoints do the same).
155
+ Canonical is the only name present on EVERY provider path: runtime's
156
+ `config.server` path registers no alias, so the three cloud-connection plugins
157
+ that read the alias alone (marketplace-proxy, runtime-config,
158
+ marketplace-install-local) found an empty slot there — a live miss, now fixed:
159
+ all readers go canonical-first with the alias as a fallback that dies with the
160
+ alias registrations. The registrations themselves are untouched this release;
161
+ both sites now carry the deprecation note.
162
+
163
+ **`getRawApp?(): any` joins `IHttpServer`** — the deliberate framework-handle
164
+ escape, declared once. Four consumers were each declaring it locally
165
+ (cloud-connection ×2, metadata's HMR routes, cloud's serverless node-server);
166
+ those local `RawAppHost`/`HttpServerWithRawApp` types are deleted. The `any`
167
+ return is deliberate and documented at the single declaration: the handle's
168
+ real type belongs to the framework, and naming it would give the contract a
169
+ framework dependency. Adapters are not required to expose it; consumers
170
+ feature-detect.
171
+
172
+ **`IMetadataService.bulkRegister`/`bulkUnregister` declare the write options
173
+ their implementation has always accepted.** `bulkRegister`'s contract options
174
+ dropped the `MetadataWriteOptions` half its implementation intersects in
175
+ (`notify` is destructured on the method's first line); `bulkUnregister`
176
+ declared no options at all while the manager takes them. Same shape as the
177
+ `IDataEngine` read-methods gap from B2: a caller typed to the contract could
178
+ not reach the channel without erasing the lookup. Both additive; no implementor
179
+ or caller breaks.
180
+
181
+ Slot-lookup baseline ratchets 168 → 167 (marketplace-install-local's lookup
182
+ typed while touched).
183
+
184
+ - 10575f3: fix(lint,metadata): revoke the `http.server` lint exemption — its stated reason was false (#4251)
185
+
186
+ `http.server` was added to `UNCONTRACTED_SLOTS` in #4321 on the ground that
187
+ "no IHttpServer contract exists". The contract does exist —
188
+ `packages/spec/src/contracts/http-server.ts` — and eight call sites were
189
+ already resolving the slot as `getService<IHttpServer>(…)` when the exemption
190
+ was written. An exemption is a claim like any other, and this one rested on a
191
+ premise nobody checked: the same shape as the gaps the rule exists to find.
192
+
193
+ Revoked. That surfaced **9 erasures the exemption had been hiding** — 7 in
194
+ files never grandfathered, 2 as count growth inside grandfathered ones, none of
195
+ which the baseline could legally absorb. All typed to `IHttpServer`;
196
+ `packages/metadata/src/plugin.ts` came out clean entirely, so the baseline
197
+ ratchets **DOWN to 168 sites in 36 files** and loses a file.
198
+
199
+ Two things confirmed on the way, reported rather than changed:
200
+
201
+ **`http.server` and `http-server` are the same instance under two names.**
202
+ plugin-hono-server and qa's node-plugin each register it twice, two lines
203
+ apart; runtime's `config.server` path registers only `http.server`.
204
+ `metadata/src/plugin.ts` reads both with a `??`, which is how it survived. No
205
+ registration is removed here — that is a runtime-behaviour change and belongs
206
+ with whoever picks the canonical name.
207
+
208
+ **`IHttpServer` is defined twice and the two have already diverged.**
209
+ `packages/spec/src/contracts/http-server.ts` (15 importers) declares `write?()`
210
+ and `end?()`; `packages/core/src/contracts/http-server.ts` (8 importers) does
211
+ not. Spec's is the superset and the one the ledger points at, so it is the
212
+ source; core's is a stale near-copy and should re-export it. Left for its own
213
+ change — collapsing a duplicated contract is not a lint fix.
214
+
215
+ Also worth a note for whoever writes the wider HTTP contract: `getRawApp()` now
216
+ has a **third** independent consumer (metadata's HMR routes, joining
217
+ cloud-connection's two). It is deliberately absent from `IHttpServer` — the
218
+ contract is framework-agnostic and the raw app is the framework's own handle —
219
+ so each consumer names it locally. Three is enough evidence to decide whether
220
+ that stays the right answer.
221
+
222
+ - d13004a: feat(core,runtime): plugin ordering is a declared, kernel-enforced contract (ADR-0116, #4131)
223
+
224
+ `kernel.use()` registration order was never a contract — the kernel resolves
225
+ init/start order from the plugin dependency graph — but a plugin that needed a
226
+ service at init _when its provider is composed_ while also booting _without_
227
+ the provider had no way to declare that. `AppPlugin` was the standing example:
228
+ it grabs `manifest`/`objectql` synchronously in `init()`, declared nothing
229
+ (a hard dependency would break empty-env / metadata-only / mock-engine
230
+ kernels), and so its correctness rode on which array slot each caller put it
231
+ in. That convention failed the same way twice (`DefaultDatasourcePlugin`'s
232
+ first cut; then #4085, disguised for months as "crashes when the artifact is
233
+ missing").
234
+
235
+ The kernel `Plugin` contract gains three additive fields, enforced by both
236
+ `ObjectKernel` and `LiteKernel` through one shared implementation
237
+ (`plugin-order.ts` — the previously duplicated topological sort is unified
238
+ there):
239
+
240
+ - **`optionalDependencies: string[]`** — order-if-present: hoisted ahead
241
+ exactly like `dependencies` when composed (real topology edges, including
242
+ cycle detection), silently skipped when absent.
243
+ - **`requiresServices: string[]`** — services resolved synchronously during
244
+ `init()` with no fallback. Validated **before Phase 1**: a required service
245
+ whose only declared provider initializes later fails the boot with an error
246
+ naming both plugins, both slots, and the fix — before any init side
247
+ effects. Re-checked immediately before the plugin's own init, where a still-
248
+ missing service becomes a named composition error exactly where the old
249
+ bare `Service not found` crash fired.
250
+ - **`providesServices: string[]`** — services a plugin's `init()`
251
+ unconditionally registers; powers the validation and the diagnostics.
252
+
253
+ Plugins that declare nothing get the diagnosis too: a `getService` miss
254
+ during Phase 1 now appends which plugin was initializing and — when a
255
+ composed plugin declares the service — who provides it and how to declare the
256
+ ordering. The `Service '<name>' not found` prefix and the factory-backed
257
+ `is async - use await` message are unchanged.
258
+
259
+ First adopters: `AppPlugin` declares
260
+ `optionalDependencies: ['com.objectstack.engine.objectql']` +
261
+ `requiresServices: ['manifest']` (cleared on the empty-env no-op path), so
262
+ the #4085 composition — AppPlugin registered before the engine — now boots
263
+ correctly in every slot; `ObjectQLPlugin` declares
264
+ `providesServices: ['objectql', 'data', 'manifest', 'lifecycle']` and
265
+ `MetadataPlugin` declares `providesServices: ['metadata']`.
266
+
267
+ Everything is additive — plugins that declare nothing keep their exact
268
+ ordering semantics; no existing declaration changes meaning.
269
+
270
+ - 857a6cf: fix(cli,core,metadata,runtime): `os serve` boots with no compiled artifact — the platform does not need an application to start (#4085)
271
+
272
+ The artifact (`dist/objectstack.json`) defines an **application**. ObjectStack is
273
+ a development platform, so it has to start without one — but `os serve
274
+ objectstack.config.ts` died during boot whenever the artifact was absent:
275
+
276
+ ```
277
+ Loading objectstack.config.ts...
278
+ [StandaloneStack] artifact read FAILED: path='…/dist/objectstack.json' error=ENOENT…
279
+
280
+ ✗ Service 'manifest' is async - use await
281
+ ```
282
+
283
+ Exit 1 — on a **known-good app** (`examples/app-todo` fails the same way with
284
+ only its `dist/objectstack.json` moved aside), and on every freshly authored
285
+ project between `os init` and its first `os compile`. The message named neither
286
+ the missing artifact nor a fix, so it read as an internal kernel fault.
287
+
288
+ Three separate faults, each of which alone was enough to refuse the boot:
289
+
290
+ - **`serve` registered the config-derived `AppPlugin` before the stack's own
291
+ `plugins[]`.** Registration order _is_ the kernel's init/start order, and that
292
+ slot sits ahead of `ObjectQLPlugin` (which registers `manifest`/`objectql`) and
293
+ `DefaultDatasourcePlugin` (which connects the database the app seeds through).
294
+ The wrap is now **appended** to `plugins[]`, the same slot
295
+ `createStandaloneStack` gives its artifact-derived `AppPlugin` — so config-boot
296
+ and artifact-boot share one plugin order. The artifact path never hit this,
297
+ which is exactly what made a plugin-**order** bug look artifact-related.
298
+
299
+ - **`ctx.getService()` reported a never-registered service as "is async".**
300
+ `PluginLoader.getService` is an `async` method, so its return value is _always_
301
+ a Promise and its internal "not found" rejection can never surface
302
+ synchronously — the kernel read the answer off that Promise and told every
303
+ caller to `await` a service that did not exist, while the `not found` branch
304
+ below it was unreachable. It now decides from the registry: absent ⇒
305
+ `[Kernel] Service 'x' not found`, registered-but-uninstantiated ⇒ the unchanged
306
+ `Service 'x' is async - use await`. The same crash now reads
307
+ `[Kernel] Service 'manifest' not found`, which points at the layer that is
308
+ actually wrong.
309
+
310
+ - **`MetadataPlugin` treated an absent `local-file` artifact as fatal.**
311
+ `createStandaloneStack` always points it at `dist/objectstack.json`, so a stack
312
+ with no app at all could not boot. A **missing** local artifact is now "nothing
313
+ compiled yet": it logs, starts empty, and leaves the artifact watcher armed, so
314
+ a later `os compile` hydrates the running server. The tolerance is
315
+ ENOENT-only — a malformed or unreadable artifact stays fatal — and
316
+ `bootstrap: 'artifact-only'` (sealed runtime, where the artifact _is_ the
317
+ deployment) keeps failing loudly rather than silently serving an empty runtime.
318
+
319
+ `[StandaloneStack] artifact read FAILED … ENOENT` is likewise no longer shouted
320
+ at callers for whom "no artifact" is a healthy state; a present-but-unusable
321
+ artifact keeps the loud warning.
322
+
323
+ Pinned by an e2e pair that drives the real `os serve` with **no `os compile`
324
+ anywhere**: an app defined only by `objectstack.config.ts` (asserting its object
325
+ is in the started plugin set, not merely that boot survived) and a bare
326
+ `export default {}` platform. The #4012 fixture drops the `os compile` this bug
327
+ had forced on it.
328
+
329
+ - 5d21a48: feat(spec,metadata-protocol,metadata,objectql,service-automation): stored metadata replays the full conversion chain at rehydration (#3903)
330
+
331
+ Every mechanism the platform has for evolving the metadata contract — schema
332
+ transforms, the ADR-0087 D2 conversion layer, the D3 migration chain, the
333
+ protocol-17 tombstones — operated on **authored source** only. Metadata **at
334
+ rest** (`sys_metadata` rows written by Studio or the runtime authoring APIs)
335
+ was rehydrated unparsed and unconverted, so the authored and stored contracts
336
+ silently diverged: a pre-17 row carrying `conditionalRequired` or `execute`
337
+ read as whatever each ad-hoc consumer happened to do with it.
338
+
339
+ **New spec primitive — `applyConversionsToStoredItem(type, item, options?)`**
340
+ (exported from the package root). Wraps one stored item of a given metadata
341
+ type and replays the **full** conversion chain over it — `retiredFromLoadPath`
342
+ entries included, because retirement is an _authoring-surface_ event: the
343
+ window exists to teach a live author, and a row at rest has no author to
344
+ teach. Idempotent, never throws, never validates.
345
+
346
+ Wired at every stored-row rehydration seam:
347
+
348
+ - `metadata-protocol`: `loadMetaFromDb`, `getMetaItems` (active + draft
349
+ preview), `getMetaItem` (active + draft), `getMetaItemLayered`, and
350
+ `duplicatePackage` (a copy re-saves through the schema gate, so legacy
351
+ sources now duplicate successfully — and the copy is canonical).
352
+ - `metadata`: the DatabaseLoader's live-row reads (`load` / `loadMany`).
353
+ History reads stay verbatim — history records what was written.
354
+ - `objectql`: the authored-action / authored-hook direct table reads, so
355
+ runtime-authored actions stored with the removed `execute` alias dispatch
356
+ via `target` again.
357
+ - `service-automation`: `AutomationEngine.registerFlow` now passes
358
+ `includeRetired` — stored flows keep canonicalizing after their conversions
359
+ graduate out of the load window. (The generic metadata seams deliberately
360
+ skip `type: 'flow'`: flow conversions carry the open-namespace conflict
361
+ guard, which needs this engine's live executor registry.)
362
+
363
+ **Boot hydration diagnoses instead of shrugging.** `loadMetaFromDb` now
364
+ returns `{ loaded, errors, invalid }`: each row is validated against its
365
+ type's spec schema _after_ conversion, and a genuine contract violation is
366
+ counted and warned with a stable `[metadata_spec_invalid]` marker — but still
367
+ registered, deliberately: refusing at boot would unhook live tables and make
368
+ the row unlistable and unfixable in Studio. The write path (`saveMetaItem` → 422) and the read-side `_diagnostics` envelope remain the enforcing gates; the
369
+ `SchemaRegistry.registerItem` validation hook is now documented as exactly
370
+ that diagnostic.
371
+
372
+ **Retired accommodation.** With the chain running on every stored read path,
373
+ the rule-validator's `requiredWhen ?? conditionalRequired` fallback — kept in
374
+ #3883 with a retirement promise that had no mechanism — is deleted. If you
375
+ call `evaluateValidationRules` directly with raw legacy field definitions,
376
+ convert them first (`applyConversionsToStoredItem('object', def)`) or author
377
+ `requiredWhen`; the platform's own read paths already hand you canonical
378
+ shapes.
379
+
380
+ - 7309c81: test(runtime,client,metadata): back the remaining suites with in-memory SQLite instead of the mingo driver (#4065)
381
+
382
+ Ten test files used `InMemoryDriver` as a convenience backing store — somewhere
383
+ for rows to go while the suite proved something else (REST routing, datasource
384
+ auto-connect, the batch `$ref` contract, metadata history). They now run on
385
+ `SqliteWasmDriver` at `:memory:`, the same engine `@objectstack/verify`'s
386
+ `bootStack` already gives the dogfood gate: pure JS (no native build, CI-safe on
387
+ any runner) and real SQL semantics.
388
+
389
+ The point is fidelity, not tidiness. Production runs SQL, and mingo differs from
390
+ it in ways that let a suite pass while the behaviour it stands for is broken.
391
+ Every failure this migration produced was a fixture defect the memory driver had
392
+ been absorbing:
393
+
394
+ - **Tables were never created.** `driver.create()` on the memory driver is a
395
+ bare `table.push()` onto an auto-vivified array, so an object registered
396
+ _after_ `kernel.bootstrap()` — which misses the boot-time schema sync — looked
397
+ fine. On SQL the first write fails with `no such table`, which the REST error
398
+ mapper turns into a **404 `OBJECT_NOT_FOUND`**: a routing-shaped symptom for a
399
+ DDL-shaped cause. Four suites needed an explicit `syncObjectSchema`.
400
+ - **A missing object declaration read as working.** `notifications.hono.integration`
401
+ writes `sys_notification`, which `MessagingServicePlugin` does not declare —
402
+ it is a platform object, and that lean kernel never booted `platform-objects`.
403
+ Auto-vivification hid the omission entirely. The suite now registers the real
404
+ `SysNotification` rather than a hand-copied stand-in, so there is still exactly
405
+ one schema for it (Prime Directive #12).
406
+ - **`connect()` was optional.** The memory driver needs none; a SQL driver does.
407
+
408
+ What deliberately did NOT move: `read-coercion-conformance` keeps its two-driver
409
+ matrix (proving a stored value reads back as its declared type on _both_ engines
410
+ is the entire point of that gate), and the suites whose subject IS the memory
411
+ driver or its wiring — `standalone-stack` (`memory://` scheme),
412
+ `sqlite-driver-fallback` (the dev step-down), the CLI's driver-label tests, and
413
+ driver-memory's own suite.
414
+
415
+ `datasource-autoconnect` is in that second group as of #4083, which landed a
416
+ regression test there for exactly the memory-pool property this PR originally
417
+ proposed to migrate away from. Moving that file to SQLite would have left the
418
+ new test passing vacuously — a wasm-SQLite pool never writes `.objectstack/` at
419
+ all — so it stays on the memory driver and keeps guarding what it was written
420
+ to guard.
421
+
422
+ No new coverage is claimed here: each suite asserts exactly what it asserted
423
+ before, against a more faithful store.
424
+
425
+ - Updated dependencies [6a67d7a]
426
+ - Updated dependencies [0ecc656]
427
+ - Updated dependencies [06772eb]
428
+ - Updated dependencies [270650f]
429
+ - Updated dependencies [3aef718]
430
+ - Updated dependencies [1ea6bce]
431
+ - Updated dependencies [c1dcacd]
432
+ - Updated dependencies [ad303ed]
433
+ - Updated dependencies [32ccb23]
434
+ - Updated dependencies [f5a4ef0]
435
+ - Updated dependencies [2d3e255]
436
+ - Updated dependencies [7d7521f]
437
+ - Updated dependencies [5dc4d02]
438
+ - Updated dependencies [05154a1]
439
+ - Updated dependencies [9b6fe7c]
440
+ - Updated dependencies [8c711fb]
441
+ - Updated dependencies [09e4547]
442
+ - Updated dependencies [91f4c78]
443
+ - Updated dependencies [820eff9]
444
+ - Updated dependencies [8d895ff]
445
+ - Updated dependencies [f6472d7]
446
+ - Updated dependencies [78caf51]
447
+ - Updated dependencies [62a789b]
448
+ - Updated dependencies [789ad63]
449
+ - Updated dependencies [2af1988]
450
+ - Updated dependencies [0af50a3]
451
+ - Updated dependencies [2e836de]
452
+ - Updated dependencies [12a19a8]
453
+ - Updated dependencies [41dcda3]
454
+ - Updated dependencies [c8124e5]
455
+ - Updated dependencies [a1a4140]
456
+ - Updated dependencies [c20b875]
457
+ - Updated dependencies [2a37694]
458
+ - Updated dependencies [217e2e6]
459
+ - Updated dependencies [86a71d1]
460
+ - Updated dependencies [d5c75e2]
461
+ - Updated dependencies [03d26f7]
462
+ - Updated dependencies [4384921]
463
+ - Updated dependencies [3c628ce]
464
+ - Updated dependencies [7cb922e]
465
+ - Updated dependencies [1d22114]
466
+ - Updated dependencies [b5f9397]
467
+ - Updated dependencies [ed77493]
468
+ - Updated dependencies [58a03d2]
469
+ - Updated dependencies [dc530b4]
470
+ - Updated dependencies [e59786e]
471
+ - Updated dependencies [bcf1112]
472
+ - Updated dependencies [9774b78]
473
+ - Updated dependencies [b07d829]
474
+ - Updated dependencies [a648e96]
475
+ - Updated dependencies [a47ac06]
476
+ - Updated dependencies [e4c61a7]
477
+ - Updated dependencies [cc60165]
478
+ - Updated dependencies [081aa6f]
479
+ - Updated dependencies [91f4c78]
480
+ - Updated dependencies [e8d0c21]
481
+ - Updated dependencies [45dc446]
482
+ - Updated dependencies [c1d44f7]
483
+ - Updated dependencies [ab9fb5c]
484
+ - Updated dependencies [f985b3f]
485
+ - Updated dependencies [9a4932a]
486
+ - Updated dependencies [f9fc874]
487
+ - Updated dependencies [011b386]
488
+ - Updated dependencies [9881074]
489
+ - Updated dependencies [7777e8f]
490
+ - Updated dependencies [507b92a]
491
+ - Updated dependencies [7309c81]
492
+ - Updated dependencies [20bc1ec]
493
+ - Updated dependencies [90c2b15]
494
+ - Updated dependencies [39eb01b]
495
+ - Updated dependencies [42eeb7d]
496
+ - Updated dependencies [01e124d]
497
+ - Updated dependencies [7ce02eb]
498
+ - Updated dependencies [a13827e]
499
+ - Updated dependencies [7733604]
500
+ - Updated dependencies [40e420f]
501
+ - Updated dependencies [d13004a]
502
+ - Updated dependencies [be7360c]
503
+ - Updated dependencies [5b47ab5]
504
+ - Updated dependencies [b09d8d9]
505
+ - Updated dependencies [b09d8d9]
506
+ - Updated dependencies [8675db6]
507
+ - Updated dependencies [b09d8d9]
508
+ - Updated dependencies [3eb1b2b]
509
+ - Updated dependencies [59b85c0]
510
+ - Updated dependencies [6e357ed]
511
+ - Updated dependencies [d6938bf]
512
+ - Updated dependencies [31e0be9]
513
+ - Updated dependencies [4bfd455]
514
+ - Updated dependencies [ffd2ce2]
515
+ - Updated dependencies [62f8017]
516
+ - Updated dependencies [a831df1]
517
+ - Updated dependencies [f752ee3]
518
+ - Updated dependencies [a1b61e0]
519
+ - Updated dependencies [cd6b9f2]
520
+ - Updated dependencies [2cb6d3c]
521
+ - Updated dependencies [af2a095]
522
+ - Updated dependencies [ec796d5]
523
+ - Updated dependencies [e87fea1]
524
+ - Updated dependencies [c65e529]
525
+ - Updated dependencies [3ca34c1]
526
+ - Updated dependencies [239c3a3]
527
+ - Updated dependencies [94a0bbc]
528
+ - Updated dependencies [d6bfb3d]
529
+ - Updated dependencies [a2266a6]
530
+ - Updated dependencies [d25a0ec]
531
+ - Updated dependencies [667b83e]
532
+ - Updated dependencies [627b188]
533
+ - Updated dependencies [8d4eae7]
534
+ - Updated dependencies [857a6cf]
535
+ - Updated dependencies [65a3a84]
536
+ - Updated dependencies [d5749d7]
537
+ - Updated dependencies [ccd9397]
538
+ - Updated dependencies [bca935b]
539
+ - Updated dependencies [d92c72d]
540
+ - Updated dependencies [c54c822]
541
+ - Updated dependencies [8dcc0f5]
542
+ - Updated dependencies [75b9e51]
543
+ - Updated dependencies [0a2f233]
544
+ - Updated dependencies [8621cdd]
545
+ - Updated dependencies [6f23667]
546
+ - Updated dependencies [5d21a48]
547
+ - Updated dependencies [19365b7]
548
+ - Updated dependencies [b7ed26d]
549
+ - Updated dependencies [68dea0b]
550
+ - Updated dependencies [64f8cbe]
551
+ - Updated dependencies [b3a3d83]
552
+ - Updated dependencies [7a55913]
553
+ - Updated dependencies [35accbf]
554
+ - Updated dependencies [6038de7]
555
+ - Updated dependencies [eb95d97]
556
+ - Updated dependencies [e4c2dc8]
557
+ - Updated dependencies [1bd2795]
558
+ - Updated dependencies [8186a70]
559
+ - Updated dependencies [a329cca]
560
+ - Updated dependencies [6eec18c]
561
+ - Updated dependencies [4d7bebf]
562
+ - Updated dependencies [821ac7a]
563
+ - Updated dependencies [8f81731]
564
+ - Updated dependencies [8b50cb3]
565
+ - Updated dependencies [8c2db68]
566
+ - Updated dependencies [22b5e54]
567
+ - Updated dependencies [0166bd5]
568
+ - Updated dependencies [9b702dc]
569
+ - Updated dependencies [ab16331]
570
+ - @objectstack/spec@17.0.0-rc.1
571
+ - @objectstack/platform-objects@17.0.0-rc.1
572
+ - @objectstack/core@17.0.0-rc.1
573
+ - @objectstack/metadata-core@17.0.0-rc.1
574
+ - @objectstack/metadata-fs@17.0.0-rc.1
575
+ - @objectstack/types@17.0.0-rc.1
576
+
577
+ ## 17.0.0-rc.0
578
+
579
+ ### Patch Changes
580
+
581
+ - 4e9e184: chore(deps): OSV security batch — bump tar to ^7.5.21 (GHSA-r292-9mhp-454m) and
582
+ js-yaml to ^5.2.2 (GHSA-pm4m-ph32-ghv5)
583
+
584
+ Both are declared-range bumps to the patched releases, so downstream installs
585
+ resolve the fixed versions from the published manifests, not just this
586
+ workspace's lockfile. The same batch clears the remaining transitive advisories
587
+ (next 16.2.11 in apps/docs; workspace overrides for brace-expansion, sharp,
588
+ react-router, @sveltejs/kit, @hono/node-server) — those live in pnpm-workspace.yaml
589
+ and the private docs app, which do not ship.
590
+
591
+ - Updated dependencies [50616d9]
592
+ - Updated dependencies [08b5a3d]
593
+ - Updated dependencies [d99aeb3]
594
+ - Updated dependencies [4727eb8]
595
+ - Updated dependencies [f63cd09]
596
+ - Updated dependencies [fa3d0cf]
597
+ - Updated dependencies [af5a224]
598
+ - Updated dependencies [71f76e1]
599
+ - Updated dependencies [37b1346]
600
+ - Updated dependencies [99736a0]
601
+ - Updated dependencies [fe67e34]
602
+ - Updated dependencies [fdb4f50]
603
+ - Updated dependencies [1bd5652]
604
+ - Updated dependencies [14252d3]
605
+ - Updated dependencies [7fb436c]
606
+ - Updated dependencies [879ea13]
607
+ - Updated dependencies [201b31f]
608
+ - Updated dependencies [e2616e0]
609
+ - Updated dependencies [6fdc5c6]
610
+ - Updated dependencies [8b9d71e]
611
+ - Updated dependencies [33f5e23]
612
+ - Updated dependencies [259af21]
613
+ - Updated dependencies [840ee4b]
614
+ - Updated dependencies [587fc91]
615
+ - Updated dependencies [1986594]
616
+ - Updated dependencies [ad4af62]
617
+ - Updated dependencies [d44dbfa]
618
+ - Updated dependencies [474fe39]
619
+ - Updated dependencies [0bc685a]
620
+ - Updated dependencies [b949059]
621
+ - Updated dependencies [be1c52c]
622
+ - Updated dependencies [c5ff96d]
623
+ - Updated dependencies [84e7be9]
624
+ - Updated dependencies [a6c3f38]
625
+ - Updated dependencies [debc23a]
626
+ - Updated dependencies [0f8ad09]
627
+ - Updated dependencies [8f9689f]
628
+ - Updated dependencies [57a3bb3]
629
+ - Updated dependencies [5f9a987]
630
+ - Updated dependencies [9f060e5]
631
+ - Updated dependencies [bc17d39]
632
+ - Updated dependencies [db02d47]
633
+ - Updated dependencies [0bfdf46]
634
+ - Updated dependencies [87aca93]
635
+ - Updated dependencies [376a061]
636
+ - Updated dependencies [7c7e246]
637
+ - Updated dependencies [f35cdc5]
638
+ - Updated dependencies [9ea2bc5]
639
+ - Updated dependencies [32d3800]
640
+ - Updated dependencies [c2d9098]
641
+ - Updated dependencies [a227ed7]
642
+ - Updated dependencies [9613396]
643
+ - Updated dependencies [e47b342]
644
+ - Updated dependencies [4ed7ed4]
645
+ - Updated dependencies [2fa4ca1]
646
+ - Updated dependencies [f5a2320]
647
+ - Updated dependencies [deb538f]
648
+ - Updated dependencies [5b89711]
649
+ - Updated dependencies [0c8a22f]
650
+ - Updated dependencies [763931e]
651
+ - Updated dependencies [de9af8a]
652
+ - Updated dependencies [c4df271]
653
+ - Updated dependencies [a41ba5c]
654
+ - Updated dependencies [189854c]
655
+ - Updated dependencies [0e3a226]
656
+ - Updated dependencies [524151c]
657
+ - Updated dependencies [1d4756e]
658
+ - Updated dependencies [720c5ad]
659
+ - Updated dependencies [a8d1e24]
660
+ - Updated dependencies [d1cabaa]
661
+ - Updated dependencies [41642b0]
662
+ - Updated dependencies [4cca74c]
663
+ - Updated dependencies [88ef03e]
664
+ - Updated dependencies [9e2caf3]
665
+ - Updated dependencies [81ce41a]
666
+ - Updated dependencies [85e1e4e]
667
+ - Updated dependencies [dac6a08]
668
+ - Updated dependencies [394b7a1]
669
+ - Updated dependencies [677b591]
670
+ - Updated dependencies [d77d1b7]
671
+ - Updated dependencies [5b79a34]
672
+ - Updated dependencies [c757854]
673
+ - Updated dependencies [0045682]
674
+ - Updated dependencies [2a5f04a]
675
+ - Updated dependencies [4f740b0]
676
+ - Updated dependencies [030125b]
677
+ - Updated dependencies [67452d1]
678
+ - Updated dependencies [4921a95]
679
+ - Updated dependencies [0fc6219]
680
+ - Updated dependencies [605e190]
681
+ - Updated dependencies [c6c59f1]
682
+ - Updated dependencies [b0e78a8]
683
+ - Updated dependencies [f31cc8d]
684
+ - Updated dependencies [f343dc4]
685
+ - Updated dependencies [8269e32]
686
+ - Updated dependencies [74f7339]
687
+ - Updated dependencies [a6c35a2]
688
+ - Updated dependencies [c2f1002]
689
+ - Updated dependencies [db48ad5]
690
+ - Updated dependencies [f163028]
691
+ - Updated dependencies [f07808c]
692
+ - Updated dependencies [7ffc3d3]
693
+ - Updated dependencies [88346ba]
694
+ - Updated dependencies [4631592]
695
+ - Updated dependencies [32ff033]
696
+ - Updated dependencies [5ac93d4]
697
+ - Updated dependencies [93f267f]
698
+ - Updated dependencies [0024abf]
699
+ - Updated dependencies [acbf364]
700
+ - Updated dependencies [5487c20]
701
+ - Updated dependencies [aa8b847]
702
+ - Updated dependencies [7687f7b]
703
+ - Updated dependencies [1659072]
704
+ - Updated dependencies [abceb0d]
705
+ - Updated dependencies [0c302a7]
706
+ - Updated dependencies [6633337]
707
+ - Updated dependencies [f00d8d4]
708
+ - Updated dependencies [503be86]
709
+ - Updated dependencies [cde1975]
710
+ - Updated dependencies [0bc685a]
711
+ - Updated dependencies [c073b8c]
712
+ - Updated dependencies [11949fc]
713
+ - Updated dependencies [b098b0e]
714
+ - Updated dependencies [4d00b13]
715
+ - Updated dependencies [9aa5510]
716
+ - Updated dependencies [57bab76]
717
+ - Updated dependencies [b90086a]
718
+ - Updated dependencies [b95577a]
719
+ - Updated dependencies [83c161f]
720
+ - Updated dependencies [d8c4957]
721
+ - Updated dependencies [f24cb83]
722
+ - Updated dependencies [5dbbb92]
723
+ - Updated dependencies [69f1dfd]
724
+ - @objectstack/spec@17.0.0-rc.0
725
+ - @objectstack/platform-objects@17.0.0-rc.0
726
+ - @objectstack/core@17.0.0-rc.0
727
+ - @objectstack/types@17.0.0-rc.0
728
+ - @objectstack/metadata-core@17.0.0-rc.0
729
+ - @objectstack/metadata-fs@17.0.0-rc.0
730
+
731
+ ## 16.1.0
732
+
733
+ ### Patch Changes
734
+
735
+ - Updated dependencies [212b66a]
736
+ - Updated dependencies [d10c4dc]
737
+ - Updated dependencies [9e45b63]
738
+ - Updated dependencies [b20201f]
739
+ - @objectstack/platform-objects@16.1.0
740
+ - @objectstack/spec@16.1.0
741
+ - @objectstack/core@16.1.0
742
+ - @objectstack/metadata-core@16.1.0
743
+ - @objectstack/types@16.1.0
744
+ - @objectstack/metadata-fs@16.1.0
745
+
746
+ ## 16.0.0
747
+
748
+ ### Patch Changes
749
+
750
+ - fdc244e: Dev-loop DX fixes from the 15.1 third-party evaluation (P2 batch):
751
+
752
+ - **Hot-added objects are now queryable without a restart.** Adding a `*.object.ts` under `os dev` used to recompile "green" while every query answered `no such table` (or `not registered`) until a manual restart: the artifact reload never notified the ObjectQL registry, tables were only created at boot, and seeds only loaded from the boot-time bundle. The `metadata:reloaded` payload now carries the parsed artifact; ObjectQL ingests the object definitions and re-runs the idempotent schema sync (same `skipSchemaSync` opt-out as boot), and the runtime loads seeds for first-seen objects (dev, single-tenant). `os dev` also prints `✚ new object(s): …` on recompile.
753
+ - **Dev admin credentials stay visible.** The `os dev` startup banner only showed `admin@objectos.ai / admin123` on the boot that actually seeded it; with the persistent default DB every later boot hid it, and the Console login page never knew it existed. The hint now re-arms on every dev boot for as long as the account still verifies against the default password, and `GET /api/v1/auth/config` exposes a dev-gated `devSeedAdmin` field (never present outside `NODE_ENV=development`) so the login page can show it.
754
+ - **`os doctor` reference analysis understands current metadata shapes.** Objects bound through `defineView` containers (`list`/`listViews`/`form`/`formViews` → `data.object`, subform `childObject`, lookup form fields) and app navigation (`objectName`, nested `children`, `areas`) were reported as "defined but not referenced". The collector now walks the canonical shapes (plus flow node `config.object`/`objectName`) and the orphan-view check descends into containers.
755
+
756
+ - d2723e2: **`MetadataManager.register()` / `unregister()` now announce to `subscribe()` watchers.** Both updated the registry, persisted to writable loaders and published to realtime, but never fired the watch callbacks — so `subscribe()` looked like it covered every write while silently missing all of them. Only the `saveMetaItem` path (via the repository watch stream) and the filesystem watcher ever reached a subscriber. Runtime consumers that cache metadata — notably ObjectQL's SchemaRegistry bridge, the component that decides what is queryable — went stale on every other write until the process restarted.
757
+
758
+ Announcing is now the **default**, so a new call site is correct without knowing this contract exists. This is a contract fix rather than a bug fix: the one live behavior change is that runtime datasource writes (`datasource-admin`) now reach the HMR SSE stream, which subscribes to every registered type. `unregisterPackage()` / `bulkUnregister()` also announce their deletes now — correct, but latent, since neither has a production caller today.
759
+
760
+ Bulk ingest opts out explicitly with the new `MetadataWriteOptions` (`{ notify: false }`) — boot-time filesystem priming, artifact ingest, and ObjectQL's registry bridge, each of which either runs before consumers cache anything or announces the whole batch once (as the artifact reload path does via `metadata:reloaded`). The bridge in particular MUST stay silent: it copies objects out of the SchemaRegistry, and announcing would feed them back through a handler that re-registers under `_packageId ?? 'metadata-service'`, overwriting the true package provenance of every object whose body carries no `_packageId`.
761
+
762
+ Additive only — `register(type, name, data)` and `unregister(type, name)` keep working unchanged.
763
+
764
+ Fixes #3112.
765
+
766
+ - Updated dependencies [f972574]
767
+ - Updated dependencies [6289ec3]
768
+ - Updated dependencies [22013aa]
769
+ - Updated dependencies [3ad3dd5]
770
+ - Updated dependencies [8efa395]
771
+ - Updated dependencies [3a18b60]
772
+ - Updated dependencies [a8aa34c]
773
+ - Updated dependencies [e057f42]
774
+ - Updated dependencies [a3823b2]
775
+ - Updated dependencies [bc65105]
776
+ - Updated dependencies [43a3efb]
777
+ - Updated dependencies [524696a]
778
+ - Updated dependencies [bfa3c3f]
779
+ - Updated dependencies [5e3301d]
780
+ - Updated dependencies [dd9f223]
781
+ - Updated dependencies [46e876c]
782
+ - Updated dependencies [5f05de2]
783
+ - Updated dependencies [021ba4c]
784
+ - Updated dependencies [158aa14]
785
+ - Updated dependencies [62a2117]
786
+ - Updated dependencies [83e8f7d]
787
+ - Updated dependencies [d2723e2]
788
+ - Updated dependencies [fefcd54]
789
+ - Updated dependencies [beaf2de]
790
+ - Updated dependencies [06cb319]
791
+ - Updated dependencies [369eb6e]
792
+ - Updated dependencies [06ff734]
793
+ - Updated dependencies [b659111]
794
+ - Updated dependencies [5754a23]
795
+ - Updated dependencies [6c270a6]
796
+ - Updated dependencies [290e2f0]
797
+ - Updated dependencies [668dd17]
798
+ - Updated dependencies [8abf133]
799
+ - Updated dependencies [e0859b1]
800
+ - Updated dependencies [92f5f19]
801
+ - Updated dependencies [32899e6]
802
+ - Updated dependencies [04ecd4e]
803
+ - Updated dependencies [4d5a892]
804
+ - Updated dependencies [16cebeb]
805
+ - Updated dependencies [86d30af]
806
+ - Updated dependencies [8923843]
807
+ - Updated dependencies [a2795f6]
808
+ - Updated dependencies [f16b492]
809
+ - Updated dependencies [4b6fde8]
810
+ - Updated dependencies [2018df9]
811
+ - Updated dependencies [fc5a3a2]
812
+ - Updated dependencies [8ff9210]
813
+ - @objectstack/spec@16.0.0
814
+ - @objectstack/platform-objects@16.0.0
815
+ - @objectstack/core@16.0.0
816
+ - @objectstack/metadata-core@16.0.0
817
+ - @objectstack/types@16.0.0
818
+ - @objectstack/metadata-fs@16.0.0
819
+
820
+ ## 16.0.0-rc.1
821
+
822
+ ### Patch Changes
823
+
824
+ - Updated dependencies [6289ec3]
825
+ - Updated dependencies [8efa395]
826
+ - Updated dependencies [bfa3c3f]
827
+ - Updated dependencies [62a2117]
828
+ - Updated dependencies [06ff734]
829
+ - @objectstack/spec@16.0.0-rc.1
830
+ - @objectstack/platform-objects@16.0.0-rc.1
831
+ - @objectstack/metadata-core@16.0.0-rc.1
832
+ - @objectstack/core@16.0.0-rc.1
833
+ - @objectstack/types@16.0.0-rc.1
834
+ - @objectstack/metadata-fs@16.0.0-rc.1
835
+
836
+ ## 16.0.0-rc.0
837
+
838
+ ### Patch Changes
839
+
840
+ - fdc244e: Dev-loop DX fixes from the 15.1 third-party evaluation (P2 batch):
841
+
842
+ - **Hot-added objects are now queryable without a restart.** Adding a `*.object.ts` under `os dev` used to recompile "green" while every query answered `no such table` (or `not registered`) until a manual restart: the artifact reload never notified the ObjectQL registry, tables were only created at boot, and seeds only loaded from the boot-time bundle. The `metadata:reloaded` payload now carries the parsed artifact; ObjectQL ingests the object definitions and re-runs the idempotent schema sync (same `skipSchemaSync` opt-out as boot), and the runtime loads seeds for first-seen objects (dev, single-tenant). `os dev` also prints `✚ new object(s): …` on recompile.
843
+ - **Dev admin credentials stay visible.** The `os dev` startup banner only showed `admin@objectos.ai / admin123` on the boot that actually seeded it; with the persistent default DB every later boot hid it, and the Console login page never knew it existed. The hint now re-arms on every dev boot for as long as the account still verifies against the default password, and `GET /api/v1/auth/config` exposes a dev-gated `devSeedAdmin` field (never present outside `NODE_ENV=development`) so the login page can show it.
844
+ - **`os doctor` reference analysis understands current metadata shapes.** Objects bound through `defineView` containers (`list`/`listViews`/`form`/`formViews` → `data.object`, subform `childObject`, lookup form fields) and app navigation (`objectName`, nested `children`, `areas`) were reported as "defined but not referenced". The collector now walks the canonical shapes (plus flow node `config.object`/`objectName`) and the orphan-view check descends into containers.
845
+
846
+ - d2723e2: **`MetadataManager.register()` / `unregister()` now announce to `subscribe()` watchers.** Both updated the registry, persisted to writable loaders and published to realtime, but never fired the watch callbacks — so `subscribe()` looked like it covered every write while silently missing all of them. Only the `saveMetaItem` path (via the repository watch stream) and the filesystem watcher ever reached a subscriber. Runtime consumers that cache metadata — notably ObjectQL's SchemaRegistry bridge, the component that decides what is queryable — went stale on every other write until the process restarted.
847
+
848
+ Announcing is now the **default**, so a new call site is correct without knowing this contract exists. This is a contract fix rather than a bug fix: the one live behavior change is that runtime datasource writes (`datasource-admin`) now reach the HMR SSE stream, which subscribes to every registered type. `unregisterPackage()` / `bulkUnregister()` also announce their deletes now — correct, but latent, since neither has a production caller today.
849
+
850
+ Bulk ingest opts out explicitly with the new `MetadataWriteOptions` (`{ notify: false }`) — boot-time filesystem priming, artifact ingest, and ObjectQL's registry bridge, each of which either runs before consumers cache anything or announces the whole batch once (as the artifact reload path does via `metadata:reloaded`). The bridge in particular MUST stay silent: it copies objects out of the SchemaRegistry, and announcing would feed them back through a handler that re-registers under `_packageId ?? 'metadata-service'`, overwriting the true package provenance of every object whose body carries no `_packageId`.
851
+
852
+ Additive only — `register(type, name, data)` and `unregister(type, name)` keep working unchanged.
853
+
854
+ Fixes #3112.
855
+
856
+ - Updated dependencies [f972574]
857
+ - Updated dependencies [22013aa]
858
+ - Updated dependencies [3ad3dd5]
859
+ - Updated dependencies [3a18b60]
860
+ - Updated dependencies [a8aa34c]
861
+ - Updated dependencies [e057f42]
862
+ - Updated dependencies [a3823b2]
863
+ - Updated dependencies [bc65105]
864
+ - Updated dependencies [43a3efb]
865
+ - Updated dependencies [524696a]
866
+ - Updated dependencies [5e3301d]
867
+ - Updated dependencies [dd9f223]
868
+ - Updated dependencies [46e876c]
869
+ - Updated dependencies [5f05de2]
870
+ - Updated dependencies [021ba4c]
871
+ - Updated dependencies [158aa14]
872
+ - Updated dependencies [83e8f7d]
873
+ - Updated dependencies [d2723e2]
874
+ - Updated dependencies [fefcd54]
875
+ - Updated dependencies [beaf2de]
876
+ - Updated dependencies [06cb319]
877
+ - Updated dependencies [369eb6e]
878
+ - Updated dependencies [b659111]
879
+ - Updated dependencies [5754a23]
880
+ - Updated dependencies [6c270a6]
881
+ - Updated dependencies [290e2f0]
882
+ - Updated dependencies [668dd17]
883
+ - Updated dependencies [8abf133]
884
+ - Updated dependencies [e0859b1]
885
+ - Updated dependencies [92f5f19]
886
+ - Updated dependencies [32899e6]
887
+ - Updated dependencies [04ecd4e]
888
+ - Updated dependencies [4d5a892]
889
+ - Updated dependencies [16cebeb]
890
+ - Updated dependencies [86d30af]
891
+ - Updated dependencies [8923843]
892
+ - Updated dependencies [a2795f6]
893
+ - Updated dependencies [f16b492]
894
+ - Updated dependencies [4b6fde8]
895
+ - Updated dependencies [2018df9]
896
+ - Updated dependencies [fc5a3a2]
897
+ - @objectstack/spec@16.0.0-rc.0
898
+ - @objectstack/platform-objects@16.0.0-rc.0
899
+ - @objectstack/core@16.0.0-rc.0
900
+ - @objectstack/types@16.0.0-rc.0
901
+ - @objectstack/metadata-core@16.0.0-rc.0
902
+ - @objectstack/metadata-fs@16.0.0-rc.0
903
+
904
+ ## 15.1.1
905
+
906
+ ### Patch Changes
907
+
908
+ - @objectstack/spec@15.1.1
909
+ - @objectstack/core@15.1.1
910
+ - @objectstack/types@15.1.1
911
+ - @objectstack/metadata-core@15.1.1
912
+ - @objectstack/metadata-fs@15.1.1
913
+ - @objectstack/platform-objects@15.1.1
914
+
915
+ ## 15.1.0
916
+
917
+ ### Patch Changes
918
+
919
+ - Updated dependencies [f531a26]
920
+ - Updated dependencies [f531a26]
921
+ - Updated dependencies [f531a26]
922
+ - Updated dependencies [f531a26]
923
+ - Updated dependencies [f531a26]
924
+ - Updated dependencies [f531a26]
925
+ - Updated dependencies [3fe9df1]
926
+ - Updated dependencies [f531a26]
927
+ - Updated dependencies [f531a26]
928
+ - Updated dependencies [f531a26]
929
+ - Updated dependencies [f531a26]
930
+ - Updated dependencies [f531a26]
931
+ - Updated dependencies [f531a26]
932
+ - Updated dependencies [f531a26]
933
+ - Updated dependencies [f531a26]
934
+ - Updated dependencies [f531a26]
935
+ - Updated dependencies [f531a26]
936
+ - Updated dependencies [f531a26]
937
+ - Updated dependencies [f531a26]
938
+ - Updated dependencies [f531a26]
939
+ - Updated dependencies [f531a26]
940
+ - Updated dependencies [f531a26]
941
+ - Updated dependencies [4109153]
942
+ - Updated dependencies [f531a26]
943
+ - Updated dependencies [f531a26]
944
+ - Updated dependencies [f531a26]
945
+ - Updated dependencies [f531a26]
946
+ - Updated dependencies [f531a26]
947
+ - Updated dependencies [f531a26]
948
+ - Updated dependencies [f531a26]
949
+ - Updated dependencies [f531a26]
950
+ - Updated dependencies [627f225]
951
+ - Updated dependencies [f531a26]
952
+ - Updated dependencies [f531a26]
953
+ - Updated dependencies [f531a26]
954
+ - @objectstack/spec@15.1.0
955
+ - @objectstack/platform-objects@15.1.0
956
+ - @objectstack/core@15.1.0
957
+ - @objectstack/types@15.1.0
958
+ - @objectstack/metadata-core@15.1.0
959
+ - @objectstack/metadata-fs@15.1.0
960
+
961
+ ## 15.0.0
962
+
963
+ ### Patch Changes
964
+
965
+ - Updated dependencies [02a014b]
966
+ - Updated dependencies [28b7c28]
967
+ - Updated dependencies [13749ec]
968
+ - Updated dependencies [e62c233]
969
+ - Updated dependencies [ed61c9b]
970
+ - Updated dependencies [31d04d4]
971
+ - @objectstack/platform-objects@15.0.0
972
+ - @objectstack/spec@15.0.0
973
+ - @objectstack/core@15.0.0
974
+ - @objectstack/metadata-core@15.0.0
975
+ - @objectstack/types@15.0.0
976
+ - @objectstack/metadata-fs@15.0.0
977
+
978
+ ## 14.8.0
979
+
980
+ ### Patch Changes
981
+
982
+ - Updated dependencies [16b4bf6]
983
+ - Updated dependencies [16b4bf6]
984
+ - Updated dependencies [10e8983]
985
+ - Updated dependencies [607aaf4]
986
+ - Updated dependencies [bb71321]
987
+ - @objectstack/spec@14.8.0
988
+ - @objectstack/platform-objects@14.8.0
989
+ - @objectstack/core@14.8.0
990
+ - @objectstack/metadata-core@14.8.0
991
+ - @objectstack/types@14.8.0
992
+ - @objectstack/metadata-fs@14.8.0
993
+
994
+ ## 14.7.0
995
+
996
+ ### Patch Changes
997
+
998
+ - Updated dependencies [d6a72eb]
999
+ - Updated dependencies [824a395]
1000
+ - @objectstack/spec@14.7.0
1001
+ - @objectstack/types@14.7.0
1002
+ - @objectstack/core@14.7.0
1003
+ - @objectstack/metadata-core@14.7.0
1004
+ - @objectstack/platform-objects@14.7.0
1005
+ - @objectstack/metadata-fs@14.7.0
1006
+
1007
+ ## 14.6.0
1008
+
1009
+ ### Patch Changes
1010
+
1011
+ - Updated dependencies [609cb13]
1012
+ - Updated dependencies [ce6d151]
1013
+ - @objectstack/spec@14.6.0
1014
+ - @objectstack/platform-objects@14.6.0
1015
+ - @objectstack/core@14.6.0
1016
+ - @objectstack/metadata-core@14.6.0
1017
+ - @objectstack/types@14.6.0
1018
+ - @objectstack/metadata-fs@14.6.0
1019
+
1020
+ ## 14.5.0
1021
+
1022
+ ### Patch Changes
1023
+
1024
+ - Updated dependencies [526805e]
1025
+ - Updated dependencies [d79ca07]
1026
+ - Updated dependencies [33ebd34]
1027
+ - Updated dependencies [c044f08]
1028
+ - Updated dependencies [01274eb]
1029
+ - Updated dependencies [8f23746]
1030
+ - Updated dependencies [b97af7e]
1031
+ - Updated dependencies [6da03ee]
1032
+ - @objectstack/spec@14.5.0
1033
+ - @objectstack/platform-objects@14.5.0
1034
+ - @objectstack/core@14.5.0
1035
+ - @objectstack/metadata-core@14.5.0
1036
+ - @objectstack/types@14.5.0
1037
+ - @objectstack/metadata-fs@14.5.0
1038
+
1039
+ ## 14.4.0
1040
+
1041
+ ### Patch Changes
1042
+
1043
+ - Updated dependencies [7953832]
1044
+ - Updated dependencies [82e745e]
1045
+ - Updated dependencies [f3035bd]
1046
+ - Updated dependencies [82c0d94]
1047
+ - Updated dependencies [7449476]
1048
+ - @objectstack/spec@14.4.0
1049
+ - @objectstack/platform-objects@14.4.0
1050
+ - @objectstack/metadata-core@14.4.0
1051
+ - @objectstack/core@14.4.0
1052
+ - @objectstack/types@14.4.0
1053
+ - @objectstack/metadata-fs@14.4.0
1054
+
1055
+ ## 14.3.0
1056
+
1057
+ ### Minor Changes
1058
+
1059
+ - 02f6af4: ADR-0090 follow-through wave: enforce book audience at the read layer; finish the D2/D3 cleanup the P1 rename missed.
1060
+
1061
+ - **rest**: `/meta/book`, `/meta/doc`, and `/meta/book/:name/tree` now ENFORCE
1062
+ the ADR-0046 §6.7 audience model (ADR-0049 — no unenforced security
1063
+ properties): anonymous callers see only `public` books/docs;
1064
+ `{ permissionSet }`-gated books require the caller to hold the named set;
1065
+ a doc's effective audience is the union over the books that CLAIM it
1066
+ (unclaimed docs default to `org`; orphan rendering never inherits `public`).
1067
+ Gated evaluation fails CLOSED when holdings cannot be resolved. `doc`/`book`
1068
+ single-item reads bypass the shared meta cache (per-caller gate vs shared ETag).
1069
+ - **spec**: new pure helpers powering that gate — `audienceAllows`,
1070
+ `resolveDocAudiences`, `docAudienceAllows`, `resolveBookClaimedDocs`
1071
+ (+ `AudienceCaller`/`AudienceBook` types). BREAKING but ships as a `minor`
1072
+ per the launch-window convention (pre-1.0 semantics — breaking changes do
1073
+ not burn a major version number while the whole stack is in lockstep):
1074
+ `METADATA_FORM_REGISTRY` keys `role`/`profile` are gone — `position` is the
1075
+ registered form (the `position` type had LOST its form layout in the P1
1076
+ rename); `EnvironmentArtifactMetadataSchema` declares `positions` instead of
1077
+ retired `roles`/`profiles`.
1078
+ - **plugin-security**: the `security` service exposes
1079
+ `resolvePermissionSetNames(ctx)` — the same resolution as data-plane
1080
+ enforcement, for the docs gate.
1081
+ - **metadata**: artifact ingestion maps `positions → 'position'` (the stale
1082
+ `roles → 'role'` mapping matched nothing since the P1 rename, silently
1083
+ dropping compiled positions from metadata registration).
1084
+ - **lint**: books join the D3 role-word scan (their `audience` is a
1085
+ permission-model reference now), and a new advisory rule
1086
+ `security-book-audience-unknown-set` flags a `{ permissionSet }` audience
1087
+ naming a set the stack does not declare (runtime fails closed — the typo
1088
+ cost is "nobody can read the book", so say it at author time).
1089
+ - **platform-objects**: metadata-form translations regain `position` (all four
1090
+ locales) and drop the retired `role`/`profile` groups, with a vocabulary
1091
+ regression test.
1092
+
1093
+ ### Patch Changes
1094
+
1095
+ - Updated dependencies [2a71f48]
1096
+ - Updated dependencies [02f6af4]
1097
+ - Updated dependencies [c1064f1]
1098
+ - @objectstack/platform-objects@14.3.0
1099
+ - @objectstack/spec@14.3.0
1100
+ - @objectstack/core@14.3.0
1101
+ - @objectstack/metadata-core@14.3.0
1102
+ - @objectstack/types@14.3.0
1103
+ - @objectstack/metadata-fs@14.3.0
1104
+
1105
+ ## 14.2.0
1106
+
1107
+ ### Patch Changes
1108
+
1109
+ - Updated dependencies [ac8f029]
1110
+ - Updated dependencies [4ab9958]
1111
+ - @objectstack/spec@14.2.0
1112
+ - @objectstack/platform-objects@14.2.0
1113
+ - @objectstack/core@14.2.0
1114
+ - @objectstack/metadata-core@14.2.0
1115
+ - @objectstack/types@14.2.0
1116
+ - @objectstack/metadata-fs@14.2.0
1117
+
1118
+ ## 14.1.0
1119
+
1120
+ ### Patch Changes
1121
+
1122
+ - Updated dependencies [5a8465f]
1123
+ - Updated dependencies [7f8620b]
1124
+ - Updated dependencies [82ba3a6]
1125
+ - @objectstack/spec@14.1.0
1126
+ - @objectstack/core@14.1.0
1127
+ - @objectstack/metadata-core@14.1.0
1128
+ - @objectstack/platform-objects@14.1.0
1129
+ - @objectstack/types@14.1.0
1130
+ - @objectstack/metadata-fs@14.1.0
1131
+
1132
+ ## 14.0.0
1133
+
1134
+ ### Patch Changes
1135
+
1136
+ - Updated dependencies [0a8e685]
1137
+ - Updated dependencies [afa8115]
1138
+ - Updated dependencies [80f12ca]
1139
+ - Updated dependencies [332b711]
1140
+ - Updated dependencies [e2fa074]
1141
+ - Updated dependencies [23c8668]
1142
+ - Updated dependencies [29f017d]
1143
+ - Updated dependencies [216fa9a]
1144
+ - Updated dependencies [6c22b12]
1145
+ - Updated dependencies [d0531c4]
1146
+ - Updated dependencies [cff5aac]
1147
+ - @objectstack/spec@14.0.0
1148
+ - @objectstack/platform-objects@14.0.0
1149
+ - @objectstack/core@14.0.0
1150
+ - @objectstack/metadata-core@14.0.0
1151
+ - @objectstack/types@14.0.0
1152
+ - @objectstack/metadata-fs@14.0.0
1153
+
1154
+ ## 13.0.0
1155
+
1156
+ ### Major Changes
1157
+
1158
+ - 6d83431: ADR-0090 P1 breaking wave — permission model v2 concept convergence.
1159
+
1160
+ Pre-launch one-step renames and secure defaults (no compatibility aliases, per
1161
+ ADR-0090 D3/D4 superseding ADR-0057 D5/D7's alias discipline):
1162
+
1163
+ - `sys_role` → `sys_position`, `sys_user_role` → `sys_user_position` (field
1164
+ `role` → `position`), `sys_role_permission_set` → `sys_position_permission_set`
1165
+ (field `role_id` → `position_id`); `RoleSchema`/`defineRole` →
1166
+ `PositionSchema`/`definePosition` with **no `parent`** (positions are flat;
1167
+ hierarchy lives on the business-unit tree).
1168
+ - `ExecutionContext.roles[]` → `positions[]`; the EvalUser/CEL contract
1169
+ `current_user.roles` → `current_user.positions` (formula validators updated);
1170
+ stack property `roles:` → `positions:`; metadata kinds `role`/`profile` →
1171
+ `position` (profile kind removed).
1172
+ - `isProfile` removed from `PermissionSetSchema` (ADR-0090 D2); `isDefault`
1173
+ narrows to an install-time suggestion; `appDefaultProfileName` →
1174
+ `appDefaultPermissionSetName` (isDefault-only).
1175
+ - OWD enum drops legacy aliases `read`/`read_write`/`full`; new optional
1176
+ `externalSharingModel` (external dial, `private` default) lands as P1 spec
1177
+ shape (ADR-0090 D11).
1178
+ - **Secure default (D1)**: a custom object with an owner field and NO
1179
+ `sharingModel` now resolves `private` (was: fully public). System objects
1180
+ keep their explicit posture. Unrecognised stored values fail closed.
1181
+ - ExecutionContext gains the P1 principal-taxonomy shape (D10):
1182
+ `principalKind` / `audience` / `onBehalfOf` (optional, semantics phase in
1183
+ later).
1184
+ - Sharing recipients: `role` → `position` (expanded via `sys_user_position`
1185
+ ∪ the better-auth membership transition source); `role_and_subordinates`
1186
+ removed — `unit_and_subordinates` now expands the business-unit subtree
1187
+ (finishes ADR-0057 D5's re-homing).
1188
+
1189
+ ### Patch Changes
1190
+
1191
+ - Updated dependencies [6d83431]
1192
+ - Updated dependencies [01917c2]
1193
+ - Updated dependencies [b271691]
1194
+ - Updated dependencies [a5a1e41]
1195
+ - Updated dependencies [466adf6]
1196
+ - Updated dependencies [57b89b4]
1197
+ - Updated dependencies [5be00c3]
1198
+ - Updated dependencies [466adf6]
1199
+ - Updated dependencies [2bee609]
1200
+ - Updated dependencies [9fa84f9]
1201
+ - Updated dependencies [fc7e7f7]
1202
+ - @objectstack/spec@13.0.0
1203
+ - @objectstack/core@13.0.0
1204
+ - @objectstack/platform-objects@13.0.0
1205
+ - @objectstack/types@13.0.0
1206
+ - @objectstack/metadata-core@13.0.0
1207
+ - @objectstack/metadata-fs@13.0.0
1208
+
1209
+ ## 12.6.0
1210
+
1211
+ ### Patch Changes
1212
+
1213
+ - Updated dependencies [6cebf22]
1214
+ - Updated dependencies [21420d9]
1215
+ - @objectstack/spec@12.6.0
1216
+ - @objectstack/core@12.6.0
1217
+ - @objectstack/metadata-core@12.6.0
1218
+ - @objectstack/platform-objects@12.6.0
1219
+ - @objectstack/types@12.6.0
1220
+ - @objectstack/metadata-fs@12.6.0
1221
+
1222
+ ## 12.5.0
1223
+
1224
+ ### Patch Changes
1225
+
1226
+ - Updated dependencies [8b3d363]
1227
+ - @objectstack/spec@12.5.0
1228
+ - @objectstack/core@12.5.0
1229
+ - @objectstack/metadata-core@12.5.0
1230
+ - @objectstack/platform-objects@12.5.0
1231
+ - @objectstack/types@12.5.0
1232
+ - @objectstack/metadata-fs@12.5.0
1233
+
1234
+ ## 12.4.0
1235
+
1236
+ ### Patch Changes
1237
+
1238
+ - Updated dependencies [60dc3ba]
1239
+ - @objectstack/spec@12.4.0
1240
+ - @objectstack/metadata-core@12.4.0
1241
+ - @objectstack/core@12.4.0
1242
+ - @objectstack/platform-objects@12.4.0
1243
+ - @objectstack/types@12.4.0
1244
+ - @objectstack/metadata-fs@12.4.0
1245
+
1246
+ ## 12.3.0
1247
+
1248
+ ### Patch Changes
1249
+
1250
+ - Updated dependencies [e7eceec]
1251
+ - @objectstack/spec@12.3.0
1252
+ - @objectstack/core@12.3.0
1253
+ - @objectstack/metadata-core@12.3.0
1254
+ - @objectstack/platform-objects@12.3.0
1255
+ - @objectstack/types@12.3.0
1256
+ - @objectstack/metadata-fs@12.3.0
1257
+
1258
+ ## 12.2.0
1259
+
1260
+ ### Patch Changes
1261
+
1262
+ - Updated dependencies [fce8ff4]
1263
+ - Updated dependencies [3962023]
1264
+ - Updated dependencies [2bb193d]
1265
+ - Updated dependencies [0426d27]
1266
+ - Updated dependencies [da807f7]
1267
+ - Updated dependencies [4f5b791]
1268
+ - @objectstack/spec@12.2.0
1269
+ - @objectstack/metadata-core@12.2.0
1270
+ - @objectstack/core@12.2.0
1271
+ - @objectstack/platform-objects@12.2.0
1272
+ - @objectstack/types@12.2.0
1273
+ - @objectstack/metadata-fs@12.2.0
1274
+
1275
+ ## 12.1.0
1276
+
1277
+ ### Patch Changes
1278
+
1279
+ - Updated dependencies [93e6d02]
1280
+ - @objectstack/spec@12.1.0
1281
+ - @objectstack/core@12.1.0
1282
+ - @objectstack/metadata-core@12.1.0
1283
+ - @objectstack/platform-objects@12.1.0
1284
+ - @objectstack/types@12.1.0
1285
+ - @objectstack/metadata-fs@12.1.0
1286
+
1287
+ ## 12.0.0
1288
+
1289
+ ### Patch Changes
1290
+
1291
+ - 9860de4: Surface view-key collisions during view container expansion instead of renaming silently.
1292
+
1293
+ `expandViewContainer` keeps its backward-compatible rename behaviour (`<object>.<key>` →
1294
+ `<object>.<key>_2` on collision) but now stamps a machine-readable
1295
+ `_diagnostics.warnings` entry on the renamed `ExpandedViewItem`, explaining that
1296
+ references targeting the requested name (form action targets, navigation `viewName`s)
1297
+ will resolve to the _other_ view. Both flattening loaders — the ObjectQL engine and the
1298
+ MetadataPlugin — log these warnings at boot so the collision is visible instead of
1299
+ manifesting as a form action opening a list view (#2554).
1300
+
1301
+ - Updated dependencies [a8df396]
1302
+ - Updated dependencies [e695fe0]
1303
+ - Updated dependencies [07f055c]
1304
+ - Updated dependencies [7c09621]
1305
+ - Updated dependencies [7709db4]
1306
+ - Updated dependencies [2082109]
1307
+ - Updated dependencies [7c09621]
1308
+ - Updated dependencies [9860de4]
1309
+ - Updated dependencies [069c205]
1310
+ - @objectstack/spec@12.0.0
1311
+ - @objectstack/platform-objects@12.0.0
1312
+ - @objectstack/core@12.0.0
1313
+ - @objectstack/metadata-core@12.0.0
1314
+ - @objectstack/types@12.0.0
1315
+ - @objectstack/metadata-fs@12.0.0
1316
+
1317
+ ## 11.10.0
1318
+
1319
+ ### Patch Changes
1320
+
1321
+ - Updated dependencies [6a9397e]
1322
+ - Updated dependencies [c0efe5d]
1323
+ - @objectstack/spec@11.10.0
1324
+ - @objectstack/core@11.10.0
1325
+ - @objectstack/metadata-core@11.10.0
1326
+ - @objectstack/platform-objects@11.10.0
1327
+ - @objectstack/types@11.10.0
1328
+ - @objectstack/metadata-fs@11.10.0
1329
+
1330
+ ## 11.9.0
1331
+
1332
+ ### Patch Changes
1333
+
1334
+ - Updated dependencies [d3595d9]
1335
+ - @objectstack/spec@11.9.0
1336
+ - @objectstack/core@11.9.0
1337
+ - @objectstack/metadata-core@11.9.0
1338
+ - @objectstack/platform-objects@11.9.0
1339
+ - @objectstack/types@11.9.0
1340
+ - @objectstack/metadata-fs@11.9.0
1341
+
1342
+ ## 11.8.0
1343
+
1344
+ ### Patch Changes
1345
+
1346
+ - Updated dependencies [53d491a]
1347
+ - Updated dependencies [b84726b]
1348
+ - @objectstack/platform-objects@11.8.0
1349
+ - @objectstack/spec@11.8.0
1350
+ - @objectstack/core@11.8.0
1351
+ - @objectstack/types@11.8.0
1352
+ - @objectstack/metadata-core@11.8.0
1353
+ - @objectstack/metadata-fs@11.8.0
1354
+
1355
+ ## 11.7.0
1356
+
1357
+ ### Patch Changes
1358
+
1359
+ - Updated dependencies [5178906]
1360
+ - @objectstack/spec@11.7.0
1361
+ - @objectstack/platform-objects@11.7.0
1362
+ - @objectstack/core@11.7.0
1363
+ - @objectstack/metadata-core@11.7.0
1364
+ - @objectstack/types@11.7.0
1365
+ - @objectstack/metadata-fs@11.7.0
1366
+
1367
+ ## 11.6.0
1368
+
1369
+ ### Patch Changes
1370
+
1371
+ - @objectstack/spec@11.6.0
1372
+ - @objectstack/core@11.6.0
1373
+ - @objectstack/types@11.6.0
1374
+ - @objectstack/metadata-core@11.6.0
1375
+ - @objectstack/metadata-fs@11.6.0
1376
+ - @objectstack/platform-objects@11.6.0
1377
+
1378
+ ## 11.5.0
1379
+
1380
+ ### Patch Changes
1381
+
1382
+ - Updated dependencies [6ee4f04]
1383
+ - Updated dependencies [c1e3a65]
1384
+ - @objectstack/spec@11.5.0
1385
+ - @objectstack/core@11.5.0
1386
+ - @objectstack/metadata-core@11.5.0
1387
+ - @objectstack/platform-objects@11.5.0
1388
+ - @objectstack/types@11.5.0
1389
+ - @objectstack/metadata-fs@11.5.0
1390
+
1391
+ ## 11.4.0
1392
+
1393
+ ### Patch Changes
1394
+
1395
+ - Updated dependencies [5821c51]
1396
+ - Updated dependencies [a0fce3f]
1397
+ - @objectstack/spec@11.4.0
1398
+ - @objectstack/core@11.4.0
1399
+ - @objectstack/metadata-core@11.4.0
1400
+ - @objectstack/platform-objects@11.4.0
1401
+ - @objectstack/types@11.4.0
1402
+ - @objectstack/metadata-fs@11.4.0
1403
+
1404
+ ## 11.3.0
1405
+
1406
+ ### Patch Changes
1407
+
1408
+ - Updated dependencies [58e8e31]
1409
+ - Updated dependencies [b4a5df0]
1410
+ - @objectstack/spec@11.3.0
1411
+ - @objectstack/core@11.3.0
1412
+ - @objectstack/metadata-core@11.3.0
1413
+ - @objectstack/platform-objects@11.3.0
1414
+ - @objectstack/types@11.3.0
1415
+ - @objectstack/metadata-fs@11.3.0
1416
+
1417
+ ## 11.2.0
1418
+
1419
+ ### Patch Changes
1420
+
1421
+ - Updated dependencies [d0f4b13]
1422
+ - Updated dependencies [302bdab]
1423
+ - @objectstack/spec@11.2.0
1424
+ - @objectstack/core@11.2.0
1425
+ - @objectstack/metadata-core@11.2.0
1426
+ - @objectstack/platform-objects@11.2.0
1427
+ - @objectstack/types@11.2.0
1428
+ - @objectstack/metadata-fs@11.2.0
1429
+
1430
+ ## 11.1.0
1431
+
1432
+ ### Patch Changes
1433
+
1434
+ - Updated dependencies [cbc8c02]
1435
+ - Updated dependencies [07c2773]
1436
+ - Updated dependencies [d7a88df]
1437
+ - Updated dependencies [4f8f108]
1438
+ - Updated dependencies [ce0b4f6]
1439
+ - Updated dependencies [90bce88]
1440
+ - Updated dependencies [3209ec6]
1441
+ - Updated dependencies [e011d42]
1442
+ - Updated dependencies [6e5bdd5]
1443
+ - Updated dependencies [9ccfcd6]
1444
+ - Updated dependencies [ecf193f]
1445
+ - Updated dependencies [51bec81]
1446
+ - Updated dependencies [3e593a7]
1447
+ - Updated dependencies [fdb41c0]
1448
+ - Updated dependencies [63d5403]
1449
+ - @objectstack/platform-objects@11.1.0
1450
+ - @objectstack/core@11.1.0
1451
+ - @objectstack/spec@11.1.0
1452
+ - @objectstack/types@11.1.0
1453
+ - @objectstack/metadata-core@11.1.0
1454
+ - @objectstack/metadata-fs@11.1.0
1455
+
1456
+ ## 11.0.0
1457
+
1458
+ ### Patch Changes
1459
+
1460
+ - 4b5ec6e: fix(automation): re-bind scheduled-flow jobs on `os dev` hot-reload
1461
+
1462
+ Editing a schedule-triggered flow under `objectstack dev` silently kept firing
1463
+ the OLD definition until a full server restart. The dev watcher recompiles
1464
+ `dist/objectstack.json` and MetadataPlugin reloads it into the MetadataManager
1465
+ (so GET /meta reads + UI HMR are fresh), but the AutomationEngine pulls its flow
1466
+ definitions and trigger/job bindings ONCE at boot — nothing re-registered them
1467
+ on reload. So the scheduled job bound at boot kept running the pre-edit flow
1468
+ (old `runAs`, schedule, or logic) on its timer, with no signal that the edit had
1469
+ no effect.
1470
+
1471
+ Fix: MetadataPlugin now fires a generic `metadata:reloaded` hook after each
1472
+ artifact reload (the HMR POST handler and the server-side artifact-file watcher;
1473
+ never on the initial boot load). AutomationServicePlugin subscribes and re-syncs
1474
+ the engine from the metadata service — re-registering every current flow
1475
+ (idempotent: `registerFlow` re-binds the trigger, and `ScheduleTrigger.start`
1476
+ cancels + reschedules the job) and unregistering flows removed from the artifact
1477
+ so their jobs stop firing. This covers all auto-triggered flow types
1478
+ (schedule / record-change / api), not just scheduled ones, since record-change
1479
+ flows were also executing their boot-time definitions after an edit. Production
1480
+ deployments are unaffected — nothing reloads the artifact there.
1481
+
1482
+ - Updated dependencies [4d99a5c]
1483
+ - Updated dependencies [9b5bf3d]
1484
+ - Updated dependencies [cb5b393]
1485
+ - Updated dependencies [ab5718a]
1486
+ - Updated dependencies [4845c12]
1487
+ - Updated dependencies [c1a754a]
1488
+ - Updated dependencies [6fbe91f]
1489
+ - Updated dependencies [715d667]
1490
+ - Updated dependencies [5eef4cf]
1491
+ - Updated dependencies [72759e1]
1492
+ - Updated dependencies [6c4fbd9]
1493
+ - Updated dependencies [ef3ed67]
1494
+ - Updated dependencies [cd51229]
1495
+ - Updated dependencies [7697a0e]
1496
+ - Updated dependencies [e7e04f1]
1497
+ - Updated dependencies [cfd5ac4]
1498
+ - Updated dependencies [2be5c1f]
1499
+ - Updated dependencies [ad143ce]
1500
+ - Updated dependencies [5c4a8c8]
1501
+ - Updated dependencies [3afaeed]
1502
+ - Updated dependencies [5737261]
1503
+ - Updated dependencies [a619a3a]
1504
+ - Updated dependencies [f44c1bd]
1505
+ - Updated dependencies [795b6d1]
1506
+ - Updated dependencies [8801c02]
1507
+ - Updated dependencies [3d04e06]
1508
+ - Updated dependencies [4a84c98]
1509
+ - Updated dependencies [c715d25]
1510
+ - Updated dependencies [aa33b02]
1511
+ - Updated dependencies [d980f0d]
1512
+ - Updated dependencies [a658523]
1513
+ - Updated dependencies [82ff91c]
1514
+ - Updated dependencies [638f472]
1515
+ - @objectstack/metadata-core@11.0.0
1516
+ - @objectstack/platform-objects@11.0.0
1517
+ - @objectstack/spec@11.0.0
1518
+ - @objectstack/types@11.0.0
1519
+ - @objectstack/core@11.0.0
1520
+ - @objectstack/metadata-fs@11.0.0
1521
+
1522
+ ## 10.3.0
1523
+
1524
+ ### Patch Changes
1525
+
1526
+ - @objectstack/spec@10.3.0
1527
+ - @objectstack/core@10.3.0
1528
+ - @objectstack/types@10.3.0
1529
+ - @objectstack/metadata-core@10.3.0
1530
+ - @objectstack/metadata-fs@10.3.0
1531
+ - @objectstack/platform-objects@10.3.0
1532
+
1533
+ ## 10.2.0
1534
+
1535
+ ### Patch Changes
1536
+
1537
+ - Updated dependencies [b496498]
1538
+ - @objectstack/spec@10.2.0
1539
+ - @objectstack/core@10.2.0
1540
+ - @objectstack/metadata-core@10.2.0
1541
+ - @objectstack/platform-objects@10.2.0
1542
+ - @objectstack/types@10.2.0
1543
+ - @objectstack/metadata-fs@10.2.0
1544
+
1545
+ ## 10.1.0
1546
+
1547
+ ### Patch Changes
1548
+
1549
+ - Updated dependencies [49da36e]
1550
+ - Updated dependencies [ac79f16]
1551
+ - @objectstack/spec@10.1.0
1552
+ - @objectstack/core@10.1.0
1553
+ - @objectstack/metadata-core@10.1.0
1554
+ - @objectstack/platform-objects@10.1.0
1555
+ - @objectstack/types@10.1.0
1556
+ - @objectstack/metadata-fs@10.1.0
1557
+
1558
+ ## 10.0.0
1559
+
1560
+ ### Patch Changes
1561
+
1562
+ - Updated dependencies [d7ff626]
1563
+ - Updated dependencies [2a1b16b]
1564
+ - Updated dependencies [2256e93]
1565
+ - Updated dependencies [7108ff3]
1566
+ - Updated dependencies [30c0313]
1567
+ - Updated dependencies [e16f2a8]
1568
+ - Updated dependencies [e411a82]
1569
+ - Updated dependencies [ae271d0]
1570
+ - Updated dependencies [61ed5c7]
1571
+ - Updated dependencies [a581385]
1572
+ - Updated dependencies [d5f6d29]
1573
+ - Updated dependencies [220ce5b]
1574
+ - Updated dependencies [3efe334]
1575
+ - Updated dependencies [0df063e]
1576
+ - Updated dependencies [ce13bb8]
1577
+ - Updated dependencies [feead7e]
1578
+ - Updated dependencies [6ca20b3]
1579
+ - Updated dependencies [5f875fe]
1580
+ - Updated dependencies [b469950]
1581
+ - Updated dependencies [47d978a]
1582
+ - @objectstack/spec@10.0.0
1583
+ - @objectstack/platform-objects@10.0.0
1584
+ - @objectstack/core@10.0.0
1585
+ - @objectstack/metadata-core@10.0.0
1586
+ - @objectstack/types@10.0.0
1587
+ - @objectstack/metadata-fs@10.0.0
1588
+
1589
+ ## 9.11.0
1590
+
1591
+ ### Patch Changes
1592
+
1593
+ - Updated dependencies [e7f6539]
1594
+ - Updated dependencies [2365d07]
1595
+ - Updated dependencies [6595b53]
1596
+ - Updated dependencies [fa8964d]
1597
+ - Updated dependencies [36138c7]
1598
+ - Updated dependencies [a8e4f3b]
1599
+ - Updated dependencies [4c213c2]
1600
+ - Updated dependencies [2afb612]
1601
+ - @objectstack/spec@9.11.0
1602
+ - @objectstack/core@9.11.0
1603
+ - @objectstack/metadata-core@9.11.0
1604
+ - @objectstack/platform-objects@9.11.0
1605
+ - @objectstack/types@9.11.0
1606
+ - @objectstack/metadata-fs@9.11.0
1607
+
1608
+ ## 9.10.0
1609
+
1610
+ ### Patch Changes
1611
+
1612
+ - Updated dependencies [db02bd5]
1613
+ - Updated dependencies [641675d]
1614
+ - Updated dependencies [94e9040]
1615
+ - Updated dependencies [4331adb]
1616
+ - Updated dependencies [1f88fd9]
1617
+ - Updated dependencies [1f88fd9]
1618
+ - @objectstack/spec@9.10.0
1619
+ - @objectstack/platform-objects@9.10.0
1620
+ - @objectstack/core@9.10.0
1621
+ - @objectstack/metadata-core@9.10.0
1622
+ - @objectstack/types@9.10.0
1623
+ - @objectstack/metadata-fs@9.10.0
1624
+
1625
+ ## 9.9.1
1626
+
1627
+ ### Patch Changes
1628
+
1629
+ - @objectstack/spec@9.9.1
1630
+ - @objectstack/core@9.9.1
1631
+ - @objectstack/types@9.9.1
1632
+ - @objectstack/metadata-core@9.9.1
1633
+ - @objectstack/metadata-fs@9.9.1
1634
+ - @objectstack/platform-objects@9.9.1
1635
+
1636
+ ## 9.9.0
1637
+
1638
+ ### Patch Changes
1639
+
1640
+ - Updated dependencies [84249a4]
1641
+ - Updated dependencies [11af299]
1642
+ - Updated dependencies [d5774b5]
1643
+ - Updated dependencies [134043a]
1644
+ - Updated dependencies [90108e0]
1645
+ - Updated dependencies [9afeb2d]
1646
+ - Updated dependencies [6bec07e]
1647
+ - Updated dependencies [601cc11]
1648
+ - Updated dependencies [575448d]
1649
+ - @objectstack/spec@9.9.0
1650
+ - @objectstack/core@9.9.0
1651
+ - @objectstack/metadata-core@9.9.0
1652
+ - @objectstack/platform-objects@9.9.0
1653
+ - @objectstack/types@9.9.0
1654
+ - @objectstack/metadata-fs@9.9.0
1655
+
1656
+ ## 9.8.0
1657
+
1658
+ ### Patch Changes
1659
+
1660
+ - Updated dependencies [97c55b3]
1661
+ - Updated dependencies [1b1f490]
1662
+ - @objectstack/spec@9.8.0
1663
+ - @objectstack/core@9.8.0
1664
+ - @objectstack/metadata-core@9.8.0
1665
+ - @objectstack/platform-objects@9.8.0
1666
+ - @objectstack/types@9.8.0
1667
+ - @objectstack/metadata-fs@9.8.0
1668
+
1669
+ ## 9.7.0
1670
+
1671
+ ### Patch Changes
1672
+
1673
+ - @objectstack/spec@9.7.0
1674
+ - @objectstack/core@9.7.0
1675
+ - @objectstack/types@9.7.0
1676
+ - @objectstack/metadata-core@9.7.0
1677
+ - @objectstack/metadata-fs@9.7.0
1678
+ - @objectstack/platform-objects@9.7.0
1679
+
1680
+ ## 9.6.0
1681
+
1682
+ ### Patch Changes
1683
+
1684
+ - Updated dependencies [d1e930a]
1685
+ - Updated dependencies [71578f2]
1686
+ - Updated dependencies [5e3a301]
1687
+ - Updated dependencies [5db2742]
1688
+ - @objectstack/spec@9.6.0
1689
+ - @objectstack/core@9.6.0
1690
+ - @objectstack/metadata-core@9.6.0
1691
+ - @objectstack/platform-objects@9.6.0
1692
+ - @objectstack/types@9.6.0
1693
+ - @objectstack/metadata-fs@9.6.0
1694
+
1695
+ ## 9.5.1
1696
+
1697
+ ### Patch Changes
1698
+
1699
+ - Updated dependencies [ee72aae]
1700
+ - @objectstack/spec@9.5.1
1701
+ - @objectstack/core@9.5.1
1702
+ - @objectstack/metadata-core@9.5.1
1703
+ - @objectstack/platform-objects@9.5.1
1704
+ - @objectstack/types@9.5.1
1705
+ - @objectstack/metadata-fs@9.5.1
1706
+
1707
+ ## 9.5.0
1708
+
1709
+ ### Patch Changes
1710
+
1711
+ - Updated dependencies [d08551c]
1712
+ - Updated dependencies [5be7102]
1713
+ - Updated dependencies [707aeed]
1714
+ - Updated dependencies [7a103d4]
1715
+ - Updated dependencies [4b01250]
1716
+ - @objectstack/spec@9.5.0
1717
+ - @objectstack/platform-objects@9.5.0
1718
+ - @objectstack/core@9.5.0
1719
+ - @objectstack/metadata-core@9.5.0
1720
+ - @objectstack/types@9.5.0
1721
+ - @objectstack/metadata-fs@9.5.0
1722
+
1723
+ ## 9.4.0
1724
+
1725
+ ### Patch Changes
1726
+
1727
+ - 2c8e607: fix(ADR-0046): serve package docs at runtime, not just in the compiled artifact
1728
+
1729
+ Package docs (`src/docs/*.md`) compiled into a bundle were never reaching the
1730
+ runtime, so `GET /meta/doc` returned an empty list and the docs were invisible
1731
+ even though `os build` produced them.
1732
+
1733
+ Two gaps:
1734
+
1735
+ - **`os dev` / `os serve` (config-load path)** re-derives metadata from
1736
+ `defineStack(...)`, which never carries the markdown docs — those are
1737
+ collected only at compile time. `serve.ts` now collects `src/docs/*.md` into
1738
+ the stack on the config-load path too (collection only — additive, never
1739
+ blocks boot), so docs serve in dev exactly as from a built artifact.
1740
+ - **The MetadataPlugin artifact loader** (`ARTIFACT_FIELD_TO_TYPE`) omitted the
1741
+ `docs` → `doc` mapping, so the bundle's `docs` array was skipped when loading
1742
+ through that path. Added the mapping (with a regression test) for parity with
1743
+ the ObjectQL engine's `metadataArrayKeys`.
1744
+
1745
+ - Updated dependencies [060467a]
1746
+ - Updated dependencies [0856476]
1747
+ - Updated dependencies [fef38ec]
1748
+ - Updated dependencies [b678d8c]
1749
+ - Updated dependencies [b678d8c]
1750
+ - Updated dependencies [b678d8c]
1751
+ - @objectstack/spec@9.4.0
1752
+ - @objectstack/metadata-core@9.4.0
1753
+ - @objectstack/core@9.4.0
1754
+ - @objectstack/platform-objects@9.4.0
1755
+ - @objectstack/types@9.4.0
1756
+ - @objectstack/metadata-fs@9.4.0
1757
+
1758
+ ## 9.3.0
1759
+
1760
+ ### Minor Changes
1761
+
1762
+ - b10aa78: Metadata registered through the metadata-service path now carries package provenance. `loadMetadataFromService` and `MetadataFacade.register` pass each item's own `_packageId` through to `registry.registerItem` so `applyProtection` stamps `_packageId`/`_provenance: 'package'` (never a synthetic id — `isArtifactBacked()` write authorization keys off `_packageId`). New `MetadataPluginOptions.packageId` lets hosts running the filesystem scanner declare the owning package id for scanned source-file metadata, closing the same gap for hand-wired kernels. GET /api/v1/meta/:type consumers (e.g. objectui NavigationSyncEffect) can now distinguish package-shipped items from user-authored rows without name heuristics.
1763
+
1764
+ ### Patch Changes
1765
+
1766
+ - Updated dependencies [1ada658]
1767
+ - Updated dependencies [3219191]
1768
+ - Updated dependencies [290f631]
1769
+ - Updated dependencies [50b7b47]
1770
+ - Updated dependencies [f15d6f6]
1771
+ - Updated dependencies [f8684ea]
1772
+ - Updated dependencies [c802327]
1773
+ - Updated dependencies [b4765be]
1774
+ - @objectstack/spec@9.3.0
1775
+ - @objectstack/platform-objects@9.3.0
1776
+ - @objectstack/core@9.3.0
1777
+ - @objectstack/metadata-core@9.3.0
1778
+ - @objectstack/types@9.3.0
1779
+ - @objectstack/metadata-fs@9.3.0
1780
+
1781
+ ## 9.2.0
1782
+
1783
+ ### Patch Changes
1784
+
1785
+ - Updated dependencies [2f57b75]
1786
+ - Updated dependencies [2f57b75]
1787
+ - @objectstack/spec@9.2.0
1788
+ - @objectstack/core@9.2.0
1789
+ - @objectstack/metadata-core@9.2.0
1790
+ - @objectstack/platform-objects@9.2.0
1791
+ - @objectstack/types@9.2.0
1792
+ - @objectstack/metadata-fs@9.2.0
1793
+
1794
+ ## 9.1.0
1795
+
1796
+ ### Patch Changes
1797
+
1798
+ - Updated dependencies [b9062c9]
1799
+ - @objectstack/spec@9.1.0
1800
+ - @objectstack/core@9.1.0
1801
+ - @objectstack/metadata-core@9.1.0
1802
+ - @objectstack/platform-objects@9.1.0
1803
+ - @objectstack/types@9.1.0
1804
+ - @objectstack/metadata-fs@9.1.0
1805
+
1806
+ ## 9.0.1
1807
+
1808
+ ### Patch Changes
1809
+
1810
+ - Updated dependencies [1817845]
1811
+ - @objectstack/spec@9.0.1
1812
+ - @objectstack/core@9.0.1
1813
+ - @objectstack/metadata-core@9.0.1
1814
+ - @objectstack/platform-objects@9.0.1
1815
+ - @objectstack/types@9.0.1
1816
+ - @objectstack/metadata-fs@9.0.1
1817
+
1818
+ ## 9.0.0
1819
+
1820
+ ### Patch Changes
1821
+
1822
+ - Updated dependencies [4c3f693]
1823
+ - Updated dependencies [0bf39f1]
1824
+ - Updated dependencies [f533f42]
1825
+ - Updated dependencies [1c83ee8]
1826
+ - @objectstack/spec@9.0.0
1827
+ - @objectstack/core@9.0.0
1828
+ - @objectstack/metadata-core@9.0.0
1829
+ - @objectstack/platform-objects@9.0.0
1830
+ - @objectstack/types@9.0.0
1831
+ - @objectstack/metadata-fs@9.0.0
1832
+
1833
+ ## 8.0.1
1834
+
1835
+ ### Patch Changes
1836
+
1837
+ - @objectstack/spec@8.0.1
1838
+ - @objectstack/core@8.0.1
1839
+ - @objectstack/types@8.0.1
1840
+ - @objectstack/metadata-core@8.0.1
1841
+ - @objectstack/metadata-fs@8.0.1
1842
+ - @objectstack/platform-objects@8.0.1
1843
+
1844
+ ## 8.0.0
1845
+
1846
+ ### Patch Changes
1847
+
1848
+ - Updated dependencies [a46c017]
1849
+ - Updated dependencies [b990b89]
1850
+ - Updated dependencies [99111ec]
1851
+ - Updated dependencies [d5a8161]
1852
+ - Updated dependencies [5cf1f1b]
1853
+ - Updated dependencies [9ef89d4]
1854
+ - Updated dependencies [3306d2f]
1855
+ - Updated dependencies [c262301]
1856
+ - Updated dependencies [bc44195]
1857
+ - Updated dependencies [9e2e229]
1858
+ - @objectstack/spec@8.0.0
1859
+ - @objectstack/core@8.0.0
1860
+ - @objectstack/metadata-core@8.0.0
1861
+ - @objectstack/platform-objects@8.0.0
1862
+ - @objectstack/types@8.0.0
1863
+ - @objectstack/metadata-fs@8.0.0
1864
+
1865
+ ## 7.9.0
1866
+
1867
+ ### Patch Changes
1868
+
1869
+ - @objectstack/spec@7.9.0
1870
+ - @objectstack/core@7.9.0
1871
+ - @objectstack/types@7.9.0
1872
+ - @objectstack/metadata-core@7.9.0
1873
+ - @objectstack/metadata-fs@7.9.0
1874
+ - @objectstack/platform-objects@7.9.0
1875
+
1876
+ ## 7.8.0
1877
+
1878
+ ### Patch Changes
1879
+
1880
+ - Updated dependencies [06f2bbb]
1881
+ - Updated dependencies [36719db]
1882
+ - Updated dependencies [424ab26]
1883
+ - @objectstack/spec@7.8.0
1884
+ - @objectstack/core@7.8.0
1885
+ - @objectstack/metadata-core@7.8.0
1886
+ - @objectstack/platform-objects@7.8.0
1887
+ - @objectstack/types@7.8.0
1888
+ - @objectstack/metadata-fs@7.8.0
1889
+
1890
+ ## 7.7.0
1891
+
1892
+ ### Patch Changes
1893
+
1894
+ - 764c747: fix(metadata): home the metadata-storage objects in metadata-core and register them from ObjectQL
1895
+
1896
+ Standalone "host config" apps boot without `@objectstack/metadata`'s MetadataPlugin, so nobody registered the metadata-storage objects (`sys_metadata`, `_history`, `_audit`, `sys_view_definition`) into ObjectQL — their tables were never schema-synced and ObjectQL's own protocol (`loadMetaFromDb` / `getMetaItems`) failed with `no such table: sys_metadata` on every read.
1897
+
1898
+ - Move the four storage-object definitions from `@objectstack/platform-objects/metadata` to `@objectstack/metadata-core` (the lowest package shared by their real consumers); `platform-objects/metadata` now re-exports them for back-compat.
1899
+ - `ObjectQLPlugin` registers these objects itself (gated on `environmentId === undefined`, mirroring `restoreMetadataFromDb`) so their tables always sync on platform/standalone kernels.
1900
+ - Gate the SQL driver's tenant-audit warning on actual multi-tenant mode — `organization_id` now exists on every table, so column presence alone no longer implies "tenant-scoped"; single-tenant boots no longer spam the warning for system writes.
1901
+
1902
+ - Updated dependencies [b391955]
1903
+ - Updated dependencies [f06b64e]
1904
+ - Updated dependencies [023bf93]
1905
+ - Updated dependencies [764c747]
1906
+ - @objectstack/spec@7.7.0
1907
+ - @objectstack/platform-objects@7.7.0
1908
+ - @objectstack/metadata-core@7.7.0
1909
+ - @objectstack/core@7.7.0
1910
+ - @objectstack/types@7.7.0
1911
+ - @objectstack/metadata-fs@7.7.0
1912
+
1913
+ ## 7.6.0
1914
+
1915
+ ### Patch Changes
1916
+
1917
+ - Updated dependencies [955d4c8]
1918
+ - Updated dependencies [c4a4cbd]
1919
+ - Updated dependencies [b046ec2]
1920
+ - Updated dependencies [2170ad9]
1921
+ - Updated dependencies [02d6359]
1922
+ - Updated dependencies [7648242]
1923
+ - Updated dependencies [8fa1e7f]
1924
+ - Updated dependencies [7ae6abc]
1925
+ - Updated dependencies [55866f5]
1926
+ - Updated dependencies [60f9c45]
1927
+ - @objectstack/spec@7.6.0
1928
+ - @objectstack/platform-objects@7.6.0
1929
+ - @objectstack/core@7.6.0
1930
+ - @objectstack/types@7.6.0
1931
+ - @objectstack/metadata-core@7.6.0
1932
+ - @objectstack/metadata-fs@7.6.0
1933
+
1934
+ ## 7.5.0
1935
+
1936
+ ### Patch Changes
1937
+
1938
+ - @objectstack/spec@7.5.0
1939
+ - @objectstack/core@7.5.0
1940
+ - @objectstack/types@7.5.0
1941
+ - @objectstack/metadata-core@7.5.0
1942
+ - @objectstack/metadata-fs@7.5.0
1943
+ - @objectstack/platform-objects@7.5.0
1944
+
1945
+ ## 7.4.1
1946
+
1947
+ ### Patch Changes
1948
+
1949
+ - @objectstack/spec@7.4.1
1950
+ - @objectstack/core@7.4.1
1951
+ - @objectstack/types@7.4.1
1952
+ - @objectstack/metadata-core@7.4.1
1953
+ - @objectstack/metadata-fs@7.4.1
1954
+ - @objectstack/platform-objects@7.4.1
1955
+
1956
+ ## 7.4.0
1957
+
1958
+ ### Minor Changes
1959
+
1960
+ - 13632b1: ADR-0030 P0 (framework) — converge notifications onto a single ingress and the
1961
+ layered model. Every producer now publishes through
1962
+ `NotificationService.emit(EmitInput)`; the in-app inbox is a materialization of
1963
+ delivery, not a row producers write.
1964
+
1965
+ **Single ingress (`@objectstack/service-messaging`) — breaking**
1966
+
1967
+ - `MessagingService.emit` takes the new `EmitInput` contract (`topic` /
1968
+ `audience` / `payload` / `severity` / `dedupKey` / `source` / `actorId` /
1969
+ `organizationId` / `channels`) instead of the flat `Notification` shape. It
1970
+ writes the L2 `sys_notification` event (idempotent on `dedupKey`), resolves the
1971
+ audience, then fans out; it returns `{ notificationId, deduped, deliveries,
1972
+ delivered, failed }`.
1973
+ - New `sys_notification_receipt` object — the read-state spine
1974
+ (`delivered|read|clicked|dismissed`), keyed `(notification_id, user_id,
1975
+ channel)`. The inbox channel writes a `delivered` receipt on materialization.
1976
+ - `sys_inbox_message`: adds `notification_id` / `delivery_id`, **drops `read`**
1977
+ (read-state moved to the receipt), adds the user `mine` list view.
1978
+
1979
+ **Event re-model (`@objectstack/platform-objects`) — breaking**
1980
+
1981
+ - `sys_notification` is re-modeled from a per-user inbox into the L2 **event**
1982
+ (`topic`, `payload`, `severity`, `dedup_key`, `source_*`, `actor_id`). Removes
1983
+ `recipient_id` / `is_read` / `read_at` / `type` / `title` / `body` / `url` /
1984
+ `actor_name` and the inbox actions/views. App-nav: the account inbox points at
1985
+ `sys_inbox_message`; Setup shows the notification event log.
1986
+
1987
+ **Producers routed through `emit()`**
1988
+
1989
+ - `@objectstack/service-automation`: the `notify` node maps its config to
1990
+ `EmitInput`.
1991
+ - `@objectstack/plugin-audit`: collaboration `@mention` → `collab.mention` and
1992
+ assignment → `collab.assignment` (both with a `dedupKey`); no more direct
1993
+ `sys_notification` writes. Collaboration notifications now require
1994
+ `MessagingServicePlugin` (they degrade to a warn otherwise).
1995
+
1996
+ **Migration (`@objectstack/metadata`)**
1997
+
1998
+ - Idempotent `migrateSysNotificationToEvent` splits legacy `sys_notification`
1999
+ inbox rows into `sys_inbox_message` + receipts and rewrites the event row.
2000
+
2001
+ **Startup (`@objectstack/cli`, `@objectstack/runtime`)**
2002
+
2003
+ - `messaging` is now a foundational capability. On `objectstack serve` it is
2004
+ added to `ALWAYS_ON_CAPABILITIES` (every non-`minimal` preset starts it); on
2005
+ cloud per-project kernels the capability loader expands `requires` to add
2006
+ `messaging` whenever `audit` is present. This keeps collaboration `@mention` /
2007
+ assignment notifications (which now flow through the pipeline) working out of
2008
+ the box on both paths. `--preset minimal` opts out.
2009
+
2010
+ The Console bell repoint (objectui) and phases P1–P3 are tracked in
2011
+ `docs/handoff/adr-0030-notification-convergence.md`.
2012
+
2013
+ ### Patch Changes
2014
+
2015
+ - Updated dependencies [23c7107]
2016
+ - Updated dependencies [c72daad]
2017
+ - Updated dependencies [4404572]
2018
+ - Updated dependencies [eea3f1b]
2019
+ - Updated dependencies [e478e0c]
2020
+ - Updated dependencies [4cc2ced]
2021
+ - Updated dependencies [13632b1]
2022
+ - Updated dependencies [f115182]
2023
+ - Updated dependencies [2faf9f2]
2024
+ - Updated dependencies [2faf9f2]
2025
+ - Updated dependencies [2faf9f2]
2026
+ - Updated dependencies [58b450b]
2027
+ - Updated dependencies [82eb6cf]
2028
+ - Updated dependencies [c381977]
2029
+ - Updated dependencies [13d8653]
2030
+ - Updated dependencies [ff3d006]
2031
+ - Updated dependencies [5e831de]
2032
+ - @objectstack/spec@7.4.0
2033
+ - @objectstack/platform-objects@7.4.0
2034
+ - @objectstack/core@7.4.0
2035
+ - @objectstack/types@7.4.0
2036
+ - @objectstack/metadata-core@7.4.0
2037
+ - @objectstack/metadata-fs@7.4.0
2038
+
2039
+ ## 7.3.0
2040
+
2041
+ ### Patch Changes
2042
+
2043
+ - Updated dependencies [5e7c554]
2044
+ - @objectstack/spec@7.3.0
2045
+ - @objectstack/core@7.3.0
2046
+ - @objectstack/platform-objects@7.3.0
2047
+ - @objectstack/types@7.3.0
2048
+ - @objectstack/metadata-core@7.3.0
2049
+ - @objectstack/metadata-fs@7.3.0
2050
+
2051
+ ## 7.2.1
2052
+
2053
+ ### Patch Changes
2054
+
2055
+ - Updated dependencies [9096dfe]
2056
+ - @objectstack/types@7.2.1
2057
+ - @objectstack/spec@7.2.1
2058
+ - @objectstack/core@7.2.1
2059
+ - @objectstack/metadata-core@7.2.1
2060
+ - @objectstack/metadata-fs@7.2.1
2061
+ - @objectstack/platform-objects@7.2.1
2062
+
2063
+ ## 7.2.0
2064
+
2065
+ ### Patch Changes
2066
+
2067
+ - @objectstack/spec@7.2.0
2068
+ - @objectstack/core@7.2.0
2069
+ - @objectstack/types@7.2.0
2070
+ - @objectstack/metadata-core@7.2.0
2071
+ - @objectstack/metadata-fs@7.2.0
2072
+ - @objectstack/platform-objects@7.2.0
2073
+
2074
+ ## 7.1.0
2075
+
2076
+ ### Patch Changes
2077
+
2078
+ - 47a92f4: Promote `email_template` to a first-class metadata type using the canonical
2079
+ `EmailTemplateDefinitionSchema`.
2080
+
2081
+ Previously `email_template` had two competing Zod schemas (Prime Directive
2082
+ #8 violation): the legacy `EmailTemplateSchema` (a sub-shape of
2083
+ `Notification`) and the richer `EmailTemplateDefinitionSchema`. The runtime
2084
+ metadata protocol (`packages/objectql/src/protocol.ts`) and Studio's
2085
+ property panel registered the legacy one, which is why all the new fields
2086
+ (`name`, `label`, `category`, `locale`, `bodyHtml`, `bodyText`, …) were
2087
+ reported as “declared in form layout but missing from schema”.
2088
+
2089
+ This change:
2090
+
2091
+ - Repoints the `email_template` entry in `TYPE_TO_SCHEMA`
2092
+ (`packages/objectql/src/protocol.ts`) and in
2093
+ `BUILTIN_METADATA_TYPE_SCHEMAS`
2094
+ (`packages/spec/src/kernel/metadata-type-schemas.ts`) to
2095
+ `EmailTemplateDefinitionSchema`. The legacy `EmailTemplateSchema` is
2096
+ kept only as an inline sub-shape inside `Notification`.
2097
+ - Adds an `emailTemplates` collection to `defineStack()` input
2098
+ (`packages/spec/src/stack.zod.ts`), registers it in
2099
+ `MAP_SUPPORTED_FIELDS`/`PLURAL_TO_SINGULAR`
2100
+ (`packages/spec/src/shared/metadata-collection.zod.ts`), wires it into
2101
+ `ARTIFACT_FIELD_TO_TYPE` (`packages/metadata/src/plugin.ts`) and
2102
+ `APP_CATEGORY_KEYS` (`packages/runtime/src/app-plugin.ts`).
2103
+ - Rewrites `packages/spec/src/system/email-template.form.ts` for the new
2104
+ schema with sections for Identity, Subject, HTML body, Plain-text body,
2105
+ Variables, Delivery overrides, Status.
2106
+ - Ships three reference templates in `examples/app-crm/src/emails/`:
2107
+ `crm.deal_won` (rewritten to canonical shape), `crm.welcome` (new),
2108
+ `crm.lead_followup` (new), and wires them into the CRM stack via
2109
+ `emailTemplates: Object.values(emails)`.
2110
+
2111
+ End-to-end verified in Studio: list view at
2112
+ `/_console/apps/studio/metadata/email_template` shows all three entries;
2113
+ the detail view renders the EmailTemplatePreview iframe and the property
2114
+ panel cleanly renders every canonical field (no missing-schema warnings).
2115
+ `GET /api/v1/meta` now returns the new `properties` set
2116
+ (`name, label, category, locale, subject, bodyHtml, bodyText, variables,
2117
+ fromOverride, replyTo, active, isSystem, description`).
2118
+
2119
+ - Updated dependencies [6228609]
2120
+ - Updated dependencies [47a92f4]
2121
+ - @objectstack/platform-objects@7.1.0
2122
+ - @objectstack/spec@7.1.0
2123
+ - @objectstack/core@7.1.0
2124
+ - @objectstack/types@7.1.0
2125
+ - @objectstack/metadata-core@7.1.0
2126
+ - @objectstack/metadata-fs@7.1.0
2127
+
2128
+ ## 7.0.0
2129
+
2130
+ ### Patch Changes
2131
+
2132
+ - Updated dependencies [74470ad]
2133
+ - Updated dependencies [d29617e]
2134
+ - Updated dependencies [dc72172]
2135
+ - Updated dependencies [d29617e]
2136
+ - Updated dependencies [010757b]
2137
+ - Updated dependencies [257954d]
2138
+ - @objectstack/spec@7.0.0
2139
+ - @objectstack/platform-objects@7.0.0
2140
+ - @objectstack/core@7.0.0
2141
+ - @objectstack/types@7.0.0
2142
+ - @objectstack/metadata-core@7.0.0
2143
+ - @objectstack/metadata-fs@7.0.0
2144
+
2145
+ ## 6.9.0
2146
+
2147
+ ### Patch Changes
2148
+
2149
+ - @objectstack/spec@6.9.0
2150
+ - @objectstack/core@6.9.0
2151
+ - @objectstack/types@6.9.0
2152
+ - @objectstack/metadata-core@6.9.0
2153
+ - @objectstack/metadata-fs@6.9.0
2154
+ - @objectstack/platform-objects@6.9.0
2155
+
2156
+ ## 6.8.1
2157
+
2158
+ ### Patch Changes
2159
+
2160
+ - @objectstack/spec@6.8.1
2161
+ - @objectstack/core@6.8.1
2162
+ - @objectstack/types@6.8.1
2163
+ - @objectstack/metadata-core@6.8.1
2164
+ - @objectstack/metadata-fs@6.8.1
2165
+ - @objectstack/platform-objects@6.8.1
2166
+
2167
+ ## 6.8.0
2168
+
2169
+ ### Patch Changes
2170
+
2171
+ - Updated dependencies [6e88f77]
2172
+ - Updated dependencies [c8b9f57]
2173
+ - Updated dependencies [45d27c5]
2174
+ - @objectstack/spec@6.8.0
2175
+ - @objectstack/platform-objects@6.8.0
2176
+ - @objectstack/core@6.8.0
2177
+ - @objectstack/types@6.8.0
2178
+ - @objectstack/metadata-core@6.8.0
2179
+ - @objectstack/metadata-fs@6.8.0
2180
+
2181
+ ## 6.7.1
2182
+
2183
+ ### Patch Changes
2184
+
2185
+ - @objectstack/spec@6.7.1
2186
+ - @objectstack/core@6.7.1
2187
+ - @objectstack/types@6.7.1
2188
+ - @objectstack/metadata-core@6.7.1
2189
+ - @objectstack/metadata-fs@6.7.1
2190
+ - @objectstack/platform-objects@6.7.1
2191
+
2192
+ ## 6.7.0
2193
+
2194
+ ### Patch Changes
2195
+
2196
+ - Updated dependencies [430067b]
2197
+ - Updated dependencies [4f9e9d4]
2198
+ - Updated dependencies [4f9e9d4]
2199
+ - @objectstack/spec@6.7.0
2200
+ - @objectstack/platform-objects@6.7.0
2201
+ - @objectstack/core@6.7.0
2202
+ - @objectstack/types@6.7.0
2203
+ - @objectstack/metadata-core@6.7.0
2204
+ - @objectstack/metadata-fs@6.7.0
2205
+
2206
+ ## 6.6.0
2207
+
2208
+ ### Patch Changes
2209
+
2210
+ - Updated dependencies [a49cfc2]
2211
+ - @objectstack/spec@6.6.0
2212
+ - @objectstack/core@6.6.0
2213
+ - @objectstack/platform-objects@6.6.0
2214
+ - @objectstack/types@6.6.0
2215
+ - @objectstack/metadata-core@6.6.0
2216
+ - @objectstack/metadata-fs@6.6.0
2217
+
2218
+ ## 6.5.1
2219
+
2220
+ ### Patch Changes
2221
+
2222
+ - @objectstack/spec@6.5.1
2223
+ - @objectstack/core@6.5.1
2224
+ - @objectstack/types@6.5.1
2225
+ - @objectstack/metadata-core@6.5.1
2226
+ - @objectstack/metadata-fs@6.5.1
2227
+ - @objectstack/platform-objects@6.5.1
2228
+
2229
+ ## 6.5.0
2230
+
2231
+ ### Patch Changes
2232
+
2233
+ - @objectstack/spec@6.5.0
2234
+ - @objectstack/core@6.5.0
2235
+ - @objectstack/types@6.5.0
2236
+ - @objectstack/metadata-core@6.5.0
2237
+ - @objectstack/metadata-fs@6.5.0
2238
+ - @objectstack/platform-objects@6.5.0
2239
+
2240
+ ## 6.4.0
2241
+
2242
+ ### Patch Changes
2243
+
2244
+ - Updated dependencies [f8651cc]
2245
+ - Updated dependencies [f8651cc]
2246
+ - Updated dependencies [0bf6f9a]
2247
+ - @objectstack/spec@6.4.0
2248
+ - @objectstack/core@6.4.0
2249
+ - @objectstack/platform-objects@6.4.0
2250
+ - @objectstack/types@6.4.0
2251
+ - @objectstack/metadata-core@6.4.0
2252
+ - @objectstack/metadata-fs@6.4.0
2253
+
2254
+ ## 6.3.0
2255
+
2256
+ ### Patch Changes
2257
+
2258
+ - @objectstack/spec@6.3.0
2259
+ - @objectstack/core@6.3.0
2260
+ - @objectstack/types@6.3.0
2261
+ - @objectstack/metadata-core@6.3.0
2262
+ - @objectstack/metadata-fs@6.3.0
2263
+ - @objectstack/platform-objects@6.3.0
2264
+
2265
+ ## 6.2.0
2266
+
2267
+ ### Patch Changes
2268
+
2269
+ - Updated dependencies [b4c74a9]
2270
+ - @objectstack/spec@6.2.0
2271
+ - @objectstack/core@6.2.0
2272
+ - @objectstack/platform-objects@6.2.0
2273
+ - @objectstack/types@6.2.0
2274
+ - @objectstack/metadata-core@6.2.0
2275
+ - @objectstack/metadata-fs@6.2.0
2276
+
2277
+ ## 6.1.1
2278
+
2279
+ ### Patch Changes
2280
+
2281
+ - @objectstack/spec@6.1.1
2282
+ - @objectstack/core@6.1.1
2283
+ - @objectstack/types@6.1.1
2284
+ - @objectstack/metadata-core@6.1.1
2285
+ - @objectstack/metadata-fs@6.1.1
2286
+ - @objectstack/platform-objects@6.1.1
2287
+
2288
+ ## 6.1.0
2289
+
2290
+ ### Patch Changes
2291
+
2292
+ - Updated dependencies [93c0589]
2293
+ - @objectstack/spec@6.1.0
2294
+ - @objectstack/core@6.1.0
2295
+ - @objectstack/platform-objects@6.1.0
2296
+ - @objectstack/types@6.1.0
2297
+ - @objectstack/metadata-core@6.1.0
2298
+ - @objectstack/metadata-fs@6.1.0
2299
+
2300
+ ## 6.0.0
2301
+
2302
+ ### Major Changes
2303
+
2304
+ - 944f187: # v5.0 — `project` → `environment` hard rename
2305
+
2306
+ The runtime concept previously called **"project"** (per-tenant business
2307
+ workspace; Org → **Project** → Branch hierarchy; per-project ObjectKernel,
2308
+ per-project DB, per-project artifact) is now uniformly called
2309
+ **"environment"**.
2310
+
2311
+ This is a **hard rename with no aliases, deprecation shims, or compatibility
2312
+ layer**. Upgrade requires a coordinated update of CLI, runtime, server, and any
2313
+ clients calling the REST API.
2314
+
2315
+ > Note: "project" in the npm / monorepo sense (the framework itself, `package.json`,
2316
+ > tsconfig project references, vitest `projects` config) is **unchanged**.
2317
+
2318
+ ## Breaking changes
2319
+
2320
+ ### CLI
2321
+
2322
+ - Flags renamed:
2323
+ - `--project` / `-p` → `--environment` / `-e` (`os publish`, `os rollback`)
2324
+ - `--project-id` → `--environment-id` (`os dev`)
2325
+ - Default local env id: `proj_local` → `env_local`.
2326
+ - Env var: `OS_PROJECT_ID` → `OS_ENVIRONMENT_ID`.
2327
+ - Command group renamed: `os projects ...` → `os environments ...`
2328
+ (`bind`, `create`, `list`, `show`, `switch`).
2329
+ - Persisted auth-config key: `activeProjectId` → `activeEnvironmentId`.
2330
+
2331
+ ### HTTP / REST
2332
+
2333
+ - Scoped routes: `/api/v1/projects/:projectId/...` → `/api/v1/environments/:environmentId/...`.
2334
+ - Cloud control-plane routes: `/api/v1/cloud/projects/...` → `/api/v1/cloud/environments/...`
2335
+ (including `/cloud/environments/:id/artifact`, `/cloud/environments/:id/metadata`,
2336
+ `/cloud/environments/:id/credentials/rotate`, etc.).
2337
+ - Header: `X-Project-Id` (and lowercase `x-project-id`) → `X-Environment-Id`
2338
+ (`x-environment-id`).
2339
+ - Route param name in handlers: `req.params.projectId` → `req.params.environmentId`.
2340
+ - Hostname-routing and tenant-resolution code-paths use `environmentId` end-to-end.
2341
+
2342
+ ### Runtime / spec
2343
+
2344
+ - Exported symbols (no aliases):
2345
+ - `createSystemProjectPlugin` → `createSystemEnvironmentPlugin`
2346
+ - `SYSTEM_PROJECT_ID` → `SYSTEM_ENVIRONMENT_ID`
2347
+ - `ProjectArtifactSchema` → `EnvironmentArtifactSchema`
2348
+ - `PROJECT_ARTIFACT_SCHEMA_VERSION` → `ENVIRONMENT_ARTIFACT_SCHEMA_VERSION`
2349
+ - `ObjectOSProjectPlugin` → `ObjectOSEnvironmentPlugin`
2350
+ - `createSingleProjectPlugin` → `createSingleEnvironmentPlugin`
2351
+ - Plugin identifier strings:
2352
+ - `com.objectstack.runtime.objectos-project` → `objectos-environment`
2353
+ - `com.objectstack.studio.single-project` → `single-environment`
2354
+ - `com.objectstack.multi-project` → `multi-environment`
2355
+ - `com.objectstack.runtime.system-project` → `system-environment`
2356
+ - Provisioning hook: `provisionSystemProject` → `provisionSystemEnvironment`.
2357
+
2358
+ ### Database / schemas
2359
+
2360
+ - Column renames on `sys_metadata` and `sys_metadata_history`:
2361
+ `project_id` → `environment_id`.
2362
+ - Column renames on `sys_activity`: `project_id` → `environment_id` (plus index).
2363
+ - Object renames in platform-objects metadata: `sys_project` → `sys_environment`
2364
+ (lookup targets), `sys_project_member` → `sys_environment_member`,
2365
+ `sys_project_credential` → `sys_environment_credential`.
2366
+ - Auth-context field: `active_project_id` → `active_environment_id`.
2367
+ - JSON schemas under `packages/spec/json-schema/system/`:
2368
+ `ProjectArtifact*.json` → `EnvironmentArtifact*.json` (regenerated at build).
2369
+
2370
+ ### Automatic forward migration
2371
+
2372
+ A new migration `migrateProjectIdToEnvironmentId`
2373
+ (`packages/metadata/src/migrations/migrate-project-id-to-environment-id.ts`)
2374
+ auto-runs from `DatabaseLoader.ensureSchema()` on bootstrap and rewrites any
2375
+ existing `project_id` column on `sys_metadata` / `sys_metadata_history` to
2376
+ `environment_id` (idempotent, best-effort). Existing rows are preserved.
2377
+
2378
+ The legacy reverse migration `migrateEnvIdToProjectId` is retained verbatim
2379
+ for historical / disaster-recovery use; it is **not** auto-run.
2380
+
2381
+ ## Migration guide
2382
+
2383
+ ```diff
2384
+ -os publish --project proj_xyz
2385
+ +os publish --environment env_xyz
2386
+
2387
+ -curl -H "X-Project-Id: env_xyz" https://api.example.com/api/v1/data/customer
2388
+ +curl -H "X-Environment-Id: env_xyz" https://api.example.com/api/v1/data/customer
2389
+
2390
+ -OS_PROJECT_ID=env_xyz os dev
2391
+ +OS_ENVIRONMENT_ID=env_xyz os dev
2392
+
2393
+ -import { createSystemProjectPlugin, SYSTEM_PROJECT_ID } from "@objectstack/runtime";
2394
+ +import { createSystemEnvironmentPlugin, SYSTEM_ENVIRONMENT_ID } from "@objectstack/runtime";
2395
+
2396
+ -import { ProjectArtifactSchema } from "@objectstack/spec";
2397
+ +import { EnvironmentArtifactSchema } from "@objectstack/spec";
2398
+ ```
2399
+
2400
+ If you maintain a Cloud control-plane deployment, the `cloud` repository must
2401
+ be updated in lockstep to pick up the new plugin identifier strings
2402
+ (`single-environment`, `multi-environment`, `objectos-environment`).
2403
+
2404
+ ### Patch Changes
2405
+
2406
+ - Updated dependencies [629a716]
2407
+ - Updated dependencies [dbc4f7d]
2408
+ - Updated dependencies [944f187]
2409
+ - @objectstack/spec@6.0.0
2410
+ - @objectstack/platform-objects@6.0.0
2411
+ - @objectstack/core@6.0.0
2412
+ - @objectstack/types@6.0.0
2413
+ - @objectstack/metadata-core@6.0.0
2414
+ - @objectstack/metadata-fs@6.0.0
2415
+
2416
+ ## 5.2.0
2417
+
2418
+ ### Patch Changes
2419
+
2420
+ - Updated dependencies [bab2b20]
2421
+ - Updated dependencies [fa011d8]
2422
+ - Updated dependencies [f0f7c27]
2423
+ - Updated dependencies [b806f58]
2424
+ - @objectstack/platform-objects@5.2.0
2425
+ - @objectstack/spec@5.2.0
2426
+ - @objectstack/metadata-core@5.2.0
2427
+ - @objectstack/core@5.2.0
2428
+ - @objectstack/types@5.2.0
2429
+ - @objectstack/metadata-fs@5.2.0
2430
+
2431
+ ## 5.1.0
2432
+
2433
+ ### Patch Changes
2434
+
2435
+ - 75f4ee6: feat(metadata): introduce `executionPinned` capability for runtime version pinning (ADR-0009)
2436
+
2437
+ Adds a new capability flag on the metadata type registry so that types whose runtime
2438
+ transaction rows reference a specific historical version (flow, workflow, approval)
2439
+ get unified pinning behavior — instead of every business table re-implementing its
2440
+ own snapshot column.
2441
+
2442
+ - `MetadataTypeRegistryEntrySchema` gains `executionPinned: boolean`, enforced
2443
+ invariant `executionPinned ⇒ supportsVersioning`.
2444
+ - `flow`, `workflow`, `approval` flipped to `executionPinned: true`. `approval`
2445
+ also corrected to `supportsVersioning: true` (it was wrongly `false`).
2446
+ - `MetadataRepository.getByHash(ref, hash)` added to the interface. Production
2447
+ implementation in `SysMetadataRepository` resolves historical bodies through
2448
+ `sys_metadata_history` keyed by `(organization_id, type, name, checksum)`.
2449
+ In-memory and FS repositories serve HEAD-only matches.
2450
+ - `sys_metadata_history` gains an index on `(organization_id, type, name, checksum)`
2451
+ to keep hash lookups O(log n).
2452
+ - `HistoryCleanupManager` skips pinned types entirely (both age-based and
2453
+ count-based retention) — pinned-type history must never be GC'd.
2454
+
2455
+ See `docs/adr/0009-execution-pinned-metadata.md` for full rationale and the
2456
+ list of rejected alternatives (no shared snapshot table, no inlined snapshot column).
2457
+
2458
+ - 823d559: Remove `sys_metadata_history.metadata_id` column.
2459
+
2460
+ The column was originally a `Field.lookup` FK into `sys_metadata.id`,
2461
+ then downgraded to plain `text` during the M1 history-writes work so
2462
+ that DELETE tombstones could keep an orphaned ref. After M1 we
2463
+ concluded the column carries no business value:
2464
+
2465
+ - Audit-time joins use `(organization_id, type, name, version)`,
2466
+ which is already a UNIQUE composite key.
2467
+ - The physical row id is a database-internal detail with no logical
2468
+ identity — it cannot follow an item through delete + recreate.
2469
+ - No code reader was ever added.
2470
+
2471
+ This release removes the column outright:
2472
+
2473
+ - Dropped `metadata_id` from `SysMetadataHistoryObject`
2474
+ (`@objectstack/platform-objects`).
2475
+ - Dropped `metadataId` from `MetadataHistoryRecordSchema`
2476
+ (`@objectstack/spec`).
2477
+ - `SysMetadataRepository.put`/`delete` no longer write the column.
2478
+ - Legacy `DatabaseLoader.createHistoryRecord` no longer writes it;
2479
+ `getHistoryRecord`/`queryHistory` filter by `(type, name)` directly
2480
+ (no parent-row lookup needed).
2481
+ - `MetadataHistoryCleanup` `maxVersions` policy groups by
2482
+ `(type, name)` instead of `metadata_id`.
2483
+
2484
+ **Migration**: Drop the column from existing `sys_metadata_history`
2485
+ tables in a follow-up SQL migration. Existing history rows remain
2486
+ queryable since `(organization_id, type, name, version)` is already
2487
+ the canonical lookup key. No consumer code should be reading
2488
+ `metadata_id` — if you are, switch to `(organization_id, type, name,
2489
+ version)`.
2490
+
2491
+ See ADR-0008 §14 for the full rationale.
2492
+
2493
+ - Updated dependencies [75f4ee6]
2494
+ - Updated dependencies [823d559]
2495
+ - @objectstack/spec@5.1.0
2496
+ - @objectstack/metadata-core@5.1.0
2497
+ - @objectstack/platform-objects@5.1.0
2498
+ - @objectstack/metadata-fs@5.1.0
2499
+ - @objectstack/core@5.1.0
2500
+ - @objectstack/types@5.1.0
2501
+
2502
+ ## 5.0.0
2503
+
2504
+ ### Minor Changes
2505
+
2506
+ - 5e9dcb4: **BREAKING — metadata: remove `project` and `branch` from `MetaRef`**
2507
+
2508
+ The metadata layer no longer models project or branch. Customisation is now
2509
+ scoped purely to **organisation**. Project remains exclusively as an artifact
2510
+ packaging concept (the `objectstack.json` bundle envelope); branching is left
2511
+ to Git.
2512
+
2513
+ What changed:
2514
+
2515
+ - `MetaRef` is now `{ org, type, name, version? }` (was
2516
+ `{ org, project, branch, type, name, version? }`). `refKey()` is the two
2517
+ segment string `${org}/${type}/${name}` (was five segments).
2518
+ - `MetadataItem.seq` is monotonic **per org** (was per branch).
2519
+ - `BranchRef`, `MergeStrategy`, `MergeResult` types and the optional
2520
+ `fork`/`merge` methods on `MetadataRepository` are removed.
2521
+ - `ListFilter` / `WatchFilter` / `HistoryOptions` no longer accept `project`
2522
+ or `branch`.
2523
+ - `FileSystemRepository` disk layout simplified to
2524
+ `<root>/<type>/<name>.json` (was `<root>/<project>/<branch>/<type>/<name>.json`);
2525
+ change-log path is now `.objectstack/.log/main.jsonl` regardless of any
2526
+ branch concept. Constructor no longer accepts `project` / `branch`.
2527
+ - `SysMetadataRepository`: removed `projectLabel` / `branchLabel` options;
2528
+ the `sys_metadata` schema's `project_id` / `branch` columns (if present)
2529
+ are ignored. A future major release will `DROP` them.
2530
+ - `MetadataManager.setRepository(repo, opts)` no longer takes an opts object
2531
+ with `branch`.
2532
+
2533
+ Migration:
2534
+
2535
+ ```diff
2536
+ -const ref = { org: 'acme', project: 'crm', branch: 'main', type: 'view', name: 'home' };
2537
+ +const ref = { org: 'acme', type: 'view', name: 'home' };
2538
+
2539
+ -new FileSystemRepository({ root, org: 'acme', project: 'crm', branch: 'main' });
2540
+ +new FileSystemRepository({ root, org: 'acme' });
2541
+ ```
2542
+
2543
+ Existing `sys_metadata` rows continue to load; the deprecated columns are
2544
+ ignored at read time.
2545
+
2546
+ - 8b298c7: Attach an `@objectstack/metadata-core` `MetadataRepository` as a
2547
+ supplementary event source on `MetadataManager` (ADR-0008 M0 PR-6).
2548
+
2549
+ When a repository is configured via `manager.setRepository(repo)`:
2550
+
2551
+ - the manager subscribes to `repo.watch({ branch: 'main' })` and re-emits
2552
+ each event through the legacy `MetadataWatchEvent` channel that
2553
+ `manager.subscribe(type, cb)` already exposes, so existing HMR / SSE
2554
+ pipelines pick up changes from the new layer automatically;
2555
+ - each event also invalidates the in-memory registry entry and the
2556
+ `list()` cache for the affected type, so subsequent reads fall
2557
+ through to the repository / loaders instead of returning stale data;
2558
+ - a new `manager.dispose()` method drains the watch loop and the FS
2559
+ watcher cleanly. `MetadataPlugin.stop()` calls it.
2560
+
2561
+ `MetadataPlugin.start()` now instantiates a `FileSystemRepository`
2562
+ rooted at `<rootDir>/.objectstack/metadata/` (separate from user source
2563
+ files) and attaches it automatically when not in `artifact-only` mode.
2564
+
2565
+ No write-mirroring yet — `register()` / `unregister()` / `save()` keep
2566
+ their existing semantics; the canonical write path migrates in PR-10.
2567
+
2568
+ - 9e51868: Server-side artifact-file watcher; CLI no longer posts to the HMR
2569
+ endpoint on recompile (ADR-0008 M0 PR-8).
2570
+
2571
+ `MetadataPlugin.start()` now attaches a chokidar watcher on the
2572
+ `artifactSource.path` when running in local-file mode with `watch !==
2573
+ false`. On every artifact change it re-invokes `_loadFromLocalFile`
2574
+ and broadcasts a `reload` event through the HMR hub. This replaces
2575
+ the previous arrangement where `os dev`'s watch-recompile loop POSTed
2576
+ `/api/v1/dev/metadata-events` to trigger a reload — the server is now
2577
+ autonomous.
2578
+
2579
+ The CLI `dev` command's recompile loop drops the POST call; the
2580
+ `/api/v1/dev/metadata-events` route remains available for external
2581
+ trigger sources (cloud webhooks, git hooks, ad-hoc curl).
2582
+
2583
+ `MetadataPlugin.stop()` closes the artifact watcher cleanly.
2584
+
2585
+ - ddf8080: ADR-0008 M0 PR-9: thread the canonical server-side change-log `seq` from
2586
+ `MetadataRepository` events through to the Studio HMR badge. The
2587
+ `useMetadataHmr()` hook now exposes `lastSeq` alongside the local
2588
+ `version` counter, and the badge tooltip renders "Repo seq: #N" so
2589
+ operators can correlate Studio reloads with what other replicas observe.
2590
+ Legacy chokidar-driven events still work — they simply leave `seq`
2591
+ undefined and consumers fall back to the local counter.
2592
+
2593
+ ### Patch Changes
2594
+
2595
+ - 96ad4df: Fix dev-mode HMR data-reload for `*.view.ts` / `*.flow.ts` source-file edits.
2596
+
2597
+ Three coordinated fixes close the long-standing gap where editing a
2598
+ declarative-metadata source file in dev (e.g. `case.view.ts`) would
2599
+ recompile `dist/objectstack.json` but the running server kept serving
2600
+ the stale boot-time value:
2601
+
2602
+ 1. **`@objectstack/objectql`** — `ObjectStackProtocolImplementation.getMetaItem`
2603
+ now consults `MetadataService` (HMR-aware) **before** the in-memory
2604
+ `SchemaRegistry` (boot-time cache). Previously the registry shadowed
2605
+ freshly-registered values: `manager.register('view','case',newDef)`
2606
+ updated MetadataManager but `getMetaItem` returned the stale registry
2607
+ copy because step 2 (registry) ran before step 3 (service). Reordered
2608
+ to "1. sys_metadata overlay → 2. MetadataService → 3. SchemaRegistry".
2609
+
2610
+ 2. **`@objectstack/runtime`** — `createStandaloneStack` now enables the
2611
+ `MetadataPlugin` artifact-file watcher in non-production environments
2612
+ (`NODE_ENV !== 'production'`). Previously hard-coded to `watch: false`,
2613
+ leaving nothing watching `dist/objectstack.json` when the CLI dev mode
2614
+ recompiled it.
2615
+
2616
+ 3. **`@objectstack/metadata`** & **`@objectstack/metadata-fs`** — Both
2617
+ chokidar watchers now use `usePolling: true` to avoid `fs.watch`
2618
+ EMFILE on macOS / busy dev hosts where the native file-descriptor
2619
+ pool can be exhausted by other long-running node processes.
2620
+
2621
+ With these three changes:
2622
+
2623
+ - CLI edits source → recompile artifact (~400ms)
2624
+ - Server's polling chokidar detects artifact change → `_loadFromLocalFile`
2625
+ - `_loadFromLocalFile` calls `manager.register(type, name, item)`
2626
+ - MetadataService now has the fresh value
2627
+ - Read path returns the fresh value via the new step-2 lookup
2628
+ - Studio SSE listeners re-render
2629
+
2630
+ - df18ae9: Fix dev-mode HMR data-reload for view metadata.
2631
+
2632
+ `MetadataPlugin._parseAndRegisterArtifact` previously required a top-level
2633
+ `name` on every artifact item and silently skipped those without one.
2634
+ View bundles in the compiled artifact carry no top-level `name` (their
2635
+ identity is the target object, encoded under `list.data.object` /
2636
+ `form.data.object` — same pattern used by `ObjectQL.SchemaRegistry`'s
2637
+ `resolveMetadataItemName`). As a result, artifact-loaded views never
2638
+ reached `MetadataManager`, and HMR file pushes never affected the read
2639
+ path: API responses kept returning the boot-time `SchemaRegistry` copy.
2640
+
2641
+ This change derives the registration key from `list.data.object` (or
2642
+ `form.data.object`) when no top-level `name` is present, mirroring the
2643
+ ObjectQL convention.
2644
+
2645
+ Also splits the `MetadataPlugin` watch flag into two independent
2646
+ options so dev mode can enable artifact-file HMR without paying the
2647
+ cost of the source-file scanner:
2648
+
2649
+ - `watch` — controls `NodeMetadataManager`'s recursive source scan
2650
+ (default `false`; turning it on in artifact mode would polling-scan
2651
+ the entire project root including `node_modules`).
2652
+ - `artifactWatch` — controls the cheap single-file polling watcher on
2653
+ the compiled artifact (`dist/objectstack.json`). The standalone stack
2654
+ enables this automatically when `NODE_ENV !== 'production'`.
2655
+
2656
+ - Updated dependencies [5e9dcb4]
2657
+ - Updated dependencies [4150fe4]
2658
+ - Updated dependencies [8337cdb]
2659
+ - Updated dependencies [58835a6]
2660
+ - Updated dependencies [8cc30b4]
2661
+ - Updated dependencies [32ce912]
2662
+ - Updated dependencies [888a5c1]
2663
+ - Updated dependencies [96ad4df]
2664
+ - Updated dependencies [2f9073a]
2665
+ - @objectstack/metadata-core@5.0.0
2666
+ - @objectstack/metadata-fs@5.0.0
2667
+ - @objectstack/platform-objects@5.0.0
2668
+ - @objectstack/spec@5.0.0
2669
+ - @objectstack/core@5.0.0
2670
+ - @objectstack/types@5.0.0
2671
+
2672
+ ## 4.2.0
2673
+
2674
+ ### Patch Changes
2675
+
2676
+ - 3a99239: Metadata HMR via SSE — close the agent-edits → preview-refresh loop.
2677
+
2678
+ - `@objectstack/metadata`: register `/api/v1/dev/metadata-events` SSE endpoint unconditionally;
2679
+ add `POST` trigger that reloads the artifact and broadcasts a `reload` event to all listeners.
2680
+ - `@objectstack/cli` (`os dev`): chokidar-based watch on `objectstack.config.ts` and `src/`;
2681
+ debounced recompile + `POST` to the HMR endpoint so the server reloads without restart.
2682
+ - `@objectstack/studio`: `useMetadataHmr` provider opens an `EventSource`, exposes a version
2683
+ counter; previews include it in their query deps, and a top-bar badge surfaces connection
2684
+ state and event counts for diagnostics.
2685
+
2686
+ - Updated dependencies [2869891]
2687
+ - @objectstack/spec@4.2.0
2688
+ - @objectstack/core@4.2.0
2689
+ - @objectstack/platform-objects@4.2.0
2690
+ - @objectstack/types@4.2.0
2691
+
2692
+ ## 4.1.1
2693
+
2694
+ ### Patch Changes
2695
+
2696
+ - @objectstack/spec@4.1.1
2697
+ - @objectstack/core@4.1.1
2698
+ - @objectstack/types@4.1.1
2699
+ - @objectstack/platform-objects@4.1.1
2700
+
2701
+ ## 4.1.0
2702
+
2703
+ ### Minor Changes
2704
+
2705
+ - 1234920: v3.1 — Runtime controls & read-through cache.
2706
+
2707
+ - Generic `LRUCache` (lazy TTL, promote-on-get, size cap, hits/misses/hitRate stats) wired into `DatabaseLoader.{load,loadMany,list,stat}` with write invalidation. Configured via `cache.databaseLoader`.
2708
+ - `MetadataPluginConfig.bootstrap` modes: `eager` (default), `lazy`, `artifact-only`. `artifact-only` requires `artifactSource.mode = 'local-file'`.
2709
+ - `MetadataManagerConfig.persistence` two-axis write gates: `writable` (gates `register()`) and `overlayWritable` (gates `saveOverlay()`). Both default `true`; either becomes a throw under `validation.throwOnError`.
2710
+ - Single-source schema discipline: canonical `MetadataManagerConfigSchema` / `MetadataFallbackStrategySchema` live in `kernel/metadata-loader.zod.ts` and are re-exported from `system/metadata-persistence.zod.ts`.
2711
+
2712
+ ### Patch Changes
2713
+
2714
+ - Updated dependencies [2108c30]
2715
+ - Updated dependencies [23db640]
2716
+ - @objectstack/spec@4.1.0
2717
+ - @objectstack/core@4.1.0
2718
+ - @objectstack/platform-objects@4.1.0
2719
+ - @objectstack/types@4.1.0
2720
+
2721
+ ## 4.0.5
2722
+
2723
+ ### Patch Changes
2724
+
2725
+ - 15e0df6: chore: unify all package versions to a single patch release
2726
+ - Updated dependencies [15e0df6]
2727
+ - @objectstack/spec@4.0.5
2728
+ - @objectstack/core@4.0.5
2729
+ - @objectstack/types@4.0.5
2730
+ - @objectstack/platform-objects@4.0.5
2731
+
2732
+ ## 4.0.4
2733
+
2734
+ ### Patch Changes
2735
+
2736
+ - Updated dependencies [326b66b]
2737
+ - @objectstack/spec@4.0.4
2738
+ - @objectstack/core@4.0.4
2739
+ - @objectstack/types@4.0.4
2740
+
2741
+ ## 4.0.3
2742
+
2743
+ ### Patch Changes
2744
+
2745
+ - @objectstack/spec@4.0.3
2746
+ - @objectstack/core@4.0.3
2747
+ - @objectstack/types@4.0.3
2748
+
2749
+ ## 4.0.2
2750
+
2751
+ ### Patch Changes
2752
+
2753
+ - Updated dependencies [5f659e9]
2754
+ - @objectstack/spec@4.0.2
2755
+ - @objectstack/core@4.0.2
2756
+ - @objectstack/types@4.0.2
2757
+
2758
+ ## 4.0.0
2759
+
2760
+ ### Patch Changes
2761
+
2762
+ - Updated dependencies [f08ffc3]
2763
+ - Updated dependencies [e0b0a78]
2764
+ - @objectstack/spec@4.0.0
2765
+ - @objectstack/core@4.0.0
2766
+ - @objectstack/types@4.0.0
2767
+
2768
+ ## 3.3.1
2769
+
2770
+ ### Patch Changes
2771
+
2772
+ - @objectstack/spec@3.3.1
2773
+ - @objectstack/core@3.3.1
2774
+ - @objectstack/types@3.3.1
2775
+
2776
+ ## 3.3.0
2777
+
2778
+ ### Patch Changes
2779
+
2780
+ - Fix ERR_MODULE_NOT_FOUND on Vercel: add `"type": "module"` and update exports to use `.js`/`.cjs` pattern (consistent with @objectstack/core, @objectstack/runtime)
2781
+ - @objectstack/spec@3.3.0
2782
+ - @objectstack/core@3.3.0
2783
+ - @objectstack/types@3.3.0
2784
+
2785
+ ## 3.2.9
2786
+
2787
+ ### Patch Changes
2788
+
2789
+ - @objectstack/spec@3.2.9
2790
+ - @objectstack/core@3.2.9
2791
+ - @objectstack/types@3.2.9
2792
+
2793
+ ## 3.2.8
2794
+
2795
+ ### Patch Changes
2796
+
2797
+ - @objectstack/spec@3.2.8
2798
+ - @objectstack/core@3.2.8
2799
+ - @objectstack/types@3.2.8
2800
+
2801
+ ## 3.2.7
2802
+
2803
+ ### Patch Changes
2804
+
2805
+ - @objectstack/spec@3.2.7
2806
+ - @objectstack/core@3.2.7
2807
+ - @objectstack/types@3.2.7
2808
+
2809
+ ## 3.2.6
2810
+
2811
+ ### Patch Changes
2812
+
2813
+ - @objectstack/spec@3.2.6
2814
+ - @objectstack/core@3.2.6
2815
+ - @objectstack/types@3.2.6
2816
+
2817
+ ## 3.2.5
2818
+
2819
+ ### Patch Changes
2820
+
2821
+ - @objectstack/spec@3.2.5
2822
+ - @objectstack/core@3.2.5
2823
+ - @objectstack/types@3.2.5
2824
+
2825
+ ## 3.2.4
2826
+
2827
+ ### Patch Changes
2828
+
2829
+ - @objectstack/spec@3.2.4
2830
+ - @objectstack/core@3.2.4
2831
+ - @objectstack/types@3.2.4
2832
+
2833
+ ## 3.2.3
2834
+
2835
+ ### Patch Changes
2836
+
2837
+ - @objectstack/spec@3.2.3
2838
+ - @objectstack/core@3.2.3
2839
+ - @objectstack/types@3.2.3
2840
+
2841
+ ## 3.2.2
2842
+
2843
+ ### Patch Changes
2844
+
2845
+ - Updated dependencies [46defbb]
2846
+ - @objectstack/spec@3.2.2
2847
+ - @objectstack/core@3.2.2
2848
+ - @objectstack/types@3.2.2
2849
+
2850
+ ## 3.2.1
2851
+
2852
+ ### Patch Changes
2853
+
2854
+ - Updated dependencies [850b546]
2855
+ - @objectstack/spec@3.2.1
2856
+ - @objectstack/core@3.2.1
2857
+ - @objectstack/types@3.2.1
2858
+
2859
+ ## 3.2.0
2860
+
2861
+ ### Patch Changes
2862
+
2863
+ - Updated dependencies [5901c29]
2864
+ - @objectstack/spec@3.2.0
2865
+ - @objectstack/core@3.2.0
2866
+ - @objectstack/types@3.2.0
2867
+
2868
+ ## 3.1.1
2869
+
2870
+ ### Patch Changes
2871
+
2872
+ - Updated dependencies [953d667]
2873
+ - @objectstack/spec@3.1.1
2874
+ - @objectstack/core@3.1.1
2875
+ - @objectstack/types@3.1.1
2876
+
2877
+ ## 3.1.0
2878
+
2879
+ ### Patch Changes
2880
+
2881
+ - Updated dependencies [0088830]
2882
+ - @objectstack/spec@3.1.0
2883
+ - @objectstack/core@3.1.0
2884
+ - @objectstack/types@3.1.0
2885
+
2886
+ ## 3.0.11
2887
+
2888
+ ### Patch Changes
2889
+
2890
+ - Updated dependencies [92d9d99]
2891
+ - @objectstack/spec@3.0.11
2892
+ - @objectstack/core@3.0.11
2893
+ - @objectstack/types@3.0.11
2894
+
2895
+ ## 3.0.10
2896
+
2897
+ ### Patch Changes
2898
+
2899
+ - Updated dependencies [d1e5d31]
2900
+ - @objectstack/spec@3.0.10
2901
+ - @objectstack/core@3.0.10
2902
+ - @objectstack/types@3.0.10
2903
+
2904
+ ## 3.0.9
2905
+
2906
+ ### Patch Changes
2907
+
2908
+ - Updated dependencies [15e0df6]
2909
+ - @objectstack/spec@3.0.9
2910
+ - @objectstack/core@3.0.9
2911
+ - @objectstack/types@3.0.9
2912
+
2913
+ ## 3.0.8
2914
+
2915
+ ### Patch Changes
2916
+
2917
+ - Updated dependencies [5a968a2]
2918
+ - @objectstack/spec@3.0.8
2919
+ - @objectstack/core@3.0.8
2920
+ - @objectstack/types@3.0.8
2921
+
2922
+ ## 3.0.7
2923
+
2924
+ ### Patch Changes
2925
+
2926
+ - Updated dependencies [0119bd7]
2927
+ - Updated dependencies [5426bdf]
2928
+ - @objectstack/spec@3.0.7
2929
+ - @objectstack/core@3.0.7
2930
+ - @objectstack/types@3.0.7
2931
+
2932
+ ## 3.0.6
2933
+
2934
+ ### Patch Changes
2935
+
2936
+ - Updated dependencies [5df254c]
2937
+ - @objectstack/spec@3.0.6
2938
+ - @objectstack/core@3.0.6
2939
+ - @objectstack/types@3.0.6
2940
+
2941
+ ## 3.0.5
2942
+
2943
+ ### Patch Changes
2944
+
2945
+ - Updated dependencies [23a4a68]
2946
+ - @objectstack/spec@3.0.5
2947
+ - @objectstack/core@3.0.5
2948
+ - @objectstack/types@3.0.5
2949
+
2950
+ ## 3.0.4
2951
+
2952
+ ### Patch Changes
2953
+
2954
+ - Updated dependencies [d738987]
2955
+ - @objectstack/spec@3.0.4
2956
+ - @objectstack/core@3.0.4
2957
+ - @objectstack/types@3.0.4
2958
+
2959
+ ## 3.0.3
2960
+
2961
+ ### Patch Changes
2962
+
2963
+ - c7267f6: Patch release for maintenance updates and improvements.
2964
+ - Updated dependencies [c7267f6]
2965
+ - @objectstack/spec@3.0.3
2966
+ - @objectstack/core@3.0.3
2967
+ - @objectstack/types@3.0.3
2968
+
2969
+ ## 3.0.2
2970
+
2971
+ ### Patch Changes
2972
+
2973
+ - Updated dependencies [28985f5]
2974
+ - @objectstack/spec@3.0.2
2975
+ - @objectstack/core@3.0.2
2976
+ - @objectstack/types@3.0.2
2977
+
2978
+ ## 3.0.1
2979
+
2980
+ ### Patch Changes
2981
+
2982
+ - Updated dependencies [389725a]
2983
+ - @objectstack/spec@3.0.1
2984
+ - @objectstack/core@3.0.1
2985
+ - @objectstack/types@3.0.1
2986
+
2987
+ ## 3.0.0
2988
+
2989
+ ### Major Changes
2990
+
2991
+ - Release v3.0.0 — unified version bump for all ObjectStack packages.
2992
+
2993
+ ### Patch Changes
2994
+
2995
+ - Updated dependencies
2996
+ - @objectstack/spec@3.0.0
2997
+ - @objectstack/core@3.0.0
2998
+ - @objectstack/types@3.0.0
2999
+
3000
+ ## 2.0.7
3001
+
3002
+ ### Patch Changes
3003
+
3004
+ - Updated dependencies
3005
+ - @objectstack/spec@2.0.7
3006
+ - @objectstack/core@2.0.7
3007
+ - @objectstack/types@2.0.7
3008
+
3009
+ ## 2.0.6
3010
+
3011
+ ### Patch Changes
3012
+
3013
+ - Patch release for maintenance and stability improvements
3014
+ - Updated dependencies
3015
+ - @objectstack/spec@2.0.6
3016
+ - @objectstack/core@2.0.6
3017
+ - @objectstack/types@2.0.6
3018
+
3019
+ ## 2.0.5
3020
+
3021
+ ### Patch Changes
3022
+
3023
+ - Updated dependencies
3024
+ - @objectstack/spec@2.0.5
3025
+ - @objectstack/core@2.0.5
3026
+ - @objectstack/types@2.0.5
3027
+
3028
+ ## 2.0.4
3029
+
3030
+ ### Patch Changes
3031
+
3032
+ - Patch release for maintenance and stability improvements
3033
+ - Updated dependencies
3034
+ - @objectstack/spec@2.0.4
3035
+ - @objectstack/core@2.0.4
3036
+ - @objectstack/types@2.0.4
3037
+
3038
+ ## 2.0.3
3039
+
3040
+ ### Patch Changes
3041
+
3042
+ - Patch release for maintenance and stability improvements
3043
+ - Updated dependencies
3044
+ - @objectstack/spec@2.0.3
3045
+ - @objectstack/core@2.0.3
3046
+ - @objectstack/types@2.0.3
3047
+
3048
+ ## 2.0.2
3049
+
3050
+ ### Patch Changes
3051
+
3052
+ - Updated dependencies [1db8559]
3053
+ - @objectstack/spec@2.0.2
3054
+ - @objectstack/core@2.0.2
3055
+ - @objectstack/types@2.0.2
3056
+
3057
+ ## 2.0.1
3058
+
3059
+ ### Patch Changes
3060
+
3061
+ - Patch release for maintenance and stability improvements
3062
+ - Updated dependencies
3063
+ - @objectstack/spec@2.0.1
3064
+ - @objectstack/core@2.0.1
3065
+ - @objectstack/types@2.0.1
3066
+
3067
+ ## 2.0.0
3068
+
3069
+ ### Patch Changes
3070
+
3071
+ - Updated dependencies [38e5dd5]
3072
+ - Updated dependencies [38e5dd5]
3073
+ - @objectstack/spec@2.0.0
3074
+ - @objectstack/core@2.0.0
3075
+ - @objectstack/types@2.0.0
3076
+
3077
+ ## 1.0.12
3078
+
3079
+ ### Patch Changes
3080
+
3081
+ - Updated dependencies
3082
+ - @objectstack/spec@1.0.12
3083
+ - @objectstack/core@1.0.12
3084
+ - @objectstack/types@1.0.12
3085
+
3086
+ ## 1.0.11
3087
+
3088
+ ### Patch Changes
3089
+
3090
+ - @objectstack/spec@1.0.11
3091
+ - @objectstack/core@1.0.11
3092
+ - @objectstack/types@1.0.11
3093
+
3094
+ ## 1.0.10
3095
+
3096
+ ### Patch Changes
3097
+
3098
+ - Updated dependencies [10f52e1]
3099
+ - @objectstack/core@1.0.10
3100
+ - @objectstack/spec@1.0.10
3101
+ - @objectstack/types@1.0.10
3102
+
3103
+ ## 1.0.9
3104
+
3105
+ ### Patch Changes
3106
+
3107
+ - @objectstack/spec@1.0.9
3108
+ - @objectstack/core@1.0.9
3109
+ - @objectstack/types@1.0.9
3110
+
3111
+ ## 1.0.8
3112
+
3113
+ ### Patch Changes
3114
+
3115
+ - @objectstack/spec@1.0.8
3116
+ - @objectstack/core@1.0.8
3117
+ - @objectstack/types@1.0.8
3118
+
3119
+ ## 1.0.7
3120
+
3121
+ ### Patch Changes
3122
+
3123
+ - @objectstack/spec@1.0.7
3124
+ - @objectstack/core@1.0.7
3125
+ - @objectstack/types@1.0.7
3126
+
3127
+ ## 1.0.6
3128
+
3129
+ ### Patch Changes
3130
+
3131
+ - Updated dependencies [a7f7b9d]
3132
+ - @objectstack/spec@1.0.6
3133
+ - @objectstack/core@1.0.6
3134
+ - @objectstack/types@1.0.6
3135
+
3136
+ ## 1.0.5
3137
+
3138
+ ### Patch Changes
3139
+
3140
+ - b1d24bd: refactor: migrate build system from tsc to tsup for faster builds
3141
+ - Replaced `tsc` with `tsup` (using esbuild) across all packages
3142
+ - Added shared `tsup.config.ts` in workspace root
3143
+ - Added `tsup` as workspace dev dependency
3144
+ - significantly improved build performance
3145
+ - Updated dependencies [b1d24bd]
3146
+ - @objectstack/core@1.0.5
3147
+ - @objectstack/types@1.0.5
3148
+ - @objectstack/spec@1.0.5
3149
+
3150
+ ## 1.0.4
3151
+
3152
+ ### Patch Changes
3153
+
3154
+ - @objectstack/spec@1.0.4
3155
+ - @objectstack/core@1.0.4
3156
+ - @objectstack/types@1.0.4
3157
+
3158
+ ## 1.0.3
3159
+
3160
+ ### Patch Changes
3161
+
3162
+ - Updated dependencies [fb2eabd]
3163
+ - @objectstack/core@1.0.3
3164
+ - @objectstack/spec@1.0.3
3165
+ - @objectstack/types@1.0.3
3166
+
3167
+ ## 1.0.2
3168
+
3169
+ ### Patch Changes
3170
+
3171
+ - a0a6c85: Infrastructure and development tooling improvements
3172
+
3173
+ - Add changeset configuration for automated version management
3174
+ - Add comprehensive GitHub Actions workflows (CI, CodeQL, linting, releases)
3175
+ - Add development configuration files (.cursorrules, .github/prompts)
3176
+ - Add documentation files (ARCHITECTURE.md, CONTRIBUTING.md, workflows docs)
3177
+ - Update test script configuration in package.json
3178
+ - Add @objectstack/cli to devDependencies for better development experience
3179
+
3180
+ - 109fc5b: Unified patch release to align all package versions.
3181
+ - Updated dependencies [a0a6c85]
3182
+ - Updated dependencies [109fc5b]
3183
+ - @objectstack/spec@1.0.2
3184
+ - @objectstack/core@1.0.2
3185
+ - @objectstack/types@1.0.2
3186
+
3187
+ ## 1.0.1
3188
+
3189
+ ### Patch Changes
3190
+
3191
+ - @objectstack/spec@1.0.1
3192
+ - @objectstack/core@1.0.1
3193
+ - @objectstack/types@1.0.1
3194
+
3195
+ ## 1.0.0
3196
+
3197
+ ### Major Changes
3198
+
3199
+ - Major version release for ObjectStack Protocol v1.0.
3200
+ - Stabilized Protocol Definitions
3201
+ - Enhanced Runtime Plugin Support
3202
+ - Fixed Type Compliance across Monorepo
3203
+
3204
+ ### Patch Changes
3205
+
3206
+ - Updated dependencies
3207
+ - @objectstack/spec@1.0.0
3208
+ - @objectstack/core@1.0.0
3209
+ - @objectstack/types@1.0.0
3210
+
3211
+ ## 0.9.2
3212
+
3213
+ ### Patch Changes
3214
+
3215
+ - Updated dependencies
3216
+ - @objectstack/spec@0.9.2
3217
+ - @objectstack/core@0.9.2
3218
+ - @objectstack/types@0.9.2
3219
+
3220
+ ## 0.9.1
3221
+
3222
+ ### Patch Changes
3223
+
3224
+ - Patch release for maintenance and stability improvements. All packages updated with unified versioning.
3225
+ - Updated dependencies
3226
+ - @objectstack/spec@0.9.1
3227
+ - @objectstack/core@0.9.1
3228
+ - @objectstack/types@0.9.1
3229
+
3230
+ ## 0.8.2
3231
+
3232
+ ### Patch Changes
3233
+
3234
+ - Updated dependencies [555e6a7]
3235
+ - @objectstack/spec@0.8.2
3236
+ - @objectstack/core@0.8.2
3237
+ - @objectstack/types@0.8.2
3238
+
3239
+ ## 0.8.1
3240
+
3241
+ ### Patch Changes
3242
+
3243
+ - @objectstack/spec@0.8.1
3244
+ - @objectstack/core@0.8.1
3245
+ - @objectstack/types@0.8.1
3246
+
3247
+ ## 1.0.0
3248
+
3249
+ ### Minor Changes
3250
+
3251
+ - # Upgrade to Zod v4 and Protocol Improvements
3252
+
3253
+ This release includes a major upgrade to the core validation engine (Zod v4) and aligns all protocol definitions with stricter type safety.
3254
+
3255
+ ### Patch Changes
3256
+
3257
+ - Updated dependencies
3258
+ - @objectstack/spec@1.0.0
3259
+ - @objectstack/core@1.0.0
3260
+ - @objectstack/types@1.0.0
3261
+
3262
+ ## 0.7.2
3263
+
3264
+ ### Patch Changes
3265
+
3266
+ - Updated dependencies [fb41cc0]
3267
+ - @objectstack/spec@0.7.2
3268
+ - @objectstack/core@0.7.2
3269
+ - @objectstack/types@0.7.2
3270
+
3271
+ ## 0.7.1
3272
+
3273
+ ### Patch Changes
3274
+
3275
+ - Updated dependencies
3276
+ - @objectstack/spec@0.7.1
3277
+ - @objectstack/types@0.7.1
3278
+ - @objectstack/core@0.7.1