@objectstack/metadata 17.0.0-rc.0 → 17.0.0-rc.2

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