@sixb/core 0.1.1 → 0.1.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.
Files changed (1133) hide show
  1. package/README.md +31 -20
  2. package/dist/actions/commit-edits.d.ts +0 -2
  3. package/dist/actions/commit-edits.d.ts.map +1 -1
  4. package/dist/actions/execution.d.ts +21 -0
  5. package/dist/actions/execution.d.ts.map +1 -0
  6. package/dist/actions/index.d.ts +1 -1
  7. package/dist/actions/index.d.ts.map +1 -1
  8. package/dist/actions/index.js +35 -24
  9. package/dist/actions/index.js.map +1 -1
  10. package/dist/actions/registry.d.ts +16 -7
  11. package/dist/actions/registry.d.ts.map +1 -1
  12. package/dist/actions/request.d.ts +3 -2
  13. package/dist/actions/request.d.ts.map +1 -1
  14. package/dist/actions/run-dispatch.d.ts +21 -0
  15. package/dist/actions/run-dispatch.d.ts.map +1 -0
  16. package/dist/actions/types/context.d.ts +2 -2
  17. package/dist/actions/types/context.d.ts.map +1 -1
  18. package/dist/actions/validation.d.ts +1 -1
  19. package/dist/actions/validation.d.ts.map +1 -1
  20. package/dist/actions/worker.js +7 -7
  21. package/dist/actions/worker.js.map +1 -1
  22. package/dist/agents/adapters.d.ts +10 -0
  23. package/dist/agents/adapters.d.ts.map +1 -1
  24. package/dist/agents/authority.d.ts +31 -0
  25. package/dist/agents/authority.d.ts.map +1 -0
  26. package/dist/agents/context.js +2 -2
  27. package/dist/agents/dispatch.d.ts.map +1 -1
  28. package/dist/agents/errors.d.ts +1 -1
  29. package/dist/agents/errors.d.ts.map +1 -1
  30. package/dist/agents/execution.d.ts +45 -0
  31. package/dist/agents/execution.d.ts.map +1 -0
  32. package/dist/agents/index.d.ts +6 -6
  33. package/dist/agents/index.d.ts.map +1 -1
  34. package/dist/agents/index.js +64 -16
  35. package/dist/agents/index.js.map +1 -1
  36. package/dist/agents/prompt.d.ts.map +1 -1
  37. package/dist/agents/request.d.ts +6 -2
  38. package/dist/agents/request.d.ts.map +1 -1
  39. package/dist/agents/streams.d.ts +29 -3
  40. package/dist/agents/streams.d.ts.map +1 -1
  41. package/dist/agents/streams.js +22 -3
  42. package/dist/agents/streams.js.map +1 -1
  43. package/dist/agents/types.d.ts +2 -2
  44. package/dist/agents/types.d.ts.map +1 -1
  45. package/dist/agents/validation.d.ts +3 -3
  46. package/dist/agents/validation.d.ts.map +1 -1
  47. package/dist/auth/attribution.d.ts +17 -0
  48. package/dist/auth/attribution.d.ts.map +1 -0
  49. package/dist/auth/index.d.ts +1 -0
  50. package/dist/auth/index.d.ts.map +1 -1
  51. package/dist/auth/index.js +9 -5
  52. package/dist/auth/index.js.map +1 -1
  53. package/dist/auth/runtime.d.ts +4 -4
  54. package/dist/auth/runtime.d.ts.map +1 -1
  55. package/dist/authorization/decision.d.ts +24 -11
  56. package/dist/authorization/decision.d.ts.map +1 -1
  57. package/dist/authorization/grant-kinds.d.ts +2 -1
  58. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  59. package/dist/authorization/index.d.ts +1 -1
  60. package/dist/authorization/index.d.ts.map +1 -1
  61. package/dist/authorization/index.js +8 -4
  62. package/dist/authorization/index.js.map +1 -1
  63. package/dist/blob-storage/browser.js +2 -2
  64. package/dist/blob-storage/execution.d.ts +16 -0
  65. package/dist/blob-storage/execution.d.ts.map +1 -0
  66. package/dist/blob-storage/index.js +3 -3
  67. package/dist/bootstrap/discovery.d.ts +90 -24
  68. package/dist/bootstrap/discovery.d.ts.map +1 -1
  69. package/dist/bootstrap/index.d.ts +2 -1
  70. package/dist/bootstrap/index.d.ts.map +1 -1
  71. package/dist/bootstrap/index.js +60 -60
  72. package/dist/bootstrap/index.js.map +1 -1
  73. package/dist/broker/in-memory.d.ts.map +1 -1
  74. package/dist/broker/index.js +2 -2
  75. package/dist/broker/types.d.ts +5 -0
  76. package/dist/broker/types.d.ts.map +1 -1
  77. package/dist/chunk-0172wgm9.js +333 -0
  78. package/dist/chunk-0172wgm9.js.map +11 -0
  79. package/dist/chunk-0k4avqr2.js +317 -0
  80. package/dist/chunk-0k4avqr2.js.map +11 -0
  81. package/dist/chunk-0mbx247x.js +2922 -0
  82. package/dist/chunk-0mbx247x.js.map +43 -0
  83. package/dist/chunk-34bqh420.js +1168 -0
  84. package/dist/chunk-34bqh420.js.map +23 -0
  85. package/dist/{chunk-y2ygpd0m.js → chunk-3j7573mj.js} +2 -2
  86. package/dist/{chunk-y2ygpd0m.js.map → chunk-3j7573mj.js.map} +2 -2
  87. package/dist/{chunk-md9jbrm9.js → chunk-4gz41why.js} +1 -1
  88. package/dist/chunk-4x43bkbp.js +55 -0
  89. package/dist/chunk-4x43bkbp.js.map +11 -0
  90. package/dist/{chunk-xqbtf4wn.js → chunk-57r1cpxx.js} +3 -2
  91. package/dist/{chunk-xqbtf4wn.js.map → chunk-57r1cpxx.js.map} +3 -3
  92. package/dist/chunk-57zpb99z.js +194 -0
  93. package/dist/chunk-57zpb99z.js.map +10 -0
  94. package/dist/{chunk-nbywkytr.js → chunk-5egfka8j.js} +13 -33
  95. package/dist/chunk-5egfka8j.js.map +15 -0
  96. package/dist/chunk-5gd7tpv6.js +28 -0
  97. package/dist/chunk-5gd7tpv6.js.map +11 -0
  98. package/dist/{chunk-867jxh7c.js → chunk-5sz8ta9r.js} +6 -295
  99. package/dist/chunk-5sz8ta9r.js.map +16 -0
  100. package/dist/chunk-62c7t4jc.js +27 -0
  101. package/dist/chunk-62c7t4jc.js.map +11 -0
  102. package/dist/chunk-63te770v.js.map +1 -1
  103. package/dist/chunk-663csy96.js +34 -0
  104. package/dist/chunk-663csy96.js.map +10 -0
  105. package/dist/{chunk-xz5g49bp.js → chunk-6gjqgd3d.js} +3 -1
  106. package/dist/chunk-6gjqgd3d.js.map +11 -0
  107. package/dist/chunk-7pc8b818.js +128 -0
  108. package/dist/chunk-7pc8b818.js.map +13 -0
  109. package/dist/{chunk-sb0shdvv.js → chunk-85j5ybfj.js} +1 -1
  110. package/dist/{chunk-sb0shdvv.js.map → chunk-85j5ybfj.js.map} +2 -2
  111. package/dist/{chunk-6rzdtvn5.js → chunk-8b55ygje.js} +1 -1
  112. package/dist/chunk-8m5ejdpn.js +33 -0
  113. package/dist/chunk-8m5ejdpn.js.map +10 -0
  114. package/dist/chunk-8ryen3p3.js +118 -0
  115. package/dist/chunk-8ryen3p3.js.map +10 -0
  116. package/dist/chunk-979ww6b3.js +298 -0
  117. package/dist/chunk-979ww6b3.js.map +12 -0
  118. package/dist/{chunk-ya6brh8a.js → chunk-9t8f5xfx.js} +10 -5
  119. package/dist/chunk-9t8f5xfx.js.map +11 -0
  120. package/dist/{chunk-r82k4z7z.js → chunk-a31h57d5.js} +2 -2
  121. package/dist/chunk-bct7hmfc.js +402 -0
  122. package/dist/chunk-bct7hmfc.js.map +14 -0
  123. package/dist/chunk-bh6k3nc6.js +164 -0
  124. package/dist/chunk-bh6k3nc6.js.map +12 -0
  125. package/dist/{chunk-t72dvahb.js → chunk-bhxaq2nn.js} +61 -44
  126. package/dist/chunk-bhxaq2nn.js.map +12 -0
  127. package/dist/{chunk-avppcgt6.js → chunk-c6qd89g5.js} +241 -144
  128. package/dist/chunk-c6qd89g5.js.map +15 -0
  129. package/dist/{chunk-qzyemcj7.js → chunk-ckxfnx7f.js} +2 -2
  130. package/dist/chunk-cy0n5dms.js +27 -0
  131. package/dist/chunk-cy0n5dms.js.map +11 -0
  132. package/dist/chunk-dsrkgtnh.js +50 -0
  133. package/dist/chunk-dsrkgtnh.js.map +10 -0
  134. package/dist/{chunk-50kv63vj.js → chunk-dysw7nsm.js} +118 -26
  135. package/dist/chunk-dysw7nsm.js.map +14 -0
  136. package/dist/chunk-ezake7g1.js +32 -0
  137. package/dist/chunk-ezake7g1.js.map +11 -0
  138. package/dist/{chunk-yn947ck3.js → chunk-f2rt4vkh.js} +48 -29
  139. package/dist/chunk-f2rt4vkh.js.map +14 -0
  140. package/dist/{chunk-hb9xcx9c.js → chunk-fmx1sz2h.js} +117 -56
  141. package/dist/chunk-fmx1sz2h.js.map +15 -0
  142. package/dist/chunk-g9t3kdtx.js +90 -0
  143. package/dist/chunk-g9t3kdtx.js.map +10 -0
  144. package/dist/{chunk-f6kyyeef.js → chunk-ghteq96b.js} +8 -8
  145. package/dist/{chunk-f6kyyeef.js.map → chunk-ghteq96b.js.map} +4 -4
  146. package/dist/chunk-h9kxd41f.js +271 -0
  147. package/dist/chunk-h9kxd41f.js.map +11 -0
  148. package/dist/chunk-htq0qh7z.js +59 -0
  149. package/dist/chunk-htq0qh7z.js.map +11 -0
  150. package/dist/{chunk-xt6qx9sh.js → chunk-jaj13078.js} +121 -9
  151. package/dist/chunk-jaj13078.js.map +38 -0
  152. package/dist/{chunk-p7vj8xgb.js → chunk-k9pts48t.js} +81 -58
  153. package/dist/chunk-k9pts48t.js.map +35 -0
  154. package/dist/chunk-n8herkry.js +3294 -0
  155. package/dist/chunk-n8herkry.js.map +35 -0
  156. package/dist/chunk-nf4r78r4.js +44 -0
  157. package/dist/chunk-nf4r78r4.js.map +10 -0
  158. package/dist/{chunk-b1bqvhpe.js → chunk-nnyp53zt.js} +14 -34
  159. package/dist/chunk-nnyp53zt.js.map +13 -0
  160. package/dist/chunk-nten49ta.js +404 -0
  161. package/dist/chunk-nten49ta.js.map +12 -0
  162. package/dist/chunk-qvybnnpe.js +137 -0
  163. package/dist/chunk-qvybnnpe.js.map +10 -0
  164. package/dist/{chunk-53s4asfm.js → chunk-rnshztfq.js} +2 -2
  165. package/dist/chunk-sa4340y1.js +607 -0
  166. package/dist/chunk-sa4340y1.js.map +14 -0
  167. package/dist/{chunk-rjqm6ksg.js → chunk-st4xgxey.js} +583 -251
  168. package/dist/chunk-st4xgxey.js.map +45 -0
  169. package/dist/{chunk-be9vm29v.js → chunk-t8t39h7v.js} +1 -1
  170. package/dist/{chunk-be9vm29v.js.map → chunk-t8t39h7v.js.map} +3 -3
  171. package/dist/chunk-t9xghkva.js +28 -0
  172. package/dist/chunk-t9xghkva.js.map +10 -0
  173. package/dist/chunk-vp1vc6ee.js +35 -0
  174. package/dist/chunk-vp1vc6ee.js.map +11 -0
  175. package/dist/{chunk-8kv2sez0.js → chunk-vybf6pkp.js} +1 -1
  176. package/dist/{chunk-4tvj3ate.js → chunk-wtmzkcht.js} +4 -3
  177. package/dist/chunk-wtmzkcht.js.map +11 -0
  178. package/dist/{chunk-v5c085yp.js → chunk-xhy826cz.js} +3 -2
  179. package/dist/chunk-xhy826cz.js.map +10 -0
  180. package/dist/chunk-xkthy56g.js +33 -0
  181. package/dist/chunk-xkthy56g.js.map +11 -0
  182. package/dist/{chunk-raq0x6bd.js → chunk-ys1nse2v.js} +2175 -381
  183. package/dist/chunk-ys1nse2v.js.map +56 -0
  184. package/dist/{chunk-6zrpewy4.js → chunk-z3zp0bj1.js} +1 -1
  185. package/dist/chunk-zcnhxkvd.js +7 -0
  186. package/dist/chunk-zcnhxkvd.js.map +10 -0
  187. package/dist/chunk-zg9yryhz.js +252 -0
  188. package/dist/chunk-zg9yryhz.js.map +12 -0
  189. package/dist/chunk-zqqz8052.js +3 -0
  190. package/dist/{storage/projection-runs/lifecycle.js.map → chunk-zqqz8052.js.map} +1 -1
  191. package/dist/{chunk-hz8m927w.js → chunk-zqysyfjt.js} +1 -1
  192. package/dist/connectors/builders.d.ts +2 -1
  193. package/dist/connectors/builders.d.ts.map +1 -1
  194. package/dist/connectors/connections/authorizations.d.ts +64 -0
  195. package/dist/connectors/connections/authorizations.d.ts.map +1 -0
  196. package/dist/connectors/connections/capability.d.ts +7 -0
  197. package/dist/connectors/connections/capability.d.ts.map +1 -0
  198. package/dist/connectors/connections/command-context.d.ts +23 -0
  199. package/dist/connectors/connections/command-context.d.ts.map +1 -0
  200. package/dist/connectors/connections/contracts.d.ts +127 -0
  201. package/dist/connectors/connections/contracts.d.ts.map +1 -0
  202. package/dist/connectors/connections/credential-codec.d.ts +15 -0
  203. package/dist/connectors/connections/credential-codec.d.ts.map +1 -0
  204. package/dist/connectors/connections/credential-mutations.d.ts +63 -0
  205. package/dist/connectors/connections/credential-mutations.d.ts.map +1 -0
  206. package/dist/connectors/connections/execution.d.ts +20 -0
  207. package/dist/connectors/connections/execution.d.ts.map +1 -0
  208. package/dist/connectors/connections/internal.d.ts +5 -0
  209. package/dist/connectors/connections/internal.d.ts.map +1 -0
  210. package/dist/connectors/connections/internal.js +16 -0
  211. package/dist/connectors/connections/internal.js.map +9 -0
  212. package/dist/connectors/connections/provider-operation.d.ts +7 -0
  213. package/dist/connectors/connections/provider-operation.d.ts.map +1 -0
  214. package/dist/connectors/connections/request.d.ts +84 -0
  215. package/dist/connectors/connections/request.d.ts.map +1 -0
  216. package/dist/connectors/connections/runs.d.ts +51 -0
  217. package/dist/connectors/connections/runs.d.ts.map +1 -0
  218. package/dist/connectors/connections/service.d.ts +52 -0
  219. package/dist/connectors/connections/service.d.ts.map +1 -0
  220. package/dist/connectors/connections/storage-boundary.d.ts +3 -0
  221. package/dist/connectors/connections/storage-boundary.d.ts.map +1 -0
  222. package/dist/connectors/connections/tokens.d.ts +32 -0
  223. package/dist/connectors/connections/tokens.d.ts.map +1 -0
  224. package/dist/connectors/connections/validation.d.ts +27 -0
  225. package/dist/connectors/connections/validation.d.ts.map +1 -0
  226. package/dist/connectors/connections/views.d.ts +7 -0
  227. package/dist/connectors/connections/views.d.ts.map +1 -0
  228. package/dist/connectors/credentials.d.ts +25 -0
  229. package/dist/connectors/credentials.d.ts.map +1 -0
  230. package/dist/connectors/errors.d.ts +35 -3
  231. package/dist/connectors/errors.d.ts.map +1 -1
  232. package/dist/connectors/execution.d.ts +19 -0
  233. package/dist/connectors/execution.d.ts.map +1 -0
  234. package/dist/connectors/index.d.ts +5 -3
  235. package/dist/connectors/index.d.ts.map +1 -1
  236. package/dist/connectors/service.d.ts +23 -0
  237. package/dist/connectors/service.d.ts.map +1 -0
  238. package/dist/connectors/types.d.ts +94 -2
  239. package/dist/connectors/types.d.ts.map +1 -1
  240. package/dist/datasets/execution.d.ts +8 -0
  241. package/dist/datasets/execution.d.ts.map +1 -0
  242. package/dist/error-reporting/capability.d.ts +4 -49
  243. package/dist/error-reporting/capability.d.ts.map +1 -1
  244. package/dist/error-reporting/internal.d.ts +2 -2
  245. package/dist/error-reporting/internal.d.ts.map +1 -1
  246. package/dist/error-reporting/internal.js +10 -4
  247. package/dist/error-reporting/internal.js.map +1 -1
  248. package/dist/error-reporting/reporter.d.ts +4 -1
  249. package/dist/error-reporting/reporter.d.ts.map +1 -1
  250. package/dist/error-reporting/reports.d.ts +64 -0
  251. package/dist/error-reporting/reports.d.ts.map +1 -0
  252. package/dist/error-reporting/types.d.ts +88 -34
  253. package/dist/error-reporting/types.d.ts.map +1 -1
  254. package/dist/errors/catalog.d.ts +141 -0
  255. package/dist/errors/catalog.d.ts.map +1 -0
  256. package/dist/errors/internal.d.ts +68 -0
  257. package/dist/errors/internal.d.ts.map +1 -0
  258. package/dist/errors/internal.js +29 -0
  259. package/dist/errors/internal.js.map +9 -0
  260. package/dist/errors/types.d.ts +20 -0
  261. package/dist/errors/types.d.ts.map +1 -0
  262. package/dist/events/definitions.d.ts +0 -1
  263. package/dist/events/definitions.d.ts.map +1 -1
  264. package/dist/events/execution.d.ts +13 -0
  265. package/dist/events/execution.d.ts.map +1 -0
  266. package/dist/events/index.d.ts +3 -2
  267. package/dist/events/index.d.ts.map +1 -1
  268. package/dist/events/index.js +10 -8
  269. package/dist/events/index.js.map +1 -1
  270. package/dist/events/outbox-dispatcher.d.ts +4 -2
  271. package/dist/events/outbox-dispatcher.d.ts.map +1 -1
  272. package/dist/events/{runtime.d.ts → service.d.ts} +13 -14
  273. package/dist/events/service.d.ts.map +1 -0
  274. package/dist/events/types/pipelines.d.ts +4 -1
  275. package/dist/events/types/pipelines.d.ts.map +1 -1
  276. package/dist/events/types/syncs.d.ts +3 -0
  277. package/dist/events/types/syncs.d.ts.map +1 -1
  278. package/dist/events/types/workflows.d.ts +4 -2
  279. package/dist/events/types/workflows.d.ts.map +1 -1
  280. package/dist/execution/agent.d.ts +42 -0
  281. package/dist/execution/agent.d.ts.map +1 -0
  282. package/dist/execution/agent.js +70 -0
  283. package/dist/execution/agent.js.map +9 -0
  284. package/dist/execution/authorization.d.ts +60 -0
  285. package/dist/execution/authorization.d.ts.map +1 -0
  286. package/dist/execution/dispatch.d.ts +8 -0
  287. package/dist/execution/dispatch.d.ts.map +1 -0
  288. package/dist/execution/durable.d.ts +37 -0
  289. package/dist/execution/durable.d.ts.map +1 -0
  290. package/dist/execution/index.d.ts +2 -0
  291. package/dist/execution/index.d.ts.map +1 -0
  292. package/dist/execution/primitive.d.ts +21 -0
  293. package/dist/execution/primitive.d.ts.map +1 -0
  294. package/dist/execution/primitive.js +88 -0
  295. package/dist/execution/primitive.js.map +10 -0
  296. package/dist/execution/request.d.ts +38 -0
  297. package/dist/execution/request.d.ts.map +1 -0
  298. package/dist/execution/request.js +97 -0
  299. package/dist/execution/request.js.map +10 -0
  300. package/dist/execution/scopes.d.ts +30 -0
  301. package/dist/execution/scopes.d.ts.map +1 -0
  302. package/dist/execution/types.d.ts +111 -0
  303. package/dist/execution/types.d.ts.map +1 -0
  304. package/dist/index.d.ts +30 -13
  305. package/dist/index.d.ts.map +1 -1
  306. package/dist/index.js +130 -105
  307. package/dist/index.js.map +1 -1
  308. package/dist/json.d.ts +0 -1
  309. package/dist/json.d.ts.map +1 -1
  310. package/dist/lake-storage/index.js +5 -5
  311. package/dist/logging/execution.d.ts +9 -0
  312. package/dist/logging/execution.d.ts.map +1 -0
  313. package/dist/logging/index.d.ts +1 -1
  314. package/dist/logging/index.d.ts.map +1 -1
  315. package/dist/logging/index.js +8 -8
  316. package/dist/logging/index.js.map +1 -1
  317. package/dist/logging/{runtime.d.ts → service.d.ts} +7 -7
  318. package/dist/logging/{runtime.d.ts.map → service.d.ts.map} +1 -1
  319. package/dist/logging/types.js +2 -2
  320. package/dist/materialization/events.d.ts +1 -0
  321. package/dist/materialization/events.d.ts.map +1 -1
  322. package/dist/materialization/index.d.ts +1 -1
  323. package/dist/materialization/index.d.ts.map +1 -1
  324. package/dist/materialization/index.js +2 -2
  325. package/dist/materialization/model.d.ts +26 -17
  326. package/dist/materialization/model.d.ts.map +1 -1
  327. package/dist/materializer/edits/commit.d.ts +2 -1
  328. package/dist/materializer/edits/commit.d.ts.map +1 -1
  329. package/dist/materializer/edits/load-state.d.ts +1 -1
  330. package/dist/materializer/edits/load-state.d.ts.map +1 -1
  331. package/dist/materializer/edits/operations.d.ts +1 -13
  332. package/dist/materializer/edits/operations.d.ts.map +1 -1
  333. package/dist/materializer/edits/plan.d.ts +2 -1
  334. package/dist/materializer/edits/plan.d.ts.map +1 -1
  335. package/dist/materializer/edits/working-state.d.ts +36 -8
  336. package/dist/materializer/edits/working-state.d.ts.map +1 -1
  337. package/dist/materializer/effective/build-events.d.ts +1 -0
  338. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  339. package/dist/materializer/effective/diff.d.ts +7 -0
  340. package/dist/materializer/effective/diff.d.ts.map +1 -1
  341. package/dist/materializer/effective/load-state.d.ts +0 -2
  342. package/dist/materializer/effective/load-state.d.ts.map +1 -1
  343. package/dist/materializer/effective/resolve.d.ts +17 -2
  344. package/dist/materializer/effective/resolve.d.ts.map +1 -1
  345. package/dist/materializer/execution/commit-lifecycle.d.ts +2 -2
  346. package/dist/materializer/execution/commit-lifecycle.d.ts.map +1 -1
  347. package/dist/materializer/execution/plan-stream.d.ts.map +1 -1
  348. package/dist/materializer/execution/scope.d.ts +26 -0
  349. package/dist/materializer/execution/scope.d.ts.map +1 -0
  350. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  351. package/dist/materializer/execution/work-records.d.ts +6 -5
  352. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  353. package/dist/materializer/index.d.ts +2 -2
  354. package/dist/materializer/index.d.ts.map +1 -1
  355. package/dist/materializer/index.js +30 -18
  356. package/dist/materializer/index.js.map +1 -1
  357. package/dist/materializer/materializer.d.ts +37 -5
  358. package/dist/materializer/materializer.d.ts.map +1 -1
  359. package/dist/materializer/projections/finish-run.d.ts +2 -1
  360. package/dist/materializer/projections/finish-run.d.ts.map +1 -1
  361. package/dist/materializer/projections/replace.d.ts +2 -1
  362. package/dist/materializer/projections/replace.d.ts.map +1 -1
  363. package/dist/materializer/projections/replacement-plan.d.ts +1 -0
  364. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  365. package/dist/materializer/shared/batching.d.ts.map +1 -1
  366. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  367. package/dist/materializer/telemetry/append.d.ts +2 -1
  368. package/dist/materializer/telemetry/append.d.ts.map +1 -1
  369. package/dist/materializer/telemetry/plan.d.ts +7 -1
  370. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  371. package/dist/objects/action/request.d.ts +3 -3
  372. package/dist/objects/action/request.d.ts.map +1 -1
  373. package/dist/objects/context/index.d.ts +1 -1
  374. package/dist/objects/context/index.d.ts.map +1 -1
  375. package/dist/objects/context/types.d.ts +5 -0
  376. package/dist/objects/context/types.d.ts.map +1 -1
  377. package/dist/objects/execution.d.ts +100 -0
  378. package/dist/objects/execution.d.ts.map +1 -0
  379. package/dist/objects/index.js +37 -24
  380. package/dist/objects/index.js.map +1 -1
  381. package/dist/objects/materializer-adapter.d.ts +1 -1
  382. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  383. package/dist/objects/query/executor.d.ts +3 -8
  384. package/dist/objects/query/executor.d.ts.map +1 -1
  385. package/dist/objects/query/index.d.ts +2 -2
  386. package/dist/objects/query/index.d.ts.map +1 -1
  387. package/dist/objects/query/index.js +9 -13
  388. package/dist/objects/query/index.js.map +1 -1
  389. package/dist/objects/query/planner.d.ts +0 -3
  390. package/dist/objects/query/planner.d.ts.map +1 -1
  391. package/dist/objects/sdk/object-handle.d.ts +2 -2
  392. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  393. package/dist/objects/sdk/object-set.d.ts +2 -0
  394. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  395. package/dist/objects/sdk/runtime-query-executor.d.ts +2 -0
  396. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  397. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  398. package/dist/objects/service/action-service.d.ts +3 -2
  399. package/dist/objects/service/action-service.d.ts.map +1 -1
  400. package/dist/objects/service/list-service.d.ts +1 -1
  401. package/dist/objects/telemetry/history.d.ts +2 -0
  402. package/dist/objects/telemetry/history.d.ts.map +1 -1
  403. package/dist/objects/telemetry/write-batch.d.ts.map +1 -1
  404. package/dist/ontology/index.d.ts +1 -1
  405. package/dist/ontology/index.d.ts.map +1 -1
  406. package/dist/ontology/index.js +5 -5
  407. package/dist/ontology/internal.js +4 -4
  408. package/dist/ontology/registry.d.ts +15 -2
  409. package/dist/ontology/registry.d.ts.map +1 -1
  410. package/dist/pipelines/execution.d.ts +19 -0
  411. package/dist/pipelines/execution.d.ts.map +1 -0
  412. package/dist/pipelines/index.d.ts +1 -0
  413. package/dist/pipelines/index.d.ts.map +1 -1
  414. package/dist/pipelines/index.js +66 -0
  415. package/dist/pipelines/index.js.map +9 -0
  416. package/dist/pipelines/request.d.ts +6 -9
  417. package/dist/pipelines/request.d.ts.map +1 -1
  418. package/dist/pipelines/run-dispatch.d.ts +47 -0
  419. package/dist/pipelines/run-dispatch.d.ts.map +1 -0
  420. package/dist/projections/builders.d.ts +0 -2
  421. package/dist/projections/builders.d.ts.map +1 -1
  422. package/dist/projections/capability.d.ts +7 -0
  423. package/dist/projections/capability.d.ts.map +1 -0
  424. package/dist/projections/execution.d.ts +19 -0
  425. package/dist/projections/execution.d.ts.map +1 -0
  426. package/dist/projections/index.d.ts +3 -1
  427. package/dist/projections/index.d.ts.map +1 -1
  428. package/dist/projections/internal.d.ts +4 -10
  429. package/dist/projections/internal.d.ts.map +1 -1
  430. package/dist/projections/internal.js +42 -6
  431. package/dist/projections/internal.js.map +1 -1
  432. package/dist/projections/ownership.d.ts +2 -2
  433. package/dist/projections/ownership.d.ts.map +1 -1
  434. package/dist/projections/registry.d.ts +21 -11
  435. package/dist/projections/registry.d.ts.map +1 -1
  436. package/dist/projections/revision.d.ts +2 -2
  437. package/dist/projections/revision.d.ts.map +1 -1
  438. package/dist/projections/run-dispatch.d.ts +37 -0
  439. package/dist/projections/run-dispatch.d.ts.map +1 -0
  440. package/dist/projections/run-id.d.ts +3 -0
  441. package/dist/projections/run-id.d.ts.map +1 -0
  442. package/dist/projections/types.d.ts +3 -0
  443. package/dist/projections/types.d.ts.map +1 -1
  444. package/dist/projections/validation.d.ts +2 -2
  445. package/dist/projections/validation.d.ts.map +1 -1
  446. package/dist/queues/in-memory.d.ts +11 -10
  447. package/dist/queues/in-memory.d.ts.map +1 -1
  448. package/dist/queues/index.d.ts +1 -1
  449. package/dist/queues/index.d.ts.map +1 -1
  450. package/dist/queues/index.js +1 -1
  451. package/dist/queues/types.d.ts +52 -42
  452. package/dist/queues/types.d.ts.map +1 -1
  453. package/dist/rules/execution.d.ts +14 -0
  454. package/dist/rules/execution.d.ts.map +1 -0
  455. package/dist/rules/index.d.ts +1 -1
  456. package/dist/rules/index.d.ts.map +1 -1
  457. package/dist/rules/validation.d.ts +1 -2
  458. package/dist/rules/validation.d.ts.map +1 -1
  459. package/dist/runtime/ai-usage.d.ts +8 -0
  460. package/dist/runtime/ai-usage.d.ts.map +1 -0
  461. package/dist/runtime/create.d.ts +7 -5
  462. package/dist/runtime/create.d.ts.map +1 -1
  463. package/dist/runtime/definitions.d.ts +35 -0
  464. package/dist/runtime/definitions.d.ts.map +1 -0
  465. package/dist/runtime/host.d.ts +123 -0
  466. package/dist/runtime/host.d.ts.map +1 -0
  467. package/dist/runtime/index.d.ts +6 -5
  468. package/dist/runtime/index.d.ts.map +1 -1
  469. package/dist/runtime/internal.d.ts +4 -0
  470. package/dist/runtime/internal.d.ts.map +1 -1
  471. package/dist/runtime/internal.js +6 -2
  472. package/dist/runtime/internal.js.map +1 -1
  473. package/dist/runtime/ontology-mutations.d.ts +4 -2
  474. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  475. package/dist/runtime/resolve-definitions.d.ts +42 -0
  476. package/dist/runtime/resolve-definitions.d.ts.map +1 -0
  477. package/dist/runtime/sixb.d.ts +43 -219
  478. package/dist/runtime/sixb.d.ts.map +1 -1
  479. package/dist/runtime/types.d.ts +16 -216
  480. package/dist/runtime/types.d.ts.map +1 -1
  481. package/dist/scheduler/index.d.ts +1 -1
  482. package/dist/scheduler/index.d.ts.map +1 -1
  483. package/dist/scheduler/index.js +3 -6
  484. package/dist/scheduler/index.js.map +1 -1
  485. package/dist/scheduler/runtime.d.ts +7 -2
  486. package/dist/scheduler/runtime.d.ts.map +1 -1
  487. package/dist/schedules/execution.d.ts +6 -0
  488. package/dist/schedules/execution.d.ts.map +1 -0
  489. package/dist/schedules/index.js +9 -7
  490. package/dist/schedules/index.js.map +1 -1
  491. package/dist/schedules/types.d.ts +1 -3
  492. package/dist/schedules/types.d.ts.map +1 -1
  493. package/dist/security/every.d.ts +4 -1
  494. package/dist/security/every.d.ts.map +1 -1
  495. package/dist/security/grants.d.ts +4 -1
  496. package/dist/security/grants.d.ts.map +1 -1
  497. package/dist/security/index.d.ts +3 -1
  498. package/dist/security/index.d.ts.map +1 -1
  499. package/dist/security/registry.d.ts +42 -0
  500. package/dist/security/registry.d.ts.map +1 -0
  501. package/dist/security/types.d.ts +7 -12
  502. package/dist/security/types.d.ts.map +1 -1
  503. package/dist/security/validation.d.ts +2 -0
  504. package/dist/security/validation.d.ts.map +1 -1
  505. package/dist/storage/action-runs/failure.d.ts +7 -0
  506. package/dist/storage/action-runs/failure.d.ts.map +1 -0
  507. package/dist/storage/action-runs/failure.js +14 -0
  508. package/dist/storage/action-runs/failure.js.map +9 -0
  509. package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
  510. package/dist/storage/action-runs/in-memory.d.ts +3 -1
  511. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  512. package/dist/storage/action-runs/index.d.ts +2 -1
  513. package/dist/storage/action-runs/index.d.ts.map +1 -1
  514. package/dist/storage/action-runs/provider.d.ts +10 -0
  515. package/dist/storage/action-runs/provider.d.ts.map +1 -0
  516. package/dist/storage/action-runs/provider.js +13 -0
  517. package/dist/storage/action-runs/provider.js.map +9 -0
  518. package/dist/storage/action-runs/types.d.ts +37 -18
  519. package/dist/storage/action-runs/types.d.ts.map +1 -1
  520. package/dist/storage/agents/errors.d.ts +1 -1
  521. package/dist/storage/agents/errors.d.ts.map +1 -1
  522. package/dist/storage/agents/in-memory.d.ts +4 -1
  523. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  524. package/dist/storage/agents/index.d.ts +2 -2
  525. package/dist/storage/agents/index.d.ts.map +1 -1
  526. package/dist/storage/agents/provider.d.ts +10 -0
  527. package/dist/storage/agents/provider.d.ts.map +1 -0
  528. package/dist/storage/agents/provider.js +17 -0
  529. package/dist/storage/agents/provider.js.map +9 -0
  530. package/dist/storage/agents/types.d.ts +13 -22
  531. package/dist/storage/agents/types.d.ts.map +1 -1
  532. package/dist/storage/ai-usage/errors.d.ts +8 -0
  533. package/dist/storage/ai-usage/errors.d.ts.map +1 -0
  534. package/dist/storage/ai-usage/in-memory.d.ts +28 -0
  535. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -0
  536. package/dist/storage/ai-usage/index.d.ts +8 -0
  537. package/dist/storage/ai-usage/index.d.ts.map +1 -0
  538. package/dist/storage/ai-usage/record.d.ts +6 -0
  539. package/dist/storage/ai-usage/record.d.ts.map +1 -0
  540. package/dist/storage/ai-usage/types.d.ts +89 -0
  541. package/dist/storage/ai-usage/types.d.ts.map +1 -0
  542. package/dist/storage/ai-usage/usage.d.ts +11 -0
  543. package/dist/storage/ai-usage/usage.d.ts.map +1 -0
  544. package/dist/storage/auth/types.d.ts +1 -0
  545. package/dist/storage/auth/types.d.ts.map +1 -1
  546. package/dist/storage/connector-connections/errors.d.ts +12 -0
  547. package/dist/storage/connector-connections/errors.d.ts.map +1 -0
  548. package/dist/storage/connector-connections/in-memory.d.ts +81 -0
  549. package/dist/storage/connector-connections/in-memory.d.ts.map +1 -0
  550. package/dist/storage/connector-connections/index.d.ts +7 -0
  551. package/dist/storage/connector-connections/index.d.ts.map +1 -0
  552. package/dist/storage/connector-connections/provider/authorizations.d.ts +20 -0
  553. package/dist/storage/connector-connections/provider/authorizations.d.ts.map +1 -0
  554. package/dist/storage/connector-connections/provider/connections.d.ts +17 -0
  555. package/dist/storage/connector-connections/provider/connections.d.ts.map +1 -0
  556. package/dist/storage/connector-connections/provider/runs.d.ts +14 -0
  557. package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -0
  558. package/dist/storage/connector-connections/provider/shared.d.ts +74 -0
  559. package/dist/storage/connector-connections/provider/shared.d.ts.map +1 -0
  560. package/dist/storage/connector-connections/provider.d.ts +49 -0
  561. package/dist/storage/connector-connections/provider.d.ts.map +1 -0
  562. package/dist/storage/connector-connections/provider.js +1025 -0
  563. package/dist/storage/connector-connections/provider.js.map +14 -0
  564. package/dist/storage/connector-connections/types.d.ts +402 -0
  565. package/dist/storage/connector-connections/types.d.ts.map +1 -0
  566. package/dist/storage/executions/errors.d.ts +8 -0
  567. package/dist/storage/executions/errors.d.ts.map +1 -0
  568. package/dist/storage/executions/in-memory.d.ts +21 -0
  569. package/dist/storage/executions/in-memory.d.ts.map +1 -0
  570. package/dist/storage/executions/index.d.ts +5 -0
  571. package/dist/storage/executions/index.d.ts.map +1 -0
  572. package/dist/storage/executions/provider.d.ts +29 -0
  573. package/dist/storage/executions/provider.d.ts.map +1 -0
  574. package/dist/storage/executions/provider.js +208 -0
  575. package/dist/storage/executions/provider.js.map +10 -0
  576. package/dist/storage/executions/run-link.d.ts +24 -0
  577. package/dist/storage/executions/run-link.d.ts.map +1 -0
  578. package/dist/storage/executions/types.d.ts +62 -0
  579. package/dist/storage/executions/types.d.ts.map +1 -0
  580. package/dist/storage/executions/validation.d.ts +13 -0
  581. package/dist/storage/executions/validation.d.ts.map +1 -0
  582. package/dist/storage/in-memory/index.d.ts +20 -5
  583. package/dist/storage/in-memory/index.d.ts.map +1 -1
  584. package/dist/storage/index.d.ts +28 -17
  585. package/dist/storage/index.d.ts.map +1 -1
  586. package/dist/storage/index.js +92 -29
  587. package/dist/storage/index.js.map +1 -1
  588. package/dist/storage/ontology/commits.d.ts +1 -0
  589. package/dist/storage/ontology/commits.d.ts.map +1 -1
  590. package/dist/storage/ontology/in-memory/index.d.ts +1 -0
  591. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  592. package/dist/storage/ontology/in-memory/materializations-state.d.ts +3 -2
  593. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  594. package/dist/storage/ontology/in-memory/materializations-work.d.ts +2 -2
  595. package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
  596. package/dist/storage/ontology/in-memory/materializations.d.ts +3 -1
  597. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  598. package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -2
  599. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  600. package/dist/storage/ontology/index.d.ts +3 -2
  601. package/dist/storage/ontology/index.d.ts.map +1 -1
  602. package/dist/storage/ontology/materializations.d.ts +50 -5
  603. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  604. package/dist/storage/ontology/outbox.d.ts +8 -2
  605. package/dist/storage/ontology/outbox.d.ts.map +1 -1
  606. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  607. package/dist/storage/ontology/provider.d.ts +5 -22
  608. package/dist/storage/ontology/provider.d.ts.map +1 -1
  609. package/dist/storage/ontology/provider.js +6 -7
  610. package/dist/storage/ontology/provider.js.map +1 -1
  611. package/dist/storage/operation-scope.d.ts.map +1 -1
  612. package/dist/storage/operation-scope.js +1 -1
  613. package/dist/storage/pipeline-runs/idempotency.d.ts +3 -0
  614. package/dist/storage/pipeline-runs/idempotency.d.ts.map +1 -0
  615. package/dist/storage/pipeline-runs/in-memory.d.ts +5 -1
  616. package/dist/storage/pipeline-runs/in-memory.d.ts.map +1 -1
  617. package/dist/storage/pipeline-runs/index.d.ts +3 -1
  618. package/dist/storage/pipeline-runs/index.d.ts.map +1 -1
  619. package/dist/storage/pipeline-runs/provider.d.ts +10 -0
  620. package/dist/storage/pipeline-runs/provider.d.ts.map +1 -0
  621. package/dist/storage/pipeline-runs/provider.js +11 -0
  622. package/dist/storage/pipeline-runs/provider.js.map +9 -0
  623. package/dist/storage/pipeline-runs/types.d.ts +30 -14
  624. package/dist/storage/pipeline-runs/types.d.ts.map +1 -1
  625. package/dist/storage/projection-runs/in-memory.d.ts +8 -3
  626. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  627. package/dist/storage/projection-runs/index.d.ts +2 -2
  628. package/dist/storage/projection-runs/index.d.ts.map +1 -1
  629. package/dist/storage/projection-runs/lifecycle.d.ts +14 -8
  630. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  631. package/dist/storage/projection-runs/provider.d.ts +13 -0
  632. package/dist/storage/projection-runs/provider.d.ts.map +1 -0
  633. package/dist/storage/projection-runs/{lifecycle.js → provider.js} +15 -4
  634. package/dist/storage/projection-runs/provider.js.map +9 -0
  635. package/dist/storage/projection-runs/types.d.ts +28 -11
  636. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  637. package/dist/storage/run-listing.d.ts +8 -9
  638. package/dist/storage/run-listing.d.ts.map +1 -1
  639. package/dist/storage/sync-runs/idempotency.d.ts +3 -0
  640. package/dist/storage/sync-runs/idempotency.d.ts.map +1 -0
  641. package/dist/storage/sync-runs/in-memory.d.ts +5 -1
  642. package/dist/storage/sync-runs/in-memory.d.ts.map +1 -1
  643. package/dist/storage/sync-runs/index.d.ts +3 -1
  644. package/dist/storage/sync-runs/index.d.ts.map +1 -1
  645. package/dist/storage/sync-runs/provider.d.ts +10 -0
  646. package/dist/storage/sync-runs/provider.d.ts.map +1 -0
  647. package/dist/storage/sync-runs/provider.js +11 -0
  648. package/dist/storage/sync-runs/provider.js.map +9 -0
  649. package/dist/storage/sync-runs/types.d.ts +28 -11
  650. package/dist/storage/sync-runs/types.d.ts.map +1 -1
  651. package/dist/storage/types.d.ts +20 -15
  652. package/dist/storage/types.d.ts.map +1 -1
  653. package/dist/storage/webhook-runs/errors.d.ts +3 -0
  654. package/dist/storage/webhook-runs/errors.d.ts.map +1 -1
  655. package/dist/storage/webhook-runs/in-memory.d.ts +13 -1
  656. package/dist/storage/webhook-runs/in-memory.d.ts.map +1 -1
  657. package/dist/storage/webhook-runs/index.d.ts +3 -2
  658. package/dist/storage/webhook-runs/index.d.ts.map +1 -1
  659. package/dist/storage/webhook-runs/provider.d.ts +10 -0
  660. package/dist/storage/webhook-runs/provider.d.ts.map +1 -0
  661. package/dist/storage/webhook-runs/provider.js +11 -0
  662. package/dist/storage/webhook-runs/provider.js.map +9 -0
  663. package/dist/storage/webhook-runs/types.d.ts +37 -11
  664. package/dist/storage/webhook-runs/types.d.ts.map +1 -1
  665. package/dist/storage/workflow-runs/in-memory.d.ts +6 -2
  666. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  667. package/dist/storage/workflow-runs/index.d.ts +2 -1
  668. package/dist/storage/workflow-runs/index.d.ts.map +1 -1
  669. package/dist/storage/workflow-runs/provider.d.ts +19 -0
  670. package/dist/storage/workflow-runs/provider.d.ts.map +1 -0
  671. package/dist/storage/workflow-runs/provider.js +19 -0
  672. package/dist/storage/workflow-runs/provider.js.map +9 -0
  673. package/dist/storage/workflow-runs/types.d.ts +28 -30
  674. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  675. package/dist/syncs/execution.d.ts +18 -0
  676. package/dist/syncs/execution.d.ts.map +1 -0
  677. package/dist/syncs/index.d.ts +3 -1
  678. package/dist/syncs/index.d.ts.map +1 -1
  679. package/dist/syncs/index.js +65 -0
  680. package/dist/syncs/index.js.map +9 -0
  681. package/dist/syncs/request.d.ts +6 -16
  682. package/dist/syncs/request.d.ts.map +1 -1
  683. package/dist/syncs/run-dispatch.d.ts +47 -0
  684. package/dist/syncs/run-dispatch.d.ts.map +1 -0
  685. package/dist/syncs/sources.d.ts +8 -0
  686. package/dist/syncs/sources.d.ts.map +1 -0
  687. package/dist/syncs/types.d.ts +16 -9
  688. package/dist/syncs/types.d.ts.map +1 -1
  689. package/dist/testing/action-execution.d.ts +12 -0
  690. package/dist/testing/action-execution.d.ts.map +1 -0
  691. package/dist/testing/agent-execution.d.ts +14 -0
  692. package/dist/testing/agent-execution.d.ts.map +1 -0
  693. package/dist/testing/agent-storage-contract.d.ts +10 -3
  694. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  695. package/dist/testing/ai-usage-storage-contract.d.ts +13 -0
  696. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -0
  697. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  698. package/dist/testing/broker-contract.d.ts.map +1 -1
  699. package/dist/testing/connector-connection-storage-contract.d.ts +16 -0
  700. package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -0
  701. package/dist/testing/execution-storage-contract.d.ts +15 -0
  702. package/dist/testing/execution-storage-contract.d.ts.map +1 -0
  703. package/dist/testing/execution.d.ts +23 -0
  704. package/dist/testing/execution.d.ts.map +1 -0
  705. package/dist/testing/index.d.ts +12 -0
  706. package/dist/testing/index.d.ts.map +1 -1
  707. package/dist/testing/index.js +4088 -1556
  708. package/dist/testing/index.js.map +25 -13
  709. package/dist/testing/materializer-fixture.d.ts +2 -2
  710. package/dist/testing/materializer-fixture.d.ts.map +1 -1
  711. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  712. package/dist/testing/ontology-contract-fixture.d.ts +1 -0
  713. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  714. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  715. package/dist/testing/pipeline-execution.d.ts +16 -0
  716. package/dist/testing/pipeline-execution.d.ts.map +1 -0
  717. package/dist/testing/projection-execution.d.ts +20 -0
  718. package/dist/testing/projection-execution.d.ts.map +1 -0
  719. package/dist/testing/projection-run-storage-contract.d.ts +9 -4
  720. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  721. package/dist/testing/queues-contract.d.ts.map +1 -1
  722. package/dist/testing/sync-execution.d.ts +16 -0
  723. package/dist/testing/sync-execution.d.ts.map +1 -0
  724. package/dist/testing/webhook-execution.d.ts +12 -0
  725. package/dist/testing/webhook-execution.d.ts.map +1 -0
  726. package/dist/testing/webhook-run-storage-contract.d.ts +11 -0
  727. package/dist/testing/webhook-run-storage-contract.d.ts.map +1 -0
  728. package/dist/testing/workflow-execution.d.ts +23 -0
  729. package/dist/testing/workflow-execution.d.ts.map +1 -0
  730. package/dist/webhooks/index.d.ts +2 -1
  731. package/dist/webhooks/index.d.ts.map +1 -1
  732. package/dist/webhooks/internal.d.ts +2 -0
  733. package/dist/webhooks/internal.d.ts.map +1 -0
  734. package/dist/webhooks/internal.js +150 -0
  735. package/dist/webhooks/internal.js.map +10 -0
  736. package/dist/webhooks/registry.d.ts +18 -4
  737. package/dist/webhooks/registry.d.ts.map +1 -1
  738. package/dist/webhooks/run-admission.d.ts +25 -0
  739. package/dist/webhooks/run-admission.d.ts.map +1 -0
  740. package/dist/webhooks/types.d.ts +8 -5
  741. package/dist/webhooks/types.d.ts.map +1 -1
  742. package/dist/workers/index.js +18 -19
  743. package/dist/workers/index.js.map +4 -4
  744. package/dist/workers/queue-delivery.d.ts +7 -7
  745. package/dist/workers/queue-delivery.d.ts.map +1 -1
  746. package/dist/workers/queue-worker.d.ts +30 -11
  747. package/dist/workers/queue-worker.d.ts.map +1 -1
  748. package/dist/workflows/execution.d.ts +49 -0
  749. package/dist/workflows/execution.d.ts.map +1 -0
  750. package/dist/workflows/failure.d.ts +28 -0
  751. package/dist/workflows/failure.d.ts.map +1 -0
  752. package/dist/workflows/index.d.ts +4 -2
  753. package/dist/workflows/index.d.ts.map +1 -1
  754. package/dist/workflows/index.js +64 -36
  755. package/dist/workflows/index.js.map +1 -1
  756. package/dist/workflows/request.d.ts +2 -1
  757. package/dist/workflows/request.d.ts.map +1 -1
  758. package/dist/workflows/run-dispatch.d.ts +59 -0
  759. package/dist/workflows/run-dispatch.d.ts.map +1 -0
  760. package/dist/workflows/types.d.ts +38 -8
  761. package/dist/workflows/types.d.ts.map +1 -1
  762. package/package.json +107 -5
  763. package/src/actions/commit-edits.ts +0 -3
  764. package/src/actions/execution.ts +83 -0
  765. package/src/actions/index.ts +1 -1
  766. package/src/actions/registry.ts +22 -10
  767. package/src/actions/request.ts +55 -177
  768. package/src/actions/run-dispatch.ts +276 -0
  769. package/src/actions/types/context.ts +2 -4
  770. package/src/actions/validation.ts +2 -2
  771. package/src/agents/adapters.ts +7 -3
  772. package/src/agents/authority.ts +189 -0
  773. package/src/agents/dispatch.ts +1 -6
  774. package/src/agents/errors.ts +2 -0
  775. package/src/agents/execution.ts +254 -0
  776. package/src/agents/index.ts +15 -3
  777. package/src/agents/prompt.ts +15 -3
  778. package/src/agents/request.ts +153 -13
  779. package/src/agents/streams.ts +150 -3
  780. package/src/agents/types.ts +2 -4
  781. package/src/agents/validation.ts +3 -3
  782. package/src/auth/attribution.ts +48 -0
  783. package/src/auth/index.ts +1 -0
  784. package/src/auth/runtime.ts +5 -5
  785. package/src/authorization/decision.ts +75 -14
  786. package/src/authorization/grant-kinds.ts +9 -0
  787. package/src/authorization/index.ts +2 -0
  788. package/src/blob-storage/execution.ts +78 -0
  789. package/src/bootstrap/discovery.ts +88 -268
  790. package/src/bootstrap/index.ts +2 -13
  791. package/src/broker/in-memory.ts +8 -1
  792. package/src/broker/types.ts +5 -0
  793. package/src/connectors/builders.ts +37 -2
  794. package/src/connectors/connections/authorizations.ts +646 -0
  795. package/src/connectors/connections/capability.ts +59 -0
  796. package/src/connectors/connections/command-context.ts +98 -0
  797. package/src/connectors/connections/contracts.ts +208 -0
  798. package/src/connectors/connections/credential-codec.ts +48 -0
  799. package/src/connectors/connections/credential-mutations.ts +574 -0
  800. package/src/connectors/connections/execution.ts +138 -0
  801. package/src/connectors/connections/internal.ts +17 -0
  802. package/src/connectors/connections/provider-operation.ts +41 -0
  803. package/src/connectors/connections/request.ts +447 -0
  804. package/src/connectors/connections/runs.ts +702 -0
  805. package/src/connectors/connections/service.ts +644 -0
  806. package/src/connectors/connections/storage-boundary.ts +13 -0
  807. package/src/connectors/connections/tokens.ts +292 -0
  808. package/src/connectors/connections/validation.ts +316 -0
  809. package/src/connectors/connections/views.ts +37 -0
  810. package/src/connectors/credentials.ts +149 -0
  811. package/src/connectors/errors.ts +111 -3
  812. package/src/connectors/execution.ts +157 -0
  813. package/src/connectors/index.ts +26 -2
  814. package/src/connectors/service.ts +142 -0
  815. package/src/connectors/types.ts +156 -7
  816. package/src/datasets/execution.ts +24 -0
  817. package/src/error-reporting/capability.ts +33 -106
  818. package/src/error-reporting/internal.ts +3 -1
  819. package/src/error-reporting/reporter.ts +19 -3
  820. package/src/error-reporting/reports.ts +172 -0
  821. package/src/error-reporting/types.ts +97 -43
  822. package/src/errors/catalog.ts +149 -0
  823. package/src/errors/internal.ts +322 -0
  824. package/src/errors/types.ts +21 -0
  825. package/src/events/definitions.ts +0 -4
  826. package/src/events/execution.ts +45 -0
  827. package/src/events/index.ts +15 -14
  828. package/src/events/outbox-dispatcher.ts +53 -18
  829. package/src/events/{runtime.ts → service.ts} +19 -23
  830. package/src/events/types/pipelines.ts +4 -1
  831. package/src/events/types/syncs.ts +3 -0
  832. package/src/events/types/workflows.ts +4 -2
  833. package/src/execution/agent.ts +130 -0
  834. package/src/execution/authorization.ts +409 -0
  835. package/src/execution/dispatch.ts +7 -0
  836. package/src/execution/durable.ts +193 -0
  837. package/src/execution/index.ts +12 -0
  838. package/src/execution/primitive.ts +50 -0
  839. package/src/execution/request.ts +109 -0
  840. package/src/execution/scopes.ts +198 -0
  841. package/src/execution/types.ts +113 -0
  842. package/src/http/api-routes.ts +3 -3
  843. package/src/index.ts +109 -9
  844. package/src/json.ts +0 -4
  845. package/src/logging/execution.ts +28 -0
  846. package/src/logging/index.ts +4 -4
  847. package/src/logging/{runtime.ts → service.ts} +7 -7
  848. package/src/materialization/events.ts +1 -0
  849. package/src/materialization/index.ts +2 -0
  850. package/src/materialization/model.ts +30 -18
  851. package/src/materializer/README.md +9 -13
  852. package/src/materializer/edits/commit.ts +85 -28
  853. package/src/materializer/edits/load-state.ts +79 -16
  854. package/src/materializer/edits/operations.ts +72 -36
  855. package/src/materializer/edits/plan.ts +95 -22
  856. package/src/materializer/edits/working-state.ts +86 -55
  857. package/src/materializer/effective/build-events.ts +2 -0
  858. package/src/materializer/effective/diff.ts +22 -0
  859. package/src/materializer/effective/load-state.ts +0 -31
  860. package/src/materializer/effective/resolve.ts +62 -0
  861. package/src/materializer/execution/commit-lifecycle.ts +9 -1
  862. package/src/materializer/execution/plan-stream.ts +33 -9
  863. package/src/materializer/execution/scope.ts +95 -0
  864. package/src/materializer/execution/work-executor.ts +6 -2
  865. package/src/materializer/execution/work-records.ts +39 -6
  866. package/src/materializer/index.ts +9 -1
  867. package/src/materializer/materializer.ts +67 -5
  868. package/src/materializer/projections/finish-run.ts +29 -11
  869. package/src/materializer/projections/replace.ts +55 -22
  870. package/src/materializer/projections/replacement-plan.ts +37 -7
  871. package/src/materializer/shared/batching.ts +4 -1
  872. package/src/materializer/shared/normalize.ts +0 -19
  873. package/src/materializer/telemetry/append.ts +57 -26
  874. package/src/materializer/telemetry/plan.ts +15 -6
  875. package/src/objects/action/request.ts +5 -5
  876. package/src/objects/context/index.ts +1 -0
  877. package/src/objects/context/types.ts +6 -0
  878. package/src/objects/execution.ts +346 -0
  879. package/src/objects/materializer-adapter.ts +1 -23
  880. package/src/objects/query/executor.ts +15 -29
  881. package/src/objects/query/index.ts +1 -2
  882. package/src/objects/query/planner.ts +0 -6
  883. package/src/objects/sdk/object-handle.ts +2 -2
  884. package/src/objects/sdk/object-set.ts +17 -7
  885. package/src/objects/sdk/runtime-query-executor.ts +9 -2
  886. package/src/objects/sdk/telemetry-channel.ts +5 -1
  887. package/src/objects/service/action-service.ts +5 -2
  888. package/src/objects/service/list-service.ts +1 -1
  889. package/src/objects/telemetry/history.ts +8 -3
  890. package/src/objects/telemetry/write-batch.ts +0 -2
  891. package/src/ontology/index.ts +6 -1
  892. package/src/ontology/registry.ts +16 -2
  893. package/src/pipelines/execution.ts +105 -0
  894. package/src/pipelines/index.ts +7 -0
  895. package/src/pipelines/request.ts +32 -26
  896. package/src/pipelines/run-dispatch.ts +308 -0
  897. package/src/projections/builders.ts +0 -9
  898. package/src/projections/capability.ts +37 -0
  899. package/src/projections/execution.ts +85 -0
  900. package/src/projections/index.ts +2 -1
  901. package/src/projections/internal.ts +17 -60
  902. package/src/projections/ownership.ts +2 -2
  903. package/src/projections/registry.ts +26 -11
  904. package/src/projections/revision.ts +7 -5
  905. package/src/projections/run-dispatch.ts +497 -0
  906. package/src/projections/run-id.ts +20 -0
  907. package/src/projections/types.ts +12 -0
  908. package/src/projections/validation.ts +3 -3
  909. package/src/queues/in-memory.ts +37 -11
  910. package/src/queues/index.ts +9 -2
  911. package/src/queues/types.ts +70 -45
  912. package/src/rules/execution.ts +49 -0
  913. package/src/rules/index.ts +0 -1
  914. package/src/rules/validation.ts +2 -6
  915. package/src/runtime/ai-usage.ts +17 -0
  916. package/src/runtime/create.ts +28 -68
  917. package/src/runtime/definitions.ts +44 -0
  918. package/src/runtime/host.ts +377 -0
  919. package/src/runtime/index.ts +5 -13
  920. package/src/runtime/internal.ts +12 -0
  921. package/src/runtime/ontology-mutations.ts +5 -3
  922. package/src/runtime/resolve-definitions.ts +238 -0
  923. package/src/runtime/sixb.ts +95 -822
  924. package/src/runtime/types.ts +17 -290
  925. package/src/scheduler/index.ts +1 -1
  926. package/src/scheduler/runtime.ts +37 -6
  927. package/src/schedules/execution.ts +14 -0
  928. package/src/schedules/types.ts +0 -8
  929. package/src/security/every.ts +4 -0
  930. package/src/security/grants.ts +13 -1
  931. package/src/security/index.ts +3 -1
  932. package/src/security/registry.ts +107 -0
  933. package/src/security/types.ts +8 -12
  934. package/src/security/validation.ts +7 -0
  935. package/src/storage/action-runs/failure.ts +64 -0
  936. package/src/storage/action-runs/idempotency.ts +3 -1
  937. package/src/storage/action-runs/in-memory.ts +39 -9
  938. package/src/storage/action-runs/index.ts +3 -0
  939. package/src/storage/action-runs/provider.ts +25 -0
  940. package/src/storage/action-runs/types.ts +61 -27
  941. package/src/storage/agents/errors.ts +1 -0
  942. package/src/storage/agents/in-memory.ts +49 -11
  943. package/src/storage/agents/index.ts +2 -1
  944. package/src/storage/agents/provider.ts +27 -0
  945. package/src/storage/agents/types.ts +19 -19
  946. package/src/storage/ai-usage/errors.ts +13 -0
  947. package/src/storage/ai-usage/in-memory.ts +162 -0
  948. package/src/storage/ai-usage/index.ts +21 -0
  949. package/src/storage/ai-usage/record.ts +74 -0
  950. package/src/storage/ai-usage/types.ts +102 -0
  951. package/src/storage/ai-usage/usage.ts +104 -0
  952. package/src/storage/auth/types.ts +1 -0
  953. package/src/storage/connector-connections/errors.ts +24 -0
  954. package/src/storage/connector-connections/in-memory.ts +1377 -0
  955. package/src/storage/connector-connections/index.ts +66 -0
  956. package/src/storage/connector-connections/provider/authorizations.ts +446 -0
  957. package/src/storage/connector-connections/provider/connections.ts +291 -0
  958. package/src/storage/connector-connections/provider/runs.ts +369 -0
  959. package/src/storage/connector-connections/provider/shared.ts +342 -0
  960. package/src/storage/connector-connections/provider.ts +219 -0
  961. package/src/storage/connector-connections/types.ts +546 -0
  962. package/src/storage/executions/errors.ts +21 -0
  963. package/src/storage/executions/in-memory.ts +75 -0
  964. package/src/storage/executions/index.ts +16 -0
  965. package/src/storage/executions/provider.ts +292 -0
  966. package/src/storage/executions/run-link.ts +70 -0
  967. package/src/storage/executions/types.ts +49 -0
  968. package/src/storage/executions/validation.ts +370 -0
  969. package/src/storage/in-memory/index.ts +50 -16
  970. package/src/storage/index.ts +154 -15
  971. package/src/storage/ontology/commits.ts +1 -0
  972. package/src/storage/ontology/in-memory/index.ts +2 -0
  973. package/src/storage/ontology/in-memory/materializations-finalization.ts +2 -1
  974. package/src/storage/ontology/in-memory/materializations-state.ts +10 -0
  975. package/src/storage/ontology/in-memory/materializations-work.ts +2 -1
  976. package/src/storage/ontology/in-memory/materializations.ts +131 -9
  977. package/src/storage/ontology/in-memory/outbox.ts +1 -1
  978. package/src/storage/ontology/in-memory/shared-state.ts +12 -1
  979. package/src/storage/ontology/index.ts +6 -0
  980. package/src/storage/ontology/materializations.ts +50 -4
  981. package/src/storage/ontology/outbox.ts +13 -2
  982. package/src/storage/ontology/provider-header-validation.ts +1 -0
  983. package/src/storage/ontology/provider-work.ts +33 -14
  984. package/src/storage/ontology/provider.ts +72 -52
  985. package/src/storage/operation-scope.ts +1 -0
  986. package/src/storage/pipeline-runs/idempotency.ts +14 -0
  987. package/src/storage/pipeline-runs/in-memory.ts +88 -8
  988. package/src/storage/pipeline-runs/index.ts +5 -1
  989. package/src/storage/pipeline-runs/provider.ts +25 -0
  990. package/src/storage/pipeline-runs/types.ts +37 -14
  991. package/src/storage/projection-runs/in-memory.ts +93 -24
  992. package/src/storage/projection-runs/index.ts +4 -0
  993. package/src/storage/projection-runs/lifecycle.ts +165 -36
  994. package/src/storage/projection-runs/provider.ts +34 -0
  995. package/src/storage/projection-runs/types.ts +34 -11
  996. package/src/storage/run-listing.ts +22 -13
  997. package/src/storage/sync-runs/idempotency.ts +18 -0
  998. package/src/storage/sync-runs/in-memory.ts +90 -7
  999. package/src/storage/sync-runs/index.ts +4 -1
  1000. package/src/storage/sync-runs/provider.ts +25 -0
  1001. package/src/storage/sync-runs/types.ts +35 -11
  1002. package/src/storage/types.ts +44 -17
  1003. package/src/storage/webhook-runs/errors.ts +14 -0
  1004. package/src/storage/webhook-runs/in-memory.ts +84 -9
  1005. package/src/storage/webhook-runs/index.ts +5 -1
  1006. package/src/storage/webhook-runs/provider.ts +30 -0
  1007. package/src/storage/webhook-runs/types.ts +52 -11
  1008. package/src/storage/workflow-runs/in-memory.ts +89 -55
  1009. package/src/storage/workflow-runs/index.ts +2 -0
  1010. package/src/storage/workflow-runs/provider.ts +70 -0
  1011. package/src/storage/workflow-runs/types.ts +36 -25
  1012. package/src/syncs/builders.ts +2 -2
  1013. package/src/syncs/execution.ts +78 -0
  1014. package/src/syncs/index.ts +13 -0
  1015. package/src/syncs/request.ts +32 -43
  1016. package/src/syncs/run-dispatch.ts +312 -0
  1017. package/src/syncs/sources.ts +20 -0
  1018. package/src/syncs/types.ts +32 -8
  1019. package/src/testing/action-execution.ts +61 -0
  1020. package/src/testing/agent-execution.ts +81 -0
  1021. package/src/testing/agent-storage-contract.ts +158 -63
  1022. package/src/testing/ai-usage-storage-contract.ts +528 -0
  1023. package/src/testing/auth-storage-contract.ts +17 -1
  1024. package/src/testing/broker-contract.ts +16 -1
  1025. package/src/testing/connector-connection-storage-contract.ts +1052 -0
  1026. package/src/testing/execution-storage-contract.ts +435 -0
  1027. package/src/testing/execution.ts +48 -0
  1028. package/src/testing/index.ts +52 -0
  1029. package/src/testing/materializer-fixture.ts +11 -3
  1030. package/src/testing/materializer-storage-contract.ts +213 -11
  1031. package/src/testing/ontology-contract-fixture.ts +35 -2
  1032. package/src/testing/ontology-storage-contract.ts +75 -14
  1033. package/src/testing/pipeline-execution.ts +64 -0
  1034. package/src/testing/projection-execution.ts +98 -0
  1035. package/src/testing/projection-run-storage-contract.ts +215 -29
  1036. package/src/testing/queues-contract.ts +40 -51
  1037. package/src/testing/sync-execution.ts +61 -0
  1038. package/src/testing/webhook-execution.ts +47 -0
  1039. package/src/testing/webhook-run-storage-contract.ts +240 -0
  1040. package/src/testing/workflow-execution.ts +77 -0
  1041. package/src/webhooks/index.ts +2 -1
  1042. package/src/webhooks/internal.ts +5 -0
  1043. package/src/webhooks/registry.ts +60 -36
  1044. package/src/webhooks/run-admission.ts +172 -0
  1045. package/src/webhooks/types.ts +8 -5
  1046. package/src/workers/queue-delivery.ts +25 -22
  1047. package/src/workers/queue-worker.ts +62 -32
  1048. package/src/workflows/execution.ts +292 -0
  1049. package/src/workflows/failure.ts +63 -0
  1050. package/src/workflows/index.ts +10 -1
  1051. package/src/workflows/request.ts +39 -118
  1052. package/src/workflows/run-dispatch.ts +359 -0
  1053. package/src/workflows/types.ts +39 -8
  1054. package/dist/actions/runtime.d.ts +0 -11
  1055. package/dist/actions/runtime.d.ts.map +0 -1
  1056. package/dist/agents/runtime.d.ts +0 -41
  1057. package/dist/agents/runtime.d.ts.map +0 -1
  1058. package/dist/chunk-4hwxq5e6.js +0 -49
  1059. package/dist/chunk-4hwxq5e6.js.map +0 -10
  1060. package/dist/chunk-4tvj3ate.js.map +0 -11
  1061. package/dist/chunk-50kv63vj.js.map +0 -12
  1062. package/dist/chunk-86459jn0.js +0 -1091
  1063. package/dist/chunk-86459jn0.js.map +0 -22
  1064. package/dist/chunk-867jxh7c.js.map +0 -19
  1065. package/dist/chunk-9k3hgv8h.js +0 -352
  1066. package/dist/chunk-9k3hgv8h.js.map +0 -13
  1067. package/dist/chunk-avppcgt6.js.map +0 -14
  1068. package/dist/chunk-b1bqvhpe.js.map +0 -13
  1069. package/dist/chunk-b5dp7gaf.js +0 -1092
  1070. package/dist/chunk-b5dp7gaf.js.map +0 -26
  1071. package/dist/chunk-bh8bwma3.js +0 -37
  1072. package/dist/chunk-bh8bwma3.js.map +0 -10
  1073. package/dist/chunk-btcsywk4.js +0 -985
  1074. package/dist/chunk-btcsywk4.js.map +0 -15
  1075. package/dist/chunk-exrfbt2d.js +0 -354
  1076. package/dist/chunk-exrfbt2d.js.map +0 -17
  1077. package/dist/chunk-hb9xcx9c.js.map +0 -14
  1078. package/dist/chunk-k25jm1x5.js +0 -102
  1079. package/dist/chunk-k25jm1x5.js.map +0 -10
  1080. package/dist/chunk-k6j72mtt.js +0 -9
  1081. package/dist/chunk-k6j72mtt.js.map +0 -10
  1082. package/dist/chunk-m9w0artv.js +0 -554
  1083. package/dist/chunk-m9w0artv.js.map +0 -13
  1084. package/dist/chunk-nbywkytr.js.map +0 -16
  1085. package/dist/chunk-p7vj8xgb.js.map +0 -34
  1086. package/dist/chunk-raq0x6bd.js.map +0 -48
  1087. package/dist/chunk-rgzed50y.js +0 -1445
  1088. package/dist/chunk-rgzed50y.js.map +0 -22
  1089. package/dist/chunk-rjqm6ksg.js.map +0 -44
  1090. package/dist/chunk-t72dvahb.js.map +0 -12
  1091. package/dist/chunk-v5c085yp.js.map +0 -10
  1092. package/dist/chunk-xt6qx9sh.js.map +0 -36
  1093. package/dist/chunk-xz5g49bp.js.map +0 -11
  1094. package/dist/chunk-ya6brh8a.js.map +0 -11
  1095. package/dist/chunk-yn947ck3.js.map +0 -14
  1096. package/dist/connectors/runtime.d.ts +0 -13
  1097. package/dist/connectors/runtime.d.ts.map +0 -1
  1098. package/dist/events/runtime.d.ts.map +0 -1
  1099. package/dist/objects/contexts.d.ts +0 -45
  1100. package/dist/objects/contexts.d.ts.map +0 -1
  1101. package/dist/objects/helpers.d.ts +0 -7
  1102. package/dist/objects/helpers.d.ts.map +0 -1
  1103. package/dist/runtime/scoped.d.ts +0 -158
  1104. package/dist/runtime/scoped.d.ts.map +0 -1
  1105. package/dist/security/runtime.d.ts +0 -16
  1106. package/dist/security/runtime.d.ts.map +0 -1
  1107. package/dist/storage/webhook-deliveries/in-memory.d.ts +0 -18
  1108. package/dist/storage/webhook-deliveries/in-memory.d.ts.map +0 -1
  1109. package/dist/storage/webhook-deliveries/index.d.ts +0 -3
  1110. package/dist/storage/webhook-deliveries/index.d.ts.map +0 -1
  1111. package/dist/storage/webhook-deliveries/types.d.ts +0 -43
  1112. package/dist/storage/webhook-deliveries/types.d.ts.map +0 -1
  1113. package/dist/workflows/runtime.d.ts +0 -33
  1114. package/dist/workflows/runtime.d.ts.map +0 -1
  1115. package/src/actions/runtime.ts +0 -31
  1116. package/src/agents/runtime.ts +0 -124
  1117. package/src/connectors/runtime.ts +0 -100
  1118. package/src/objects/contexts.ts +0 -64
  1119. package/src/objects/helpers.ts +0 -18
  1120. package/src/runtime/scoped.ts +0 -436
  1121. package/src/security/runtime.ts +0 -101
  1122. package/src/storage/webhook-deliveries/in-memory.ts +0 -108
  1123. package/src/storage/webhook-deliveries/index.ts +0 -9
  1124. package/src/storage/webhook-deliveries/types.ts +0 -41
  1125. package/src/workflows/runtime.ts +0 -68
  1126. /package/dist/{chunk-md9jbrm9.js.map → chunk-4gz41why.js.map} +0 -0
  1127. /package/dist/{chunk-6rzdtvn5.js.map → chunk-8b55ygje.js.map} +0 -0
  1128. /package/dist/{chunk-r82k4z7z.js.map → chunk-a31h57d5.js.map} +0 -0
  1129. /package/dist/{chunk-qzyemcj7.js.map → chunk-ckxfnx7f.js.map} +0 -0
  1130. /package/dist/{chunk-53s4asfm.js.map → chunk-rnshztfq.js.map} +0 -0
  1131. /package/dist/{chunk-8kv2sez0.js.map → chunk-vybf6pkp.js.map} +0 -0
  1132. /package/dist/{chunk-6zrpewy4.js.map → chunk-z3zp0bj1.js.map} +0 -0
  1133. /package/dist/{chunk-hz8m927w.js.map → chunk-zqysyfjt.js.map} +0 -0
@@ -1,44 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/projections/revision.ts", "../src/projections/registry.ts", "../src/materializer/shared/batching.ts", "../src/materializer/shared/identity.ts", "../src/materializer/context.ts", "../src/materializer/execution/commit-lifecycle.ts", "../src/materializer/effective/build-events.ts", "../src/materializer/shared/abort.ts", "../src/materializer/shared/chunking.ts", "../src/materializer/execution/plan-stream.ts", "../src/materializer/execution/work-records.ts", "../src/materializer/execution/work-executor.ts", "../src/materializer/shared/normalize.ts", "../src/materializer/edits/execution-units.ts", "../src/materializer/effective/load-state.ts", "../src/materializer/edits/read-set.ts", "../src/materializer/effective/resolve.ts", "../src/materializer/edits/working-state.ts", "../src/materializer/edits/load-state.ts", "../src/materializer/effective/diff.ts", "../src/materializer/effective/validate.ts", "../src/materializer/edits/apply.ts", "../src/materializer/edits/operations.ts", "../src/materializer/edits/plan.ts", "../src/materializer/edits/commit.ts", "../src/materializer/execution/run-correlation.ts", "../src/materializer/shared/projection-run.ts", "../src/materializer/projections/finish-run.ts", "../src/materializer/projections/entry-validator.ts", "../src/materializer/projections/replacement-plan.ts", "../src/materializer/projections/source-materialization.ts", "../src/materializer/projections/replace.ts", "../src/materializer/telemetry/plan.ts", "../src/materializer/telemetry/append.ts", "../src/materializer/materializer.ts"],
4
- "sourcesContent": [
5
- "import type { DatasetDefinition } from \"../datasets\"\nimport { compareStrings, type JsonValue } from \"../json\"\nimport { sha256Canonical } from \"../materialization/identity\"\nimport type { OntologyRegistry } from \"../ontology\"\nimport type { ObjectFieldSchema, Property, Schema } from \"../ontology/types\"\nimport type { ProjectionDefinition, ProjectionOwnership } from \"./types\"\n\nexport function computeOntologyRevision(ontology: OntologyRegistry): string {\n const referencedValueTypeIds = collectOntologyValueTypeDependencies(ontology)\n return sha256Canonical({\n objectTypes: normalizeOntologyObjectTypes(ontology),\n valueTypes: normalizeOntologyValueTypes(ontology, referencedValueTypeIds),\n })\n}\n\nfunction collectOntologyValueTypeDependencies(ontology: OntologyRegistry): ReadonlySet<string> {\n const referencedValueTypeIds = new Set<string>()\n for (const objectType of ontology.getObjectTypesById().values()) {\n for (const property of objectType.properties) {\n collectReferencedValueTypeIds(property.schema, referencedValueTypeIds)\n }\n for (const link of objectType.links) {\n for (const property of link.properties ?? []) {\n collectReferencedValueTypeIds(property.schema, referencedValueTypeIds)\n }\n }\n }\n const pending = [...referencedValueTypeIds]\n const queued = new Set(pending)\n for (let index = 0; index < pending.length; index += 1) {\n const valueType = ontology.getValueTypesById().get(pending[index])\n if (!valueType) continue\n collectReferencedValueTypeIds(valueType.schema, referencedValueTypeIds)\n for (const valueTypeId of referencedValueTypeIds) {\n if (queued.has(valueTypeId)) continue\n queued.add(valueTypeId)\n pending.push(valueTypeId)\n }\n }\n return referencedValueTypeIds\n}\n\nfunction normalizeOntologyValueTypes(\n ontology: OntologyRegistry,\n referencedValueTypeIds: ReadonlySet<string>\n): JsonValue[] {\n return [...referencedValueTypeIds]\n .sort(compareStrings)\n .map((valueTypeId) => ontology.getValueTypesById().get(valueTypeId))\n .filter((valueType) => valueType !== undefined)\n .map((valueType) => ({\n id: valueType.id,\n schema: normalizeSchema(valueType.schema),\n semanticType: valueType.semanticType ?? null,\n }))\n}\n\nfunction normalizeOntologyObjectTypes(ontology: OntologyRegistry): JsonValue[] {\n return [...ontology.getObjectTypesById().values()]\n .sort((left, right) => compareStrings(left.id, right.id))\n .map((objectType) => ({\n id: objectType.id,\n extends: objectType.extends ?? null,\n parents: [...(objectType.parents ?? [])].sort(),\n implements: [...(objectType.implements ?? [])].sort(),\n properties: [...objectType.properties]\n .sort((left, right) => compareStrings(left.id, right.id))\n .map(normalizeProperty),\n links: [...objectType.links]\n .sort((left, right) => compareStrings(left.id, right.id))\n .map((link) => ({\n id: link.id,\n targetObjectTypeIds: Array.isArray(link.targetObjectTypeId)\n ? [...link.targetObjectTypeId].sort()\n : [link.targetObjectTypeId],\n cardinality: link.cardinality ?? \"many\",\n properties: [...(link.properties ?? [])]\n .sort((left, right) => compareStrings(left.id, right.id))\n .map(normalizeProperty),\n })),\n }))\n}\n\nfunction collectReferencedValueTypeIds(schema: Schema, valueTypeIds: Set<string>): void {\n if (typeof schema === \"string\" || schema.type === \"enum\") return\n if (schema.type === \"valueTypeRef\") {\n valueTypeIds.add(schema.valueTypeId)\n return\n }\n if (schema.type === \"array\") {\n collectReferencedValueTypeIds(schema.items, valueTypeIds)\n return\n }\n if (schema.type === \"map\") {\n collectReferencedValueTypeIds(schema.valueSchema, valueTypeIds)\n return\n }\n for (const field of Object.values(schema.properties)) {\n collectReferencedValueTypeIds(field.schema, valueTypeIds)\n }\n}\n\nexport function computeProjectionRevision(\n projection: ProjectionDefinition,\n dataset: DatasetDefinition\n): string {\n const referencedColumns = projectionColumns(projection)\n const columns = dataset.schema.columns\n .filter((column) => referencedColumns.has(column.name))\n .map((column) => ({\n name: column.name,\n type: column.type,\n nullable: column.nullable ?? false,\n }))\n .sort((left, right) => compareStrings(left.name, right.name))\n\n return sha256Canonical({\n mapping: normalizeProjectionDefinition(projection),\n columns,\n })\n}\n\nexport function computeProjectionOwnershipHash(ownership: ProjectionOwnership): string {\n return sha256Canonical(ownership)\n}\n\nfunction normalizeProjectionDefinition(projection: ProjectionDefinition): JsonValue {\n if (projection._tag === \"ObjectProjectionDefinition\") {\n return {\n kind: \"object\",\n objectTypeId: projection.objectTypeId,\n properties: Object.fromEntries(\n Object.entries(projection.properties).sort(([left], [right]) => compareStrings(left, right))\n ),\n links: Object.fromEntries(\n Object.entries(projection.links)\n .sort(([left], [right]) => compareStrings(left, right))\n .map(([linkId, link]) => [\n linkId,\n {\n linkId: link.linkId,\n sourcePropertyId: link.sourcePropertyId ?? null,\n sourceField: link.sourceField ?? null,\n targetObjectTypeId: link.targetObjectTypeId,\n },\n ])\n ),\n }\n }\n if (projection._tag === \"LinkProjectionDefinition\") {\n return {\n kind: \"link\",\n sourceObjectTypeId: projection.sourceObjectTypeId,\n linkId: projection.linkId,\n targetObjectTypeId: projection.targetObjectTypeId,\n sourceField: projection.sourceField,\n targetField: projection.targetField,\n }\n }\n return {\n kind: \"telemetry\",\n objectTypeId: projection.objectTypeId,\n propertyId: projection.propertyId,\n objectIdField: projection.objectIdField,\n atField: projection.atField,\n valueField: projection.valueField,\n unitField: projection.unitField ?? null,\n }\n}\n\nfunction projectionColumns(projection: ProjectionDefinition): Set<string> {\n if (projection._tag === \"ObjectProjectionDefinition\") {\n return new Set([\n ...Object.values(projection.properties),\n ...Object.values(projection.links).flatMap((link) =>\n link.sourceField === undefined ? [] : [link.sourceField]\n ),\n ])\n }\n if (projection._tag === \"LinkProjectionDefinition\") {\n return new Set([projection.sourceField, projection.targetField])\n }\n return new Set([\n projection.objectIdField,\n projection.atField,\n projection.valueField,\n ...(projection.unitField === undefined ? [] : [projection.unitField]),\n ])\n}\n\nfunction normalizeProperty(property: Property): JsonValue {\n return {\n id: property.id,\n schema: normalizeSchema(property.schema),\n required: property.required ?? false,\n nullable: property.nullable ?? false,\n primary: property.primary ?? false,\n mode: property.mode ?? \"static\",\n semanticType: property.semanticType ?? null,\n }\n}\n\nfunction normalizeSchema(schema: Schema): JsonValue {\n if (typeof schema === \"string\") return schema\n if (schema.type === \"valueTypeRef\") {\n return { type: \"valueTypeRef\", valueTypeId: schema.valueTypeId }\n }\n if (schema.type === \"enum\") {\n return {\n type: \"enum\",\n valueType: schema.valueType,\n values:\n schema.valueType === \"string\"\n ? [...schema.values].sort(compareStrings)\n : [...schema.values].sort((left, right) => left - right),\n }\n }\n if (schema.type === \"array\") {\n return { type: \"array\", items: normalizeSchema(schema.items) }\n }\n if (schema.type === \"map\") {\n return {\n type: \"map\",\n keySchema: schema.keySchema,\n valueSchema: normalizeSchema(schema.valueSchema),\n }\n }\n return {\n type: \"object\",\n properties: Object.fromEntries(\n Object.entries(schema.properties)\n .sort(([left], [right]) => compareStrings(left, right))\n .map(([fieldId, field]) => [fieldId, normalizeField(field)])\n ),\n }\n}\n\nfunction normalizeField(field: ObjectFieldSchema): JsonValue {\n return {\n schema: normalizeSchema(field.schema),\n required: field.required ?? false,\n nullable: field.nullable ?? false,\n semanticType: field.semanticType ?? null,\n }\n}\n",
6
- "import type { DatasetDefinition } from \"../datasets\"\nimport type { OntologyRegistry } from \"../ontology\"\nimport { isProjectionDefinition } from \"./builders\"\nimport { ProjectionValidationError } from \"./errors\"\nimport {\n computeOntologyRevision,\n computeProjectionOwnershipHash,\n computeProjectionRevision,\n} from \"./revision\"\nimport type {\n LinkProjectionDefinition,\n ObjectProjectionDefinition,\n ProjectionDefinition,\n ProjectionDispatchDescriptor,\n ResolvedProjection,\n TelemetryProjectionDefinition,\n} from \"./types\"\nimport { type ValidatedProjectionRecord, validateProjectionsAtStartup } from \"./validation\"\n\ntype SourceProjectionDefinition = ObjectProjectionDefinition | LinkProjectionDefinition\n\nexport class ProjectionRegistry {\n readonly ontologyRevision: string\n private readonly objectProjections: readonly ObjectProjectionDefinition[]\n private readonly linkProjections: readonly LinkProjectionDefinition[]\n private readonly telemetryProjections: readonly TelemetryProjectionDefinition[]\n private readonly projectionsById = new Map<string, ProjectionDefinition>()\n private readonly sourceById = new Map<string, ResolvedProjection<SourceProjectionDefinition>>()\n private readonly telemetryById = new Map<\n string,\n ResolvedProjection<TelemetryProjectionDefinition>\n >()\n private readonly dispatchById = new Map<string, ProjectionDispatchDescriptor>()\n private readonly dispatchDescriptors: readonly ProjectionDispatchDescriptor[]\n\n constructor(input: {\n readonly projections: readonly ProjectionDefinition[]\n readonly ontology: OntologyRegistry\n readonly datasetsById: ReadonlyMap<string, DatasetDefinition>\n }) {\n const objectProjections: ObjectProjectionDefinition[] = []\n const linkProjections: LinkProjectionDefinition[] = []\n const telemetryProjections: TelemetryProjectionDefinition[] = []\n for (const projection of input.projections) {\n if (!isProjectionDefinition(projection)) {\n throw new ProjectionValidationError(\"[Sixb] Invalid projection definition.\")\n }\n switch (projection._tag) {\n case \"ObjectProjectionDefinition\":\n objectProjections.push(deepFreeze(cloneObjectProjectionDefinition(projection)))\n break\n case \"LinkProjectionDefinition\":\n linkProjections.push(deepFreeze(cloneLinkProjectionDefinition(projection)))\n break\n case \"TelemetryProjectionDefinition\":\n telemetryProjections.push(deepFreeze(cloneTelemetryProjectionDefinition(projection)))\n break\n }\n }\n this.objectProjections = Object.freeze(objectProjections)\n this.linkProjections = Object.freeze(linkProjections)\n this.telemetryProjections = Object.freeze(telemetryProjections)\n\n const projections = [\n ...this.objectProjections,\n ...this.linkProjections,\n ...this.telemetryProjections,\n ]\n assertUniqueProjectionIds(projections)\n const validated = validateProjectionsAtStartup(\n {\n objectProjections: this.objectProjections,\n linkProjections: this.linkProjections,\n telemetryProjections: this.telemetryProjections,\n },\n input.ontology,\n input.datasetsById\n )\n this.ontologyRevision = computeOntologyRevision(input.ontology)\n\n const dispatchDescriptors: ProjectionDispatchDescriptor[] = []\n for (const record of validated.objectProjections) {\n const resolved = createResolvedProjection(record)\n this.sourceById.set(resolved.projectionId, resolved)\n this.projectionsById.set(resolved.projectionId, resolved.definition)\n dispatchDescriptors.push(createDispatchDescriptor(resolved, this.ontologyRevision))\n }\n for (const record of validated.linkProjections) {\n const resolved = createResolvedProjection(record)\n this.sourceById.set(resolved.projectionId, resolved)\n this.projectionsById.set(resolved.projectionId, resolved.definition)\n dispatchDescriptors.push(createDispatchDescriptor(resolved, this.ontologyRevision))\n }\n for (const record of validated.telemetryProjections) {\n const resolved = createResolvedProjection(record)\n this.telemetryById.set(resolved.projectionId, resolved)\n this.projectionsById.set(resolved.projectionId, resolved.definition)\n dispatchDescriptors.push(createDispatchDescriptor(resolved, this.ontologyRevision))\n }\n this.dispatchDescriptors = Object.freeze(dispatchDescriptors)\n for (const descriptor of this.dispatchDescriptors) {\n this.dispatchById.set(descriptor.projectionId, descriptor)\n }\n }\n\n listObjectProjections(): readonly ObjectProjectionDefinition[] {\n return this.objectProjections\n }\n\n listLinkProjections(): readonly LinkProjectionDefinition[] {\n return this.linkProjections\n }\n\n listTelemetryProjections(): readonly TelemetryProjectionDefinition[] {\n return this.telemetryProjections\n }\n\n getProjectionById(projectionId: string): ProjectionDefinition | null {\n return this.projectionsById.get(projectionId) ?? null\n }\n\n getDispatchDescriptors(): readonly ProjectionDispatchDescriptor[] {\n return this.dispatchDescriptors\n }\n\n resolveDispatch(projectionId: string): ProjectionDispatchDescriptor {\n const descriptor = this.dispatchById.get(projectionId)\n if (descriptor) return descriptor\n throw new ProjectionValidationError(`[Sixb] Unknown projection '${projectionId}'.`)\n }\n\n resolveSource(projectionId: string): ResolvedProjection<SourceProjectionDefinition> {\n const resolved = this.sourceById.get(projectionId)\n if (!resolved) {\n if (this.telemetryById.has(projectionId)) {\n throw new ProjectionValidationError(\n `[Sixb] Projection '${projectionId}' is telemetry-only and cannot replace source state.`\n )\n }\n throw new ProjectionValidationError(`[Sixb] Unknown source projection '${projectionId}'.`)\n }\n return resolved\n }\n\n resolveTelemetry(projectionId: string): ResolvedProjection<TelemetryProjectionDefinition> {\n const resolved = this.telemetryById.get(projectionId)\n if (!resolved) {\n if (this.sourceById.has(projectionId)) {\n throw new ProjectionValidationError(\n `[Sixb] Projection '${projectionId}' does not own a telemetry source.`\n )\n }\n throw new ProjectionValidationError(`[Sixb] Unknown telemetry projection '${projectionId}'.`)\n }\n return resolved\n }\n}\n\nfunction createDispatchDescriptor(\n resolved: ResolvedProjection<ProjectionDefinition>,\n ontologyRevision: string\n): ProjectionDispatchDescriptor {\n const common = {\n projectionId: resolved.projectionId,\n datasetId: resolved.datasetId,\n ontologyRevision,\n projectionRevision: resolved.projectionRevision,\n ownershipHash: resolved.ownershipHash,\n }\n\n switch (resolved.definition._tag) {\n case \"ObjectProjectionDefinition\":\n return deepFreeze({ ...common, projectionKind: \"object\", protocol: \"replacement\" })\n case \"LinkProjectionDefinition\":\n return deepFreeze({ ...common, projectionKind: \"link\", protocol: \"replacement\" })\n case \"TelemetryProjectionDefinition\":\n return deepFreeze({ ...common, projectionKind: \"telemetry\", protocol: \"telemetry\" })\n }\n}\n\nfunction assertUniqueProjectionIds(projections: readonly ProjectionDefinition[]): void {\n const ids = new Set<string>()\n for (const projection of projections) {\n if (ids.has(projection.id)) {\n throw new ProjectionValidationError(`[Sixb] Duplicate projection id: ${projection.id}`)\n }\n ids.add(projection.id)\n }\n}\n\nfunction createResolvedProjection<TDefinition extends ProjectionDefinition>(\n validated: ValidatedProjectionRecord<TDefinition>\n): ResolvedProjection<TDefinition> {\n const { definition, dataset, ownership } = validated\n return deepFreeze({\n projectionId: definition.id,\n datasetId: definition.datasetId,\n projectionRevision: computeProjectionRevision(definition, dataset),\n ownershipHash: computeProjectionOwnershipHash(ownership),\n ownership,\n definition,\n })\n}\n\n// Projection builders may attach fluent methods and callers may supply extra fields. Clone only the\n// frozen contract so resolved definitions stay serializable and cannot leak unsupported metadata.\nfunction cloneObjectProjectionDefinition(\n projection: ObjectProjectionDefinition\n): ObjectProjectionDefinition {\n return {\n _tag: projection._tag,\n id: projection.id,\n objectTypeId: projection.objectTypeId,\n datasetId: projection.datasetId,\n properties: { ...projection.properties },\n links: Object.fromEntries(\n Object.entries(projection.links).map(([linkId, descriptor]) => [\n linkId,\n {\n linkId: descriptor.linkId,\n ...(descriptor.sourcePropertyId !== undefined\n ? { sourcePropertyId: descriptor.sourcePropertyId }\n : {}),\n ...(descriptor.sourceField !== undefined ? { sourceField: descriptor.sourceField } : {}),\n targetObjectTypeId: descriptor.targetObjectTypeId,\n },\n ])\n ),\n }\n}\n\nfunction cloneLinkProjectionDefinition(\n projection: LinkProjectionDefinition\n): LinkProjectionDefinition {\n return {\n _tag: \"LinkProjectionDefinition\",\n id: projection.id,\n linkId: projection.linkId,\n sourceObjectTypeId: projection.sourceObjectTypeId,\n targetObjectTypeId: projection.targetObjectTypeId,\n datasetId: projection.datasetId,\n sourceField: projection.sourceField,\n targetField: projection.targetField,\n }\n}\n\nfunction cloneTelemetryProjectionDefinition(\n projection: TelemetryProjectionDefinition\n): TelemetryProjectionDefinition {\n return {\n _tag: \"TelemetryProjectionDefinition\",\n id: projection.id,\n objectTypeId: projection.objectTypeId,\n propertyId: projection.propertyId,\n datasetId: projection.datasetId,\n objectIdField: projection.objectIdField,\n atField: projection.atField,\n valueField: projection.valueField,\n ...(projection.unitField !== undefined ? { unitField: projection.unitField } : {}),\n }\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== \"object\" || Object.isFrozen(value)) return value\n for (const child of Object.values(value as Record<string, unknown>)) {\n deepFreeze(child)\n }\n return Object.freeze(value)\n}\n",
7
- "import { MaterializationValidationError } from \"../../materialization/errors\"\n\nexport interface MaterializationBatching {\n readonly sourceStageRows: number\n readonly sourceStageBytes: number\n readonly statePageRows: number\n readonly planChunkRows: number\n readonly planChunkBytes: number\n}\n\nexport const DEFAULT_MATERIALIZATION_BATCHING: MaterializationBatching = Object.freeze({\n sourceStageRows: 1_000,\n sourceStageBytes: 4 * 1024 * 1024,\n statePageRows: 1_000,\n planChunkRows: 1_000,\n planChunkBytes: 4 * 1024 * 1024,\n})\n\n/** Internal test/provider override. Application configuration never exposes these chunk targets. */\nexport function resolveMaterializationBatching(\n overrides: Partial<MaterializationBatching> = {}\n): MaterializationBatching {\n const resolved = { ...DEFAULT_MATERIALIZATION_BATCHING, ...overrides }\n for (const [name, value] of Object.entries(resolved)) {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new MaterializationValidationError(\n `Materialization batching '${name}' must be a positive safe integer.`\n )\n }\n }\n return Object.freeze(resolved)\n}\n",
8
- "import { randomUUID } from \"node:crypto\"\n\nexport type { OntologyMaterializationEventKind } from \"../../materialization/identity\"\nexport {\n createCommitId,\n createEventId,\n createRequestHash,\n materializationEventKindOrdinal,\n ONTOLOGY_MATERIALIZATION_EVENT_KIND_ORDER,\n sha256Canonical,\n} from \"../../materialization/identity\"\n\nimport { MaterializationValidationError } from \"../../materialization/errors\"\nimport { createCommitId, createRequestHash, sha256Canonical } from \"../../materialization/identity\"\nimport type {\n EffectiveLinkSnapshot,\n ProjectionMaterializationIdentity,\n} from \"../../materialization/model\"\nimport { compareLinkRefs } from \"../../materialization/refs\"\n\nexport function createActionIdempotencyKey(runId: string): string {\n return `action:${runId}:edits`\n}\n\nexport function createRuntimeIdempotencyKey(requestId: string): string {\n return `runtime:${requestId}`\n}\n\ntype ReplacementMaterializationIdentity = Extract<\n ProjectionMaterializationIdentity,\n { readonly protocol: \"replacement\" }\n>\ntype TelemetryMaterializationIdentity = Extract<\n ProjectionMaterializationIdentity,\n { readonly protocol: \"telemetry\" }\n>\n\nfunction projectionIdentityTuple(\n input: ProjectionMaterializationIdentity\n): readonly [string, string, string, string, string, string, string, string, string] {\n return [\n input.projectionId,\n input.projectionKind,\n input.protocol,\n input.datasetVersion.datasetId,\n input.datasetVersion.versionId,\n input.datasetVersion.createdAt,\n input.ontologyRevision,\n input.projectionRevision,\n input.ownershipHash,\n ]\n}\n\nexport function createProjectionIdempotencyKey(\n identity: ReplacementMaterializationIdentity\n): string {\n return `projection:replace:${sha256Canonical(projectionIdentityTuple(identity))}`\n}\n\nexport function createRuntimeTelemetryIdempotencyKey(requestId: string): string {\n return `telemetry:runtime:${requestId}`\n}\n\nexport function createProjectionTelemetryIdempotencyKey(\n identity: TelemetryMaterializationIdentity,\n batchOrdinal: number\n): string {\n return `telemetry:projection:${sha256Canonical([\n ...projectionIdentityTuple(identity),\n batchOrdinal,\n ])}`\n}\n\nexport interface CommitIdentity {\n readonly idempotencyKey: string\n readonly requestHash: string\n readonly commitId: string\n}\n\nexport interface TimedCommitIdentity extends CommitIdentity {\n readonly committedAt: string\n}\n\nexport function createCommitIdentity(input: {\n readonly projectId: string\n readonly idempotencyKey: string\n readonly normalizedCallerIntent: unknown\n}): CommitIdentity {\n return Object.freeze({\n idempotencyKey: input.idempotencyKey,\n requestHash: createRequestHash(input.normalizedCallerIntent),\n commitId: createCommitId(input.projectId, input.idempotencyKey),\n })\n}\n\nexport function timestampCommitIdentity(\n identity: CommitIdentity,\n now: Date = new Date()\n): TimedCommitIdentity {\n const committedAt = new Date(now)\n if (Number.isNaN(committedAt.getTime())) {\n throw new MaterializationValidationError(\"Materialization commit time must be a valid date.\")\n }\n return Object.freeze({\n ...identity,\n committedAt: committedAt.toISOString(),\n })\n}\n\nexport function createTimedCommitIdentity(input: {\n readonly projectId: string\n readonly idempotencyKey: string\n readonly normalizedCallerIntent: unknown\n readonly now?: Date\n}): TimedCommitIdentity {\n return timestampCommitIdentity(\n createCommitIdentity({\n projectId: input.projectId,\n idempotencyKey: input.idempotencyKey,\n normalizedCallerIntent: input.normalizedCallerIntent,\n }),\n input.now\n )\n}\n\n/** Fresh per replacement invocation; callers retain it unchanged across staging/retry. */\nexport function createProjectionMaterializationId(): string {\n return randomUUID()\n}\n\nexport function createLinkScopeFingerprint(links: readonly EffectiveLinkSnapshot[]): string {\n return sha256Canonical(\n [...links]\n .sort((left, right) => compareLinkRefs(left.ref, right.ref))\n .map((link) => ({\n ref: link.ref,\n properties: link.properties ?? {},\n lastCommitId: link.lastCommitId,\n }))\n )\n}\n",
9
- "import { MaterializationValidationError } from \"../materialization/errors\"\nimport type { OntologyRegistry } from \"../ontology\"\nimport type { ProjectionRegistry } from \"../projections/registry\"\nimport { computeOntologyRevision } from \"../projections/revision\"\nimport type { Storage } from \"../storage\"\nimport { type MaterializationBatching, resolveMaterializationBatching } from \"./shared/batching\"\nimport { createProjectionMaterializationId } from \"./shared/identity\"\n\nexport type MaterializerStorage = Storage\n\nexport interface OntologyMaterializerDependencies {\n readonly batching?: Partial<MaterializationBatching>\n readonly clock?: () => Date\n readonly materializationId?: () => string\n readonly maxSerializationRetries?: number\n readonly onSerializationRetry?: (attempt: number, error: unknown) => void\n /** @internal Bounded-memory instrumentation for core semantic buffers. */\n readonly observeCoreBuffer?: (boundary: string, rows: number) => void\n}\n\nexport interface MaterializerContext {\n readonly projectId: string\n readonly ontology: OntologyRegistry\n readonly projectionRegistry: ProjectionRegistry\n readonly storage: MaterializerStorage\n readonly batching: MaterializationBatching\n readonly clock: () => Date\n readonly materializationId: () => string\n readonly maxSerializationRetries: number\n readonly onSerializationRetry?: (attempt: number, error: unknown) => void\n readonly observeCoreBuffer?: (boundary: string, rows: number) => void\n}\n\nexport function createMaterializerContext(input: {\n readonly projectId: string\n readonly ontology: OntologyRegistry\n readonly projections: ProjectionRegistry\n readonly storage: MaterializerStorage\n readonly dependencies?: OntologyMaterializerDependencies\n}): MaterializerContext {\n if (input.projectId.trim().length === 0) {\n throw new MaterializationValidationError(\"Materializer project id must be nonblank.\")\n }\n if (!input.storage?.ontology) {\n throw new MaterializationValidationError(\"Storage does not provide ontology capabilities.\")\n }\n if (computeOntologyRevision(input.ontology) !== input.projections.ontologyRevision) {\n throw new MaterializationValidationError(\n \"Materializer Ontology does not match the Ontology pinned by its projection registry.\"\n )\n }\n const dependencies = input.dependencies ?? {}\n const maxSerializationRetries = dependencies.maxSerializationRetries ?? 2\n if (!Number.isSafeInteger(maxSerializationRetries) || maxSerializationRetries < 0) {\n throw new MaterializationValidationError(\n \"Materializer serialization retry count must be a nonnegative safe integer.\"\n )\n }\n return {\n projectId: input.projectId,\n ontology: input.ontology,\n projectionRegistry: input.projections,\n storage: input.storage,\n batching: resolveMaterializationBatching(dependencies.batching),\n clock: dependencies.clock ?? (() => new Date()),\n materializationId: dependencies.materializationId ?? createProjectionMaterializationId,\n maxSerializationRetries,\n ...(dependencies.onSerializationRetry !== undefined\n ? { onSerializationRetry: dependencies.onSerializationRetry }\n : {}),\n ...(dependencies.observeCoreBuffer !== undefined\n ? { observeCoreBuffer: dependencies.observeCoreBuffer }\n : {}),\n }\n}\n",
10
- "import { MaterializationConflictError } from \"../../materialization/errors\"\nimport type {\n EditCommitResult,\n ProjectionCommitResult,\n TelemetryCommitResult,\n} from \"../../materialization/model\"\nimport { isStorageSerializationFailure } from \"../../storage\"\nimport type { OntologyCommitRecord } from \"../../storage/ontology\"\nimport type { MaterializerContext, MaterializerStorage } from \"../context\"\nimport type { CommitIdentity } from \"../shared/identity\"\n\nexport async function replayCommitRecord(\n context: Pick<MaterializerContext, \"projectId\" | \"storage\">,\n identity: CommitIdentity,\n storage: MaterializerStorage = context.storage\n): Promise<OntologyCommitRecord | null> {\n const existing = await storage.ontology.commits.getByIdempotencyKey({\n projectId: context.projectId,\n idempotencyKey: identity.idempotencyKey,\n })\n if (!existing) return null\n if (existing.requestHash !== identity.requestHash) {\n throw new MaterializationConflictError(\n \"idempotency\",\n `Idempotency key '${identity.idempotencyKey}' was reused with different intent.`\n )\n }\n return existing\n}\n\nexport async function replayCommit<\n TResult extends EditCommitResult | ProjectionCommitResult | TelemetryCommitResult,\n>(\n context: Pick<MaterializerContext, \"projectId\" | \"storage\">,\n identity: CommitIdentity,\n storage: MaterializerStorage = context.storage\n): Promise<TResult | null> {\n const existing = await replayCommitRecord(context, identity, storage)\n if (!existing) return null\n return { ...structuredClone(existing.result), created: false } as TResult\n}\n\nexport async function withSerializationRetry<T>(\n context: Pick<MaterializerContext, \"maxSerializationRetries\" | \"onSerializationRetry\">,\n run: () => Promise<T>\n): Promise<T> {\n for (let attempt = 0; ; attempt += 1) {\n try {\n return await run()\n } catch (error) {\n if (!isStorageSerializationFailure(error) || attempt >= context.maxSerializationRetries) {\n throw error\n }\n context.onSerializationRetry?.(attempt + 1, error)\n }\n }\n}\n",
11
- "import type { EventActor } from \"../../events/envelope\"\nimport type {\n EffectiveLinkChange,\n EffectiveObjectChange,\n OntologyMaterializationOrigin,\n TelemetryPointWrite,\n} from \"../../materialization/model\"\nimport { linkRefSortKey, objectRefSortKey, telemetryPointSortKey } from \"../../materialization/refs\"\nimport type {\n OntologyMaterializationEvent,\n OntologyMaterializationEventDraft,\n} from \"../../storage/ontology\"\nimport { createEventId, materializationEventKindOrdinal } from \"../shared/identity\"\n\nexport interface OrderedMaterializationEventDraft {\n readonly kindRank: number\n readonly sortKey: string\n readonly draft: OntologyMaterializationEventDraft\n}\n\nexport interface MaterializationEventDraftContext {\n readonly projectId: string\n readonly commitId: string\n readonly committedAt: string\n readonly origin: OntologyMaterializationOrigin\n readonly actor?: EventActor\n}\n\nexport function buildObjectMaterializationEventDraft(\n input: MaterializationEventDraftContext & { readonly change: EffectiveObjectChange }\n): OrderedMaterializationEventDraft {\n const draft = buildObjectEventDraft(input, input.change)\n return orderedDraft(objectRefSortKey(input.change.ref), draft)\n}\n\nfunction buildObjectEventDraft(\n context: MaterializationEventDraftContext,\n change: EffectiveObjectChange\n): OntologyMaterializationEventDraft {\n const base = eventDraftBase(context)\n const partitionKey = `${change.ref.objectTypeId}:${change.ref.primaryId}`\n\n if (change.kind === \"deleted\") {\n return {\n ...base,\n type: \"object.deleted\",\n topic: \"objects\",\n partitionKey,\n payload: {\n objectTypeId: change.ref.objectTypeId,\n primaryId: change.ref.primaryId,\n propertyChanges: change.propertyChanges,\n },\n }\n }\n\n const type = objectEventType(change)\n return {\n ...base,\n type,\n topic: \"objects\",\n partitionKey,\n payload: {\n objectTypeId: change.ref.objectTypeId,\n primaryId: change.ref.primaryId,\n properties: change.after.properties,\n propertyChanges: change.propertyChanges,\n },\n }\n}\n\nfunction objectEventType(\n change: Exclude<EffectiveObjectChange, { readonly kind: \"deleted\" }>\n): \"object.created\" | \"object.updated\" {\n if (change.kind === \"created\") return \"object.created\"\n return \"object.updated\"\n}\n\nexport function buildLinkMaterializationEventDraft(\n input: MaterializationEventDraftContext & { readonly change: EffectiveLinkChange }\n): OrderedMaterializationEventDraft {\n const draft = buildLinkEventDraft(input, input.change)\n return orderedDraft(linkRefSortKey(input.change.ref), draft)\n}\n\nfunction buildLinkEventDraft(\n context: MaterializationEventDraftContext,\n change: EffectiveLinkChange\n): OntologyMaterializationEventDraft {\n const base = eventDraftBase(context)\n const partitionKey = `${change.ref.source.objectTypeId}:${change.ref.source.primaryId}:${change.ref.linkId}`\n const commonPayload = {\n sourceTypeId: change.ref.source.objectTypeId,\n sourceId: change.ref.source.primaryId,\n linkId: change.ref.linkId,\n targetTypeId: change.ref.target.objectTypeId,\n targetId: change.ref.target.primaryId,\n propertyChanges: change.propertyChanges,\n }\n\n if (change.kind === \"deleted\") {\n return {\n ...base,\n type: \"link.deleted\",\n topic: \"links\",\n partitionKey,\n payload: commonPayload,\n }\n }\n\n const type = linkEventType(change)\n if (change.after.properties === undefined) {\n return { ...base, type, topic: \"links\", partitionKey, payload: commonPayload }\n }\n return {\n ...base,\n type,\n topic: \"links\",\n partitionKey,\n payload: { ...commonPayload, properties: change.after.properties },\n }\n}\n\nfunction linkEventType(\n change: Exclude<EffectiveLinkChange, { readonly kind: \"deleted\" }>\n): \"link.created\" | \"link.updated\" {\n if (change.kind === \"created\") return \"link.created\"\n return \"link.updated\"\n}\n\nexport function buildTelemetryMaterializationEventDraft(\n input: MaterializationEventDraftContext & { readonly point: TelemetryPointWrite }\n): OrderedMaterializationEventDraft {\n const draft = buildTelemetryEventDraft(input, input.point)\n return orderedDraft(telemetryPointSortKey(input.point.series, input.point.at), draft)\n}\n\nfunction buildTelemetryEventDraft(\n context: MaterializationEventDraftContext,\n point: TelemetryPointWrite\n): OntologyMaterializationEventDraft {\n const base = eventDraftBase(context)\n const partitionKey = `${point.series.object.objectTypeId}:${point.series.object.primaryId}:${point.series.propertyId}`\n const payload = {\n objectTypeId: point.series.object.objectTypeId,\n objectId: point.series.object.primaryId,\n propertyId: point.series.propertyId,\n value: point.value,\n at: point.at,\n }\n if (point.unit === undefined) {\n return { ...base, type: \"telemetry.appended\", topic: \"telemetry\", partitionKey, payload }\n }\n return {\n ...base,\n type: \"telemetry.appended\",\n topic: \"telemetry\",\n partitionKey,\n payload: { ...payload, unit: point.unit },\n }\n}\n\nfunction eventDraftBase(context: MaterializationEventDraftContext) {\n const base = {\n schemaVersion: 1 as const,\n projectId: context.projectId,\n occurredAt: context.committedAt,\n origin: context.origin,\n commitId: context.commitId,\n }\n if (context.actor === undefined) return base\n return { ...base, actor: context.actor }\n}\n\nfunction orderedDraft(\n sortKey: string,\n draft: OntologyMaterializationEventDraft\n): OrderedMaterializationEventDraft {\n return {\n kindRank: materializationEventKindOrdinal(draft.type),\n sortKey,\n draft,\n }\n}\n\nexport function sequenceMaterializationEvent(\n projectId: string,\n commitId: string,\n commitOrdinal: number,\n draft: OntologyMaterializationEventDraft\n): OntologyMaterializationEvent {\n const sequence = {\n id: createEventId(projectId, commitId, commitOrdinal),\n commitOrdinal,\n }\n return { ...draft, ...sequence }\n}\n",
12
- "export function throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw signal.reason instanceof Error\n ? signal.reason\n : new DOMException(\"Projection replacement aborted\", \"AbortError\")\n }\n}\n",
13
- "export async function* chunkBySize<T>(\n items: Iterable<T> | AsyncIterable<T>,\n input: {\n readonly maxRows: number\n readonly maxBytes: number\n readonly byteLength: (item: T) => number\n }\n): AsyncIterable<readonly T[]> {\n let chunk: T[] = []\n let bytes = 0\n for await (const item of items) {\n const itemBytes = input.byteLength(item)\n if (chunk.length > 0 && bytes + itemBytes > input.maxBytes) {\n yield chunk\n chunk = []\n bytes = 0\n }\n chunk.push(item)\n bytes += itemBytes\n if (chunk.length >= input.maxRows || bytes >= input.maxBytes) {\n yield chunk\n chunk = []\n bytes = 0\n }\n }\n if (chunk.length > 0) yield chunk\n}\n",
14
- "import { utf8JsonByteLength } from \"../../materialization/refs\"\nimport type {\n ExactEffectiveLinkDelete,\n ExactEffectiveLinkWrite,\n ExactEffectiveObjectDelete,\n ExactEffectiveObjectWrite,\n ExactLinkOverrideDelete,\n ExactLinkOverrideWrite,\n ExactObjectOverrideDelete,\n ExactObjectOverrideWrite,\n ExactTimeseriesPointWrite,\n MaterializationPlanChunk,\n MaterializationPlanWorkItem,\n OntologyOutboxWrite,\n} from \"../../storage/ontology\"\nimport type { MaterializationBatching } from \"../shared/batching\"\nimport { chunkBySize } from \"../shared/chunking\"\n\nexport type MaterializationPlanItem =\n | MaterializationPlanWorkItem\n | { readonly kind: \"outbox\"; readonly value: OntologyOutboxWrite }\n\nexport async function* planStream(\n items: Iterable<MaterializationPlanItem> | AsyncIterable<MaterializationPlanItem>,\n batching: MaterializationBatching\n): AsyncIterable<MaterializationPlanChunk> {\n for await (const itemsChunk of chunkBySize(items, {\n maxRows: batching.planChunkRows,\n maxBytes: batching.planChunkBytes,\n byteLength: utf8JsonByteLength,\n })) {\n const chunk = mutableChunk()\n for (const item of itemsChunk) appendItem(chunk, item)\n yield chunk\n }\n}\n\ntype MutableChunk = {\n overrides: {\n objectUpserts: ExactObjectOverrideWrite[]\n objectDeletes: ExactObjectOverrideDelete[]\n linkUpserts: ExactLinkOverrideWrite[]\n linkDeletes: ExactLinkOverrideDelete[]\n }\n effective: {\n objectUpserts: ExactEffectiveObjectWrite[]\n objectDeletes: ExactEffectiveObjectDelete[]\n linkUpserts: ExactEffectiveLinkWrite[]\n linkDeletes: ExactEffectiveLinkDelete[]\n }\n timeseries: { pointUpserts: ExactTimeseriesPointWrite[] }\n outbox: OntologyOutboxWrite[]\n}\n\nfunction mutableChunk(): MutableChunk {\n return {\n overrides: { objectUpserts: [], objectDeletes: [], linkUpserts: [], linkDeletes: [] },\n effective: { objectUpserts: [], objectDeletes: [], linkUpserts: [], linkDeletes: [] },\n timeseries: { pointUpserts: [] },\n outbox: [],\n }\n}\n\nfunction appendItem(chunk: MutableChunk, item: MaterializationPlanItem): void {\n switch (item.kind) {\n case \"object-override-upsert\":\n chunk.overrides.objectUpserts.push(item.value)\n break\n case \"object-override-delete\":\n chunk.overrides.objectDeletes.push(item.value)\n break\n case \"link-override-upsert\":\n chunk.overrides.linkUpserts.push(item.value)\n break\n case \"link-override-delete\":\n chunk.overrides.linkDeletes.push(item.value)\n break\n case \"object-upsert\":\n chunk.effective.objectUpserts.push(item.value)\n break\n case \"object-delete\":\n chunk.effective.objectDeletes.push(item.value)\n break\n case \"link-upsert\":\n chunk.effective.linkUpserts.push(item.value)\n break\n case \"link-delete\":\n chunk.effective.linkDeletes.push(item.value)\n break\n case \"point-upsert\":\n chunk.timeseries.pointUpserts.push(item.value)\n break\n case \"outbox\":\n chunk.outbox.push(item.value)\n break\n }\n}\n",
15
- "import { stableJsonStringify } from \"../../json\"\nimport type { EffectiveLinkChange, EffectiveObjectChange } from \"../../materialization/model\"\nimport type {\n MaterializationClassificationWorkRecord,\n MaterializationEventWorkRecord,\n MaterializationPlanWorkItem,\n MaterializationPlanWorkRecord,\n MaterializationWorkEntityKind,\n OntologyMaterializationEvent,\n OntologyOutboxWrite,\n} from \"../../storage/ontology\"\nimport { materializationApplyPhase } from \"../../storage/ontology/materializations\"\nimport type { WorkingLink, WorkingObject } from \"../edits/working-state\"\nimport type { OrderedMaterializationEventDraft } from \"../effective/build-events\"\nimport type { TimedCommitIdentity } from \"../shared/identity\"\nimport type { MaterializationPlanItem } from \"./plan-stream\"\n\nexport function appendObjectOverridePlan(\n items: MaterializationPlanWorkItem[],\n working: WorkingObject,\n identity: TimedCommitIdentity\n): void {\n if (\n stableJsonStringify(working.originalOverride?.value ?? null) ===\n stableJsonStringify(working.override)\n ) {\n return\n }\n if (working.override) {\n items.push({\n kind: \"object-override-upsert\",\n value: {\n ref: working.ref,\n value: working.override,\n expectedLastCommitId: working.originalOverride?.lastCommitId ?? null,\n lastCommitId: identity.commitId,\n updatedAt: identity.committedAt,\n },\n })\n } else if (working.originalOverride) {\n items.push({\n kind: \"object-override-delete\",\n value: { ref: working.ref, expectedLastCommitId: working.originalOverride.lastCommitId },\n })\n }\n}\n\nexport function appendLinkOverridePlan(\n items: MaterializationPlanWorkItem[],\n working: WorkingLink,\n identity: TimedCommitIdentity\n): void {\n if (\n stableJsonStringify(working.originalOverride?.value ?? null) ===\n stableJsonStringify(working.override)\n ) {\n return\n }\n if (working.override) {\n items.push({\n kind: \"link-override-upsert\",\n value: {\n ref: working.ref,\n value: working.override,\n expectedLastCommitId: working.originalOverride?.lastCommitId ?? null,\n lastCommitId: identity.commitId,\n updatedAt: identity.committedAt,\n },\n })\n } else if (working.originalOverride) {\n items.push({\n kind: \"link-override-delete\",\n value: { ref: working.ref, expectedLastCommitId: working.originalOverride.lastCommitId },\n })\n }\n}\n\nexport function appendObjectEffectivePlan(\n items: MaterializationPlanWorkItem[],\n change: EffectiveObjectChange\n): void {\n if (change.kind === \"deleted\") {\n items.push({\n kind: \"object-delete\",\n value: {\n ref: change.ref,\n expected: expectedObject(change.before),\n },\n })\n } else {\n items.push({\n kind: \"object-upsert\",\n value: {\n row: change.after,\n expected: change.before\n ? expectedObject(change.before)\n : { ref: change.ref, exists: false },\n },\n })\n }\n}\n\nexport function appendLinkEffectivePlan(\n items: MaterializationPlanWorkItem[],\n change: EffectiveLinkChange\n): void {\n if (change.kind === \"deleted\") {\n items.push({\n kind: \"link-delete\",\n value: {\n ref: change.ref,\n expected: expectedLink(change.before),\n },\n })\n } else {\n items.push({\n kind: \"link-upsert\",\n value: {\n row: change.after,\n expected: change.before ? expectedLink(change.before) : { ref: change.ref, exists: false },\n },\n })\n }\n}\n\nexport function outboxItem(\n event: OntologyMaterializationEvent,\n committedAt: string\n): MaterializationPlanItem {\n const value: OntologyOutboxWrite = {\n envelope: event,\n availableAt: committedAt,\n createdAt: committedAt,\n }\n return { kind: \"outbox\", value }\n}\n\nexport function classificationWork(\n entityKind: MaterializationWorkEntityKind,\n identityKey: string,\n sortKey: string\n): MaterializationClassificationWorkRecord {\n return {\n kind: \"classification\",\n recordKey: `classification:${entityKind}:${sortKey}`,\n entityKind,\n identityKey,\n }\n}\n\nexport function planWork(\n item: MaterializationPlanWorkItem,\n sortKey: string\n): MaterializationPlanWorkRecord {\n const applyPhase = materializationApplyPhase(item.kind)\n return {\n kind: \"plan\",\n recordKey: `plan:${item.kind}:${sortKey}`,\n applyPhase,\n sortKey,\n item,\n }\n}\n\nexport function eventWork(value: OrderedMaterializationEventDraft): MaterializationEventWorkRecord {\n return {\n kind: \"event\",\n recordKey: `event:${value.kindRank}:${value.sortKey}`,\n eventKindRank: value.kindRank,\n sortKey: value.sortKey,\n draft: value.draft,\n }\n}\n\nfunction expectedObject(snapshot: NonNullable<EffectiveObjectChange[\"before\"]>) {\n return {\n ref: snapshot.ref,\n exists: true as const,\n version: snapshot.version,\n lastCommitId: snapshot.lastCommitId,\n }\n}\n\nfunction expectedLink(snapshot: NonNullable<EffectiveLinkChange[\"before\"]>) {\n return { ref: snapshot.ref, exists: true as const, lastCommitId: snapshot.lastCommitId }\n}\n",
16
- "import { MaterializationValidationError } from \"../../materialization/errors\"\nimport { utf8JsonByteLength } from \"../../materialization/refs\"\nimport type {\n MaterializationSession,\n MaterializationWorkRecord,\n OntologyMaterializationStorage,\n} from \"../../storage/ontology\"\nimport type { MaterializerContext } from \"../context\"\nimport { sequenceMaterializationEvent } from \"../effective/build-events\"\nimport { throwIfAborted } from \"../shared/abort\"\nimport { chunkBySize } from \"../shared/chunking\"\nimport type { TimedCommitIdentity } from \"../shared/identity\"\nimport { type MaterializationPlanItem, planStream } from \"./plan-stream\"\nimport { outboxItem } from \"./work-records\"\n\ntype BatchingContext = Pick<MaterializerContext, \"batching\">\n\ntype EventContext = Pick<MaterializerContext, \"batching\" | \"projectId\">\n\nexport async function applyItems(\n context: BatchingContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n items: Iterable<MaterializationPlanItem>,\n signal?: AbortSignal\n): Promise<void> {\n for await (const chunk of planStream(items, context.batching)) {\n throwIfAborted(signal)\n await storage.applyChunk({ session, chunk })\n }\n}\n\nexport async function stageWorkBounded(\n context: BatchingContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n records: readonly MaterializationWorkRecord[]\n): Promise<void> {\n for await (const chunk of chunkBySize(records, {\n maxRows: context.batching.planChunkRows,\n maxBytes: context.batching.planChunkBytes,\n byteLength: utf8JsonByteLength,\n })) {\n await storage.stageWork({ session, records: chunk })\n }\n}\n\nexport async function drainStagedWork(\n context: BatchingContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n signal?: AbortSignal\n): Promise<void> {\n let phase: number | null = null\n let pending: MaterializationPlanItem[] = []\n const flush = async () => {\n if (pending.length === 0) return\n await applyItems(context, storage, session, pending, signal)\n pending = []\n }\n for await (const page of storage.streamWork({\n session,\n order: \"apply\",\n pageRows: context.batching.planChunkRows,\n })) {\n for (const record of page.records) {\n if (record.kind !== \"plan\") {\n throw new MaterializationValidationError(\"Provider returned non-plan apply work.\")\n }\n if (phase !== null && record.applyPhase !== phase) await flush()\n phase = record.applyPhase\n pending.push(record.item)\n if (pending.length >= context.batching.planChunkRows) await flush()\n }\n }\n await flush()\n}\n\nexport async function validateStagedCardinality(\n context: BatchingContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n signal?: AbortSignal\n): Promise<void> {\n let currentScope: string | null = null\n let occupant: string | null = null\n for await (const page of storage.streamWork({\n session,\n order: \"cardinality\",\n pageRows: context.batching.statePageRows,\n })) {\n throwIfAborted(signal)\n for (const record of page.records) {\n if (record.kind !== \"cardinality\") {\n throw new MaterializationValidationError(\n \"Provider returned non-cardinality cardinality work.\"\n )\n }\n if (record.scopeSortKey !== currentScope) {\n currentScope = record.scopeSortKey\n occupant = null\n }\n if (!record.occupied) continue\n if (occupant && occupant !== record.linkSortKey) {\n throw new MaterializationValidationError(\n `Link scope '${record.ref.source.objectTypeId}.${record.ref.linkId}' has cardinality one.`\n )\n }\n occupant = record.linkSortKey\n }\n }\n}\n\nexport async function drainStagedEvents(\n context: EventContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n identity: TimedCommitIdentity,\n signal?: AbortSignal\n): Promise<number> {\n let ordinal = 0\n for await (const page of storage.streamWork({\n session,\n order: \"event\",\n pageRows: context.batching.planChunkRows,\n })) {\n const items: MaterializationPlanItem[] = []\n for (const record of page.records) {\n if (record.kind !== \"event\") {\n throw new MaterializationValidationError(\"Provider returned non-event event work.\")\n }\n const event = sequenceMaterializationEvent(\n context.projectId,\n identity.commitId,\n ordinal++,\n record.draft\n )\n items.push(outboxItem(event, identity.committedAt))\n }\n await applyItems(context, storage, session, items, signal)\n }\n return ordinal\n}\n",
17
- "import type { EventActor } from \"../../events/envelope\"\nimport { assertJsonValue, cloneJsonValue, compareStrings, stableJsonStringify } from \"../../json\"\nimport { MaterializationValidationError } from \"../../materialization/errors\"\nimport type {\n ExpectedLinkRevision,\n ExpectedLinkScopeRevision,\n ExpectedObjectRevision,\n OntologyEditCommit,\n OntologyEditOperation,\n PinnedDatasetVersion,\n ProjectionEntityRef,\n ProjectionExecution,\n ProjectionSourceAssertion,\n ProjectionSourceEntry,\n ProjectionSourceRef,\n TelemetryAppend,\n TelemetryPointWrite,\n TelemetrySeriesRef,\n} from \"../../materialization/model\"\nimport {\n linkRefKey,\n linkScopeKey,\n normalizeLinkRef,\n normalizeObjectRef,\n objectRefKey,\n projectionEntityKey,\n telemetryPointKey,\n} from \"../../materialization/refs\"\n\nexport function normalizeJsonProperties(\n properties: Readonly<Record<string, unknown>>,\n label = \"Properties\"\n): Readonly<Record<string, import(\"../../json\").JsonValue>> {\n if (typeof properties !== \"object\" || properties === null || Array.isArray(properties)) {\n throw new MaterializationValidationError(`${label} must be a JSON object.`)\n }\n\n const normalized: Record<string, import(\"../../json\").JsonValue> = {}\n for (const propertyId of Object.keys(properties).sort(compareStrings)) {\n if (propertyId.trim().length === 0) {\n throw new MaterializationValidationError(`${label} contains a blank property id.`)\n }\n const value = properties[propertyId]\n try {\n assertJsonValue(value, `${label}.${propertyId}`)\n } catch (error) {\n throw new MaterializationValidationError(\n error instanceof Error ? error.message : `${label}.${propertyId} must be JSON.`\n )\n }\n normalized[propertyId] = cloneJsonValue(value)\n }\n return Object.freeze(normalized)\n}\n\nfunction normalizeNonblank(value: string, label: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new MaterializationValidationError(`${label} must be a nonblank string.`)\n }\n return value\n}\n\nfunction normalizeEventActor(actor: EventActor): EventActor {\n if (typeof actor !== \"object\" || actor === null || Array.isArray(actor)) {\n throw new MaterializationValidationError(\"Event actor must be an object.\")\n }\n if (actor.type !== \"user\" && actor.type !== \"serviceAccount\" && actor.type !== \"system\") {\n throw new MaterializationValidationError(\n \"Event actor type must be 'user', 'serviceAccount', or 'system'.\"\n )\n }\n return Object.freeze({\n type: actor.type,\n id: normalizeNonblank(actor.id, \"Event actor id\"),\n })\n}\n\nfunction normalizeTimestamp(value: string, label: string): string {\n const milliseconds = Date.parse(value)\n if (!Number.isFinite(milliseconds)) {\n throw new MaterializationValidationError(`${label} must be a valid timestamp.`)\n }\n return new Date(milliseconds).toISOString()\n}\n\nfunction normalizePropertyIds(values: readonly string[], label: string): readonly string[] {\n const seen = new Set<string>()\n const normalized: string[] = []\n for (const value of values) {\n normalizeNonblank(value, label)\n if (seen.has(value)) {\n throw new MaterializationValidationError(`${label} contains duplicate '${value}'.`)\n }\n seen.add(value)\n normalized.push(value)\n }\n return Object.freeze(normalized.sort(compareStrings))\n}\n\nfunction normalizeOperation(operation: OntologyEditOperation): OntologyEditOperation {\n normalizeNonblank(operation.id, \"Operation id\")\n if (operation.kind === \"object.create\" || operation.kind === \"object.upsert\") {\n return Object.freeze({\n id: operation.id,\n kind: operation.kind,\n ref: normalizeObjectRef(operation.ref),\n properties: normalizeJsonProperties(operation.properties),\n })\n }\n if (operation.kind === \"object.patch\") {\n const set = normalizeJsonProperties(operation.set, `Operation '${operation.id}' set`)\n const unset = normalizePropertyIds(operation.unset, `Operation '${operation.id}' unset`)\n const reset = normalizePropertyIds(operation.reset, `Operation '${operation.id}' reset`)\n const setIds = new Set(Object.keys(set))\n for (const propertyId of [...unset, ...reset]) {\n if (setIds.has(propertyId)) {\n throw new MaterializationValidationError(\n `Operation '${operation.id}' property '${propertyId}' appears in set and unset/reset.`\n )\n }\n }\n for (const propertyId of unset) {\n if (reset.includes(propertyId)) {\n throw new MaterializationValidationError(\n `Operation '${operation.id}' property '${propertyId}' appears in unset and reset.`\n )\n }\n }\n return Object.freeze({\n id: operation.id,\n kind: operation.kind,\n ref: normalizeObjectRef(operation.ref),\n set,\n unset,\n reset,\n })\n }\n if (operation.kind === \"object.delete\" || operation.kind === \"object.restore\") {\n return Object.freeze({\n id: operation.id,\n kind: operation.kind,\n ref: normalizeObjectRef(operation.ref),\n })\n }\n if (operation.kind === \"link.upsert\") {\n return Object.freeze({\n id: operation.id,\n kind: operation.kind,\n ref: normalizeLinkRef(operation.ref),\n ...(operation.properties !== undefined\n ? { properties: normalizeJsonProperties(operation.properties) }\n : {}),\n })\n }\n if (operation.kind === \"link.delete\" || operation.kind === \"link.reset\") {\n return Object.freeze({\n id: operation.id,\n kind: operation.kind,\n ref: normalizeLinkRef(operation.ref),\n })\n }\n throw new MaterializationValidationError(\"Unknown ontology edit operation kind.\")\n}\n\nfunction deduplicateExpectations<T>(\n values: readonly T[],\n keyOf: (value: T) => string,\n label: string\n): readonly T[] {\n const byKey = new Map<string, T>()\n for (const value of values) {\n const key = keyOf(value)\n const existing = byKey.get(key)\n if (existing && stableJsonStringify(existing) !== stableJsonStringify(value)) {\n throw new MaterializationValidationError(`${label} has contradictory values for ${key}.`)\n }\n byKey.set(key, value)\n }\n return Object.freeze(\n [...byKey.entries()]\n .sort(([left], [right]) => compareStrings(left, right))\n .map(([, value]) => value)\n )\n}\n\nfunction normalizeExpectedObject(value: ExpectedObjectRevision): ExpectedObjectRevision {\n const ref = normalizeObjectRef(value.ref)\n if (!value.exists) return Object.freeze({ ref, exists: false })\n if (!Number.isSafeInteger(value.version) || value.version < 1) {\n throw new MaterializationValidationError(\"Expected object version must be a positive integer.\")\n }\n return Object.freeze({\n ref,\n exists: true,\n version: value.version,\n lastCommitId: normalizeNonblank(value.lastCommitId, \"Expected object lastCommitId\"),\n })\n}\n\nfunction normalizeExpectedLink(value: ExpectedLinkRevision): ExpectedLinkRevision {\n const ref = normalizeLinkRef(value.ref)\n if (!value.exists) return Object.freeze({ ref, exists: false })\n return Object.freeze({\n ref,\n exists: true,\n lastCommitId: normalizeNonblank(value.lastCommitId, \"Expected link lastCommitId\"),\n })\n}\n\nfunction normalizeExpectedLinkScope(value: ExpectedLinkScopeRevision): ExpectedLinkScopeRevision {\n return Object.freeze({\n source: normalizeObjectRef(value.source),\n linkId: normalizeNonblank(value.linkId, \"Expected link scope link id\"),\n fingerprint: normalizeNonblank(value.fingerprint, \"Expected link scope fingerprint\"),\n })\n}\n\n/**\n * Validates that every grouped id exists exactly once across the declared groups.\n *\n * A group naming an unknown or repeated id would silently widen or split the unit a caller item\n * relies on, so both are rejected before any operation applies.\n */\nfunction normalizeOperationGroups(\n groups: readonly (readonly string[])[],\n operationIds: ReadonlyMap<string, number>\n): readonly (readonly string[])[] {\n const grouped = new Set<string>()\n const normalized = groups.map((group) => {\n if (group.length < 2) {\n throw new MaterializationValidationError(\n \"Operation groups must contain at least two operations.\"\n )\n }\n\n const positions = group.map((id) => {\n const position = operationIds.get(id)\n if (position === undefined) {\n throw new MaterializationValidationError(\n `Operation group references unknown operation id '${id}'.`\n )\n }\n if (grouped.has(id)) {\n throw new MaterializationValidationError(\n `Operation id '${id}' appears in more than one operation group.`\n )\n }\n grouped.add(id)\n return position\n })\n\n const first = positions[0]!\n if (positions.some((position, index) => position !== first + index)) {\n throw new MaterializationValidationError(\n \"Operation groups must list a contiguous run in operation order.\"\n )\n }\n return { first, ids: Object.freeze([...group]) }\n })\n\n normalized.sort((left, right) => left.first - right.first)\n return Object.freeze(normalized.map(({ ids }) => ids))\n}\n\nexport function normalizeOntologyEditCommit(input: OntologyEditCommit): OntologyEditCommit {\n const operationIds = new Map<string, number>()\n const operations = input.operations.map((operation, index) => {\n const normalized = normalizeOperation(operation)\n if (operationIds.has(normalized.id)) {\n throw new MaterializationValidationError(`Duplicate operation id '${normalized.id}'.`)\n }\n operationIds.set(normalized.id, index)\n return normalized\n })\n\n if (input.mode === \"continue\") {\n return Object.freeze({\n mode: \"continue\",\n source: Object.freeze({\n kind: \"runtime\",\n requestId: normalizeNonblank(input.source.requestId, \"Runtime request id\"),\n }),\n ...(input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {}),\n operations: Object.freeze(operations),\n ...(input.operationGroups !== undefined\n ? { operationGroups: normalizeOperationGroups(input.operationGroups, operationIds) }\n : {}),\n })\n }\n\n const source =\n input.source.kind === \"action\"\n ? Object.freeze({\n kind: \"action\" as const,\n actionId: normalizeNonblank(input.source.actionId, \"Action id\"),\n runId: normalizeNonblank(input.source.runId, \"Action run id\"),\n })\n : Object.freeze({\n kind: \"runtime\" as const,\n requestId: normalizeNonblank(input.source.requestId, \"Runtime request id\"),\n })\n const expectedObjects = input.expectedObjects.map(normalizeExpectedObject)\n const expectedLinks = input.expectedLinks.map(normalizeExpectedLink)\n const expectedLinkScopes = input.expectedLinkScopes.map(normalizeExpectedLinkScope)\n\n return Object.freeze({\n mode: \"atomic\",\n source,\n ...(input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {}),\n operations: Object.freeze(operations),\n expectedObjects: deduplicateExpectations(\n expectedObjects,\n (value) => objectRefKey(value.ref),\n \"Expected objects\"\n ),\n expectedLinks: deduplicateExpectations(\n expectedLinks,\n (value) => linkRefKey(value.ref),\n \"Expected links\"\n ),\n expectedLinkScopes: deduplicateExpectations(\n expectedLinkScopes,\n (value) => linkScopeKey(value.source, value.linkId),\n \"Expected link scopes\"\n ),\n })\n}\n\nexport function normalizeProjectionSourceRef(source: ProjectionSourceRef): ProjectionSourceRef {\n return Object.freeze({\n projectionId: normalizeNonblank(source.projectionId, \"Projection id\"),\n })\n}\n\nexport function normalizePinnedDatasetVersion(version: PinnedDatasetVersion): PinnedDatasetVersion {\n return Object.freeze({\n datasetId: normalizeNonblank(version.datasetId, \"Dataset id\"),\n versionId: normalizeNonblank(version.versionId, \"Dataset version id\"),\n createdAt: normalizeTimestamp(version.createdAt, \"Dataset version createdAt\"),\n })\n}\n\nexport function normalizeProjectionRunId(runId: string): string {\n return normalizeNonblank(runId, \"Projection run id\")\n}\n\nexport function normalizeProjectionExecution(input: ProjectionExecution): ProjectionExecution {\n return Object.freeze({\n projectionRunId: normalizeProjectionRunId(input.projectionRunId),\n executionToken: normalizeNonblank(input.executionToken, \"Projection execution token\"),\n })\n}\n\nfunction normalizeProjectionEntity(entity: ProjectionEntityRef): ProjectionEntityRef {\n return entity.kind === \"object\"\n ? Object.freeze({ kind: \"object\", ref: normalizeObjectRef(entity.ref) })\n : Object.freeze({ kind: \"link\", ref: normalizeLinkRef(entity.ref) })\n}\n\nfunction normalizeProjectionAssertion(\n assertion: ProjectionSourceAssertion\n): ProjectionSourceAssertion {\n return assertion.kind === \"object\"\n ? Object.freeze({\n kind: \"object\",\n ref: normalizeObjectRef(assertion.ref),\n properties: normalizeJsonProperties(assertion.properties),\n })\n : Object.freeze({\n kind: \"link\",\n ref: normalizeLinkRef(assertion.ref),\n ...(assertion.properties !== undefined\n ? { properties: normalizeJsonProperties(assertion.properties) }\n : {}),\n })\n}\n\nexport function normalizeProjectionSourceEntry(\n input: ProjectionSourceEntry\n): ProjectionSourceEntry {\n const root = normalizeProjectionEntity(input.root)\n const seen = new Set<string>()\n const assertions = input.assertions.map((assertion) => {\n const normalized = normalizeProjectionAssertion(assertion)\n const key = projectionEntityKey(normalized)\n if (seen.has(key)) {\n throw new MaterializationValidationError(`Projection entry repeats asserted entity ${key}.`)\n }\n seen.add(key)\n return normalized\n })\n const rootKey = projectionEntityKey(root)\n if (!seen.has(rootKey)) {\n throw new MaterializationValidationError(\n `Projection entry must contain an assertion matching root ${rootKey}.`\n )\n }\n if (root.kind === \"object\") {\n const objectAssertions = assertions.filter((assertion) => assertion.kind === \"object\")\n if (objectAssertions.length !== 1 || projectionEntityKey(objectAssertions[0]) !== rootKey) {\n throw new MaterializationValidationError(\n \"An object projection root must contain exactly its matching object assertion plus links.\"\n )\n }\n for (const assertion of assertions) {\n if (\n assertion.kind === \"link\" &&\n objectRefKey(assertion.ref.source) !== objectRefKey(root.ref)\n ) {\n throw new MaterializationValidationError(\n \"An object projection root may contain only links sourced from that root.\"\n )\n }\n }\n } else if (\n assertions.length !== 1 ||\n assertions[0].kind !== \"link\" ||\n projectionEntityKey(assertions[0]) !== rootKey\n ) {\n throw new MaterializationValidationError(\n \"A link projection root must contain exactly its matching link assertion.\"\n )\n }\n return Object.freeze({\n root,\n assertions: Object.freeze(\n assertions.sort((left, right) =>\n compareStrings(projectionEntityKey(left), projectionEntityKey(right))\n )\n ),\n })\n}\n\nfunction normalizeTelemetrySeries(series: TelemetrySeriesRef): TelemetrySeriesRef {\n return Object.freeze({\n object: normalizeObjectRef(series.object),\n propertyId: normalizeNonblank(series.propertyId, \"Telemetry property id\"),\n })\n}\n\nfunction normalizeTelemetryPoint(point: TelemetryPointWrite): TelemetryPointWrite {\n try {\n assertJsonValue(point.value, \"Telemetry point value\")\n } catch (error) {\n throw new MaterializationValidationError(\n error instanceof Error ? error.message : \"Telemetry point value must be JSON.\"\n )\n }\n return Object.freeze({\n series: normalizeTelemetrySeries(point.series),\n value: cloneJsonValue(point.value),\n ...(point.unit !== undefined\n ? { unit: normalizeNonblank(point.unit, \"Telemetry point unit\") }\n : {}),\n at: normalizeTimestamp(point.at, \"Telemetry point timestamp\"),\n })\n}\n\nexport function normalizeTelemetryAppend(input: TelemetryAppend): TelemetryAppend {\n const pointsByKey = new Map<string, TelemetryPointWrite>()\n for (const point of input.points) {\n const normalized = normalizeTelemetryPoint(point)\n const key = telemetryPointKey(normalized.series, normalized.at)\n const existing = pointsByKey.get(key)\n if (\n input.source.kind === \"runtime\" &&\n existing &&\n stableJsonStringify(existing) !== stableJsonStringify(normalized)\n ) {\n throw new MaterializationValidationError(`Conflicting telemetry points for ${key}.`)\n }\n // Projection batches follow stable physical source order: the last occurrence wins. Runtime\n // callers remain strict because contradictory points usually indicate a request bug.\n pointsByKey.set(key, normalized)\n }\n const points = [...pointsByKey.entries()]\n .sort(([left], [right]) => compareStrings(left, right))\n .map(([, point]) => point)\n const source =\n input.source.kind === \"runtime\"\n ? Object.freeze({\n kind: \"runtime\" as const,\n requestId: normalizeNonblank(input.source.requestId, \"Runtime request id\"),\n })\n : Object.freeze({\n kind: \"projection\" as const,\n projection: normalizeProjectionSourceRef(input.source.projection),\n datasetVersion: normalizePinnedDatasetVersion(input.source.datasetVersion),\n execution: normalizeProjectionExecution(input.source.execution),\n batchOrdinal: input.source.batchOrdinal,\n sourceRowCount: input.source.sourceRowCount,\n sourceRowsSkipped: input.source.sourceRowsSkipped,\n inputExhausted: input.source.inputExhausted,\n })\n if (source.kind === \"projection\") {\n if (!Number.isSafeInteger(source.batchOrdinal) || source.batchOrdinal < 0) {\n throw new MaterializationValidationError(\n \"Telemetry projection batch ordinal must be a nonnegative safe integer.\"\n )\n }\n if (!Number.isSafeInteger(source.sourceRowCount) || source.sourceRowCount < 0) {\n throw new MaterializationValidationError(\n \"Telemetry projection sourceRowCount must be a nonnegative safe integer.\"\n )\n }\n if (!Number.isSafeInteger(source.sourceRowsSkipped) || source.sourceRowsSkipped < 0) {\n throw new MaterializationValidationError(\n \"Telemetry projection sourceRowsSkipped must be a nonnegative safe integer.\"\n )\n }\n if (source.sourceRowsSkipped > source.sourceRowCount) {\n throw new MaterializationValidationError(\n \"Telemetry projection sourceRowsSkipped cannot exceed sourceRowCount.\"\n )\n }\n if (typeof source.inputExhausted !== \"boolean\") {\n throw new MaterializationValidationError(\n \"Telemetry projection inputExhausted must be a boolean.\"\n )\n }\n }\n return Object.freeze({\n source,\n ...(input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {}),\n points: Object.freeze(points),\n })\n}\n",
18
- "import type { OntologyEditOperation } from \"../../materialization/model\"\n\nexport type EditExecutionUnit =\n | { readonly kind: \"single\"; readonly operation: OntologyEditOperation }\n | { readonly kind: \"atomic-group\"; readonly operations: readonly OntologyEditOperation[] }\n\n/** Compiles validated operation groups into the exact units the executor applies. */\nexport function compileEditExecutionUnits(input: {\n readonly operations: readonly OntologyEditOperation[]\n readonly operationGroups?: readonly (readonly string[])[]\n}): readonly EditExecutionUnit[] {\n const groupByFirstId = new Map(\n (input.operationGroups ?? []).map((ids) => [ids[0]!, new Set(ids)] as const)\n )\n const units: EditExecutionUnit[] = []\n\n for (let index = 0; index < input.operations.length; ) {\n const operation = input.operations[index]!\n const groupIds = groupByFirstId.get(operation.id)\n if (!groupIds) {\n units.push({ kind: \"single\", operation })\n index += 1\n continue\n }\n\n const operations = input.operations.slice(index, index + groupIds.size)\n units.push({ kind: \"atomic-group\", operations })\n index += operations.length\n }\n\n return units\n}\n",
19
- "import type { OntologyEditOperation } from \"../../materialization/model\"\nimport type {\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationStateRequestChunk,\n OntologyMaterializationStorage,\n StoredTelemetryPoint,\n} from \"../../storage/ontology\"\nimport type { MaterializerContext } from \"../context\"\n\ninterface MutableStatePage {\n objects: MaterializationObjectState[]\n links: MaterializationLinkState[]\n linkScopes: MaterializationLinkScopeState[]\n points: StoredTelemetryPoint[]\n}\n\nexport function stateRequestForOperation(\n operation: OntologyEditOperation\n): MaterializationStateRequestChunk {\n switch (operation.kind) {\n case \"object.create\":\n case \"object.upsert\":\n case \"object.patch\":\n case \"object.delete\":\n case \"object.restore\":\n return {\n objects: [operation.ref],\n links: [],\n linkScopes: [],\n // Incident authority is needed only when the ordered operation changes effective presence.\n incidentObjects: [],\n points: [],\n }\n case \"link.upsert\":\n case \"link.delete\":\n case \"link.reset\":\n return {\n objects: [operation.ref.source, operation.ref.target],\n links: [operation.ref],\n linkScopes: [{ source: operation.ref.source, linkId: operation.ref.linkId }],\n incidentObjects: [],\n points: [],\n }\n }\n}\n\nexport async function* oneStateRequest(\n request: MaterializationStateRequestChunk\n): AsyncIterable<MaterializationStateRequestChunk> {\n yield request\n}\n\nexport async function loadState(\n context: Pick<MaterializerContext, \"batching\">,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n request: MaterializationStateRequestChunk\n): Promise<MaterializationStatePage> {\n const result: MutableStatePage = { objects: [], links: [], linkScopes: [], points: [] }\n for await (const page of storage.streamState({\n session,\n requests: oneStateRequest(request),\n pageRows: context.batching.statePageRows,\n })) {\n result.objects.push(...page.objects)\n result.links.push(...page.links)\n result.linkScopes.push(...page.linkScopes)\n result.points.push(...page.points)\n }\n return result\n}\n",
20
- "import type {\n OntologyEditOperation,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../materialization/model\"\nimport {\n compareLinkRefs,\n compareObjectRefs,\n linkRefKey,\n linkScopeKey,\n objectRefKey,\n} from \"../../materialization/refs\"\nimport type { OntologyRegistry } from \"../../ontology\"\nimport type { MaterializationStateRequestChunk } from \"../../storage/ontology\"\n\n/** Builds the complete state read set required by an ordered edit commit. */\nexport function buildEditReadSet(\n ontology: OntologyRegistry,\n operations: readonly OntologyEditOperation[]\n): MaterializationStateRequestChunk {\n const objects = new Map<string, OntologyObjectRef>()\n const links = new Map<string, OntologyLinkRef>()\n const scopes = new Map<string, { readonly source: OntologyObjectRef; readonly linkId: string }>()\n const incidentObjects = new Map<string, OntologyObjectRef>()\n\n for (const operation of operations) {\n if (isObjectOperation(operation)) {\n if (!ontology.getObjectTypeById(operation.ref.objectTypeId)) continue\n objects.set(objectRefKey(operation.ref), operation.ref)\n if (operation.kind !== \"object.patch\") {\n incidentObjects.set(objectRefKey(operation.ref), operation.ref)\n }\n continue\n }\n\n if (!isKnownLinkRef(ontology, operation.ref)) continue\n links.set(linkRefKey(operation.ref), operation.ref)\n objects.set(objectRefKey(operation.ref.source), operation.ref.source)\n objects.set(objectRefKey(operation.ref.target), operation.ref.target)\n if (linkCardinality(ontology, operation.ref) === \"one\") {\n const scope = { source: operation.ref.source, linkId: operation.ref.linkId }\n scopes.set(linkScopeKey(scope.source, scope.linkId), scope)\n }\n }\n\n return {\n objects: [...objects.values()].sort(compareObjectRefs),\n links: [...links.values()].sort(compareLinkRefs),\n linkScopes: [...scopes.values()].sort((left, right) =>\n linkScopeKey(left.source, left.linkId).localeCompare(linkScopeKey(right.source, right.linkId))\n ),\n incidentObjects: [...incidentObjects.values()].sort(compareObjectRefs),\n points: [],\n }\n}\n\nexport function isKnownLinkRef(ontology: OntologyRegistry, ref: OntologyLinkRef): boolean {\n const sourceType = ontology.getObjectTypeById(ref.source.objectTypeId)\n if (!sourceType || !ontology.getObjectTypeById(ref.target.objectTypeId)) return false\n const link = sourceType.links.find((candidate) => candidate.id === ref.linkId)\n return Boolean(\n link && ontology.isValidLinkTarget(link.targetObjectTypeId, ref.target.objectTypeId)\n )\n}\n\nexport function linkCardinality(ontology: OntologyRegistry, ref: OntologyLinkRef): \"one\" | \"many\" {\n // Validation still belongs to the individual operation so `continue` mode can report an\n // invalid reference without aborting the whole preload. Unknown references need no scope read.\n const definition = ontology\n .getObjectTypeById(ref.source.objectTypeId)\n ?.links.find((candidate) => candidate.id === ref.linkId)\n return definition?.cardinality ?? \"many\"\n}\n\nfunction isObjectOperation(\n operation: OntologyEditOperation\n): operation is Extract<OntologyEditOperation, { readonly kind: `object.${string}` }> {\n return operation.kind.startsWith(\"object.\")\n}\n",
21
- "import type { JsonValue } from \"../../json\"\nimport type {\n LinkOverride,\n ObjectOverride,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../materialization/model\"\nimport type {\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n StoredTelemetryPoint,\n} from \"../../storage/ontology\"\n\nexport interface ResolvedObjectValue {\n readonly ref: OntologyObjectRef\n readonly properties: Readonly<Record<string, JsonValue>>\n}\n\nexport interface ResolvedLinkValue {\n readonly ref: OntologyLinkRef\n readonly properties?: Readonly<Record<string, JsonValue>>\n}\n\nexport function resolveEffectiveObject(input: {\n readonly ref: OntologyObjectRef\n readonly primaryPropertyId: string\n readonly source: StoredSourceObjectAssertion | null\n readonly override: ObjectOverride | null\n readonly latestTelemetry: readonly StoredTelemetryPoint[]\n}): ResolvedObjectValue | null {\n const properties = resolveObjectAuthority(input.source, input.override)\n if (!properties) return null\n\n properties[input.primaryPropertyId] = input.ref.primaryId\n applyLatestTelemetry(properties, input.latestTelemetry)\n return { ref: input.ref, properties }\n}\n\nfunction resolveObjectAuthority(\n source: StoredSourceObjectAssertion | null,\n override: ObjectOverride | null\n): Record<string, JsonValue> | null {\n switch (override?.kind) {\n case \"delete\":\n return null\n case \"create\":\n return { ...override.properties }\n case \"patch\":\n if (!source) return null\n return applyObjectPatch(source.assertion.properties, override)\n default:\n if (!source) return null\n return { ...source.assertion.properties }\n }\n}\n\nfunction applyObjectPatch(\n sourceProperties: Readonly<Record<string, JsonValue>>,\n override: Extract<ObjectOverride, { readonly kind: \"patch\" }>\n): Record<string, JsonValue> {\n const properties = { ...sourceProperties, ...override.set }\n for (const propertyId of override.unset) delete properties[propertyId]\n return properties\n}\n\nfunction applyLatestTelemetry(\n properties: Record<string, JsonValue>,\n latestTelemetry: readonly StoredTelemetryPoint[]\n): void {\n for (const point of latestTelemetry) properties[point.series.propertyId] = point.value\n}\n\nexport function resolveEffectiveLink(input: {\n readonly ref: OntologyLinkRef\n readonly source: StoredSourceLinkAssertion | null\n readonly override: LinkOverride | null\n readonly sourceEndpointExists: boolean\n readonly targetEndpointExists: boolean\n}): ResolvedLinkValue | null {\n if (!input.sourceEndpointExists || !input.targetEndpointExists) return null\n if (input.override?.kind === \"delete\") return null\n\n if (input.override?.kind === \"upsert\") {\n return resolvedLink(input.ref, input.override.properties)\n }\n if (!input.source) return null\n return resolvedLink(input.ref, input.source.assertion.properties)\n}\n\nfunction resolvedLink(\n ref: OntologyLinkRef,\n properties: Readonly<Record<string, JsonValue>> | undefined\n): ResolvedLinkValue {\n if (properties === undefined) return { ref }\n return { ref, properties }\n}\n",
22
- "import { MaterializationValidationError } from \"../../materialization/errors\"\nimport type {\n LinkOverride,\n ObjectOverride,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../materialization/model\"\nimport { linkRefKey, linkScopeKey, objectRefKey } from \"../../materialization/refs\"\nimport type { OntologyRegistry } from \"../../ontology\"\nimport type {\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n MaterializationStatePage,\n StoredLinkOverride,\n StoredObjectOverride,\n StoredTelemetryPoint,\n} from \"../../storage/ontology\"\nimport {\n type ResolvedLinkValue,\n type ResolvedObjectValue,\n resolveEffectiveLink,\n resolveEffectiveObject,\n} from \"../effective/resolve\"\nimport { isKnownLinkRef } from \"./read-set\"\nexport interface WorkingObject {\n ref: OntologyObjectRef\n source: MaterializationObjectState[\"source\"]\n originalOverride: StoredObjectOverride | null\n override: ObjectOverride | null\n before: MaterializationObjectState[\"effective\"]\n latestTelemetry: StoredTelemetryPoint[]\n}\n\nexport interface WorkingLink {\n ref: OntologyLinkRef\n source: MaterializationLinkState[\"source\"]\n originalOverride: StoredLinkOverride | null\n override: LinkOverride | null\n before: MaterializationLinkState[\"effective\"]\n}\n\nexport function mergeWorkingState(\n objects: Map<string, WorkingObject>,\n links: Map<string, WorkingLink>,\n scopes: Map<string, MaterializationLinkScopeState>,\n state: MaterializationStatePage\n): void {\n for (const object of state.objects) {\n if (!objects.has(objectRefKey(object.ref))) {\n objects.set(objectRefKey(object.ref), workingObjectFromState(object))\n }\n }\n for (const link of state.links) {\n if (!links.has(linkRefKey(link.ref))) {\n links.set(linkRefKey(link.ref), workingLinkFromState(link))\n }\n }\n for (const scope of state.linkScopes) {\n if (!scopes.has(linkScopeKey(scope.source, scope.linkId))) {\n scopes.set(linkScopeKey(scope.source, scope.linkId), scope)\n }\n }\n}\n\nexport function workingObjectFromState(object: MaterializationObjectState): WorkingObject {\n return {\n ref: object.ref,\n source: object.source,\n originalOverride: object.override,\n override: object.override?.value ?? null,\n before: object.effective,\n latestTelemetry: [...object.latestTelemetry],\n }\n}\n\nexport function workingLinkFromState(link: MaterializationLinkState): WorkingLink {\n return {\n ref: link.ref,\n source: link.source,\n originalOverride: link.override,\n override: link.override?.value ?? null,\n before: link.effective,\n }\n}\n\nexport function resolveObject(\n ontology: OntologyRegistry,\n working: WorkingObject\n): ResolvedObjectValue | null {\n return resolveEffectiveObject({\n ref: working.ref,\n primaryPropertyId: ontology.getPrimaryPropertyId(working.ref.objectTypeId),\n source: working.source,\n override: working.override,\n latestTelemetry: working.latestTelemetry,\n })\n}\n\nexport function resolveLink(\n ontology: OntologyRegistry,\n working: WorkingLink,\n objects: Map<string, WorkingObject>\n): ResolvedLinkValue | null {\n const source = objects.get(objectRefKey(working.ref.source))\n const target = objects.get(objectRefKey(working.ref.target))\n return resolveEffectiveLink({\n ref: working.ref,\n source: working.source,\n override: working.override,\n sourceEndpointExists: Boolean(source && resolveObject(ontology, source)),\n targetEndpointExists: Boolean(target && resolveObject(ontology, target)),\n })\n}\n\nexport function distinctCardinalityOneScopes(\n ontology: OntologyRegistry,\n links: readonly MaterializationLinkState[],\n existing: Map<string, MaterializationLinkScopeState>\n): { readonly source: OntologyObjectRef; readonly linkId: string }[] {\n const scopes = new Map<string, { readonly source: OntologyObjectRef; readonly linkId: string }>()\n for (const state of links) {\n const definition = ontology\n .resolveObjectType(state.ref.source.objectTypeId)\n .links.find((candidate) => candidate.id === state.ref.linkId)\n const key = linkScopeKey(state.ref.source, state.ref.linkId)\n if (definition?.cardinality === \"one\" && !existing.has(key)) {\n scopes.set(key, { source: state.ref.source, linkId: state.ref.linkId })\n }\n }\n return [...scopes.values()]\n}\n\nexport function validateWorkingCardinality(\n ontology: OntologyRegistry,\n objects: Map<string, WorkingObject>,\n links: Map<string, WorkingLink>,\n scopes: Map<string, MaterializationLinkScopeState>\n): void {\n const effectiveByScope = new Map<\n string,\n { count: number; source: OntologyObjectRef; linkId: string }\n >()\n for (const [scope, snapshot] of scopes) {\n effectiveByScope.set(scope, {\n count: snapshot.effectiveCount,\n source: snapshot.source,\n linkId: snapshot.linkId,\n })\n }\n for (const working of links.values()) {\n if (!isKnownLinkRef(ontology, working.ref)) continue\n const scope = linkScopeKey(working.ref.source, working.ref.linkId)\n const state = effectiveByScope.get(scope)\n if (!state) continue\n const before = working.before ? 1 : 0\n const after = resolveLink(ontology, working, objects) ? 1 : 0\n state.count += after - before\n }\n for (const { count, source, linkId } of effectiveByScope.values()) {\n if (count <= 1) continue\n const link = ontology\n .resolveObjectType(source.objectTypeId)\n .links.find((candidate) => candidate.id === linkId)\n if (link?.cardinality === \"one\") {\n throw new MaterializationValidationError(\n `Link scope '${source.objectTypeId}.${linkId}' has cardinality one.`\n )\n }\n }\n}\n",
23
- "import type { OntologyObjectRef } from \"../../materialization/model\"\nimport { linkRefKey, objectRefKey } from \"../../materialization/refs\"\nimport type {\n MaterializationLinkState,\n MaterializationSession,\n MaterializationStateRequestChunk,\n OntologyMaterializationStorage,\n} from \"../../storage/ontology\"\nimport type { MaterializerContext } from \"../context\"\nimport { loadState, oneStateRequest } from \"../effective/load-state\"\nimport type { EditWorkingState } from \"./operations\"\nimport { buildEditReadSet, isKnownLinkRef } from \"./read-set\"\nimport {\n distinctCardinalityOneScopes,\n mergeWorkingState,\n resolveLink,\n workingLinkFromState,\n} from \"./working-state\"\n\nexport async function loadEditWorkingState(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n operations: Parameters<typeof buildEditReadSet>[1]\n): Promise<EditWorkingState> {\n const state: EditWorkingState = {\n objects: new Map(),\n links: new Map(),\n scopeSnapshots: new Map(),\n }\n const readSet = buildEditReadSet(context.ontology, operations)\n const explicitLinkKeys = new Set(readSet.links.map(linkRefKey))\n const incidentLinks = new Map<string, MaterializationLinkState>()\n const ignoredLinks: EditWorkingState[\"links\"] = new Map()\n const revivingObjects = new Set(\n operations.filter(isRevivingObjectOperation).map((operation) => objectRefKey(operation.ref))\n )\n\n for await (const page of storage.streamState({\n session,\n requests: oneStateRequest(readSet),\n pageRows: context.batching.statePageRows,\n })) {\n mergeWorkingState(state.objects, ignoredLinks, state.scopeSnapshots, page)\n for (const link of page.links) {\n const key = linkRefKey(link.ref)\n if (explicitLinkKeys.has(key) && !state.links.has(key)) {\n state.links.set(key, workingLinkFromState(link))\n }\n if (readSet.incidentObjects.length > 0) incidentLinks.set(key, link)\n }\n }\n\n await mergeIncidentState(\n context,\n storage,\n session,\n state,\n [...incidentLinks.values()],\n revivingObjects\n )\n return state\n}\n\nfunction isRevivingObjectOperation(\n operation: Parameters<typeof buildEditReadSet>[1][number]\n): operation is Extract<\n Parameters<typeof buildEditReadSet>[1][number],\n { readonly kind: \"object.create\" | \"object.upsert\" | \"object.restore\" }\n> {\n return (\n operation.kind === \"object.create\" ||\n operation.kind === \"object.upsert\" ||\n operation.kind === \"object.restore\"\n )\n}\n\nasync function mergeIncidentState(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n state: EditWorkingState,\n incidentStates: readonly MaterializationLinkState[],\n revivingObjects: ReadonlySet<string>\n): Promise<void> {\n const knownIncidentStates = incidentStates.filter((link) =>\n isKnownLinkRef(context.ontology, link.ref)\n )\n const missingEndpoints = new Map<string, OntologyObjectRef>()\n for (const link of knownIncidentStates) {\n for (const ref of [link.ref.source, link.ref.target]) {\n if (!state.objects.has(objectRefKey(ref))) missingEndpoints.set(objectRefKey(ref), ref)\n }\n }\n\n if (missingEndpoints.size > 0) {\n await mergeLoadedState(context, storage, session, state, {\n objects: [...missingEndpoints.values()],\n links: [],\n linkScopes: [],\n incidentObjects: [],\n points: [],\n })\n }\n\n const relevantStates = knownIncidentStates.filter((link) => {\n if (link.effective) return true\n if (\n revivingObjects.has(objectRefKey(link.ref.source)) ||\n revivingObjects.has(objectRefKey(link.ref.target))\n ) {\n return true\n }\n return Boolean(resolveLink(context.ontology, workingLinkFromState(link), state.objects))\n })\n const missingScopes = distinctCardinalityOneScopes(\n context.ontology,\n relevantStates,\n state.scopeSnapshots\n )\n if (missingScopes.length > 0) {\n await mergeLoadedState(context, storage, session, state, {\n objects: [],\n links: [],\n linkScopes: missingScopes,\n incidentObjects: [],\n points: [],\n })\n }\n\n for (const link of relevantStates) {\n const key = linkRefKey(link.ref)\n if (state.links.has(key)) continue\n state.links.set(key, workingLinkFromState(link))\n }\n context.observeCoreBuffer?.(\"edits.incident-links\", state.links.size)\n}\n\nasync function mergeLoadedState(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n state: EditWorkingState,\n request: MaterializationStateRequestChunk\n): Promise<void> {\n const loaded = await loadState(context, storage, session, request)\n mergeWorkingState(state.objects, state.links, state.scopeSnapshots, loaded)\n}\n",
24
- "import { compareStrings, type JsonValue, stableJsonStringify } from \"../../json\"\nimport type {\n EffectiveLinkChange,\n EffectiveLinkSnapshot,\n EffectiveObjectChange,\n EffectiveObjectSnapshot,\n OntologyMaterializationPropertyChangeMap,\n} from \"../../materialization/model\"\nimport type { ResolvedLinkValue, ResolvedObjectValue } from \"./resolve\"\n\nexport function diffEffectiveObject(input: {\n readonly before: EffectiveObjectSnapshot | null\n readonly resolved: ResolvedObjectValue | null\n readonly commitId: string\n readonly committedAt: string\n}): EffectiveObjectChange | null {\n if (!input.before) {\n if (!input.resolved) return null\n return createObjectChange(input.resolved, input.commitId, input.committedAt)\n }\n if (!input.resolved) return deleteObjectChange(input.before)\n if (sameProperties(input.before.properties, input.resolved.properties)) return null\n return updateObjectChange(input.before, input.resolved, input.commitId, input.committedAt)\n}\n\nfunction createObjectChange(\n resolved: ResolvedObjectValue,\n commitId: string,\n committedAt: string\n): EffectiveObjectChange {\n const after: EffectiveObjectSnapshot = {\n ...resolved,\n version: 1,\n createdAt: committedAt,\n updatedAt: committedAt,\n lastCommitId: commitId,\n }\n return {\n kind: \"created\",\n ref: after.ref,\n before: null,\n after,\n propertyChanges: propertyChanges({}, after.properties),\n }\n}\n\nfunction deleteObjectChange(before: EffectiveObjectSnapshot): EffectiveObjectChange {\n return {\n kind: \"deleted\",\n ref: before.ref,\n before,\n after: null,\n propertyChanges: propertyChanges(before.properties, {}),\n }\n}\n\nfunction updateObjectChange(\n before: EffectiveObjectSnapshot,\n resolved: ResolvedObjectValue,\n commitId: string,\n committedAt: string\n): EffectiveObjectChange {\n const after: EffectiveObjectSnapshot = {\n ...resolved,\n version: before.version + 1,\n createdAt: before.createdAt,\n updatedAt: committedAt,\n lastCommitId: commitId,\n }\n return {\n kind: \"updated\",\n ref: after.ref,\n before,\n after,\n propertyChanges: propertyChanges(before.properties, after.properties),\n }\n}\n\nexport function diffEffectiveLink(input: {\n readonly before: EffectiveLinkSnapshot | null\n readonly resolved: ResolvedLinkValue | null\n readonly commitId: string\n readonly committedAt: string\n}): EffectiveLinkChange | null {\n if (!input.before) {\n if (!input.resolved) return null\n return createLinkChange(input.resolved, input.commitId, input.committedAt)\n }\n if (!input.resolved) return deleteLinkChange(input.before)\n if (sameProperties(input.before.properties ?? {}, input.resolved.properties ?? {})) return null\n return updateLinkChange(input.before, input.resolved, input.commitId, input.committedAt)\n}\n\nfunction createLinkChange(\n resolved: ResolvedLinkValue,\n commitId: string,\n committedAt: string\n): EffectiveLinkChange {\n const after: EffectiveLinkSnapshot = {\n ...resolved,\n createdAt: committedAt,\n updatedAt: committedAt,\n lastCommitId: commitId,\n }\n return {\n kind: \"created\",\n ref: after.ref,\n before: null,\n after,\n propertyChanges: propertyChanges({}, after.properties ?? {}),\n }\n}\n\nfunction deleteLinkChange(before: EffectiveLinkSnapshot): EffectiveLinkChange {\n return {\n kind: \"deleted\",\n ref: before.ref,\n before,\n after: null,\n propertyChanges: propertyChanges(before.properties ?? {}, {}),\n }\n}\n\nfunction updateLinkChange(\n before: EffectiveLinkSnapshot,\n resolved: ResolvedLinkValue,\n commitId: string,\n committedAt: string\n): EffectiveLinkChange {\n const after: EffectiveLinkSnapshot = {\n ...resolved,\n createdAt: before.createdAt,\n updatedAt: committedAt,\n lastCommitId: commitId,\n }\n return {\n kind: \"updated\",\n ref: after.ref,\n before,\n after,\n propertyChanges: propertyChanges(before.properties ?? {}, after.properties ?? {}),\n }\n}\n\nfunction sameProperties(\n left: Readonly<Record<string, JsonValue>>,\n right: Readonly<Record<string, JsonValue>>\n): boolean {\n return stableJsonStringify(left) === stableJsonStringify(right)\n}\n\nfunction propertyChanges(\n before: Readonly<Record<string, JsonValue>>,\n after: Readonly<Record<string, JsonValue>>\n): OntologyMaterializationPropertyChangeMap {\n const changes: Record<\n string,\n import(\"../../materialization/model\").OntologyMaterializationPropertyChange\n > = {}\n const ids = [...new Set([...Object.keys(before), ...Object.keys(after)])].sort(compareStrings)\n for (const id of ids) {\n if (!(id in before)) changes[id] = { operation: \"created\", after: after[id] }\n else if (!(id in after)) changes[id] = { operation: \"cleared\", before: before[id], after: null }\n else if (stableJsonStringify(before[id]) !== stableJsonStringify(after[id])) {\n changes[id] = { operation: \"updated\", before: before[id], after: after[id] }\n }\n }\n return changes\n}\n",
25
- "import type { JsonValue } from \"../../json\"\nimport { MaterializationValidationError } from \"../../materialization/errors\"\nimport type {\n OntologyLinkRef,\n OntologyObjectRef,\n TelemetryPointWrite,\n} from \"../../materialization/model\"\nimport type { OntologyRegistry } from \"../../ontology\"\nimport {\n assertKnownProperties,\n normalizeLinkProperties,\n normalizeObjectProperties,\n normalizeSchemaValue,\n validateLinkProperties,\n validateObjectProperties,\n validatePropertyValue,\n validateTelemetryUnit,\n} from \"../../ontology/validation\"\n\nexport function validateObjectRef(ontology: OntologyRegistry, ref: OntologyObjectRef): void {\n materializationValidation(() => {\n ontology.resolveObjectType(ref.objectTypeId)\n })\n}\n\nexport function validateLinkRef(ontology: OntologyRegistry, ref: OntologyLinkRef): void {\n materializationValidation(() => {\n const sourceType = ontology.resolveObjectType(ref.source.objectTypeId)\n ontology.resolveObjectType(ref.target.objectTypeId)\n const link = sourceType.links.find((candidate) => candidate.id === ref.linkId)\n if (!link) throw new Error(`[Sixb] Unknown link '${ref.source.objectTypeId}.${ref.linkId}'.`)\n if (!ontology.isValidLinkTarget(link.targetObjectTypeId, ref.target.objectTypeId)) {\n throw new Error(\n `[Sixb] Link '${ref.source.objectTypeId}.${ref.linkId}' cannot target '${ref.target.objectTypeId}'.`\n )\n }\n })\n}\n\nexport function validateObjectAuthorityProperties(\n ontology: OntologyRegistry,\n ref: OntologyObjectRef,\n properties: Readonly<Record<string, JsonValue>>\n): Readonly<Record<string, JsonValue>> {\n return materializationValidation(() => {\n const objectType = ontology.resolveObjectType(ref.objectTypeId)\n assertKnownProperties(objectType, properties)\n const primaryId = ontology.getPrimaryPropertyId(ref.objectTypeId)\n const result = { ...properties }\n if (primaryId in result) {\n if (result[primaryId] !== ref.primaryId) {\n throw new Error(\n `[Sixb] Primary property '${primaryId}' must match object identity '${ref.primaryId}'.`\n )\n }\n delete result[primaryId]\n }\n for (const propertyId of Object.keys(result)) {\n const property = objectType.properties.find((candidate) => candidate.id === propertyId)!\n if (property.mode === \"telemetry\") {\n throw new Error(\n `[Sixb] Static authority cannot write telemetry property '${ref.objectTypeId}.${propertyId}'.`\n )\n }\n }\n const valueTypesById = ontology.getValueTypesById()\n validateObjectProperties(objectType, result, valueTypesById)\n return normalizeObjectProperties(objectType.properties, result, valueTypesById, objectType.id)\n })\n}\n\nexport function validateObjectPatchPropertyIds(\n ontology: OntologyRegistry,\n ref: OntologyObjectRef,\n propertyIds: readonly string[],\n label: \"unset\" | \"reset\"\n): void {\n materializationValidation(() => {\n const objectType = ontology.resolveObjectType(ref.objectTypeId)\n const primaryId = ontology.getPrimaryPropertyId(ref.objectTypeId)\n for (const propertyId of propertyIds) {\n const property = objectType.properties.find((candidate) => candidate.id === propertyId)\n if (!property) {\n throw new Error(\n `[Sixb] Object patch ${label} references unknown property '${ref.objectTypeId}.${propertyId}'.`\n )\n }\n if (propertyId === primaryId) {\n throw new Error(\n `[Sixb] Object patch ${label} cannot target primary property '${ref.objectTypeId}.${propertyId}'.`\n )\n }\n if (property.mode === \"telemetry\") {\n throw new Error(\n `[Sixb] Object patch ${label} cannot target telemetry property '${ref.objectTypeId}.${propertyId}'.`\n )\n }\n }\n })\n}\n\nexport function validateEffectiveObject(\n ontology: OntologyRegistry,\n ref: OntologyObjectRef,\n properties: Readonly<Record<string, JsonValue>>\n): void {\n materializationValidation(() => {\n const objectType = ontology.resolveObjectType(ref.objectTypeId)\n assertKnownProperties(objectType, properties)\n for (const property of objectType.properties) {\n if (\n property.mode !== \"telemetry\" &&\n property.required &&\n properties[property.id] === undefined\n ) {\n throw new Error(\n `[Sixb] Missing required property '${property.id}' for object type '${objectType.id}'`\n )\n }\n }\n validateObjectProperties(objectType, properties, ontology.getValueTypesById())\n })\n}\n\nexport function validateLinkAuthorityProperties(\n ontology: OntologyRegistry,\n ref: OntologyLinkRef,\n properties: Readonly<Record<string, JsonValue>> | undefined\n): Readonly<Record<string, JsonValue>> | undefined {\n return materializationValidation(() => {\n const objectType = ontology.resolveObjectType(ref.source.objectTypeId)\n const link = objectType.links.find((candidate) => candidate.id === ref.linkId)\n if (!link) throw new Error(`[Sixb] Unknown link '${ref.source.objectTypeId}.${ref.linkId}'.`)\n if (!ontology.isValidLinkTarget(link.targetObjectTypeId, ref.target.objectTypeId)) {\n throw new Error(\n `[Sixb] Link '${ref.source.objectTypeId}.${ref.linkId}' cannot target '${ref.target.objectTypeId}'.`\n )\n }\n const valueTypesById = ontology.getValueTypesById()\n validateLinkProperties(objectType, link, properties, undefined, valueTypesById)\n return normalizeLinkProperties(objectType, link, properties, valueTypesById)\n })\n}\n\nexport function validateTelemetryPoint(\n ontology: OntologyRegistry,\n point: TelemetryPointWrite\n): TelemetryPointWrite {\n return materializationValidation(() => {\n const objectType = ontology.resolveObjectType(point.series.object.objectTypeId)\n const property = objectType.properties.find(\n (candidate) => candidate.id === point.series.propertyId\n )\n if (!property || property.mode !== \"telemetry\") {\n throw new Error(\n `[Sixb] Property '${point.series.object.objectTypeId}.${point.series.propertyId}' is not telemetry-enabled.`\n )\n }\n const path = `${objectType.id}.${property.id}`\n const valueTypesById = ontology.getValueTypesById()\n validatePropertyValue(property, point.value, path, valueTypesById)\n validateTelemetryUnit(property, path, point.unit, valueTypesById)\n return {\n ...point,\n value:\n point.value === null\n ? null\n : normalizeSchemaValue(property.schema, point.value, path, valueTypesById),\n }\n })\n}\n\nfunction materializationValidation<T>(run: () => T): T {\n try {\n return run()\n } catch (error) {\n if (error instanceof MaterializationValidationError) throw error\n throw new MaterializationValidationError(error instanceof Error ? error.message : String(error))\n }\n}\n",
26
- "import type { JsonValue } from \"../../json\"\nimport { stableJsonStringify } from \"../../json\"\nimport { MaterializationValidationError } from \"../../materialization/errors\"\nimport type {\n LinkOverride,\n ObjectOverride,\n OntologyEditOperation,\n} from \"../../materialization/model\"\n\ntype ObjectEditOperation = Extract<\n OntologyEditOperation,\n { readonly ref: { readonly objectTypeId: string } }\n>\ntype LinkEditOperation = Extract<\n OntologyEditOperation,\n { readonly ref: { readonly linkId: string } }\n>\ntype ObjectWriteOperation = Extract<\n ObjectEditOperation,\n { readonly kind: \"object.create\" | \"object.upsert\" }\n>\ntype ObjectPatchOverride = Extract<ObjectOverride, { readonly kind: \"patch\" }>\n\ninterface ObjectEditInput {\n readonly operation: ObjectEditOperation\n readonly sourceProperties: Readonly<Record<string, JsonValue>> | null\n readonly authority: ObjectOverride | null\n readonly effectiveExists: boolean\n readonly normalizedProperties?: Readonly<Record<string, JsonValue>>\n readonly normalizedSet?: Readonly<Record<string, JsonValue>>\n}\n\ninterface LinkEditInput {\n readonly operation: LinkEditOperation\n readonly hasSource: boolean\n readonly authority: LinkOverride | null\n readonly effectiveExists: boolean\n readonly normalizedProperties?: Readonly<Record<string, JsonValue>>\n}\n\nexport interface AuthorityTransition<T> {\n readonly next: T | null\n readonly changed: boolean\n}\n\nexport function applyObjectEdit(input: ObjectEditInput): AuthorityTransition<ObjectOverride> {\n const current = input.authority\n let next: ObjectOverride | null\n\n switch (input.operation.kind) {\n case \"object.create\":\n next = applyObjectCreate(input, input.operation)\n break\n case \"object.upsert\":\n next = applyObjectUpsert(input, input.operation)\n break\n case \"object.patch\":\n next = applyObjectPatch(input, input.operation)\n break\n case \"object.delete\":\n next = applyObjectDelete(input)\n break\n case \"object.restore\":\n next = applyObjectRestore(input)\n break\n default:\n throw new MaterializationValidationError(\"Expected an object edit operation.\")\n }\n\n return transition(current, next)\n}\n\nfunction applyObjectCreate(\n input: ObjectEditInput,\n operation: ObjectWriteOperation\n): ObjectOverride {\n if (input.sourceProperties || input.authority) {\n throw new MaterializationValidationError(\n `Object create requires complete authority absence for ${operation.ref.objectTypeId}:${operation.ref.primaryId}.`\n )\n }\n return { kind: \"create\", properties: input.normalizedProperties ?? operation.properties }\n}\n\nfunction applyObjectUpsert(\n input: ObjectEditInput,\n operation: ObjectWriteOperation\n): ObjectOverride {\n const properties = input.normalizedProperties ?? operation.properties\n const current = input.authority\n\n if (current?.kind === \"create\") {\n return { kind: \"create\", properties: { ...current.properties, ...properties } }\n }\n if (current?.kind === \"patch\") {\n return mergeUpsertIntoPatch(current, properties, input.sourceProperties !== null)\n }\n if (input.sourceProperties) return { kind: \"patch\", set: properties, unset: [] }\n return { kind: \"create\", properties }\n}\n\nfunction mergeUpsertIntoPatch(\n current: ObjectPatchOverride,\n properties: Readonly<Record<string, JsonValue>>,\n hasSource: boolean\n): ObjectOverride {\n if (hasSource) {\n const unset = current.unset.filter((propertyId) => !(propertyId in properties))\n return { kind: \"patch\", set: { ...current.set, ...properties }, unset }\n }\n\n const created = { ...current.set }\n for (const propertyId of current.unset) delete created[propertyId]\n return { kind: \"create\", properties: { ...created, ...properties } }\n}\n\nfunction applyObjectPatch(\n input: ObjectEditInput,\n operation: Extract<ObjectEditOperation, { readonly kind: \"object.patch\" }>\n): ObjectOverride | null {\n const current = input.authority\n if (!input.effectiveExists && current?.kind !== \"patch\") {\n throw new MaterializationValidationError(\n `Object patch requires an effective object for ${operation.ref.objectTypeId}:${operation.ref.primaryId}.`\n )\n }\n\n const setInput = input.normalizedSet ?? operation.set\n if (current?.kind === \"create\" && !input.sourceProperties) {\n return patchCreatedObject(current, operation, setInput)\n }\n\n return patchOverride(toPatchOverride(current), operation, setInput)\n}\n\nfunction patchCreatedObject(\n current: Extract<ObjectOverride, { readonly kind: \"create\" }>,\n operation: Extract<ObjectEditOperation, { readonly kind: \"object.patch\" }>,\n setInput: Readonly<Record<string, JsonValue>>\n): ObjectOverride {\n const properties = { ...current.properties, ...setInput }\n for (const propertyId of [...operation.unset, ...operation.reset]) {\n delete properties[propertyId]\n }\n return { kind: \"create\", properties }\n}\n\nfunction toPatchOverride(current: ObjectOverride | null): ObjectPatchOverride {\n if (current?.kind === \"patch\") return current\n if (current?.kind === \"create\") {\n return { kind: \"patch\", set: { ...current.properties }, unset: [] }\n }\n return { kind: \"patch\", set: {}, unset: [] }\n}\n\nfunction patchOverride(\n base: ObjectPatchOverride,\n operation: Extract<ObjectEditOperation, { readonly kind: \"object.patch\" }>,\n setInput: Readonly<Record<string, JsonValue>>\n): ObjectOverride | null {\n const set = { ...base.set }\n const unset = new Set(base.unset)\n\n for (const propertyId of operation.reset) {\n delete set[propertyId]\n unset.delete(propertyId)\n }\n for (const propertyId of operation.unset) {\n delete set[propertyId]\n unset.add(propertyId)\n }\n for (const [propertyId, value] of Object.entries(setInput)) {\n set[propertyId] = value\n unset.delete(propertyId)\n }\n\n if (Object.keys(set).length === 0 && unset.size === 0) return null\n return { kind: \"patch\", set, unset: [...unset].sort() }\n}\n\nfunction applyObjectDelete(input: ObjectEditInput): ObjectOverride | null {\n if (!input.effectiveExists) return input.authority\n if (input.authority?.kind === \"create\" && !input.sourceProperties) return null\n return { kind: \"delete\" }\n}\n\nfunction applyObjectRestore(input: ObjectEditInput): ObjectOverride | null {\n if (input.authority?.kind !== \"delete\") return input.authority\n return null\n}\n\nexport function applyLinkEdit(input: LinkEditInput): AuthorityTransition<LinkOverride> {\n const current = input.authority\n let next: LinkOverride | null\n\n switch (input.operation.kind) {\n case \"link.upsert\":\n next = linkUpsertOverride(input)\n break\n case \"link.delete\":\n next = linkDeleteOverride(input)\n break\n case \"link.reset\":\n next = null\n break\n default:\n throw new MaterializationValidationError(\"Expected a link edit operation.\")\n }\n\n return transition(current, next)\n}\n\nfunction linkUpsertOverride(input: LinkEditInput): LinkOverride {\n if (input.normalizedProperties !== undefined) {\n return { kind: \"upsert\", properties: input.normalizedProperties }\n }\n if (input.operation.kind === \"link.upsert\" && input.operation.properties !== undefined) {\n return { kind: \"upsert\", properties: input.operation.properties }\n }\n return { kind: \"upsert\" }\n}\n\nfunction linkDeleteOverride(input: LinkEditInput): LinkOverride | null {\n if (!input.effectiveExists) return input.authority\n if (input.authority?.kind === \"upsert\" && !input.hasSource) return null\n return { kind: \"delete\" }\n}\n\nfunction transition<T extends ObjectOverride | LinkOverride>(\n current: T | null,\n next: T | null\n): AuthorityTransition<T> {\n return { next, changed: !sameAuthority(current, next) }\n}\n\nfunction sameAuthority(\n left: ObjectOverride | LinkOverride | null,\n right: ObjectOverride | LinkOverride | null\n): boolean {\n return stableJsonStringify(left) === stableJsonStringify(right)\n}\n",
27
- "import { MaterializationValidationError } from \"../../materialization/errors\"\nimport type { OntologyEditOperation, OntologyOperationOutcome } from \"../../materialization/model\"\nimport { linkRefKey, objectRefKey } from \"../../materialization/refs\"\nimport type { MaterializationLinkScopeState } from \"../../storage/ontology\"\nimport type { MaterializerContext } from \"../context\"\nimport { diffEffectiveObject } from \"../effective/diff\"\nimport {\n validateEffectiveObject,\n validateLinkAuthorityProperties,\n validateLinkRef,\n validateObjectAuthorityProperties,\n validateObjectPatchPropertyIds,\n validateObjectRef,\n} from \"../effective/validate\"\nimport type { TimedCommitIdentity } from \"../shared/identity\"\nimport { applyLinkEdit, applyObjectEdit } from \"./apply\"\nimport { linkCardinality } from \"./read-set\"\nimport {\n resolveLink,\n resolveObject,\n validateWorkingCardinality,\n type WorkingLink,\n type WorkingObject,\n} from \"./working-state\"\n\ntype ObjectOperation = Extract<OntologyEditOperation, { readonly kind: `object.${string}` }>\ntype LinkOperation = Extract<OntologyEditOperation, { readonly kind: `link.${string}` }>\n\n/**\n * Transaction-local edit working set.\n *\n * Loaded snapshots remain pinned to the commit start while each successful operation updates the\n * mutable override. Operation N+1 can therefore observe operation N before anything is durable.\n */\nexport interface EditWorkingState {\n readonly objects: Map<string, WorkingObject>\n readonly links: Map<string, WorkingLink>\n readonly scopeSnapshots: Map<string, MaterializationLinkScopeState>\n}\n\n/**\n * Undo record for one override the current operation group replaced.\n *\n * Only the mutable override moves; loaded snapshots stay pinned for the whole commit, so restoring\n * the overrides in reverse returns the working set to its pre-group state. Incident links loaded\n * along the way are a read cache and are deliberately left in place.\n */\ninterface EditUndoEntry {\n readonly restore: () => void\n}\n\n/** Collects undo records while a grouped item applies. */\nexport type EditUndoJournal = EditUndoEntry[]\n\nexport function undoEditJournal(journal: EditUndoJournal): void {\n for (let index = journal.length - 1; index >= 0; index -= 1) {\n journal[index]?.restore()\n }\n}\n\nexport function applyEditOperation(\n context: MaterializerContext,\n state: EditWorkingState,\n operation: OntologyEditOperation,\n identity: TimedCommitIdentity,\n journal?: EditUndoJournal\n): OntologyOperationOutcome {\n validateOperationRef(context, operation)\n if (isObjectOperation(operation)) {\n return applyObjectOperation(context, state, operation, identity, journal)\n }\n return applyLinkOperation(\n context,\n state,\n operation,\n linkCardinality(context.ontology, operation.ref),\n journal\n )\n}\n\nfunction validateOperationRef(\n context: Pick<MaterializerContext, \"ontology\">,\n operation: OntologyEditOperation\n): void {\n if (isObjectOperation(operation)) {\n validateObjectRef(context.ontology, operation.ref)\n return\n }\n validateLinkRef(context.ontology, operation.ref)\n}\n\nfunction applyObjectOperation(\n context: MaterializerContext,\n state: EditWorkingState,\n operation: ObjectOperation,\n identity: TimedCommitIdentity,\n journal?: EditUndoJournal\n): OntologyOperationOutcome {\n const working = requireWorkingObject(state, operation)\n const normalized = validateObjectOperation(context, operation)\n const currentEffective = resolveObject(context.ontology, working)\n const transition = applyObjectEdit({\n operation,\n sourceProperties: working.source?.assertion.properties ?? null,\n authority: working.override,\n effectiveExists: currentEffective !== null,\n ...normalized,\n })\n\n applyObjectTransition(context, state, working, transition.next, journal)\n\n return objectOperationOutcome(operation, working, transition.changed, context, identity)\n}\n\nfunction requireWorkingObject(state: EditWorkingState, operation: ObjectOperation): WorkingObject {\n const working = state.objects.get(objectRefKey(operation.ref))\n if (!working) throw new MaterializationValidationError(\"Object state was not loaded.\")\n return working\n}\n\nfunction validateObjectOperation(\n context: Pick<MaterializerContext, \"ontology\">,\n operation: ObjectOperation\n): {\n readonly normalizedProperties?: ReturnType<typeof validateObjectAuthorityProperties>\n readonly normalizedSet?: ReturnType<typeof validateObjectAuthorityProperties>\n} {\n switch (operation.kind) {\n case \"object.create\":\n case \"object.upsert\":\n return {\n normalizedProperties: validateObjectAuthorityProperties(\n context.ontology,\n operation.ref,\n operation.properties\n ),\n }\n case \"object.patch\":\n validateObjectPatchPropertyIds(context.ontology, operation.ref, operation.unset, \"unset\")\n validateObjectPatchPropertyIds(context.ontology, operation.ref, operation.reset, \"reset\")\n return {\n normalizedSet: validateObjectAuthorityProperties(\n context.ontology,\n operation.ref,\n operation.set\n ),\n }\n case \"object.delete\":\n case \"object.restore\":\n return {}\n }\n}\n\nfunction applyObjectTransition(\n context: MaterializerContext,\n state: EditWorkingState,\n working: WorkingObject,\n next: WorkingObject[\"override\"],\n journal?: EditUndoJournal\n): void {\n const previous = working.override\n working.override = next\n try {\n const resolved = resolveObject(context.ontology, working)\n if (resolved) validateEffectiveObject(context.ontology, resolved.ref, resolved.properties)\n validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots)\n } catch (error) {\n working.override = previous\n throw error\n }\n journal?.push({\n restore: () => {\n working.override = previous\n },\n })\n}\n\nfunction objectOperationOutcome(\n operation: ObjectOperation,\n working: WorkingObject,\n changed: boolean,\n context: Pick<MaterializerContext, \"ontology\">,\n identity: TimedCommitIdentity\n): OntologyOperationOutcome {\n const outcome: OntologyOperationOutcome = {\n id: operation.id,\n ok: true,\n authority: authorityOutcome(changed),\n }\n const resolved = resolveObject(context.ontology, working)\n if (!resolved) return outcome\n const change = diffEffectiveObject({\n before: working.before,\n resolved,\n commitId: identity.commitId,\n committedAt: identity.committedAt,\n })\n const object = change?.after ?? working.before\n if (!object) {\n throw new MaterializationValidationError(\"Effective object outcome could not be resolved.\")\n }\n return { ...outcome, object }\n}\n\nfunction applyLinkOperation(\n context: MaterializerContext,\n state: EditWorkingState,\n operation: LinkOperation,\n cardinality: \"one\" | \"many\" | undefined,\n journal?: EditUndoJournal\n): OntologyOperationOutcome {\n const working = requireWorkingLink(state, operation)\n validateLinkEndpoints(context, state, operation)\n const normalizedProperties = validateLinkOperation(context, operation)\n const currentEffective = resolveLink(context.ontology, working, state.objects)\n const transitionInput = {\n operation,\n hasSource: working.source !== null,\n authority: working.override,\n effectiveExists: currentEffective !== null,\n }\n const transition = applyLinkEdit({ ...transitionInput, normalizedProperties })\n applyLinkTransition(context, state, working, transition.next, cardinality, journal)\n return { id: operation.id, ok: true, authority: authorityOutcome(transition.changed) }\n}\n\nfunction requireWorkingLink(state: EditWorkingState, operation: LinkOperation): WorkingLink {\n const working = state.links.get(linkRefKey(operation.ref))\n if (!working) throw new MaterializationValidationError(\"Link state was not loaded.\")\n return working\n}\n\nfunction validateLinkEndpoints(\n context: Pick<MaterializerContext, \"ontology\">,\n state: EditWorkingState,\n operation: LinkOperation\n): void {\n if (operation.kind !== \"link.upsert\") return\n const source = state.objects.get(objectRefKey(operation.ref.source))\n const target = state.objects.get(objectRefKey(operation.ref.target))\n const sourceExists = source && resolveObject(context.ontology, source)\n const targetExists = target && resolveObject(context.ontology, target)\n if (sourceExists && targetExists) return\n throw new MaterializationValidationError(\"Link upsert requires both endpoints to be effective.\")\n}\n\nfunction validateLinkOperation(\n context: Pick<MaterializerContext, \"ontology\">,\n operation: LinkOperation\n): ReturnType<typeof validateLinkAuthorityProperties> | undefined {\n if (operation.kind !== \"link.upsert\") return undefined\n return validateLinkAuthorityProperties(context.ontology, operation.ref, operation.properties)\n}\n\nfunction applyLinkTransition(\n context: Pick<MaterializerContext, \"ontology\">,\n state: EditWorkingState,\n working: WorkingLink,\n next: WorkingLink[\"override\"],\n cardinality: \"one\" | \"many\" | undefined,\n journal?: EditUndoJournal\n): void {\n const previous = working.override\n working.override = next\n try {\n if (cardinality === \"one\") {\n validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots)\n }\n } catch (error) {\n working.override = previous\n throw error\n }\n journal?.push({\n restore: () => {\n working.override = previous\n },\n })\n}\n\nfunction authorityOutcome(changed: boolean): \"changed\" | \"unchanged\" {\n if (changed) return \"changed\"\n return \"unchanged\"\n}\n\nfunction isObjectOperation(operation: OntologyEditOperation): operation is ObjectOperation {\n switch (operation.kind) {\n case \"object.create\":\n case \"object.upsert\":\n case \"object.patch\":\n case \"object.delete\":\n case \"object.restore\":\n return true\n case \"link.upsert\":\n case \"link.delete\":\n case \"link.reset\":\n return false\n }\n}\n",
28
- "import type { EventActor } from \"../../events/envelope\"\nimport type {\n EffectiveLinkChange,\n EffectiveObjectChange,\n OntologyMaterializationOrigin,\n} from \"../../materialization/model\"\nimport {\n compareLinkRefs,\n compareObjectRefs,\n linkRefKey,\n linkRefSortKey,\n objectRefKey,\n objectRefSortKey,\n} from \"../../materialization/refs\"\nimport type {\n MaterializationPlanWorkItem,\n MaterializationSession,\n MaterializationWorkRecord,\n OntologyMaterializationStorage,\n} from \"../../storage/ontology\"\nimport type { MaterializerContext } from \"../context\"\nimport {\n buildLinkMaterializationEventDraft,\n buildObjectMaterializationEventDraft,\n} from \"../effective/build-events\"\nimport { diffEffectiveLink, diffEffectiveObject } from \"../effective/diff\"\nimport { validateEffectiveObject } from \"../effective/validate\"\nimport { stageWorkBounded } from \"../execution/work-executor\"\nimport {\n appendLinkEffectivePlan,\n appendLinkOverridePlan,\n appendObjectEffectivePlan,\n appendObjectOverridePlan,\n classificationWork,\n eventWork,\n planWork,\n} from \"../execution/work-records\"\nimport type { TimedCommitIdentity } from \"../shared/identity\"\nimport type { EditWorkingState } from \"./operations\"\nimport {\n resolveLink,\n resolveObject,\n validateWorkingCardinality,\n type WorkingLink,\n type WorkingObject,\n} from \"./working-state\"\n\nexport interface EditPlanChanges {\n readonly objects: readonly EffectiveObjectChange[]\n readonly links: readonly EffectiveLinkChange[]\n}\n\ninterface EditPlanContext {\n readonly identity: TimedCommitIdentity\n readonly origin: OntologyMaterializationOrigin\n readonly actor?: EventActor\n}\n\nexport async function stageEditPlan(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n state: EditWorkingState,\n planContext: EditPlanContext\n): Promise<EditPlanChanges> {\n validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots)\n\n const objectChanges: EffectiveObjectChange[] = []\n for (const working of sortedObjects(state.objects)) {\n const change = await stageObjectPlan(context, storage, session, working, planContext)\n if (change) objectChanges.push(change)\n }\n\n const linkChanges: EffectiveLinkChange[] = []\n for (const working of sortedLinks(state.links)) {\n const change = await stageLinkPlan(\n context,\n storage,\n session,\n state.objects,\n working,\n planContext\n )\n if (change) linkChanges.push(change)\n }\n\n return { objects: objectChanges, links: linkChanges }\n}\n\nasync function stageObjectPlan(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n working: WorkingObject,\n planContext: EditPlanContext\n): Promise<EffectiveObjectChange | null> {\n const items: MaterializationPlanWorkItem[] = []\n appendObjectOverridePlan(items, working, planContext.identity)\n\n const resolved = resolveObject(context.ontology, working)\n if (resolved) validateEffectiveObject(context.ontology, resolved.ref, resolved.properties)\n const change = diffEffectiveObject({\n before: working.before,\n resolved,\n commitId: planContext.identity.commitId,\n committedAt: planContext.identity.committedAt,\n })\n if (change) appendObjectEffectivePlan(items, change)\n\n const sortKey = objectRefSortKey(working.ref)\n const work: MaterializationWorkRecord[] = [\n classificationWork(\"object\", objectRefKey(working.ref), sortKey),\n ...items.map((item) => planWork(item, sortKey)),\n ]\n if (change) {\n work.push(eventWork(buildObjectEvent(context, planContext, change)))\n }\n await stageWorkBounded(context, storage, session, work)\n return change\n}\n\nasync function stageLinkPlan(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n objects: EditWorkingState[\"objects\"],\n working: WorkingLink,\n planContext: EditPlanContext\n): Promise<EffectiveLinkChange | null> {\n const items: MaterializationPlanWorkItem[] = []\n appendLinkOverridePlan(items, working, planContext.identity)\n\n const resolved = resolveLink(context.ontology, working, objects)\n const change = diffEffectiveLink({\n before: working.before,\n resolved,\n commitId: planContext.identity.commitId,\n committedAt: planContext.identity.committedAt,\n })\n if (change) appendLinkEffectivePlan(items, change)\n\n const sortKey = linkRefSortKey(working.ref)\n const work: MaterializationWorkRecord[] = [\n classificationWork(\"link\", linkRefKey(working.ref), sortKey),\n ...items.map((item) => planWork(item, sortKey)),\n ]\n if (change) {\n work.push(eventWork(buildLinkEvent(context, planContext, change)))\n }\n await stageWorkBounded(context, storage, session, work)\n return change\n}\n\nfunction buildObjectEvent(\n context: Pick<MaterializerContext, \"projectId\">,\n planContext: EditPlanContext,\n change: EffectiveObjectChange\n) {\n const eventContext = materializationEventContext(context, planContext)\n return buildObjectMaterializationEventDraft({ ...eventContext, change })\n}\n\nfunction buildLinkEvent(\n context: Pick<MaterializerContext, \"projectId\">,\n planContext: EditPlanContext,\n change: EffectiveLinkChange\n) {\n const eventContext = materializationEventContext(context, planContext)\n return buildLinkMaterializationEventDraft({ ...eventContext, change })\n}\n\nfunction materializationEventContext(\n context: Pick<MaterializerContext, \"projectId\">,\n planContext: EditPlanContext\n) {\n const base = {\n projectId: context.projectId,\n commitId: planContext.identity.commitId,\n committedAt: planContext.identity.committedAt,\n origin: planContext.origin,\n }\n if (planContext.actor === undefined) return base\n return { ...base, actor: planContext.actor }\n}\n\nfunction sortedObjects(objects: EditWorkingState[\"objects\"]): WorkingObject[] {\n return [...objects.values()].sort((left, right) => compareObjectRefs(left.ref, right.ref))\n}\n\nfunction sortedLinks(links: EditWorkingState[\"links\"]): WorkingLink[] {\n return [...links.values()].sort((left, right) => compareLinkRefs(left.ref, right.ref))\n}\n",
29
- "import { MaterializationValidationError } from \"../../materialization/errors\"\nimport type {\n EditCommitResult,\n OntologyEditCommit,\n OntologyEditOperation,\n OntologyMaterializationOrigin,\n OntologyOperationOutcome,\n} from \"../../materialization/model\"\nimport type { Storage } from \"../../storage\"\nimport type { MaterializationSession, OntologyCommitWrite } from \"../../storage/ontology\"\nimport type { MaterializerContext, MaterializerStorage } from \"../context\"\nimport { replayCommit, withSerializationRetry } from \"../execution/commit-lifecycle\"\nimport { drainStagedEvents, drainStagedWork } from \"../execution/work-executor\"\nimport {\n createActionIdempotencyKey,\n createRuntimeIdempotencyKey,\n createTimedCommitIdentity,\n type TimedCommitIdentity,\n} from \"../shared/identity\"\nimport { normalizeOntologyEditCommit } from \"../shared/normalize\"\nimport { compileEditExecutionUnits, type EditExecutionUnit } from \"./execution-units\"\nimport { loadEditWorkingState } from \"./load-state\"\nimport {\n applyEditOperation,\n type EditUndoJournal,\n type EditWorkingState,\n undoEditJournal,\n} from \"./operations\"\nimport { stageEditPlan } from \"./plan\"\n\ntype NormalizedEditCommit = ReturnType<typeof normalizeOntologyEditCommit>\n\ninterface PreparedEditCommit {\n readonly input: NormalizedEditCommit\n readonly identity: TimedCommitIdentity\n readonly origin: OntologyMaterializationOrigin\n}\n\nexport async function commitEdits(\n context: MaterializerContext,\n raw: OntologyEditCommit\n): Promise<EditCommitResult> {\n const command = prepareEditCommit(context, raw)\n const replay = await replayEditCommit(context, command)\n if (replay) return replay\n\n return executeEditCommit(context, command)\n}\n\nfunction prepareEditCommit(\n context: Pick<MaterializerContext, \"projectId\" | \"clock\">,\n raw: OntologyEditCommit\n): PreparedEditCommit {\n const input = normalizeOntologyEditCommit(raw)\n const idempotencyKey = editIdempotencyKey(input)\n const identity = createTimedCommitIdentity({\n projectId: context.projectId,\n idempotencyKey,\n normalizedCallerIntent: input,\n now: context.clock(),\n })\n return { input, identity, origin: input.source }\n}\n\nfunction editIdempotencyKey(input: NormalizedEditCommit): string {\n if (input.source.kind === \"action\") {\n return createActionIdempotencyKey(input.source.runId)\n }\n return createRuntimeIdempotencyKey(input.source.requestId)\n}\n\nasync function lockActionRunForMaterialization(\n storage: Storage,\n projectId: string,\n input: NormalizedEditCommit\n): Promise<void> {\n if (input.source.kind !== \"action\") return\n if (!storage.actionRuns) {\n throw new MaterializationValidationError(\n \"Storage does not provide Action run capabilities required by this commit.\"\n )\n }\n await storage.actionRuns.lockForMaterialization({\n projectId,\n actionId: input.source.actionId,\n runId: input.source.runId,\n })\n}\n\nfunction replayEditCommit(\n context: MaterializerContext,\n command: PreparedEditCommit\n): Promise<EditCommitResult | null> {\n return replayCommit<EditCommitResult>(context, command.identity)\n}\n\nasync function executeEditCommit(\n context: MaterializerContext,\n command: PreparedEditCommit\n): Promise<EditCommitResult> {\n return withSerializationRetry(context, () =>\n context.storage.transaction((storage) => executeEditTransaction(context, storage, command), {\n isolation: \"serializable\",\n })\n )\n}\n\nasync function executeEditTransaction(\n context: MaterializerContext,\n storage: MaterializerStorage,\n command: PreparedEditCommit\n): Promise<EditCommitResult> {\n await lockActionRunForMaterialization(storage, context.projectId, command.input)\n\n const replay = await replayCommit<EditCommitResult>(context, command.identity, storage)\n if (replay) return replay\n\n const session = await beginEditMaterialization(context, storage, command)\n const workingState = await loadEditWorkingState(\n context,\n storage.ontology.materializations,\n session,\n command.input.operations\n )\n const outcomes = applyEditOperations(context, workingState, command)\n const changes = await stageEditPlan(\n context,\n storage.ontology.materializations,\n session,\n workingState,\n editPlanContext(command)\n )\n await drainStagedWork(context, storage.ontology.materializations, session)\n const eventCount = await drainStagedEvents(\n context,\n storage.ontology.materializations,\n session,\n command.identity\n )\n\n const result: EditCommitResult = {\n kind: \"edit\",\n commitId: command.identity.commitId,\n created: true,\n eventCount,\n committedAt: command.identity.committedAt,\n outcomes,\n changes,\n }\n return finalizeEditMaterialization(storage, session, result)\n}\n\nasync function beginEditMaterialization(\n context: Pick<MaterializerContext, \"projectId\" | \"projectionRegistry\">,\n storage: MaterializerStorage,\n command: PreparedEditCommit\n): Promise<MaterializationSession> {\n const commit = buildEditCommit(context, command)\n return storage.ontology.materializations.begin({\n commit,\n expected: {\n sources: [],\n ...editExpectations(command.input),\n points: [],\n },\n })\n}\n\nfunction buildEditCommit(\n context: Pick<MaterializerContext, \"projectId\" | \"projectionRegistry\">,\n command: PreparedEditCommit\n): OntologyCommitWrite {\n const commit: OntologyCommitWrite = {\n projectId: context.projectId,\n id: command.identity.commitId,\n idempotencyKey: command.identity.idempotencyKey,\n requestHash: command.identity.requestHash,\n origin: command.origin,\n ontologyRevision: context.projectionRegistry.ontologyRevision,\n intent: {\n kind: \"edit\",\n mode: command.input.mode,\n operationCount: command.input.operations.length,\n },\n committedAt: command.identity.committedAt,\n }\n if (command.input.actor === undefined) return commit\n return { ...commit, actor: command.input.actor }\n}\n\nfunction editExpectations(input: NormalizedEditCommit) {\n if (input.mode === \"atomic\") {\n return {\n objects: input.expectedObjects,\n links: input.expectedLinks,\n linkScopes: input.expectedLinkScopes,\n }\n }\n return { objects: [], links: [], linkScopes: [] }\n}\n\nfunction applyEditOperations(\n context: MaterializerContext,\n state: EditWorkingState,\n command: PreparedEditCommit\n): OntologyOperationOutcome[] {\n const outcomes: OntologyOperationOutcome[] = []\n const units = compileEditExecutionUnits(command.input)\n for (const unit of units) {\n outcomes.push(...applyEditExecutionUnit(context, state, command, unit))\n }\n return outcomes\n}\n\nfunction applyEditExecutionUnit(\n context: MaterializerContext,\n state: EditWorkingState,\n command: PreparedEditCommit,\n unit: EditExecutionUnit\n): OntologyOperationOutcome[] {\n if (unit.kind === \"atomic-group\") {\n return applyEditOperationGroup(context, state, command, unit.operations)\n }\n return [applyOneEditOperation(context, state, unit.operation, command)]\n}\n\nfunction applyOneEditOperation(\n context: MaterializerContext,\n state: EditWorkingState,\n operation: OntologyEditOperation,\n command: PreparedEditCommit\n): OntologyOperationOutcome {\n try {\n return applyEditOperation(context, state, operation, command.identity)\n } catch (error) {\n if (!isRecoverableEditValidation(command.input, error)) throw error\n return { id: operation.id, ok: false, error: { code: \"validation\", message: error.message } }\n }\n}\n\n/**\n * Applies one grouped item, rolling the whole group back if any operation in it fails.\n *\n * Without this, continue mode would leave an item half-applied: a cardinality-one reassignment\n * whose `link.delete` succeeded and whose `link.upsert` failed would report an item error while the\n * original edge stayed deleted.\n */\nfunction applyEditOperationGroup(\n context: MaterializerContext,\n state: EditWorkingState,\n command: PreparedEditCommit,\n group: readonly OntologyEditOperation[]\n): OntologyOperationOutcome[] {\n const journal: EditUndoJournal = []\n const applied: OntologyOperationOutcome[] = []\n\n for (const operation of group) {\n let outcome: OntologyOperationOutcome\n try {\n outcome = applyEditOperation(context, state, operation, command.identity, journal)\n } catch (error) {\n if (!isRecoverableEditValidation(command.input, error)) throw error\n undoEditJournal(journal)\n return failedEditGroup(group, error.message)\n }\n if (!outcome.ok) {\n undoEditJournal(journal)\n return failedEditGroup(group, outcome.error.message)\n }\n applied.push(outcome)\n }\n return applied\n}\n\n/** Reports every id in a rolled-back group as failed, so no position looks applied. */\nfunction failedEditGroup(\n group: readonly OntologyEditOperation[],\n message: string\n): OntologyOperationOutcome[] {\n return group.map((operation) => ({\n id: operation.id,\n ok: false as const,\n error: { code: \"validation\" as const, message },\n }))\n}\n\nfunction isRecoverableEditValidation(\n input: NormalizedEditCommit,\n error: unknown\n): error is MaterializationValidationError {\n if (input.mode === \"atomic\") return false\n return error instanceof MaterializationValidationError\n}\n\nfunction editPlanContext(command: PreparedEditCommit) {\n const context = { identity: command.identity, origin: command.origin }\n if (command.input.actor === undefined) return context\n return { ...context, actor: command.input.actor }\n}\n\nasync function finalizeEditMaterialization(\n storage: MaterializerStorage,\n session: MaterializationSession,\n result: EditCommitResult\n): Promise<EditCommitResult> {\n const applied = await storage.ontology.materializations.finalize({\n session,\n finalization: { sourceActivations: [], result },\n })\n return applied.commit.result as EditCommitResult\n}\n",
30
- "import {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../materialization/errors\"\nimport type { ProjectionMaterializationIdentity } from \"../../materialization/model\"\nimport type { ProjectionDefinition, ResolvedProjection } from \"../../projections/types\"\nimport type { ProjectionRunRecord, ProjectionRunStorage, Storage } from \"../../storage\"\n\nexport interface LockProjectionExecutionInput {\n readonly projectId: string\n readonly projectionRunId: string\n readonly executionToken: string\n readonly identity: ProjectionMaterializationIdentity\n readonly resolved: ResolvedProjection<ProjectionDefinition>\n readonly capabilityErrorMessage?: string\n}\n\nexport interface LockedProjectionExecution {\n readonly projectionRuns: ProjectionRunStorage\n readonly run: ProjectionRunRecord\n}\n\n/** Locks and validates the current execution inside the materialization transaction. */\nexport async function lockProjectionRunForMaterialization(\n storage: Pick<Storage, \"projectionRuns\">,\n input: LockProjectionExecutionInput\n): Promise<LockedProjectionExecution> {\n const projectionRuns = storage.projectionRuns\n if (!projectionRuns) {\n throw new MaterializationValidationError(\n input.capabilityErrorMessage ??\n \"Storage transaction does not provide projection run capabilities.\"\n )\n }\n\n const run = await projectionRuns.lockForMaterialization({\n id: input.projectionRunId,\n projectId: input.projectId,\n executionToken: input.executionToken,\n identity: input.identity,\n })\n assertProjectionRunTargets(run, input.resolved)\n return { projectionRuns, run }\n}\n\nexport function assertProjectionRunTargets(\n run: ProjectionRunRecord,\n resolved: ResolvedProjection<ProjectionDefinition>\n): void {\n if (projectionRunTargetsMatch(run, resolved.definition)) return\n\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${run.id}' target object types do not match projection '${resolved.projectionId}'.`\n )\n}\n\nfunction projectionRunTargetsMatch(\n run: ProjectionRunRecord,\n definition: ProjectionDefinition\n): boolean {\n switch (definition._tag) {\n case \"ObjectProjectionDefinition\":\n case \"TelemetryProjectionDefinition\":\n return \"objectTypeId\" in run.target && run.target.objectTypeId === definition.objectTypeId\n case \"LinkProjectionDefinition\":\n return (\n \"sourceObjectTypeId\" in run.target &&\n run.target.sourceObjectTypeId === definition.sourceObjectTypeId &&\n run.target.targetObjectTypeId === definition.targetObjectTypeId\n )\n }\n}\n",
31
- "import { MaterializationValidationError } from \"../../materialization/errors\"\nimport type {\n PinnedDatasetVersion,\n ProjectionMaterializationIdentity,\n} from \"../../materialization/model\"\nimport type {\n LinkProjectionDefinition,\n ObjectProjectionDefinition,\n ResolvedProjection,\n TelemetryProjectionDefinition,\n} from \"../../projections/types\"\n\ntype SourceProjectionDefinition = ObjectProjectionDefinition | LinkProjectionDefinition\ntype SourceMaterializationIdentity = Extract<\n ProjectionMaterializationIdentity,\n { readonly protocol: \"replacement\" }\n>\ntype TelemetryMaterializationIdentity = Extract<\n ProjectionMaterializationIdentity,\n { readonly protocol: \"telemetry\" }\n>\n\ninterface ProjectionRunIdentityInput<\n TDefinition extends SourceProjectionDefinition | TelemetryProjectionDefinition,\n> {\n readonly resolved: ResolvedProjection<TDefinition>\n readonly datasetVersion: PinnedDatasetVersion\n readonly ontologyRevision: string\n}\n\nexport function createProjectionRunMaterializationIdentity(\n input: ProjectionRunIdentityInput<SourceProjectionDefinition>\n): SourceMaterializationIdentity\nexport function createProjectionRunMaterializationIdentity(\n input: ProjectionRunIdentityInput<TelemetryProjectionDefinition>\n): TelemetryMaterializationIdentity\nexport function createProjectionRunMaterializationIdentity(\n input: ProjectionRunIdentityInput<SourceProjectionDefinition | TelemetryProjectionDefinition>\n): ProjectionMaterializationIdentity\nexport function createProjectionRunMaterializationIdentity(\n input: ProjectionRunIdentityInput<SourceProjectionDefinition | TelemetryProjectionDefinition>\n): ProjectionMaterializationIdentity {\n const base = {\n projectionId: input.resolved.projectionId,\n datasetVersion: input.datasetVersion,\n ontologyRevision: input.ontologyRevision,\n projectionRevision: input.resolved.projectionRevision,\n ownershipHash: input.resolved.ownershipHash,\n }\n\n switch (input.resolved.definition._tag) {\n case \"ObjectProjectionDefinition\":\n return { ...base, projectionKind: \"object\", protocol: \"replacement\" }\n case \"LinkProjectionDefinition\":\n return { ...base, projectionKind: \"link\", protocol: \"replacement\" }\n case \"TelemetryProjectionDefinition\":\n return { ...base, projectionKind: \"telemetry\", protocol: \"telemetry\" }\n default:\n throw new MaterializationValidationError(\"Expected a supported projection definition.\")\n }\n}\n",
32
- "import {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../materialization/errors\"\nimport type {\n PinnedDatasetVersion,\n ProjectionMaterializationIdentity,\n ProjectionRunFinishInput,\n ProjectionRunTerminalDecision,\n} from \"../../materialization/model\"\nimport type { ProjectionDefinition, ResolvedProjection } from \"../../projections/types\"\nimport type { OntologyCommitRecord } from \"../../storage/ontology\"\nimport type { MaterializerContext, MaterializerStorage } from \"../context\"\nimport { withSerializationRetry } from \"../execution/commit-lifecycle\"\nimport { lockProjectionRunForMaterialization } from \"../execution/run-correlation\"\nimport {\n normalizePinnedDatasetVersion,\n normalizeProjectionExecution,\n normalizeProjectionSourceRef,\n} from \"../shared/normalize\"\nimport { createProjectionRunMaterializationIdentity } from \"../shared/projection-run\"\n\ninterface PreparedProjectionRunFinish {\n readonly projectId: string\n readonly input: ProjectionRunFinishInput\n readonly identity: ProjectionMaterializationIdentity\n readonly resolved: ResolvedProjection<ProjectionDefinition>\n readonly finishedAt: Date\n}\n\nexport async function finishProjectionRun(\n context: MaterializerContext,\n raw: ProjectionRunFinishInput\n): Promise<void> {\n const command = prepareProjectionRunFinish(context, raw)\n await withSerializationRetry(context, () =>\n context.storage.transaction((storage) => finishProjectionRunTransaction(storage, command), {\n isolation: \"serializable\",\n })\n )\n}\n\nfunction prepareProjectionRunFinish(\n context: Pick<MaterializerContext, \"projectId\" | \"projectionRegistry\" | \"clock\">,\n raw: ProjectionRunFinishInput\n): PreparedProjectionRunFinish {\n assertValidTerminalDecision(raw)\n const source = normalizeProjectionSourceRef(raw.source)\n const datasetVersion = normalizePinnedDatasetVersion(raw.datasetVersion)\n const execution = normalizeProjectionExecution(raw.execution)\n const resolved =\n raw.protocol === \"replacement\"\n ? context.projectionRegistry.resolveSource(source.projectionId)\n : context.projectionRegistry.resolveTelemetry(source.projectionId)\n if (resolved.datasetId !== datasetVersion.datasetId) {\n throw new MaterializationValidationError(\n `Projection '${resolved.projectionId}' requires dataset '${resolved.datasetId}'.`\n )\n }\n const identity = createProjectionRunMaterializationIdentity({\n resolved,\n datasetVersion,\n ontologyRevision: context.projectionRegistry.ontologyRevision,\n })\n return {\n projectId: context.projectId,\n input: { ...raw, source, datasetVersion, execution },\n identity,\n resolved,\n finishedAt: context.clock(),\n }\n}\n\nasync function finishProjectionRunTransaction(\n storage: MaterializerStorage,\n command: PreparedProjectionRunFinish\n): Promise<void> {\n const { projectionRuns } = await lockProjectionRunForMaterialization(storage, {\n projectId: command.projectId,\n projectionRunId: command.input.execution.projectionRunId,\n executionToken: command.input.execution.executionToken,\n identity: command.identity,\n resolved: command.resolved,\n })\n\n if (command.input.protocol === \"replacement\") {\n await assertReplacementTerminalDecision(storage, command)\n }\n\n await projectionRuns.finish({\n id: command.input.execution.projectionRunId,\n projectId: command.projectId,\n executionToken: command.input.execution.executionToken,\n identity: command.identity,\n ...terminalDecision(command.input),\n finishedAt: command.finishedAt,\n })\n}\n\nfunction assertValidTerminalDecision(input: ProjectionRunFinishInput): void {\n if (input.protocol !== \"replacement\" && input.protocol !== \"telemetry\") {\n throw new MaterializationValidationError(\"Projection finish protocol is invalid.\")\n }\n if (input.status !== \"succeeded\" && input.status !== \"failed\" && input.status !== \"cancelled\") {\n throw new MaterializationValidationError(\"Projection finish status must be terminal.\")\n }\n const inputExhausted = \"inputExhausted\" in input ? input.inputExhausted : undefined\n if (input.status === \"succeeded\" && input.protocol === \"telemetry\") {\n if (inputExhausted === true) return\n throw new MaterializationValidationError(\n \"Telemetry projection success requires an explicit exhausted-input acknowledgement.\"\n )\n }\n if (inputExhausted !== undefined) {\n throw new MaterializationValidationError(\n \"Only telemetry projection success can acknowledge exhausted input.\"\n )\n }\n}\n\nfunction terminalDecision(input: ProjectionRunFinishInput): ProjectionRunTerminalDecision {\n if (input.status !== \"succeeded\") {\n return {\n protocol: input.protocol,\n status: input.status,\n ...(input.errorMessage === undefined ? {} : { errorMessage: input.errorMessage }),\n }\n }\n if (input.protocol === \"telemetry\") {\n return { protocol: \"telemetry\", status: \"succeeded\", inputExhausted: true }\n }\n return { protocol: \"replacement\", status: \"succeeded\" }\n}\n\nasync function assertReplacementTerminalDecision(\n storage: MaterializerStorage,\n command: PreparedProjectionRunFinish\n): Promise<void> {\n const commit = await storage.ontology.commits.getByOrigin({\n projectId: command.projectId,\n origin: {\n kind: \"projection\",\n projectionRunId: command.input.execution.projectionRunId,\n },\n })\n if (command.input.status === \"succeeded\") {\n if (!commit) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection replacement run '${command.input.execution.projectionRunId}' cannot succeed before its ontology commit exists.`\n )\n }\n assertReplacementCommitCorrelation(commit, command)\n return\n }\n if (commit) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection replacement run '${command.input.execution.projectionRunId}' cannot finish as '${command.input.status}' after its ontology commit exists.`\n )\n }\n}\n\nfunction assertReplacementCommitCorrelation(\n commit: OntologyCommitRecord,\n command: PreparedProjectionRunFinish\n): void {\n const { input, identity } = command\n if (\n commit.origin.kind !== \"projection\" ||\n commit.intent.kind !== \"projection\" ||\n commit.result.kind !== \"projection\" ||\n commit.origin.projectionRunId !== input.execution.projectionRunId ||\n commit.origin.projectionId !== input.source.projectionId ||\n commit.intent.source.projectionId !== input.source.projectionId ||\n !datasetVersionsEqual(commit.intent.datasetVersion, input.datasetVersion) ||\n commit.ontologyRevision !== identity.ontologyRevision ||\n commit.projectionRevision !== identity.projectionRevision ||\n commit.ownershipHash !== identity.ownershipHash\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection replacement run '${input.execution.projectionRunId}' commit identity does not match.`\n )\n }\n}\n\nfunction datasetVersionsEqual(left: PinnedDatasetVersion, right: PinnedDatasetVersion): boolean {\n return (\n left.datasetId === right.datasetId &&\n left.versionId === right.versionId &&\n left.createdAt === right.createdAt\n )\n}\n",
33
- "import { MaterializationValidationError } from \"../../materialization/errors\"\nimport type { ProjectionSourceEntry } from \"../../materialization/model\"\nimport { linkOwnershipKey } from \"../../materialization/refs\"\nimport type { OntologyRegistry } from \"../../ontology\"\nimport type { ProjectionRegistry } from \"../../projections/registry\"\nimport {\n validateLinkAuthorityProperties,\n validateObjectAuthorityProperties,\n} from \"../effective/validate\"\n\ntype ResolvedSourceProjection = ReturnType<ProjectionRegistry[\"resolveSource\"]>\ntype ProjectionAssertion = ProjectionSourceEntry[\"assertions\"][number]\ntype ObjectAssertion = Extract<ProjectionAssertion, { readonly kind: \"object\" }>\ntype LinkAssertion = Extract<ProjectionAssertion, { readonly kind: \"link\" }>\n\ninterface ProjectionValidationPolicy {\n readonly expectedRootKind: ProjectionSourceEntry[\"root\"][\"kind\"]\n readonly expectedRootDescription: string\n readonly ownedProperties: ReadonlyMap<string, ReadonlySet<string>>\n readonly ownedLinks: ReadonlySet<string>\n}\n\nexport type ProjectionEntryValidator = (entry: ProjectionSourceEntry) => ProjectionSourceEntry\n\nexport function createProjectionEntryValidator(\n ontology: OntologyRegistry,\n resolved: ResolvedSourceProjection\n): ProjectionEntryValidator {\n const policy = createValidationPolicy(resolved)\n return (entry) => validateProjectionEntry(ontology, resolved, policy, entry)\n}\n\nfunction createValidationPolicy(resolved: ResolvedSourceProjection): ProjectionValidationPolicy {\n const ownedProperties = new Map(\n resolved.ownership.objects.map((object) => [object.objectTypeId, new Set(object.propertyIds)])\n )\n const ownedLinks = new Set(\n resolved.ownership.links.map((link) => linkOwnershipKey(link.sourceObjectTypeId, link.linkId))\n )\n if (resolved.definition._tag === \"ObjectProjectionDefinition\") {\n return {\n expectedRootKind: \"object\",\n expectedRootDescription: \"an object\",\n ownedProperties,\n ownedLinks,\n }\n }\n return {\n expectedRootKind: \"link\",\n expectedRootDescription: \"a link\",\n ownedProperties,\n ownedLinks,\n }\n}\n\nfunction validateProjectionEntry(\n ontology: OntologyRegistry,\n resolved: ResolvedSourceProjection,\n policy: ProjectionValidationPolicy,\n entry: ProjectionSourceEntry\n): ProjectionSourceEntry {\n validateProjectionRoot(resolved, policy, entry)\n return {\n root: entry.root,\n assertions: entry.assertions.map((assertion) =>\n validateProjectionAssertion(ontology, resolved, policy, assertion)\n ),\n }\n}\n\nfunction validateProjectionRoot(\n resolved: ResolvedSourceProjection,\n policy: ProjectionValidationPolicy,\n entry: ProjectionSourceEntry\n): void {\n if (entry.root.kind === policy.expectedRootKind) return\n throw new MaterializationValidationError(\n `Projection '${resolved.projectionId}' requires ${policy.expectedRootDescription} root.`\n )\n}\n\nfunction validateProjectionAssertion(\n ontology: OntologyRegistry,\n resolved: ResolvedSourceProjection,\n policy: ProjectionValidationPolicy,\n assertion: ProjectionAssertion\n): ProjectionAssertion {\n if (assertion.kind === \"object\") {\n return validateObjectAssertion(ontology, resolved, policy, assertion)\n }\n return validateLinkAssertion(ontology, resolved, policy, assertion)\n}\n\nfunction validateObjectAssertion(\n ontology: OntologyRegistry,\n resolved: ResolvedSourceProjection,\n policy: ProjectionValidationPolicy,\n assertion: ObjectAssertion\n): ObjectAssertion {\n if (\n resolved.definition._tag !== \"ObjectProjectionDefinition\" ||\n assertion.ref.objectTypeId !== resolved.definition.objectTypeId\n ) {\n throw new MaterializationValidationError(\n \"Projection asserted an object outside its owned type.\"\n )\n }\n\n const properties = validateObjectAuthorityProperties(\n ontology,\n assertion.ref,\n assertion.properties\n )\n const owned = policy.ownedProperties.get(assertion.ref.objectTypeId) ?? new Set<string>()\n for (const propertyId of Object.keys(properties)) {\n if (owned.has(propertyId)) continue\n throw new MaterializationValidationError(\n `Projection '${resolved.projectionId}' asserted unowned property '${assertion.ref.objectTypeId}.${propertyId}'.`\n )\n }\n return { ...assertion, properties }\n}\n\nfunction validateLinkAssertion(\n ontology: OntologyRegistry,\n resolved: ResolvedSourceProjection,\n policy: ProjectionValidationPolicy,\n assertion: LinkAssertion\n): LinkAssertion {\n const ownershipKey = linkOwnershipKey(assertion.ref.source.objectTypeId, assertion.ref.linkId)\n if (!policy.ownedLinks.has(ownershipKey)) {\n throw new MaterializationValidationError(\"Projection asserted a link outside its owned scope.\")\n }\n\n const expectedTargetTypeId = projectionLinkTargetType(resolved, assertion)\n if (expectedTargetTypeId !== assertion.ref.target.objectTypeId) {\n throw new MaterializationValidationError(\n `Projection '${resolved.projectionId}' asserted link target type '${assertion.ref.target.objectTypeId}' outside its mapping.`\n )\n }\n\n validateLinkAuthorityProperties(ontology, assertion.ref, assertion.properties)\n if (assertion.properties !== undefined) {\n throw new MaterializationValidationError(\n `Projection '${resolved.projectionId}' does not map link assertion properties.`\n )\n }\n return { ...assertion }\n}\n\nfunction projectionLinkTargetType(\n resolved: ResolvedSourceProjection,\n assertion: LinkAssertion\n): string | undefined {\n if (resolved.definition._tag === \"LinkProjectionDefinition\") {\n return resolved.definition.targetObjectTypeId\n }\n if (resolved.definition._tag === \"ObjectProjectionDefinition\") {\n return resolved.definition.links[assertion.ref.linkId]?.targetObjectTypeId\n }\n return undefined\n}\n",
34
- "import type {\n EffectiveChangeCounts,\n EffectiveLinkChange,\n EffectiveObjectChange,\n OntologyMaterializationOrigin,\n OntologyObjectRef,\n ProjectionSourceRef,\n} from \"../../materialization/model\"\nimport {\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n objectRefKey,\n objectRefSortKey,\n} from \"../../materialization/refs\"\nimport type {\n MaterializationPlanWorkItem,\n MaterializationSession,\n MaterializationWorkRecord,\n OntologyMaterializationStorage,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n SourceReplacementStatePage,\n} from \"../../storage/ontology\"\nimport type { MaterializerContext } from \"../context\"\nimport {\n buildLinkMaterializationEventDraft,\n buildObjectMaterializationEventDraft,\n} from \"../effective/build-events\"\nimport { diffEffectiveLink, diffEffectiveObject } from \"../effective/diff\"\nimport { oneStateRequest } from \"../effective/load-state\"\nimport { resolveEffectiveLink, resolveEffectiveObject } from \"../effective/resolve\"\nimport { validateEffectiveObject } from \"../effective/validate\"\nimport { stageWorkBounded, validateStagedCardinality } from \"../execution/work-executor\"\nimport {\n appendLinkEffectivePlan,\n appendObjectEffectivePlan,\n classificationWork,\n eventWork,\n planWork,\n} from \"../execution/work-records\"\nimport { throwIfAborted } from \"../shared/abort\"\nimport type { TimedCommitIdentity } from \"../shared/identity\"\n\nexport interface ProjectionReplacementPlanInput {\n readonly source: ProjectionSourceRef\n readonly materializationId: string\n readonly projectionKind: \"object\" | \"link\"\n readonly identity: TimedCommitIdentity\n readonly origin: OntologyMaterializationOrigin\n readonly signal?: AbortSignal\n}\n\nexport async function planProjectionReplacement(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n input: ProjectionReplacementPlanInput\n): Promise<EffectiveChangeCounts> {\n const counts = emptyCounts()\n if (input.projectionKind === \"object\") {\n await planObjectReplacement(context, storage, session, input, counts)\n }\n await planLinkReplacement(context, storage, session, input, counts)\n await validateStagedCardinality(context, storage, session, input.signal)\n return counts\n}\n\nasync function planObjectReplacement(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n input: ProjectionReplacementPlanInput,\n counts: MutableCounts\n): Promise<void> {\n for await (const page of storage.streamSourceReplacementState({\n session,\n source: input.source,\n candidateMaterializationId: input.materializationId,\n entityKind: \"object\",\n pageRows: context.batching.statePageRows,\n })) {\n throwIfAborted(input.signal)\n const work = planObjectPage(context, input, page, counts)\n await stageWorkBounded(context, storage, session, work)\n }\n}\n\nfunction planObjectPage(\n context: MaterializerContext,\n input: ProjectionReplacementPlanInput,\n page: SourceReplacementStatePage,\n counts: MutableCounts\n): MaterializationWorkRecord[] {\n const work: MaterializationWorkRecord[] = []\n for (const state of page.objects) {\n work.push(...planReplacementObject(context, input, state, counts))\n }\n return work\n}\n\nfunction planReplacementObject(\n context: MaterializerContext,\n input: ProjectionReplacementPlanInput,\n state: SourceReplacementObjectState,\n counts: MutableCounts\n): MaterializationWorkRecord[] {\n const resolved = resolveReplacementObject(context, state)\n if (resolved) validateEffectiveObject(context.ontology, resolved.ref, resolved.properties)\n\n const change = diffEffectiveObject({\n before: state.effective,\n resolved,\n commitId: input.identity.commitId,\n committedAt: input.identity.committedAt,\n })\n const sortKey = objectRefSortKey(state.ref)\n const work: MaterializationWorkRecord[] = [\n classificationWork(\"object\", objectRefKey(state.ref), sortKey),\n {\n kind: \"object-existence\",\n recordKey: `existence:${sortKey}`,\n ref: state.ref,\n exists: resolved !== null,\n },\n ]\n if (Boolean(state.effective) !== Boolean(resolved)) {\n work.push({ kind: \"incident-object\", recordKey: `incident:${sortKey}`, ref: state.ref })\n }\n\n if (!change) {\n counts.objectsUnchanged += 1\n return work\n }\n\n incrementObjectCount(counts, change.kind)\n appendObjectChangeWork(work, sortKey, context, input, change)\n return work\n}\n\nfunction appendObjectChangeWork(\n work: MaterializationWorkRecord[],\n sortKey: string,\n context: Pick<MaterializerContext, \"projectId\">,\n input: ProjectionReplacementPlanInput,\n change: EffectiveObjectChange\n): void {\n const items: MaterializationPlanWorkItem[] = []\n appendObjectEffectivePlan(items, change)\n for (const item of items) work.push(planWork(item, sortKey))\n work.push(\n eventWork(\n buildObjectMaterializationEventDraft({\n projectId: context.projectId,\n commitId: input.identity.commitId,\n committedAt: input.identity.committedAt,\n origin: input.origin,\n change,\n })\n )\n )\n}\n\nasync function planLinkReplacement(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n input: ProjectionReplacementPlanInput,\n counts: MutableCounts\n): Promise<void> {\n for await (const page of storage.streamSourceReplacementState({\n session,\n source: input.source,\n candidateMaterializationId: input.materializationId,\n entityKind: \"link\",\n pageRows: context.batching.statePageRows,\n })) {\n throwIfAborted(input.signal)\n const endpointExistence = await loadEndpointExistence(context, storage, session, page)\n const work = planLinkPage(context, input, page, endpointExistence, counts)\n await stageWorkBounded(context, storage, session, work)\n }\n}\n\nasync function loadEndpointExistence(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n page: SourceReplacementStatePage\n): Promise<ReadonlyMap<string, boolean>> {\n const endpointRefs = collectEndpointRefs(page.links)\n const endpointExistence = new Map<string, boolean>()\n for (const value of await storage.readObjectExistence({\n session,\n refs: [...endpointRefs.values()],\n })) {\n endpointExistence.set(objectRefKey(value.ref), value.exists)\n }\n\n const missingEndpoints = [...endpointRefs.values()].filter(\n (ref) => !endpointExistence.has(objectRefKey(ref))\n )\n if (missingEndpoints.length === 0) return endpointExistence\n\n for await (const endpointPage of storage.streamState({\n session,\n requests: oneStateRequest({\n objects: missingEndpoints,\n links: [],\n linkScopes: [],\n incidentObjects: [],\n points: [],\n }),\n pageRows: context.batching.statePageRows,\n })) {\n for (const endpoint of endpointPage.objects) {\n endpointExistence.set(objectRefKey(endpoint.ref), endpoint.effective !== null)\n }\n }\n return endpointExistence\n}\n\nfunction collectEndpointRefs(\n links: readonly SourceReplacementLinkState[]\n): ReadonlyMap<string, OntologyObjectRef> {\n const refs = new Map<string, OntologyObjectRef>()\n for (const state of links) {\n refs.set(objectRefKey(state.ref.source), state.ref.source)\n refs.set(objectRefKey(state.ref.target), state.ref.target)\n }\n return refs\n}\n\nfunction planLinkPage(\n context: MaterializerContext,\n input: ProjectionReplacementPlanInput,\n page: SourceReplacementStatePage,\n endpointExistence: ReadonlyMap<string, boolean>,\n counts: MutableCounts\n): MaterializationWorkRecord[] {\n const work: MaterializationWorkRecord[] = []\n for (const state of page.links) {\n work.push(...planReplacementLink(context, input, state, endpointExistence, counts))\n }\n return work\n}\n\nfunction planReplacementLink(\n context: MaterializerContext,\n input: ProjectionReplacementPlanInput,\n state: SourceReplacementLinkState,\n endpointExistence: ReadonlyMap<string, boolean>,\n counts: MutableCounts\n): MaterializationWorkRecord[] {\n const resolved = resolveReplacementLink(state, endpointExistence)\n const work = cardinalityWork(context, state, resolved !== null)\n if (!state.diffRequired) return work\n\n const change = diffEffectiveLink({\n before: state.effective,\n resolved,\n commitId: input.identity.commitId,\n committedAt: input.identity.committedAt,\n })\n const sortKey = linkRefSortKey(state.ref)\n work.push(classificationWork(\"link\", linkRefKey(state.ref), sortKey))\n if (!change) {\n counts.linksUnchanged += 1\n return work\n }\n\n incrementLinkCount(counts, change.kind)\n appendLinkChangeWork(work, sortKey, context, input, change)\n return work\n}\n\nfunction resolveReplacementLink(\n state: SourceReplacementLinkState,\n endpointExistence: ReadonlyMap<string, boolean>\n) {\n if (!state.diffRequired) return state.effective\n return resolveEffectiveLink({\n ref: state.ref,\n source: state.candidateSource,\n override: state.override?.value ?? null,\n sourceEndpointExists: endpointExistence.get(objectRefKey(state.ref.source)) ?? false,\n targetEndpointExists: endpointExistence.get(objectRefKey(state.ref.target)) ?? false,\n })\n}\n\nfunction cardinalityWork(\n context: Pick<MaterializerContext, \"ontology\">,\n state: SourceReplacementLinkState,\n occupied: boolean\n): MaterializationWorkRecord[] {\n const definition = context.ontology\n .resolveObjectType(state.ref.source.objectTypeId)\n .links.find((candidate) => candidate.id === state.ref.linkId)\n if (definition?.cardinality !== \"one\") return []\n\n const scopeSortKey = linkScopeSortKey(state.ref.source, state.ref.linkId)\n const linkSortKey = linkRefSortKey(state.ref)\n return [\n {\n kind: \"cardinality\",\n recordKey: `cardinality:${scopeSortKey}:${linkSortKey}`,\n scopeSortKey,\n linkSortKey,\n ref: state.ref,\n occupied,\n },\n ]\n}\n\nfunction appendLinkChangeWork(\n work: MaterializationWorkRecord[],\n sortKey: string,\n context: Pick<MaterializerContext, \"projectId\">,\n input: ProjectionReplacementPlanInput,\n change: EffectiveLinkChange\n): void {\n const items: MaterializationPlanWorkItem[] = []\n appendLinkEffectivePlan(items, change)\n for (const item of items) work.push(planWork(item, sortKey))\n work.push(\n eventWork(\n buildLinkMaterializationEventDraft({\n projectId: context.projectId,\n commitId: input.identity.commitId,\n committedAt: input.identity.committedAt,\n origin: input.origin,\n change,\n })\n )\n )\n}\n\nfunction resolveReplacementObject(\n context: Pick<MaterializerContext, \"ontology\">,\n state: SourceReplacementObjectState\n) {\n return resolveEffectiveObject({\n ref: state.ref,\n primaryPropertyId: context.ontology.getPrimaryPropertyId(state.ref.objectTypeId),\n source: state.candidateSource,\n override: state.override?.value ?? null,\n latestTelemetry: state.latestTelemetry,\n })\n}\n\nfunction emptyCounts(): MutableCounts {\n return {\n objectsCreated: 0,\n objectsUpdated: 0,\n objectsDeleted: 0,\n objectsUnchanged: 0,\n linksCreated: 0,\n linksUpdated: 0,\n linksDeleted: 0,\n linksUnchanged: 0,\n }\n}\n\ntype MutableCounts = { -readonly [K in keyof EffectiveChangeCounts]: EffectiveChangeCounts[K] }\n\nfunction incrementObjectCount(counts: MutableCounts, kind: EffectiveObjectChange[\"kind\"]): void {\n if (kind === \"created\") counts.objectsCreated += 1\n else if (kind === \"updated\") counts.objectsUpdated += 1\n else counts.objectsDeleted += 1\n}\n\nfunction incrementLinkCount(counts: MutableCounts, kind: EffectiveLinkChange[\"kind\"]): void {\n if (kind === \"created\") counts.linksCreated += 1\n else if (kind === \"updated\") counts.linksUpdated += 1\n else counts.linksDeleted += 1\n}\n",
35
- "import type {\n PinnedDatasetVersion,\n ProjectionExecution,\n ProjectionSourceEntry,\n ProjectionSourceRef,\n} from \"../../materialization/model\"\nimport { utf8JsonByteLength } from \"../../materialization/refs\"\nimport type { StageSourceAssertion } from \"../../storage/ontology\"\nimport type { MaterializerContext } from \"../context\"\nimport { throwIfAborted } from \"../shared/abort\"\nimport { chunkBySize } from \"../shared/chunking\"\nimport { normalizeProjectionSourceEntry } from \"../shared/normalize\"\nimport type { ProjectionEntryValidator } from \"./entry-validator\"\n\nexport interface StagedProjectionMaterialization {\n readonly rootCount: number\n readonly assertionCount: number\n}\n\n/**\n * Persist and seal one explicit source-materialization candidate.\n *\n * A candidate is deliberately left staging/ready when execution is interrupted. The next claim\n * reclaims it with a fresh execution token; age is never used to infer abandonment.\n */\nexport async function stageProjectionMaterialization(\n context: Pick<\n MaterializerContext,\n \"projectId\" | \"storage\" | \"batching\" | \"projectionRegistry\" | \"clock\"\n >,\n input: {\n readonly source: ProjectionSourceRef\n readonly materializationId: string\n readonly execution: ProjectionExecution\n readonly projectionKind: \"object\" | \"link\"\n readonly datasetVersion: PinnedDatasetVersion\n readonly projectionRevision: string\n readonly ownershipHash: string\n readonly createdAt: string\n readonly entries: AsyncIterable<ProjectionSourceEntry>\n readonly validateEntry: ProjectionEntryValidator\n readonly signal?: AbortSignal\n }\n): Promise<StagedProjectionMaterialization> {\n await context.storage.ontology.sources.beginMaterialization({\n projectId: context.projectId,\n source: input.source,\n materializationId: input.materializationId,\n execution: input.execution,\n projectionKind: input.projectionKind,\n protocol: \"replacement\",\n datasetVersion: input.datasetVersion,\n projectionRevision: input.projectionRevision,\n ownershipHash: input.ownershipHash,\n ontologyRevision: context.projectionRegistry.ontologyRevision,\n createdAt: input.createdAt,\n })\n\n let rootCount = 0\n let assertionCount = 0\n async function* assertions(): AsyncIterable<StageSourceAssertion> {\n for await (const rawEntry of input.entries) {\n throwIfAborted(input.signal)\n const entry = input.validateEntry(normalizeProjectionSourceEntry(rawEntry))\n const stagingOrdinal = rootCount\n for (const assertion of entry.assertions) {\n assertionCount += 1\n yield { root: entry.root, assertion, stagingOrdinal }\n }\n rootCount += 1\n }\n throwIfAborted(input.signal)\n }\n\n for await (const rows of chunkBySize(assertions(), {\n maxRows: context.batching.sourceStageRows,\n maxBytes: context.batching.sourceStageBytes,\n byteLength: utf8JsonByteLength,\n })) {\n await context.storage.ontology.sources.stageRows({\n projectId: context.projectId,\n source: input.source,\n materializationId: input.materializationId,\n execution: input.execution,\n rows,\n })\n }\n\n await context.storage.ontology.sources.markReady({\n projectId: context.projectId,\n source: input.source,\n materializationId: input.materializationId,\n execution: input.execution,\n rootCount,\n assertionCount,\n readyAt: context.clock().toISOString(),\n })\n return { rootCount, assertionCount }\n}\n",
36
- "import { assertPinnedDatasetWatermark } from \"../../materialization/dataset-watermark\"\nimport {\n MaterializationCancellationError,\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../materialization/errors\"\nimport type {\n OntologyMaterializationOrigin,\n PinnedDatasetVersion,\n ProjectionCommitResult,\n ProjectionExecution,\n ProjectionMaterializationIdentity,\n ProjectionSourceEntry,\n ProjectionSourceRef,\n ProjectionSourceReplacement,\n} from \"../../materialization/model\"\nimport type { ProjectionRegistry } from \"../../projections/registry\"\nimport type {\n OntologyCommitRecord,\n OntologyCommitWrite,\n OntologyMaterializationStorage,\n OntologyStorage,\n} from \"../../storage/ontology\"\nimport type { MaterializerContext, MaterializerStorage } from \"../context\"\nimport { replayCommitRecord, withSerializationRetry } from \"../execution/commit-lifecycle\"\nimport { lockProjectionRunForMaterialization } from \"../execution/run-correlation\"\nimport { drainStagedEvents, drainStagedWork } from \"../execution/work-executor\"\nimport { throwIfAborted } from \"../shared/abort\"\nimport {\n type CommitIdentity,\n createCommitIdentity,\n createProjectionIdempotencyKey,\n type TimedCommitIdentity,\n timestampCommitIdentity,\n} from \"../shared/identity\"\nimport {\n normalizePinnedDatasetVersion,\n normalizeProjectionExecution,\n normalizeProjectionSourceRef,\n} from \"../shared/normalize\"\nimport { createProjectionRunMaterializationIdentity } from \"../shared/projection-run\"\nimport { createProjectionEntryValidator } from \"./entry-validator\"\nimport { planProjectionReplacement } from \"./replacement-plan\"\nimport {\n type StagedProjectionMaterialization,\n stageProjectionMaterialization,\n} from \"./source-materialization\"\n\ntype ResolvedSourceProjection = ReturnType<ProjectionRegistry[\"resolveSource\"]>\n\ninterface PreparedProjectionReplacement {\n readonly source: ProjectionSourceRef\n readonly datasetVersion: PinnedDatasetVersion\n readonly execution: ProjectionExecution\n readonly entries: AsyncIterable<ProjectionSourceEntry>\n readonly signal?: AbortSignal\n readonly resolved: ResolvedSourceProjection\n readonly projectionKind: \"object\" | \"link\"\n readonly runIdentity: ProjectionMaterializationIdentity\n readonly identity: CommitIdentity\n}\n\ninterface ProjectionCandidate {\n readonly materializationId: string\n readonly createdAt: string\n readonly expectedSource: {\n readonly source: ProjectionSourceRef\n readonly activeMaterializationId: string | null\n readonly lastCommitId: string | null\n }\n}\n\ninterface ReadyProjectionReplacement extends ProjectionCandidate {\n readonly staged: StagedProjectionMaterialization\n readonly identity: TimedCommitIdentity\n}\n\nexport async function replaceProjection(\n context: MaterializerContext,\n raw: ProjectionSourceReplacement\n): Promise<ProjectionCommitResult> {\n const command = prepareProjectionReplacement(context, raw)\n await assertProjectionExecution(context.storage, context.projectId, command, {\n capabilityErrorMessage:\n \"Storage does not provide projection run capabilities required by source replacement.\",\n })\n\n const replay = await replayProjectionCommit(context, command)\n if (replay) return replay\n\n const candidate = await prepareProjectionCandidate(context, command)\n try {\n const ready = await stageProjectionCandidate(context, command, candidate)\n return await commitProjectionCandidate(context, command, ready)\n } catch (error) {\n await abandonFailedCandidate(context, command, candidate, error)\n throw error\n }\n}\n\nfunction prepareProjectionReplacement(\n context: Pick<MaterializerContext, \"projectId\" | \"projectionRegistry\">,\n raw: ProjectionSourceReplacement\n): PreparedProjectionReplacement {\n const source = normalizeProjectionSourceRef(raw.source)\n const datasetVersion = normalizePinnedDatasetVersion(raw.datasetVersion)\n const execution = normalizeProjectionExecution(raw.execution)\n const resolved = context.projectionRegistry.resolveSource(source.projectionId)\n validateProjectionDataset(resolved, datasetVersion)\n\n const projectionKind = sourceProjectionKind(resolved)\n const runIdentity = createProjectionRunMaterializationIdentity({\n resolved,\n datasetVersion,\n ontologyRevision: context.projectionRegistry.ontologyRevision,\n })\n const identity = createCommitIdentity({\n projectId: context.projectId,\n idempotencyKey: createProjectionIdempotencyKey(runIdentity),\n normalizedCallerIntent: { source, datasetVersion },\n })\n const command = {\n source,\n datasetVersion,\n execution,\n entries: raw.entries,\n resolved,\n projectionKind,\n runIdentity,\n identity,\n }\n if (raw.signal === undefined) return command\n return { ...command, signal: raw.signal }\n}\n\nfunction validateProjectionDataset(\n resolved: ResolvedSourceProjection,\n datasetVersion: PinnedDatasetVersion\n): void {\n if (datasetVersion.datasetId === resolved.datasetId) return\n throw new MaterializationValidationError(\n `Projection '${resolved.projectionId}' requires dataset '${resolved.datasetId}'.`\n )\n}\n\nfunction sourceProjectionKind(resolved: ResolvedSourceProjection): \"object\" | \"link\" {\n if (resolved.definition._tag === \"ObjectProjectionDefinition\") return \"object\"\n return \"link\"\n}\n\nasync function assertProjectionExecution(\n storage: MaterializerStorage,\n projectId: string,\n command: PreparedProjectionReplacement,\n options: { readonly capabilityErrorMessage?: string } = {}\n): Promise<void> {\n await lockProjectionRunForMaterialization(storage, {\n projectId,\n projectionRunId: command.execution.projectionRunId,\n executionToken: command.execution.executionToken,\n identity: command.runIdentity,\n resolved: command.resolved,\n ...options,\n })\n}\n\nasync function replayProjectionCommit(\n context: MaterializerContext,\n command: PreparedProjectionReplacement\n): Promise<ProjectionCommitResult | null> {\n const existing = await replayCommitRecord(context, command.identity)\n if (!existing) return null\n return withSerializationRetry(context, () =>\n context.storage.transaction(\n async (storage) => {\n await assertProjectionExecution(storage, context.projectId, command)\n const commit = await replayCommitRecord(context, command.identity, storage)\n return commit ? projectionReplayResult(commit, command) : null\n },\n { isolation: \"serializable\" }\n )\n )\n}\n\nfunction projectionReplayResult(\n commit: OntologyCommitRecord,\n command: PreparedProjectionReplacement\n): ProjectionCommitResult {\n if (\n commit.origin.kind !== \"projection\" ||\n commit.origin.projectionRunId !== command.execution.projectionRunId ||\n commit.result.kind !== \"projection\"\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection commit '${commit.id}' belongs to a different logical run.`\n )\n }\n return { ...structuredClone(commit.result), created: false }\n}\n\nasync function prepareProjectionCandidate(\n context: MaterializerContext,\n command: PreparedProjectionReplacement\n): Promise<ProjectionCandidate> {\n await context.storage.ontology.sources.abandon({\n kind: \"reclaim\",\n projectId: context.projectId,\n source: command.source,\n execution: command.execution,\n abandonedAt: context.clock().toISOString(),\n })\n const active = await context.storage.ontology.sources.getActive({\n projectId: context.projectId,\n source: command.source,\n })\n validateProjectionWatermark(active, command.datasetVersion)\n return {\n materializationId: context.materializationId(),\n createdAt: context.clock().toISOString(),\n expectedSource: {\n source: command.source,\n activeMaterializationId: active?.materializationId ?? null,\n lastCommitId: active?.lastCommitId ?? null,\n },\n }\n}\n\nasync function stageProjectionCandidate(\n context: MaterializerContext,\n command: PreparedProjectionReplacement,\n candidate: ProjectionCandidate\n): Promise<ReadyProjectionReplacement> {\n const input = {\n source: command.source,\n materializationId: candidate.materializationId,\n execution: command.execution,\n projectionKind: command.projectionKind,\n datasetVersion: command.datasetVersion,\n projectionRevision: command.resolved.projectionRevision,\n ownershipHash: command.resolved.ownershipHash,\n createdAt: candidate.createdAt,\n entries: command.entries,\n validateEntry: createProjectionEntryValidator(context.ontology, command.resolved),\n }\n const staged = await stageCandidateEntries(context, input, command.signal)\n return {\n ...candidate,\n staged,\n // Commit time starts only after the source candidate is sealed ready.\n identity: timestampCommitIdentity(command.identity, context.clock()),\n }\n}\n\nasync function stageCandidateEntries(\n context: MaterializerContext,\n input: Parameters<typeof stageProjectionMaterialization>[1],\n signal: AbortSignal | undefined\n): Promise<StagedProjectionMaterialization> {\n if (signal === undefined) return stageProjectionMaterialization(context, input)\n return stageProjectionMaterialization(context, { ...input, signal })\n}\n\nasync function commitProjectionCandidate(\n context: MaterializerContext,\n command: PreparedProjectionReplacement,\n ready: ReadyProjectionReplacement\n): Promise<ProjectionCommitResult> {\n return withSerializationRetry(context, () =>\n context.storage.transaction(\n (storage) => executeProjectionTransaction(context, storage, command, ready),\n { isolation: \"serializable\" }\n )\n )\n}\n\nasync function executeProjectionTransaction(\n context: MaterializerContext,\n storage: MaterializerStorage,\n command: PreparedProjectionReplacement,\n ready: ReadyProjectionReplacement\n): Promise<ProjectionCommitResult> {\n await assertProjectionExecution(storage, context.projectId, command)\n const replay = await replayCommitRecord(context, command.identity, storage)\n if (replay) return projectionReplayResult(replay, command)\n\n const origin = projectionOrigin(command)\n throwIfAborted(command.signal)\n const session = await storage.ontology.materializations.begin({\n commit: projectionCommit(context.projectId, command, ready.identity, origin),\n expected: {\n sources: [ready.expectedSource],\n objects: [],\n links: [],\n linkScopes: [],\n points: [],\n },\n })\n const counts = await planReadyProjection(\n context,\n storage.ontology.materializations,\n session,\n command,\n ready,\n origin\n )\n await drainStagedWork(context, storage.ontology.materializations, session, command.signal)\n const eventCount = await drainStagedEvents(\n context,\n storage.ontology.materializations,\n session,\n ready.identity,\n command.signal\n )\n const result: ProjectionCommitResult = {\n kind: \"projection\",\n commitId: ready.identity.commitId,\n created: true,\n eventCount,\n committedAt: ready.identity.committedAt,\n counts,\n }\n throwIfAborted(command.signal)\n return finalizeProjectionMaterialization(storage, session, command, ready, result)\n}\n\nasync function finalizeProjectionMaterialization(\n storage: MaterializerStorage,\n session: Parameters<OntologyMaterializationStorage[\"finalize\"]>[0][\"session\"],\n command: PreparedProjectionReplacement,\n ready: ReadyProjectionReplacement,\n result: ProjectionCommitResult\n): Promise<ProjectionCommitResult> {\n const applied = await storage.ontology.materializations.finalize({\n session,\n finalization: {\n sourceActivations: [projectionActivation(command, ready)],\n result,\n },\n })\n return applied.commit.result as ProjectionCommitResult\n}\n\nfunction projectionOrigin(command: PreparedProjectionReplacement): OntologyMaterializationOrigin {\n return {\n kind: \"projection\",\n projectionId: command.resolved.projectionId,\n projectionRunId: command.execution.projectionRunId,\n datasetId: command.datasetVersion.datasetId,\n datasetVersionId: command.datasetVersion.versionId,\n }\n}\n\nfunction projectionCommit(\n projectId: string,\n command: PreparedProjectionReplacement,\n identity: TimedCommitIdentity,\n origin: OntologyMaterializationOrigin\n): OntologyCommitWrite {\n return {\n projectId,\n id: identity.commitId,\n idempotencyKey: identity.idempotencyKey,\n requestHash: identity.requestHash,\n origin,\n ontologyRevision: command.runIdentity.ontologyRevision,\n projectionRevision: command.runIdentity.projectionRevision,\n ownershipHash: command.runIdentity.ownershipHash,\n intent: { kind: \"projection\", source: command.source, datasetVersion: command.datasetVersion },\n committedAt: identity.committedAt,\n }\n}\n\nasync function planReadyProjection(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: Parameters<OntologyMaterializationStorage[\"finalize\"]>[0][\"session\"],\n command: PreparedProjectionReplacement,\n ready: ReadyProjectionReplacement,\n origin: OntologyMaterializationOrigin\n) {\n const input = {\n source: command.source,\n materializationId: ready.materializationId,\n projectionKind: command.projectionKind,\n identity: ready.identity,\n origin,\n }\n if (command.signal === undefined) {\n return planProjectionReplacement(context, storage, session, input)\n }\n return planProjectionReplacement(context, storage, session, {\n ...input,\n signal: command.signal,\n })\n}\n\nfunction projectionActivation(\n command: PreparedProjectionReplacement,\n ready: ReadyProjectionReplacement\n) {\n return {\n source: command.source,\n materializationId: ready.materializationId,\n execution: command.execution,\n projectionKind: command.projectionKind,\n protocol: \"replacement\" as const,\n datasetVersion: command.datasetVersion,\n projectionRevision: command.runIdentity.projectionRevision,\n ownershipHash: command.runIdentity.ownershipHash,\n ontologyRevision: command.runIdentity.ontologyRevision,\n expected: ready.expectedSource,\n lastCommitId: ready.identity.commitId,\n updatedAt: ready.identity.committedAt,\n }\n}\n\nasync function abandonFailedCandidate(\n context: MaterializerContext,\n command: PreparedProjectionReplacement,\n candidate: ProjectionCandidate,\n error: unknown\n): Promise<void> {\n if (!shouldAbandonCandidate(error)) return\n await context.storage.ontology.sources.abandon({\n kind: \"candidate\",\n projectId: context.projectId,\n source: command.source,\n materializationId: candidate.materializationId,\n execution: command.execution,\n abandonedAt: context.clock().toISOString(),\n })\n}\n\nfunction shouldAbandonCandidate(error: unknown): boolean {\n if (error instanceof MaterializationValidationError) return true\n if (error instanceof MaterializationCancellationError) return true\n return error instanceof MaterializationConflictError && error.kind === \"run-correlation\"\n}\n\nfunction validateProjectionWatermark(\n active: Awaited<ReturnType<OntologyStorage[\"sources\"][\"getActive\"]>>,\n next: PinnedDatasetVersion\n): void {\n if (!active) return\n assertPinnedDatasetWatermark(active.datasetVersion, next, \"Projection replacement\")\n}\n",
37
- "import { stableJsonStringify } from \"../../json\"\nimport { MaterializationObjectNotFoundError } from \"../../materialization/errors\"\nimport type {\n OntologyMaterializationOrigin,\n OntologyObjectRef,\n TelemetryAppend,\n TelemetryPointWrite,\n} from \"../../materialization/model\"\nimport {\n objectRefKey,\n objectRefSortKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"../../materialization/refs\"\nimport type {\n MaterializationObjectState,\n MaterializationPlanWorkItem,\n MaterializationSession,\n MaterializationWorkRecord,\n OntologyMaterializationStorage,\n StoredTelemetryPoint,\n} from \"../../storage/ontology\"\nimport type { MaterializerContext } from \"../context\"\nimport { resolveObject, type WorkingObject, workingObjectFromState } from \"../edits/working-state\"\nimport {\n buildObjectMaterializationEventDraft,\n buildTelemetryMaterializationEventDraft,\n} from \"../effective/build-events\"\nimport { diffEffectiveObject } from \"../effective/diff\"\nimport { loadState, oneStateRequest } from \"../effective/load-state\"\nimport { validateEffectiveObject } from \"../effective/validate\"\nimport { stageWorkBounded } from \"../execution/work-executor\"\nimport {\n appendObjectEffectivePlan,\n classificationWork,\n eventWork,\n planWork,\n} from \"../execution/work-records\"\nimport type { TimedCommitIdentity } from \"../shared/identity\"\n\nexport interface TelemetryPlanCounts {\n readonly pointsCreated: number\n readonly pointsUpdated: number\n readonly pointsUnchanged: number\n readonly latestObjectsChanged: number\n}\n\ninterface MutableTelemetryPlanCounts {\n pointsCreated: number\n pointsUpdated: number\n pointsUnchanged: number\n latestObjectsChanged: number\n}\n\ninterface TelemetryObjectGroup {\n readonly objectRef: OntologyObjectRef\n readonly start: number\n readonly end: number\n}\n\ninterface TelemetryPlanContext {\n readonly input: TelemetryAppend\n readonly identity: TimedCommitIdentity\n readonly origin: OntologyMaterializationOrigin\n}\n\nexport async function planTelemetryAppend(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n input: TelemetryAppend,\n identity: TimedCommitIdentity,\n origin: OntologyMaterializationOrigin\n): Promise<TelemetryPlanCounts> {\n const counts = emptyTelemetryCounts()\n const planContext = { input, identity, origin }\n const objects = await loadTelemetryObjects(context, storage, session, input.points)\n const existingPoints = await loadExistingPoints(context, storage, session, input.points)\n for (const group of telemetryObjectGroups(input.points)) {\n const storedObject = objects.get(objectRefKey(group.objectRef))\n if (!storedObject?.effective) {\n throw new MaterializationObjectNotFoundError(\n group.objectRef.objectTypeId,\n group.objectRef.primaryId\n )\n }\n await planTelemetryObject(\n context,\n storage,\n session,\n planContext,\n group,\n workingObjectFromState(storedObject),\n existingPoints,\n counts\n )\n }\n return counts\n}\n\nfunction* telemetryObjectGroups(\n points: readonly TelemetryPointWrite[]\n): Iterable<TelemetryObjectGroup> {\n let start = 0\n while (start < points.length) {\n const objectRef = points[start].series.object\n const objectKey = objectRefKey(objectRef)\n let end = start + 1\n while (end < points.length && objectRefKey(points[end].series.object) === objectKey) {\n end += 1\n }\n yield { objectRef, start, end }\n start = end\n }\n}\n\nasync function planTelemetryObject(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n planContext: TelemetryPlanContext,\n group: TelemetryObjectGroup,\n working: WorkingObject,\n existingPoints: ReadonlyMap<string, StoredTelemetryPoint>,\n counts: MutableTelemetryPlanCounts\n): Promise<void> {\n const latest = new Map(working.latestTelemetry.map((point) => [point.series.propertyId, point]))\n\n for (let start = group.start; start < group.end; start += context.batching.statePageRows) {\n const end = Math.min(group.end, start + context.batching.statePageRows)\n const points = planContext.input.points.slice(start, end)\n const work = planTelemetryChunk(context, planContext, points, existingPoints, latest, counts)\n await stageWorkBounded(context, storage, session, work)\n }\n\n working.latestTelemetry = [...latest.values()]\n await stageTelemetryObjectPlan(context, storage, session, planContext, working, counts)\n}\n\nasync function loadTelemetryObjects(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n points: readonly TelemetryPointWrite[]\n): Promise<ReadonlyMap<string, MaterializationObjectState>> {\n const refs = new Map<string, OntologyObjectRef>()\n for (const point of points) refs.set(objectRefKey(point.series.object), point.series.object)\n const objectState = await loadState(context, storage, session, {\n objects: [...refs.values()],\n links: [],\n linkScopes: [],\n incidentObjects: [],\n points: [],\n })\n return new Map(objectState.objects.map((object) => [objectRefKey(object.ref), object]))\n}\n\nfunction planTelemetryChunk(\n context: Pick<MaterializerContext, \"projectId\">,\n planContext: TelemetryPlanContext,\n points: readonly TelemetryPointWrite[],\n existingPoints: ReadonlyMap<string, StoredTelemetryPoint>,\n latest: Map<string, StoredTelemetryPoint>,\n counts: MutableTelemetryPlanCounts\n): MaterializationWorkRecord[] {\n const work: MaterializationWorkRecord[] = []\n for (const point of points) {\n work.push(...planTelemetryPoint(context, planContext, point, existingPoints, latest, counts))\n }\n return work\n}\n\nasync function loadExistingPoints(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n points: readonly TelemetryPointWrite[]\n): Promise<ReadonlyMap<string, StoredTelemetryPoint>> {\n const existingPoints = new Map<string, StoredTelemetryPoint>()\n for await (const page of storage.streamState({\n session,\n requests: oneStateRequest({\n objects: [],\n links: [],\n linkScopes: [],\n incidentObjects: [],\n points: points.map((point) => ({ series: point.series, at: point.at })),\n }),\n pageRows: context.batching.statePageRows,\n })) {\n for (const existing of page.points) {\n existingPoints.set(telemetryPointKey(existing.series, existing.at), existing)\n }\n }\n context.observeCoreBuffer?.(\"telemetry.existing-points\", existingPoints.size)\n return existingPoints\n}\n\nfunction planTelemetryPoint(\n context: Pick<MaterializerContext, \"projectId\">,\n planContext: TelemetryPlanContext,\n point: TelemetryPointWrite,\n existingPoints: ReadonlyMap<string, StoredTelemetryPoint>,\n latest: Map<string, StoredTelemetryPoint>,\n counts: MutableTelemetryPlanCounts\n): MaterializationWorkRecord[] {\n const identityKey = telemetryPointKey(point.series, point.at)\n const sortKey = telemetryPointSortKey(point.series, point.at)\n const existing = existingPoints.get(identityKey)\n const unchanged = telemetryPointUnchanged(existing, point)\n const work: MaterializationWorkRecord[] = [classificationWork(\"point\", identityKey, sortKey)]\n\n if (unchanged) {\n counts.pointsUnchanged += 1\n } else {\n countTelemetryPointChange(counts, existing)\n work.push(planWork(telemetryPointUpsert(point, existing, planContext.identity), sortKey))\n work.push(eventWork(buildTelemetryEvent(context, planContext, point)))\n }\n\n updateLatestPoint(latest, point, existing, unchanged, planContext.identity)\n return work\n}\n\nfunction telemetryPointUnchanged(\n existing: StoredTelemetryPoint | undefined,\n point: TelemetryPointWrite\n): boolean {\n if (!existing) return false\n return (\n stableJsonStringify({ value: existing.value, unit: existing.unit ?? null }) ===\n stableJsonStringify({ value: point.value, unit: point.unit ?? null })\n )\n}\n\nfunction countTelemetryPointChange(\n counts: MutableTelemetryPlanCounts,\n existing: StoredTelemetryPoint | undefined\n): void {\n if (existing) counts.pointsUpdated += 1\n else counts.pointsCreated += 1\n}\n\nfunction telemetryPointUpsert(\n point: TelemetryPointWrite,\n existing: StoredTelemetryPoint | undefined,\n identity: TimedCommitIdentity\n): MaterializationPlanWorkItem {\n const storedPoint = {\n series: point.series,\n value: point.value,\n at: point.at,\n lastCommitId: identity.commitId,\n }\n const pointWithUnit = storedTelemetryPointWithUnit(storedPoint, point.unit)\n return {\n kind: \"point-upsert\",\n value: {\n point: pointWithUnit,\n expected: {\n series: point.series,\n at: point.at,\n lastCommitId: existing?.lastCommitId ?? null,\n },\n },\n }\n}\n\nfunction storedTelemetryPointWithUnit<T extends object>(\n point: T,\n unit: string | undefined\n): T | (T & { readonly unit: string }) {\n if (unit === undefined) return point\n return { ...point, unit }\n}\n\nfunction buildTelemetryEvent(\n context: Pick<MaterializerContext, \"projectId\">,\n planContext: TelemetryPlanContext,\n point: TelemetryPointWrite\n) {\n const eventContext = telemetryEventContext(context, planContext)\n return buildTelemetryMaterializationEventDraft({ ...eventContext, point })\n}\n\nfunction updateLatestPoint(\n latest: Map<string, StoredTelemetryPoint>,\n point: TelemetryPointWrite,\n existing: StoredTelemetryPoint | undefined,\n unchanged: boolean,\n identity: TimedCommitIdentity\n): void {\n const current = latest.get(point.series.propertyId)\n if (current && point.at < current.at) return\n\n let lastCommitId = identity.commitId\n if (unchanged && existing) lastCommitId = existing.lastCommitId\n const storedPoint = {\n series: point.series,\n value: point.value,\n at: point.at,\n lastCommitId,\n }\n if (point.unit === undefined) {\n latest.set(point.series.propertyId, storedPoint)\n return\n }\n latest.set(point.series.propertyId, { ...storedPoint, unit: point.unit })\n}\n\nasync function stageTelemetryObjectPlan(\n context: MaterializerContext,\n storage: OntologyMaterializationStorage,\n session: MaterializationSession,\n planContext: TelemetryPlanContext,\n working: WorkingObject,\n counts: MutableTelemetryPlanCounts\n): Promise<void> {\n const resolved = resolveObject(context.ontology, working)\n if (resolved) validateEffectiveObject(context.ontology, resolved.ref, resolved.properties)\n const change = diffEffectiveObject({\n before: working.before,\n resolved,\n commitId: planContext.identity.commitId,\n committedAt: planContext.identity.committedAt,\n })\n const sortKey = objectRefSortKey(working.ref)\n const work: MaterializationWorkRecord[] = [\n classificationWork(\"object\", objectRefKey(working.ref), sortKey),\n ]\n if (change) {\n counts.latestObjectsChanged += 1\n const items: MaterializationPlanWorkItem[] = []\n appendObjectEffectivePlan(items, change)\n work.push(...items.map((item) => planWork(item, sortKey)))\n const eventContext = telemetryEventContext(context, planContext)\n work.push(eventWork(buildObjectMaterializationEventDraft({ ...eventContext, change })))\n }\n await stageWorkBounded(context, storage, session, work)\n}\n\nfunction telemetryEventContext(\n context: Pick<MaterializerContext, \"projectId\">,\n planContext: TelemetryPlanContext\n) {\n const eventContext = {\n projectId: context.projectId,\n commitId: planContext.identity.commitId,\n committedAt: planContext.identity.committedAt,\n origin: planContext.origin,\n }\n if (planContext.input.actor === undefined) return eventContext\n return { ...eventContext, actor: planContext.input.actor }\n}\n\nfunction emptyTelemetryCounts(): MutableTelemetryPlanCounts {\n return {\n pointsCreated: 0,\n pointsUpdated: 0,\n pointsUnchanged: 0,\n latestObjectsChanged: 0,\n }\n}\n",
38
- "import {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../materialization/errors\"\nimport type {\n OntologyMaterializationOrigin,\n ProjectionMaterializationIdentity,\n TelemetryAppend,\n TelemetryCommitResult,\n} from \"../../materialization/model\"\nimport { telemetryOwnershipKey } from \"../../materialization/refs\"\nimport type { ProjectionRegistry } from \"../../projections/registry\"\nimport type { ProjectionRunRecord, ProjectionRunStorage } from \"../../storage\"\nimport type {\n MaterializationSession,\n OntologyCommitRecord,\n OntologyCommitWrite,\n TelemetryOntologyCommitIntent,\n} from \"../../storage/ontology\"\nimport type { MaterializerContext, MaterializerStorage } from \"../context\"\nimport { validateTelemetryPoint } from \"../effective/validate\"\nimport {\n replayCommit,\n replayCommitRecord,\n withSerializationRetry,\n} from \"../execution/commit-lifecycle\"\nimport {\n type LockedProjectionExecution,\n lockProjectionRunForMaterialization,\n} from \"../execution/run-correlation\"\nimport { drainStagedEvents, drainStagedWork } from \"../execution/work-executor\"\nimport {\n createProjectionTelemetryIdempotencyKey,\n createRuntimeTelemetryIdempotencyKey,\n createTimedCommitIdentity,\n type TimedCommitIdentity,\n} from \"../shared/identity\"\nimport { normalizeTelemetryAppend } from \"../shared/normalize\"\nimport { createProjectionRunMaterializationIdentity } from \"../shared/projection-run\"\nimport { planTelemetryAppend } from \"./plan\"\n\ntype NormalizedTelemetryAppend = ReturnType<typeof normalizeTelemetryAppend>\ntype NormalizedTelemetrySource = NormalizedTelemetryAppend[\"source\"]\ntype RuntimeTelemetrySource = Extract<NormalizedTelemetrySource, { readonly kind: \"runtime\" }>\ntype ProjectionTelemetrySource = Extract<NormalizedTelemetrySource, { readonly kind: \"projection\" }>\ntype ResolvedTelemetryProjection = ReturnType<ProjectionRegistry[\"resolveTelemetry\"]>\n\ninterface PreparedTelemetryBase {\n readonly input: NormalizedTelemetryAppend\n readonly inputPointCount: number\n readonly ontologyRevision: string\n readonly identity: TimedCommitIdentity\n}\n\ninterface PreparedRuntimeTelemetry extends PreparedTelemetryBase {\n readonly kind: \"runtime\"\n readonly source: RuntimeTelemetrySource\n}\n\ninterface PreparedProjectionTelemetry extends PreparedTelemetryBase {\n readonly kind: \"projection\"\n readonly source: ProjectionTelemetrySource\n readonly resolvedProjection: ResolvedTelemetryProjection\n readonly runIdentity: ProjectionMaterializationIdentity\n}\n\ntype PreparedTelemetryAppend = PreparedRuntimeTelemetry | PreparedProjectionTelemetry\n\nexport async function appendTelemetry(\n context: MaterializerContext,\n raw: TelemetryAppend\n): Promise<TelemetryCommitResult> {\n const command = prepareTelemetryAppend(context, raw)\n if (command.kind === \"runtime\") {\n const replay = await replayCommit<TelemetryCommitResult>(context, command.identity)\n if (replay) return replay\n }\n\n return executeTelemetryCommit(context, command)\n}\n\nfunction prepareTelemetryAppend(\n context: Pick<MaterializerContext, \"projectId\" | \"ontology\" | \"projectionRegistry\" | \"clock\">,\n raw: TelemetryAppend\n): PreparedTelemetryAppend {\n const rawInputPointCount = raw.points.length\n const input = normalizeTelemetryAppend({\n ...raw,\n points: raw.points.map((point) => validateTelemetryPoint(context.ontology, point)),\n })\n const inputPointCount = telemetryInputPointCount(input, rawInputPointCount)\n validateTelemetryBatch(input, inputPointCount)\n\n const ontologyRevision = context.projectionRegistry.ontologyRevision\n if (input.source.kind === \"runtime\") {\n return prepareRuntimeTelemetry(context, input, input.source, inputPointCount, ontologyRevision)\n }\n return prepareProjectionTelemetry(context, input, input.source, inputPointCount, ontologyRevision)\n}\n\nfunction telemetryInputPointCount(\n input: NormalizedTelemetryAppend,\n rawInputPointCount: number\n): number {\n if (input.source.kind === \"projection\") return rawInputPointCount\n return input.points.length\n}\n\nfunction validateTelemetryBatch(input: NormalizedTelemetryAppend, inputPointCount: number): void {\n if (input.source.kind === \"projection\") {\n if (input.source.sourceRowCount === 0) {\n throw new MaterializationValidationError(\n \"Projection telemetry batches must consume at least one source row; an empty dataset produces no batch commit.\"\n )\n }\n if (input.source.sourceRowCount !== inputPointCount + input.source.sourceRowsSkipped) {\n throw new MaterializationValidationError(\n \"Projection telemetry sourceRowCount must equal input points plus skipped rows.\"\n )\n }\n }\n}\n\nfunction prepareRuntimeTelemetry(\n context: Pick<MaterializerContext, \"projectId\" | \"clock\">,\n input: NormalizedTelemetryAppend,\n source: RuntimeTelemetrySource,\n inputPointCount: number,\n ontologyRevision: string\n): PreparedRuntimeTelemetry {\n const identity = createTimedCommitIdentity({\n projectId: context.projectId,\n idempotencyKey: createRuntimeTelemetryIdempotencyKey(source.requestId),\n normalizedCallerIntent: input,\n now: context.clock(),\n })\n return { kind: \"runtime\", input, source, inputPointCount, ontologyRevision, identity }\n}\n\nfunction prepareProjectionTelemetry(\n context: Pick<MaterializerContext, \"projectId\" | \"projectionRegistry\" | \"clock\">,\n input: NormalizedTelemetryAppend,\n source: ProjectionTelemetrySource,\n inputPointCount: number,\n ontologyRevision: string\n): PreparedProjectionTelemetry {\n const resolvedProjection = context.projectionRegistry.resolveTelemetry(\n source.projection.projectionId\n )\n validateTelemetryProjectionDataset(resolvedProjection, source)\n validateTelemetryOwnership(resolvedProjection, input)\n\n const runIdentity = createProjectionRunMaterializationIdentity({\n resolved: resolvedProjection,\n datasetVersion: source.datasetVersion,\n ontologyRevision,\n })\n const identity = createTimedCommitIdentity({\n projectId: context.projectId,\n idempotencyKey: createProjectionTelemetryIdempotencyKey(runIdentity, source.batchOrdinal),\n // Execution ownership is transient: a reclaimed delivery retains the same request hash.\n normalizedCallerIntent: projectionTelemetryCallerIntent(input, source, inputPointCount),\n now: context.clock(),\n })\n return {\n kind: \"projection\",\n input,\n source,\n inputPointCount,\n ontologyRevision,\n identity,\n resolvedProjection,\n runIdentity,\n }\n}\n\nfunction validateTelemetryProjectionDataset(\n resolved: ResolvedTelemetryProjection,\n source: ProjectionTelemetrySource\n): void {\n if (resolved.datasetId === source.datasetVersion.datasetId) return\n throw new MaterializationValidationError(\n `Telemetry projection '${resolved.projectionId}' requires dataset '${resolved.datasetId}'.`\n )\n}\n\nfunction validateTelemetryOwnership(\n resolved: ResolvedTelemetryProjection,\n input: NormalizedTelemetryAppend\n): void {\n const ownedSeries = new Set(\n resolved.ownership.telemetry.map(({ objectTypeId, propertyId }) =>\n telemetryOwnershipKey(objectTypeId, propertyId)\n )\n )\n for (const point of input.points) {\n const scope = telemetryOwnershipKey(point.series.object.objectTypeId, point.series.propertyId)\n if (ownedSeries.has(scope)) continue\n throw new MaterializationValidationError(\n `Telemetry projection '${resolved.projectionId}' does not own series '${point.series.object.objectTypeId}.${point.series.propertyId}'.`\n )\n }\n}\n\nfunction projectionTelemetryCallerIntent(\n input: NormalizedTelemetryAppend,\n source: ProjectionTelemetrySource,\n inputPointCount: number\n) {\n const intent = {\n source: {\n kind: \"projection\" as const,\n projection: source.projection,\n datasetVersion: source.datasetVersion,\n batchOrdinal: source.batchOrdinal,\n sourceRowCount: source.sourceRowCount,\n sourceRowsSkipped: source.sourceRowsSkipped,\n inputExhausted: source.inputExhausted,\n },\n inputPointCount,\n points: input.points,\n }\n if (input.actor === undefined) return intent\n return { ...intent, actor: input.actor }\n}\n\nasync function assertTelemetryExecution(\n storage: MaterializerStorage,\n projectId: string,\n command: PreparedTelemetryAppend\n): Promise<LockedProjectionExecution | null> {\n if (command.kind === \"runtime\") return null\n const execution = await lockProjectionRunForMaterialization(storage, {\n projectId,\n projectionRunId: command.source.execution.projectionRunId,\n executionToken: command.source.execution.executionToken,\n identity: command.runIdentity,\n resolved: command.resolvedProjection,\n capabilityErrorMessage:\n \"Storage does not provide projection run capabilities required by telemetry projection.\",\n })\n assertTelemetryBatchPosition(\n execution.run,\n command.source.batchOrdinal,\n command.source.sourceRowCount,\n command.source.inputExhausted\n )\n return execution\n}\n\nfunction assertTelemetryBatchPosition(\n run: ProjectionRunRecord,\n batchOrdinal: number,\n sourceRowCount: number,\n inputExhausted: boolean\n): void {\n const checkpoint = run.telemetryCheckpoint\n if (!checkpoint) {\n throw new MaterializationValidationError(\n `Telemetry projection run '${run.id}' has incomplete checkpoint state.`\n )\n }\n if (batchOrdinal > checkpoint.nextBatchOrdinal) {\n throw new MaterializationValidationError(\n `Telemetry projection run '${run.id}' expected batch ordinal ${checkpoint.nextBatchOrdinal}, got ${batchOrdinal}.`\n )\n }\n if (checkpoint.inputExhausted && batchOrdinal >= checkpoint.nextBatchOrdinal) {\n throw new MaterializationValidationError(\n `Telemetry projection run '${run.id}' has already exhausted its input.`\n )\n }\n if (sourceRowCount > checkpoint.fixedBatchSize) {\n throw new MaterializationValidationError(\n `Telemetry projection run '${run.id}' batch exceeds its fixed size.`\n )\n }\n if (!inputExhausted && sourceRowCount !== checkpoint.fixedBatchSize) {\n throw new MaterializationValidationError(\n `Telemetry projection run '${run.id}' cannot advance past a partial non-final batch.`\n )\n }\n}\n\nfunction assertTelemetryReplayCheckpoint(run: ProjectionRunRecord, batchOrdinal: number): void {\n if (!run.telemetryCheckpoint || batchOrdinal >= run.telemetryCheckpoint.nextBatchOrdinal) {\n throw new MaterializationValidationError(\n `Telemetry commit batch ${batchOrdinal} exists without an advanced run checkpoint.`\n )\n }\n}\n\nfunction telemetryProjectionReplayResult(\n commit: OntologyCommitRecord,\n command: PreparedProjectionTelemetry\n): TelemetryCommitResult {\n const origin = commit.origin\n if (\n origin.kind !== \"telemetry\" ||\n origin.source.kind !== \"projection\" ||\n origin.source.projectionRunId !== command.source.execution.projectionRunId ||\n origin.source.batchOrdinal !== command.source.batchOrdinal ||\n commit.result.kind !== \"telemetry\"\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Telemetry commit '${commit.id}' belongs to a different logical run or batch.`\n )\n }\n return { ...structuredClone(commit.result), created: false }\n}\n\nasync function executeTelemetryCommit(\n context: MaterializerContext,\n command: PreparedTelemetryAppend\n): Promise<TelemetryCommitResult> {\n return withSerializationRetry(context, () =>\n context.storage.transaction(\n (storage) => executeTelemetryTransaction(context, storage, command),\n { isolation: \"serializable\" }\n )\n )\n}\n\nasync function executeTelemetryTransaction(\n context: MaterializerContext,\n storage: MaterializerStorage,\n command: PreparedTelemetryAppend\n): Promise<TelemetryCommitResult> {\n const execution = await assertTelemetryExecution(storage, context.projectId, command)\n const replay = await replayCommitRecord(context, command.identity, storage)\n if (replay) {\n if (command.kind === \"projection\" && execution) {\n assertTelemetryReplayCheckpoint(execution.run, command.source.batchOrdinal)\n return telemetryProjectionReplayResult(replay, command)\n }\n return { ...structuredClone(replay.result), created: false } as TelemetryCommitResult\n }\n if (command.kind === \"projection\") {\n if (\n !execution?.run.telemetryCheckpoint ||\n execution.run.telemetryCheckpoint.nextBatchOrdinal !== command.source.batchOrdinal\n ) {\n throw new MaterializationValidationError(\n `Telemetry projection batch ${command.source.batchOrdinal} is behind its run checkpoint.`\n )\n }\n }\n\n const origin = telemetryOrigin(command)\n const session = await beginTelemetryMaterialization(context, storage, command, origin)\n const counts = await planTelemetryAppend(\n context,\n storage.ontology.materializations,\n session,\n command.input,\n command.identity,\n origin\n )\n await drainStagedWork(context, storage.ontology.materializations, session)\n const eventCount = await drainStagedEvents(\n context,\n storage.ontology.materializations,\n session,\n command.identity\n )\n const result: TelemetryCommitResult = {\n kind: \"telemetry\",\n commitId: command.identity.commitId,\n created: true,\n eventCount,\n committedAt: command.identity.committedAt,\n ...counts,\n }\n return finalizeTelemetryMaterialization(\n storage,\n session,\n command,\n result,\n execution?.projectionRuns\n )\n}\n\nfunction telemetryOrigin(command: PreparedTelemetryAppend): OntologyMaterializationOrigin {\n if (command.kind === \"runtime\") {\n return { kind: \"telemetry\", source: command.source }\n }\n return {\n kind: \"telemetry\",\n source: {\n kind: \"projection\",\n projectionId: command.source.projection.projectionId,\n projectionRunId: command.source.execution.projectionRunId,\n datasetId: command.source.datasetVersion.datasetId,\n datasetVersionId: command.source.datasetVersion.versionId,\n batchOrdinal: command.source.batchOrdinal,\n },\n }\n}\n\nasync function beginTelemetryMaterialization(\n context: Pick<MaterializerContext, \"projectId\">,\n storage: MaterializerStorage,\n command: PreparedTelemetryAppend,\n origin: OntologyMaterializationOrigin\n): Promise<MaterializationSession> {\n return storage.ontology.materializations.begin({\n commit: telemetryCommit(context.projectId, command, origin),\n expected: {\n sources: [],\n objects: [],\n links: [],\n linkScopes: [],\n points: [],\n },\n })\n}\n\nfunction telemetryCommit(\n projectId: string,\n command: PreparedTelemetryAppend,\n origin: OntologyMaterializationOrigin\n): OntologyCommitWrite {\n const base: OntologyCommitWrite = {\n projectId,\n id: command.identity.commitId,\n idempotencyKey: command.identity.idempotencyKey,\n requestHash: command.identity.requestHash,\n origin,\n ontologyRevision: command.ontologyRevision,\n intent: telemetryCommitIntent(command),\n committedAt: command.identity.committedAt,\n }\n const withActor = telemetryCommitActor(base, command)\n if (command.kind === \"runtime\") return withActor\n return {\n ...withActor,\n projectionRevision: command.resolvedProjection.projectionRevision,\n ownershipHash: command.resolvedProjection.ownershipHash,\n }\n}\n\nfunction telemetryCommitActor(\n commit: OntologyCommitWrite,\n command: PreparedTelemetryAppend\n): OntologyCommitWrite {\n if (command.input.actor === undefined) return commit\n return { ...commit, actor: command.input.actor }\n}\n\nfunction telemetryCommitIntent(command: PreparedTelemetryAppend): TelemetryOntologyCommitIntent {\n if (command.kind === \"runtime\") {\n return {\n kind: \"telemetry\",\n pointCount: command.input.points.length,\n inputPointCount: command.inputPointCount,\n source: { kind: \"runtime\" },\n }\n }\n return {\n kind: \"telemetry\",\n pointCount: command.input.points.length,\n inputPointCount: command.inputPointCount,\n source: {\n kind: \"projection\",\n projection: command.source.projection,\n datasetVersion: command.source.datasetVersion,\n batchOrdinal: command.source.batchOrdinal,\n sourceRowCount: command.source.sourceRowCount,\n sourceRowsSkipped: command.source.sourceRowsSkipped,\n inputExhausted: command.source.inputExhausted,\n },\n }\n}\n\nasync function finalizeTelemetryMaterialization(\n storage: MaterializerStorage,\n session: MaterializationSession,\n command: PreparedTelemetryAppend,\n result: TelemetryCommitResult,\n projectionRuns: ProjectionRunStorage | undefined\n): Promise<TelemetryCommitResult> {\n const applied = await storage.ontology.materializations.finalize({\n session,\n finalization: { sourceActivations: [], result },\n })\n if (command.kind === \"projection\") {\n if (!projectionRuns) {\n throw new MaterializationValidationError(\"Expected an asserted telemetry projection run.\")\n }\n await projectionRuns.advanceTelemetryCheckpoint({\n id: command.source.execution.projectionRunId,\n projectId: applied.commit.projectId,\n executionToken: command.source.execution.executionToken,\n identity: command.runIdentity,\n batchOrdinal: command.source.batchOrdinal,\n batchRowCount: command.source.sourceRowCount,\n batchRowsSkipped: command.source.sourceRowsSkipped,\n inputExhausted: command.source.inputExhausted,\n })\n }\n return applied.commit.result as TelemetryCommitResult\n}\n",
39
- "import type {\n OntologyEditCommit,\n OntologyMaterializer as OntologyMaterializerContract,\n ProjectionRunFinishInput,\n ProjectionSourceReplacement,\n TelemetryAppend,\n} from \"../materialization/model\"\nimport type { OntologyRegistry } from \"../ontology\"\nimport type { ProjectionRegistry } from \"../projections/registry\"\nimport {\n createMaterializerContext,\n type MaterializerContext,\n type MaterializerStorage,\n type OntologyMaterializerDependencies,\n} from \"./context\"\nimport { commitEdits } from \"./edits/commit\"\nimport { finishProjectionRun } from \"./projections/finish-run\"\nimport { replaceProjection } from \"./projections/replace\"\nimport { appendTelemetry } from \"./telemetry/append\"\n\nexport type { MaterializerStorage, OntologyMaterializerDependencies } from \"./context\"\n\nexport class OntologyMaterializer implements OntologyMaterializerContract {\n readonly edits = { commit: (input: OntologyEditCommit) => commitEdits(this.context, input) }\n readonly projections = {\n replace: (input: ProjectionSourceReplacement) => replaceProjection(this.context, input),\n finishRun: (input: ProjectionRunFinishInput) => finishProjectionRun(this.context, input),\n }\n readonly telemetry = { append: (input: TelemetryAppend) => appendTelemetry(this.context, input) }\n\n private readonly context: MaterializerContext\n\n constructor(\n projectId: string,\n ontology: OntologyRegistry,\n projectionRegistry: ProjectionRegistry,\n storage: MaterializerStorage,\n dependencies: OntologyMaterializerDependencies = {}\n ) {\n this.context = createMaterializerContext({\n projectId,\n ontology,\n projections: projectionRegistry,\n storage,\n dependencies,\n })\n }\n}\n\nexport function createOntologyMaterializer(input: {\n readonly projectId: string\n readonly ontology: OntologyRegistry\n readonly projections: ProjectionRegistry\n readonly storage: MaterializerStorage\n readonly dependencies?: OntologyMaterializerDependencies\n}): OntologyMaterializer {\n return new OntologyMaterializer(\n input.projectId,\n input.ontology,\n input.projections,\n input.storage,\n input.dependencies\n )\n}\n"
40
- ],
41
- "mappings": "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",
42
- "debugId": "B1AC0F5B25E653E764756E2164756E21",
43
- "names": []
44
- }