@sixb/core 0.1.16 → 0.1.17

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 (563) hide show
  1. package/dist/actions/index.js +25 -25
  2. package/dist/actions/types/context.d.ts +2 -2
  3. package/dist/actions/types/context.d.ts.map +1 -1
  4. package/dist/actions/worker.js +1 -1
  5. package/dist/agents/index.js +41 -40
  6. package/dist/agents/index.js.map +1 -1
  7. package/dist/auth/index.js +5 -5
  8. package/dist/authorization/index.js +2 -2
  9. package/dist/blob-storage/download-urls.d.ts +41 -0
  10. package/dist/blob-storage/download-urls.d.ts.map +1 -0
  11. package/dist/blob-storage/execution.d.ts +9 -1
  12. package/dist/blob-storage/execution.d.ts.map +1 -1
  13. package/dist/blob-storage/index.js +5 -3
  14. package/dist/blob-storage/index.js.map +1 -1
  15. package/dist/blob-storage/internal.d.ts +2 -0
  16. package/dist/blob-storage/internal.d.ts.map +1 -0
  17. package/dist/blob-storage/internal.js +11 -0
  18. package/dist/blob-storage/internal.js.map +9 -0
  19. package/dist/bootstrap/index.js +45 -44
  20. package/dist/bootstrap/index.js.map +1 -1
  21. package/dist/{chunk-8x74221e.js → chunk-10styjgk.js} +18 -13
  22. package/dist/{chunk-8x74221e.js.map → chunk-10styjgk.js.map} +3 -3
  23. package/dist/{chunk-hgqpcmyr.js → chunk-1hqwggsn.js} +47 -19
  24. package/dist/chunk-1hqwggsn.js.map +12 -0
  25. package/dist/{chunk-zb47r1c8.js → chunk-23xs4qp9.js} +2 -2
  26. package/dist/{chunk-gmdvns8f.js → chunk-2am3db31.js} +2 -2
  27. package/dist/{chunk-fj1dvp37.js → chunk-2vhg6ysa.js} +1 -1
  28. package/dist/{chunk-dp7yk20b.js → chunk-33saed7g.js} +1 -1
  29. package/dist/{chunk-mdnw7nj8.js → chunk-3rrezgyc.js} +33 -8
  30. package/dist/chunk-3rrezgyc.js.map +15 -0
  31. package/dist/{chunk-jgwb25gc.js → chunk-4as3wt1c.js} +13 -5
  32. package/dist/chunk-4as3wt1c.js.map +12 -0
  33. package/dist/chunk-4ra628t7.js +88 -0
  34. package/dist/chunk-4ra628t7.js.map +10 -0
  35. package/dist/{chunk-chdg6eqq.js → chunk-52c5zb0z.js} +2 -2
  36. package/dist/{chunk-69kt9q43.js → chunk-5be2ath4.js} +1 -1
  37. package/dist/{chunk-qnd7ehe5.js → chunk-5thzcb8g.js} +2 -2
  38. package/dist/{chunk-6z1q7j19.js → chunk-5yd8cchh.js} +1126 -780
  39. package/dist/chunk-5yd8cchh.js.map +66 -0
  40. package/dist/{chunk-3q7z9hd4.js → chunk-6wbm6ymz.js} +234 -40
  41. package/dist/{chunk-3q7z9hd4.js.map → chunk-6wbm6ymz.js.map} +8 -6
  42. package/dist/{chunk-kvysp909.js → chunk-7ecp4v7a.js} +26 -19
  43. package/dist/chunk-7ecp4v7a.js.map +17 -0
  44. package/dist/{chunk-f85hpqnm.js → chunk-99nd4rc1.js} +3 -3
  45. package/dist/{chunk-f85hpqnm.js.map → chunk-99nd4rc1.js.map} +3 -3
  46. package/dist/{chunk-dsv8kdgk.js → chunk-9g6jz9kk.js} +5 -5
  47. package/dist/{chunk-39tqv9hz.js → chunk-9se093qz.js} +5 -6
  48. package/dist/{chunk-39tqv9hz.js.map → chunk-9se093qz.js.map} +3 -4
  49. package/dist/{chunk-7g2gjvah.js → chunk-a7er86jd.js} +1 -1
  50. package/dist/{chunk-zdkcdshk.js → chunk-aq39q04r.js} +41 -3
  51. package/dist/{chunk-zdkcdshk.js.map → chunk-aq39q04r.js.map} +4 -3
  52. package/dist/chunk-b9affek3.js +261 -0
  53. package/dist/chunk-b9affek3.js.map +12 -0
  54. package/dist/{chunk-b9y8hcm2.js → chunk-c2rga5cx.js} +1 -1
  55. package/dist/{chunk-f72rbvsb.js → chunk-cnb5kv05.js} +2 -2
  56. package/dist/chunk-d62kjtbg.js.map +2 -2
  57. package/dist/{chunk-vjqt7q3a.js → chunk-dam456ve.js} +233 -34
  58. package/dist/{chunk-vjqt7q3a.js.map → chunk-dam456ve.js.map} +7 -5
  59. package/dist/{chunk-sbcm1b92.js → chunk-e67ynxcr.js} +3 -3
  60. package/dist/{chunk-xnx96gfy.js → chunk-ere85b8y.js} +17 -8
  61. package/dist/chunk-ere85b8y.js.map +15 -0
  62. package/dist/{chunk-k4kkp58d.js → chunk-ewqa58h9.js} +12 -2
  63. package/dist/chunk-ewqa58h9.js.map +11 -0
  64. package/dist/{chunk-cq44v1a6.js → chunk-f1xh7a32.js} +3 -3
  65. package/dist/{chunk-h4138ww2.js → chunk-fggq3d9k.js} +450 -799
  66. package/dist/chunk-fggq3d9k.js.map +49 -0
  67. package/dist/{chunk-kttr5ftm.js → chunk-gf7yht60.js} +3 -3
  68. package/dist/chunk-h8teetr0.js +9 -0
  69. package/dist/chunk-h8teetr0.js.map +10 -0
  70. package/dist/chunk-hn2r7z41.js.map +1 -1
  71. package/dist/{chunk-nj0020ay.js → chunk-jjrn5v0p.js} +1 -1
  72. package/dist/{chunk-nvymebc1.js → chunk-jnfxmr3f.js} +1 -1
  73. package/dist/{chunk-nkbev3tr.js → chunk-k4g51s47.js} +3 -3
  74. package/dist/{chunk-a0073121.js → chunk-kpx7jrmn.js} +3 -1
  75. package/dist/chunk-kpx7jrmn.js.map +12 -0
  76. package/dist/{chunk-h044jb97.js → chunk-pja9jfz6.js} +172 -10
  77. package/dist/chunk-pja9jfz6.js.map +19 -0
  78. package/dist/chunk-pqajwytd.js.map +1 -1
  79. package/dist/{chunk-mr60an99.js → chunk-qczk96d9.js} +22 -2
  80. package/dist/{chunk-mr60an99.js.map → chunk-qczk96d9.js.map} +3 -3
  81. package/dist/{chunk-s3csryxe.js → chunk-rj69qcrd.js} +8 -2
  82. package/dist/chunk-rj69qcrd.js.map +11 -0
  83. package/dist/{chunk-swxzncrv.js → chunk-rpxz486p.js} +32 -5
  84. package/dist/{chunk-swxzncrv.js.map → chunk-rpxz486p.js.map} +4 -4
  85. package/dist/{chunk-tkdbge6v.js → chunk-rx7h5fdx.js} +1 -1
  86. package/dist/{chunk-tnvafr7g.js → chunk-s7ftxrdr.js} +105 -7
  87. package/dist/chunk-s7ftxrdr.js.map +22 -0
  88. package/dist/{chunk-h866d223.js → chunk-sk0hcjsz.js} +1 -1
  89. package/dist/{chunk-2xvgy3x5.js → chunk-svabwqdq.js} +2 -2
  90. package/dist/{chunk-667x4drs.js → chunk-t9shqx3w.js} +2 -2
  91. package/dist/{chunk-40qb8wpe.js → chunk-tjjgy3z4.js} +26 -23
  92. package/dist/{chunk-40qb8wpe.js.map → chunk-tjjgy3z4.js.map} +3 -3
  93. package/dist/{chunk-gkxsenvp.js → chunk-vp3z1ckh.js} +31 -7
  94. package/dist/{chunk-gkxsenvp.js.map → chunk-vp3z1ckh.js.map} +5 -4
  95. package/dist/{chunk-cxj8y8t0.js → chunk-vre348sb.js} +2 -2
  96. package/dist/{chunk-vsvrv7n8.js → chunk-w9yycd3t.js} +1 -1
  97. package/dist/{chunk-g4rbm4a6.js → chunk-wt4szfec.js} +379 -331
  98. package/dist/chunk-wt4szfec.js.map +14 -0
  99. package/dist/{chunk-a7ne02hk.js → chunk-xcy5ddha.js} +6 -6
  100. package/dist/{chunk-zvmr2hqk.js → chunk-xyvy73tj.js} +4 -3
  101. package/dist/{chunk-zvmr2hqk.js.map → chunk-xyvy73tj.js.map} +3 -3
  102. package/dist/datasets/write.js +1 -1
  103. package/dist/execution/agent.js +38 -37
  104. package/dist/execution/agent.js.map +1 -1
  105. package/dist/execution/authorized-object-reader.d.ts +3 -1
  106. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  107. package/dist/execution/primitive.js +36 -35
  108. package/dist/execution/primitive.js.map +2 -2
  109. package/dist/execution/request.js +37 -36
  110. package/dist/execution/request.js.map +2 -2
  111. package/dist/index.d.ts +8 -4
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +62 -59
  114. package/dist/index.js.map +1 -1
  115. package/dist/lake-storage/in-memory.d.ts +5 -1
  116. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  117. package/dist/lake-storage/index.d.ts +1 -1
  118. package/dist/lake-storage/index.d.ts.map +1 -1
  119. package/dist/lake-storage/index.js +2 -2
  120. package/dist/lake-storage/types.d.ts +26 -0
  121. package/dist/lake-storage/types.d.ts.map +1 -1
  122. package/dist/maintenance/ontology-maintenance.d.ts +5 -1
  123. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  124. package/dist/maintenance/types.d.ts +1 -4
  125. package/dist/maintenance/types.d.ts.map +1 -1
  126. package/dist/materialization/event-envelopes.d.ts +20 -0
  127. package/dist/materialization/event-envelopes.d.ts.map +1 -0
  128. package/dist/materialization/events.d.ts +29 -3
  129. package/dist/materialization/events.d.ts.map +1 -1
  130. package/dist/materialization/index.d.ts +4 -1
  131. package/dist/materialization/index.d.ts.map +1 -1
  132. package/dist/materialization/index.js +9 -3
  133. package/dist/materialization/index.js.map +1 -1
  134. package/dist/materializer/edits/plan.d.ts +2 -10
  135. package/dist/materializer/edits/plan.d.ts.map +1 -1
  136. package/dist/materializer/effective/build-events.d.ts +5 -21
  137. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  138. package/dist/materializer/effective/vector-indexing.d.ts +2 -3
  139. package/dist/materializer/effective/vector-indexing.d.ts.map +1 -1
  140. package/dist/materializer/effective/vectors.d.ts +2 -3
  141. package/dist/materializer/effective/vectors.d.ts.map +1 -1
  142. package/dist/materializer/execution/scope.d.ts +1 -11
  143. package/dist/materializer/execution/scope.d.ts.map +1 -1
  144. package/dist/materializer/execution/work-executor.d.ts +5 -7
  145. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  146. package/dist/materializer/execution/work-records.d.ts +1 -3
  147. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  148. package/dist/materializer/index.js +31 -32
  149. package/dist/materializer/index.js.map +1 -1
  150. package/dist/materializer/projections/replace.d.ts.map +1 -1
  151. package/dist/materializer/projections/replacement-plan.d.ts +8 -11
  152. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  153. package/dist/materializer/shared/batching.d.ts +5 -0
  154. package/dist/materializer/shared/batching.d.ts.map +1 -1
  155. package/dist/materializer/telemetry/plan.d.ts +2 -8
  156. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  157. package/dist/models/audio/catalog.d.ts +20 -0
  158. package/dist/models/audio/catalog.d.ts.map +1 -0
  159. package/dist/models/audio/errors.d.ts +8 -0
  160. package/dist/models/audio/errors.d.ts.map +1 -0
  161. package/dist/models/audio/file.d.ts +9 -0
  162. package/dist/models/audio/file.d.ts.map +1 -0
  163. package/dist/models/audio/runtime.d.ts +8 -0
  164. package/dist/models/audio/runtime.d.ts.map +1 -0
  165. package/dist/models/audio/types.d.ts +60 -0
  166. package/dist/models/audio/types.d.ts.map +1 -0
  167. package/dist/models/catalog.d.ts +23 -1
  168. package/dist/models/catalog.d.ts.map +1 -1
  169. package/dist/models/definitions.d.ts +1 -1
  170. package/dist/models/definitions.d.ts.map +1 -1
  171. package/dist/models/events.d.ts +3 -0
  172. package/dist/models/events.d.ts.map +1 -1
  173. package/dist/models/execution/index.js +22 -22
  174. package/dist/models/execution/model-call-admission.d.ts +6 -1
  175. package/dist/models/execution/model-call-admission.d.ts.map +1 -1
  176. package/dist/models/execution/model-call-limits.d.ts.map +1 -1
  177. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  178. package/dist/models/execution/reranking.d.ts +4 -0
  179. package/dist/models/execution/reranking.d.ts.map +1 -0
  180. package/dist/models/execution/usage.d.ts.map +1 -1
  181. package/dist/models/execution.d.ts +2 -1
  182. package/dist/models/execution.d.ts.map +1 -1
  183. package/dist/models/generation-types.d.ts +2 -0
  184. package/dist/models/generation-types.d.ts.map +1 -1
  185. package/dist/models/index.d.ts +7 -1
  186. package/dist/models/index.d.ts.map +1 -1
  187. package/dist/models/index.js +6 -2
  188. package/dist/models/index.js.map +1 -1
  189. package/dist/models/pricing.d.ts +2 -2
  190. package/dist/models/pricing.d.ts.map +1 -1
  191. package/dist/models/reranking-model.d.ts +49 -0
  192. package/dist/models/reranking-model.d.ts.map +1 -0
  193. package/dist/objects/index.js +25 -25
  194. package/dist/objects/query/executor.d.ts +2 -1
  195. package/dist/objects/query/executor.d.ts.map +1 -1
  196. package/dist/objects/query/index.d.ts +1 -1
  197. package/dist/objects/query/index.d.ts.map +1 -1
  198. package/dist/objects/query/index.js +22 -22
  199. package/dist/objects/query/ir.d.ts +8 -1
  200. package/dist/objects/query/ir.d.ts.map +1 -1
  201. package/dist/objects/query/normalize.d.ts.map +1 -1
  202. package/dist/objects/query/planner.d.ts +1 -1
  203. package/dist/objects/query/planner.d.ts.map +1 -1
  204. package/dist/objects/query/primary-id.d.ts +7 -0
  205. package/dist/objects/query/primary-id.d.ts.map +1 -0
  206. package/dist/objects/query/reranking-executor.d.ts +13 -0
  207. package/dist/objects/query/reranking-executor.d.ts.map +1 -0
  208. package/dist/objects/query/reranking-limits.d.ts +3 -0
  209. package/dist/objects/query/reranking-limits.d.ts.map +1 -0
  210. package/dist/objects/query/reranking-query.d.ts +4 -0
  211. package/dist/objects/query/reranking-query.d.ts.map +1 -0
  212. package/dist/objects/query/validate.d.ts.map +1 -1
  213. package/dist/objects/sdk/query-builder.d.ts +8 -0
  214. package/dist/objects/sdk/query-builder.d.ts.map +1 -1
  215. package/dist/objects/sdk/query-executor.d.ts +2 -2
  216. package/dist/objects/sdk/query-executor.d.ts.map +1 -1
  217. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  218. package/dist/objects/vectors/indexing-dispatch.d.ts +21 -0
  219. package/dist/objects/vectors/indexing-dispatch.d.ts.map +1 -0
  220. package/dist/objects/vectors/query.d.ts.map +1 -1
  221. package/dist/ontology/builders.d.ts.map +1 -1
  222. package/dist/ontology/index.d.ts +1 -1
  223. package/dist/ontology/index.d.ts.map +1 -1
  224. package/dist/ontology/index.js +3 -3
  225. package/dist/ontology/internal.js +2 -2
  226. package/dist/ontology/query-capabilities.d.ts +1 -0
  227. package/dist/ontology/query-capabilities.d.ts.map +1 -1
  228. package/dist/ontology/types.d.ts +20 -0
  229. package/dist/ontology/types.d.ts.map +1 -1
  230. package/dist/ontology/validation/query.d.ts.map +1 -1
  231. package/dist/pipelines/index.js +23 -23
  232. package/dist/projections/internal.js +22 -22
  233. package/dist/query.d.ts +4 -2
  234. package/dist/query.d.ts.map +1 -1
  235. package/dist/query.js +2 -2
  236. package/dist/queues/in-memory.d.ts +3 -0
  237. package/dist/queues/in-memory.d.ts.map +1 -1
  238. package/dist/queues/index.js +1 -1
  239. package/dist/queues/types.d.ts +4 -0
  240. package/dist/queues/types.d.ts.map +1 -1
  241. package/dist/runtime/host.d.ts +1 -0
  242. package/dist/runtime/host.d.ts.map +1 -1
  243. package/dist/runtime/index.d.ts +1 -1
  244. package/dist/runtime/index.d.ts.map +1 -1
  245. package/dist/runtime/internal.d.ts +1 -0
  246. package/dist/runtime/internal.d.ts.map +1 -1
  247. package/dist/runtime/internal.js +28 -26
  248. package/dist/runtime/internal.js.map +1 -1
  249. package/dist/runtime/public-origin.d.ts +10 -0
  250. package/dist/runtime/public-origin.d.ts.map +1 -0
  251. package/dist/runtime/sixb.d.ts +1 -0
  252. package/dist/runtime/sixb.d.ts.map +1 -1
  253. package/dist/runtime/types.d.ts +12 -2
  254. package/dist/runtime/types.d.ts.map +1 -1
  255. package/dist/sandboxes/index.js +5 -5
  256. package/dist/shares/internal.js +19 -19
  257. package/dist/storage/agents/provider.js +2 -2
  258. package/dist/storage/ai-cost/analytics.d.ts +1 -0
  259. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  260. package/dist/storage/ai-cost/provider.js +3 -3
  261. package/dist/storage/ai-cost/types.d.ts +1 -1
  262. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  263. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  264. package/dist/storage/ai-limits/enforcement.js +2 -2
  265. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -1
  266. package/dist/storage/ai-limits/provider.d.ts +7 -2
  267. package/dist/storage/ai-limits/provider.d.ts.map +1 -1
  268. package/dist/storage/ai-limits/provider.js +4 -2
  269. package/dist/storage/ai-limits/provider.js.map +1 -1
  270. package/dist/storage/ai-limits/types.d.ts +3 -0
  271. package/dist/storage/ai-limits/types.d.ts.map +1 -1
  272. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  273. package/dist/storage/ai-usage/types.d.ts +8 -4
  274. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  275. package/dist/storage/ai-usage/usage.d.ts.map +1 -1
  276. package/dist/storage/file-download-grants/in-memory.d.ts +11 -0
  277. package/dist/storage/file-download-grants/in-memory.d.ts.map +1 -0
  278. package/dist/storage/file-download-grants/index.d.ts +3 -0
  279. package/dist/storage/file-download-grants/index.d.ts.map +1 -0
  280. package/dist/storage/file-download-grants/record.d.ts +11 -0
  281. package/dist/storage/file-download-grants/record.d.ts.map +1 -0
  282. package/dist/storage/file-download-grants/types.d.ts +44 -0
  283. package/dist/storage/file-download-grants/types.d.ts.map +1 -0
  284. package/dist/storage/file-upload-sessions/provider.js +6 -6
  285. package/dist/storage/in-memory/index.d.ts +4 -0
  286. package/dist/storage/in-memory/index.d.ts.map +1 -1
  287. package/dist/storage/index.d.ts +5 -3
  288. package/dist/storage/index.d.ts.map +1 -1
  289. package/dist/storage/index.js +30 -30
  290. package/dist/storage/index.js.map +1 -1
  291. package/dist/storage/internal.d.ts +1 -0
  292. package/dist/storage/internal.d.ts.map +1 -1
  293. package/dist/storage/internal.js +8 -4
  294. package/dist/storage/internal.js.map +1 -1
  295. package/dist/storage/migrations/index.d.ts +1 -1
  296. package/dist/storage/migrations/index.d.ts.map +1 -1
  297. package/dist/storage/migrations/migrate-storage.d.ts +3 -3
  298. package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
  299. package/dist/storage/migrations/types.d.ts +7 -0
  300. package/dist/storage/migrations/types.d.ts.map +1 -1
  301. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  302. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
  303. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
  304. package/dist/storage/objects/query-preparation.d.ts +39 -0
  305. package/dist/storage/objects/query-preparation.d.ts.map +1 -0
  306. package/dist/storage/objects/types.d.ts +2 -0
  307. package/dist/storage/objects/types.d.ts.map +1 -1
  308. package/dist/storage/ontology/commits.d.ts +1 -6
  309. package/dist/storage/ontology/commits.d.ts.map +1 -1
  310. package/dist/storage/ontology/in-memory/index.d.ts +4 -2
  311. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  312. package/dist/storage/ontology/in-memory/materializations-state.d.ts +0 -2
  313. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  314. package/dist/storage/ontology/in-memory/materializations-work.d.ts +1 -3
  315. package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
  316. package/dist/storage/ontology/in-memory/materializations.d.ts +23 -57
  317. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  318. package/dist/storage/ontology/in-memory/outbox.d.ts +3 -2
  319. package/dist/storage/ontology/in-memory/outbox.d.ts.map +1 -1
  320. package/dist/storage/ontology/in-memory/replacement-plans.d.ts +104 -0
  321. package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -0
  322. package/dist/storage/ontology/in-memory/shared-state.d.ts +17 -2
  323. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  324. package/dist/storage/ontology/in-memory/source-roots.d.ts +3 -1
  325. package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -1
  326. package/dist/storage/ontology/in-memory/sources.d.ts +1 -2
  327. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  328. package/dist/storage/ontology/in-memory/state-reader.d.ts +25 -0
  329. package/dist/storage/ontology/in-memory/state-reader.d.ts.map +1 -0
  330. package/dist/storage/ontology/index.d.ts +6 -3
  331. package/dist/storage/ontology/index.d.ts.map +1 -1
  332. package/dist/storage/ontology/materializations.d.ts +40 -59
  333. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  334. package/dist/storage/ontology/outbox.d.ts +4 -6
  335. package/dist/storage/ontology/outbox.d.ts.map +1 -1
  336. package/dist/storage/ontology/provider-work.d.ts +114 -3
  337. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  338. package/dist/storage/ontology/provider.d.ts +14 -39
  339. package/dist/storage/ontology/provider.d.ts.map +1 -1
  340. package/dist/storage/ontology/provider.js +26 -12
  341. package/dist/storage/ontology/provider.js.map +1 -1
  342. package/dist/storage/ontology/replacement-plans.d.ts +103 -0
  343. package/dist/storage/ontology/replacement-plans.d.ts.map +1 -0
  344. package/dist/storage/ontology/sources.d.ts +0 -8
  345. package/dist/storage/ontology/sources.d.ts.map +1 -1
  346. package/dist/storage/operation-scope.d.ts.map +1 -1
  347. package/dist/storage/operation-scope.js +1 -1
  348. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  349. package/dist/storage/projection-runs/types.d.ts +2 -0
  350. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  351. package/dist/storage/types.d.ts +2 -0
  352. package/dist/storage/types.d.ts.map +1 -1
  353. package/dist/storage/workflow-runs/provider.js +6 -6
  354. package/dist/syncs/index.js +24 -24
  355. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  356. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
  357. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  358. package/dist/testing/file-download-grant-storage-contract.d.ts +9 -0
  359. package/dist/testing/file-download-grant-storage-contract.d.ts.map +1 -0
  360. package/dist/testing/index.d.ts +1 -0
  361. package/dist/testing/index.d.ts.map +1 -1
  362. package/dist/testing/index.js +2549 -1490
  363. package/dist/testing/index.js.map +14 -13
  364. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  365. package/dist/testing/materializer-storage-contract.d.ts +14 -0
  366. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  367. package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
  368. package/dist/testing/ontology-contract-fixture.d.ts +5 -1
  369. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  370. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  371. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  372. package/dist/testing/queues-contract.d.ts.map +1 -1
  373. package/dist/webhooks/internal.js +20 -20
  374. package/dist/workers/index.js +15 -17
  375. package/dist/workers/index.js.map +3 -3
  376. package/dist/workers/queue-worker.d.ts +3 -2
  377. package/dist/workers/queue-worker.d.ts.map +1 -1
  378. package/dist/workflows/index.js +42 -41
  379. package/dist/workflows/index.js.map +1 -1
  380. package/package.json +7 -1
  381. package/src/actions/types/context.ts +5 -2
  382. package/src/blob-storage/download-urls.ts +138 -0
  383. package/src/blob-storage/execution.ts +32 -1
  384. package/src/blob-storage/internal.ts +1 -0
  385. package/src/execution/authorized-object-reader.ts +8 -1
  386. package/src/index.ts +25 -0
  387. package/src/lake-storage/in-memory.ts +38 -9
  388. package/src/lake-storage/index.ts +2 -0
  389. package/src/lake-storage/types.ts +30 -0
  390. package/src/maintenance/ontology-maintenance.ts +50 -23
  391. package/src/maintenance/types.ts +1 -4
  392. package/src/materialization/event-envelopes.ts +168 -0
  393. package/src/materialization/events.ts +40 -4
  394. package/src/materialization/index.ts +9 -1
  395. package/src/materializer/README.md +55 -10
  396. package/src/materializer/edits/commit.ts +3 -19
  397. package/src/materializer/edits/plan.ts +20 -71
  398. package/src/materializer/effective/build-events.ts +42 -136
  399. package/src/materializer/effective/vector-indexing.ts +2 -3
  400. package/src/materializer/effective/vectors.ts +2 -3
  401. package/src/materializer/execution/scope.ts +1 -38
  402. package/src/materializer/execution/work-executor.ts +21 -115
  403. package/src/materializer/execution/work-records.ts +0 -15
  404. package/src/materializer/projections/replace.ts +106 -63
  405. package/src/materializer/projections/replacement-plan.ts +73 -218
  406. package/src/materializer/shared/batching.ts +7 -0
  407. package/src/materializer/telemetry/append.ts +2 -14
  408. package/src/materializer/telemetry/plan.ts +6 -43
  409. package/src/models/audio/catalog.ts +90 -0
  410. package/src/models/audio/errors.ts +19 -0
  411. package/src/models/audio/file.ts +78 -0
  412. package/src/models/audio/runtime.ts +182 -0
  413. package/src/models/audio/types.ts +69 -0
  414. package/src/models/catalog.ts +52 -5
  415. package/src/models/definitions.ts +8 -1
  416. package/src/models/events.ts +3 -0
  417. package/src/models/execution/README.md +20 -1
  418. package/src/models/execution/model-call-admission.ts +6 -1
  419. package/src/models/execution/model-call-limits.ts +21 -11
  420. package/src/models/execution/model-call-recorder.ts +1 -0
  421. package/src/models/execution/model-call-recovery.ts +1 -0
  422. package/src/models/execution/reranking.ts +137 -0
  423. package/src/models/execution/usage.ts +1 -0
  424. package/src/models/execution.ts +5 -1
  425. package/src/models/generation-types.ts +2 -0
  426. package/src/models/index.ts +32 -0
  427. package/src/models/pricing.ts +2 -1
  428. package/src/models/reranking-model.ts +114 -0
  429. package/src/objects/query/executor.ts +42 -2
  430. package/src/objects/query/explain.ts +8 -0
  431. package/src/objects/query/index.ts +1 -0
  432. package/src/objects/query/ir.ts +10 -0
  433. package/src/objects/query/normalize.ts +2 -0
  434. package/src/objects/query/planner.ts +12 -1
  435. package/src/objects/query/primary-id.ts +56 -0
  436. package/src/objects/query/reranking-executor.ts +91 -0
  437. package/src/objects/query/reranking-limits.ts +3 -0
  438. package/src/objects/query/reranking-query.ts +8 -0
  439. package/src/objects/query/validate.ts +33 -1
  440. package/src/objects/sdk/query-builder.ts +15 -2
  441. package/src/objects/sdk/query-executor.ts +2 -2
  442. package/src/objects/sdk/runtime-query-executor.ts +7 -4
  443. package/src/objects/vectors/README.md +6 -2
  444. package/src/objects/vectors/indexing-dispatch.ts +83 -0
  445. package/src/objects/vectors/query.ts +3 -0
  446. package/src/ontology/builders.ts +1 -0
  447. package/src/ontology/index.ts +2 -0
  448. package/src/ontology/query-capabilities.ts +1 -1
  449. package/src/ontology/types.ts +21 -0
  450. package/src/ontology/validation/query.ts +57 -0
  451. package/src/query.ts +4 -0
  452. package/src/queues/in-memory.ts +54 -19
  453. package/src/queues/types.ts +4 -0
  454. package/src/runtime/host.ts +28 -1
  455. package/src/runtime/index.ts +1 -0
  456. package/src/runtime/internal.ts +1 -0
  457. package/src/runtime/public-origin.ts +33 -0
  458. package/src/runtime/sixb.ts +13 -2
  459. package/src/runtime/types.ts +12 -2
  460. package/src/storage/ai-cost/analytics.ts +2 -0
  461. package/src/storage/ai-cost/codec.ts +2 -1
  462. package/src/storage/ai-cost/types.ts +1 -0
  463. package/src/storage/ai-cost/validation.ts +21 -8
  464. package/src/storage/ai-limits/in-memory.ts +10 -2
  465. package/src/storage/ai-limits/provider.ts +29 -2
  466. package/src/storage/ai-limits/types.ts +3 -0
  467. package/src/storage/ai-usage/record.ts +9 -0
  468. package/src/storage/ai-usage/types.ts +8 -4
  469. package/src/storage/ai-usage/usage.ts +2 -0
  470. package/src/storage/file-download-grants/in-memory.ts +73 -0
  471. package/src/storage/file-download-grants/index.ts +8 -0
  472. package/src/storage/file-download-grants/record.ts +47 -0
  473. package/src/storage/file-download-grants/types.ts +48 -0
  474. package/src/storage/in-memory/index.ts +13 -2
  475. package/src/storage/index.ts +31 -13
  476. package/src/storage/internal.ts +1 -0
  477. package/src/storage/migrations/index.ts +1 -0
  478. package/src/storage/migrations/migrate-storage.ts +36 -12
  479. package/src/storage/migrations/types.ts +8 -0
  480. package/src/storage/objects/in-memory/query.ts +2 -0
  481. package/src/storage/objects/in-memory/selected-reader.ts +1 -0
  482. package/src/storage/objects/in-memory/storage.ts +1 -0
  483. package/src/storage/objects/query-preparation.ts +77 -0
  484. package/src/storage/objects/types.ts +2 -0
  485. package/src/storage/ontology/commits.ts +1 -6
  486. package/src/storage/ontology/in-memory/index.ts +28 -9
  487. package/src/storage/ontology/in-memory/materializations-finalization.ts +35 -68
  488. package/src/storage/ontology/in-memory/materializations-state.ts +0 -22
  489. package/src/storage/ontology/in-memory/materializations-work.ts +0 -45
  490. package/src/storage/ontology/in-memory/materializations.ts +172 -653
  491. package/src/storage/ontology/in-memory/outbox.ts +37 -29
  492. package/src/storage/ontology/in-memory/replacement-plans.ts +697 -0
  493. package/src/storage/ontology/in-memory/shared-state.ts +24 -2
  494. package/src/storage/ontology/in-memory/source-roots.ts +7 -2
  495. package/src/storage/ontology/in-memory/sources.ts +7 -33
  496. package/src/storage/ontology/in-memory/state-reader.ts +245 -0
  497. package/src/storage/ontology/index.ts +19 -13
  498. package/src/storage/ontology/materializations.ts +45 -74
  499. package/src/storage/ontology/outbox.ts +4 -7
  500. package/src/storage/ontology/provider-header-validation.ts +0 -57
  501. package/src/storage/ontology/provider-work.ts +381 -90
  502. package/src/storage/ontology/provider.ts +74 -171
  503. package/src/storage/ontology/replacement-plans.ts +117 -0
  504. package/src/storage/ontology/sources.ts +0 -12
  505. package/src/storage/operation-scope.ts +33 -1
  506. package/src/storage/projection-runs/in-memory.ts +7 -1
  507. package/src/storage/projection-runs/types.ts +2 -0
  508. package/src/storage/types.ts +2 -0
  509. package/src/testing/ai-cost-storage-contract.ts +1 -0
  510. package/src/testing/ai-limit-storage-contract.ts +62 -0
  511. package/src/testing/ai-usage-storage-contract.ts +31 -0
  512. package/src/testing/file-download-grant-storage-contract.ts +139 -0
  513. package/src/testing/index.ts +4 -0
  514. package/src/testing/lake-storage-contract.ts +87 -1
  515. package/src/testing/materializer-storage-contract.ts +1008 -1
  516. package/src/testing/object-read-scope-contract.ts +1 -0
  517. package/src/testing/ontology-contract-fixture.ts +11 -87
  518. package/src/testing/ontology-storage-contract.ts +70 -39
  519. package/src/testing/projection-run-storage-contract.ts +14 -0
  520. package/src/testing/queues-contract.ts +59 -0
  521. package/src/workers/queue-worker.ts +19 -16
  522. package/dist/chunk-6z1q7j19.js.map +0 -62
  523. package/dist/chunk-7ytf06d3.js +0 -113
  524. package/dist/chunk-7ytf06d3.js.map +0 -10
  525. package/dist/chunk-a0073121.js.map +0 -12
  526. package/dist/chunk-g4rbm4a6.js.map +0 -15
  527. package/dist/chunk-h044jb97.js.map +0 -15
  528. package/dist/chunk-h4138ww2.js.map +0 -50
  529. package/dist/chunk-hgqpcmyr.js.map +0 -12
  530. package/dist/chunk-jgwb25gc.js.map +0 -12
  531. package/dist/chunk-k4kkp58d.js.map +0 -11
  532. package/dist/chunk-kvysp909.js.map +0 -17
  533. package/dist/chunk-mdnw7nj8.js.map +0 -15
  534. package/dist/chunk-s3csryxe.js.map +0 -11
  535. package/dist/chunk-tnvafr7g.js.map +0 -19
  536. package/dist/chunk-xnx96gfy.js.map +0 -15
  537. package/dist/materializer/execution/plan-stream.d.ts +0 -8
  538. package/dist/materializer/execution/plan-stream.d.ts.map +0 -1
  539. package/src/materializer/execution/plan-stream.ts +0 -121
  540. /package/dist/{chunk-zb47r1c8.js.map → chunk-23xs4qp9.js.map} +0 -0
  541. /package/dist/{chunk-gmdvns8f.js.map → chunk-2am3db31.js.map} +0 -0
  542. /package/dist/{chunk-fj1dvp37.js.map → chunk-2vhg6ysa.js.map} +0 -0
  543. /package/dist/{chunk-dp7yk20b.js.map → chunk-33saed7g.js.map} +0 -0
  544. /package/dist/{chunk-chdg6eqq.js.map → chunk-52c5zb0z.js.map} +0 -0
  545. /package/dist/{chunk-69kt9q43.js.map → chunk-5be2ath4.js.map} +0 -0
  546. /package/dist/{chunk-qnd7ehe5.js.map → chunk-5thzcb8g.js.map} +0 -0
  547. /package/dist/{chunk-dsv8kdgk.js.map → chunk-9g6jz9kk.js.map} +0 -0
  548. /package/dist/{chunk-7g2gjvah.js.map → chunk-a7er86jd.js.map} +0 -0
  549. /package/dist/{chunk-b9y8hcm2.js.map → chunk-c2rga5cx.js.map} +0 -0
  550. /package/dist/{chunk-f72rbvsb.js.map → chunk-cnb5kv05.js.map} +0 -0
  551. /package/dist/{chunk-sbcm1b92.js.map → chunk-e67ynxcr.js.map} +0 -0
  552. /package/dist/{chunk-cq44v1a6.js.map → chunk-f1xh7a32.js.map} +0 -0
  553. /package/dist/{chunk-kttr5ftm.js.map → chunk-gf7yht60.js.map} +0 -0
  554. /package/dist/{chunk-nj0020ay.js.map → chunk-jjrn5v0p.js.map} +0 -0
  555. /package/dist/{chunk-nvymebc1.js.map → chunk-jnfxmr3f.js.map} +0 -0
  556. /package/dist/{chunk-nkbev3tr.js.map → chunk-k4g51s47.js.map} +0 -0
  557. /package/dist/{chunk-tkdbge6v.js.map → chunk-rx7h5fdx.js.map} +0 -0
  558. /package/dist/{chunk-h866d223.js.map → chunk-sk0hcjsz.js.map} +0 -0
  559. /package/dist/{chunk-2xvgy3x5.js.map → chunk-svabwqdq.js.map} +0 -0
  560. /package/dist/{chunk-667x4drs.js.map → chunk-t9shqx3w.js.map} +0 -0
  561. /package/dist/{chunk-cxj8y8t0.js.map → chunk-vre348sb.js.map} +0 -0
  562. /package/dist/{chunk-vsvrv7n8.js.map → chunk-w9yycd3t.js.map} +0 -0
  563. /package/dist/{chunk-a7ne02hk.js.map → chunk-xcy5ddha.js.map} +0 -0
@@ -579,6 +579,7 @@ export function runObjectReadScopeContractSuite<TStorage extends Storage>(
579
579
  ],
580
580
  })
581
581
  ).toEqual({
582
+ total: 1,
582
583
  facets: [
583
584
  { propertyId: "category", buckets: [{ value: "visible", count: 1 }] },
584
585
  { propertyId: "secret", buckets: [] },
@@ -3,7 +3,6 @@ import { createEventId } from "../materialization/identity"
3
3
  import type {
4
4
  MaterializationPlanHeader,
5
5
  MaterializationWorkRecord,
6
- OntologyMaterializationEvent,
7
6
  OntologyStorage,
8
7
  } from "../storage/ontology"
9
8
  import type { Storage } from "../storage/types"
@@ -12,24 +11,6 @@ export interface OntologyContractStorage extends Storage {
12
11
  readonly ontology: OntologyStorage
13
12
  }
14
13
 
15
- const emptyChunk = {
16
- overrides: {
17
- objects: { upserts: [], deletes: [] },
18
- links: {
19
- edges: { upserts: [], deletes: [] },
20
- slots: { upserts: [], deletes: [] },
21
- },
22
- },
23
- effective: {
24
- objectUpserts: [],
25
- objectDeletes: [],
26
- linkUpserts: [],
27
- linkDeletes: [],
28
- },
29
- timeseries: { pointUpserts: [] },
30
- outbox: [],
31
- } as const
32
-
33
14
  /** The request executor `ensureContractExecution` records for a contract commit. */
34
15
  export function contractExecutor(id: string) {
35
16
  return { type: "request" as const, requestId: `contract-request:${id}` }
@@ -44,7 +25,6 @@ export function contractEditHeader(id: string): MaterializationPlanHeader {
44
25
  requestHash: `hash:${id}`,
45
26
  executionId: `contract-execution:${id}`,
46
27
  origin: { kind: "runtime", requestId: id },
47
- executor: contractExecutor(id),
48
28
  ontologyRevision: "ontology-contract-revision",
49
29
  intent: { kind: "edit", mode: "atomic", operationCount: 0 },
50
30
  committedAt: CONTRACT_COMMITTED_AT,
@@ -78,6 +58,7 @@ export async function commitEmptyEdit(storage: OntologyContractStorage, id: stri
78
58
  const header = contractEditHeader(id)
79
59
  await ensureContractExecution(tx, header)
80
60
  const session = await tx.ontology.materializations.begin(header)
61
+ await tx.ontology.materializations.apply({ session })
81
62
  await tx.ontology.materializations.finalize({
82
63
  session,
83
64
  finalization: { sourceActivations: [], result: contractEditResult(id) },
@@ -101,11 +82,7 @@ export async function commitExactObject(
101
82
  readonly requestedBy?: AuthorizablePrincipal
102
83
  } = {}
103
84
  ): Promise<{ readonly eventId: string }> {
104
- const defaultHeader = contractEditHeader(id)
105
- const header: MaterializationPlanHeader =
106
- options.requestedBy === undefined
107
- ? defaultHeader
108
- : { ...defaultHeader, commit: { ...defaultHeader.commit, requestedBy: options.requestedBy } }
85
+ const header = contractEditHeader(id)
109
86
  const ref = { objectTypeId: "ContractDevice", primaryId: options.primaryId ?? id }
110
87
  const row = {
111
88
  ref,
@@ -117,30 +94,13 @@ export async function commitExactObject(
117
94
  }
118
95
  const exactWrite = { row, expected: { ref, exists: false as const } }
119
96
  const draft = {
120
- schemaVersion: 1 as const,
121
- projectId: header.commit.projectId,
122
- occurredAt: header.commit.committedAt,
123
- correlationId: `contract-correlation:${id}`,
124
- origin: header.commit.origin,
125
- ...(header.commit.requestedBy === undefined ? {} : { requestedBy: header.commit.requestedBy }),
126
- executor: header.commit.executor,
127
- commitId: id,
128
97
  type: "object.created" as const,
129
- topic: "objects" as const,
130
- partitionKey: `${ref.objectTypeId}:${ref.primaryId}`,
131
98
  payload: {
132
99
  objectTypeId: ref.objectTypeId,
133
100
  primaryId: ref.primaryId,
134
101
  properties: row.properties,
135
- propertyChanges: {},
136
102
  },
137
103
  }
138
- const eventId = createEventId(header.commit.projectId, id, 0)
139
- const envelope: OntologyMaterializationEvent = {
140
- ...draft,
141
- id: eventId,
142
- commitOrdinal: 0,
143
- }
144
104
  const work: readonly MaterializationWorkRecord[] = [
145
105
  {
146
106
  kind: "plan",
@@ -159,52 +119,12 @@ export async function commitExactObject(
159
119
  ]
160
120
 
161
121
  await storage.transaction(async (tx) => {
162
- await ensureContractExecution(tx, header)
122
+ await ensureContractExecution(tx, header, options.requestedBy)
163
123
  const materializations = tx.ontology.materializations
164
124
  const session = await materializations.begin(header)
165
125
  await materializations.stageWork({ session, records: work })
166
126
 
167
- const applyRecords = []
168
- for await (const page of materializations.streamWork({
169
- session,
170
- order: "apply",
171
- pageRows: 1,
172
- })) {
173
- applyRecords.push(...page.records)
174
- }
175
- const objectUpserts = applyRecords.flatMap((record) =>
176
- record.kind === "plan" && record.item.kind === "object-upsert" ? [record.item.value] : []
177
- )
178
- await materializations.applyChunk({
179
- session,
180
- chunk: {
181
- ...emptyChunk,
182
- effective: { ...emptyChunk.effective, objectUpserts },
183
- },
184
- })
185
-
186
- const eventRecords = []
187
- for await (const page of materializations.streamWork({
188
- session,
189
- order: "event",
190
- pageRows: 1,
191
- })) {
192
- eventRecords.push(...page.records)
193
- }
194
- await materializations.applyChunk({
195
- session,
196
- chunk: {
197
- ...emptyChunk,
198
- outbox: eventRecords.map((record) => {
199
- if (record.kind !== "event") throw new Error("Expected event work record.")
200
- return {
201
- envelope,
202
- availableAt: header.commit.committedAt,
203
- createdAt: header.commit.committedAt,
204
- }
205
- }),
206
- },
207
- })
127
+ await materializations.apply({ session })
208
128
  if (!options.omitFinalize) {
209
129
  await materializations.finalize({
210
130
  session,
@@ -214,12 +134,17 @@ export async function commitExactObject(
214
134
  if (options.throwAfterFinalize) throw new Error("contract rollback")
215
135
  })
216
136
 
217
- return { eventId }
137
+ return { eventId: createEventId(header.commit.projectId, id, 0) }
218
138
  }
219
139
 
140
+ /**
141
+ * Records the execution a contract commit runs under: a request, made on behalf of `requestedBy`
142
+ * when given. Its events read who asked and what wrote from this record.
143
+ */
220
144
  export async function ensureContractExecution(
221
145
  storage: Pick<Storage, "executions">,
222
- header: MaterializationPlanHeader
146
+ header: MaterializationPlanHeader,
147
+ requestedBy?: AuthorizablePrincipal
223
148
  ): Promise<void> {
224
149
  if (
225
150
  await storage.executions.getById({
@@ -229,7 +154,6 @@ export async function ensureContractExecution(
229
154
  ) {
230
155
  return
231
156
  }
232
- const { requestedBy } = header.commit
233
157
  await storage.executions.create({
234
158
  id: header.commit.executionId,
235
159
  projectId: header.commit.projectId,
@@ -149,7 +149,9 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
149
149
  })
150
150
  })
151
151
 
152
- test("round-trips commit and event attribution exactly", async () => {
152
+ // Removal proof: rebuild an event's attribution from anything but its commit's execution; the
153
+ // requester and correlation id below no longer match.
154
+ test("attributes events to their commit's execution, which the commit does not copy", async () => {
153
155
  await withStorage(async (storage) => {
154
156
  // The requester is a real principal: SQL executions reference it by foreign key.
155
157
  if (!storage.auth) throw new Error("The attribution contract requires auth storage.")
@@ -166,15 +168,10 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
166
168
  projectId: "contract-project",
167
169
  id: "attributed",
168
170
  })
169
- expect(attributed?.requestedBy).toEqual(requestedBy)
170
- expect(attributed?.executor).toEqual(contractExecutor("attributed"))
171
- expect(attributed).not.toHaveProperty("actor")
172
- const unattributed = await storage.ontology.commits.getById({
173
- projectId: "contract-project",
174
- id: "unattributed",
175
- })
176
- expect(unattributed).not.toHaveProperty("requestedBy")
177
- expect(unattributed?.executor).toEqual(contractExecutor("unattributed"))
171
+ expect(attributed?.executionId).toBe("contract-execution:attributed")
172
+ for (const copy of ["requestedBy", "executor", "correlationId", "actor"]) {
173
+ expect(attributed).not.toHaveProperty(copy)
174
+ }
178
175
 
179
176
  const claimed = await storage.ontology.outbox.claim({
180
177
  projectId: "contract-project",
@@ -185,10 +182,12 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
185
182
  })
186
183
  const envelopes = new Map(claimed.map((record) => [record.envelope.commitId, record]))
187
184
  expect(envelopes.get("attributed")?.envelope).toMatchObject({
185
+ correlationId: "contract-correlation:attributed",
188
186
  requestedBy,
189
187
  executor: contractExecutor("attributed"),
190
188
  })
191
189
  const unattributedEnvelope = envelopes.get("unattributed")?.envelope
190
+ expect(unattributedEnvelope?.correlationId).toBe("contract-correlation:unattributed")
192
191
  expect(unattributedEnvelope?.executor).toEqual(contractExecutor("unattributed"))
193
192
  expect(unattributedEnvelope).not.toHaveProperty("requestedBy")
194
193
  })
@@ -200,6 +199,7 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
200
199
  await expect(
201
200
  storage.transaction(async (tx) => {
202
201
  const session = await tx.ontology.materializations.begin(header)
202
+ await tx.ontology.materializations.apply({ session })
203
203
  await tx.ontology.materializations.finalize({
204
204
  session,
205
205
  finalization: {
@@ -460,9 +460,6 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
460
460
  adoptedAt: "2026-01-01T00:02:10.000Z",
461
461
  })
462
462
  ).toBeNull()
463
- expect(
464
- await storage.ontology.sources.summarizeTerminal({ projectId: "contract-project" })
465
- ).toEqual({ count: 1, oldestTerminalAt: "2026-01-01T00:02:00.000Z" })
466
463
 
467
464
  // Superseded retention does not hold an abandoned candidate back.
468
465
  expect(
@@ -482,8 +479,8 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
482
479
  await storage.ontology.sources.purgeAbandoned({ projectId: "contract-project", limit: 1 })
483
480
  ).toEqual({ rowsDeleted: 0, materializationsDeleted: 1 })
484
481
  expect(
485
- await storage.ontology.sources.summarizeTerminal({ projectId: "contract-project" })
486
- ).toEqual({ count: 0, oldestTerminalAt: null })
482
+ await storage.ontology.sources.purgeAbandoned({ projectId: "contract-project", limit: 1 })
483
+ ).toEqual({ rowsDeleted: 0, materializationsDeleted: 0 })
487
484
  })
488
485
  })
489
486
 
@@ -603,6 +600,7 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
603
600
  origin: { kind: "projection", projectionRunId: first.execution.projectionRunId },
604
601
  })
605
602
  ).toMatchObject({ id: "commit-source-one" })
603
+ // An active candidate has no plan to open again.
606
604
  await expect(
607
605
  activateEmptyCandidate(
608
606
  storage,
@@ -611,6 +609,39 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
611
609
  "duplicate-projection-origin",
612
610
  "2026-01-03T01:00:00.000Z"
613
611
  )
612
+ ).rejects.toMatchObject({ kind: "source-materialization" })
613
+ // Another candidate of the same run reaches its commit, which repeats the run's origin.
614
+ const again = { ...first, materializationId: "candidate-one-again" }
615
+ await storage.ontology.sources.beginMaterialization({
616
+ projectId: "contract-project",
617
+ source: again.source,
618
+ materializationId: again.materializationId,
619
+ execution: again.execution,
620
+ projectionKind: "object",
621
+ protocol: "replacement",
622
+ datasetVersion: again.identity.datasetVersion,
623
+ projectionRevision: again.identity.projectionRevision,
624
+ ownershipHash: again.identity.ownershipHash,
625
+ ontologyRevision: again.identity.ontologyRevision,
626
+ createdAt: "2026-01-03T00:30:00.000Z",
627
+ })
628
+ await storage.ontology.sources.markReady({
629
+ projectId: "contract-project",
630
+ source: again.source,
631
+ materializationId: again.materializationId,
632
+ execution: again.execution,
633
+ rootCount: 0,
634
+ assertionCount: 0,
635
+ readyAt: "2026-01-03T00:31:00.000Z",
636
+ })
637
+ await expect(
638
+ activateEmptyCandidate(
639
+ storage,
640
+ again,
641
+ activeOne,
642
+ "duplicate-projection-origin",
643
+ "2026-01-03T01:00:00.000Z"
644
+ )
614
645
  ).rejects.toMatchObject({ kind: "run-correlation" })
615
646
 
616
647
  const left = await createReadyEmptyCandidate(storage, "run-left", "candidate-left", "02")
@@ -928,6 +959,7 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
928
959
  }
929
960
  const header = telemetryHeader(identity, run.run.id, run.run.executionId)
930
961
  const session = await tx.ontology.materializations.begin(header)
962
+ await tx.ontology.materializations.apply({ session })
931
963
  await tx.ontology.materializations.finalize({
932
964
  session,
933
965
  finalization: {
@@ -1055,12 +1087,6 @@ async function activateEmptyCandidate(
1055
1087
  datasetId: candidate.identity.datasetVersion.datasetId,
1056
1088
  datasetVersionId: candidate.identity.datasetVersion.versionId,
1057
1089
  },
1058
- executor: {
1059
- type: "primitive",
1060
- kind: "projection",
1061
- id: candidate.source.projectionId,
1062
- runId: candidate.execution.projectionRunId,
1063
- },
1064
1090
  ontologyRevision: candidate.identity.ontologyRevision,
1065
1091
  projectionRevision: candidate.identity.projectionRevision,
1066
1092
  ownershipHash: candidate.identity.ownershipHash,
@@ -1099,6 +1125,22 @@ async function activateEmptyCandidate(
1099
1125
  counts: emptyProjectionCounts,
1100
1126
  },
1101
1127
  }
1128
+ const plan = {
1129
+ projectId: header.commit.projectId,
1130
+ source: candidate.source,
1131
+ materializationId: candidate.materializationId,
1132
+ execution: candidate.execution,
1133
+ }
1134
+ await storage.ontology.replacementPlans.open({ ...plan, commit: header.commit })
1135
+ for (const entityKind of ["object", "link"] as const) {
1136
+ for await (const _page of storage.ontology.replacementPlans.streamState({
1137
+ ...plan,
1138
+ entityKind,
1139
+ pageRows: 1,
1140
+ })) {
1141
+ // Empty output intentionally has no identities to plan.
1142
+ }
1143
+ }
1102
1144
  await storage.transaction(async (tx) => {
1103
1145
  if (!tx.projectionRuns) {
1104
1146
  throw new Error("Contract transaction omitted required storage facades.")
@@ -1109,18 +1151,13 @@ async function activateEmptyCandidate(
1109
1151
  identity: candidate.identity,
1110
1152
  executionToken: candidate.execution.executionToken,
1111
1153
  })
1112
- const session = await tx.ontology.materializations.begin(header)
1113
- for (const entityKind of ["object", "link"] as const) {
1114
- for await (const _page of tx.ontology.materializations.streamSourceReplacementState({
1115
- session,
1116
- source: candidate.source,
1117
- candidateMaterializationId: candidate.materializationId,
1118
- entityKind,
1119
- pageRows: 1,
1120
- })) {
1121
- // Empty output intentionally has no classifications or exact writes.
1122
- }
1123
- }
1154
+ const status = await tx.ontology.replacementPlans.refresh(plan)
1155
+ if (!status.fresh) throw new Error("An empty plan has nothing to plan again.")
1156
+ const session = await tx.ontology.materializations.begin({
1157
+ ...header,
1158
+ plan: { source: candidate.source, materializationId: candidate.materializationId },
1159
+ })
1160
+ await tx.ontology.materializations.apply({ session })
1124
1161
  await tx.ontology.materializations.finalize({ session, finalization })
1125
1162
  })
1126
1163
  }
@@ -1149,12 +1186,6 @@ function telemetryHeader(
1149
1186
  batchOrdinal: 0,
1150
1187
  },
1151
1188
  },
1152
- executor: {
1153
- type: "primitive",
1154
- kind: "projection",
1155
- id: identity.projectionId,
1156
- runId: projectionRunId,
1157
- },
1158
1189
  ontologyRevision: identity.ontologyRevision,
1159
1190
  projectionRevision: identity.projectionRevision,
1160
1191
  ownershipHash: identity.ownershipHash,
@@ -155,6 +155,20 @@ export function runProjectionRunStorageContractSuite<TStorage extends Projection
155
155
  status: "failed",
156
156
  error: { code: "queue.enqueue_failed", message: "queue unavailable" },
157
157
  })
158
+ const failedWith = (errorCodes: ProjectionRunFailureCode[]) =>
159
+ context.projectionRuns.list({
160
+ projectId: input.projectId,
161
+ statuses: ["failed"],
162
+ errorCodes,
163
+ })
164
+ await expect(failedWith(["queue.enqueue_failed"])).resolves.toMatchObject({
165
+ runs: [{ id: input.id }],
166
+ total: 1,
167
+ })
168
+ await expect(failedWith(["projection.execution_failed"])).resolves.toMatchObject({
169
+ total: 0,
170
+ })
171
+ await expect(failedWith([])).resolves.toMatchObject({ total: 0 })
158
172
 
159
173
  const requeued = await context.projectionRuns.queue(admission)
160
174
  expect(requeued).toMatchObject({
@@ -278,6 +278,65 @@ export function runQueueContractSuite(label: string, options: QueueContractSuite
278
278
  })
279
279
  })
280
280
 
281
+ test("with a signal, waits for work and wakes when a job is enqueued", async () => {
282
+ await withQueues(async (queues) => {
283
+ let settled = false
284
+ const claim = queues.syncRuns
285
+ .claim({
286
+ projectId: "project-a",
287
+ workerId: "worker-1",
288
+ signal: AbortSignal.timeout(4_000),
289
+ })
290
+ .finally(() => {
291
+ settled = true
292
+ })
293
+ await Bun.sleep(50)
294
+ expect(settled).toBe(false)
295
+
296
+ await queues.syncRuns.enqueue({
297
+ projectId: "project-a",
298
+ jobs: [{ type: "sync.run.requested", payload: { runId: "s-1" } }],
299
+ })
300
+
301
+ expect((await claim).map((claimed) => claimed.job.payload.runId)).toEqual(["s-1"])
302
+ })
303
+ })
304
+
305
+ test("with a signal, wakes when a delayed job comes due", async () => {
306
+ await withQueues(async (queues) => {
307
+ const availableAt = new Date(Date.now() + shortLeaseMs).toISOString()
308
+ await queues.syncRuns.enqueue({
309
+ projectId: "project-a",
310
+ jobs: [{ type: "sync.run.requested", payload: { runId: "s-1" }, availableAt }],
311
+ })
312
+
313
+ const claimed = await queues.syncRuns.claim({
314
+ projectId: "project-a",
315
+ workerId: "worker-1",
316
+ signal: AbortSignal.timeout(4_000),
317
+ })
318
+
319
+ expect(claimed).toHaveLength(1)
320
+ expect(Date.now()).toBeGreaterThanOrEqual(Date.parse(availableAt))
321
+ })
322
+ })
323
+
324
+ // A provider may finish a blocking read before it sees the abort; BullMQ's lasts up to 5s.
325
+ test("with a signal, returns empty once the signal aborts", async () => {
326
+ await withQueues(async (queues) => {
327
+ const waiting = new AbortController()
328
+ const claim = queues.syncRuns.claim({
329
+ projectId: "project-a",
330
+ workerId: "worker-1",
331
+ signal: waiting.signal,
332
+ })
333
+ await Bun.sleep(20)
334
+ waiting.abort()
335
+
336
+ expect(await claim).toEqual([])
337
+ })
338
+ }, 10_000)
339
+
281
340
  test("isolates jobs across distinct projectIds", async () => {
282
341
  await withQueues(async (queues) => {
283
342
  await queues.syncRuns.enqueue({
@@ -26,7 +26,6 @@ export interface QueueWorkerConfig<
26
26
  readonly workerId: string
27
27
  readonly leaseMs?: number
28
28
  readonly claimLimit?: number
29
- readonly idlePollMs?: number
30
29
  }
31
30
 
32
31
  /**
@@ -48,7 +47,7 @@ export type QueueWorkerFailureDecision<TFailureCode extends SixbErrorCode = neve
48
47
 
49
48
  const DEFAULT_LEASE_MS = 15 * 60_000
50
49
  const DEFAULT_CLAIM_LIMIT = 1
51
- const DEFAULT_IDLE_POLL_MS = 1_000
50
+ const CLAIM_FAILURE_DELAY_MS = 1_000
52
51
  const MAX_CONSECUTIVE_CLAIM_FAILURES = 5
53
52
 
54
53
  export abstract class QueueWorker<
@@ -56,6 +55,8 @@ export abstract class QueueWorker<
56
55
  TFailureCodes extends QueueWorkerFailureCodes,
57
56
  > extends Worker {
58
57
  protected readonly config: Required<QueueWorkerConfig<TJob, TFailureCodes>>
58
+ /** Pause after a failed claim. Overridable so tests do not wait out real backoffs. */
59
+ protected readonly claimFailureDelayMs: number = CLAIM_FAILURE_DELAY_MS
59
60
  private consecutiveClaimFailures = 0
60
61
 
61
62
  constructor(config: QueueWorkerConfig<TJob, TFailureCodes>) {
@@ -67,7 +68,6 @@ export abstract class QueueWorker<
67
68
  workerId: config.workerId,
68
69
  leaseMs: config.leaseMs ?? DEFAULT_LEASE_MS,
69
70
  claimLimit: normalizeClaimLimit(config.claimLimit),
70
- idlePollMs: config.idlePollMs ?? DEFAULT_IDLE_POLL_MS,
71
71
  }
72
72
  }
73
73
 
@@ -79,6 +79,9 @@ export abstract class QueueWorker<
79
79
  protected async run(signal: AbortSignal): Promise<void> {
80
80
  const inFlight = new Set<Promise<void>>()
81
81
  let runError: unknown = null
82
+ // A claim waits for work, so a failed job must also end the wait it would otherwise sit in.
83
+ const failed = new AbortController()
84
+ const claimSignal = AbortSignal.any([signal, failed.signal])
82
85
 
83
86
  try {
84
87
  while (!signal.aborted && !runError) {
@@ -90,11 +93,12 @@ export abstract class QueueWorker<
90
93
  }
91
94
 
92
95
  const capacity = this.config.claimLimit - inFlight.size
93
- const claimed = await this.claimOrIdle(signal, capacity)
96
+ const claimed = await this.claim(claimSignal, capacity)
94
97
  for (const claimedJob of claimed) {
95
98
  const promise = this.handle(claimedJob, signal)
96
99
  .catch((error) => {
97
100
  runError ??= error
101
+ failed.abort()
98
102
  })
99
103
  .finally(() => {
100
104
  inFlight.delete(promise)
@@ -137,23 +141,22 @@ export abstract class QueueWorker<
137
141
  return { kind: "retry" }
138
142
  }
139
143
 
140
- private async claimOrIdle(
144
+ private async claim(
141
145
  signal: AbortSignal,
142
146
  limit: number
143
147
  ): Promise<readonly ClaimedQueueJob<TJob>[]> {
144
- const { projectId, queue, workerId, leaseMs, idlePollMs } = this.config
148
+ const { projectId, queue, workerId, leaseMs } = this.config
145
149
 
146
150
  try {
147
- const claimed = await queue.claim({
148
- projectId,
149
- workerId,
150
- limit,
151
- leaseMs,
152
- })
153
- this.consecutiveClaimFailures = 0
154
- if (claimed.length === 0) {
155
- await sleep(idlePollMs, signal).catch(() => {})
151
+ // The provider waits until it has work or `signal` aborts, so there is no idle loop here.
152
+ const claimed = await queue.claim({ projectId, workerId, limit, leaseMs, signal })
153
+ if (claimed.length === 0 && !signal.aborted) {
154
+ // A provider that ignores the signal would otherwise spin this loop on a whole core.
155
+ throw new Error(
156
+ "[SixbQueueWorker] Queue claim returned no jobs before its signal aborted; the queue provider contract says claim must wait for work until its signal aborts."
157
+ )
156
158
  }
159
+ this.consecutiveClaimFailures = 0
157
160
  return claimed
158
161
  } catch (error) {
159
162
  if (signal.aborted) return []
@@ -165,7 +168,7 @@ export abstract class QueueWorker<
165
168
  { cause: error }
166
169
  )
167
170
  }
168
- await sleep(idlePollMs, signal).catch(() => {})
171
+ await sleep(this.claimFailureDelayMs, signal).catch(() => {})
169
172
  return []
170
173
  }
171
174
  }