@sixb/core 0.1.9 → 0.1.10

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 (279) hide show
  1. package/dist/actions/index.js +8 -8
  2. package/dist/agents/index.js +16 -15
  3. package/dist/agents/index.js.map +1 -1
  4. package/dist/bootstrap/index.js +20 -19
  5. package/dist/bootstrap/index.js.map +1 -1
  6. package/dist/broker/in-memory.d.ts +8 -2
  7. package/dist/broker/in-memory.d.ts.map +1 -1
  8. package/dist/broker/index.d.ts +4 -2
  9. package/dist/broker/index.d.ts.map +1 -1
  10. package/dist/broker/index.js +7 -3
  11. package/dist/broker/index.js.map +1 -1
  12. package/dist/broker/retention.d.ts +4 -0
  13. package/dist/broker/retention.d.ts.map +1 -0
  14. package/dist/broker/subscriber.d.ts +10 -0
  15. package/dist/broker/subscriber.d.ts.map +1 -0
  16. package/dist/broker/types.d.ts +14 -1
  17. package/dist/broker/types.d.ts.map +1 -1
  18. package/dist/{chunk-k3cqkkn2.js → chunk-1824gssz.js} +30 -65
  19. package/dist/chunk-1824gssz.js.map +12 -0
  20. package/dist/{chunk-h1gfhhbh.js → chunk-28ja2cjs.js} +1 -1
  21. package/dist/chunk-2c4j899j.js.map +1 -1
  22. package/dist/{chunk-ppytyr6w.js → chunk-358caqf5.js} +4 -4
  23. package/dist/chunk-358caqf5.js.map +12 -0
  24. package/dist/{chunk-kxwa347f.js → chunk-3qms4nax.js} +2 -2
  25. package/dist/{chunk-kxwa347f.js.map → chunk-3qms4nax.js.map} +3 -3
  26. package/dist/{chunk-emyyk7dx.js → chunk-5c7ga8zz.js} +22 -145
  27. package/dist/chunk-5c7ga8zz.js.map +12 -0
  28. package/dist/{chunk-hpr1r6av.js → chunk-5p1v802y.js} +46 -39
  29. package/dist/{chunk-hpr1r6av.js.map → chunk-5p1v802y.js.map} +4 -4
  30. package/dist/{chunk-zcnq6105.js → chunk-85cd7e8c.js} +2 -1
  31. package/dist/chunk-85cd7e8c.js.map +10 -0
  32. package/dist/{chunk-1enhpacz.js → chunk-976rxdpx.js} +5 -5
  33. package/dist/{chunk-3f7veca0.js → chunk-9x8dybsb.js} +3 -3
  34. package/dist/chunk-9x8dybsb.js.map +10 -0
  35. package/dist/{chunk-r29fxdhn.js → chunk-aa6z4a19.js} +160 -44
  36. package/dist/chunk-aa6z4a19.js.map +12 -0
  37. package/dist/{chunk-r4tfx1sf.js → chunk-agbbygvh.js} +4 -4
  38. package/dist/{chunk-jjy0fhrn.js → chunk-b0ec55a1.js} +20 -3
  39. package/dist/chunk-b0ec55a1.js.map +12 -0
  40. package/dist/{chunk-xfbydgzy.js → chunk-bn138h9w.js} +7 -8
  41. package/dist/{chunk-xfbydgzy.js.map → chunk-bn138h9w.js.map} +3 -3
  42. package/dist/{chunk-an5tt9y0.js → chunk-ftv470j8.js} +42 -4
  43. package/dist/{chunk-an5tt9y0.js.map → chunk-ftv470j8.js.map} +7 -7
  44. package/dist/{chunk-0w35wavj.js → chunk-g7knyczr.js} +1 -1
  45. package/dist/{chunk-x57ycxq0.js → chunk-gqh45d2n.js} +42 -3
  46. package/dist/{chunk-x57ycxq0.js.map → chunk-gqh45d2n.js.map} +3 -3
  47. package/dist/{chunk-0rdrecsb.js → chunk-kfee1h52.js} +116 -32
  48. package/dist/chunk-kfee1h52.js.map +13 -0
  49. package/dist/{chunk-ypbtykv6.js → chunk-nmbxcaqx.js} +1 -1
  50. package/dist/{chunk-3tgwrcyh.js → chunk-nt99sxd6.js} +2 -2
  51. package/dist/{chunk-3tgwrcyh.js.map → chunk-nt99sxd6.js.map} +3 -3
  52. package/dist/{chunk-vf691g1r.js → chunk-p5vcsw9c.js} +2 -2
  53. package/dist/{chunk-mjbk2djy.js → chunk-p6a4npdx.js} +211 -106
  54. package/dist/{chunk-mjbk2djy.js.map → chunk-p6a4npdx.js.map} +9 -8
  55. package/dist/{chunk-3frsnm7x.js → chunk-qma80ych.js} +4 -6
  56. package/dist/chunk-qma80ych.js.map +11 -0
  57. package/dist/{chunk-qhcpj9wc.js → chunk-qyeptdyv.js} +96 -2
  58. package/dist/chunk-qyeptdyv.js.map +15 -0
  59. package/dist/{chunk-52hbv0ak.js → chunk-r7fj830t.js} +101 -48
  60. package/dist/chunk-r7fj830t.js.map +36 -0
  61. package/dist/{chunk-xyr8kppc.js → chunk-rtk71jzp.js} +1 -1
  62. package/dist/{chunk-m3z3x9v0.js → chunk-t1f4f1ve.js} +1 -1
  63. package/dist/chunk-v2vcg0w6.js +151 -0
  64. package/dist/chunk-v2vcg0w6.js.map +11 -0
  65. package/dist/connectors/connections/authorizations.d.ts.map +1 -1
  66. package/dist/connectors/connections/contracts.d.ts +3 -0
  67. package/dist/connectors/connections/contracts.d.ts.map +1 -1
  68. package/dist/connectors/connections/internal.js +1 -1
  69. package/dist/connectors/connections/request.d.ts +3 -1
  70. package/dist/connectors/connections/request.d.ts.map +1 -1
  71. package/dist/connectors/connections/runs.d.ts.map +1 -1
  72. package/dist/connectors/connections/tokens.d.ts.map +1 -1
  73. package/dist/connectors/connections/validation.d.ts +5 -1
  74. package/dist/connectors/connections/validation.d.ts.map +1 -1
  75. package/dist/connectors/types.d.ts +19 -4
  76. package/dist/connectors/types.d.ts.map +1 -1
  77. package/dist/events/execution.d.ts +1 -1
  78. package/dist/events/execution.d.ts.map +1 -1
  79. package/dist/events/index.js +1 -1
  80. package/dist/events/service.d.ts +2 -2
  81. package/dist/events/service.d.ts.map +1 -1
  82. package/dist/execution/agent.js +16 -15
  83. package/dist/execution/agent.js.map +1 -1
  84. package/dist/execution/primitive.js +16 -15
  85. package/dist/execution/primitive.js.map +2 -2
  86. package/dist/execution/request.js +16 -15
  87. package/dist/execution/request.js.map +2 -2
  88. package/dist/index.d.ts +3 -3
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +30 -28
  91. package/dist/index.js.map +1 -1
  92. package/dist/lake-storage/changes.d.ts +5 -0
  93. package/dist/lake-storage/changes.d.ts.map +1 -0
  94. package/dist/lake-storage/in-memory.d.ts +2 -1
  95. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  96. package/dist/lake-storage/index.d.ts +2 -1
  97. package/dist/lake-storage/index.d.ts.map +1 -1
  98. package/dist/lake-storage/index.js +4 -2
  99. package/dist/lake-storage/index.js.map +1 -1
  100. package/dist/lake-storage/types.d.ts +36 -0
  101. package/dist/lake-storage/types.d.ts.map +1 -1
  102. package/dist/logging/internal.js +1 -1
  103. package/dist/materialization/index.d.ts +1 -1
  104. package/dist/materialization/index.d.ts.map +1 -1
  105. package/dist/materialization/model.d.ts +12 -1
  106. package/dist/materialization/model.d.ts.map +1 -1
  107. package/dist/materializer/index.d.ts +1 -1
  108. package/dist/materializer/index.d.ts.map +1 -1
  109. package/dist/materializer/index.js +5 -5
  110. package/dist/materializer/materializer.d.ts +5 -1
  111. package/dist/materializer/materializer.d.ts.map +1 -1
  112. package/dist/materializer/projections/entry-validator.d.ts +2 -1
  113. package/dist/materializer/projections/entry-validator.d.ts.map +1 -1
  114. package/dist/materializer/projections/replace.d.ts.map +1 -1
  115. package/dist/materializer/projections/source-materialization.d.ts +4 -3
  116. package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
  117. package/dist/materializer/shared/normalize.d.ts +2 -1
  118. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  119. package/dist/models/execution/index.js +5 -5
  120. package/dist/objects/index.js +9 -9
  121. package/dist/objects/query/index.js +5 -5
  122. package/dist/pipelines/index.js +6 -6
  123. package/dist/pipelines/run-dispatch.d.ts.map +1 -1
  124. package/dist/projections/internal.js +6 -8
  125. package/dist/projections/internal.js.map +1 -1
  126. package/dist/projections/run-dispatch.d.ts.map +1 -1
  127. package/dist/queues/in-memory.d.ts +7 -3
  128. package/dist/queues/in-memory.d.ts.map +1 -1
  129. package/dist/queues/index.js +1 -1
  130. package/dist/queues/indexed-heap.d.ts +15 -0
  131. package/dist/queues/indexed-heap.d.ts.map +1 -0
  132. package/dist/runtime/host.d.ts.map +1 -1
  133. package/dist/runtime/internal.js +1 -1
  134. package/dist/runtime/ontology-mutations.d.ts +3 -1
  135. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  136. package/dist/shares/internal.js +4 -4
  137. package/dist/storage/connector-connections/in-memory.d.ts.map +1 -1
  138. package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -1
  139. package/dist/storage/connector-connections/provider.js +2 -2
  140. package/dist/storage/connector-connections/provider.js.map +3 -3
  141. package/dist/storage/connector-connections/types.d.ts +3 -2
  142. package/dist/storage/connector-connections/types.d.ts.map +1 -1
  143. package/dist/storage/index.d.ts +1 -1
  144. package/dist/storage/index.d.ts.map +1 -1
  145. package/dist/storage/index.js +4 -4
  146. package/dist/storage/internal.js +1 -1
  147. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  148. package/dist/storage/ontology/in-memory/materializations.d.ts +1 -1
  149. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  150. package/dist/storage/ontology/in-memory/shared-state.d.ts +15 -2
  151. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  152. package/dist/storage/ontology/in-memory/source-roots.d.ts +6 -0
  153. package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -0
  154. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  155. package/dist/storage/ontology/index.d.ts +1 -1
  156. package/dist/storage/ontology/index.d.ts.map +1 -1
  157. package/dist/storage/ontology/provider.d.ts +16 -0
  158. package/dist/storage/ontology/provider.d.ts.map +1 -1
  159. package/dist/storage/ontology/provider.js +4 -2
  160. package/dist/storage/ontology/provider.js.map +1 -1
  161. package/dist/storage/ontology/sources.d.ts +13 -4
  162. package/dist/storage/ontology/sources.d.ts.map +1 -1
  163. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  164. package/dist/storage/projection-runs/provider.js +2 -2
  165. package/dist/storage/projection-runs/types.d.ts +2 -0
  166. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  167. package/dist/syncs/index.js +8 -7
  168. package/dist/syncs/index.js.map +1 -1
  169. package/dist/syncs/run-dispatch.d.ts.map +1 -1
  170. package/dist/testing/broker-contract.d.ts.map +1 -1
  171. package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -1
  172. package/dist/testing/index.d.ts +1 -0
  173. package/dist/testing/index.d.ts.map +1 -1
  174. package/dist/testing/index.js +1459 -951
  175. package/dist/testing/index.js.map +9 -8
  176. package/dist/testing/lake-changes-contract.d.ts +6 -0
  177. package/dist/testing/lake-changes-contract.d.ts.map +1 -0
  178. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  179. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  180. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  181. package/dist/webhooks/connections.d.ts +6 -0
  182. package/dist/webhooks/connections.d.ts.map +1 -0
  183. package/dist/webhooks/index.d.ts +1 -1
  184. package/dist/webhooks/index.d.ts.map +1 -1
  185. package/dist/webhooks/internal.d.ts +2 -0
  186. package/dist/webhooks/internal.d.ts.map +1 -1
  187. package/dist/webhooks/internal.js +54 -9
  188. package/dist/webhooks/internal.js.map +4 -3
  189. package/dist/webhooks/registry.d.ts +1 -1
  190. package/dist/webhooks/registry.d.ts.map +1 -1
  191. package/dist/webhooks/types.d.ts +15 -4
  192. package/dist/webhooks/types.d.ts.map +1 -1
  193. package/dist/workflows/index.js +17 -16
  194. package/dist/workflows/index.js.map +1 -1
  195. package/dist/workflows/run-dispatch.d.ts +3 -1
  196. package/dist/workflows/run-dispatch.d.ts.map +1 -1
  197. package/package.json +1 -1
  198. package/src/broker/in-memory.ts +104 -39
  199. package/src/broker/index.ts +4 -1
  200. package/src/broker/retention.ts +28 -0
  201. package/src/broker/subscriber.ts +21 -0
  202. package/src/broker/types.ts +15 -1
  203. package/src/connectors/builders.ts +0 -6
  204. package/src/connectors/connections/authorizations.ts +11 -5
  205. package/src/connectors/connections/contracts.ts +3 -0
  206. package/src/connectors/connections/request.ts +56 -22
  207. package/src/connectors/connections/runs.ts +1 -0
  208. package/src/connectors/connections/tokens.ts +4 -0
  209. package/src/connectors/connections/validation.ts +91 -5
  210. package/src/connectors/types.ts +19 -4
  211. package/src/events/execution.ts +2 -2
  212. package/src/events/service.ts +3 -3
  213. package/src/index.ts +10 -2
  214. package/src/lake-storage/changes.ts +43 -0
  215. package/src/lake-storage/in-memory.ts +73 -0
  216. package/src/lake-storage/index.ts +4 -0
  217. package/src/lake-storage/types.ts +40 -0
  218. package/src/logging/service.ts +1 -1
  219. package/src/materialization/index.ts +2 -0
  220. package/src/materialization/model.ts +14 -1
  221. package/src/materializer/index.ts +2 -0
  222. package/src/materializer/materializer.ts +10 -0
  223. package/src/materializer/projections/entry-validator.ts +19 -1
  224. package/src/materializer/projections/replace.ts +36 -1
  225. package/src/materializer/projections/source-materialization.ts +26 -6
  226. package/src/materializer/shared/normalize.ts +1 -1
  227. package/src/pipelines/run-dispatch.ts +21 -1
  228. package/src/projections/run-dispatch.ts +30 -68
  229. package/src/queues/in-memory.ts +105 -62
  230. package/src/queues/indexed-heap.ts +74 -0
  231. package/src/runtime/host.ts +0 -14
  232. package/src/runtime/ontology-mutations.ts +4 -0
  233. package/src/storage/connector-connections/in-memory.ts +3 -1
  234. package/src/storage/connector-connections/provider/runs.ts +3 -1
  235. package/src/storage/connector-connections/types.ts +3 -2
  236. package/src/storage/index.ts +1 -0
  237. package/src/storage/ontology/in-memory/materializations-state.ts +5 -18
  238. package/src/storage/ontology/in-memory/materializations.ts +73 -92
  239. package/src/storage/ontology/in-memory/shared-state.ts +26 -1
  240. package/src/storage/ontology/in-memory/source-roots.ts +123 -0
  241. package/src/storage/ontology/in-memory/sources.ts +78 -23
  242. package/src/storage/ontology/index.ts +1 -0
  243. package/src/storage/ontology/provider.ts +70 -0
  244. package/src/storage/ontology/sources.ts +14 -3
  245. package/src/storage/projection-runs/lifecycle.ts +5 -2
  246. package/src/storage/projection-runs/types.ts +4 -3
  247. package/src/syncs/run-dispatch.ts +19 -1
  248. package/src/testing/broker-contract.ts +95 -0
  249. package/src/testing/connector-connection-storage-contract.ts +18 -1
  250. package/src/testing/index.ts +1 -0
  251. package/src/testing/lake-changes-contract.ts +240 -0
  252. package/src/testing/materializer-storage-contract.ts +172 -1
  253. package/src/testing/ontology-storage-contract.ts +7 -0
  254. package/src/testing/projection-run-storage-contract.ts +34 -0
  255. package/src/webhooks/connections.ts +56 -0
  256. package/src/webhooks/index.ts +2 -0
  257. package/src/webhooks/internal.ts +2 -0
  258. package/src/webhooks/registry.ts +3 -4
  259. package/src/webhooks/types.ts +17 -4
  260. package/src/workflows/run-dispatch.ts +42 -29
  261. package/dist/chunk-0rdrecsb.js.map +0 -11
  262. package/dist/chunk-3f7veca0.js.map +0 -10
  263. package/dist/chunk-3frsnm7x.js.map +0 -11
  264. package/dist/chunk-52hbv0ak.js.map +0 -36
  265. package/dist/chunk-emyyk7dx.js.map +0 -14
  266. package/dist/chunk-jjy0fhrn.js.map +0 -12
  267. package/dist/chunk-k3cqkkn2.js.map +0 -12
  268. package/dist/chunk-ppytyr6w.js.map +0 -12
  269. package/dist/chunk-qhcpj9wc.js.map +0 -14
  270. package/dist/chunk-r29fxdhn.js.map +0 -11
  271. package/dist/chunk-zcnq6105.js.map +0 -10
  272. /package/dist/{chunk-h1gfhhbh.js.map → chunk-28ja2cjs.js.map} +0 -0
  273. /package/dist/{chunk-1enhpacz.js.map → chunk-976rxdpx.js.map} +0 -0
  274. /package/dist/{chunk-r4tfx1sf.js.map → chunk-agbbygvh.js.map} +0 -0
  275. /package/dist/{chunk-0w35wavj.js.map → chunk-g7knyczr.js.map} +0 -0
  276. /package/dist/{chunk-ypbtykv6.js.map → chunk-nmbxcaqx.js.map} +0 -0
  277. /package/dist/{chunk-vf691g1r.js.map → chunk-p5vcsw9c.js.map} +0 -0
  278. /package/dist/{chunk-xyr8kppc.js.map → chunk-rtk71jzp.js.map} +0 -0
  279. /package/dist/{chunk-m3z3x9v0.js.map → chunk-t1f4f1ve.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/testing/action-execution.ts", "../src/testing/agent-execution.ts", "../src/testing/agent-storage-contract.ts", "../src/testing/ai-cost-storage-contract.ts", "../src/testing/ai-limit-storage-contract.ts", "../src/testing/ai-model-call-groups-contract.ts", "../src/testing/workflow-execution.ts", "../src/testing/ai-usage-storage-contract.ts", "../src/testing/auth-storage-contract.ts", "../src/testing/blob-storage-contract.ts", "../src/testing/broker-contract.ts", "../src/testing/connector-connection-storage-contract.ts", "../src/testing/effective-storage-contract.ts", "../src/testing/materializer-fixture.ts", "../src/testing/execution.ts", "../src/testing/execution-storage-contract.ts", "../src/testing/lake-merge-storage-contract.ts", "../src/testing/dataset-sequence-contract.ts", "../src/testing/lake-storage-contract.ts", "../src/testing/materialization-failure-contract.ts", "../src/testing/ontology-contract-fixture.ts", "../src/testing/materializer-storage-contract.ts", "../src/testing/projection-execution.ts", "../src/testing/object-query-contract.ts", "../src/testing/object-read-scope-contract.ts", "../src/testing/ontology-storage-contract.ts", "../src/testing/pipeline-execution.ts", "../src/testing/projection-run-storage-contract.ts", "../src/testing/queues-contract.ts", "../src/testing/sandboxes-contract.ts", "../src/testing/share-grant-storage-contract.ts", "../src/testing/share-session-storage-contract.ts", "../src/testing/sync-execution.ts", "../src/testing/webhook-execution.ts", "../src/testing/webhook-run-storage-contract.ts"],
3
+ "sources": ["../src/testing/action-execution.ts", "../src/testing/agent-execution.ts", "../src/testing/agent-storage-contract.ts", "../src/testing/ai-cost-storage-contract.ts", "../src/testing/ai-limit-storage-contract.ts", "../src/testing/ai-model-call-groups-contract.ts", "../src/testing/workflow-execution.ts", "../src/testing/ai-usage-storage-contract.ts", "../src/testing/auth-storage-contract.ts", "../src/testing/blob-storage-contract.ts", "../src/testing/broker-contract.ts", "../src/testing/connector-connection-storage-contract.ts", "../src/testing/effective-storage-contract.ts", "../src/testing/materializer-fixture.ts", "../src/testing/execution.ts", "../src/testing/execution-storage-contract.ts", "../src/testing/lake-changes-contract.ts", "../src/testing/lake-merge-storage-contract.ts", "../src/testing/dataset-sequence-contract.ts", "../src/testing/lake-storage-contract.ts", "../src/testing/materialization-failure-contract.ts", "../src/testing/ontology-contract-fixture.ts", "../src/testing/materializer-storage-contract.ts", "../src/testing/projection-execution.ts", "../src/testing/object-query-contract.ts", "../src/testing/object-read-scope-contract.ts", "../src/testing/ontology-storage-contract.ts", "../src/testing/pipeline-execution.ts", "../src/testing/projection-run-storage-contract.ts", "../src/testing/queues-contract.ts", "../src/testing/sandboxes-contract.ts", "../src/testing/share-grant-storage-contract.ts", "../src/testing/share-session-storage-contract.ts", "../src/testing/sync-execution.ts", "../src/testing/webhook-execution.ts", "../src/testing/webhook-run-storage-contract.ts"],
4
4
  "sourcesContent": [
5
5
  "import type { TrustedPrimitiveRef } from \"../execution\"\nimport type { ActionRunRecord, QueueActionRunInput, Storage } from \"../storage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\n/** Create the durable execution chain required by an Action-run storage fixture. */\nexport async function createTestActionExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly actionId: string\n readonly runId: string\n readonly executionId?: string\n readonly requesterGroupIds?: readonly string[]\n }\n): Promise<string> {\n const parentExecutionId = `test_request_execution:${input.runId}`\n const executionId = input.executionId ?? `test_action_execution:${input.runId}`\n const primitive: TrustedPrimitiveRef = {\n kind: \"action\",\n id: input.actionId,\n runId: input.runId,\n }\n\n const existing = await executions.getById({ projectId: input.projectId, id: executionId })\n if (existing) return executionId\n\n const parent = await executions.getById({ projectId: input.projectId, id: parentExecutionId })\n if (!parent) {\n await executions.create({\n id: parentExecutionId,\n requesterGroupIds: input.requesterGroupIds ?? [],\n projectId: input.projectId,\n executor: { type: \"request\", requestId: `test_request:${input.runId}` },\n source: { type: \"http\", requestId: `test_request:${input.runId}` },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"disabled\" },\n })\n }\n await executions.create({\n id: executionId,\n requesterGroupIds: input.requesterGroupIds ?? [],\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"execution\", executionId: parentExecutionId },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n\n return executionId\n}\n\n/** Queue an Action run with the valid durable execution fixture required by every provider. */\nexport async function queueTestActionRun(\n storage: Pick<Storage, \"actionRuns\" | \"executions\">,\n input: Omit<QueueActionRunInput, \"executionId\"> & {\n readonly requesterGroupIds?: readonly string[]\n }\n): Promise<ActionRunRecord> {\n if (!storage.actionRuns) throw new Error(\"Action run storage is not configured for this test.\")\n const executionId = await createTestActionExecution(storage.executions, {\n projectId: input.projectId,\n actionId: input.actionId,\n runId: input.id,\n requesterGroupIds: input.requesterGroupIds,\n })\n const { requesterGroupIds: _groups, ...run } = input\n return storage.actionRuns.queue({ ...run, executionId })\n}\n",
6
6
  "import { agentServiceAccountId } from \"../agents/authority\"\nimport { SYSTEM_PRINCIPAL } from \"../auth\"\nimport type { AuthStorage } from \"../storage/auth\"\nimport { AuthStorageError } from \"../storage/auth\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\n/** Create the durable execution chain required by an Agent-run storage fixture. */\nexport async function createTestAgentExecution(\n storage: { readonly auth?: AuthStorage; readonly executions: ExecutionStorage },\n input: {\n readonly projectId: string\n readonly actorId?: string\n readonly runId: string\n readonly executionId?: string\n readonly sourceExecutionId?: string\n readonly requesterGroupIds?: readonly string[]\n /** Conversational runs inherit authority; workflow fixtures use managed authority. */\n readonly authority?: \"managed\" | \"inherited\"\n }\n): Promise<string> {\n const authority = input.authority ?? (input.actorId === undefined ? \"inherited\" : \"managed\")\n if (authority === \"managed\" && input.actorId === undefined) {\n throw new Error(\"Managed Agent execution fixtures require an agent id.\")\n }\n const serviceAccountId = input.actorId ? agentServiceAccountId(input.actorId) : undefined\n if (authority === \"managed\") {\n const auth = storage.auth\n if (!auth) throw new Error(\"Managed Agent execution fixtures require auth storage.\")\n const serviceAccount = await auth.serviceAccounts.getById({\n projectId: input.projectId,\n id: serviceAccountId!,\n })\n if (!serviceAccount) {\n const now = new Date()\n try {\n await auth.serviceAccounts.create({\n id: serviceAccountId!,\n projectId: input.projectId,\n name: `Test Agent ${input.actorId}`,\n description: `Test service account for Agent '${input.actorId}'.`,\n status: \"active\",\n createdByPrincipal: SYSTEM_PRINCIPAL,\n createdAt: now,\n updatedAt: now,\n })\n } catch (error) {\n if (!(error instanceof AuthStorageError) || error.code !== \"duplicate_service_account\") {\n throw error\n }\n }\n }\n }\n\n const sourceExecutionId = input.sourceExecutionId ?? `test_request_execution:${input.runId}`\n const executionId = input.executionId ?? `test_agent_execution:${input.runId}`\n const existing = await storage.executions.getById({\n projectId: input.projectId,\n id: executionId,\n })\n if (existing) return executionId\n\n let parent = await storage.executions.getById({\n projectId: input.projectId,\n id: sourceExecutionId,\n })\n if (!parent) {\n parent = await storage.executions.create({\n id: sourceExecutionId,\n requesterGroupIds: input.requesterGroupIds ?? [],\n projectId: input.projectId,\n executor: { type: \"request\", requestId: `test_request:${input.runId}` },\n source: { type: \"http\", requestId: `test_request:${input.runId}` },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"disabled\" },\n })\n }\n await storage.executions.create({\n id: executionId,\n requesterGroupIds: parent.requesterGroupIds,\n projectId: input.projectId,\n executor: { type: \"agent\", runId: input.runId },\n source: { type: \"execution\", executionId: sourceExecutionId },\n ...(parent.requestedBy === undefined\n ? {}\n : { requestedBy: structuredClone(parent.requestedBy) }),\n correlationId: parent.correlationId,\n authorizationRef:\n authority === \"inherited\"\n ? structuredClone(parent.authorizationRef)\n : {\n type: \"principal\",\n principal: { type: \"serviceAccount\", id: serviceAccountId! },\n },\n })\n return executionId\n}\n",
@@ -12,24 +12,25 @@
12
12
  "import { describe, expect, test } from \"bun:test\"\nimport {\n type AiUsageStorage,\n AiUsageStorageError,\n type RecordAiModelCallInput,\n} from \"../storage/ai-usage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\nexport interface AiUsageStorageContractSuiteOptions<\n TStorage extends AiUsageStorage = AiUsageStorage,\n> {\n /** Factory that returns an isolated AI usage store for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly setup?: (storage: TStorage) => void | Promise<void>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"contract-project\"\nconst agentExecutionId = \"exec_agent_1\"\nconst otherAgentExecutionId = \"exec_agent_2\"\nconst workflowExecutionId = \"exec_workflow_1\"\n\nfunction at(value: string): Date {\n return new Date(value)\n}\n\nfunction modelCallInput(overrides: Partial<RecordAiModelCallInput> = {}): RecordAiModelCallInput {\n return {\n id: \"usage_1\",\n projectId,\n executionId: agentExecutionId,\n attempt: 1,\n callId: \"call_1\",\n requesterGroupIds: [\"support\", \"engineering\"],\n providerId: \"gateway\",\n requestedModelId: \"openai/gpt-5\",\n requestedReasoning: { budgetTokens: 4_096 },\n responseModelId: \"gpt-5-2026-06-01\",\n responseId: \"response_1\",\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n },\n rawUsage: { input_tokens: 12, output_tokens: 8 },\n occurredAt: at(\"2026-06-23T10:00:00.000Z\"),\n recordedAt: at(\"2026-06-23T10:00:01.000Z\"),\n ...overrides,\n }\n}\n\n/** Runs the provider-neutral model-call ledger contract against one storage implementation. */\nexport function runAiUsageStorageContractSuite<TStorage extends AiUsageStorage>(\n label: string,\n options: AiUsageStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await options.setup?.(storage)\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"retains native provider IDs across reads and replay\", async () => {\n // Regression proof: omit providerIds in normalization or a storage row codec.\n await withStorage(async (storage) => {\n const providerIds = {\n requestId: \"request-native\",\n responseId: \"response-native\",\n generationId: \"gen_native\",\n }\n await storage.recordModelCall(modelCallInput({ providerIds }))\n const latest = await storage.getLatestForExecution({\n projectId,\n executionId: agentExecutionId,\n })\n expect(latest?.providerIds).toEqual(providerIds)\n const replay = await storage.recordModelCall(modelCallInput())\n expect(replay.created).toBe(false)\n expect(replay.record.providerIds).toEqual(providerIds)\n await storage.recordModelCall(\n modelCallInput({ id: \"legacy\", callId: \"legacy\", occurredAt: at(\"2026-06-24T00:00:00Z\") })\n )\n expect(\n (await storage.getLatestForExecution({ projectId, executionId: agentExecutionId }))\n ?.providerIds\n ).toBeUndefined()\n await expect(\n storage.recordModelCall(modelCallInput({ providerIds: { requestId: \" \" } }))\n ).rejects.toThrow(\"requestId\")\n })\n })\n test(\"records normalized usage and one canonical row per requester group\", async () => {\n await withStorage(async (storage) => {\n const result = await storage.recordModelCall(\n modelCallInput({\n requesterGroupIds: [\"support\", \"engineering\", \"support\"],\n })\n )\n\n expect(result.created).toBe(true)\n expect(result.record).toEqual({\n ...modelCallInput(),\n requesterGroupIds: [\"engineering\", \"support\"],\n usage: {\n ...modelCallInput().usage,\n totalTokens: 20,\n reportingStatus: \"complete\",\n },\n recordedAt: at(\"2026-06-23T10:00:01.000Z\"),\n })\n })\n })\n\n test(\"returns the existing record when the idempotency key is replayed\", async () => {\n await withStorage(async (storage) => {\n const first = await storage.recordModelCall(modelCallInput())\n const replay = await storage.recordModelCall(\n modelCallInput({\n id: \"ignored_retry_id\",\n requesterGroupIds: [\"different-group\"],\n usage: { inputTokens: 999, outputTokens: 1 },\n })\n )\n\n expect(first.created).toBe(true)\n expect(replay.created).toBe(false)\n expect(replay.record).toEqual(first.record)\n })\n })\n\n test(\"allows one generation call id to contain multiple billable responses\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n responseId: \"response_2\",\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n uncachedInputTokens: 4,\n cacheReadInputTokens: 0,\n cacheWriteInputTokens: 2,\n textOutputTokens: 5,\n reasoningOutputTokens: 1,\n },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 16,\n outputTokens: 14,\n totalTokens: 30,\n uncachedInputTokens: 13,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 3,\n textOutputTokens: 11,\n reasoningOutputTokens: 3,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"returns the latest completed call for one execution\", async () => {\n await withStorage(async (storage) => {\n await expect(\n storage.getLatestForExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toBeNull()\n\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_later\",\n callId: \"call_later\",\n responseId: \"response_later\",\n occurredAt: at(\"2026-06-23T10:02:00.000Z\"),\n })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_earlier\",\n callId: \"call_earlier\",\n responseId: \"response_earlier\",\n occurredAt: at(\"2026-06-23T10:01:00.000Z\"),\n })\n )\n\n await expect(\n storage.getLatestForExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toMatchObject({ id: \"usage_later\", responseId: \"response_later\" })\n await expect(\n storage.getLatestForExecution({\n projectId: \"other-project\",\n executionId: agentExecutionId,\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"bills the same call and response IDs again on a later delivery attempt\", async () => {\n // Regression guard: remove `attempt` from a provider's idempotency key/query/index and the\n // second append collapses into the first, making the aggregate assertions fail.\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n attempt: 2,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n uncachedInputTokens: 4,\n cacheReadInputTokens: 0,\n cacheWriteInputTokens: 2,\n textOutputTokens: 5,\n reasoningOutputTokens: 1,\n },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 16,\n outputTokens: 14,\n totalTokens: 30,\n uncachedInputTokens: 13,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 3,\n textOutputTokens: 11,\n reasoningOutputTokens: 3,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"does not count concurrent idempotent appends twice\", async () => {\n await withStorage(async (storage) => {\n const results = await Promise.all([\n storage.recordModelCall(modelCallInput()),\n storage.recordModelCall(modelCallInput({ id: \"usage_retry\" })),\n ])\n\n expect(results.map((result) => result.created).sort()).toEqual([false, true])\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n totalTokens: 20,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n reportingStatus: \"complete\",\n },\n })\n })\n })\n\n test(\"keeps projects and workflow executions isolated\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_workflow\",\n executionId: workflowExecutionId,\n usage: { inputTokens: 5, outputTokens: 3 },\n })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_other_project\",\n projectId: \"other-project\",\n executionId: workflowExecutionId,\n usage: { inputTokens: 100, outputTokens: 100 },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: workflowExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: {\n inputTokens: 5,\n outputTokens: 3,\n totalTokens: 8,\n reportingStatus: \"complete\",\n },\n })\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n await expect(\n storage.summarizeExecution({\n projectId,\n executionId: \"exec_workflow_2\",\n })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n\n test(\"summarizes multiple executions in input order with one zero-call entry per miss\", async () => {\n await withStorage(async (storage) => {\n await expect(storage.summarizeExecutions({ projectId, executionIds: [] })).resolves.toEqual(\n []\n )\n\n await storage.recordModelCall(modelCallInput())\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_agent_2\",\n executionId: otherAgentExecutionId,\n callId: \"call_agent_2\",\n responseId: \"response_agent_2\",\n usage: { inputTokens: 4, outputTokens: 6 },\n })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_workflow\",\n executionId: workflowExecutionId,\n callId: \"call_workflow\",\n responseId: \"response_workflow\",\n usage: { inputTokens: 5, outputTokens: 3 },\n })\n )\n\n await expect(\n storage.summarizeExecutions({\n projectId,\n executionIds: [\n otherAgentExecutionId,\n \"missing\",\n workflowExecutionId,\n agentExecutionId,\n otherAgentExecutionId,\n ],\n })\n ).resolves.toEqual([\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n totalTokens: 10,\n reportingStatus: \"complete\",\n },\n },\n { modelCallCount: 0, usage: { reportingStatus: \"unavailable\" } },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 5,\n outputTokens: 3,\n totalTokens: 8,\n reportingStatus: \"complete\",\n },\n },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 12,\n outputTokens: 8,\n totalTokens: 20,\n uncachedInputTokens: 9,\n cacheReadInputTokens: 3,\n cacheWriteInputTokens: 1,\n textOutputTokens: 6,\n reasoningOutputTokens: 2,\n reportingStatus: \"complete\",\n },\n },\n {\n modelCallCount: 1,\n usage: {\n inputTokens: 4,\n outputTokens: 6,\n totalTokens: 10,\n reportingStatus: \"complete\",\n },\n },\n ])\n })\n })\n\n test(\"distinguishes no model calls from a call without reported usage\", async () => {\n // Regression guard: coerce nullable SQL token columns with `Number(null)` and this becomes a\n // complete zero-token report instead of an unavailable one.\n await withStorage(async (storage) => {\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n\n const result = await storage.recordModelCall(\n modelCallInput({ usage: {}, rawUsage: undefined })\n )\n\n expect(result.record.usage).toEqual({ reportingStatus: \"unavailable\" })\n expect(result.record.rawUsage).toBeUndefined()\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 1,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n\n test(\"normalizes offset timestamps to the same UTC instants\", async () => {\n // Regression guard: persist a timezone-naive SQL timestamp and these offset-derived instants\n // shift when read under a different database or process timezone.\n await withStorage(async (storage) => {\n const result = await storage.recordModelCall(\n modelCallInput({\n occurredAt: at(\"2026-06-23T03:04:05.678-07:00\"),\n recordedAt: at(\"2026-06-23T03:04:06.789-07:00\"),\n })\n )\n\n expect(result.record.occurredAt.toISOString()).toBe(\"2026-06-23T10:04:05.678Z\")\n expect(result.record.recordedAt.toISOString()).toBe(\"2026-06-23T10:04:06.789Z\")\n })\n })\n\n test(\"keeps incomplete execution totals partial instead of inventing zeroes\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(\n modelCallInput({ usage: { inputTokens: 10, outputTokens: 5 } })\n )\n await storage.recordModelCall(\n modelCallInput({\n id: \"usage_2\",\n callId: \"call_2\",\n responseId: \"response_2\",\n usage: { inputTokens: 0 },\n })\n )\n\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 2,\n usage: {\n inputTokens: 10,\n reportingStatus: \"partial\",\n },\n })\n })\n })\n\n test(\"defensively snapshots inputs and returned records\", async () => {\n await withStorage(async (storage) => {\n const requesterGroupIds = [\"support\"]\n const rawUsage = { nested: { cached: 3 } }\n const occurredAt = at(\"2026-06-23T10:00:00.000Z\")\n const input = modelCallInput({ requesterGroupIds, rawUsage, occurredAt })\n const first = await storage.recordModelCall(input)\n\n requesterGroupIds.push(\"mutated-input\")\n rawUsage.nested.cached = 999\n occurredAt.setTime(0)\n\n const returnedGroups = first.record.requesterGroupIds as string[]\n returnedGroups.push(\"mutated-output\")\n const returnedRaw = first.record.rawUsage as { nested: { cached: number } }\n returnedRaw.nested.cached = 888\n first.record.occurredAt.setTime(1)\n\n const replay = await storage.recordModelCall(modelCallInput())\n expect(replay.record.requesterGroupIds).toEqual([\"support\"])\n expect(replay.record.rawUsage).toEqual({ nested: { cached: 3 } })\n expect(replay.record.occurredAt.toISOString()).toBe(\"2026-06-23T10:00:00.000Z\")\n })\n })\n\n test(\"rejects a reused record id with a different model-call identity\", async () => {\n await withStorage(async (storage) => {\n await storage.recordModelCall(modelCallInput())\n\n const error = storage.recordModelCall(\n modelCallInput({ callId: \"call_2\", responseId: \"response_2\" })\n )\n await expect(error).rejects.toBeInstanceOf(AiUsageStorageError)\n await expect(error).rejects.toMatchObject({ code: \"duplicate_id\" })\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toMatchObject({\n modelCallCount: 1,\n usage: { inputTokens: 12, outputTokens: 8, totalTokens: 20 },\n })\n })\n })\n\n test(\"rejects a model call whose durable execution does not exist\", async () => {\n await withStorage(async (storage) => {\n const error = storage.recordModelCall(\n modelCallInput({ id: \"usage_missing\", executionId: \"exec_missing\" })\n )\n await expect(error).rejects.toBeInstanceOf(AiUsageStorageError)\n await expect(error).rejects.toMatchObject({ code: \"missing_execution\" })\n })\n })\n\n test(\"rejects invalid execution IDs, usage, dates, groups, and raw JSON\", async () => {\n await withStorage(async (storage) => {\n const invalidInputs: RecordAiModelCallInput[] = [\n modelCallInput({ attempt: 0 }),\n modelCallInput({ providerId: \" \" }),\n modelCallInput({ requesterGroupIds: [\"\"] }),\n modelCallInput({ usage: { inputTokens: -1 } }),\n modelCallInput({ occurredAt: new Date(Number.NaN) }),\n modelCallInput({ rawUsage: { invalid: undefined } as never }),\n modelCallInput({ requestedReasoning: { budgetTokens: -1 } }),\n modelCallInput({ executionId: \"\" }),\n ]\n\n for (const input of invalidInputs) {\n await expect(storage.recordModelCall(input)).rejects.toThrow()\n }\n await expect(\n storage.summarizeExecutions({\n projectId,\n executionIds: [\"\"],\n })\n ).rejects.toThrow()\n await expect(\n storage.summarizeExecution({ projectId, executionId: agentExecutionId })\n ).resolves.toEqual({\n modelCallCount: 0,\n usage: { reportingStatus: \"unavailable\" },\n })\n })\n })\n })\n}\n\n/** Seed the immutable execution references used by the provider-neutral AI usage contract. */\nexport async function seedAiUsageStorageContractExecutions(\n executions: ExecutionStorage\n): Promise<void> {\n for (const fixture of [\n { projectId, executionId: agentExecutionId },\n { projectId, executionId: otherAgentExecutionId },\n { projectId, executionId: workflowExecutionId },\n { projectId: \"other-project\", executionId: workflowExecutionId },\n ]) {\n const existing = await executions.getById({\n projectId: fixture.projectId,\n id: fixture.executionId,\n })\n if (existing) continue\n const primitive = {\n kind: \"workflow\" as const,\n id: \"ai-usage-contract\",\n runId: fixture.executionId,\n }\n await executions.create({\n id: fixture.executionId,\n projectId: fixture.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"event\", eventId: `test_event:${fixture.executionId}` },\n correlationId: `test_correlation:${fixture.executionId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n }\n}\n",
13
13
  "import { describe, expect, test } from \"bun:test\"\nimport type {\n AuthStorage,\n AuthStorageErrorCode,\n CompleteAuthSessionInput,\n UserRecord,\n} from \"../storage/auth\"\nimport { AuthStorageError } from \"../storage/auth\"\n\nexport interface AuthStorageContractSuiteOptions<TStorage extends AuthStorage = AuthStorage> {\n /** Factory that produces a fresh `AuthStorage` instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"project-a\"\nconst otherProjectId = \"project-b\"\n\nfunction at(value: string): Date {\n return new Date(value)\n}\n\nfunction sessionInput(\n id: string,\n tokenHash = `${id}-hash`,\n audience: CompleteAuthSessionInput[\"audience\"] = \"atlas\",\n absoluteExpiresAt?: Date\n): CompleteAuthSessionInput {\n return {\n id,\n audience,\n tokenHash,\n createdAt: at(\"2026-05-14T10:10:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:10:00.000Z\"),\n absoluteExpiresAt,\n }\n}\n\nasync function expectAuthError(\n promise: Promise<unknown>,\n code: AuthStorageErrorCode\n): Promise<void> {\n await expect(promise).rejects.toBeInstanceOf(AuthStorageError)\n await expect(promise).rejects.toMatchObject({ code })\n}\n\nasync function createUser(\n storage: AuthStorage,\n input: {\n readonly id?: string\n readonly email?: string\n readonly status?: UserRecord[\"status\"]\n readonly projectId?: string\n } = {}\n): Promise<UserRecord> {\n return storage.users.create({\n id: input.id ?? \"usr_1\",\n projectId: input.projectId ?? projectId,\n email: input.email ?? \"ava@acme.com\",\n status: input.status,\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n}\n\n/**\n * Runs the shared `AuthStorage` contract against any storage implementation.\n *\n * The suite is the storage-independent specification for Sixb auth state: users, identities,\n * sessions, invitations, group memberships, service accounts, access tokens,\n * magic links, OIDC attempts, and atomic sign-in completion.\n */\nexport function runAuthStorageContractSuite<TStorage extends AuthStorage>(\n label: string,\n options: AuthStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"creates users with normalized email and isolates projects\", async () => {\n await withStorage(async (storage) => {\n const user = await createUser(storage, {\n email: \" Ava@Acme.COM \",\n })\n\n expect(user.email).toBe(\"ava@acme.com\")\n await expectAuthError(\n storage.users.create({\n id: \"usr_duplicate\",\n projectId,\n email: \"ava@acme.com\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n }),\n \"duplicate_user\"\n )\n\n await expect(\n storage.users.create({\n id: \"usr_other\",\n projectId: otherProjectId,\n email: \"ava@acme.com\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({\n projectId: otherProjectId,\n email: \"ava@acme.com\",\n })\n\n const page = await storage.users.list({ projectId, statuses: [\"active\"] })\n expect(page.users.map((row) => row.id)).toEqual([\"usr_1\"])\n })\n })\n\n test(\"upserts identities without mutating canonical user email\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_oidc\", email: \"ava@acme.com\" })\n\n await storage.identities.upsert({\n projectId,\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n claims: { email: \"ava@acme.com\" },\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n const updated = await storage.identities.upsert({\n projectId,\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n claims: { email: \"ava.renamed@acme.com\" },\n updatedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n\n expect(updated.claims).toEqual({ email: \"ava.renamed@acme.com\" })\n await expect(storage.users.getById({ projectId, id: \"usr_oidc\" })).resolves.toMatchObject({\n email: \"ava@acme.com\",\n })\n })\n })\n\n test(\"keeps multiple concurrent sessions per user and never extends expiry on touch\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n const first = await storage.sessions.create({\n id: \"ses_1\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-1\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n const second = await storage.sessions.create({\n id: \"ses_2\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-2\",\n createdAt: at(\"2026-05-14T10:05:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:05:00.000Z\"),\n })\n\n // Creating a second session in the same audience no longer revokes the\n // first: both stay active and authenticate independently.\n expect(first.revokedAt).toBeUndefined()\n expect(second.revokedAt).toBeUndefined()\n const storedFirst = await storage.sessions.getById({ projectId, id: \"ses_1\" })\n expect(storedFirst?.revokedAt).toBeUndefined()\n\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_1\",\n audience: \"atlas\",\n tokenHash: \"hash-1\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"ses_1\" })\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_2\",\n audience: \"atlas\",\n tokenHash: \"hash-2\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"ses_2\" })\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_2\",\n audience: \"atlas\",\n tokenHash: \"wrong\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toBeNull()\n\n // getActiveByUserId returns the most recently created active session.\n await expect(\n storage.sessions.getActiveByUserId({\n projectId,\n userId: \"usr_1\",\n audience: \"atlas\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"ses_2\" })\n\n const touched = await storage.sessions.touch({\n projectId,\n id: second.id,\n lastSeenAt: at(\"2026-05-15T10:00:00.000Z\"),\n })\n expect(touched.lastSeenAt?.toISOString()).toBe(\"2026-05-15T10:00:00.000Z\")\n expect(touched.expiresAt.toISOString()).toBe(\"2026-05-21T10:05:00.000Z\")\n\n // A session in a different audience coexists and is cookie-scoped.\n const appSession = await storage.sessions.create({\n id: \"ses_app\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"app\",\n tokenHash: \"hash-app\",\n createdAt: at(\"2026-05-14T10:06:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:06:00.000Z\"),\n })\n expect(appSession.revokedAt).toBeUndefined()\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_app\",\n audience: \"atlas\",\n tokenHash: \"hash-app\",\n now: at(\"2026-05-14T10:07:00.000Z\"),\n })\n ).resolves.toBeNull()\n\n // Revoking a single session leaves the user's other sessions active.\n await storage.sessions.revoke({\n projectId,\n id: \"ses_1\",\n revokedAt: at(\"2026-05-14T10:08:00.000Z\"),\n })\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_1\",\n audience: \"atlas\",\n tokenHash: \"hash-1\",\n now: at(\"2026-05-14T10:09:00.000Z\"),\n })\n ).resolves.toBeNull()\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: \"ses_2\",\n audience: \"atlas\",\n tokenHash: \"hash-2\",\n now: at(\"2026-05-14T10:09:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"ses_2\" })\n\n // \"Sign out everywhere\": revokeActiveForUser clears every remaining\n // active session for the user, across audiences.\n const revoked = await storage.sessions.revokeActiveForUser({\n projectId,\n userId: \"usr_1\",\n revokedAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n expect(revoked.map((entry) => entry.id).sort()).toEqual([\"ses_2\", \"ses_app\"])\n await expect(\n storage.sessions.getActiveByUserId({\n projectId,\n userId: \"usr_1\",\n audience: \"atlas\",\n now: at(\"2026-05-14T10:11:00.000Z\"),\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"persists and enforces an optional absolute session deadline\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n const capped = await storage.sessions.create({\n id: \"ses_capped\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-capped\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n absoluteExpiresAt: at(\"2026-05-16T10:00:00.000Z\"),\n })\n const uncapped = await storage.sessions.create({\n id: \"ses-uncapped\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"app\",\n tokenHash: \"hash-uncapped\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n\n expect(capped.absoluteExpiresAt?.toISOString()).toBe(\"2026-05-16T10:00:00.000Z\")\n expect(uncapped.absoluteExpiresAt).toBeUndefined()\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: capped.id,\n audience: \"atlas\",\n tokenHash: \"hash-capped\",\n now: at(\"2026-05-16T09:59:59.999Z\"),\n })\n ).resolves.toMatchObject({ id: capped.id })\n await expect(\n storage.sessions.findValidByTokenHash({\n projectId,\n id: capped.id,\n audience: \"atlas\",\n tokenHash: \"hash-capped\",\n now: at(\"2026-05-16T10:00:00.000Z\"),\n })\n ).resolves.toBeNull()\n const active = await storage.sessions.listActiveByUserId({\n projectId,\n userId: \"usr_1\",\n now: at(\"2026-05-16T10:00:00.000Z\"),\n })\n expect(active.map((session) => session.id)).toEqual([uncapped.id])\n await expect(\n storage.sessions.getActiveByUserId({\n projectId,\n userId: \"usr_1\",\n audience: \"atlas\",\n now: at(\"2026-05-16T10:00:00.000Z\"),\n })\n ).resolves.toBeNull()\n await expect(\n storage.sessions.revokeActiveForUser({\n projectId,\n userId: \"usr_1\",\n audience: \"atlas\",\n revokedAt: at(\"2026-05-16T10:00:00.000Z\"),\n })\n ).resolves.toEqual([])\n })\n })\n\n test(\"atomically renews valid sessions without exceeding the absolute deadline\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.sessions.create({\n id: \"ses_renew\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-renew\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-15T10:00:00.000Z\"),\n absoluteExpiresAt: at(\"2026-05-20T10:00:00.000Z\"),\n })\n\n const renewed = await storage.sessions.renewIfValid({\n projectId,\n id: \"ses_renew\",\n audience: \"atlas\",\n tokenHash: \"hash-renew\",\n now: at(\"2026-05-14T11:00:00.000Z\"),\n expiresAt: at(\"2026-05-25T10:00:00.000Z\"),\n })\n expect(renewed?.expiresAt.toISOString()).toBe(\"2026-05-20T10:00:00.000Z\")\n expect(renewed?.lastSeenAt?.toISOString()).toBe(\"2026-05-14T11:00:00.000Z\")\n\n const monotonic = await storage.sessions.renewIfValid({\n projectId,\n id: \"ses_renew\",\n audience: \"atlas\",\n tokenHash: \"hash-renew\",\n now: at(\"2026-05-14T12:00:00.000Z\"),\n expiresAt: at(\"2026-05-18T10:00:00.000Z\"),\n })\n expect(monotonic?.expiresAt.toISOString()).toBe(\"2026-05-20T10:00:00.000Z\")\n\n await expect(\n storage.sessions.renewIfValid({\n projectId,\n id: \"ses_renew\",\n audience: \"atlas\",\n tokenHash: \"wrong-hash\",\n now: at(\"2026-05-14T13:00:00.000Z\"),\n expiresAt: at(\"2026-05-19T10:00:00.000Z\"),\n })\n ).resolves.toBeNull()\n await expect(\n storage.sessions.renewIfValid({\n projectId,\n id: \"ses_renew\",\n audience: \"atlas\",\n tokenHash: \"hash-renew\",\n now: at(\"2026-05-20T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n ).resolves.toBeNull()\n\n await storage.sessions.create({\n id: \"ses_concurrent\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-concurrent\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-15T10:00:00.000Z\"),\n })\n await Promise.all([\n storage.sessions.renewIfValid({\n projectId,\n id: \"ses_concurrent\",\n audience: \"atlas\",\n tokenHash: \"hash-concurrent\",\n now: at(\"2026-05-14T11:00:00.000Z\"),\n expiresAt: at(\"2026-05-18T10:00:00.000Z\"),\n }),\n storage.sessions.renewIfValid({\n projectId,\n id: \"ses_concurrent\",\n audience: \"atlas\",\n tokenHash: \"hash-concurrent\",\n now: at(\"2026-05-14T11:00:00.000Z\"),\n expiresAt: at(\"2026-05-19T10:00:00.000Z\"),\n }),\n ])\n const concurrent = await storage.sessions.getById({ projectId, id: \"ses_concurrent\" })\n expect(concurrent?.expiresAt.toISOString()).toBe(\"2026-05-19T10:00:00.000Z\")\n })\n })\n\n test(\"persists best-effort device metadata on a session\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n const withDevice = await storage.sessions.create({\n id: \"ses_device\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-device\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n userAgent: \"Mozilla/5.0 (iPhone)\",\n ipAddress: \"203.0.113.7\",\n })\n expect(withDevice.userAgent).toBe(\"Mozilla/5.0 (iPhone)\")\n expect(withDevice.ipAddress).toBe(\"203.0.113.7\")\n await expect(\n storage.sessions.getById({ projectId, id: \"ses_device\" })\n ).resolves.toMatchObject({\n userAgent: \"Mozilla/5.0 (iPhone)\",\n ipAddress: \"203.0.113.7\",\n })\n\n // Device metadata is optional; omitting it round-trips as undefined.\n const withoutDevice = await storage.sessions.create({\n id: \"ses_plain\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-plain\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n expect(withoutDevice.userAgent).toBeUndefined()\n expect(withoutDevice.ipAddress).toBeUndefined()\n })\n })\n\n test(\"lists a user's active sessions across audiences, newest activity first\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n await storage.sessions.create({\n id: \"ses_a\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-a\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.sessions.create({\n id: \"ses_b\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"app\",\n tokenHash: \"hash-b\",\n createdAt: at(\"2026-05-14T10:05:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:05:00.000Z\"),\n })\n\n // Revoked sessions are excluded.\n await storage.sessions.create({\n id: \"ses_revoked\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-revoked\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n await storage.sessions.revoke({\n projectId,\n id: \"ses_revoked\",\n revokedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n\n // Another user's session must not leak in.\n await createUser(storage, { id: \"usr_2\", email: \"bo@acme.com\" })\n await storage.sessions.create({\n id: \"ses_other\",\n projectId,\n userId: \"usr_2\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-other\",\n createdAt: at(\"2026-05-14T10:03:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:03:00.000Z\"),\n })\n\n // ses_a is older than ses_b but has more recent activity, so it sorts first.\n await storage.sessions.touch({\n projectId,\n id: \"ses_a\",\n lastSeenAt: at(\"2026-05-15T10:00:00.000Z\"),\n })\n\n const active = await storage.sessions.listActiveByUserId({\n projectId,\n userId: \"usr_1\",\n now: at(\"2026-05-15T11:00:00.000Z\"),\n })\n expect(active.map((session) => session.id)).toEqual([\"ses_a\", \"ses_b\"])\n })\n })\n\n test(\"keeps one active invitation per normalized email\", async () => {\n await withStorage(async (storage) => {\n const first = await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \" Ava@Acme.COM \",\n groupIds: [\"commercial\"],\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n const updated = await storage.invitations.createOrUpdateActive({\n id: \"inv_2\",\n projectId,\n email: \"ava@acme.com\",\n groupIds: [\"finance\"],\n updatedAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-22T10:00:00.000Z\"),\n })\n\n expect(updated.id).toBe(first.id)\n expect(updated.groupIds).toEqual([\"finance\"])\n await expect(\n storage.invitations.getActiveByEmail({\n projectId,\n email: \"ava@acme.com\",\n now: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"inv_1\" })\n\n await storage.invitations.revoke({\n projectId,\n id: \"inv_1\",\n revokedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n await expect(\n storage.invitations.getActiveByEmail({\n projectId,\n email: \"ava@acme.com\",\n now: at(\"2026-05-14T10:04:00.000Z\"),\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"upserts group memberships idempotently and preserves source\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n await storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n source: \"invitation\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n const repeated = await storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n\n expect(repeated.source).toBe(\"invitation\")\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_1\" })\n ).resolves.toHaveLength(1)\n })\n })\n\n test(\"rejects group memberships for missing users\", async () => {\n await withStorage(async (storage) => {\n await expectAuthError(\n storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_missing\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n }),\n \"missing_user\"\n )\n })\n })\n\n test(\"removes group memberships and is idempotent for missing rows\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n await storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n\n const removed = await storage.groupMemberships.remove({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n })\n expect(removed).toMatchObject({\n projectId,\n userId: \"usr_1\",\n groupId: \"commercial\",\n source: \"manual\",\n })\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_1\" })\n ).resolves.toHaveLength(0)\n\n // Removing an already-removed membership is a no-op that returns null.\n await expect(\n storage.groupMemberships.remove({ projectId, userId: \"usr_1\", groupId: \"commercial\" })\n ).resolves.toBeNull()\n })\n })\n\n test(\"returns null when removing a membership for a missing user\", async () => {\n await withStorage(async (storage) => {\n await expect(\n storage.groupMemberships.remove({\n projectId,\n userId: \"usr_missing\",\n groupId: \"commercial\",\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"manages service accounts and their group memberships\", async () => {\n await withStorage(async (storage) => {\n const serviceAccount = await storage.serviceAccounts.create({\n id: \"svc_ingest\",\n projectId,\n name: \"Ingest worker\",\n description: \"Reads source data into Sixb.\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n expect(serviceAccount).toMatchObject({\n id: \"svc_ingest\",\n name: \"Ingest worker\",\n status: \"active\",\n })\n\n const membership = await storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_ingest\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n expect(membership.groupId).toBe(\"commercial\")\n const repeated = await storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_ingest\",\n groupId: \"commercial\",\n source: \"invitation\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n expect(repeated.source).toBe(\"manual\")\n\n await expect(\n storage.serviceAccountGroupMemberships.listForServiceAccount({\n projectId,\n serviceAccountId: \"svc_ingest\",\n })\n ).resolves.toHaveLength(1)\n await expect(\n storage.serviceAccountGroupMemberships.listForGroup({\n projectId,\n groupId: \"commercial\",\n })\n ).resolves.toMatchObject([{ serviceAccountId: \"svc_ingest\" }])\n\n const updated = await storage.serviceAccounts.update({\n projectId,\n id: \"svc_ingest\",\n name: \"Ingest worker v2\",\n status: \"suspended\",\n updatedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n expect(updated).toMatchObject({\n name: \"Ingest worker v2\",\n description: \"Reads source data into Sixb.\",\n status: \"suspended\",\n })\n await expect(\n storage.serviceAccounts.update({\n projectId,\n id: \"svc_ingest\",\n description: \"Imports source data into Sixb.\",\n updatedAt: at(\"2026-05-14T10:04:00.000Z\"),\n })\n ).resolves.toMatchObject({\n name: \"Ingest worker v2\",\n description: \"Imports source data into Sixb.\",\n status: \"suspended\",\n })\n await expect(\n storage.serviceAccounts.list({ projectId, statuses: [\"suspended\"] })\n ).resolves.toMatchObject({\n serviceAccounts: [{ id: \"svc_ingest\" }],\n total: 1,\n })\n })\n })\n\n test(\"rejects service account memberships for missing service accounts\", async () => {\n await withStorage(async (storage) => {\n await expectAuthError(\n storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_missing\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n }),\n \"missing_service_account\"\n )\n })\n })\n\n test(\"reconciles agent-managed service account memberships\", async () => {\n await withStorage(async (storage) => {\n await storage.serviceAccounts.create({\n id: \"svc_agent_ops\",\n projectId,\n name: \"Ops agent\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n await storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_agent_ops\",\n groupId: \"manual-extra\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n await storage.serviceAccountGroupMemberships.upsert({\n projectId,\n serviceAccountId: \"svc_agent_ops\",\n groupId: \"stale-agent\",\n source: \"agent\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n\n const first = await storage.serviceAccountGroupMemberships.reconcileForServiceAccount({\n projectId,\n serviceAccountId: \"svc_agent_ops\",\n groupIds: [\"agent-runtime\", \"agent-runtime\", \"ops\"],\n source: \"agent\",\n updatedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n expect(first.map((membership) => [membership.groupId, membership.source])).toEqual([\n [\"agent-runtime\", \"agent\"],\n [\"manual-extra\", \"manual\"],\n [\"ops\", \"agent\"],\n ])\n\n const second = await storage.serviceAccountGroupMemberships.reconcileForServiceAccount({\n projectId,\n serviceAccountId: \"svc_agent_ops\",\n groupIds: [\"ops\"],\n source: \"agent\",\n updatedAt: at(\"2026-05-14T10:04:00.000Z\"),\n })\n expect(second.map((membership) => [membership.groupId, membership.source])).toEqual([\n [\"manual-extra\", \"manual\"],\n [\"ops\", \"agent\"],\n ])\n })\n })\n\n test(\"creates, resolves, touches, lists, and revokes access tokens\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.serviceAccounts.create({\n id: \"svc_ingest\",\n projectId,\n name: \"Ingest worker\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n\n const personal = await storage.accessTokens.create({\n id: \"tok_personal\",\n projectId,\n name: \"Local CLI\",\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: \"hash-personal\",\n groupIds: [\"commercial\", \"commercial\", \"finance\"],\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n expect(personal.groupIds).toEqual([\"commercial\", \"finance\"])\n await expect(\n storage.accessTokens.findValidByTokenHash({\n projectId,\n id: \"tok_personal\",\n kind: \"personal\",\n tokenHash: \"hash-personal\",\n now: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({ id: \"tok_personal\" })\n await expect(\n storage.accessTokens.findValidByTokenHash({\n projectId,\n id: \"tok_personal\",\n kind: \"personal\",\n tokenHash: \"wrong\",\n now: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toBeNull()\n\n const touched = await storage.accessTokens.touch({\n projectId,\n id: \"tok_personal\",\n lastUsedAt: at(\"2026-05-14T10:03:00.000Z\"),\n userAgent: \"sixb-cli/0.1\",\n ipAddress: \"203.0.113.10\",\n })\n expect(touched.lastUsedAt?.toISOString()).toBe(\"2026-05-14T10:03:00.000Z\")\n expect(touched.lastUsedUserAgent).toBe(\"sixb-cli/0.1\")\n\n await storage.accessTokens.create({\n id: \"tok_service\",\n projectId,\n name: \"Sandbox agent\",\n kind: \"serviceAccount\",\n subjectType: \"serviceAccount\",\n subjectId: \"svc_ingest\",\n tokenHash: \"hash-service\",\n createdAt: at(\"2026-05-14T10:04:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:04:00.000Z\"),\n })\n await expect(\n storage.accessTokens.list({\n projectId,\n subjectType: \"serviceAccount\",\n subjectId: \"svc_ingest\",\n })\n ).resolves.toMatchObject({\n accessTokens: [{ id: \"tok_service\" }],\n total: 1,\n })\n\n await storage.accessTokens.revoke({\n projectId,\n id: \"tok_personal\",\n revokedAt: at(\"2026-05-14T10:05:00.000Z\"),\n })\n await expect(\n storage.accessTokens.findValidByTokenHash({\n projectId,\n id: \"tok_personal\",\n kind: \"personal\",\n tokenHash: \"hash-personal\",\n now: at(\"2026-05-14T10:06:00.000Z\"),\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"round-trips the creator principal for service accounts and access tokens\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_creator\", email: \"creator@acme.com\" })\n await storage.serviceAccounts.create({\n id: \"svc_creator\",\n projectId,\n name: \"Creator service account\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n await storage.sessions.create({\n id: \"ses_creator\",\n projectId,\n userId: \"usr_creator\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-creator\",\n createdAt: at(\"2026-05-14T10:00:30.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:30.000Z\"),\n })\n\n const principals = [\n { type: \"user\", id: \"usr_creator\" },\n { type: \"serviceAccount\", id: \"svc_creator\" },\n { type: \"system\", id: \"scheduler\" },\n ] as const\n\n for (const [index, principal] of principals.entries()) {\n const accountId = `svc_by_${principal.type}`\n const createdAccount = await storage.serviceAccounts.create({\n id: accountId,\n projectId,\n name: `Service account by ${principal.type}`,\n createdByPrincipal: principal,\n createdBySessionId: \"ses_creator\",\n createdAt: at(`2026-05-14T10:1${index}:00.000Z`),\n })\n expect(createdAccount.createdByPrincipal).toEqual(principal)\n expect(createdAccount.createdBySessionId).toBe(\"ses_creator\")\n await expect(\n storage.serviceAccounts.getById({ projectId, id: accountId })\n ).resolves.toMatchObject({\n createdByPrincipal: principal,\n createdBySessionId: \"ses_creator\",\n })\n\n const tokenId = `tok_by_${principal.type}`\n const createdToken = await storage.accessTokens.create({\n id: tokenId,\n projectId,\n name: `Token by ${principal.type}`,\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_creator\",\n tokenHash: `hash-${tokenId}`,\n createdByPrincipal: principal,\n createdBySessionId: \"ses_creator\",\n createdAt: at(`2026-05-14T10:2${index}:00.000Z`),\n expiresAt: at(`2026-05-21T10:2${index}:00.000Z`),\n })\n expect(createdToken.createdByPrincipal).toEqual(principal)\n expect(createdToken.createdBySessionId).toBe(\"ses_creator\")\n await expect(\n storage.accessTokens.getById({ projectId, id: tokenId })\n ).resolves.toMatchObject({\n createdByPrincipal: principal,\n createdBySessionId: \"ses_creator\",\n })\n }\n\n // Omitting the creator round-trips as undefined on every backend.\n const anonymous = await storage.serviceAccounts.create({\n id: \"svc_anonymous\",\n projectId,\n name: \"Anonymous service account\",\n createdAt: at(\"2026-05-14T10:30:00.000Z\"),\n })\n expect(anonymous.createdByPrincipal).toBeUndefined()\n expect(anonymous.createdBySessionId).toBeUndefined()\n await expect(\n storage.serviceAccounts.getById({ projectId, id: \"svc_anonymous\" })\n ).resolves.toMatchObject({ id: \"svc_anonymous\" })\n })\n })\n\n test(\"touch preserves prior access-token metadata when omitted\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.accessTokens.create({\n id: \"tok_touch\",\n projectId,\n name: \"Touch token\",\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: \"hash-touch\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n\n const first = await storage.accessTokens.touch({\n projectId,\n id: \"tok_touch\",\n lastUsedAt: at(\"2026-05-14T10:01:00.000Z\"),\n userAgent: \"sixb-cli/0.1\",\n ipAddress: \"203.0.113.10\",\n })\n expect(first.lastUsedUserAgent).toBe(\"sixb-cli/0.1\")\n expect(first.lastUsedIpAddress).toBe(\"203.0.113.10\")\n\n // A later touch without metadata advances lastUsedAt but keeps the\n // previously captured user agent and IP address.\n const second = await storage.accessTokens.touch({\n projectId,\n id: \"tok_touch\",\n lastUsedAt: at(\"2026-05-14T10:05:00.000Z\"),\n })\n expect(second.lastUsedAt?.toISOString()).toBe(\"2026-05-14T10:05:00.000Z\")\n expect(second.lastUsedUserAgent).toBe(\"sixb-cli/0.1\")\n expect(second.lastUsedIpAddress).toBe(\"203.0.113.10\")\n await expect(\n storage.accessTokens.getById({ projectId, id: \"tok_touch\" })\n ).resolves.toMatchObject({\n lastUsedUserAgent: \"sixb-cli/0.1\",\n lastUsedIpAddress: \"203.0.113.10\",\n })\n })\n })\n\n test(\"lists access tokens with revoked, order, and pagination parity\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n const ids = [\"tok_a\", \"tok_b\", \"tok_c\", \"tok_d\"]\n for (const [index, id] of ids.entries()) {\n await storage.accessTokens.create({\n id,\n projectId,\n name: `Token ${id}`,\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: `hash-${id}`,\n createdAt: at(`2026-05-14T10:0${index}:00.000Z`),\n expiresAt: at(`2026-05-21T10:0${index}:00.000Z`),\n })\n }\n await storage.accessTokens.revoke({\n projectId,\n id: \"tok_b\",\n revokedAt: at(\"2026-05-14T11:00:00.000Z\"),\n })\n\n // includeRevoked defaults to false: the revoked token is hidden.\n const active = await storage.accessTokens.list({ projectId })\n expect(active.accessTokens.map((token) => token.id)).toEqual([\"tok_a\", \"tok_c\", \"tok_d\"])\n expect(active.total).toBe(3)\n expect(active.hasMore).toBe(false)\n\n // includeRevoked: true surfaces it again, default order is ascending.\n const all = await storage.accessTokens.list({ projectId, includeRevoked: true })\n expect(all.accessTokens.map((token) => token.id)).toEqual([\n \"tok_a\",\n \"tok_b\",\n \"tok_c\",\n \"tok_d\",\n ])\n expect(all.total).toBe(4)\n\n // order: \"desc\" reverses by createdAt.\n const descending = await storage.accessTokens.list({\n projectId,\n includeRevoked: true,\n order: \"desc\",\n })\n expect(descending.accessTokens.map((token) => token.id)).toEqual([\n \"tok_d\",\n \"tok_c\",\n \"tok_b\",\n \"tok_a\",\n ])\n\n // First page reports hasMore at the page boundary.\n const firstPage = await storage.accessTokens.list({\n projectId,\n includeRevoked: true,\n limit: 2,\n })\n expect(firstPage.accessTokens.map((token) => token.id)).toEqual([\"tok_a\", \"tok_b\"])\n expect(firstPage.total).toBe(4)\n expect(firstPage.hasMore).toBe(true)\n\n // Second page exhausts the result set.\n const secondPage = await storage.accessTokens.list({\n projectId,\n includeRevoked: true,\n limit: 2,\n offset: 2,\n })\n expect(secondPage.accessTokens.map((token) => token.id)).toEqual([\"tok_c\", \"tok_d\"])\n expect(secondPage.hasMore).toBe(false)\n\n // A page that exactly consumes the remainder reports no more.\n const exactBoundary = await storage.accessTokens.list({\n projectId,\n includeRevoked: true,\n limit: 4,\n })\n expect(exactBoundary.accessTokens.map((token) => token.id)).toEqual(ids)\n expect(exactBoundary.hasMore).toBe(false)\n })\n })\n\n test(\"lists service accounts with pagination parity\", async () => {\n await withStorage(async (storage) => {\n const ids = [\"svc_a\", \"svc_b\", \"svc_c\"]\n for (const [index, id] of ids.entries()) {\n await storage.serviceAccounts.create({\n id,\n projectId,\n name: `Service account ${id}`,\n createdAt: at(`2026-05-14T10:0${index}:00.000Z`),\n })\n }\n\n // Default order is ascending by createdAt across every backend.\n const all = await storage.serviceAccounts.list({ projectId })\n expect(all.serviceAccounts.map((account) => account.id)).toEqual(ids)\n expect(all.total).toBe(3)\n expect(all.hasMore).toBe(false)\n\n const firstPage = await storage.serviceAccounts.list({ projectId, limit: 2 })\n expect(firstPage.serviceAccounts.map((account) => account.id)).toEqual([\"svc_a\", \"svc_b\"])\n expect(firstPage.total).toBe(3)\n expect(firstPage.hasMore).toBe(true)\n\n const secondPage = await storage.serviceAccounts.list({\n projectId,\n limit: 2,\n offset: 2,\n })\n expect(secondPage.serviceAccounts.map((account) => account.id)).toEqual([\"svc_c\"])\n expect(secondPage.hasMore).toBe(false)\n })\n })\n\n test(\"rejects invalid access token subjects\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n\n await expectAuthError(\n storage.accessTokens.create({\n id: \"tok_bad_kind\",\n projectId,\n name: \"Bad kind\",\n kind: \"serviceAccount\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: \"hash\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n }),\n \"invalid_input\"\n )\n await expectAuthError(\n storage.accessTokens.create({\n id: \"tok_missing_subject\",\n projectId,\n name: \"Missing subject\",\n kind: \"serviceAccount\",\n subjectType: \"serviceAccount\",\n subjectId: \"svc_missing\",\n tokenHash: \"hash\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n }),\n \"missing_service_account\"\n )\n })\n })\n\n test(\"creates one active magic link per email and consumes it once\", async () => {\n await withStorage(async (storage) => {\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"hash-1\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:15:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_2\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \" ava@acme.com \",\n tokenHash: \"hash-2\",\n returnTo: \"/dashboard\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n await expect(storage.magicLinks.getById({ projectId, id: \"ml_1\" })).resolves.toMatchObject({\n revokedAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n await expectAuthError(\n storage.magicLinks.consume({\n projectId,\n id: \"ml_2\",\n tokenHash: \"wrong\",\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n }),\n \"invalid_magic_link\"\n )\n\n await expect(\n storage.magicLinks.consume({\n projectId,\n id: \"ml_2\",\n tokenHash: \"hash-2\",\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n ).resolves.toMatchObject({\n audience: \"atlas\",\n returnTo: \"/dashboard\",\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n await expectAuthError(\n storage.magicLinks.consume({\n projectId,\n id: \"ml_2\",\n tokenHash: \"hash-2\",\n consumedAt: at(\"2026-05-14T10:03:00.000Z\"),\n }),\n \"invalid_magic_link\"\n )\n })\n })\n\n test(\"stores OIDC attempts with one-time state consumption\", async () => {\n await withStorage(async (storage) => {\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_1\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"state-hash\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n returnTo: \"/objects\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n await expectAuthError(\n storage.oidcAuthorizationAttempts.consume({\n projectId,\n id: \"oidc_1\",\n stateHash: \"wrong\",\n consumedAt: at(\"2026-05-14T10:01:00.000Z\"),\n }),\n \"invalid_oidc_attempt\"\n )\n await expect(\n storage.oidcAuthorizationAttempts.consume({\n projectId,\n id: \"oidc_1\",\n stateHash: \"state-hash\",\n consumedAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n ).resolves.toMatchObject({\n audience: \"atlas\",\n codeVerifier: \"verifier\",\n consumedAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n await expectAuthError(\n storage.oidcAuthorizationAttempts.consume({\n projectId,\n id: \"oidc_1\",\n stateHash: \"state-hash\",\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n }),\n \"invalid_oidc_attempt\"\n )\n })\n })\n\n test(\"authorizes a device and atomically creates its one-time access token\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.sessions.create({\n id: \"ses_device\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"session-hash\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.deviceAuthorizations.create({\n id: \"dva_1\",\n projectId,\n deviceCodeHash: \"device-code-hash\",\n userCode: \"BCDF-HJKM\",\n clientName: \"sixb CLI\",\n tokenName: \"codex\",\n tokenExpiresAt: at(\"2026-08-12T10:00:00.000Z\"),\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n await expect(\n storage.deviceAuthorizations.getByUserCode({ projectId, userCode: \"BCDF-HJKM\" })\n ).resolves.toMatchObject({ id: \"dva_1\", status: \"pending\" })\n await storage.deviceAuthorizations.approve({\n projectId,\n id: \"dva_1\",\n userId: \"usr_1\",\n sessionId: \"ses_device\",\n approvedAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n\n const completed = await storage.completeDeviceAuthorization({\n projectId,\n id: \"dva_1\",\n deviceCodeHash: \"device-code-hash\",\n completedAt: at(\"2026-05-14T10:02:00.000Z\"),\n accessToken: {\n id: \"tok_device\",\n projectId,\n name: \"codex\",\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: \"access-token-hash\",\n createdByPrincipal: { type: \"user\", id: \"usr_1\" },\n createdBySessionId: \"ses_device\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n expiresAt: at(\"2026-08-12T10:00:00.000Z\"),\n },\n })\n\n expect(completed.authorization).toMatchObject({ status: \"consumed\" })\n expect(completed.accessToken).toMatchObject({ id: \"tok_device\", subjectId: \"usr_1\" })\n await expectAuthError(\n storage.completeDeviceAuthorization({\n projectId,\n id: \"dva_1\",\n deviceCodeHash: \"device-code-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n accessToken: {\n id: \"tok_device_2\",\n projectId,\n name: \"codex\",\n kind: \"personal\",\n subjectType: \"user\",\n subjectId: \"usr_1\",\n tokenHash: \"access-token-hash-2\",\n createdBySessionId: \"ses_device\",\n createdAt: at(\"2026-05-14T10:03:00.000Z\"),\n expiresAt: at(\"2026-08-12T10:00:00.000Z\"),\n },\n }),\n \"invalid_device_authorization\"\n )\n await expect(\n storage.accessTokens.getById({ projectId, id: \"tok_device_2\" })\n ).resolves.toBeNull()\n })\n })\n\n test(\"completes magic-link sign-in for an existing user\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.sessions.create({\n id: \"ses_old\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"old-hash\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n const result = await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:02:00.000Z\"),\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_new\", \"session-hash\", \"atlas\", at(\"2026-06-21T10:10:00.000Z\")),\n })\n\n expect(result.user.id).toBe(\"usr_1\")\n expect(result.session).toMatchObject({\n id: \"ses_new\",\n strategyId: \"magic-link\",\n tokenHash: \"session-hash\",\n absoluteExpiresAt: at(\"2026-06-21T10:10:00.000Z\"),\n })\n // Signing in again keeps the user's existing session active; concurrent\n // sessions are allowed.\n const oldSession = await storage.sessions.getById({ projectId, id: \"ses_old\" })\n expect(oldSession?.revokedAt).toBeUndefined()\n await expectAuthError(\n storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_unused_2\",\n session: sessionInput(\"ses_replay\"),\n }),\n \"invalid_magic_link\"\n )\n })\n })\n\n test(\"creates invited users through magic-link completion and applies groups once\", async () => {\n await withStorage(async (storage) => {\n await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \"ava@acme.com\",\n groupIds: [\"commercial\", \"finance\"],\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:17:00.000Z\"),\n })\n\n const result = await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_new\",\n manualGroupIds: [\"security-admins\"],\n session: sessionInput(\"ses_new\"),\n })\n\n expect(result.invitation).toMatchObject({\n id: \"inv_1\",\n status: \"accepted\",\n })\n const memberships = await storage.groupMemberships.listForUser({\n projectId,\n userId: \"usr_new\",\n })\n expect(memberships.map((membership) => [membership.groupId, membership.source])).toEqual([\n [\"commercial\", \"invitation\"],\n [\"finance\", \"invitation\"],\n [\"security-admins\", \"manual\"],\n ])\n })\n })\n\n test(\"preserves existing membership source when accepting an invitation\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_existing\", email: \"ava@acme.com\" })\n await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \"ava@acme.com\",\n groupIds: [\"commercial\", \"finance\"],\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.groupMemberships.upsert({\n projectId,\n userId: \"usr_existing\",\n groupId: \"commercial\",\n source: \"manual\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:17:00.000Z\"),\n })\n\n await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_existing\"),\n })\n\n const memberships = await storage.groupMemberships.listForUser({\n projectId,\n userId: \"usr_existing\",\n })\n expect(memberships.map((membership) => [membership.groupId, membership.source])).toEqual([\n [\"commercial\", \"manual\"],\n [\"finance\", \"invitation\"],\n ])\n })\n })\n\n test(\"does not create missing users when invitation eligibility disappeared\", async () => {\n await withStorage(async (storage) => {\n await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \"ava@acme.com\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n await storage.invitations.revoke({\n projectId,\n id: \"inv_1\",\n revokedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_new\",\n session: sessionInput(\"ses_new\"),\n }),\n \"user_creation_not_allowed\"\n )\n await expect(\n storage.users.getByEmail({ projectId, email: \"ava@acme.com\" })\n ).resolves.toBeNull()\n await expect(storage.magicLinks.getById({ projectId, id: \"ml_1\" })).resolves.toMatchObject({\n consumedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n })\n })\n\n test(\"allows explicit bootstrap creation through magic-link completion\", async () => {\n await withStorage(async (storage) => {\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"founder@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n const result = await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_founder\",\n allowUserCreationWithoutInvitation: true,\n manualGroupIds: [\"security-admins\"],\n session: sessionInput(\"ses_founder\"),\n })\n\n expect(result.user).toMatchObject({\n id: \"usr_founder\",\n email: \"founder@acme.com\",\n })\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_founder\" })\n ).resolves.toMatchObject([{ groupId: \"security-admins\", source: \"manual\" }])\n })\n })\n\n test(\"closes bootstrap user creation when an active user already exists\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, {\n id: \"usr_existing\",\n email: \"existing@acme.com\",\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"founder@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_founder\",\n allowUserCreationWithoutInvitation: true,\n requireNoActiveUsersForUserCreation: true,\n session: sessionInput(\"ses_founder\"),\n }),\n \"user_creation_not_allowed\"\n )\n await expect(\n storage.users.getByEmail({ projectId, email: \"founder@acme.com\" })\n ).resolves.toBeNull()\n await expect(storage.magicLinks.getById({ projectId, id: \"ml_1\" })).resolves.toMatchObject({\n consumedAt: at(\"2026-05-14T10:03:00.000Z\"),\n })\n })\n })\n\n test(\"does not apply the bootstrap closure guard to invited user creation\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, {\n id: \"usr_existing\",\n email: \"existing@acme.com\",\n })\n await storage.invitations.createOrUpdateActive({\n id: \"inv_1\",\n projectId,\n email: \"invited@acme.com\",\n groupIds: [\"commercial\"],\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"invited@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n const result = await storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n newUserId: \"usr_invited\",\n requireNoActiveUsersForUserCreation: true,\n session: sessionInput(\"ses_invited\"),\n })\n\n expect(result.user).toMatchObject({\n id: \"usr_invited\",\n email: \"invited@acme.com\",\n })\n expect(result.invitation).toMatchObject({\n id: \"inv_1\",\n status: \"accepted\",\n })\n })\n })\n\n test(\"consumes valid magic links when an existing user is suspended\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { status: \"suspended\" })\n await storage.magicLinks.create({\n id: \"ml_1\",\n projectId,\n strategyId: \"magic-link\",\n audience: \"atlas\",\n email: \"ava@acme.com\",\n tokenHash: \"link-hash\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:16:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeMagicLinkSignIn({\n projectId,\n magicLinkId: \"ml_1\",\n tokenHash: \"link-hash\",\n completedAt: at(\"2026-05-14T10:02:00.000Z\"),\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_new\"),\n }),\n \"suspended_user\"\n )\n await expect(storage.magicLinks.getById({ projectId, id: \"ml_1\" })).resolves.toMatchObject({\n consumedAt: at(\"2026-05-14T10:02:00.000Z\"),\n })\n })\n })\n\n test(\"completes OIDC sign-in through an existing identity\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_oidc\", email: \"ava@acme.com\" })\n await storage.identities.upsert({\n projectId,\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n claims: { email: \"ava@acme.com\" },\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n })\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_1\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"state-hash\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:11:00.000Z\"),\n })\n\n const result = await storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_1\",\n stateHash: \"state-hash\",\n completedAt: at(\"2026-05-14T10:02:00.000Z\"),\n subject: \"00u1\",\n email: \"renamed@acme.com\",\n emailVerified: true,\n claims: { email: \"renamed@acme.com\" },\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_oidc\"),\n })\n\n expect(result.identity).toMatchObject({\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n claims: { email: \"renamed@acme.com\" },\n })\n await expect(storage.users.getById({ projectId, id: \"usr_oidc\" })).resolves.toMatchObject({\n email: \"ava@acme.com\",\n })\n })\n })\n\n test(\"auto-links OIDC by verified email only when explicitly allowed\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage, { id: \"usr_existing\", email: \"ava@acme.com\" })\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_blocked\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"blocked-state\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_blocked\",\n stateHash: \"blocked-state\",\n completedAt: at(\"2026-05-14T10:01:00.000Z\"),\n subject: \"00u1\",\n email: \"ava@acme.com\",\n emailVerified: false,\n autoLinkByVerifiedEmail: true,\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_blocked\"),\n }),\n \"email_link_not_allowed\"\n )\n\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_allowed\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"allowed-state\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:02:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:12:00.000Z\"),\n })\n const result = await storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_allowed\",\n stateHash: \"allowed-state\",\n completedAt: at(\"2026-05-14T10:03:00.000Z\"),\n subject: \"00u1\",\n email: \"ava@acme.com\",\n emailVerified: true,\n autoLinkByVerifiedEmail: true,\n newUserId: \"usr_unused\",\n session: sessionInput(\"ses_allowed\"),\n })\n\n expect(result.user.id).toBe(\"usr_existing\")\n expect(result.identity).toMatchObject({\n userId: \"usr_existing\",\n })\n })\n })\n\n test(\"creates new OIDC users through active invitations and applies groups\", async () => {\n await withStorage(async (storage) => {\n await storage.invitations.createOrUpdateActive({\n id: \"inv_oidc\",\n projectId,\n email: \"ava@acme.com\",\n groupIds: [\"commercial\"],\n createdAt: at(\"2026-05-14T09:59:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_1\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"state-hash\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n const result = await storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_1\",\n stateHash: \"state-hash\",\n completedAt: at(\"2026-05-14T10:01:00.000Z\"),\n subject: \"00u1\",\n email: \"ava@acme.com\",\n displayName: \"Ava Chen\",\n emailVerified: true,\n newUserId: \"usr_oidc\",\n session: sessionInput(\"ses_oidc\"),\n })\n\n expect(result.user).toMatchObject({\n id: \"usr_oidc\",\n email: \"ava@acme.com\",\n displayName: \"Ava Chen\",\n })\n expect(result.invitation).toMatchObject({\n id: \"inv_oidc\",\n status: \"accepted\",\n })\n expect(result.identity).toMatchObject({\n strategyId: \"okta\",\n subject: \"00u1\",\n userId: \"usr_oidc\",\n })\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_oidc\" })\n ).resolves.toMatchObject([{ groupId: \"commercial\", source: \"invitation\" }])\n })\n })\n\n test(\"does not create new OIDC users without invitation or bootstrap eligibility\", async () => {\n await withStorage(async (storage) => {\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_1\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"state-hash\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n await expectAuthError(\n storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_1\",\n stateHash: \"state-hash\",\n completedAt: at(\"2026-05-14T10:01:00.000Z\"),\n subject: \"00u1\",\n email: \"ava@acme.com\",\n emailVerified: true,\n newUserId: \"usr_oidc\",\n session: sessionInput(\"ses_oidc\"),\n }),\n \"user_creation_not_allowed\"\n )\n await expect(\n storage.users.getByEmail({ projectId, email: \"ava@acme.com\" })\n ).resolves.toBeNull()\n })\n })\n\n test(\"allows first OIDC bootstrap user creation with manual groups\", async () => {\n await withStorage(async (storage) => {\n await storage.oidcAuthorizationAttempts.create({\n id: \"oidc_bootstrap\",\n projectId,\n strategyId: \"okta\",\n audience: \"atlas\",\n stateHash: \"bootstrap-state\",\n nonceHash: \"nonce-hash\",\n codeVerifier: \"verifier\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-14T10:10:00.000Z\"),\n })\n\n const result = await storage.completeOidcSignIn({\n projectId,\n oidcAuthorizationAttemptId: \"oidc_bootstrap\",\n stateHash: \"bootstrap-state\",\n completedAt: at(\"2026-05-14T10:01:00.000Z\"),\n subject: \"00u1\",\n email: \"founder@acme.com\",\n emailVerified: true,\n allowUserCreationWithoutInvitation: true,\n requireNoActiveUsersForUserCreation: true,\n manualGroupIds: [\"security-admins\"],\n newUserId: \"usr_founder\",\n session: sessionInput(\"ses_oidc_bootstrap\"),\n })\n\n expect(result.user).toMatchObject({\n id: \"usr_founder\",\n email: \"founder@acme.com\",\n })\n await expect(\n storage.groupMemberships.listForUser({ projectId, userId: \"usr_founder\" })\n ).resolves.toMatchObject([{ groupId: \"security-admins\", source: \"manual\" }])\n })\n })\n\n test(\"suspends users and revokes active sessions immediately\", async () => {\n await withStorage(async (storage) => {\n await createUser(storage)\n await storage.sessions.create({\n id: \"ses_1\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"atlas\",\n tokenHash: \"hash-1\",\n createdAt: at(\"2026-05-14T10:00:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:00:00.000Z\"),\n })\n await storage.sessions.create({\n id: \"ses_app\",\n projectId,\n userId: \"usr_1\",\n strategyId: \"magic-link\",\n audience: \"app\",\n tokenHash: \"hash-app\",\n createdAt: at(\"2026-05-14T10:01:00.000Z\"),\n expiresAt: at(\"2026-05-21T10:01:00.000Z\"),\n })\n\n const suspended = await storage.suspendUserAndRevokeSessions({\n projectId,\n userId: \"usr_1\",\n suspendedAt: at(\"2026-05-14T10:05:00.000Z\"),\n })\n\n expect(suspended.status).toBe(\"suspended\")\n await expect(storage.sessions.getById({ projectId, id: \"ses_1\" })).resolves.toMatchObject({\n revokedAt: at(\"2026-05-14T10:05:00.000Z\"),\n })\n await expect(storage.sessions.getById({ projectId, id: \"ses_app\" })).resolves.toMatchObject(\n {\n revokedAt: at(\"2026-05-14T10:05:00.000Z\"),\n }\n )\n })\n })\n })\n}\n",
14
14
  "import { describe, expect, test } from \"bun:test\"\nimport { blobIdFromDigest, computeBlobDigest } from \"../blob-storage\"\nimport type { BlobStorage } from \"../blob-storage/types\"\n\nexport interface BlobStorageContractSuiteOptions<TStorage extends BlobStorage = BlobStorage> {\n /** Factory that produces an isolated storage instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\n/** Runs the shared content, streaming, size-validation, and cancellation contract. */\nexport function runBlobStorageContractSuite<TStorage extends BlobStorage>(\n label: string,\n options: BlobStorageContractSuiteOptions<TStorage>\n): void {\n const encoder = new TextEncoder()\n\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"streams bodies into stable content-addressed references\", async () => {\n await withStorage(async (storage) => {\n const body = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(encoder.encode(\"streamed \"))\n controller.enqueue(encoder.encode(\"body\"))\n controller.close()\n },\n })\n\n const fileRef = await storage.put({\n body,\n expectedSizeBytes: 13,\n fileName: \"report.bin\",\n mediaType: \"application/octet-stream\",\n logicalPath: \"reports/report.bin\",\n })\n\n expect(fileRef.sizeBytes).toBe(13)\n expect(fileRef.blobId).toBe(blobIdFromDigest(fileRef.digest))\n expect(fileRef.fileName).toBe(\"report.bin\")\n expect(fileRef.mediaType).toBe(\"application/octet-stream\")\n expect(fileRef.logicalPath).toBe(\"reports/report.bin\")\n expect(await new Response(await storage.open(fileRef.blobId)).text()).toBe(\"streamed body\")\n })\n })\n\n test(\"rejects an expected size mismatch without publishing a blob\", async () => {\n await withStorage(async (storage) => {\n const bytes = encoder.encode(\"wrong size\")\n const blobId = blobIdFromDigest(computeBlobDigest(bytes))\n\n await expect(\n storage.put({ body: bytes, expectedSizeBytes: bytes.byteLength + 1 })\n ).rejects.toThrow(\n `Blob size mismatch: expected ${bytes.byteLength + 1} bytes, received ${bytes.byteLength}.`\n )\n await expect(storage.stat(blobId)).resolves.toBeNull()\n })\n })\n\n test(\"rejects invalid expected sizes\", async () => {\n await withStorage(async (storage) => {\n const body = new ReadableStream<Uint8Array>({\n pull(controller) {\n controller.close()\n },\n })\n\n await expect(storage.put({ body, expectedSizeBytes: -1 })).rejects.toThrow(\n \"expectedSizeBytes must be a non-negative safe integer\"\n )\n })\n })\n\n test(\"cancels an active body without publishing partial bytes\", async () => {\n await withStorage(async (storage) => {\n const abort = new AbortController()\n let bodyCancelled = false\n const firstChunk = encoder.encode(\"partial\")\n const blobId = blobIdFromDigest(computeBlobDigest(firstChunk))\n const body = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(firstChunk)\n },\n cancel() {\n bodyCancelled = true\n },\n })\n\n const put = storage.put({ body, signal: abort.signal })\n abort.abort(new Error(\"cancel blob put\"))\n\n await expect(put).rejects.toThrow(\"cancel blob put\")\n expect(bodyCancelled).toBe(true)\n await expect(storage.stat(blobId)).resolves.toBeNull()\n })\n })\n })\n}\n",
15
- "import { describe, expect, test } from \"bun:test\"\nimport { BrokerError } from \"../broker/errors\"\nimport type {\n Broker,\n BrokerRecord,\n BrokerRecordInput,\n BrokerStreamDefinition,\n} from \"../broker/types\"\nimport type { JsonValue } from \"../json\"\n\nexport interface BrokerContractSuiteOptions<TBroker extends Broker = Broker> {\n /** Factory that produces a fresh `Broker` instance for each test case. */\n readonly createBroker: () => TBroker | Promise<TBroker>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (broker: TBroker) => void | Promise<void>\n /**\n * Retention age used by the maxAgeMs assertion. Defaults to 20ms.\n * Providers with coarse server-side retention can increase this in their own suite.\n */\n readonly maxAgeMs?: number\n /**\n * Time to wait for maxAgeMs retention to expire. Defaults to `maxAgeMs + 20`.\n */\n readonly maxAgeWaitMs?: number\n /**\n * Time to wait after registering a live subscription before appending records.\n * Defaults to 0 for synchronous providers.\n */\n readonly subscriptionSetupMs?: number\n /**\n * Time to wait for asynchronous subscription delivery. Defaults to 200ms.\n */\n readonly subscriptionDeliveryTimeoutMs?: number\n /**\n * Poll interval while waiting for asynchronous subscription delivery. Defaults to 10ms.\n */\n readonly subscriptionPollIntervalMs?: number\n}\n\nconst eventsStream: BrokerStreamDefinition = { id: \"__events\" }\nconst retainedStream: BrokerStreamDefinition = { id: \"__retained\", retention: { maxRecords: 2 } }\n\n/**\n * Runs the shared `Broker` contract against any provider.\n *\n * The contract intentionally stays small: append records, read retained records\n * by exclusive cursor, subscribe to retained/live streams, and apply portable\n * retention. Provider-specific administration and durable consumer identity\n * are outside the V1 broker surface.\n */\nexport function runBrokerContractSuite<TBroker extends Broker>(\n label: string,\n options: BrokerContractSuiteOptions<TBroker>\n): void {\n const maxAgeMs = options.maxAgeMs ?? 20\n const maxAgeWaitMs = options.maxAgeWaitMs ?? maxAgeMs + 20\n const subscriptionSetupMs = options.subscriptionSetupMs ?? 0\n const subscriptionDeliveryTimeoutMs = options.subscriptionDeliveryTimeoutMs ?? 200\n const subscriptionPollIntervalMs = options.subscriptionPollIntervalMs ?? 10\n\n const withBroker = async (body: (broker: TBroker) => Promise<void>): Promise<void> => {\n const broker = await options.createBroker()\n try {\n await body(broker)\n } finally {\n await options.teardown?.(broker)\n }\n }\n\n describe(label, () => {\n describe(\"append\", () => {\n test(\"returns stored records with cursors and timestamps\", async () => {\n await withBroker(async (broker) => {\n const before = Date.now()\n\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n {\n name: \"test.record\",\n key: \"Room:room-1\",\n payload: { objectTypeId: \"Room\", primaryId: \"room-1\" },\n },\n ],\n })\n\n expect(records).toHaveLength(1)\n expect(records[0]).toMatchObject({\n streamId: eventsStream.id,\n name: \"test.record\",\n key: \"Room:room-1\",\n payload: { objectTypeId: \"Room\", primaryId: \"room-1\" },\n })\n expect(records[0]?.cursor).toBeTruthy()\n expect(Date.parse(records[0]!.publishedAt)).toBeGreaterThanOrEqual(before)\n })\n })\n\n test(\"snapshots appended payloads\", async () => {\n await withBroker(async (broker) => {\n const payload = { nested: { value: \"before\" } }\n\n const [record] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload }],\n })\n payload.nested.value = \"after\"\n\n expect(record?.payload).toEqual({ nested: { value: \"before\" } })\n const [readBack] = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n })\n expect(readBack?.payload).toEqual({ nested: { value: \"before\" } })\n })\n })\n\n test(\"returns empty array for empty appends\", async () => {\n await withBroker(async (broker) => {\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [],\n })\n\n expect(records).toEqual([])\n })\n })\n\n test(\"rejects empty projectId and stream id\", async () => {\n await withBroker(async (broker) => {\n await expect(\n appendRecords(broker, {\n projectId: \" \",\n stream: eventsStream,\n records: [{ payload: { ok: true } }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \" \" },\n records: [{ payload: { ok: true } }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"rejects payloads that are not JSON values\", async () => {\n await withBroker(async (broker) => {\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n {\n payload: {\n observedAt: new Date(\"2026-01-01T00:00:00.000Z\"),\n } as unknown as JsonValue,\n },\n ],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: { value: Number.NaN } as unknown as JsonValue }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"requires streams to be ensured before appending records\", async () => {\n await withBroker(async (broker) => {\n await expect(\n broker.append({\n projectId: \"project-a\",\n streamId: \"missing\",\n records: [{ payload: \"one\" }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n })\n\n describe(\"read\", () => {\n test(\"reads records after an exclusive cursor\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: { value: 1 } },\n { name: \"two\", payload: { value: 2 } },\n { name: \"three\", payload: { value: 3 } },\n ],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n afterCursor: first?.cursor,\n })\n\n expect(records.map((record) => record.name)).toEqual([\"two\", \"three\"])\n })\n })\n\n test(\"limits matching records after applying name filters\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"test.record\", payload: { id: \"room-1\" } },\n { name: \"telemetry.appended\", payload: { id: \"temp-1\" } },\n { name: \"test.record\", payload: { id: \"room-2\" } },\n ],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n names: [\"test.record\"],\n limit: 2,\n })\n\n expect(records.map((record) => record.payload)).toEqual([\n { id: \"room-1\" },\n { id: \"room-2\" },\n ])\n })\n })\n\n test(\"returns empty array for missing streams and non-positive limits\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"test.record\", payload: { id: \"room-1\" } }],\n })\n\n expect(\n await broker.read({\n projectId: \"project-a\",\n streamId: \"missing\",\n })\n ).toEqual({ records: [], cursor: undefined, hasMore: false })\n expect(\n await readRecords(broker, { projectId: \"project-a\", stream: eventsStream, limit: 0 })\n ).toEqual([])\n expect(\n await readRecords(broker, { projectId: \"project-a\", stream: eventsStream, limit: -1 })\n ).toEqual([])\n })\n })\n\n test(\"isolates projects and streams\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \"stream-a\" },\n records: [{ payload: { value: \"a\" } }],\n })\n await appendRecords(broker, {\n projectId: \"project-b\",\n stream: { id: \"stream-a\" },\n records: [{ payload: { value: \"b\" } }],\n })\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \"stream-b\" },\n records: [{ payload: { value: \"c\" } }],\n })\n\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-a\", stream: { id: \"stream-a\" } })\n )\n ).toEqual([{ value: \"a\" }])\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-b\", stream: { id: \"stream-a\" } })\n )\n ).toEqual([{ value: \"b\" }])\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-a\", stream: { id: \"stream-b\" } })\n )\n ).toEqual([{ value: \"c\" }])\n })\n })\n\n test(\"advances the page cursor when filters match no records\", async () => {\n await withBroker(async (broker) => {\n const appended = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: 1 },\n { name: \"two\", payload: 2 },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n names: [\"missing\"],\n limit: 1,\n })\n\n expect(page.records).toEqual([])\n expect(page.cursor).toBe(appended.at(-1)?.cursor)\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"filters by record key before applying the page limit\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"sync:a\", payload: \"a1\" },\n { key: \"sync:b\", payload: \"b\" },\n { key: \"sync:a\", payload: \"a2\" },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"sync:a\"],\n limit: 2,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"a1\", \"a2\"])\n })\n })\n\n test(\"reports no forward page when only filtered-out records remain\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"target\", payload: \"match\" },\n { key: \"other\", payload: \"filtered-one\" },\n { key: \"other\", payload: \"filtered-two\" },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"target\"],\n limit: 1,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"match\"])\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"reports no backward page when only filtered-out records remain\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"other\", payload: \"filtered-one\" },\n { key: \"other\", payload: \"filtered-two\" },\n { key: \"target\", payload: \"match\" },\n ],\n })\n\n const page = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"target\"],\n limit: 1,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"match\"])\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"tails recent records and paginates toward older history\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [1, 2, 3, 4, 5].map((payload) => ({ payload })),\n })\n\n const recent = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n limit: 2,\n })\n expect(recent.records.map((record) => record.payload)).toEqual([4, 5])\n expect(recent.hasMore).toBe(true)\n\n const older = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n beforeCursor: recent.cursor,\n limit: 2,\n })\n expect(older.records.map((record) => record.payload)).toEqual([2, 3])\n expect(older.hasMore).toBe(true)\n })\n })\n })\n\n describe(\"latestCursor\", () => {\n test(\"returns undefined for missing and empty streams\", async () => {\n await withBroker(async (broker) => {\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: \"missing\" })\n ).toBeUndefined()\n\n await broker.ensureStream({ projectId: \"project-a\", stream: eventsStream })\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: eventsStream.id })\n ).toBeUndefined()\n })\n })\n\n test(\"returns the newest retained record cursor\", async () => {\n await withBroker(async (broker) => {\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [{ payload: \"one\" }, { payload: \"two\" }, { payload: \"three\" }],\n })\n\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: retainedStream.id })\n ).toBe(records.at(-1)?.cursor)\n })\n })\n })\n\n describe(\"subscribe\", () => {\n test(\"requires streams to be ensured before subscribing\", async () => {\n await withBroker(async (broker) => {\n await expect(\n broker.subscribe({ projectId: \"project-a\", streamId: \"missing\" }, () => {})\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"defaults to latest and receives only new records\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"before\", payload: { value: \"before\" } }],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"after\", payload: \"after\" }],\n })\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive the appended record\",\n })\n expect(received).toEqual([\"after\"])\n })\n })\n\n test(\"can subscribe from earliest retained record\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: \"one\" },\n { name: \"two\", payload: \"two\" },\n ],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream, from: \"earliest\" },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"three\", payload: \"three\" }],\n })\n\n await waitUntil(() => received.length === 3, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive retained plus live records\",\n })\n expect(received).toEqual([\"one\", \"two\", \"three\"])\n })\n })\n\n test(\"can subscribe after a cursor and filter by name and key\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"test.record\", key: \"other\", payload: \"one\" },\n { name: \"telemetry.appended\", key: \"target\", payload: \"two\" },\n { name: \"test.record\", key: \"target\", payload: \"three\" },\n ],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n {\n projectId: \"project-a\",\n stream: eventsStream,\n afterCursor: first?.cursor,\n names: [\"test.record\"],\n keys: [\"target\"],\n },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not replay matching records after cursor\",\n })\n expect(received).toEqual([\"three\"])\n })\n })\n\n test(\"unsubscribe stops delivery\", async () => {\n await withBroker(async (broker) => {\n const received: string[] = []\n const unsubscribe = await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"one\" }],\n })\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive the first record before unsubscribe\",\n })\n\n unsubscribe()\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"two\" }],\n })\n await Bun.sleep(Math.min(250, subscriptionDeliveryTimeoutMs))\n\n expect(received).toEqual([\"one\"])\n })\n })\n\n test(\"swallows handler errors\", async () => {\n await withBroker(async (broker) => {\n const received: string[] = []\n await subscribeRecords(broker, { projectId: \"project-a\", stream: eventsStream }, () => {\n throw new Error(\"subscriber failed\")\n })\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"one\" }],\n })\n ).resolves.toHaveLength(1)\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription delivery stopped after another handler threw\",\n })\n expect(received).toEqual([\"one\"])\n })\n })\n })\n\n describe(\"retention\", () => {\n test(\"bounds retained history by bytes\", async () => {\n await withBroker(async (broker) => {\n const stream = { id: \"__byte_retained\", retention: { maxBytes: 1_024 } }\n await broker.ensureStream({ projectId: \"project-a\", stream })\n\n await broker.append({\n projectId: \"project-a\",\n streamId: stream.id,\n records: [\"one\", \"two\", \"three\"].map((label) => ({\n name: label,\n payload: { label, body: \"x\".repeat(600) },\n })),\n })\n\n const records = await broker.read({\n projectId: \"project-a\",\n streamId: stream.id,\n })\n expect(records.records.length).toBeGreaterThan(0)\n expect(records.records.length).toBeLessThan(3)\n expect(records.records.at(-1)?.name).toBe(\"three\")\n })\n })\n\n test(\"retains only the latest maxRecords\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [{ payload: \"one\" }, { payload: \"two\" }, { payload: \"three\" }],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n })\n\n expect(records.map((record) => record.payload)).toEqual([\"two\", \"three\"])\n })\n })\n\n test(\"rejects resuming from a cursor that predates the retained range\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [\n { payload: \"one\" },\n { payload: \"two\" },\n { payload: \"three\" },\n { payload: \"four\" },\n ],\n })\n\n await expect(\n readRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n afterCursor: first?.cursor,\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n broker.tail({\n projectId: \"project-a\",\n streamId: retainedStream.id,\n beforeCursor: first?.cursor,\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n // A resuming subscriber must be told the gap exists rather than silently fast-forwarded\n // to the oldest retained record, which would look like a complete stream. To prove this\n // still guards, drop the `assertCursorInRetainedRange` call from `subscribe` in\n // `broker/in-memory.ts` (or from `nats-broker.ts`) and only this expectation fails.\n await expect(\n broker.subscribe(\n {\n projectId: \"project-a\",\n streamId: retainedStream.id,\n afterCursor: first?.cursor,\n },\n () => undefined\n )\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"retains only records within maxAgeMs\", async () => {\n await withBroker(async (broker) => {\n const stream = { id: \"__age_retained\", retention: { maxAgeMs } }\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream,\n records: [{ payload: \"old\" }],\n })\n\n await Bun.sleep(maxAgeWaitMs)\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream,\n records: [{ payload: \"new\" }],\n })\n\n const records = await readRecords(broker, { projectId: \"project-a\", stream })\n\n expect(records.map((record) => record.payload)).toEqual([\"new\"])\n })\n })\n })\n })\n}\n\nasync function payloads(records: Promise<readonly BrokerRecord[]>): Promise<readonly unknown[]> {\n return (await records).map((record) => record.payload)\n}\n\nasync function appendRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n records: readonly BrokerRecordInput[]\n }\n): Promise<readonly BrokerRecord[]> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return broker.append({\n projectId: params.projectId,\n streamId: params.stream.id,\n records: params.records,\n })\n}\n\nasync function readRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n afterCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }\n): Promise<readonly BrokerRecord[]> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return (\n await broker.read({\n projectId: params.projectId,\n streamId: params.stream.id,\n afterCursor: params.afterCursor,\n limit: params.limit,\n names: params.names,\n keys: params.keys,\n })\n ).records\n}\n\nasync function subscribeRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n from?: \"latest\" | \"earliest\"\n afterCursor?: string\n names?: readonly string[]\n keys?: readonly string[]\n },\n handler: (records: readonly BrokerRecord[]) => void\n): Promise<() => void> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return broker.subscribe(\n {\n projectId: params.projectId,\n streamId: params.stream.id,\n from: params.from,\n afterCursor: params.afterCursor,\n names: params.names,\n keys: params.keys,\n },\n handler\n )\n}\n\nasync function waitUntil(\n predicate: () => boolean,\n options: { timeoutMs: number; intervalMs: number; message: string }\n): Promise<void> {\n const deadline = Date.now() + options.timeoutMs\n while (Date.now() < deadline) {\n if (predicate()) {\n return\n }\n await Bun.sleep(options.intervalMs)\n }\n throw new Error(`${options.message} within ${options.timeoutMs}ms`)\n}\n",
16
- "import { describe, expect, test } from \"bun:test\"\nimport type {\n ClaimConnectorConnectionRunCallbackInput,\n ClaimConnectorCredentialMutationResult,\n ConnectorAuthorizationRecord,\n ConnectorConnectionStorage,\n ConnectorCredentialMutationKind,\n CreateConnectorAuthorizationAttemptInput,\n CreateConnectorConnectionRunInput,\n} from \"../storage/connector-connections\"\nimport type { CreateExecutionInput } from \"../storage/executions\"\nimport type { Storage } from \"../storage/types\"\n\nexport type ConnectorConnectionStorageContractStorage = Storage & {\n readonly connectorConnections: ConnectorConnectionStorage\n}\n\nexport interface ConnectorConnectionStorageContractSuiteOptions<\n TStorage extends\n ConnectorConnectionStorageContractStorage = ConnectorConnectionStorageContractStorage,\n> {\n /** Factory that produces one isolated complete storage provider for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Advances the storage-authoritative clock without relying on wall-clock sleeps. */\n readonly advanceTime: (storage: TStorage, durationMs: number) => void | Promise<void>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"project-a\"\nconst connectorId = \"social\"\nconst credentials = {\n version: 1,\n algorithm: \"A256GCM\",\n nonce: \"nonce\",\n ciphertext: \"ciphertext\",\n tag: \"tag\",\n} as const\n\n/** Runs the atomicity, fencing, slot uniqueness and project-isolation storage contract. */\nexport function runConnectorConnectionStorageContractSuite<\n TStorage extends ConnectorConnectionStorageContractStorage,\n>(label: string, options: ConnectorConnectionStorageContractSuiteOptions<TStorage>): void {\n const withStorage = async (\n body: (connections: TStorage[\"connectorConnections\"], storage: TStorage) => Promise<void>\n ): Promise<void> => {\n const root = await options.createStorage()\n try {\n await body(root.connectorConnections, root)\n } finally {\n await options.teardown?.(root)\n }\n }\n\n describe(label, () => {\n test(\"binds one-use authorization attempts to their initiating execution\", async () => {\n await withStorage(async (storage) => {\n const attempt = authorizationAttempt()\n await expect(storage.createAuthorizationAttempt(attempt)).resolves.toMatchObject({\n id: attempt.id,\n projectId,\n connectorId,\n initiatedByExecutionId: attempt.initiatedByExecutionId,\n })\n\n for (const mismatchedScope of [\n { projectId: \"project-b\" },\n { connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.consumeAuthorizationAttempt({\n ...authorizationAttemptConsumption(),\n ...mismatchedScope,\n })\n ).rejects.toThrow(\"invalid, expired, or already used\")\n }\n\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).resolves.toMatchObject({\n id: attempt.id,\n initiatedByExecutionId: attempt.initiatedByExecutionId,\n })\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt())\n ).resolves.toMatchObject({ id: \"attempt-a\" })\n })\n })\n\n test(\"expires authorization attempts from the authoritative storage clock\", async () => {\n await withStorage(async (storage, root) => {\n const ttlMs = 60_000\n const attempt = await storage.createAuthorizationAttempt(authorizationAttempt({ ttlMs }))\n expect(attempt.expiresAt.getTime() - attempt.createdAt.getTime()).toBe(ttlMs)\n\n await options.advanceTime(root, ttlMs)\n\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt())\n ).resolves.toMatchObject({ id: \"attempt-a\" })\n })\n })\n\n test(\"returns detached authorization attempt records\", async () => {\n await withStorage(async (storage) => {\n const created = await storage.createAuthorizationAttempt(authorizationAttempt())\n Object.assign(created.codeVerifier, { ciphertext: \"mutated\" })\n\n const consumed = await storage.consumeAuthorizationAttempt(\n authorizationAttemptConsumption()\n )\n expect(consumed.codeVerifier.ciphertext).toBe(credentials.ciphertext)\n })\n })\n\n test(\"commits and rolls back connection runs with their attempt and execution\", async () => {\n await withStorage(async (storage, root) => {\n const committedExecution = requestExecution(\"execution-commit\")\n const committedAttempt = authorizationAttempt({\n id: \"attempt-commit\",\n initiatedByExecutionId: committedExecution.id,\n connectionRunId: \"run-commit\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-commit\",\n })\n const committedRun = connectionRun({\n id: \"run-commit\",\n initiatedByExecutionId: committedExecution.id,\n })\n await root.transaction(\n async (tx) => {\n await tx.executions.create(committedExecution)\n const connections = requireTransactionConnections(tx)\n await connections.createConnectionRun(committedRun)\n await connections.createAuthorizationAttempt(committedAttempt)\n },\n { isolation: \"serializable\" }\n )\n\n expect(\n await root.executions.getById({ projectId, id: committedExecution.id })\n ).not.toBeNull()\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: committedRun.id })\n ).resolves.toMatchObject({ id: committedRun.id })\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption(committedAttempt.id))\n ).resolves.toMatchObject({ id: committedAttempt.id })\n\n const rolledBackExecution = requestExecution(\"execution-rollback\")\n const rolledBackAttempt = authorizationAttempt({\n id: \"attempt-rollback\",\n initiatedByExecutionId: rolledBackExecution.id,\n connectionRunId: \"run-rollback\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-rollback\",\n })\n const rolledBackRun = connectionRun({\n id: \"run-rollback\",\n initiatedByExecutionId: rolledBackExecution.id,\n })\n const rollback = new Error(\"rollback connector authorization attempt\")\n await expect(\n root.transaction(\n async (tx) => {\n await tx.executions.create(rolledBackExecution)\n const connections = requireTransactionConnections(tx)\n await connections.createConnectionRun(rolledBackRun)\n await connections.createAuthorizationAttempt(rolledBackAttempt)\n throw rollback\n },\n { isolation: \"serializable\" }\n )\n ).rejects.toBe(rollback)\n\n expect(await root.executions.getById({ projectId, id: rolledBackExecution.id })).toBeNull()\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: rolledBackRun.id })\n ).resolves.toBeNull()\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption(rolledBackAttempt.id))\n ).rejects.toThrow(\"invalid, expired, or already used\")\n })\n })\n\n test(\"links at most one headless attempt to an awaiting provider run\", async () => {\n await withStorage(async (storage) => {\n const headlessAttempt = {\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n } as const\n\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt(headlessAttempt))\n ).rejects.toThrow(\"does not match its connection run\")\n\n await storage.createConnectionRun(connectionRun())\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt(headlessAttempt))\n ).resolves.toMatchObject({ id: \"attempt-a\", connectionRunId: \"run-a\" })\n await expect(\n storage.createAuthorizationAttempt(\n authorizationAttempt({ ...headlessAttempt, id: \"attempt-b\" })\n )\n ).rejects.toThrow(\"does not match its connection run\")\n })\n })\n\n test(\"claims a headless callback once with state and browser binding\", async () => {\n await withStorage(async (storage) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"wrong-binding\",\n })\n )\n ).resolves.toBeNull()\n\n const claimed = await storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n expect(claimed).toMatchObject({\n type: \"claimed\",\n run: { id: \"run-a\", status: \"running\" },\n attempt: { id: \"attempt-a\", connectionRunId: \"run-a\" },\n returnTo: \"https://app.example.com/connectors\",\n })\n expect(claimed && \"returnTo\" in claimed.run).toBe(false)\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n ).resolves.toBeNull()\n })\n })\n\n test(\"expires a waiting run and removes its protocol attempt lazily\", async () => {\n await withStorage(async (storage, root) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n await options.advanceTime(root, 60_000)\n\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({ status: \"expired\" })\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n ).resolves.toBeNull()\n })\n })\n\n test(\"fails an expired processing run and fences its late result\", async () => {\n await withStorage(async (storage, root) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n const claimed = await storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({ processingTtlMs: 1_000 })\n )\n if (!claimed || claimed.type !== \"claimed\") throw new Error(\"Expected callback claim.\")\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await expect(\n storage.attachConnectionRunAuthorization({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n })\n ).resolves.not.toBeNull()\n\n await options.advanceTime(root, 1_000)\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({\n status: \"failed\",\n authorizationId: authorization.id,\n error: { code: \"internal.unexpected\" },\n })\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n await expect(\n storage.finishConnectionRun({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n status: \"cancelled\",\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"keeps account selection atomic with its connection run\", async () => {\n await withStorage(async (storage) => {\n const active = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await connect(storage, active, \"connection-a\", \"account-a\")\n const pending = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n await createSelectionRun(storage, pending)\n\n await expect(\n storage.putConnectionFromRun({\n id: \"connection-b\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-b\", label: \"Account B\" },\n replace: false,\n })\n ).rejects.toThrow(\"explicit replacement is required\")\n expect(\n await storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).toMatchObject({ status: \"waiting\", waitingFor: \"account_selection\" })\n expect(await storage.getAuthorization(authorizationKey(pending.id))).toEqual(pending)\n\n const selected = await storage.putConnectionFromRun({\n id: \"connection-b\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-b\", label: \"Account B\" },\n replace: true,\n })\n expect(selected.run).toMatchObject({ status: \"succeeded\" })\n })\n })\n\n test(\"keeps one stable connection per project connector slot\", async () => {\n await withStorage(async (storage) => {\n const first = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const firstConnection = await connect(storage, first, \"connection-a\", \"account-a\")\n const second = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n\n await expect(connect(storage, second, \"connection-b\", \"account-b\")).rejects.toThrow(\n \"explicit replacement is required\"\n )\n const replaced = await storage.putConnection({\n id: \"connection-b\",\n projectId,\n connectorId,\n authorizationId: second.id,\n owner: { type: \"project\" },\n slot: \"default\",\n account: { id: \"account-b\", label: \"ignored\" },\n replace: true,\n })\n expect(replaced.connection.id).toBe(firstConnection.connection.id)\n expect(replaced.revocationPendingAuthorizationId).toBe(first.id)\n expect(await storage.getAuthorization(authorizationKey(first.id))).toMatchObject({\n status: \"revocation_pending\",\n })\n expect(\n await storage.getConnection({\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n })\n ).toMatchObject({ authorizationId: second.id, account: { id: \"account-b\" } })\n })\n })\n\n test(\"retains disconnected identities and reactivates the same slot id\", async () => {\n await withStorage(async (storage) => {\n const first = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const connected = await connect(storage, first, \"connection-a\", \"account-a\")\n\n const disconnected = await storage.disconnectConnection({\n projectId,\n connectorId,\n connectionId: connected.connection.id,\n })\n expect(disconnected).toMatchObject({\n connection: { id: connected.connection.id, status: \"disconnected\" },\n authorization: { status: \"revocation_pending\" },\n revocationPendingAuthorizationId: first.id,\n })\n expect(\n await storage.getConnection({\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n })\n ).toBeNull()\n expect(\n await storage.getConnectionById({\n projectId,\n connectorId,\n connectionId: connected.connection.id,\n })\n ).toMatchObject({ status: \"disconnected\" })\n\n const second = await createAuthorization(storage, \"authorization-b\", \"account-a\")\n const reconnected = await connect(storage, second, \"ignored-new-id\", \"account-a\")\n expect(reconnected.connection).toMatchObject({\n id: connected.connection.id,\n authorizationId: second.id,\n status: \"connected\",\n })\n })\n })\n\n test(\"keeps pending selection untouched when connection validation fails\", async () => {\n await withStorage(async (storage) => {\n const active = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const existing = await connect(storage, active, \"connection-a\", \"account-a\")\n const replacement = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n\n await expect(connect(storage, replacement, \"connection-b\", \"account-b\")).rejects.toThrow(\n \"explicit replacement is required\"\n )\n expect(await storage.getAuthorization(authorizationKey(replacement.id))).toEqual(\n replacement\n )\n\n const duplicateId = await createAuthorization(storage, \"authorization-c\", \"account-c\")\n await expect(\n storage.putConnection({\n id: existing.connection.id,\n projectId,\n connectorId,\n authorizationId: duplicateId.id,\n owner: { type: \"project\" },\n slot: \"secondary\",\n account: { id: \"account-c\", label: \"ignored\" },\n replace: false,\n })\n ).rejects.toThrow(\"connection id already exists\")\n expect(await storage.getAuthorization(authorizationKey(duplicateId.id))).toEqual(\n duplicateId\n )\n })\n })\n\n test(\"commits expiry cleanup before rejecting account selection\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await options.advanceTime(root, 60_000)\n\n await expect(connect(storage, authorization, \"connection-a\", \"account-a\")).rejects.toThrow(\n \"selectable authorization\"\n )\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n })\n })\n\n test(\"commits lazy run expiry before rejecting a late selection\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await createSelectionRun(storage, authorization)\n await options.advanceTime(root, 60_000)\n\n await expect(\n storage.putConnectionFromRun({\n id: \"connection-a\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-a\", label: \"Account A\" },\n replace: false,\n })\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({ status: \"expired\" })\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n })\n })\n\n test(\"scopes direct record reads by project and connector\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const connected = await connect(storage, authorization, \"connection-a\", \"account-a\")\n\n expect(await storage.getAuthorization(authorizationKey(authorization.id))).toEqual(\n connected.authorization\n )\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n expect(\n await storage.getAuthorization({\n ...scope,\n authorizationId: authorization.id,\n })\n ).toBeNull()\n expect(\n await storage.getConnectionById({\n ...scope,\n connectionId: connected.connection.id,\n })\n ).toBeNull()\n expect(\n await storage.listConnectionsByAuthorization({\n ...scope,\n authorizationId: authorization.id,\n })\n ).toEqual([])\n }\n })\n })\n\n test(\"fences staged credentials by project, revision and mutation id\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createActiveAuthorization(storage)\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.claimCredentialMutation({\n ...scope,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: \"mutation-a\", kind: \"refresh\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n ).resolves.toBeNull()\n }\n\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: \"mutation-a\", kind: \"refresh\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n expect(claim).not.toBeNull()\n const claimed = claim!.authorization\n const executing = await storage.markCredentialMutationExecuting({\n ...fence(claimed),\n holderId: \"worker-a\",\n })\n expect(executing?.credentialMutation?.phase).toBe(\"executing\")\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n ...scope,\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n ).resolves.toBeNull()\n }\n await expect(\n storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n mutationId: \"stale-mutation\",\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n ).resolves.toBeNull()\n\n const staged = await storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n expect(staged?.credentialMutation?.phase).toBe(\"result_staged\")\n await expect(\n storage.finalizeRefresh({ ...fence(claimed), expectedRevision: claimed.revision + 1 })\n ).resolves.toBeNull()\n await expect(storage.finalizeRefresh(fence(claimed))).resolves.toMatchObject({\n revision: claimed.revision + 1,\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"releases an expired prepared mutation without changing credential state\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n await claimMutation(storage, authorization, \"mutation-prepared\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 60_000,\n })\n\n await options.advanceTime(root, 10_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"active\",\n revision: authorization.revision,\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"fails closed expired executing credential changes but keeps revocation retryable\", async () => {\n for (const kind of [\"refresh\", \"reauthorization\"] as const) {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, `mutation-${kind}`, kind, {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 60_000,\n })\n await markExecuting(storage, claim.authorization)\n\n await options.advanceTime(root, 10_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"needs_reauthorization\",\n revision: claim.authorization.revision + 1,\n credentialMutation: undefined,\n })\n })\n }\n\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(\n storage,\n authorization,\n \"mutation-revocation\",\n \"revocation\",\n { leaseDurationMs: 10_000, operationTimeoutMs: 60_000 }\n )\n await markExecuting(storage, claim.authorization)\n\n await options.advanceTime(root, 10_000)\n const recovered = await storage.recoverExpiredCredentialMutation(\n authorizationKey(authorization.id)\n )\n expect(recovered).toMatchObject({\n status: \"revocation_pending\",\n revision: claim.authorization.revision,\n credentialMutation: undefined,\n })\n if (!recovered) throw new Error(\"Expected expired revocation recovery.\")\n await expect(\n claimMutation(storage, recovered, \"mutation-revocation-retry\", \"revocation\")\n ).resolves.toBeDefined()\n })\n })\n\n test(\"preserves a staged provider result after its lease and deadline\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, \"mutation-staged\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 20_000,\n })\n const executing = await markExecuting(storage, claim.authorization)\n const staged = await storage.stageCredentialMutationCredentials({\n ...fence(executing),\n holderId: \"worker-a\",\n credentials: { ...credentials, ciphertext: \"refreshed\" },\n scopes: [\"accounts.read\"],\n })\n expect(staged?.credentialMutation?.phase).toBe(\"result_staged\")\n\n await options.advanceTime(root, 20_000)\n const recovered = await storage.recoverExpiredCredentialMutation(\n authorizationKey(authorization.id)\n )\n expect(recovered?.credentialMutation?.phase).toBe(\"result_staged\")\n if (!recovered) throw new Error(\"Expected staged refresh recovery.\")\n await expect(storage.finalizeRefresh(fence(recovered))).resolves.toMatchObject({\n status: \"active\",\n revision: authorization.revision + 1,\n scopes: [\"accounts.read\"],\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"never renews a credential lease past its operation deadline\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, \"mutation-renew\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 25_000,\n })\n const executing = await markExecuting(storage, claim.authorization)\n const deadline = executing.credentialMutation!.deadlineAt\n\n await options.advanceTime(root, 8_000)\n const renewed = await storage.renewCredentialMutation({\n ...fence(executing),\n holderId: \"worker-a\",\n leaseDurationMs: 30_000,\n })\n expect(renewed?.credentialMutation?.expiresAt).toEqual(deadline)\n\n await options.advanceTime(root, 17_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"needs_reauthorization\",\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"disconnects every local usage atomically when revocation starts\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const first = await connect(storage, authorization, \"connection-a\", \"account-a\")\n await storage.putConnection({\n id: \"connection-b\",\n projectId,\n connectorId,\n authorizationId: authorization.id,\n owner: { type: \"project\" },\n slot: \"secondary\",\n account: { id: \"account-a\", label: \"ignored\" },\n replace: false,\n })\n const active = (await storage.getAuthorization(authorizationKey(authorization.id)))!\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: active.revision,\n mutation: { id: \"mutation-revoke\", kind: \"revocation\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n\n expect(claim?.authorization.status).toBe(\"revocation_pending\")\n expect(claim?.disconnected.map((connection) => connection.id).sort()).toEqual(\n [first.connection.id, \"connection-b\"].sort()\n )\n expect(\n await storage.listConnectionsByAuthorization(authorizationKey(authorization.id))\n ).toEqual([])\n expect(\n await storage.getAuthorizationByConnectionId({\n projectId,\n connectorId,\n connectionId: first.connection.id,\n })\n ).toMatchObject({ id: authorization.id, status: \"revocation_pending\" })\n\n if (!claim) throw new Error(\"Expected revocation mutation claim.\")\n const executing = await markExecuting(storage, claim.authorization)\n const staged = await storage.stageCredentialMutationRevocation({\n ...fence(executing),\n holderId: \"worker-a\",\n })\n if (!staged) throw new Error(\"Expected staged revocation.\")\n const revoked = await storage.finalizeRevocation(fence(staged))\n expect(revoked).toMatchObject({\n status: \"revoked\",\n credentials: undefined,\n scopes: [],\n accounts: [],\n })\n expect(await storage.listConnections({ projectId, connectorId })).toEqual(\n expect.arrayContaining([\n expect.objectContaining({ id: first.connection.id, status: \"disconnected\" }),\n expect.objectContaining({ id: \"connection-b\", status: \"disconnected\" }),\n ])\n )\n })\n })\n\n test(\"freezes the attached connection set during reauthorization\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createActiveAuthorization(storage)\n const connections = await storage.listConnectionsByAuthorization(\n authorizationKey(authorization.id)\n )\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: {\n id: \"mutation-reauthorize\",\n kind: \"reauthorization\",\n holderId: \"worker-a\",\n },\n expectedConnectionIds: connections.map((connection) => connection.id),\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n expect(claim).not.toBeNull()\n\n await expect(\n storage.disconnectConnection({\n projectId,\n connectorId,\n connectionId: connections[0].id,\n })\n ).rejects.toThrow(\"being reauthorized\")\n })\n })\n })\n}\n\nfunction authorizationAttempt(\n overrides: Partial<CreateConnectorAuthorizationAttemptInput> = {}\n): CreateConnectorAuthorizationAttemptInput {\n return {\n id: \"attempt-a\",\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n initiatedByExecutionId: \"execution-a\",\n stateHash: \"state-hash\",\n codeVerifier: credentials,\n redirectUri: \"https://example.com/oauth/callback\",\n ttlMs: 60_000,\n ...overrides,\n }\n}\n\nfunction connectionRun(\n overrides: Partial<CreateConnectorConnectionRunInput> = {}\n): CreateConnectorConnectionRunInput {\n return {\n id: \"run-a\",\n projectId,\n connectorId,\n kind: \"connect\",\n owner: { type: \"project\" },\n slot: \"default\",\n initiatedByExecutionId: \"execution-a\",\n ttlMs: 60_000,\n ...overrides,\n }\n}\n\nasync function createSelectionRun(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord\n): Promise<void> {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n const claimed = await storage.claimConnectionRunCallback(connectionRunCallbackClaim())\n if (!claimed || claimed.type !== \"claimed\") throw new Error(\"Expected callback claim.\")\n const attached = await storage.attachConnectionRunAuthorization({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n })\n if (!attached) throw new Error(\"Expected authorization to be attached to the run.\")\n const waiting = await storage.waitForConnectionRunSelection({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n expiresAt: authorization.selectionExpiresAt!,\n })\n if (!waiting) throw new Error(\"Expected account-selection run.\")\n}\n\nfunction connectionRunCallbackClaim(\n overrides: Partial<ClaimConnectorConnectionRunCallbackInput> = {}\n): ClaimConnectorConnectionRunCallbackInput {\n return {\n projectId,\n attemptId: \"attempt-a\",\n stateHash: \"state-hash\",\n callbackBindingHash: \"binding-hash\",\n redirectUri: \"https://example.com/oauth/callback\",\n processingId: \"processing-a\",\n processingTtlMs: 60_000,\n ...overrides,\n }\n}\n\nfunction authorizationKey(\n authorizationId: string,\n overrides: Partial<{ readonly projectId: string; readonly connectorId: string }> = {}\n) {\n return { projectId, connectorId, authorizationId, ...overrides }\n}\n\nfunction authorizationAttemptConsumption(id = \"attempt-a\") {\n return {\n id,\n projectId,\n connectorId,\n stateHash: \"state-hash\",\n redirectUri: \"https://example.com/oauth/callback\",\n }\n}\n\nfunction requestExecution(id: string): CreateExecutionInput {\n const requestId = `request-${id}`\n return {\n id,\n projectId,\n executor: { type: \"request\", requestId },\n source: { type: \"http\", requestId },\n correlationId: `correlation-${id}`,\n authorizationRef: { type: \"disabled\" },\n }\n}\n\nfunction requireTransactionConnections(storage: Storage): ConnectorConnectionStorage {\n if (storage.connectorConnections) return storage.connectorConnections\n throw new Error(\"Connector connection storage is missing from the transaction facade.\")\n}\n\nasync function createAuthorization(\n storage: ConnectorConnectionStorage,\n id: string,\n accountId: string\n): Promise<ConnectorAuthorizationRecord> {\n return storage.createAuthorization({\n id,\n projectId,\n connectorId,\n authorizedBy: { type: \"user\", id: \"user-a\" },\n credentials,\n scopes: [],\n accounts: [{ id: accountId, label: accountId }],\n selectionTtlMs: 60_000,\n })\n}\n\nasync function createActiveAuthorization(\n storage: ConnectorConnectionStorage\n): Promise<ConnectorAuthorizationRecord> {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const result = await connect(storage, authorization, \"connection-a\", \"account-a\")\n return result.authorization\n}\n\nfunction connect(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord,\n connectionId: string,\n accountId: string\n) {\n return storage.putConnection({\n id: connectionId,\n projectId,\n connectorId,\n authorizationId: authorization.id,\n owner: { type: \"project\" },\n slot: \"default\",\n account: { id: accountId, label: \"ignored\" },\n replace: false,\n })\n}\n\nasync function claimMutation(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord,\n mutationId: string,\n kind: ConnectorCredentialMutationKind,\n timing: { readonly leaseDurationMs: number; readonly operationTimeoutMs: number } = {\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n }\n): Promise<ClaimConnectorCredentialMutationResult> {\n const expectedConnectionIds =\n kind === \"reauthorization\"\n ? (await storage.listConnectionsByAuthorization(authorizationKey(authorization.id))).map(\n (connection) => connection.id\n )\n : undefined\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: mutationId, kind, holderId: \"worker-a\" },\n ...(expectedConnectionIds === undefined ? {} : { expectedConnectionIds }),\n ...timing,\n })\n if (!claim) throw new Error(`Expected '${kind}' credential mutation claim.`)\n return claim\n}\n\nasync function markExecuting(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord\n): Promise<ConnectorAuthorizationRecord> {\n const executing = await storage.markCredentialMutationExecuting({\n ...fence(authorization),\n holderId: \"worker-a\",\n })\n if (!executing) throw new Error(\"Expected credential mutation execution.\")\n return executing\n}\n\nfunction fence(authorization: ConnectorAuthorizationRecord) {\n return {\n projectId: authorization.projectId,\n connectorId: authorization.connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutationId: authorization.credentialMutation!.id,\n }\n}\n",
15
+ "import { describe, expect, test } from \"bun:test\"\nimport { BrokerError } from \"../broker/errors\"\nimport type {\n Broker,\n BrokerRecord,\n BrokerRecordInput,\n BrokerStreamDefinition,\n} from \"../broker/types\"\nimport type { JsonValue } from \"../json\"\n\nexport interface BrokerContractSuiteOptions<TBroker extends Broker = Broker> {\n /** Factory that produces a fresh `Broker` instance for each test case. */\n readonly createBroker: () => TBroker | Promise<TBroker>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (broker: TBroker) => void | Promise<void>\n /**\n * Retention age used by the maxAgeMs assertion. Defaults to 20ms.\n * Providers with coarse server-side retention can increase this in their own suite.\n */\n readonly maxAgeMs?: number\n /**\n * Time to wait for maxAgeMs retention to expire. Defaults to `maxAgeMs + 20`.\n */\n readonly maxAgeWaitMs?: number\n /**\n * Time to wait after registering a live subscription before appending records.\n * Defaults to 0 for synchronous providers.\n */\n readonly subscriptionSetupMs?: number\n /**\n * Time to wait for asynchronous subscription delivery. Defaults to 200ms.\n */\n readonly subscriptionDeliveryTimeoutMs?: number\n /**\n * Poll interval while waiting for asynchronous subscription delivery. Defaults to 10ms.\n */\n readonly subscriptionPollIntervalMs?: number\n}\n\nconst eventsStream: BrokerStreamDefinition = { id: \"__events\" }\nconst retainedStream: BrokerStreamDefinition = { id: \"__retained\", retention: { maxRecords: 2 } }\n\n/**\n * Runs the shared `Broker` contract against any provider.\n *\n * The contract intentionally stays small: append records, read retained records\n * by exclusive cursor, subscribe to retained/live streams, and apply portable\n * retention. Provider-specific administration and durable consumer identity\n * are outside the V1 broker surface.\n */\nexport function runBrokerContractSuite<TBroker extends Broker>(\n label: string,\n options: BrokerContractSuiteOptions<TBroker>\n): void {\n const maxAgeMs = options.maxAgeMs ?? 20\n const maxAgeWaitMs = options.maxAgeWaitMs ?? maxAgeMs + 20\n const subscriptionSetupMs = options.subscriptionSetupMs ?? 0\n const subscriptionDeliveryTimeoutMs = options.subscriptionDeliveryTimeoutMs ?? 200\n const subscriptionPollIntervalMs = options.subscriptionPollIntervalMs ?? 10\n\n const withBroker = async (body: (broker: TBroker) => Promise<void>): Promise<void> => {\n const broker = await options.createBroker()\n try {\n await body(broker)\n } finally {\n await options.teardown?.(broker)\n }\n }\n\n describe(label, () => {\n describe(\"append\", () => {\n test(\"returns stored records with cursors and timestamps\", async () => {\n await withBroker(async (broker) => {\n const before = Date.now()\n\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n {\n name: \"test.record\",\n key: \"Room:room-1\",\n payload: { objectTypeId: \"Room\", primaryId: \"room-1\" },\n },\n ],\n })\n\n expect(records).toHaveLength(1)\n expect(records[0]).toMatchObject({\n streamId: eventsStream.id,\n name: \"test.record\",\n key: \"Room:room-1\",\n payload: { objectTypeId: \"Room\", primaryId: \"room-1\" },\n })\n expect(records[0]?.cursor).toBeTruthy()\n expect(Date.parse(records[0]!.publishedAt)).toBeGreaterThanOrEqual(before)\n })\n })\n\n test(\"snapshots appended payloads\", async () => {\n await withBroker(async (broker) => {\n const payload = { nested: { value: \"before\" } }\n\n const [record] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload }],\n })\n payload.nested.value = \"after\"\n\n expect(record?.payload).toEqual({ nested: { value: \"before\" } })\n const [readBack] = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n })\n expect(readBack?.payload).toEqual({ nested: { value: \"before\" } })\n })\n })\n\n test(\"returns empty array for empty appends\", async () => {\n await withBroker(async (broker) => {\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [],\n })\n\n expect(records).toEqual([])\n })\n })\n\n test(\"rejects empty projectId and stream id\", async () => {\n await withBroker(async (broker) => {\n await expect(\n appendRecords(broker, {\n projectId: \" \",\n stream: eventsStream,\n records: [{ payload: { ok: true } }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \" \" },\n records: [{ payload: { ok: true } }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"rejects payloads that are not JSON values\", async () => {\n await withBroker(async (broker) => {\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n {\n payload: {\n observedAt: new Date(\"2026-01-01T00:00:00.000Z\"),\n } as unknown as JsonValue,\n },\n ],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: { value: Number.NaN } as unknown as JsonValue }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"requires streams to be ensured before appending records\", async () => {\n await withBroker(async (broker) => {\n await expect(\n broker.append({\n projectId: \"project-a\",\n streamId: \"missing\",\n records: [{ payload: \"one\" }],\n })\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n })\n\n describe(\"read\", () => {\n test(\"reads records after an exclusive cursor\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: { value: 1 } },\n { name: \"two\", payload: { value: 2 } },\n { name: \"three\", payload: { value: 3 } },\n ],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n afterCursor: first?.cursor,\n })\n\n expect(records.map((record) => record.name)).toEqual([\"two\", \"three\"])\n })\n })\n\n test(\"limits matching records after applying name filters\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"test.record\", payload: { id: \"room-1\" } },\n { name: \"telemetry.appended\", payload: { id: \"temp-1\" } },\n { name: \"test.record\", payload: { id: \"room-2\" } },\n ],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n names: [\"test.record\"],\n limit: 2,\n })\n\n expect(records.map((record) => record.payload)).toEqual([\n { id: \"room-1\" },\n { id: \"room-2\" },\n ])\n })\n })\n\n test(\"returns empty array for missing streams and non-positive limits\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"test.record\", payload: { id: \"room-1\" } }],\n })\n\n expect(\n await broker.read({\n projectId: \"project-a\",\n streamId: \"missing\",\n })\n ).toEqual({ records: [], cursor: undefined, hasMore: false })\n expect(\n await readRecords(broker, { projectId: \"project-a\", stream: eventsStream, limit: 0 })\n ).toEqual([])\n expect(\n await readRecords(broker, { projectId: \"project-a\", stream: eventsStream, limit: -1 })\n ).toEqual([])\n })\n })\n\n test(\"isolates projects and streams\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \"stream-a\" },\n records: [{ payload: { value: \"a\" } }],\n })\n await appendRecords(broker, {\n projectId: \"project-b\",\n stream: { id: \"stream-a\" },\n records: [{ payload: { value: \"b\" } }],\n })\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: { id: \"stream-b\" },\n records: [{ payload: { value: \"c\" } }],\n })\n\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-a\", stream: { id: \"stream-a\" } })\n )\n ).toEqual([{ value: \"a\" }])\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-b\", stream: { id: \"stream-a\" } })\n )\n ).toEqual([{ value: \"b\" }])\n expect(\n await payloads(\n readRecords(broker, { projectId: \"project-a\", stream: { id: \"stream-b\" } })\n )\n ).toEqual([{ value: \"c\" }])\n })\n })\n\n test(\"advances the page cursor when filters match no records\", async () => {\n await withBroker(async (broker) => {\n const appended = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: 1 },\n { name: \"two\", payload: 2 },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n names: [\"missing\"],\n limit: 1,\n })\n\n expect(page.records).toEqual([])\n expect(page.cursor).toBe(appended.at(-1)?.cursor)\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"filters by record key before applying the page limit\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"sync:a\", payload: \"a1\" },\n { key: \"sync:b\", payload: \"b\" },\n { key: \"sync:a\", payload: \"a2\" },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"sync:a\"],\n limit: 2,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"a1\", \"a2\"])\n })\n })\n\n test(\"reports no forward page when only filtered-out records remain\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"target\", payload: \"match\" },\n { key: \"other\", payload: \"filtered-one\" },\n { key: \"other\", payload: \"filtered-two\" },\n ],\n })\n\n const page = await broker.read({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"target\"],\n limit: 1,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"match\"])\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"reports no backward page when only filtered-out records remain\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { key: \"other\", payload: \"filtered-one\" },\n { key: \"other\", payload: \"filtered-two\" },\n { key: \"target\", payload: \"match\" },\n ],\n })\n\n const page = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n keys: [\"target\"],\n limit: 1,\n })\n expect(page.records.map((record) => record.payload)).toEqual([\"match\"])\n expect(page.hasMore).toBe(false)\n })\n })\n\n test(\"tails recent records and paginates toward older history\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [1, 2, 3, 4, 5].map((payload) => ({ payload })),\n })\n\n const recent = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n limit: 2,\n })\n expect(recent.records.map((record) => record.payload)).toEqual([4, 5])\n expect(recent.hasMore).toBe(true)\n\n const older = await broker.tail({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n beforeCursor: recent.cursor,\n limit: 2,\n })\n expect(older.records.map((record) => record.payload)).toEqual([2, 3])\n expect(older.hasMore).toBe(true)\n })\n })\n })\n\n describe(\"latestCursor\", () => {\n test(\"returns undefined for missing and empty streams\", async () => {\n await withBroker(async (broker) => {\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: \"missing\" })\n ).toBeUndefined()\n\n await broker.ensureStream({ projectId: \"project-a\", stream: eventsStream })\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: eventsStream.id })\n ).toBeUndefined()\n })\n })\n\n test(\"returns the newest retained record cursor\", async () => {\n await withBroker(async (broker) => {\n const records = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [{ payload: \"one\" }, { payload: \"two\" }, { payload: \"three\" }],\n })\n\n expect(\n await broker.latestCursor({ projectId: \"project-a\", streamId: retainedStream.id })\n ).toBe(records.at(-1)?.cursor)\n })\n })\n })\n\n describe(\"subscribe\", () => {\n // Removing awaited provider delivery makes the second callback enter before release.\n test(\"awaits async handlers without blocking publishers or other subscribers\", async () => {\n await withBroker(async (broker) => {\n await broker.ensureStream({ projectId: \"project-a\", stream: eventsStream })\n let release!: () => void\n const blocked = new Promise<void>((resolve) => {\n release = resolve\n })\n const received: string[] = []\n const observer: string[] = []\n const unsubscribe = await broker.subscribe(\n { projectId: \"project-a\", streamId: eventsStream.id },\n async (records) => {\n received.push(...records.map((record) => String(record.payload)))\n await blocked\n }\n )\n const observe = await broker.subscribe(\n { projectId: \"project-a\", streamId: eventsStream.id },\n (records) => {\n observer.push(...records.map((record) => String(record.payload)))\n }\n )\n const wait = (predicate: () => boolean) =>\n waitUntil(predicate, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Async broker subscription did not progress\",\n })\n try {\n if (subscriptionSetupMs > 0) await Bun.sleep(subscriptionSetupMs)\n await broker.append({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n records: [{ payload: \"one\" }],\n })\n await wait(() => received.length === 1)\n await broker.append({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n records: [{ payload: \"two\" }],\n })\n await wait(() => observer.length === 2)\n await Bun.sleep(30)\n expect(received).toEqual([\"one\"])\n release()\n await wait(() => received.length === 2)\n expect(received).toEqual([\"one\", \"two\"])\n } finally {\n release()\n unsubscribe()\n observe()\n }\n })\n })\n\n test(\"isolates rejected async handlers and permits appending from a handler\", async () => {\n await withBroker(async (broker) => {\n await broker.ensureStream({ projectId: \"project-a\", stream: eventsStream })\n const received: string[] = []\n const unsubscribe = await broker.subscribe(\n { projectId: \"project-a\", streamId: eventsStream.id },\n async (records) => {\n for (const record of records) {\n received.push(String(record.payload))\n if (record.payload === \"one\") {\n await broker.append({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n records: [{ payload: \"two\" }],\n })\n throw new Error(\"observer failure\")\n }\n }\n }\n )\n try {\n if (subscriptionSetupMs > 0) await Bun.sleep(subscriptionSetupMs)\n await broker.append({\n projectId: \"project-a\",\n streamId: eventsStream.id,\n records: [{ payload: \"one\" }],\n })\n await waitUntil(() => received.length === 2, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Rejected async observer blocked later delivery\",\n })\n expect(received).toEqual([\"one\", \"two\"])\n } finally {\n unsubscribe()\n }\n })\n })\n\n test(\"requires streams to be ensured before subscribing\", async () => {\n await withBroker(async (broker) => {\n await expect(\n broker.subscribe({ projectId: \"project-a\", streamId: \"missing\" }, () => {})\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"defaults to latest and receives only new records\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"before\", payload: { value: \"before\" } }],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"after\", payload: \"after\" }],\n })\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive the appended record\",\n })\n expect(received).toEqual([\"after\"])\n })\n })\n\n test(\"can subscribe from earliest retained record\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"one\", payload: \"one\" },\n { name: \"two\", payload: \"two\" },\n ],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream, from: \"earliest\" },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ name: \"three\", payload: \"three\" }],\n })\n\n await waitUntil(() => received.length === 3, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive retained plus live records\",\n })\n expect(received).toEqual([\"one\", \"two\", \"three\"])\n })\n })\n\n test(\"can subscribe after a cursor and filter by name and key\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [\n { name: \"test.record\", key: \"other\", payload: \"one\" },\n { name: \"telemetry.appended\", key: \"target\", payload: \"two\" },\n { name: \"test.record\", key: \"target\", payload: \"three\" },\n ],\n })\n\n const received: string[] = []\n await subscribeRecords(\n broker,\n {\n projectId: \"project-a\",\n stream: eventsStream,\n afterCursor: first?.cursor,\n names: [\"test.record\"],\n keys: [\"target\"],\n },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not replay matching records after cursor\",\n })\n expect(received).toEqual([\"three\"])\n })\n })\n\n test(\"unsubscribe stops delivery\", async () => {\n await withBroker(async (broker) => {\n const received: string[] = []\n const unsubscribe = await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"one\" }],\n })\n\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription did not receive the first record before unsubscribe\",\n })\n\n unsubscribe()\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"two\" }],\n })\n await Bun.sleep(Math.min(250, subscriptionDeliveryTimeoutMs))\n\n expect(received).toEqual([\"one\"])\n })\n })\n\n test(\"swallows handler errors\", async () => {\n await withBroker(async (broker) => {\n const received: string[] = []\n await subscribeRecords(broker, { projectId: \"project-a\", stream: eventsStream }, () => {\n throw new Error(\"subscriber failed\")\n })\n await subscribeRecords(\n broker,\n { projectId: \"project-a\", stream: eventsStream },\n (records) => {\n received.push(...records.map((record) => String(record.payload)))\n }\n )\n if (subscriptionSetupMs > 0) {\n await Bun.sleep(subscriptionSetupMs)\n }\n\n await expect(\n appendRecords(broker, {\n projectId: \"project-a\",\n stream: eventsStream,\n records: [{ payload: \"one\" }],\n })\n ).resolves.toHaveLength(1)\n await waitUntil(() => received.length === 1, {\n timeoutMs: subscriptionDeliveryTimeoutMs,\n intervalMs: subscriptionPollIntervalMs,\n message: \"Broker subscription delivery stopped after another handler threw\",\n })\n expect(received).toEqual([\"one\"])\n })\n })\n })\n\n describe(\"retention\", () => {\n test(\"bounds retained history by bytes\", async () => {\n await withBroker(async (broker) => {\n const stream = { id: \"__byte_retained\", retention: { maxBytes: 1_024 } }\n await broker.ensureStream({ projectId: \"project-a\", stream })\n\n await broker.append({\n projectId: \"project-a\",\n streamId: stream.id,\n records: [\"one\", \"two\", \"three\"].map((label) => ({\n name: label,\n payload: { label, body: \"x\".repeat(600) },\n })),\n })\n\n const records = await broker.read({\n projectId: \"project-a\",\n streamId: stream.id,\n })\n expect(records.records.length).toBeGreaterThan(0)\n expect(records.records.length).toBeLessThan(3)\n expect(records.records.at(-1)?.name).toBe(\"three\")\n })\n })\n\n test(\"retains only the latest maxRecords\", async () => {\n await withBroker(async (broker) => {\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [{ payload: \"one\" }, { payload: \"two\" }, { payload: \"three\" }],\n })\n\n const records = await readRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n })\n\n expect(records.map((record) => record.payload)).toEqual([\"two\", \"three\"])\n })\n })\n\n test(\"rejects resuming from a cursor that predates the retained range\", async () => {\n await withBroker(async (broker) => {\n const [first] = await appendRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n records: [\n { payload: \"one\" },\n { payload: \"two\" },\n { payload: \"three\" },\n { payload: \"four\" },\n ],\n })\n\n await expect(\n readRecords(broker, {\n projectId: \"project-a\",\n stream: retainedStream,\n afterCursor: first?.cursor,\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n await expect(\n broker.tail({\n projectId: \"project-a\",\n streamId: retainedStream.id,\n beforeCursor: first?.cursor,\n })\n ).rejects.toBeInstanceOf(BrokerError)\n\n // A resuming subscriber must be told the gap exists rather than silently fast-forwarded\n // to the oldest retained record, which would look like a complete stream. To prove this\n // still guards, drop the `assertCursorInRetainedRange` call from `subscribe` in\n // `broker/in-memory.ts` (or from `nats-broker.ts`) and only this expectation fails.\n await expect(\n broker.subscribe(\n {\n projectId: \"project-a\",\n streamId: retainedStream.id,\n afterCursor: first?.cursor,\n },\n () => undefined\n )\n ).rejects.toBeInstanceOf(BrokerError)\n })\n })\n\n test(\"retains only records within maxAgeMs\", async () => {\n await withBroker(async (broker) => {\n const stream = { id: \"__age_retained\", retention: { maxAgeMs } }\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream,\n records: [{ payload: \"old\" }],\n })\n\n await Bun.sleep(maxAgeWaitMs)\n\n await appendRecords(broker, {\n projectId: \"project-a\",\n stream,\n records: [{ payload: \"new\" }],\n })\n\n const records = await readRecords(broker, { projectId: \"project-a\", stream })\n\n expect(records.map((record) => record.payload)).toEqual([\"new\"])\n })\n })\n })\n })\n}\n\nasync function payloads(records: Promise<readonly BrokerRecord[]>): Promise<readonly unknown[]> {\n return (await records).map((record) => record.payload)\n}\n\nasync function appendRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n records: readonly BrokerRecordInput[]\n }\n): Promise<readonly BrokerRecord[]> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return broker.append({\n projectId: params.projectId,\n streamId: params.stream.id,\n records: params.records,\n })\n}\n\nasync function readRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n afterCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }\n): Promise<readonly BrokerRecord[]> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return (\n await broker.read({\n projectId: params.projectId,\n streamId: params.stream.id,\n afterCursor: params.afterCursor,\n limit: params.limit,\n names: params.names,\n keys: params.keys,\n })\n ).records\n}\n\nasync function subscribeRecords(\n broker: Broker,\n params: {\n projectId: string\n stream: BrokerStreamDefinition\n from?: \"latest\" | \"earliest\"\n afterCursor?: string\n names?: readonly string[]\n keys?: readonly string[]\n },\n handler: (records: readonly BrokerRecord[]) => void\n): Promise<() => void> {\n await broker.ensureStream({ projectId: params.projectId, stream: params.stream })\n return broker.subscribe(\n {\n projectId: params.projectId,\n streamId: params.stream.id,\n from: params.from,\n afterCursor: params.afterCursor,\n names: params.names,\n keys: params.keys,\n },\n handler\n )\n}\n\nasync function waitUntil(\n predicate: () => boolean,\n options: { timeoutMs: number; intervalMs: number; message: string }\n): Promise<void> {\n const deadline = Date.now() + options.timeoutMs\n while (Date.now() < deadline) {\n if (predicate()) {\n return\n }\n await Bun.sleep(options.intervalMs)\n }\n throw new Error(`${options.message} within ${options.timeoutMs}ms`)\n}\n",
16
+ "import { describe, expect, test } from \"bun:test\"\nimport type {\n ClaimConnectorConnectionRunCallbackInput,\n ClaimConnectorCredentialMutationResult,\n ConnectorAuthorizationRecord,\n ConnectorConnectionStorage,\n ConnectorCredentialMutationKind,\n CreateConnectorAuthorizationAttemptInput,\n CreateConnectorConnectionRunInput,\n} from \"../storage/connector-connections\"\nimport type { CreateExecutionInput } from \"../storage/executions\"\nimport type { Storage } from \"../storage/types\"\n\nexport type ConnectorConnectionStorageContractStorage = Storage & {\n readonly connectorConnections: ConnectorConnectionStorage\n}\n\nexport interface ConnectorConnectionStorageContractSuiteOptions<\n TStorage extends\n ConnectorConnectionStorageContractStorage = ConnectorConnectionStorageContractStorage,\n> {\n /** Factory that produces one isolated complete storage provider for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Advances the storage-authoritative clock without relying on wall-clock sleeps. */\n readonly advanceTime: (storage: TStorage, durationMs: number) => void | Promise<void>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"project-a\"\nconst connectorId = \"social\"\nconst credentials = {\n version: 1,\n algorithm: \"A256GCM\",\n nonce: \"nonce\",\n ciphertext: \"ciphertext\",\n tag: \"tag\",\n} as const\n\n/** Runs the atomicity, fencing, slot uniqueness and project-isolation storage contract. */\nexport function runConnectorConnectionStorageContractSuite<\n TStorage extends ConnectorConnectionStorageContractStorage,\n>(label: string, options: ConnectorConnectionStorageContractSuiteOptions<TStorage>): void {\n const withStorage = async (\n body: (connections: TStorage[\"connectorConnections\"], storage: TStorage) => Promise<void>\n ): Promise<void> => {\n const root = await options.createStorage()\n try {\n await body(root.connectorConnections, root)\n } finally {\n await options.teardown?.(root)\n }\n }\n\n describe(label, () => {\n test(\"binds one-use authorization attempts to their initiating execution\", async () => {\n await withStorage(async (storage) => {\n const attempt = authorizationAttempt()\n await expect(storage.createAuthorizationAttempt(attempt)).resolves.toMatchObject({\n id: attempt.id,\n projectId,\n connectorId,\n initiatedByExecutionId: attempt.initiatedByExecutionId,\n })\n\n for (const mismatchedScope of [\n { projectId: \"project-b\" },\n { connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.consumeAuthorizationAttempt({\n ...authorizationAttemptConsumption(),\n ...mismatchedScope,\n })\n ).rejects.toThrow(\"invalid, expired, or already used\")\n }\n\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).resolves.toMatchObject({\n id: attempt.id,\n initiatedByExecutionId: attempt.initiatedByExecutionId,\n })\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt())\n ).resolves.toMatchObject({ id: \"attempt-a\" })\n })\n })\n\n test(\"persists explicitly non-PKCE attempts without a verifier\", async () => {\n // Removal proof: restore required code_verifier storage or omit migration 038; SQL providers fail.\n await withStorage(async (storage) => {\n const { codeVerifier: _verifier, ...input } = authorizationAttempt()\n const created = await storage.createAuthorizationAttempt(input)\n expect(created).not.toHaveProperty(\"codeVerifier\")\n const consumed = await storage.consumeAuthorizationAttempt(\n authorizationAttemptConsumption()\n )\n expect(consumed).not.toHaveProperty(\"codeVerifier\")\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).rejects.toThrow(\"invalid, expired, or already used\")\n })\n })\n\n test(\"expires authorization attempts from the authoritative storage clock\", async () => {\n await withStorage(async (storage, root) => {\n const ttlMs = 60_000\n const attempt = await storage.createAuthorizationAttempt(authorizationAttempt({ ttlMs }))\n expect(attempt.expiresAt.getTime() - attempt.createdAt.getTime()).toBe(ttlMs)\n\n await options.advanceTime(root, ttlMs)\n\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption())\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt())\n ).resolves.toMatchObject({ id: \"attempt-a\" })\n })\n })\n\n test(\"returns detached authorization attempt records\", async () => {\n await withStorage(async (storage) => {\n const created = await storage.createAuthorizationAttempt(authorizationAttempt())\n if (!created.codeVerifier) throw new Error(\"Expected a stored PKCE verifier.\")\n Object.assign(created.codeVerifier, { ciphertext: \"mutated\" })\n\n const consumed = await storage.consumeAuthorizationAttempt(\n authorizationAttemptConsumption()\n )\n expect(consumed.codeVerifier?.ciphertext).toBe(credentials.ciphertext)\n })\n })\n\n test(\"commits and rolls back connection runs with their attempt and execution\", async () => {\n await withStorage(async (storage, root) => {\n const committedExecution = requestExecution(\"execution-commit\")\n const committedAttempt = authorizationAttempt({\n id: \"attempt-commit\",\n initiatedByExecutionId: committedExecution.id,\n connectionRunId: \"run-commit\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-commit\",\n })\n const committedRun = connectionRun({\n id: \"run-commit\",\n initiatedByExecutionId: committedExecution.id,\n })\n await root.transaction(\n async (tx) => {\n await tx.executions.create(committedExecution)\n const connections = requireTransactionConnections(tx)\n await connections.createConnectionRun(committedRun)\n await connections.createAuthorizationAttempt(committedAttempt)\n },\n { isolation: \"serializable\" }\n )\n\n expect(\n await root.executions.getById({ projectId, id: committedExecution.id })\n ).not.toBeNull()\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: committedRun.id })\n ).resolves.toMatchObject({ id: committedRun.id })\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption(committedAttempt.id))\n ).resolves.toMatchObject({ id: committedAttempt.id })\n\n const rolledBackExecution = requestExecution(\"execution-rollback\")\n const rolledBackAttempt = authorizationAttempt({\n id: \"attempt-rollback\",\n initiatedByExecutionId: rolledBackExecution.id,\n connectionRunId: \"run-rollback\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-rollback\",\n })\n const rolledBackRun = connectionRun({\n id: \"run-rollback\",\n initiatedByExecutionId: rolledBackExecution.id,\n })\n const rollback = new Error(\"rollback connector authorization attempt\")\n await expect(\n root.transaction(\n async (tx) => {\n await tx.executions.create(rolledBackExecution)\n const connections = requireTransactionConnections(tx)\n await connections.createConnectionRun(rolledBackRun)\n await connections.createAuthorizationAttempt(rolledBackAttempt)\n throw rollback\n },\n { isolation: \"serializable\" }\n )\n ).rejects.toBe(rollback)\n\n expect(await root.executions.getById({ projectId, id: rolledBackExecution.id })).toBeNull()\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: rolledBackRun.id })\n ).resolves.toBeNull()\n await expect(\n storage.consumeAuthorizationAttempt(authorizationAttemptConsumption(rolledBackAttempt.id))\n ).rejects.toThrow(\"invalid, expired, or already used\")\n })\n })\n\n test(\"links at most one headless attempt to an awaiting provider run\", async () => {\n await withStorage(async (storage) => {\n const headlessAttempt = {\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n } as const\n\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt(headlessAttempt))\n ).rejects.toThrow(\"does not match its connection run\")\n\n await storage.createConnectionRun(connectionRun())\n await expect(\n storage.createAuthorizationAttempt(authorizationAttempt(headlessAttempt))\n ).resolves.toMatchObject({ id: \"attempt-a\", connectionRunId: \"run-a\" })\n await expect(\n storage.createAuthorizationAttempt(\n authorizationAttempt({ ...headlessAttempt, id: \"attempt-b\" })\n )\n ).rejects.toThrow(\"does not match its connection run\")\n })\n })\n\n test(\"claims a headless callback once with state and browser binding\", async () => {\n await withStorage(async (storage) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"wrong-binding\",\n })\n )\n ).resolves.toBeNull()\n\n const claimed = await storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n expect(claimed).toMatchObject({\n type: \"claimed\",\n run: { id: \"run-a\", status: \"running\" },\n attempt: { id: \"attempt-a\", connectionRunId: \"run-a\" },\n returnTo: \"https://app.example.com/connectors\",\n })\n expect(claimed && \"returnTo\" in claimed.run).toBe(false)\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n ).resolves.toBeNull()\n })\n })\n\n test(\"expires a waiting run and removes its protocol attempt lazily\", async () => {\n await withStorage(async (storage, root) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n await options.advanceTime(root, 60_000)\n\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({ status: \"expired\" })\n await expect(\n storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({\n callbackBindingHash: \"binding-hash\",\n })\n )\n ).resolves.toBeNull()\n })\n })\n\n test(\"fails an expired processing run and fences its late result\", async () => {\n await withStorage(async (storage, root) => {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n const claimed = await storage.claimConnectionRunCallback(\n connectionRunCallbackClaim({ processingTtlMs: 1_000 })\n )\n if (!claimed || claimed.type !== \"claimed\") throw new Error(\"Expected callback claim.\")\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await expect(\n storage.attachConnectionRunAuthorization({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n })\n ).resolves.not.toBeNull()\n\n await options.advanceTime(root, 1_000)\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({\n status: \"failed\",\n authorizationId: authorization.id,\n error: { code: \"internal.unexpected\" },\n })\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n await expect(\n storage.finishConnectionRun({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n status: \"cancelled\",\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"keeps account selection atomic with its connection run\", async () => {\n await withStorage(async (storage) => {\n const active = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await connect(storage, active, \"connection-a\", \"account-a\")\n const pending = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n await createSelectionRun(storage, pending)\n\n await expect(\n storage.putConnectionFromRun({\n id: \"connection-b\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-b\", label: \"Account B\" },\n replace: false,\n })\n ).rejects.toThrow(\"explicit replacement is required\")\n expect(\n await storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).toMatchObject({ status: \"waiting\", waitingFor: \"account_selection\" })\n expect(await storage.getAuthorization(authorizationKey(pending.id))).toEqual(pending)\n\n const selected = await storage.putConnectionFromRun({\n id: \"connection-b\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-b\", label: \"Account B\" },\n replace: true,\n })\n expect(selected.run).toMatchObject({ status: \"succeeded\" })\n })\n })\n\n test(\"keeps one stable connection per project connector slot\", async () => {\n await withStorage(async (storage) => {\n const first = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const firstConnection = await connect(storage, first, \"connection-a\", \"account-a\")\n const second = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n\n await expect(connect(storage, second, \"connection-b\", \"account-b\")).rejects.toThrow(\n \"explicit replacement is required\"\n )\n const replaced = await storage.putConnection({\n id: \"connection-b\",\n projectId,\n connectorId,\n authorizationId: second.id,\n owner: { type: \"project\" },\n slot: \"default\",\n account: { id: \"account-b\", label: \"ignored\" },\n replace: true,\n })\n expect(replaced.connection.id).toBe(firstConnection.connection.id)\n expect(replaced.revocationPendingAuthorizationId).toBe(first.id)\n expect(await storage.getAuthorization(authorizationKey(first.id))).toMatchObject({\n status: \"revocation_pending\",\n })\n expect(\n await storage.getConnection({\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n })\n ).toMatchObject({ authorizationId: second.id, account: { id: \"account-b\" } })\n })\n })\n\n test(\"retains disconnected identities and reactivates the same slot id\", async () => {\n await withStorage(async (storage) => {\n const first = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const connected = await connect(storage, first, \"connection-a\", \"account-a\")\n\n const disconnected = await storage.disconnectConnection({\n projectId,\n connectorId,\n connectionId: connected.connection.id,\n })\n expect(disconnected).toMatchObject({\n connection: { id: connected.connection.id, status: \"disconnected\" },\n authorization: { status: \"revocation_pending\" },\n revocationPendingAuthorizationId: first.id,\n })\n expect(\n await storage.getConnection({\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n })\n ).toBeNull()\n expect(\n await storage.getConnectionById({\n projectId,\n connectorId,\n connectionId: connected.connection.id,\n })\n ).toMatchObject({ status: \"disconnected\" })\n\n const second = await createAuthorization(storage, \"authorization-b\", \"account-a\")\n const reconnected = await connect(storage, second, \"ignored-new-id\", \"account-a\")\n expect(reconnected.connection).toMatchObject({\n id: connected.connection.id,\n authorizationId: second.id,\n status: \"connected\",\n })\n })\n })\n\n test(\"keeps pending selection untouched when connection validation fails\", async () => {\n await withStorage(async (storage) => {\n const active = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const existing = await connect(storage, active, \"connection-a\", \"account-a\")\n const replacement = await createAuthorization(storage, \"authorization-b\", \"account-b\")\n\n await expect(connect(storage, replacement, \"connection-b\", \"account-b\")).rejects.toThrow(\n \"explicit replacement is required\"\n )\n expect(await storage.getAuthorization(authorizationKey(replacement.id))).toEqual(\n replacement\n )\n\n const duplicateId = await createAuthorization(storage, \"authorization-c\", \"account-c\")\n await expect(\n storage.putConnection({\n id: existing.connection.id,\n projectId,\n connectorId,\n authorizationId: duplicateId.id,\n owner: { type: \"project\" },\n slot: \"secondary\",\n account: { id: \"account-c\", label: \"ignored\" },\n replace: false,\n })\n ).rejects.toThrow(\"connection id already exists\")\n expect(await storage.getAuthorization(authorizationKey(duplicateId.id))).toEqual(\n duplicateId\n )\n })\n })\n\n test(\"commits expiry cleanup before rejecting account selection\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await options.advanceTime(root, 60_000)\n\n await expect(connect(storage, authorization, \"connection-a\", \"account-a\")).rejects.toThrow(\n \"selectable authorization\"\n )\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n })\n })\n\n test(\"commits lazy run expiry before rejecting a late selection\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n await createSelectionRun(storage, authorization)\n await options.advanceTime(root, 60_000)\n\n await expect(\n storage.putConnectionFromRun({\n id: \"connection-a\",\n projectId,\n connectorId,\n runId: \"run-a\",\n account: { id: \"account-a\", label: \"Account A\" },\n replace: false,\n })\n ).rejects.toThrow(\"invalid, expired, or already used\")\n await expect(\n storage.getConnectionRun({ projectId, connectorId, runId: \"run-a\" })\n ).resolves.toMatchObject({ status: \"expired\" })\n await expect(\n storage.getAuthorization(authorizationKey(authorization.id))\n ).resolves.toMatchObject({ status: \"revocation_pending\" })\n })\n })\n\n test(\"scopes direct record reads by project and connector\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const connected = await connect(storage, authorization, \"connection-a\", \"account-a\")\n\n expect(await storage.getAuthorization(authorizationKey(authorization.id))).toEqual(\n connected.authorization\n )\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n expect(\n await storage.getAuthorization({\n ...scope,\n authorizationId: authorization.id,\n })\n ).toBeNull()\n expect(\n await storage.getConnectionById({\n ...scope,\n connectionId: connected.connection.id,\n })\n ).toBeNull()\n expect(\n await storage.listConnectionsByAuthorization({\n ...scope,\n authorizationId: authorization.id,\n })\n ).toEqual([])\n }\n })\n })\n\n test(\"fences staged credentials by project, revision and mutation id\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createActiveAuthorization(storage)\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.claimCredentialMutation({\n ...scope,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: \"mutation-a\", kind: \"refresh\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n ).resolves.toBeNull()\n }\n\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: \"mutation-a\", kind: \"refresh\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n expect(claim).not.toBeNull()\n const claimed = claim!.authorization\n const executing = await storage.markCredentialMutationExecuting({\n ...fence(claimed),\n holderId: \"worker-a\",\n })\n expect(executing?.credentialMutation?.phase).toBe(\"executing\")\n for (const scope of [\n { projectId: \"project-b\", connectorId },\n { projectId, connectorId: \"another-connector\" },\n ]) {\n await expect(\n storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n ...scope,\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n ).resolves.toBeNull()\n }\n await expect(\n storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n mutationId: \"stale-mutation\",\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n ).resolves.toBeNull()\n\n const staged = await storage.stageCredentialMutationCredentials({\n ...fence(claimed),\n holderId: \"worker-a\",\n credentials,\n scopes: [],\n })\n expect(staged?.credentialMutation?.phase).toBe(\"result_staged\")\n await expect(\n storage.finalizeRefresh({ ...fence(claimed), expectedRevision: claimed.revision + 1 })\n ).resolves.toBeNull()\n await expect(storage.finalizeRefresh(fence(claimed))).resolves.toMatchObject({\n revision: claimed.revision + 1,\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"releases an expired prepared mutation without changing credential state\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n await claimMutation(storage, authorization, \"mutation-prepared\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 60_000,\n })\n\n await options.advanceTime(root, 10_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"active\",\n revision: authorization.revision,\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"fails closed expired executing credential changes but keeps revocation retryable\", async () => {\n for (const kind of [\"refresh\", \"reauthorization\"] as const) {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, `mutation-${kind}`, kind, {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 60_000,\n })\n await markExecuting(storage, claim.authorization)\n\n await options.advanceTime(root, 10_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"needs_reauthorization\",\n revision: claim.authorization.revision + 1,\n credentialMutation: undefined,\n })\n })\n }\n\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(\n storage,\n authorization,\n \"mutation-revocation\",\n \"revocation\",\n { leaseDurationMs: 10_000, operationTimeoutMs: 60_000 }\n )\n await markExecuting(storage, claim.authorization)\n\n await options.advanceTime(root, 10_000)\n const recovered = await storage.recoverExpiredCredentialMutation(\n authorizationKey(authorization.id)\n )\n expect(recovered).toMatchObject({\n status: \"revocation_pending\",\n revision: claim.authorization.revision,\n credentialMutation: undefined,\n })\n if (!recovered) throw new Error(\"Expected expired revocation recovery.\")\n await expect(\n claimMutation(storage, recovered, \"mutation-revocation-retry\", \"revocation\")\n ).resolves.toBeDefined()\n })\n })\n\n test(\"preserves a staged provider result after its lease and deadline\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, \"mutation-staged\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 20_000,\n })\n const executing = await markExecuting(storage, claim.authorization)\n const staged = await storage.stageCredentialMutationCredentials({\n ...fence(executing),\n holderId: \"worker-a\",\n credentials: { ...credentials, ciphertext: \"refreshed\" },\n scopes: [\"accounts.read\"],\n })\n expect(staged?.credentialMutation?.phase).toBe(\"result_staged\")\n\n await options.advanceTime(root, 20_000)\n const recovered = await storage.recoverExpiredCredentialMutation(\n authorizationKey(authorization.id)\n )\n expect(recovered?.credentialMutation?.phase).toBe(\"result_staged\")\n if (!recovered) throw new Error(\"Expected staged refresh recovery.\")\n await expect(storage.finalizeRefresh(fence(recovered))).resolves.toMatchObject({\n status: \"active\",\n revision: authorization.revision + 1,\n scopes: [\"accounts.read\"],\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"never renews a credential lease past its operation deadline\", async () => {\n await withStorage(async (storage, root) => {\n const authorization = await createActiveAuthorization(storage)\n const claim = await claimMutation(storage, authorization, \"mutation-renew\", \"refresh\", {\n leaseDurationMs: 10_000,\n operationTimeoutMs: 25_000,\n })\n const executing = await markExecuting(storage, claim.authorization)\n const deadline = executing.credentialMutation!.deadlineAt\n\n await options.advanceTime(root, 8_000)\n const renewed = await storage.renewCredentialMutation({\n ...fence(executing),\n holderId: \"worker-a\",\n leaseDurationMs: 30_000,\n })\n expect(renewed?.credentialMutation?.expiresAt).toEqual(deadline)\n\n await options.advanceTime(root, 17_000)\n await expect(\n storage.recoverExpiredCredentialMutation(authorizationKey(authorization.id))\n ).resolves.toMatchObject({\n status: \"needs_reauthorization\",\n credentialMutation: undefined,\n })\n })\n })\n\n test(\"disconnects every local usage atomically when revocation starts\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const first = await connect(storage, authorization, \"connection-a\", \"account-a\")\n await storage.putConnection({\n id: \"connection-b\",\n projectId,\n connectorId,\n authorizationId: authorization.id,\n owner: { type: \"project\" },\n slot: \"secondary\",\n account: { id: \"account-a\", label: \"ignored\" },\n replace: false,\n })\n const active = (await storage.getAuthorization(authorizationKey(authorization.id)))!\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: active.revision,\n mutation: { id: \"mutation-revoke\", kind: \"revocation\", holderId: \"worker-a\" },\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n\n expect(claim?.authorization.status).toBe(\"revocation_pending\")\n expect(claim?.disconnected.map((connection) => connection.id).sort()).toEqual(\n [first.connection.id, \"connection-b\"].sort()\n )\n expect(\n await storage.listConnectionsByAuthorization(authorizationKey(authorization.id))\n ).toEqual([])\n expect(\n await storage.getAuthorizationByConnectionId({\n projectId,\n connectorId,\n connectionId: first.connection.id,\n })\n ).toMatchObject({ id: authorization.id, status: \"revocation_pending\" })\n\n if (!claim) throw new Error(\"Expected revocation mutation claim.\")\n const executing = await markExecuting(storage, claim.authorization)\n const staged = await storage.stageCredentialMutationRevocation({\n ...fence(executing),\n holderId: \"worker-a\",\n })\n if (!staged) throw new Error(\"Expected staged revocation.\")\n const revoked = await storage.finalizeRevocation(fence(staged))\n expect(revoked).toMatchObject({\n status: \"revoked\",\n credentials: undefined,\n scopes: [],\n accounts: [],\n })\n expect(await storage.listConnections({ projectId, connectorId })).toEqual(\n expect.arrayContaining([\n expect.objectContaining({ id: first.connection.id, status: \"disconnected\" }),\n expect.objectContaining({ id: \"connection-b\", status: \"disconnected\" }),\n ])\n )\n })\n })\n\n test(\"freezes the attached connection set during reauthorization\", async () => {\n await withStorage(async (storage) => {\n const authorization = await createActiveAuthorization(storage)\n const connections = await storage.listConnectionsByAuthorization(\n authorizationKey(authorization.id)\n )\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: {\n id: \"mutation-reauthorize\",\n kind: \"reauthorization\",\n holderId: \"worker-a\",\n },\n expectedConnectionIds: connections.map((connection) => connection.id),\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n })\n expect(claim).not.toBeNull()\n\n await expect(\n storage.disconnectConnection({\n projectId,\n connectorId,\n connectionId: connections[0].id,\n })\n ).rejects.toThrow(\"being reauthorized\")\n })\n })\n })\n}\n\nfunction authorizationAttempt(\n overrides: Partial<CreateConnectorAuthorizationAttemptInput> = {}\n): CreateConnectorAuthorizationAttemptInput {\n return {\n id: \"attempt-a\",\n projectId,\n connectorId,\n owner: { type: \"project\" },\n slot: \"default\",\n initiatedByExecutionId: \"execution-a\",\n stateHash: \"state-hash\",\n codeVerifier: credentials,\n redirectUri: \"https://example.com/oauth/callback\",\n ttlMs: 60_000,\n ...overrides,\n }\n}\n\nfunction connectionRun(\n overrides: Partial<CreateConnectorConnectionRunInput> = {}\n): CreateConnectorConnectionRunInput {\n return {\n id: \"run-a\",\n projectId,\n connectorId,\n kind: \"connect\",\n owner: { type: \"project\" },\n slot: \"default\",\n initiatedByExecutionId: \"execution-a\",\n ttlMs: 60_000,\n ...overrides,\n }\n}\n\nasync function createSelectionRun(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord\n): Promise<void> {\n await storage.createConnectionRun(connectionRun())\n await storage.createAuthorizationAttempt(\n authorizationAttempt({\n connectionRunId: \"run-a\",\n returnTo: \"https://app.example.com/connectors\",\n callbackBindingHash: \"binding-hash\",\n })\n )\n const claimed = await storage.claimConnectionRunCallback(connectionRunCallbackClaim())\n if (!claimed || claimed.type !== \"claimed\") throw new Error(\"Expected callback claim.\")\n const attached = await storage.attachConnectionRunAuthorization({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n })\n if (!attached) throw new Error(\"Expected authorization to be attached to the run.\")\n const waiting = await storage.waitForConnectionRunSelection({\n projectId,\n connectorId,\n runId: \"run-a\",\n processingId: claimed.run.processingId,\n authorizationId: authorization.id,\n expiresAt: authorization.selectionExpiresAt!,\n })\n if (!waiting) throw new Error(\"Expected account-selection run.\")\n}\n\nfunction connectionRunCallbackClaim(\n overrides: Partial<ClaimConnectorConnectionRunCallbackInput> = {}\n): ClaimConnectorConnectionRunCallbackInput {\n return {\n projectId,\n attemptId: \"attempt-a\",\n stateHash: \"state-hash\",\n callbackBindingHash: \"binding-hash\",\n redirectUri: \"https://example.com/oauth/callback\",\n processingId: \"processing-a\",\n processingTtlMs: 60_000,\n ...overrides,\n }\n}\n\nfunction authorizationKey(\n authorizationId: string,\n overrides: Partial<{ readonly projectId: string; readonly connectorId: string }> = {}\n) {\n return { projectId, connectorId, authorizationId, ...overrides }\n}\n\nfunction authorizationAttemptConsumption(id = \"attempt-a\") {\n return {\n id,\n projectId,\n connectorId,\n stateHash: \"state-hash\",\n redirectUri: \"https://example.com/oauth/callback\",\n }\n}\n\nfunction requestExecution(id: string): CreateExecutionInput {\n const requestId = `request-${id}`\n return {\n id,\n projectId,\n executor: { type: \"request\", requestId },\n source: { type: \"http\", requestId },\n correlationId: `correlation-${id}`,\n authorizationRef: { type: \"disabled\" },\n }\n}\n\nfunction requireTransactionConnections(storage: Storage): ConnectorConnectionStorage {\n if (storage.connectorConnections) return storage.connectorConnections\n throw new Error(\"Connector connection storage is missing from the transaction facade.\")\n}\n\nasync function createAuthorization(\n storage: ConnectorConnectionStorage,\n id: string,\n accountId: string\n): Promise<ConnectorAuthorizationRecord> {\n return storage.createAuthorization({\n id,\n projectId,\n connectorId,\n authorizedBy: { type: \"user\", id: \"user-a\" },\n credentials,\n scopes: [],\n accounts: [{ id: accountId, label: accountId }],\n selectionTtlMs: 60_000,\n })\n}\n\nasync function createActiveAuthorization(\n storage: ConnectorConnectionStorage\n): Promise<ConnectorAuthorizationRecord> {\n const authorization = await createAuthorization(storage, \"authorization-a\", \"account-a\")\n const result = await connect(storage, authorization, \"connection-a\", \"account-a\")\n return result.authorization\n}\n\nfunction connect(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord,\n connectionId: string,\n accountId: string\n) {\n return storage.putConnection({\n id: connectionId,\n projectId,\n connectorId,\n authorizationId: authorization.id,\n owner: { type: \"project\" },\n slot: \"default\",\n account: { id: accountId, label: \"ignored\" },\n replace: false,\n })\n}\n\nasync function claimMutation(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord,\n mutationId: string,\n kind: ConnectorCredentialMutationKind,\n timing: { readonly leaseDurationMs: number; readonly operationTimeoutMs: number } = {\n leaseDurationMs: 30_000,\n operationTimeoutMs: 60_000,\n }\n): Promise<ClaimConnectorCredentialMutationResult> {\n const expectedConnectionIds =\n kind === \"reauthorization\"\n ? (await storage.listConnectionsByAuthorization(authorizationKey(authorization.id))).map(\n (connection) => connection.id\n )\n : undefined\n const claim = await storage.claimCredentialMutation({\n projectId,\n connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutation: { id: mutationId, kind, holderId: \"worker-a\" },\n ...(expectedConnectionIds === undefined ? {} : { expectedConnectionIds }),\n ...timing,\n })\n if (!claim) throw new Error(`Expected '${kind}' credential mutation claim.`)\n return claim\n}\n\nasync function markExecuting(\n storage: ConnectorConnectionStorage,\n authorization: ConnectorAuthorizationRecord\n): Promise<ConnectorAuthorizationRecord> {\n const executing = await storage.markCredentialMutationExecuting({\n ...fence(authorization),\n holderId: \"worker-a\",\n })\n if (!executing) throw new Error(\"Expected credential mutation execution.\")\n return executing\n}\n\nfunction fence(authorization: ConnectorAuthorizationRecord) {\n return {\n projectId: authorization.projectId,\n connectorId: authorization.connectorId,\n authorizationId: authorization.id,\n expectedRevision: authorization.revision,\n mutationId: authorization.credentialMutation!.id,\n }\n}\n",
17
17
  "import { describe, expect, test } from \"bun:test\"\nimport { defineObjectType, link, OntologyRegistry, prop } from \"../ontology\"\nimport { linkBatchKey, objectBatchKey, objectLinkCursor, type Storage } from \"../storage\"\nimport { createMaterializerTestFixture } from \"./materializer-fixture\"\n\nexport interface EffectiveStorageContractSuiteOptions<TStorage extends Storage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"effective-storage-contract\"\nconst Device = defineObjectType({\n id: \"EffectiveStorageDevice\",\n name: \"Device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"temperature\", \"double\", { mode: \"telemetry\" }),\n ],\n links: [link.self(\"peers\", { cardinality: \"many\" })],\n})\nconst OpaqueA = defineObjectType({\n id: \"A\",\n name: \"Opaque A\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n ],\n links: [link.self(\"D\", { cardinality: \"many\" })],\n})\nconst OpaqueAB = defineObjectType({\n id: \"A:B\",\n name: \"Opaque AB\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n ],\n links: [link.self(\"D\", { cardinality: \"many\" })],\n})\nconst ontology = new OntologyRegistry({ sources: [Device, OpaqueA, OpaqueAB] })\n\nexport function runEffectiveStorageContractSuite<TStorage extends Storage>(\n name: string,\n provider: EffectiveStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await provider.createStorage()\n try {\n await seedEffectiveState(storage)\n await body(storage)\n } finally {\n await provider.cleanup?.(storage)\n }\n }\n\n describe(name, () => {\n test(\"reads Materializer-owned objects\", async () => {\n await withStorage(async (storage) => {\n const object = await storage.objects.getByPrimaryId({\n projectId,\n objectTypeId: Device.id,\n primaryId: \"a\",\n })\n expect(object).toMatchObject({\n properties: { id: \"a\", name: \"Alpha\", temperature: 22 },\n version: 2,\n })\n expect(typeof object?.lastCommitId).toBe(\"string\")\n\n const batch = await storage.objects.getByPrimaryIdBatch({\n projectId,\n items: [\n { objectTypeId: Device.id, primaryId: \"a\" },\n { objectTypeId: Device.id, primaryId: \"missing\" },\n ],\n })\n expect([...batch.keys()]).toEqual([objectBatchKey(Device.id, \"a\")])\n\n const selectedProperties = await storage.objects.selectsObjectProperties({\n projectId,\n items: [\n { objectTypeId: Device.id, primaryId: \"a\", propertyId: \"name\" },\n { objectTypeId: Device.id, primaryId: \"a\", propertyId: \"not-materialized\" },\n { objectTypeId: Device.id, primaryId: \"missing\", propertyId: \"name\" },\n { objectTypeId: Device.id, primaryId: \"a\", propertyId: \"name\" },\n ],\n })\n expect(selectedProperties).toEqual([true, true, false, true])\n })\n })\n\n test(\"reads Materializer-owned links\", async () => {\n await withStorage(async (storage) => {\n const outgoing = await storage.objects.listLinks({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n })\n expect(outgoing.map((row) => row.targetId).sort()).toEqual([\"b\", \"c\"])\n expect(outgoing.every((row) => row.lastCommitId.length > 0)).toBe(true)\n\n const incoming = await storage.objects.listIncidentLinksBatch({\n projectId,\n items: [{ objectTypeId: Device.id, objectId: \"b\" }],\n })\n expect(incoming).toHaveLength(1)\n expect(incoming[0]).toMatchObject({ sourceId: \"a\", targetId: \"b\" })\n\n const linksByScope = await storage.objects.listLinksBatch({\n projectId,\n items: [{ objectTypeId: Device.id, objectId: \"a\", linkId: \"peers\" }],\n })\n expect(linksByScope.get(linkBatchKey(Device.id, \"a\", \"peers\"))).toHaveLength(2)\n\n const incomingByScope = await storage.objects.listLinksBatch({\n projectId,\n direction: \"incoming\",\n items: [{ objectTypeId: Device.id, objectId: \"b\", linkId: \"peers\" }],\n })\n expect(incomingByScope.get(linkBatchKey(Device.id, \"b\", \"peers\"))).toMatchObject([\n { sourceId: \"a\", targetId: \"b\" },\n ])\n\n const bothDirectionsByScope = await storage.objects.listLinksBatch({\n projectId,\n direction: \"both\",\n items: [\n { objectTypeId: Device.id, objectId: \"a\", linkId: \"peers\" },\n { objectTypeId: Device.id, objectId: \"b\", linkId: \"peers\" },\n ],\n })\n expect(bothDirectionsByScope.get(linkBatchKey(Device.id, \"a\", \"peers\"))).toHaveLength(2)\n expect(bothDirectionsByScope.get(linkBatchKey(Device.id, \"b\", \"peers\"))).toMatchObject([\n { sourceId: \"a\", targetId: \"b\" },\n ])\n })\n })\n\n test(\"pages and filters incident links in the provider\", async () => {\n await withStorage(async (storage) => {\n const first = await storage.objects.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Device.id, primaryId: \"a\" }],\n direction: \"outgoing\",\n linkId: \"peers\",\n endpointObjectTypeIds: [Device.id],\n limit: 1,\n })\n expect(first.links.map((row) => row.targetId)).toEqual([\"b\"])\n expect(first.hasMore).toBe(true)\n\n const second = await storage.objects.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Device.id, primaryId: \"a\" }],\n direction: \"outgoing\",\n linkId: \"peers\",\n endpointObjectTypeIds: [Device.id],\n after: objectLinkCursor(first.links[0]),\n limit: 1,\n })\n expect(second.links.map((row) => row.targetId)).toEqual([\"c\"])\n expect(second.hasMore).toBe(false)\n\n const duplicateRefs = await storage.objects.queryLinks({\n projectId,\n objectRefs: [\n { objectTypeId: Device.id, primaryId: \"a\" },\n { objectTypeId: Device.id, primaryId: \"a\" },\n ],\n direction: \"outgoing\",\n limit: 10,\n })\n expect(duplicateRefs.links.map((row) => row.targetId)).toEqual([\"b\", \"c\"])\n\n const incoming = await storage.objects.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Device.id, primaryId: \"b\" }],\n direction: \"incoming\",\n limit: 10,\n })\n expect(incoming.links.map((row) => [row.sourceId, row.targetId])).toEqual([[\"a\", \"b\"]])\n\n const bothDirections = await storage.objects.queryLinks({\n projectId,\n objectRefs: [\n { objectTypeId: Device.id, primaryId: \"a\" },\n { objectTypeId: Device.id, primaryId: \"b\" },\n ],\n direction: \"both\",\n endpointObjectTypeIds: [Device.id],\n limit: 10,\n })\n expect(bothDirections.links.map((row) => [row.sourceId, row.targetId])).toEqual([\n [\"a\", \"b\"],\n [\"a\", \"c\"],\n ])\n\n const unauthorized = await storage.objects.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Device.id, primaryId: \"a\" }],\n direction: \"both\",\n endpointObjectTypeIds: [],\n limit: 10,\n })\n expect(unauthorized).toEqual({ links: [], hasMore: false })\n })\n })\n\n test(\"keeps delimiter-bearing object and batch-link identities distinct\", async () => {\n await withStorage(async (storage) => {\n const opaqueProjectId = `${projectId}-opaque-batch-keys`\n const fixture = createMaterializerTestFixture({\n projectId: opaqueProjectId,\n ontology,\n storage,\n })\n await fixture.seed({\n objects: [\n {\n ref: { objectTypeId: OpaqueA.id, primaryId: \"B:C\" },\n properties: { id: \"B:C\", name: \"First\" },\n },\n {\n ref: { objectTypeId: OpaqueAB.id, primaryId: \"C\" },\n properties: { id: \"C\", name: \"Second\" },\n },\n ],\n links: [\n {\n ref: {\n source: { objectTypeId: OpaqueA.id, primaryId: \"B:C\" },\n linkId: \"D\",\n target: { objectTypeId: OpaqueA.id, primaryId: \"B:C\" },\n },\n },\n {\n ref: {\n source: { objectTypeId: OpaqueAB.id, primaryId: \"C\" },\n linkId: \"D\",\n target: { objectTypeId: OpaqueAB.id, primaryId: \"C\" },\n },\n },\n ],\n })\n\n const objects = await storage.objects.getByPrimaryIdBatch({\n projectId: opaqueProjectId,\n items: [\n { objectTypeId: OpaqueA.id, primaryId: \"B:C\" },\n { objectTypeId: OpaqueAB.id, primaryId: \"C\" },\n ],\n })\n expect(objects.get(objectBatchKey(OpaqueA.id, \"B:C\"))?.properties.name).toBe(\"First\")\n expect(objects.get(objectBatchKey(OpaqueAB.id, \"C\"))?.properties.name).toBe(\"Second\")\n\n const links = await storage.objects.listLinksBatch({\n projectId: opaqueProjectId,\n direction: \"both\",\n items: [\n { objectTypeId: OpaqueA.id, objectId: \"B:C\", linkId: \"D\" },\n { objectTypeId: OpaqueAB.id, objectId: \"C\", linkId: \"D\" },\n ],\n })\n expect(links.get(linkBatchKey(OpaqueA.id, \"B:C\", \"D\"))).toHaveLength(1)\n expect(links.get(linkBatchKey(OpaqueAB.id, \"C\", \"D\"))).toHaveLength(1)\n })\n })\n\n test(\"preserves distinct incident links when opaque ids contain delimiters\", async () => {\n await withStorage(async (storage) => {\n const opaqueIdsProjectId = `${projectId}-opaque-link-ids`\n const firstSourceId = \"opaque:source\"\n const firstTargetId = `target:peers:${Device.id}:opaque:end`\n const secondSourceId = `${firstSourceId}:peers:${Device.id}:target`\n const secondTargetId = \"opaque:end\"\n const fixture = createMaterializerTestFixture({\n projectId: opaqueIdsProjectId,\n ontology,\n storage,\n })\n await fixture.seed({\n objects: [\n device(firstSourceId, \"First source\"),\n device(firstTargetId, \"First target\"),\n device(secondSourceId, \"Second source\"),\n device(secondTargetId, \"Second target\"),\n ],\n links: [peer(firstSourceId, firstTargetId), peer(secondSourceId, secondTargetId)],\n })\n\n const incident = await storage.objects.listIncidentLinksBatch({\n projectId: opaqueIdsProjectId,\n items: [\n { objectTypeId: Device.id, objectId: firstSourceId },\n { objectTypeId: Device.id, objectId: secondSourceId },\n ],\n })\n const matching = incident.filter(\n (row) => row.sourceId === firstSourceId || row.sourceId === secondSourceId\n )\n\n expect(matching.map((row) => [row.sourceId, row.linkId, row.targetId])).toEqual(\n expect.arrayContaining([\n [firstSourceId, \"peers\", firstTargetId],\n [secondSourceId, \"peers\", secondTargetId],\n ])\n )\n expect(matching).toHaveLength(2)\n })\n })\n\n test(\"pages Materializer-owned objects with a stable cursor\", async () => {\n await withStorage(async (storage) => {\n const firstPage = await storage.objects.listByPrimaryIdPage({\n projectId,\n objectTypeId: Device.id,\n limit: 2,\n })\n expect(firstPage.objects.map((row) => row.primaryId)).toEqual([\"a\", \"b\"])\n expect(firstPage.nextPrimaryId).toBe(\"b\")\n const secondPage = await storage.objects.listByPrimaryIdPage({\n projectId,\n objectTypeId: Device.id,\n afterPrimaryId: firstPage.nextPrimaryId,\n limit: 2,\n })\n expect(secondPage.objects.map((row) => row.primaryId)).toEqual([\"c\"])\n })\n })\n\n test(\"reads Materializer-owned telemetry\", async () => {\n await withStorage(async (storage) => {\n const descending = await storage.timeseries.getHistory({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n propertyId: \"temperature\",\n from: new Date(\"2026-01-01T10:30:00.000Z\"),\n order: \"desc\",\n })\n expect(descending.map((point) => point.value)).toEqual([22])\n expect(typeof descending[0]?.lastCommitId).toBe(\"string\")\n\n const histories = await storage.timeseries.getHistoryBatch({\n projectId,\n series: [\n { objectTypeId: Device.id, objectId: \"a\", propertyId: \"temperature\" },\n { objectTypeId: Device.id, objectId: \"b\", propertyId: \"temperature\" },\n ],\n limitPerSeries: 1,\n order: \"desc\",\n })\n expect(histories.map((series) => series.points[0]?.value)).toEqual([22, 18])\n\n const latest = await storage.timeseries.getLatest({\n projectId,\n objectTypeId: Device.id,\n objectId: \"a\",\n propertyId: \"temperature\",\n })\n expect(latest).toMatchObject({ value: 22, at: new Date(\"2026-01-01T12:00:00.000Z\") })\n })\n })\n })\n}\n\nasync function seedEffectiveState(storage: Storage): Promise<void> {\n const fixture = createMaterializerTestFixture({ projectId, ontology, storage })\n await fixture.seed({\n objects: [device(\"a\", \"Alpha\"), device(\"b\", \"Beta\"), device(\"c\", \"Gamma\")],\n links: [peer(\"a\", \"b\"), peer(\"a\", \"c\")],\n telemetry: [\n temperature(\"a\", 20, \"2026-01-01T10:00:00.000Z\"),\n temperature(\"a\", 22, \"2026-01-01T12:00:00.000Z\"),\n temperature(\"b\", 18, \"2026-01-01T11:00:00.000Z\"),\n ],\n })\n}\n\nfunction device(primaryId: string, name: string) {\n return {\n ref: { objectTypeId: Device.id, primaryId },\n properties: { id: primaryId, name },\n }\n}\n\nfunction peer(sourceId: string, targetId: string) {\n return {\n ref: {\n source: { objectTypeId: Device.id, primaryId: sourceId },\n linkId: \"peers\",\n target: { objectTypeId: Device.id, primaryId: targetId },\n },\n }\n}\n\nfunction temperature(objectId: string, value: number, at: string) {\n return {\n series: {\n object: { objectTypeId: Device.id, primaryId: objectId },\n propertyId: \"temperature\",\n },\n value,\n at,\n }\n}\n",
18
18
  "import { createTestingScope } from \"../execution/scopes\"\nimport type { JsonValue } from \"../json\"\nimport type {\n EditCommitResult,\n OntologyEditOperation,\n OntologyLinkRef,\n OntologyObjectRef,\n TelemetryCommitResult,\n TelemetryPointWrite,\n} from \"../materialization/model\"\nimport {\n type BoundOntologyMaterializer,\n createOntologyMaterializer,\n type OntologyMaterializerDependencies,\n} from \"../materializer/materializer\"\nimport type { OntologyRegistry } from \"../ontology\"\nimport { ProjectionRegistry } from \"../projections/registry\"\nimport type { Storage } from \"../storage\"\n\nexport interface MaterializerFixtureObject {\n readonly ref: OntologyObjectRef\n readonly properties: Readonly<Record<string, JsonValue>>\n}\n\nexport interface MaterializerFixtureLink {\n readonly ref: OntologyLinkRef\n readonly properties?: Readonly<Record<string, JsonValue>>\n}\n\nexport interface MaterializerFixtureSeed {\n readonly objects?: readonly MaterializerFixtureObject[]\n readonly links?: readonly MaterializerFixtureLink[]\n readonly telemetry?: readonly TelemetryPointWrite[]\n}\n\nexport interface MaterializerTestFixture {\n readonly materializer: BoundOntologyMaterializer\n commit(operations: readonly OntologyEditOperation[]): Promise<EditCommitResult>\n appendTelemetry(points: readonly TelemetryPointWrite[]): Promise<TelemetryCommitResult>\n seed(input: MaterializerFixtureSeed): Promise<void>\n}\n\n/**\n * Creates data for storage/query tests through the same validated Materializer path as production.\n * It intentionally exposes no direct storage writer.\n */\nexport function createMaterializerTestFixture(input: {\n readonly projectId: string\n readonly ontology: OntologyRegistry\n readonly storage: Storage\n readonly dependencies?: OntologyMaterializerDependencies\n}): MaterializerTestFixture {\n const projections = new ProjectionRegistry({\n projections: [],\n ontology: input.ontology,\n datasetsById: new Map(),\n })\n const materializer = createOntologyMaterializer({\n projectId: input.projectId,\n ontology: input.ontology,\n projections,\n storage: input.storage,\n dependencies: input.dependencies,\n }).withScope(\n createTestingScope({\n projectId: input.projectId,\n executionId: `materializer_fixture_execution:${input.projectId}`,\n requestId: `materializer_fixture_request:${input.projectId}`,\n correlationId: `materializer_fixture_correlation:${input.projectId}`,\n })\n )\n let requestOrdinal = 0\n\n function nextRequestId(kind: \"edit\" | \"telemetry\"): string {\n requestOrdinal += 1\n return `materializer-fixture:${kind}:${requestOrdinal}`\n }\n\n async function commit(operations: readonly OntologyEditOperation[]): Promise<EditCommitResult> {\n return materializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId: nextRequestId(\"edit\") },\n operations,\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n }\n\n async function appendTelemetry(\n points: readonly TelemetryPointWrite[]\n ): Promise<TelemetryCommitResult> {\n return materializer.telemetry.append({\n source: { kind: \"runtime\", requestId: nextRequestId(\"telemetry\") },\n points,\n })\n }\n\n return {\n materializer,\n commit,\n appendTelemetry,\n async seed(seed) {\n const operations: OntologyEditOperation[] = []\n for (const object of seed.objects ?? []) {\n operations.push({\n id: `seed-object:${operations.length}`,\n kind: \"object.upsert\",\n ref: object.ref,\n properties: object.properties,\n })\n }\n for (const link of seed.links ?? []) {\n operations.push({\n id: `seed-link:${operations.length}`,\n kind: \"link.upsert\",\n ref: link.ref,\n ...(link.properties === undefined ? {} : { properties: link.properties }),\n })\n }\n if (operations.length > 0) await commit(operations)\n if (seed.telemetry && seed.telemetry.length > 0) {\n await appendTelemetry(seed.telemetry)\n }\n },\n }\n}\n",
19
19
  "import type { AuthorizationContext } from \"../authorization\"\nimport { createTestingScope } from \"../execution/scopes\"\nimport type { ExecutionScope } from \"../execution/types\"\nimport { bindModelExecutionAttempt } from \"../models/execution/binding\"\nimport type { OntologySource } from \"../ontology\"\nimport { SixbHost, type SixbHostOptions } from \"../runtime/host\"\nimport { isBoundSixb, type Sixb } from \"../runtime/sixb\"\n\nexport type { AuthorizationContext } from \"../authorization\"\n\nexport interface TestExecutionOptions {\n readonly signal?: AbortSignal\n readonly authorization?: AuthorizationContext\n readonly executionId?: string\n readonly requestId?: string\n readonly correlationId?: string\n}\n\n/**\n * Bind a host to principal test authority from `authorization`, or to explicit disabled authority\n * when omitted. Test executions deliberately omit live session identity. Trusted primitive and\n * kernel authority remain unavailable to application tests.\n */\nexport interface TestExecutionHost {\n readonly id: string\n withScope(scope: ExecutionScope): object\n}\n\nexport function createTestSixb<\n TOntologySources extends readonly OntologySource[] = readonly OntologySource[],\n>(\n hostOrOptions: TestExecutionHost | SixbHostOptions<TOntologySources>,\n options: TestExecutionOptions = {}\n): Sixb<TOntologySources> {\n const host: TestExecutionHost =\n \"withScope\" in hostOrOptions ? hostOrOptions : new SixbHost(hostOrOptions)\n const sixb = host.withScope(\n createTestingScope({\n projectId: host.id,\n ...(options.authorization === undefined ? {} : { context: options.authorization }),\n ...(options.executionId === undefined ? {} : { executionId: options.executionId }),\n ...(options.requestId === undefined ? {} : { requestId: options.requestId }),\n ...(options.correlationId === undefined ? {} : { correlationId: options.correlationId }),\n })\n )\n if (!isBoundSixb<TOntologySources>(sixb)) {\n throw new Error(\"[Sixb] Test host did not return an execution-bound Sixb SDK.\")\n }\n bindModelExecutionAttempt(sixb.models, {\n attempt: 1,\n signal: options.signal ?? new AbortController().signal,\n })\n return sixb\n}\n",
20
20
  "import { describe, expect, test } from \"bun:test\"\nimport type { AuthStorage } from \"../storage/auth\"\nimport type {\n CreateExecutionInput,\n ExecutionStorage,\n TrustedPrimitiveKind,\n} from \"../storage/executions\"\nimport type { ShareGrantStorage } from \"../storage/share-grants\"\nimport type { ShareSessionStorage } from \"../storage/share-sessions\"\nimport type { Storage } from \"../storage/types\"\n\nexport type ExecutionStorageContractStorage = Storage & {\n readonly auth: AuthStorage\n readonly executions: ExecutionStorage\n readonly shareGrants: ShareGrantStorage\n readonly shareSessions: ShareSessionStorage\n}\n\nexport interface ExecutionStorageContractSuiteOptions<\n TStorage extends ExecutionStorageContractStorage = ExecutionStorageContractStorage,\n> {\n /** Factory that returns one isolated, migrated storage bundle for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"execution-contract\"\nconst createdAt = new Date(\"2026-06-01T12:00:00.000Z\")\nconst expiresAt = new Date(\"2027-06-01T12:00:00.000Z\")\n\n/** Runs the immutable execution-ledger contract against one complete storage provider. */\nexport function runExecutionStorageContractSuite<TStorage extends ExecutionStorageContractStorage>(\n label: string,\n options: ExecutionStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"captures memberships once and inherits them independently of current authority\", async () => {\n // Removal proof: skip prepareExecutionRecord's membership capture or parent inheritance.\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n for (const groupId of [\"support\", \"finance\"]) {\n await storage.auth.groupMemberships.upsert({\n projectId,\n userId: \"user-one\",\n groupId,\n source: \"manual\",\n })\n }\n const parent = await storage.executions.create({\n ...principalRequest({ id: \"parent\" }),\n requesterGroupIds: undefined,\n })\n expect(parent.requesterGroupIds).toEqual([\"finance\", \"support\"])\n await storage.auth.groupMemberships.remove({\n projectId,\n userId: \"user-one\",\n groupId: \"finance\",\n })\n const childInput = trustedPrimitive(\"child\", {\n source: { type: \"execution\", executionId: parent.id },\n correlationId: parent.correlationId,\n })\n const child = await storage.executions.create({\n ...childInput,\n requesterGroupIds: undefined,\n })\n expect(child.requesterGroupIds).toEqual([\"finance\", \"support\"])\n ;(child.requesterGroupIds as string[]).push(\"mutated\")\n await expect(\n storage.executions.getById({ projectId, id: child.id })\n ).resolves.toMatchObject({ requesterGroupIds: [\"finance\", \"support\"] })\n await expect(\n storage.executions.create({\n ...childInput,\n id: \"wrong-groups\",\n requesterGroupIds: [\"support\"],\n })\n ).rejects.toMatchObject({ code: \"invalid_parent_execution\" })\n const next = await storage.executions.create({\n ...principalRequest({ id: \"next\" }),\n requesterGroupIds: undefined,\n })\n expect(next.requesterGroupIds).toEqual([\"support\"])\n })\n })\n\n test(\"round-trips every durable executor and authority shape\", async () => {\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n await seedSharedSession(storage)\n\n const records = [\n principalRequest({\n id: \"principal-request\",\n credential: { type: \"session\", id: \"session-user\" },\n }),\n principalRequest({\n id: \"service-request\",\n principal: { type: \"serviceAccount\", id: \"service-one\" },\n credential: { type: \"accessToken\", id: \"token-service\" },\n }),\n disabledRequest(\"disabled-request\"),\n delegatedRequest(\"delegated-request\"),\n ...trustedPrimitiveKinds.map((kind) => trustedPrimitive(`${kind}-execution`, {}, kind)),\n agentExecution(\"agent-execution\"),\n kernelExecution(\"kernel-execution\"),\n ] as const\n\n for (const input of records) {\n const creationStartedAt = new Date()\n const created = await storage.executions.create(input)\n const { createdAt: persistedAt, ...persistedInput } = created\n expect(persistedInput).toEqual({\n ...input,\n requesterGroupIds: input.requesterGroupIds ?? [],\n })\n expect(Number.isFinite(persistedAt.getTime())).toBe(true)\n expect(persistedAt.getTime()).toBeGreaterThanOrEqual(creationStartedAt.getTime())\n expect(\n await storage.executions.getById({ projectId: input.projectId, id: input.id })\n ).toEqual(created)\n }\n\n const first = await storage.executions.getById({ projectId, id: \"principal-request\" })\n if (!first || first.authorizationRef.type !== \"principal\") {\n throw new Error(\"Expected principal execution fixture\")\n }\n const persisted = structuredClone(first)\n ;(first.authorizationRef.principal as { id: string }).id = \"mutated\"\n first.createdAt.setUTCFullYear(2000)\n expect(await storage.executions.getById({ projectId, id: first.id })).toEqual(persisted)\n })\n })\n\n test(\"keeps execution identity immutable and project-scoped\", async () => {\n await withStorage(async (storage) => {\n const first = disabledRequest(\"shared-id\")\n await storage.executions.create(first)\n\n await expect(storage.executions.create(first)).rejects.toMatchObject({\n code: \"duplicate_execution\",\n })\n\n const otherProject = disabledRequest(\"shared-id\", \"execution-contract-other\")\n await expect(storage.executions.create(otherProject)).resolves.toMatchObject({\n projectId: otherProject.projectId,\n })\n expect(\n await storage.executions.getById({ projectId: \"missing-project\", id: first.id })\n ).toBeNull()\n\n const backdated = await storage.executions.create({\n ...disabledRequest(\"caller-timestamp\"),\n createdAt: new Date(\"2000-01-01T00:00:00.000Z\"),\n } as CreateExecutionInput)\n expect(backdated.createdAt.getUTCFullYear()).not.toBe(2000)\n })\n })\n\n test(\"admits exactly one concurrent create for an execution id\", async () => {\n await withStorage(async (storage) => {\n const input = disabledRequest(\"concurrent-id\")\n const results = await Promise.allSettled([\n storage.executions.create(input),\n storage.executions.create(input),\n ])\n\n expect(results.filter((result) => result.status === \"fulfilled\")).toHaveLength(1)\n const [rejected] = results.filter((result) => result.status === \"rejected\")\n expect(rejected?.reason).toMatchObject({ code: \"duplicate_execution\" })\n })\n })\n\n test(\"rejects non-durable sources and executor-authority mismatches\", async () => {\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n\n const invalidInputs: readonly CreateExecutionInput[] = [\n {\n ...disabledRequest(\"queue-source\"),\n source: { type: \"queue\", queue: \"actions\", jobId: \"job-1\" },\n } as unknown as CreateExecutionInput,\n {\n ...disabledRequest(\"wrong-request-source\"),\n source: { type: \"http\", requestId: \"different-request\" },\n },\n {\n ...disabledRequest(\"principal-missing-requester\"),\n authorizationRef: {\n type: \"principal\",\n principal: { type: \"user\", id: \"user-one\" },\n },\n },\n {\n ...trustedPrimitive(\"untrusted-primitive\"),\n authorizationRef: { type: \"disabled\" },\n },\n {\n ...agentExecution(\"user-agent\"),\n authorizationRef: {\n type: \"principal\",\n principal: { type: \"user\", id: \"user-one\" },\n },\n },\n {\n ...kernelExecution(\"requested-kernel\"),\n requestedBy: { type: \"user\", id: \"user-one\" },\n },\n ]\n\n for (const input of invalidInputs) {\n await expect(storage.executions.create(input)).rejects.toMatchObject({\n code: \"invalid_input\",\n })\n }\n })\n })\n\n test(\"requires every principal and verifies credential ownership\", async () => {\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n await seedSharedSession(storage)\n\n await expect(\n storage.executions.create(\n principalRequest({\n id: \"missing-principal\",\n principal: { type: \"user\", id: \"unknown-user\" },\n })\n )\n ).rejects.toMatchObject({ code: \"missing_principal\" })\n\n await expect(\n storage.executions.create({\n ...delegatedRequest(\"missing-shared-session\"),\n authorizationRef: {\n type: \"delegated\",\n delegation: {\n kind: \"share\",\n grantId: \"grant-one\",\n sessionId: \"missing-shared-session\",\n },\n },\n })\n ).rejects.toMatchObject({ code: \"missing_credential\" })\n\n await expect(\n storage.executions.create({\n ...delegatedRequest(\"wrong-shared-grant\"),\n authorizationRef: {\n type: \"delegated\",\n delegation: {\n kind: \"share\",\n grantId: \"grant-two\",\n sessionId: \"share-session-one\",\n },\n },\n })\n ).rejects.toMatchObject({ code: \"invalid_credential\" })\n\n await expect(\n storage.executions.create(\n principalRequest({\n id: \"missing-session\",\n credential: { type: \"session\", id: \"missing-session\" },\n })\n )\n ).rejects.toMatchObject({ code: \"missing_credential\" })\n\n await expect(\n storage.executions.create(\n principalRequest({\n id: \"wrong-session-owner\",\n credential: { type: \"session\", id: \"session-other\" },\n })\n )\n ).rejects.toMatchObject({ code: \"invalid_credential\" })\n\n await expect(\n storage.executions.create({\n ...trustedPrimitive(\"missing-requester\"),\n requestedBy: { type: \"user\", id: \"unknown-user\" },\n })\n ).rejects.toMatchObject({ code: \"missing_principal\" })\n })\n })\n\n test(\"requires children to preserve direct parent provenance\", async () => {\n await withStorage(async (storage) => {\n await seedAuth(storage.auth)\n await storage.executions.create(principalRequest({ id: \"parent\" }))\n\n const validChild = trustedPrimitive(\"valid-child\", {\n correlationId: \"correlation-parent\",\n source: { type: \"execution\", executionId: \"parent\" },\n })\n const storedChild = await storage.executions.create(validChild)\n expect(storedChild).toMatchObject({\n source: { type: \"execution\", executionId: \"parent\" },\n })\n expect(storedChild).not.toHaveProperty(\"parentExecutionId\")\n\n const invalidChildren: readonly [CreateExecutionInput, string][] = [\n [\n trustedPrimitive(\"missing-parent\", {\n source: { type: \"execution\", executionId: \"unknown-parent\" },\n }),\n \"missing_parent_execution\",\n ],\n [\n trustedPrimitive(\"wrong-correlation\", {\n correlationId: \"different-correlation\",\n source: { type: \"execution\", executionId: \"parent\" },\n }),\n \"invalid_parent_execution\",\n ],\n [\n trustedPrimitive(\"wrong-requester\", {\n requestedBy: { type: \"user\", id: \"user-other\" },\n source: { type: \"execution\", executionId: \"parent\" },\n }),\n \"invalid_parent_execution\",\n ],\n ]\n\n for (const [input, code] of invalidChildren) {\n await expect(storage.executions.create(input)).rejects.toMatchObject({ code })\n }\n })\n })\n\n test(\"participates in storage transactions and rollback\", async () => {\n await withStorage(async (storage) => {\n await expect(\n storage.transaction(async (tx) => {\n await tx.executions.create(disabledRequest(\"rolled-back\"))\n throw new Error(\"rollback\")\n })\n ).rejects.toThrow(\"rollback\")\n expect(await storage.executions.getById({ projectId, id: \"rolled-back\" })).toBeNull()\n\n await storage.transaction((tx) => tx.executions.create(disabledRequest(\"committed\")))\n expect(await storage.executions.getById({ projectId, id: \"committed\" })).not.toBeNull()\n })\n })\n })\n}\n\nasync function seedAuth(auth: AuthStorage): Promise<void> {\n await auth.users.create({\n id: \"user-one\",\n projectId,\n email: \"one@example.com\",\n createdAt,\n updatedAt: createdAt,\n })\n await auth.users.create({\n id: \"user-other\",\n projectId,\n email: \"other@example.com\",\n createdAt,\n updatedAt: createdAt,\n })\n await auth.serviceAccounts.create({\n id: \"service-one\",\n projectId,\n name: \"Service one\",\n createdAt,\n updatedAt: createdAt,\n })\n await auth.sessions.create({\n id: \"session-user\",\n projectId,\n userId: \"user-one\",\n strategyId: \"contract\",\n audience: \"atlas\",\n tokenHash: \"session-user-hash\",\n createdAt,\n expiresAt,\n })\n await auth.sessions.create({\n id: \"session-other\",\n projectId,\n userId: \"user-other\",\n strategyId: \"contract\",\n audience: \"atlas\",\n tokenHash: \"session-other-hash\",\n createdAt,\n expiresAt,\n })\n await auth.accessTokens.create({\n id: \"token-service\",\n projectId,\n name: \"Service token\",\n kind: \"serviceAccount\",\n subjectType: \"serviceAccount\",\n subjectId: \"service-one\",\n tokenHash: \"service-token-hash\",\n createdAt,\n expiresAt,\n })\n}\n\nasync function seedSharedSession(storage: ExecutionStorageContractStorage): Promise<void> {\n for (const id of [\"grant-one\", \"grant-two\"] as const) {\n await storage.shareGrants.create({\n id,\n projectId,\n definitionId: \"contract-share\",\n target: { objectTypeId: \"ContractObject\", primaryId: id },\n issuedBy: { type: \"user\", id: \"user-one\" },\n authoritySnapshot: { version: 1, access: { grants: [] } },\n tokenHash: id === \"grant-one\" ? \"a\".repeat(64) : \"b\".repeat(64),\n destinationPath: `/contract/${id}`,\n createdAt,\n expiresAt,\n })\n }\n await storage.shareSessions.create({\n id: \"share-session-one\",\n projectId,\n grantId: \"grant-one\",\n tokenHash: \"c\".repeat(64),\n createdAt,\n expiresAt,\n absoluteExpiresAt: expiresAt,\n })\n}\n\nfunction principalRequest(input: {\n readonly id: string\n readonly principal?: { readonly type: \"user\" | \"serviceAccount\"; readonly id: string }\n readonly credential?:\n | { readonly type: \"session\"; readonly id: string }\n | { readonly type: \"accessToken\"; readonly id: string }\n}): CreateExecutionInput {\n const principal = input.principal ?? ({ type: \"user\", id: \"user-one\" } as const)\n return {\n id: input.id,\n projectId,\n requestedBy: principal,\n requesterGroupIds: [],\n executor: { type: \"request\", requestId: `request-${input.id}` },\n source: { type: \"http\", requestId: `request-${input.id}` },\n correlationId: input.id === \"parent\" ? \"correlation-parent\" : `correlation-${input.id}`,\n authorizationRef: {\n type: \"principal\",\n principal,\n ...(input.credential === undefined ? {} : { credential: input.credential }),\n },\n }\n}\n\nfunction disabledRequest(id: string, inputProjectId = projectId): CreateExecutionInput {\n return {\n id,\n projectId: inputProjectId,\n requesterGroupIds: [],\n executor: { type: \"request\", requestId: `request-${id}` },\n source: { type: \"http\", requestId: `request-${id}` },\n correlationId: `correlation-${id}`,\n authorizationRef: { type: \"disabled\" },\n }\n}\n\nfunction delegatedRequest(id: string): CreateExecutionInput {\n return {\n id,\n projectId,\n executor: { type: \"request\", requestId: `request-${id}` },\n source: { type: \"http\", requestId: `request-${id}` },\n correlationId: `correlation-${id}`,\n authorizationRef: {\n type: \"delegated\",\n delegation: {\n kind: \"share\",\n grantId: \"grant-one\",\n sessionId: \"share-session-one\",\n },\n },\n }\n}\n\nfunction trustedPrimitive(\n id: string,\n overrides: Partial<Pick<CreateExecutionInput, \"correlationId\" | \"requestedBy\" | \"source\">> = {},\n kind: TrustedPrimitiveKind = \"action\"\n): CreateExecutionInput {\n const runId = `run-${id}`\n return {\n id,\n projectId,\n requestedBy: { type: \"user\", id: \"user-one\" },\n requesterGroupIds: [],\n executor: { type: \"primitive\", kind, runId },\n source: trustedPrimitiveSource(kind, id),\n correlationId: `correlation-${id}`,\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: { kind, id: `contract.${kind}`, runId },\n },\n ...overrides,\n }\n}\n\nfunction trustedPrimitiveSource(\n kind: TrustedPrimitiveKind,\n id: string\n): CreateExecutionInput[\"source\"] {\n if (kind === \"pipeline\") {\n return { type: \"schedule\", eventId: `schedule-event-${id}` }\n }\n if (kind === \"projection\") {\n return {\n type: \"datasetVersion\",\n datasetId: \"contract-dataset\",\n versionId: `version-${id}`,\n }\n }\n if (kind === \"webhook\") {\n return { type: \"webhook\", deliveryId: `delivery-${id}` }\n }\n return { type: \"event\", eventId: `event-${id}` }\n}\n\nconst trustedPrimitiveKinds = [\n \"action\",\n \"pipeline\",\n \"projection\",\n \"rule\",\n \"sync\",\n \"webhook\",\n \"workflow\",\n] as const satisfies readonly TrustedPrimitiveKind[]\n\nfunction agentExecution(id: string): CreateExecutionInput {\n return {\n id,\n projectId,\n requestedBy: { type: \"user\", id: \"user-one\" },\n requesterGroupIds: [],\n executor: { type: \"agent\", runId: `run-${id}` },\n source: { type: \"execution\", executionId: \"principal-request\" },\n correlationId: \"correlation-principal-request\",\n authorizationRef: {\n type: \"principal\",\n principal: { type: \"serviceAccount\", id: \"service-one\" },\n },\n }\n}\n\nfunction kernelExecution(id: string): CreateExecutionInput {\n const operation = { type: \"ontology.recover\", recoveryId: `recovery-${id}` } as const\n return {\n id,\n projectId,\n executor: { type: \"kernel\", operation },\n requesterGroupIds: [],\n source: { type: \"event\", eventId: `event-${id}` },\n correlationId: `correlation-${id}`,\n authorizationRef: { type: \"kernel\", operation },\n }\n}\n",
21
+ "import { afterEach, beforeEach, describe, expect, test } from \"bun:test\"\nimport { col, defineDataset } from \"../datasets\"\nimport type { DatasetChanges, DatasetRow, DatasetRowChange, LakeStorage } from \"../lake-storage\"\n\nexport function runLakeChangesContractSuite<T extends LakeStorage>(\n name: string,\n harness: {\n readonly createStorage: () => T | Promise<T>\n readonly teardown?: (storage: T) => void | Promise<void>\n }\n): void {\n describe(name, () => {\n let storage: T\n const dataset = defineDataset(\"delta.contract\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"part\", \"string\"),\n col(\"value\", \"string\", { nullable: true }),\n col(\"ignored\", \"string\"),\n ],\n })\n const row = (id: string, value: string | null, part = \"x\", ignored = \"unused\"): DatasetRow => ({\n id,\n part,\n value,\n ignored,\n })\n const columns = [\"id\", \"part\", \"value\"]\n beforeEach(async () => {\n storage = await harness.createStorage()\n await storage.createDataset(dataset)\n })\n afterEach(async () => {\n if (harness.teardown) await harness.teardown(storage)\n else await storage.close?.()\n })\n async function write(rows: readonly DatasetRow[]) {\n const writer = await storage.beginWrite({ dataset })\n await writer.writeRows(rows)\n return (await writer.commit()).versionId\n }\n async function read(fromVersionId: string, toVersionId: string, keyColumns = [\"id\"]) {\n if (!storage.readChanges) throw new Error(\"Provider does not implement readChanges\")\n return storage.readChanges({\n datasetId: dataset.id,\n fromVersionId,\n toVersionId,\n columns,\n keyColumns,\n })\n }\n async function collect(reader: DatasetChanges | null) {\n if (!reader) throw new Error(\"Expected a complete delta\")\n const changes: DatasetRowChange[] = []\n try {\n for await (const change of reader.changes) changes.push(change)\n } finally {\n await reader.close()\n }\n expect(changes).toHaveLength(reader.changeCount)\n return changes.sort((a, b) =>\n JSON.stringify(a.after ?? a.before).localeCompare(JSON.stringify(b.after ?? b.before))\n )\n }\n\n // Red proof: remove the provider's readChanges implementation; this suite must fail.\n test(\"compares pinned states across skipped versions, including removals and key changes\", async () => {\n const first = await write([row(\"A\", \"one\"), row(\"B\", \"two\"), row(\"C\", \"three\")])\n await write([row(\"A\", \"temporary\"), row(\"B\", \"two\"), row(\"C\", \"three\")])\n const last = await write([row(\"A\", \"one\"), row(\"B\", \"new\"), row(\"D\", \"three\")])\n const reader = await read(first, last)\n expect(reader?.fromRowCount).toBe(3)\n expect(reader?.toRowCount).toBe(3)\n expect(await collect(reader)).toEqual([\n {\n before: { id: \"B\", part: \"x\", value: \"two\" },\n after: { id: \"B\", part: \"x\", value: \"new\" },\n },\n { before: { id: \"C\", part: \"x\", value: \"three\" }, after: null },\n { before: null, after: { id: \"D\", part: \"x\", value: \"three\" } },\n ])\n })\n test(\"ignores row order and unrequested columns\", async () => {\n const first = await write([row(\"A\", \"one\"), row(\"B\", \"two\")])\n const last = await write([row(\"B\", \"two\", \"x\", \"changed\"), row(\"A\", \"one\")])\n expect(await collect(await read(first, last))).toEqual([])\n expect(await collect(await read(last, last))).toEqual([])\n })\n test(\"distinguishes null from a value and handles an empty target\", async () => {\n const first = await write([row(\"A\", null)])\n const second = await write([row(\"A\", \"value\")])\n expect(await collect(await read(first, second))).toEqual([\n {\n before: { id: \"A\", part: \"x\", value: null },\n after: { id: \"A\", part: \"x\", value: \"value\" },\n },\n ])\n const empty = await write([])\n expect(await collect(await read(second, empty))).toEqual([\n { before: { id: \"A\", part: \"x\", value: \"value\" }, after: null },\n ])\n expect(await collect(await read(empty, second))).toEqual([\n { before: null, after: { id: \"A\", part: \"x\", value: \"value\" } },\n ])\n })\n test(\"supports composite keys without concatenation collisions\", async () => {\n const first = await write([row(\"a:b\", \"one\", \"c\"), row(\"a\", \"two\", \"b:c\")])\n const last = await write([row(\"a:b\", \"new\", \"c\"), row(\"a\", \"two\", \"b:c\")])\n expect(await collect(await read(first, last, [\"id\", \"part\"]))).toEqual([\n {\n before: { id: \"a:b\", part: \"c\", value: \"one\" },\n after: { id: \"a:b\", part: \"c\", value: \"new\" },\n },\n ])\n })\n test(\"refuses duplicate keys in either snapshot rather than losing rows\", async () => {\n const first = await write([row(\"A\", \"one\"), row(\"A\", \"two\")])\n const last = await write([row(\"A\", \"new\")])\n expect(await read(first, last)).toBeNull()\n expect(await read(last, first)).toBeNull()\n })\n test(\"refuses blank identities and invalid column requests\", async () => {\n const first = await write([row(\" \", \"one\")])\n expect(await read(first, first)).toBeNull()\n await expect(read(first, first, [])).rejects.toThrow(\"distinct columns\")\n await expect(read(first, first, [\"missing\"])).rejects.toThrow(\"distinct columns\")\n })\n test(\"releases the connection between yielded changes and closes after early exit\", async () => {\n const first = await write([row(\"A\", \"one\"), row(\"B\", \"two\")])\n const last = await write([row(\"A\", \"new\"), row(\"B\", \"new\")])\n const reader = await read(first, last)\n expect(reader).not.toBeNull()\n try {\n for await (const _change of reader!.changes) {\n expect((await storage.getLatestVersion(dataset.id))?.versionId).toBe(last)\n break\n }\n } finally {\n await reader!.close()\n }\n expect((await storage.getLatestVersion(dataset.id))?.versionId).toBe(last)\n })\n test(\"pages a complete pinned delta while a newer snapshot is published\", async () => {\n const count = 5_007\n const first = await write(Array.from({ length: count }, (_, i) => row(String(i), \"old\")))\n const last = await write(Array.from({ length: count }, (_, i) => row(String(i), \"new\")))\n const reader = await read(first, last)\n expect(reader?.changeCount).toBe(count)\n await write([row(\"later\", \"unrelated\")])\n const changes = await collect(reader)\n expect(new Set(changes.map((change) => change.after?.id)).size).toBe(count)\n expect(\n changes.every((change) => change.before?.value === \"old\" && change.after?.value === \"new\")\n ).toBe(true)\n })\n test(\"returns complete typed images without exposing mutable stored values\", async () => {\n const typed = defineDataset(\"delta.typed\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"payload\", \"json\"),\n col(\"at\", \"timestamp\"),\n col(\"amount\", \"int64\"),\n ],\n })\n await storage.createDataset(typed)\n const writeTyped = async (value: number) => {\n const writer = await storage.beginWrite({ dataset: typed })\n await writer.writeRows([\n {\n id: \"a\",\n payload: { nested: [value] },\n at: \"2026-01-01T00:00:00.000Z\",\n amount: \"9007199254740993\",\n },\n ])\n return (await writer.commit()).versionId\n }\n const first = await writeTyped(1)\n const last = await writeTyped(2)\n const reader = await storage.readChanges!({\n datasetId: typed.id,\n fromVersionId: first,\n toVersionId: last,\n keyColumns: [\"id\"],\n columns: [\"id\", \"payload\", \"at\", \"amount\"],\n })\n const changes = await collect(reader)\n expect(changes).toEqual([\n {\n before: {\n id: \"a\",\n payload: { nested: [1] },\n at: \"2026-01-01T00:00:00.000Z\",\n amount: \"9007199254740993\",\n },\n after: {\n id: \"a\",\n payload: { nested: [2] },\n at: \"2026-01-01T00:00:00.000Z\",\n amount: \"9007199254740993\",\n },\n },\n ])\n ;(changes[0]!.after!.payload as { nested: number[] }).nested.push(3)\n const rows: DatasetRow[] = []\n for await (const value of storage.readRows({ datasetId: typed.id, versionId: last }))\n rows.push(value)\n expect(rows[0]?.payload).toEqual({ nested: [2] })\n })\n test(\"returns unavailable for a version belonging to another dataset\", async () => {\n const first = await write([row(\"A\", \"one\")])\n const other = defineDataset(\"delta.other\", { schema: [col(\"id\", \"string\")] })\n await storage.createDataset(other)\n const writer = await storage.beginWrite({ dataset: other })\n await writer.writeRows([{ id: \"other\" }])\n const otherVersion = await writer.commit()\n expect(await read(otherVersion.versionId, first)).toBeNull()\n expect(await read(first, otherVersion.versionId)).toBeNull()\n })\n test(\"can close an unread delta and observes cancellation\", async () => {\n const first = await write([row(\"A\", \"one\")])\n const last = await write([row(\"A\", \"new\")])\n const reader = await read(first, last)\n await reader!.close()\n await reader!.close()\n const controller = new AbortController()\n controller.abort(new Error(\"cancelled delta\"))\n await expect(\n storage.readChanges!({\n datasetId: dataset.id,\n fromVersionId: first,\n toVersionId: last,\n columns,\n keyColumns: [\"id\"],\n signal: controller.signal,\n })\n ).rejects.toThrow(\"cancelled delta\")\n })\n })\n}\n",
21
22
  "import { describe, expect, test } from \"bun:test\"\nimport { change, col, defineDataset } from \"../datasets\"\nimport type { DatasetMergeCommitResult, DatasetRow, LakeStorage } from \"../lake-storage\"\nimport { runDatasetSequenceContract } from \"./dataset-sequence-contract\"\n\nexport interface LakeMergeStorageContractSuiteOptions<TStorage extends LakeStorage = LakeStorage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n readonly reopen?: (storage: TStorage) => TStorage | Promise<TStorage>\n}\n\nconst invoices = defineDataset(\"contract.merges.invoices\", {\n schema: [col(\"id\", \"string\"), col(\"status\", \"string\"), col(\"note\", \"string\", { nullable: true })],\n primaryKey: \"id\",\n})\n\nconst lineItems = defineDataset(\"contract.merges.line_items\", {\n schema: [col(\"invoiceId\", \"string\"), col(\"lineItemId\", \"string\"), col(\"description\", \"string\")],\n primaryKey: [\"invoiceId\", \"lineItemId\"],\n})\n\nconst unkeyed = defineDataset(\"contract.merges.unkeyed\", {\n schema: [col(\"id\", \"string\")],\n})\n\nexport function runLakeMergeStorageContractSuite<TStorage extends LakeStorage>(\n label: string,\n options: LakeMergeStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n runDatasetSequenceContract(options)\n test(\"creates an initial merge version from async changes\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const merge = await storage.beginMerge({\n dataset: invoices,\n producer: { kind: \"sync\", id: \"sync-invoices\", runId: \"run_1\" },\n inputs: [{ datasetId: \"source.events\", versionId: \"cursor_1\" }],\n })\n\n async function* changes() {\n yield change.upsert({ id: \"inv_1\", status: \"open\", note: null })\n yield change.upsert({ id: \"inv_2\", status: \"paid\", note: \"settled\" })\n }\n\n await merge.writeChanges(changes())\n const result = await merge.commit({ commitMessage: \"initial invoice changes\" })\n const version = expectCreated(result)\n\n expect(version).toMatchObject({\n datasetId: invoices.id,\n mode: \"merge\",\n rowCount: 2,\n producer: { kind: \"sync\", id: \"sync-invoices\", runId: \"run_1\" },\n inputs: [{ datasetId: \"source.events\", versionId: \"cursor_1\" }],\n })\n expect(version.parentVersionId).toBeUndefined()\n await expect(collectRows(storage.readRows({ datasetId: invoices.id }))).resolves.toEqual([\n { id: \"inv_1\", status: \"open\", note: null },\n { id: \"inv_2\", status: \"paid\", note: \"settled\" },\n ])\n })\n })\n\n test(\"inserts, updates, and deletes while preserving the parent version\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const seed = await storage.beginWrite({ dataset: invoices, mode: \"snapshot\" })\n await seed.writeRows([\n { id: \"inv_1\", status: \"open\", note: null },\n { id: \"inv_2\", status: \"open\", note: null },\n ])\n const parent = await seed.commit()\n\n const merge = await storage.beginMerge({ dataset: invoices })\n await merge.writeChanges([\n change.upsert({ id: \"inv_1\", status: \"paid\", note: null }),\n // Primary keys are immutable, so moving a row is an old-key delete plus a complete row.\n change.delete({ id: \"inv_2\" }),\n change.upsert({ id: \"inv_2_moved\", status: \"open\", note: \"moved\" }),\n ])\n const version = expectCreated(await merge.commit())\n\n expect(version.parentVersionId).toBe(parent.versionId)\n expect(version.mode).toBe(\"merge\")\n await expect(collectRows(storage.readRows({ datasetId: invoices.id }))).resolves.toEqual([\n { id: \"inv_1\", status: \"paid\", note: null },\n { id: \"inv_2_moved\", status: \"open\", note: \"moved\" },\n ])\n await expect(\n collectRows(storage.readRows({ datasetId: invoices.id, versionId: parent.versionId }))\n ).resolves.toEqual([\n { id: \"inv_1\", status: \"open\", note: null },\n { id: \"inv_2\", status: \"open\", note: null },\n ])\n })\n })\n\n test(\"applies the final change for repeated single and composite keys\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(lineItems)\n const merge = await storage.beginMerge({ dataset: lineItems })\n await merge.writeChanges([\n change.upsert({ invoiceId: \"a|b\", lineItemId: \"c\", description: \"first\" }),\n change.upsert({ invoiceId: \"a\", lineItemId: \"b|c\", description: \"other key\" }),\n ])\n await merge.writeChanges([\n change.delete({ invoiceId: \"a|b\", lineItemId: \"c\" }),\n change.upsert({ invoiceId: \"a|b\", lineItemId: \"c\", description: \"final\" }),\n ])\n expectCreated(await merge.commit())\n\n await expect(collectRows(storage.readRows({ datasetId: lineItems.id }))).resolves.toEqual([\n { invoiceId: \"a|b\", lineItemId: \"c\", description: \"final\" },\n { invoiceId: \"a\", lineItemId: \"b|c\", description: \"other key\" },\n ])\n })\n })\n\n test(\"does not create versions when visible rows do not change\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n\n const empty = await storage.beginMerge({ dataset: invoices })\n expect(await empty.commit()).toEqual({ outcome: \"unchanged\", version: null })\n\n const initialNoOp = await storage.beginMerge({ dataset: invoices })\n await initialNoOp.writeChanges([change.delete({ id: \"missing\" })])\n expect(await initialNoOp.commit()).toEqual({ outcome: \"unchanged\", version: null })\n expect(await storage.listVersions(invoices.id)).toEqual([])\n\n const seed = await storage.beginMerge({ dataset: invoices })\n await seed.writeChanges([change.upsert({ id: \"inv_1\", status: \"open\", note: null })])\n const seedVersion = expectCreated(await seed.commit())\n\n const identical = await storage.beginMerge({ dataset: invoices })\n await identical.writeChanges([change.upsert({ id: \"inv_1\", status: \"open\", note: null })])\n expect(await identical.commit()).toMatchObject({\n outcome: \"unchanged\",\n version: { versionId: seedVersion.versionId },\n })\n\n const laterNoOp = await storage.beginMerge({ dataset: invoices })\n await laterNoOp.writeChanges([\n change.upsert({ id: \"inv_1\", status: \"paid\", note: null }),\n change.upsert({ id: \"inv_1\", status: \"open\" }),\n change.delete({ id: \"missing\" }),\n ])\n const noOpResult = await laterNoOp.commit()\n\n expect(noOpResult).toMatchObject({ outcome: \"unchanged\" })\n expect(noOpResult.version?.versionId).toBe(seedVersion.versionId)\n expect(await storage.listVersions(invoices.id)).toHaveLength(1)\n })\n })\n\n test(\"automatically rejects stale merge sessions, including an absent base\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const first = await storage.beginMerge({ dataset: invoices })\n const stale = await storage.beginMerge({ dataset: invoices })\n\n await first.writeChanges([change.upsert({ id: \"inv_1\", status: \"open\", note: null })])\n await first.commit()\n await stale.writeChanges([change.upsert({ id: \"inv_2\", status: \"open\" })])\n\n await expect(stale.commit()).rejects.toThrow(\"Optimistic merge commit failed\")\n await expect(collectRows(storage.readRows({ datasetId: invoices.id }))).resolves.toEqual([\n { id: \"inv_1\", status: \"open\", note: null },\n ])\n })\n })\n\n test(\"checks an explicit latest-version guard against the captured merge base\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const seed = await storage.beginMerge({ dataset: invoices })\n await seed.writeChanges([change.upsert({ id: \"inv_1\", status: \"open\" })])\n const version = expectCreated(await seed.commit())\n\n await expect(\n storage.beginMerge({ dataset: invoices, expectedLatestVersionId: \"stale-version\" })\n ).rejects.toThrow(\"Optimistic merge start failed\")\n\n const guarded = await storage.beginMerge({\n dataset: invoices,\n expectedLatestVersionId: version.versionId,\n })\n await guarded.abort()\n })\n })\n\n test(\"serializes concurrent commits from the same base\", async () => {\n // Regression guard: bypassing a provider's per-dataset commit lock lets both commits create\n // versions from the same base and makes the fulfilled-count assertion fail.\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const left = await storage.beginMerge({ dataset: invoices })\n const right = await storage.beginMerge({ dataset: invoices })\n await left.writeChanges([change.upsert({ id: \"inv_left\", status: \"open\" })])\n await right.writeChanges([change.upsert({ id: \"inv_right\", status: \"open\" })])\n\n const results = await Promise.allSettled([left.commit(), right.commit()])\n\n expect(results.filter((result) => result.status === \"fulfilled\")).toHaveLength(1)\n expect(results.filter((result) => result.status === \"rejected\")).toHaveLength(1)\n expect(await storage.listVersions(invoices.id)).toHaveLength(1)\n expect(await collectRows(storage.readRows({ datasetId: invoices.id }))).toHaveLength(1)\n })\n })\n\n test(\"rejects unkeyed datasets and malformed changes\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(unkeyed)\n await expect(storage.beginMerge({ dataset: unkeyed })).rejects.toThrow(\n \"must define a primaryKey\"\n )\n\n await storage.createDataset(invoices)\n const merge = await storage.beginMerge({ dataset: invoices })\n await expect(merge.writeChanges([change.upsert({ id: \"inv_1\" })])).rejects.toThrow(\n \"missing required column 'status'\"\n )\n await expect(merge.writeChanges([change.delete({})])).rejects.toThrow(\n \"missing primary-key column 'id'\"\n )\n await expect(\n merge.writeChanges([{ kind: \"delete\", key: { id: \"inv_1\", extra: \"x\" } }])\n ).rejects.toThrow(\"unknown column 'extra'\")\n await merge.abort()\n })\n })\n\n test(\"enforces unique keys for snapshot and append baselines\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n\n const duplicateSnapshot = await storage.beginWrite({ dataset: invoices, mode: \"snapshot\" })\n await expect(\n duplicateSnapshot.writeRows([\n { id: \"inv_1\", status: \"open\" },\n { id: \"inv_1\", status: \"paid\" },\n ])\n ).rejects.toThrow(\"duplicate primary key\")\n await duplicateSnapshot.abort()\n\n const seed = await storage.beginWrite({ dataset: invoices, mode: \"snapshot\" })\n await seed.writeRows([{ id: \"inv_1\", status: \"open\" }])\n await seed.commit()\n\n const conflictingAppend = await storage.beginWrite({ dataset: invoices, mode: \"append\" })\n await conflictingAppend.writeRows([{ id: \"inv_1\", status: \"paid\" }])\n await expect(conflictingAppend.commit()).rejects.toThrow(\"duplicate primary key\")\n })\n })\n\n test(\"clones staged changes and enforces the session lifecycle\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(invoices)\n const row = { id: \"inv_1\", status: \"open\", note: null }\n const merge = await storage.beginMerge({ dataset: invoices })\n await merge.writeChanges([change.upsert(row)])\n row.status = \"paid\"\n expectCreated(await merge.commit())\n await merge.abort()\n\n await expect(merge.writeChanges([])).rejects.toThrow(\"already closed\")\n await expect(collectRows(storage.readRows({ datasetId: invoices.id }))).resolves.toEqual([\n { id: \"inv_1\", status: \"open\", note: null },\n ])\n\n const aborted = await storage.beginMerge({ dataset: invoices })\n await aborted.writeChanges([change.delete({ id: \"inv_1\" })])\n await aborted.abort()\n await aborted.abort()\n expect(await storage.listVersions(invoices.id)).toHaveLength(1)\n })\n })\n })\n}\n\nfunction expectCreated(result: DatasetMergeCommitResult) {\n expect(result.outcome).toBe(\"created\")\n if (result.outcome !== \"created\") {\n throw new Error(\"Expected merge to create a dataset version\")\n }\n return result.version\n}\n\nasync function collectRows(rows: AsyncIterable<DatasetRow>): Promise<DatasetRow[]> {\n const result: DatasetRow[] = []\n for await (const row of rows) {\n result.push(row)\n }\n return result\n}\n",
22
23
  "import { describe, expect, test } from \"bun:test\"\nimport { InMemoryBlobStorage } from \"../blob-storage\"\nimport { InMemoryBroker } from \"../broker\"\nimport { change, col, type DatasetDefinition, defineDataset, type MergeChange } from \"../datasets\"\nimport { writeDataset } from \"../datasets/write\"\nimport type { DatasetMergeCommitResult, DatasetRow, LakeStorage } from \"../lake-storage\"\nimport { InMemoryQueues } from \"../queues\"\nimport { SixbHost } from \"../runtime/host\"\nimport { InMemoryStorage } from \"../storage\"\nimport { createTestSixb } from \"./execution\"\nimport type { LakeMergeStorageContractSuiteOptions } from \"./lake-merge-storage-contract\"\n\nconst dataset = defineDataset(\"contract.source_order\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"revision\", \"int64\"),\n col(\"name\", \"string\"),\n col(\"details\", \"json\", { nullable: true }),\n ],\n primaryKey: \"id\",\n sequenceBy: \"revision\",\n})\nconst upsert = (revision: string | number, name = \"Sam\", id = \"42\") =>\n change.upsert({ id, revision, name })\n\nasync function merge(\n storage: LakeStorage,\n changes: readonly MergeChange<DatasetRow, DatasetRow>[],\n definition: DatasetDefinition = dataset\n) {\n const session = await storage.beginMerge({ dataset: definition })\n try {\n await session.writeChanges(changes)\n return await session.commit()\n } catch (error) {\n await session.abort()\n throw error\n }\n}\n\nasync function rows(storage: LakeStorage, definition: DatasetDefinition = dataset) {\n const result: DatasetRow[] = []\n for await (const row of storage.readRows({ datasetId: definition.id })) result.push(row)\n return result\n}\n\nexport function runDatasetSequenceContract<TStorage extends LakeStorage>(\n options: LakeMergeStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (run: (storage: TStorage) => Promise<void>) => {\n const storage = await options.createStorage()\n try {\n await storage.createDataset(dataset)\n await run(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(\"source ordering\", () => {\n test(\"initializes empty snapshots and preserves versions across retries and reopen\", async () => {\n // Regression proof: remove createInitialVersion from the writer or provider; the first\n // snapshot has no version. Ignore the rebased head and the concurrent-write assertion fails.\n let storage = await options.createStorage()\n const snapshot = () =>\n writeDataset({\n lakeStorage: storage,\n blobStorage: new InMemoryBlobStorage(),\n dataset,\n mode: \"snapshot\",\n signal: new AbortController().signal,\n readValues: async () => [],\n })\n try {\n await storage.createDataset(dataset)\n expect(await merge(storage, [])).toEqual({ outcome: \"unchanged\", version: null })\n const initialized = await Promise.all([snapshot(), snapshot()])\n expect(initialized.map((result) => result.outcome).sort()).toEqual([\"created\", \"unchanged\"])\n const initial = initialized.find((result) => result.outcome === \"created\")!\n expect(initialized[0]?.version).toEqual(initialized[1]?.version)\n expect(initial).toMatchObject({\n outcome: \"created\",\n version: { rowCount: 0, mode: \"merge\" },\n })\n expect(await rows(storage)).toEqual([])\n if (options.reopen) storage = await options.reopen(storage)\n expect(await storage.getLatestVersion(dataset.id)).toEqual(initial.version)\n expect(await snapshot()).toMatchObject({ outcome: \"unchanged\", version: initial.version })\n\n const concurrent = defineDataset(\"contract.empty_race\", {\n schema: dataset.schema.columns,\n primaryKey: \"id\",\n sequenceBy: \"revision\",\n })\n let committed: DatasetMergeCommitResult | undefined\n const rebased = await writeDataset({\n lakeStorage: storage,\n blobStorage: new InMemoryBlobStorage(),\n dataset: concurrent,\n mode: \"snapshot\",\n signal: new AbortController().signal,\n readValues: async () => {\n committed = await merge(storage, [upsert(8)], concurrent)\n return []\n },\n })\n expect(rebased).toMatchObject({ outcome: \"unchanged\", version: committed?.version })\n expect(await rows(storage, concurrent)).toHaveLength(1)\n } finally {\n await options.teardown?.(storage)\n }\n })\n\n test(\"rejects lossy timestamps outside the ordering column before changing source state\", () =>\n withStorage(async (storage) => {\n // Regression proof: remove the sequenced timestamp check in getColumnValidationError;\n // submillisecond content is accepted and its distinct values collapse to one digest.\n const timestamps = defineDataset(\"contract.content_timestamps\", {\n schema: [...dataset.schema.columns, col(\"at\", \"timestamp\", { nullable: true })],\n primaryKey: \"id\",\n sequenceBy: \"revision\",\n })\n await storage.createDataset(timestamps)\n const row = (at: unknown, id = \"42\") => change.upsert({ id, revision: 1, name: \"Sam\", at })\n const initial = await merge(storage, [row(\"2026-09-09T10:00:00.123Z\")], timestamps)\n for (const at of [\n \"2026-09-09T10:00:00.123001Z\",\n \"2026-09-09T10:00:00.123999Z\",\n \"2026-09-09T10:00:00\",\n \"2026-02-30T00:00:00Z\",\n ]) {\n await expect(merge(storage, [row(at, \"new\")], timestamps)).rejects.toThrow(\"column 'at'\")\n expect(await storage.getLatestVersion(timestamps.id)).toEqual(initial.version)\n }\n for (const at of [\"2026-09-09T12:00:00.123+02:00\", new Date(\"2026-09-09T10:00:00.123Z\")]) {\n expect((await merge(storage, [row(at)], timestamps)).outcome).toBe(\"unchanged\")\n }\n await expect(merge(storage, [row(\"2026-09-09T10:00:00.124Z\")], timestamps)).rejects.toThrow(\n \"conflicting content\"\n )\n await merge(storage, [row(null, \"nullable\")], timestamps)\n expect((await merge(storage, [row(undefined, \"nullable\")], timestamps)).outcome).toBe(\n \"unchanged\"\n )\n }))\n\n test(\"ingests through the bound SDK and preserves execution provenance\", async () => {\n // Regression proof: remove ingest from DuckLake's producer parser; reopen loses provenance.\n let storage = await options.createStorage()\n const broker = new InMemoryBroker()\n try {\n const host = new SixbHost({\n id: \"ingest-contract\",\n ontology: [],\n datasets: [dataset],\n lakeStorage: storage,\n broker,\n storage: new InMemoryStorage(),\n queues: new InMemoryQueues(),\n blobStorage: new InMemoryBlobStorage(),\n })\n const sixb = createTestSixb(host)\n const result = await sixb.datasets.ingest(dataset, { changes: [upsert(8)] })\n expect(result.outcome).toBe(\"created\")\n if (options.reopen) storage = await options.reopen(storage)\n expect((await storage.getLatestVersion(dataset.id))?.producer).toEqual({\n kind: \"ingest\",\n id: sixb.execution.id,\n })\n expect((await rows(storage)).map((row) => row.name)).toEqual([\"Sam\"])\n expect(await host.events.read()).toMatchObject([\n { type: \"dataset.version.committed\", payload: { versionId: result.version?.versionId } },\n ])\n } finally {\n await options.teardown?.(storage)\n }\n })\n test(\"rebases retained changes while preserving explicit version guards\", () =>\n withStorage(async (storage) => {\n // Regression proof: disable retryOnConflict in retryDatasetMergeCommit; the second commit fails.\n const first = await storage.beginMerge({ dataset })\n const second = await storage.beginMerge({ dataset })\n await first.writeChanges([upsert(8)])\n await second.writeChanges([upsert(7, \"stale\"), upsert(1, \"other\", \"other\")])\n const initial = await first.commit({ retryOnConflict: true })\n await second.commit({ retryOnConflict: true })\n expect((await rows(storage)).map((row) => row.name).sort()).toEqual([\"Sam\", \"other\"])\n const guarded = await storage.beginMerge({\n dataset,\n expectedLatestVersionId: (await storage.getLatestVersion(dataset.id))?.versionId,\n })\n await guarded.writeChanges([upsert(10)])\n await merge(storage, [change.delete({ id: \"42\" }, { sequence: 9 })])\n await expect(guarded.commit({ retryOnConflict: true })).rejects.toThrow(\"Optimistic\")\n await guarded.abort()\n const staleDelete = await storage.beginMerge({ dataset })\n await staleDelete.writeChanges([change.delete({ id: \"42\" }, { sequence: 9 })])\n await merge(storage, [upsert(10)])\n expect((await staleDelete.commit({ retryOnConflict: true })).outcome).toBe(\"unchanged\")\n expect((await storage.getLatestVersion(dataset.id))?.versionId).not.toBe(\n initial.version?.versionId\n )\n }))\n // Regression proof: bypass reconcileDatasetSequences at the provider commit boundary.\n // The stale-write, conflict, and deletion assertions below must then fail.\n test(\"orders repeated keys exactly and conflicts atomically\", () =>\n withStorage(async (storage) => {\n const first = await merge(storage, [upsert(\"9007199254740993\")])\n expect((await merge(storage, [upsert(\"9007199254740992\", \"stale\")])).outcome).toBe(\n \"unchanged\"\n )\n expect((await merge(storage, [upsert(\"09007199254740993\")])).outcome).toBe(\"unchanged\")\n await expect(\n merge(storage, [upsert(\"1\", \"other\", \"other\"), upsert(\"9007199254740993\", \"conflict\")])\n ).rejects.toThrow(\"conflicting content\")\n expect((await storage.getLatestVersion(dataset.id))?.versionId).toBe(\n first.version?.versionId\n )\n expect(await rows(storage)).toHaveLength(1)\n await merge(storage, [\n upsert(\"9007199254740995\", \"newest\"),\n upsert(\"9007199254740994\", \"stale\"),\n ])\n expect((await rows(storage))[0]?.name).toBe(\"newest\")\n await expect(\n merge(storage, [upsert(\"9007199254740996\", \"a\"), upsert(\"9007199254740996\", \"b\")])\n ).rejects.toThrow(\"conflicting content\")\n expect((await rows(storage))[0]?.name).toBe(\"newest\")\n }))\n\n test(\"retains absent-key deletions and protects their version boundary\", () =>\n withStorage(async (storage) => {\n const staleSession = await storage.beginMerge({ dataset })\n await staleSession.writeChanges([upsert(8)])\n const deleted = await merge(storage, [change.delete({ id: \"42\" }, { sequence: 9 })])\n expect(deleted).toMatchObject({ outcome: \"created\", version: { rowCount: 0 } })\n await expect(staleSession.commit()).rejects.toThrow(\"Optimistic\")\n await staleSession.abort()\n expect((await merge(storage, [upsert(8)])).outcome).toBe(\"unchanged\")\n expect(\n (await merge(storage, [change.delete({ id: \"42\" }, { sequence: \"9\" })])).outcome\n ).toBe(\"unchanged\")\n await expect(merge(storage, [upsert(9)])).rejects.toThrow(\"conflicting content\")\n await merge(storage, [upsert(10)])\n expect(await rows(storage)).toHaveLength(1)\n expect((await merge(storage, [change.delete({ id: \"42\" }, { sequence: 9 })])).outcome).toBe(\n \"unchanged\"\n )\n await merge(storage, [change.delete({ id: \"42\" }, { sequence: 11 })])\n expect(await rows(storage)).toEqual([])\n }))\n\n test(\"compares canonical content across JSON order and nullable representations\", () =>\n withStorage(async (storage) => {\n await merge(storage, [\n change.upsert({ id: \"42\", revision: 1, name: \"Sam\", details: { a: 1, b: 2 } }),\n ])\n expect(\n (\n await merge(storage, [\n change.upsert({ id: \"42\", revision: \"01\", name: \"Sam\", details: { b: 2, a: 1 } }),\n ])\n ).outcome\n ).toBe(\"unchanged\")\n await merge(storage, [upsert(2)])\n expect(\n (\n await merge(storage, [\n change.upsert({ id: \"42\", revision: \"2\", name: \"Sam\", details: null }),\n ])\n ).outcome\n ).toBe(\"unchanged\")\n }))\n\n test(\"validates integer ranges and delete sequences at the provider boundary\", () =>\n withStorage(async (storage) => {\n for (const revision of [\n null,\n undefined,\n 1.5,\n Number.MAX_SAFE_INTEGER + 1,\n \"9223372036854775808\",\n \"-9223372036854775809\",\n \"1e3\",\n ]) {\n await expect(\n merge(storage, [change.upsert({ id: \"42\", revision, name: \"Sam\" })])\n ).rejects.toThrow(\"sequence\")\n }\n await expect(merge(storage, [change.delete({ id: \"42\" })])).rejects.toThrow(\"sequence\")\n await merge(storage, [upsert(\"-9223372036854775808\"), upsert(\"9223372036854775807\")])\n expect((await rows(storage))[0]?.revision?.toString()).toBe(\"9223372036854775807\")\n }))\n\n test(\"normalizes timezone-aware timestamps without discarding precision\", () =>\n withStorage(async (storage) => {\n const timestamps = defineDataset(\"contract.source_timestamps\", {\n schema: [col(\"id\", \"string\"), col(\"updated\", \"timestamp\"), col(\"name\", \"string\")],\n primaryKey: \"id\",\n sequenceBy: \"updated\",\n })\n await storage.createDataset(timestamps)\n const row = (updated: unknown, name = \"Sam\") => change.upsert({ id: \"42\", updated, name })\n await merge(storage, [row(\"2026-09-09T10:00:00.123Z\")], timestamps)\n for (const updated of [\n \"2026-09-09T12:00:00.123+02:00\",\n new Date(\"2026-09-09T10:00:00.123Z\"),\n ]) {\n expect((await merge(storage, [row(updated)], timestamps)).outcome).toBe(\"unchanged\")\n }\n for (const updated of [\n \"2026-09-09T10:00:00.1234Z\",\n \"2026-09-09T10:00:00\",\n \"2026-02-30T00:00:00Z\",\n new Date(Number.NaN),\n ]) {\n await expect(merge(storage, [row(updated)], timestamps)).rejects.toThrow(\"sequence\")\n }\n await merge(\n storage,\n [change.delete({ id: \"42\" }, { sequence: \"2026-09-09T10:00:00.124Z\" })],\n timestamps\n )\n expect((await merge(storage, [row(\"2026-09-09T10:00:00.123Z\")], timestamps)).outcome).toBe(\n \"unchanged\"\n )\n }))\n\n test(\"round-trips immutable sequencing and rejects writes that bypass ordering\", () =>\n withStorage(async (storage) => {\n expect((await storage.getDataset(dataset.id))?.sequenceBy).toBe(\"revision\")\n expect(\n (await storage.listDatasets()).find((item) => item.id === dataset.id)?.sequenceBy\n ).toBe(\"revision\")\n const { sequenceBy: _, ...unsequenced } = dataset\n await expect(storage.createDataset(unsequenced)).rejects.toThrow(\"immutable\")\n await storage.createDataset({ ...unsequenced, id: \"legacy\" })\n await expect(storage.createDataset({ ...dataset, id: \"legacy\" })).rejects.toThrow(\n \"immutable\"\n )\n await expect(\n storage.createDataset({ ...dataset, id: \"invalid\", primaryKey: undefined })\n ).rejects.toThrow(\"sequenceBy\")\n await expect(\n storage.createDataset({ ...dataset, id: \"invalid\", sequenceBy: \"name\" })\n ).rejects.toThrow(\"sequenceBy\")\n await expect(storage.beginWrite({ dataset })).rejects.toThrow(\"beginMerge\")\n }))\n\n const reopen = options.reopen\n if (reopen)\n test(\"preserves source state after reopen\", async () => {\n let storage = await options.createStorage()\n try {\n await storage.createDataset(dataset)\n await merge(storage, [\n upsert(8, \"visible\", \"visible\"),\n change.delete({ id: \"42\" }, { sequence: 9 }),\n ])\n storage = await reopen(storage)\n expect((await storage.getDataset(dataset.id))?.sequenceBy).toBe(\"revision\")\n expect((await merge(storage, [upsert(8), upsert(7, \"stale\", \"visible\")])).outcome).toBe(\n \"unchanged\"\n )\n expect(await rows(storage)).toHaveLength(1)\n await merge(storage, [upsert(10)])\n expect(await rows(storage)).toHaveLength(2)\n } finally {\n await options.teardown?.(storage)\n }\n })\n })\n}\n",
23
24
  "import { describe, expect, test } from \"bun:test\"\nimport type { FileRef } from \"../blob-storage\"\nimport { col, defineDataset } from \"../datasets\"\nimport { LakeStorageError } from \"../lake-storage/errors\"\nimport type { DatasetRow, LakeStorage } from \"../lake-storage/types\"\n\nexport type LakeStorageSchemaEvolutionCapability = \"strict\" | \"addNullableColumns\"\n\nexport interface LakeStorageContractSuiteOptions<TStorage extends LakeStorage = LakeStorage> {\n /** Factory that produces a fresh `LakeStorage` instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n /**\n * Dataset definition update policy supported by the provider. Defaults to\n * `strict`, which allows metadata-only merges but rejects schema evolution.\n */\n readonly schemaEvolution?: LakeStorageSchemaEvolutionCapability\n /**\n * Version id that is syntactically valid for the provider but should not\n * exist. Defaults to a generic id accepted by providers without format\n * restrictions.\n */\n readonly missingVersionId?: string\n}\n\nconst definitionDataset = defineDataset(\"contract.definitions.orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n description: \"Contract orders\",\n})\n\nconst reorderedDefinitionDataset = defineDataset(\"contract.definitions.orders\", {\n schema: [col(\"customerName\", \"string\"), col(\"orderId\", \"string\")],\n description: \"Contract orders\",\n})\n\nconst keyedDefinitionDataset = defineDataset(\"contract.definitions.keyed_orders\", {\n schema: [col(\"tenantId\", \"string\"), col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n primaryKey: [\"tenantId\", \"orderId\"],\n description: \"Contract keyed orders\",\n})\n\nconst writeDataset = defineDataset(\"contract.writes.orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"customerName\", \"string\")],\n})\n\nconst nullableWriteDataset = defineDataset(\"contract.writes.nullable_orders\", {\n schema: [col(\"orderId\", \"string\"), col(\"note\", \"string\", { nullable: true })],\n})\n\nconst decimalWriteDataset = defineDataset(\"contract.writes.decimals\", {\n schema: [col(\"id\", \"string\"), col(\"amount\", \"decimal\", { nullable: true })],\n})\n\nconst fileRefDataset = defineDataset(\"contract.files.documents\", {\n schema: [col(\"id\", \"string\"), col(\"attachment\", \"fileRef\", { nullable: true })],\n})\n\nconst invoiceRef: FileRef = {\n blobId: `blob_${\"a\".repeat(64)}`,\n digest: `sha256:${\"a\".repeat(64)}`,\n sizeBytes: 15,\n fileName: \"invoice.txt\",\n mediaType: \"text/plain\",\n logicalPath: \"invoices/invoice.txt\",\n}\n\n/**\n * Runs the shared `LakeStorage` contract against any provider.\n *\n * The suite covers provider-independent Lake semantics: definition\n * materialization and compatibility checks, versioned writes and reads,\n * optimistic commits, unchanged-write detection, write-session lifecycle,\n * and row validation.\n */\nexport function runLakeStorageContractSuite<TStorage extends LakeStorage>(\n label: string,\n options: LakeStorageContractSuiteOptions<TStorage>\n): void {\n const schemaEvolution = options.schemaEvolution ?? \"strict\"\n const missingVersionId = options.missingVersionId ?? \"missing-version\"\n\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n describe(\"dataset definitions\", () => {\n test(\"creates, gets, lists, and reuses dataset definitions\", async () => {\n await withStorage(async (storage) => {\n expect(await storage.getDataset(definitionDataset.id)).toBeNull()\n\n const created = await storage.createDataset(definitionDataset)\n const repeated = await storage.createDataset(definitionDataset)\n\n expect(created).toEqual(definitionDataset)\n expect(repeated).toEqual(definitionDataset)\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n expect(await storage.getDataset(\"missing.dataset\")).toBeNull()\n expect(await storage.listDatasets()).toEqual([definitionDataset])\n expect(await storage.listVersions(definitionDataset.id)).toEqual([])\n })\n })\n\n test(\"round-trips keyed definitions through create, get, list, and reuse\", async () => {\n // Regression guard: omitting primaryKey from mergeDatasetDefinition makes reuse lose\n // the key and fails this contract case.\n await withStorage(async (storage) => {\n const created = await storage.createDataset(keyedDefinitionDataset)\n const repeated = await storage.createDataset(keyedDefinitionDataset)\n\n expect(created).toEqual(keyedDefinitionDataset)\n expect(repeated).toEqual(keyedDefinitionDataset)\n expect(await storage.getDataset(keyedDefinitionDataset.id)).toEqual(\n keyedDefinitionDataset\n )\n expect(await storage.listDatasets()).toEqual([keyedDefinitionDataset])\n expect(await storage.listVersions(keyedDefinitionDataset.id)).toEqual([])\n })\n })\n\n test(\"treats same-column declaration reorders as a no-op\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(definitionDataset)\n await storage.assertDatasetDefinitionsCompatible([reorderedDefinitionDataset])\n\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n await expect(storage.createDataset(reorderedDefinitionDataset)).resolves.toEqual(\n definitionDataset\n )\n expect(await storage.listVersions(definitionDataset.id)).toEqual([])\n })\n })\n\n test(\"persists compatible metadata additions\", async () => {\n await withStorage(async (storage) => {\n const minimalDataset = defineDataset(\"contract.definitions.metadata\", {\n schema: [col(\"orderId\", \"string\"), col(\"orderDate\", \"date\")],\n })\n const documentedDataset = defineDataset(\"contract.definitions.metadata\", {\n schema: [col(\"orderId\", \"string\"), col(\"orderDate\", \"date\")],\n partitionBy: [\"orderDate\"],\n description: \"Contract metadata\",\n })\n\n await storage.createDataset(minimalDataset)\n await storage.assertDatasetDefinitionsCompatible([documentedDataset])\n\n expect(await storage.getDataset(minimalDataset.id)).toEqual(minimalDataset)\n await expect(storage.createDataset(documentedDataset)).resolves.toEqual(documentedDataset)\n expect(await storage.getDataset(minimalDataset.id)).toEqual(documentedDataset)\n })\n })\n\n test(\"rejects incompatible definition changes without mutating the stored definition\", async () => {\n await withStorage(async (storage) => {\n const changedDataset = defineDataset(definitionDataset.id, {\n schema: [col(\"orderId\", \"int64\"), col(\"customerName\", \"string\")],\n description: \"Contract orders\",\n })\n\n await storage.createDataset(definitionDataset)\n\n await expect(\n storage.assertDatasetDefinitionsCompatible([changedDataset])\n ).rejects.toThrow(\"changing column 'orderId' type\")\n await expect(storage.createDataset(changedDataset)).rejects.toBeInstanceOf(\n LakeStorageError\n )\n expect(await storage.getDataset(definitionDataset.id)).toEqual(definitionDataset)\n })\n })\n\n test(\"checks provider schema evolution policy\", async () => {\n await withStorage(async (storage) => {\n const initialDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"invoiceId\", \"string\")],\n })\n const requestedDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"currency\", \"string\", { nullable: true }), col(\"invoiceId\", \"string\")],\n })\n const storedDataset = defineDataset(\"contract.definitions.schema_evolution\", {\n schema: [col(\"invoiceId\", \"string\"), col(\"currency\", \"string\", { nullable: true })],\n })\n\n await storage.createDataset(initialDataset)\n\n if (schemaEvolution === \"strict\") {\n await expect(\n storage.assertDatasetDefinitionsCompatible([requestedDataset])\n ).rejects.toThrow(\"incompatible schema\")\n await expect(storage.createDataset(requestedDataset)).rejects.toThrow(\n \"incompatible schema\"\n )\n expect(await storage.getDataset(initialDataset.id)).toEqual(initialDataset)\n return\n }\n\n await storage.assertDatasetDefinitionsCompatible([requestedDataset])\n expect(await storage.getDataset(initialDataset.id)).toEqual(initialDataset)\n expect(await storage.listVersions(initialDataset.id)).toEqual([])\n\n await expect(storage.createDataset(requestedDataset)).resolves.toEqual(storedDataset)\n expect(await storage.getDataset(initialDataset.id)).toEqual(storedDataset)\n\n const [schemaVersion] = await storage.listVersions(initialDataset.id)\n expect(schemaVersion).toMatchObject({\n datasetId: initialDataset.id,\n mode: \"schema\",\n schema: storedDataset.schema,\n })\n })\n })\n\n test(\"keeps compatibility checks read-only for missing datasets\", async () => {\n await withStorage(async (storage) => {\n await storage.assertDatasetDefinitionsCompatible([definitionDataset])\n\n expect(await storage.getDataset(definitionDataset.id)).toBeNull()\n expect(await storage.listDatasets()).toEqual([])\n })\n })\n })\n\n describe(\"catalog state\", () => {\n test(\"reports materialized state and latest version summaries in bulk\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const commit = await write.commit()\n expect(commit.outcome).toBe(\"created\")\n const version = commit\n\n await storage.createDataset(definitionDataset)\n\n const state = await storage.listDatasetCatalogState([\n writeDataset.id,\n definitionDataset.id,\n \"contract.missing.dataset\",\n ])\n\n const byId = new Map(state.map((entry) => [entry.datasetId, entry]))\n\n expect(byId.get(writeDataset.id)).toMatchObject({\n datasetId: writeDataset.id,\n materialized: true,\n })\n expect(byId.get(writeDataset.id)?.latestVersion).toMatchObject({\n datasetId: writeDataset.id,\n versionId: version.versionId,\n mode: \"snapshot\",\n rowCount: 2,\n })\n\n // Created without a committed write: materialized, but no version.\n expect(byId.get(definitionDataset.id)).toEqual({\n datasetId: definitionDataset.id,\n materialized: true,\n latestVersion: null,\n })\n\n // Registered but never created.\n expect(byId.get(\"contract.missing.dataset\")).toEqual({\n datasetId: \"contract.missing.dataset\",\n materialized: false,\n latestVersion: null,\n })\n })\n })\n\n test(\"returns an empty result for an empty request\", async () => {\n await withStorage(async (storage) => {\n expect(await storage.listDatasetCatalogState([])).toEqual([])\n })\n })\n })\n\n describe(\"writes and reads\", () => {\n test(\"keeps immutable-version row order and offsets stable\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n const expected = [\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_5\", customerName: \"Margaret\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_4\", customerName: \"Dorothy\" },\n ]\n await write.writeRows(expected)\n const version = await write.commit()\n const pinned = { datasetId: writeDataset.id, versionId: version.versionId }\n\n await expect(collectRows(storage.readRows(pinned))).resolves.toEqual(expected)\n await expect(collectRows(storage.readRows(pinned))).resolves.toEqual(expected)\n for (const offset of [0, 2, expected.length, expected.length + 3]) {\n await expect(collectRows(storage.readRows({ ...pinned, offset }))).resolves.toEqual(\n expected.slice(offset)\n )\n }\n await expect(\n collectRows(storage.readRows({ ...pinned, columns: [\"orderId\"], offset: 1, limit: 2 }))\n ).resolves.toEqual([{ orderId: \"ord_1\" }, { orderId: \"ord_5\" }])\n })\n })\n\n test(\"rejects writes for unknown datasets\", async () => {\n await withStorage(async (storage) => {\n await expect(storage.beginWrite({ dataset: writeDataset })).rejects.toThrow(\n \"Unknown dataset\"\n )\n })\n })\n\n test(\"commits snapshot and append versions with versioned reads\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const snapshotWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n producer: { kind: \"sync\", id: \"contract-sync\", runId: \"run_1\" },\n })\n await snapshotWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const snapshotCommit = await snapshotWrite.commit({ commitMessage: \"snapshot orders\" })\n expect(snapshotCommit.outcome).toBe(\"created\")\n const version1 = snapshotCommit\n\n expect(version1).toMatchObject({\n datasetId: writeDataset.id,\n mode: \"snapshot\",\n schema: writeDataset.schema,\n producer: { kind: \"sync\", id: \"contract-sync\", runId: \"run_1\" },\n rowCount: 2,\n })\n expect(version1.parentVersionId).toBeUndefined()\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version1.versionId,\n })\n expect(await storage.getVersion(writeDataset.id, version1.versionId)).toMatchObject({\n datasetId: writeDataset.id,\n versionId: version1.versionId,\n mode: \"snapshot\",\n rowCount: 2,\n })\n\n await Bun.sleep(2)\n\n const appendWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"append\",\n inputs: [{ datasetId: writeDataset.id, versionId: version1.versionId }],\n })\n await appendWrite.writeRows([{ orderId: \"ord_3\", customerName: \"Katherine\" }])\n const appendCommit = await appendWrite.commit({\n expectedLatestVersionId: version1.versionId,\n })\n expect(appendCommit.outcome).toBe(\"created\")\n const version2 = appendCommit\n\n expect(version2).toMatchObject({\n datasetId: writeDataset.id,\n parentVersionId: version1.versionId,\n mode: \"append\",\n schema: writeDataset.schema,\n inputs: [{ datasetId: writeDataset.id, versionId: version1.versionId }],\n rowCount: 3,\n })\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version2.versionId,\n })\n\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n ])\n await expect(\n collectRows(\n storage.readRows({ datasetId: writeDataset.id, versionId: version1.versionId })\n )\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n limit: 2,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_1\" }, { orderId: \"ord_2\" }])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n limit: 1,\n offset: 1,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_2\" }])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: writeDataset.id,\n columns: [\"orderId\"],\n offset: 1,\n })\n )\n ).resolves.toEqual([{ orderId: \"ord_2\" }, { orderId: \"ord_3\" }])\n\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([version2.versionId, version1.versionId])\n expect(\n (await storage.listVersions(writeDataset.id, 1)).map((version) => version.versionId)\n ).toEqual([version2.versionId])\n expect(await storage.listVersions(\"missing.dataset\")).toEqual([])\n expect(await storage.getLatestVersion(\"missing.dataset\")).toBeNull()\n expect(await storage.getVersion(writeDataset.id, missingVersionId)).toBeNull()\n })\n })\n\n test(\"creates an initial empty snapshot version\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n const version = await write.commit()\n\n expect(version).toMatchObject({\n datasetId: writeDataset.id,\n mode: \"snapshot\",\n outcome: \"created\",\n rowCount: 0,\n })\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version.versionId,\n })\n expect(await storage.listVersions(writeDataset.id)).toHaveLength(1)\n\n const repeatedWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n })\n const repeatedVersion = await repeatedWrite.commit()\n expect(repeatedVersion.outcome).toBe(\"unchanged\")\n expect(repeatedVersion.versionId).toBe(version.versionId)\n expect(await storage.listVersions(writeDataset.id)).toHaveLength(1)\n\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([])\n })\n })\n\n test(\"guards initial and existing versions before accepting even an unchanged write\", () =>\n withStorage(async (storage) => {\n // Regression proof: treat null like undefined or move the version guard after no-op\n // detection. An old writer then succeeds after a competing version has committed.\n await storage.createDataset(writeDataset)\n const first = await storage.beginWrite({ dataset: writeDataset })\n const stale = await storage.beginWrite({ dataset: writeDataset })\n const initial = await first.commit({ expectedLatestVersionId: null })\n await expect(stale.commit({ expectedLatestVersionId: null })).rejects.toThrow(\n \"Optimistic\"\n )\n await stale.abort()\n const replacement = await storage.beginWrite({ dataset: writeDataset })\n await replacement.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const next = await replacement.commit({ expectedLatestVersionId: initial.versionId })\n const identical = await storage.beginWrite({ dataset: writeDataset })\n await identical.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n await expect(\n identical.commit({ expectedLatestVersionId: initial.versionId })\n ).rejects.toThrow(\"Optimistic\")\n await identical.abort()\n expect((await storage.getLatestVersion(writeDataset.id))?.versionId).toBe(next.versionId)\n }))\n\n test(\"versions changed input lineage even when output rows are identical\", () =>\n withStorage(async (storage) => {\n // Regression proof: omit hasDatasetInputChanges in the provider's no-op branch.\n // The updated input reference is lost and the stale writer is no longer fenced.\n await storage.createDataset(writeDataset)\n await storage.createDataset(definitionDataset)\n const sourceWrite = await storage.beginWrite({ dataset: definitionDataset })\n const source1 = await sourceWrite.commit()\n const rows = [{ orderId: \"ord_1\", customerName: \"Ada\" }]\n const ref1 = { datasetId: definitionDataset.id, versionId: source1.versionId }\n const first = await storage.beginWrite({ dataset: writeDataset, inputs: [ref1] })\n await first.writeRows(rows)\n const initial = await first.commit({ expectedLatestVersionId: null })\n const stale = await storage.beginWrite({ dataset: writeDataset, inputs: [ref1] })\n await stale.writeRows([{ orderId: \"ord_1\", customerName: \"Stale\" }])\n const sourceUpdate = await storage.beginWrite({ dataset: definitionDataset })\n await sourceUpdate.writeRows([{ orderId: \"source\", customerName: \"Changed\" }])\n const source2 = await sourceUpdate.commit()\n const ref2 = { datasetId: definitionDataset.id, versionId: source2.versionId }\n const update = await storage.beginWrite({ dataset: writeDataset, inputs: [ref2] })\n await update.writeRows(rows)\n const newer = await update.commit({ expectedLatestVersionId: initial.versionId })\n expect(newer).toMatchObject({ outcome: \"created\", inputs: [ref2] })\n await expect(\n stale.commit({ expectedLatestVersionId: initial.versionId })\n ).rejects.toThrow(\"Optimistic\")\n await stale.abort()\n const same = await storage.beginWrite({ dataset: writeDataset, inputs: [ref2] })\n await same.writeRows(rows)\n const unchanged = await same.commit({ expectedLatestVersionId: newer.versionId })\n expect(unchanged).toMatchObject({ outcome: \"unchanged\", versionId: newer.versionId })\n expect(await collectRows(storage.readRows({ datasetId: writeDataset.id }))).toEqual(rows)\n }))\n\n test(\"creates an initial empty append version\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"append\" })\n const version = await write.commit()\n\n expect(version).toMatchObject({\n datasetId: writeDataset.id,\n mode: \"append\",\n outcome: \"created\",\n })\n expect(version.parentVersionId).toBeUndefined()\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: version.versionId,\n })\n expect(await storage.listVersions(writeDataset.id)).toHaveLength(1)\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([])\n })\n })\n\n test(\"snapshot writes replace the visible latest rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const firstWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await firstWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const firstVersion = await firstWrite.commit()\n\n const replacementWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n })\n await replacementWrite.writeRows([{ orderId: \"ord_9\", customerName: \"Dorothy\" }])\n const replacementVersion = await replacementWrite.commit()\n\n expect(replacementVersion.versionId).not.toBe(firstVersion.versionId)\n expect(replacementVersion.parentVersionId).toBeUndefined()\n expect(replacementVersion.rowCount).toBe(1)\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([{ orderId: \"ord_9\", customerName: \"Dorothy\" }])\n await expect(\n collectRows(\n storage.readRows({ datasetId: writeDataset.id, versionId: firstVersion.versionId })\n )\n ).resolves.toEqual([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n })\n })\n\n test(\"reuses the latest version when a snapshot commits identical content\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Grace\" },\n ])\n const seedVersion = await seedWrite.commit()\n expect(seedVersion.outcome).toBe(\"created\")\n\n // Identical rows in a different order are the same snapshot content.\n const identicalWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"snapshot\",\n })\n await identicalWrite.writeRows([\n { orderId: \"ord_2\", customerName: \"Grace\" },\n { orderId: \"ord_1\", customerName: \"Ada\" },\n ])\n const identicalVersion = await identicalWrite.commit()\n\n expect(identicalVersion.outcome).toBe(\"unchanged\")\n expect(identicalVersion.versionId).toBe(seedVersion.versionId)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([seedVersion.versionId])\n expect(await storage.getLatestVersion(writeDataset.id)).toMatchObject({\n versionId: seedVersion.versionId,\n })\n\n await Bun.sleep(2)\n\n const changedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await changedWrite.writeRows([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_2\", customerName: \"Hopper\" },\n ])\n const changedVersion = await changedWrite.commit()\n\n expect(changedVersion.outcome).toBe(\"created\")\n expect(changedVersion.versionId).not.toBe(seedVersion.versionId)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([changedVersion.versionId, seedVersion.versionId])\n })\n })\n\n test(\"snapshot content comparison respects row multiplicities\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const rowA = { orderId: \"ord_1\", customerName: \"Ada\" }\n const rowB = { orderId: \"ord_2\", customerName: \"Grace\" }\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([rowA, rowA, rowB])\n const seedVersion = await seedWrite.commit()\n\n await Bun.sleep(2)\n\n // Same distinct rows and row count, but different duplicate counts:\n // this is new content, not a no-op.\n const shiftedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await shiftedWrite.writeRows([rowA, rowB, rowB])\n const shiftedVersion = await shiftedWrite.commit()\n\n expect(shiftedVersion.outcome).toBe(\"created\")\n expect(shiftedVersion.versionId).not.toBe(seedVersion.versionId)\n })\n })\n\n test(\"treats omitted and null nullable values as the same snapshot content\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(nullableWriteDataset)\n\n const seedWrite = await storage.beginWrite({\n dataset: nullableWriteDataset,\n mode: \"snapshot\",\n })\n await seedWrite.writeRows([{ orderId: \"ord_1\", note: null }])\n const seedVersion = await seedWrite.commit()\n\n const omittedWrite = await storage.beginWrite({\n dataset: nullableWriteDataset,\n mode: \"snapshot\",\n })\n await omittedWrite.writeRows([{ orderId: \"ord_1\" }])\n const omittedVersion = await omittedWrite.commit()\n\n expect(omittedVersion.outcome).toBe(\"unchanged\")\n expect(omittedVersion.versionId).toBe(seedVersion.versionId)\n })\n })\n\n test(\"reuses the latest version when an append commits zero rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const seedVersion = await seedWrite.commit()\n\n const emptyAppend = await storage.beginWrite({ dataset: writeDataset, mode: \"append\" })\n const appendVersion = await emptyAppend.commit()\n\n expect(appendVersion.outcome).toBe(\"unchanged\")\n expect(appendVersion.versionId).toBe(seedVersion.versionId)\n expect(appendVersion.rowCount).toBe(1)\n expect(\n (await storage.listVersions(writeDataset.id)).map((version) => version.versionId)\n ).toEqual([seedVersion.versionId])\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n })\n })\n\n test(\"fails stale optimistic commits\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const seedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await seedWrite.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n const initialVersion = await seedWrite.commit()\n\n const delayedWrite = await storage.beginWrite({ dataset: writeDataset, mode: \"append\" })\n await delayedWrite.writeRows([{ orderId: \"ord_2\", customerName: \"Grace\" }])\n\n const competingWrite = await storage.beginWrite({\n dataset: writeDataset,\n mode: \"append\",\n })\n await competingWrite.writeRows([{ orderId: \"ord_3\", customerName: \"Katherine\" }])\n await competingWrite.commit({ expectedLatestVersionId: initialVersion.versionId })\n\n await expect(\n delayedWrite.commit({ expectedLatestVersionId: initialVersion.versionId })\n ).rejects.toThrow(\"Optimistic commit failed\")\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).resolves.toEqual([\n { orderId: \"ord_1\", customerName: \"Ada\" },\n { orderId: \"ord_3\", customerName: \"Katherine\" },\n ])\n })\n })\n\n test(\"abort closes a write session without committing rows\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n await write.abort()\n await write.abort()\n\n expect(await storage.getLatestVersion(writeDataset.id)).toBeNull()\n expect(await storage.listVersions(writeDataset.id)).toEqual([])\n await expect(\n collectRows(storage.readRows({ datasetId: writeDataset.id }))\n ).rejects.toThrow(\"No committed version found\")\n })\n })\n\n test(\"commit closes a write session and leaves abort idempotent\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n await write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\" }])\n await write.commit()\n await write.abort()\n\n await expect(write.writeRows([])).rejects.toThrow(\"already closed\")\n })\n })\n\n test(\"rejects rows that do not match the dataset schema\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(writeDataset)\n const write = await storage.beginWrite({ dataset: writeDataset, mode: \"snapshot\" })\n\n await expect(write.writeRows([{ orderId: \"ord_1\" }])).rejects.toThrow(\n \"missing required column\"\n )\n await expect(\n write.writeRows([{ orderId: \"ord_1\", customerName: \"Ada\", unexpected: true } as never])\n ).rejects.toThrow(\"unknown column\")\n await write.abort()\n })\n })\n\n test(\"round-trips exact decimal strings in eager and streaming reads\", async () => {\n await withStorage(async (storage) => {\n const exact = \"9007199254740993.123456789\"\n await storage.createDataset(decimalWriteDataset)\n\n const write = await storage.beginWrite({ dataset: decimalWriteDataset, mode: \"snapshot\" })\n await write.writeRows([\n { id: \"amount_1\", amount: exact },\n { id: \"amount_2\", amount: null },\n ])\n await write.commit()\n\n await expect(\n collectRows(storage.readRows({ datasetId: decimalWriteDataset.id }))\n ).resolves.toEqual([\n { id: \"amount_1\", amount: exact },\n { id: \"amount_2\", amount: null },\n ])\n await expect(\n collectRows(\n storage.readRows({\n datasetId: decimalWriteDataset.id,\n columns: [\"amount\"],\n limit: 1,\n })\n )\n ).resolves.toEqual([{ amount: exact }])\n })\n })\n\n test(\"round-trips fileRef row values\", async () => {\n await withStorage(async (storage) => {\n await storage.createDataset(fileRefDataset)\n\n const write = await storage.beginWrite({ dataset: fileRefDataset, mode: \"snapshot\" })\n await write.writeRows([\n { id: \"doc_1\", attachment: invoiceRef },\n { id: \"doc_2\", attachment: null },\n ])\n await write.commit()\n\n await expect(\n collectRows(storage.readRows({ datasetId: fileRefDataset.id }))\n ).resolves.toEqual([\n { id: \"doc_1\", attachment: invoiceRef },\n { id: \"doc_2\", attachment: null },\n ])\n })\n })\n })\n })\n}\n\nasync function collectRows(rows: AsyncIterable<DatasetRow>): Promise<DatasetRow[]> {\n const result: DatasetRow[] = []\n for await (const row of rows) {\n result.push(row)\n }\n return result\n}\n",
24
25
  "import { describe, expect, test } from \"bun:test\"\nimport { commitExactObject, type OntologyContractStorage } from \"./ontology-contract-fixture\"\n\n/** Stable logical failure points exercised by the provider-independent exact-plan fixture. */\nexport type MaterializationFailureBoundary =\n | \"effective.object.upsert\"\n | \"outbox.insert\"\n | \"finalize\"\n\nexport interface MaterializationFailureContractSuiteOptions<\n TStorage extends OntologyContractStorage = OntologyContractStorage,\n TSnapshot = unknown,\n> {\n /** Factory that returns an isolated, transaction-capable storage facade for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional provider setup invoked after the storage facade is created. */\n readonly setup?: (storage: TStorage) => void | Promise<void>\n /** Optional provider cleanup invoked after every test, including failed tests. */\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n /** Captures every provider state that must participate in materialization rollback. */\n readonly captureState: (storage: TStorage) => TSnapshot | Promise<TSnapshot>\n /** Arms one logical write boundary to throw the supplied failure. */\n readonly injectFailure: (\n storage: TStorage,\n boundary: MaterializationFailureBoundary,\n failure: Error\n ) => void | Promise<void>\n /** Clears provider hooks after an injected attempt. */\n readonly clearFailure?: (storage: TStorage) => void | Promise<void>\n /** Providers may omit a boundary only when their test adapter cannot expose it. */\n readonly boundaries?: readonly MaterializationFailureBoundary[]\n}\n\n/**\n * Verifies that failures in the exact-plan write path leave no partial object,\n * commit, or outbox state. The suite is opt-in because production adapters do\n * not need to expose failure injection.\n */\nexport function runMaterializationFailureContractSuite<\n TStorage extends OntologyContractStorage,\n TSnapshot,\n>(label: string, options: MaterializationFailureContractSuiteOptions<TStorage, TSnapshot>): void {\n const boundaries = options.boundaries ?? [\"effective.object.upsert\", \"outbox.insert\", \"finalize\"]\n\n describe(label, () => {\n for (const boundary of boundaries) {\n test(`rolls back the complete transaction when ${boundary} fails`, async () => {\n const storage = await options.createStorage()\n try {\n await options.setup?.(storage)\n const before = await options.captureState(storage)\n const failure = new Error(`contract injected ${boundary}`)\n await options.injectFailure(storage, boundary, failure)\n await expect(commitExactObject(storage, `failure-${boundary}`)).rejects.toThrow(\n failure.message\n )\n await options.clearFailure?.(storage)\n expect(await options.captureState(storage)).toEqual(before)\n } finally {\n await options.clearFailure?.(storage)\n await options.cleanup?.(storage)\n }\n })\n }\n })\n}\n",
25
26
  "import { createEventId } from \"../materialization/identity\"\nimport type {\n MaterializationPlanHeader,\n MaterializationWorkRecord,\n OntologyMaterializationEvent,\n OntologyStorage,\n} from \"../storage/ontology\"\nimport type { Storage } from \"../storage/types\"\n\nexport interface OntologyContractStorage extends Storage {\n readonly ontology: OntologyStorage\n}\n\nconst emptyChunk = {\n overrides: {\n objects: { upserts: [], deletes: [] },\n links: {\n edges: { upserts: [], deletes: [] },\n slots: { upserts: [], deletes: [] },\n },\n },\n effective: {\n objectUpserts: [],\n objectDeletes: [],\n linkUpserts: [],\n linkDeletes: [],\n },\n timeseries: { pointUpserts: [] },\n outbox: [],\n} as const\n\nexport function contractEditHeader(id: string): MaterializationPlanHeader {\n return {\n commit: {\n projectId: \"contract-project\",\n id,\n idempotencyKey: `runtime:${id}`,\n requestHash: `hash:${id}`,\n executionId: `contract-execution:${id}`,\n origin: { kind: \"runtime\", requestId: id },\n ontologyRevision: \"ontology-contract-revision\",\n intent: { kind: \"edit\", mode: \"atomic\", operationCount: 0 },\n committedAt: CONTRACT_COMMITTED_AT,\n },\n expected: {\n sources: [],\n objects: [],\n links: [],\n linkScopes: [],\n points: [],\n },\n }\n}\n\nexport const CONTRACT_COMMITTED_AT = \"2026-01-02T00:00:00.000Z\"\n\nexport function contractEditResult(commitId: string, eventCount = 0) {\n return {\n kind: \"edit\" as const,\n commitId,\n created: true,\n eventCount,\n committedAt: CONTRACT_COMMITTED_AT,\n outcomes: [],\n changes: { objects: [], links: [] },\n }\n}\n\nexport async function commitEmptyEdit(storage: OntologyContractStorage, id: string): Promise<void> {\n await storage.transaction(async (tx) => {\n const header = contractEditHeader(id)\n await ensureContractExecution(tx, header)\n const session = await tx.ontology.materializations.begin(header)\n await tx.ontology.materializations.finalize({\n session,\n finalization: { sourceActivations: [], result: contractEditResult(id) },\n })\n })\n}\n\n/**\n * Applies a provider-authored exact object row and matching outbox row. The\n * fixture contains no ontology merge or diff logic; all semantic decisions are\n * already represented by the exact plan.\n */\nexport async function commitExactObject(\n storage: OntologyContractStorage,\n id: string,\n options: {\n readonly primaryId?: string\n readonly omitFinalize?: boolean\n readonly throwAfterFinalize?: boolean\n } = {}\n): Promise<{ readonly eventId: string }> {\n const header = contractEditHeader(id)\n const ref = { objectTypeId: \"ContractDevice\", primaryId: options.primaryId ?? id }\n const row = {\n ref,\n properties: { name: id },\n version: 1,\n createdAt: header.commit.committedAt,\n updatedAt: header.commit.committedAt,\n lastCommitId: id,\n }\n const exactWrite = { row, expected: { ref, exists: false as const } }\n const draft = {\n schemaVersion: 1 as const,\n projectId: header.commit.projectId,\n occurredAt: header.commit.committedAt,\n correlationId: `contract-correlation:${id}`,\n origin: header.commit.origin,\n commitId: id,\n type: \"object.created\" as const,\n topic: \"objects\" as const,\n partitionKey: `${ref.objectTypeId}:${ref.primaryId}`,\n payload: {\n objectTypeId: ref.objectTypeId,\n primaryId: ref.primaryId,\n properties: row.properties,\n propertyChanges: {},\n },\n }\n const eventId = createEventId(header.commit.projectId, id, 0)\n const envelope: OntologyMaterializationEvent = {\n ...draft,\n id: eventId,\n commitOrdinal: 0,\n }\n const work: readonly MaterializationWorkRecord[] = [\n {\n kind: \"plan\",\n recordKey: `plan:${id}`,\n applyPhase: 4,\n sortKey: \"61\",\n item: { kind: \"object-upsert\", value: exactWrite },\n },\n {\n kind: \"event\",\n recordKey: `event:0:${id}`,\n eventKindRank: 0,\n sortKey: \"61\",\n draft,\n },\n ]\n\n await storage.transaction(async (tx) => {\n await ensureContractExecution(tx, header)\n const materializations = tx.ontology.materializations\n const session = await materializations.begin(header)\n await materializations.stageWork({ session, records: work })\n\n const applyRecords = []\n for await (const page of materializations.streamWork({\n session,\n order: \"apply\",\n pageRows: 1,\n })) {\n applyRecords.push(...page.records)\n }\n const objectUpserts = applyRecords.flatMap((record) =>\n record.kind === \"plan\" && record.item.kind === \"object-upsert\" ? [record.item.value] : []\n )\n await materializations.applyChunk({\n session,\n chunk: {\n ...emptyChunk,\n effective: { ...emptyChunk.effective, objectUpserts },\n },\n })\n\n const eventRecords = []\n for await (const page of materializations.streamWork({\n session,\n order: \"event\",\n pageRows: 1,\n })) {\n eventRecords.push(...page.records)\n }\n await materializations.applyChunk({\n session,\n chunk: {\n ...emptyChunk,\n outbox: eventRecords.map((record) => {\n if (record.kind !== \"event\") throw new Error(\"Expected event work record.\")\n return {\n envelope,\n availableAt: header.commit.committedAt,\n createdAt: header.commit.committedAt,\n }\n }),\n },\n })\n if (!options.omitFinalize) {\n await materializations.finalize({\n session,\n finalization: { sourceActivations: [], result: contractEditResult(id, 1) },\n })\n }\n if (options.throwAfterFinalize) throw new Error(\"contract rollback\")\n })\n\n return { eventId }\n}\n\nexport async function ensureContractExecution(\n storage: Pick<Storage, \"executions\">,\n header: MaterializationPlanHeader\n): Promise<void> {\n if (\n await storage.executions.getById({\n projectId: header.commit.projectId,\n id: header.commit.executionId,\n })\n ) {\n return\n }\n await storage.executions.create({\n id: header.commit.executionId,\n projectId: header.commit.projectId,\n executor: { type: \"request\", requestId: `contract-request:${header.commit.id}` },\n source: { type: \"http\", requestId: `contract-request:${header.commit.id}` },\n correlationId: `contract-correlation:${header.commit.id}`,\n authorizationRef: { type: \"disabled\" },\n })\n}\n",
26
- "import { expect, test } from \"bun:test\"\nimport {\n col,\n type DatasetDefinition,\n defineDataset,\n defineObjectType,\n defineProjection,\n link,\n OntologyRegistry,\n prop,\n type Storage,\n} from \"..\"\nimport type { TrustedPrimitiveRef } from \"../execution\"\nimport { restoreTrustedPrimitiveExecutionScope } from \"../execution/durable\"\nimport { createTestingScope } from \"../execution/scopes\"\nimport type { OntologyMaterializer } from \"../materializer\"\nimport {\n createLinkScopeFingerprint,\n createOntologyMaterializer,\n type OntologyEditOperation,\n ProjectionRegistry,\n type ProjectionSourceEntry,\n} from \"../materializer\"\nimport type { ActionRunStorage, ProjectionRunStorage } from \"../storage\"\nimport { createTestActionExecution, queueTestActionRun } from \"./action-execution\"\nimport { createTestProjectionExecution, startTestProjectionRun } from \"./projection-execution\"\n\nexport interface MaterializerStorageContractProvider<TStorage extends Storage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\ntype ContractStorage = Storage & {\n readonly actionRuns: ActionRunStorage\n readonly projectionRuns: ProjectionRunStorage\n}\n\nconst Device = defineObjectType({\n id: \"StorageContractDevice\",\n name: \"Device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"temperature\", \"double\", { mode: \"telemetry\" }),\n ],\n links: [link.self(\"parent\", { cardinality: \"one\" }), link.self(\"peers\", { cardinality: \"many\" })],\n})\n\nconst devices = defineDataset(\"storage_contract_devices\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"name\", \"string\"),\n col(\"parent_id\", \"string\", { nullable: true }),\n ],\n})\nconst readings = defineDataset(\"storage_contract_readings\", {\n schema: [col(\"device_id\", \"string\"), col(\"at\", \"timestamp\"), col(\"value\", \"float64\")],\n})\nconst devicePeers = defineDataset(\"storage_contract_device_peers\", {\n schema: [col(\"source_id\", \"string\"), col(\"target_id\", \"string\")],\n})\nconst ConflictDevice = defineObjectType({\n id: \"StorageContractConflictDevice\",\n name: \"Conflict device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"state\", \"string\", { required: true }),\n ],\n})\nconst conflictDevices = defineDataset(\"storage_contract_conflict_devices\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"name\", \"string\"),\n col(\"state\", \"string\"),\n col(\"updated_at\", \"timestamp\"),\n ],\n})\nconst deviceProjection = defineProjection(\"storage_contract_devices\", Device)\n .fromDataset(devices)\n .properties({ id: \"id\", name: \"name\" })\n .withLinks({\n parent: {\n link: Device.l.parent,\n sourceField: \"parent_id\",\n target: Device,\n },\n })\nconst temperatureProjection = defineProjection(\n \"storage_contract_temperatures\",\n Device.p.temperature\n)\n .fromDataset(readings)\n .points({ objectId: \"device_id\", at: \"at\", value: \"value\" })\nconst devicePeersProjection = defineProjection(\"storage_contract_device_peers\", Device.l.peers)\n .fromDataset(devicePeers)\n .sourceField(\"source_id\")\n .targetField(\"target_id\")\nconst conflictDeviceProjection = defineProjection(\n \"storage_contract_conflict_devices\",\n ConflictDevice\n)\n .fromDataset(conflictDevices)\n .properties({ id: \"id\", name: \"name\", state: \"state\" })\n .resolveConflicts({ strategy: \"mostRecent\", sourceTimestamp: \"updated_at\" })\n\nconst ontology = new OntologyRegistry({ sources: [Device, ConflictDevice] })\nconst projections = new ProjectionRegistry({\n projections: [\n deviceProjection,\n temperatureProjection,\n devicePeersProjection,\n conflictDeviceProjection,\n ],\n ontology,\n datasetsById: new Map<string, DatasetDefinition>([\n [devices.id, devices],\n [readings.id, readings],\n [devicePeers.id, devicePeers],\n [conflictDevices.id, conflictDevices],\n ]),\n})\n\nexport function runMaterializerStorageContractSuite<TStorage extends Storage>(\n name: string,\n provider: MaterializerStorageContractProvider<TStorage>\n): void {\n test(`${name} persists replacement, Action, and telemetry commits atomically`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => new Date(\"2026-02-01T12:00:00.000Z\"),\n materializationId: () => `storage-contract-candidate-${++materializationOrdinal}`,\n },\n })\n try {\n const firstVersion = {\n datasetId: devices.id,\n versionId: \"v1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n }\n const firstExecution = await claim(storage, {\n runId: \"replacement-v1\",\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion: firstVersion,\n })\n const firstMaterializer = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n \"replacement-v1\"\n )\n const first = await firstMaterializer.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion: firstVersion,\n execution: firstExecution,\n entries: entries([sourceEntry(\"one\", \"One\", \"two\"), sourceEntry(\"two\", \"Two\")]),\n })\n expect(first.counts).toMatchObject({ objectsCreated: 2, linksCreated: 1 })\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n primaryId: \"one\",\n })\n ).toMatchObject({ properties: { id: \"one\", name: \"One\" }, lastCommitId: first.commitId })\n\n const secondVersion = {\n datasetId: devices.id,\n versionId: \"v2\",\n createdAt: \"2026-01-02T00:00:00.000Z\",\n }\n const secondExecution = await claim(storage, {\n runId: \"replacement-v2\",\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion: secondVersion,\n })\n const secondMaterializer = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n \"replacement-v2\"\n )\n const second = await secondMaterializer.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion: secondVersion,\n execution: secondExecution,\n entries: entries([sourceEntry(\"one\", \"One updated\")]),\n })\n expect(second.counts).toMatchObject({\n objectsUpdated: 1,\n objectsDeleted: 1,\n linksDeleted: 1,\n })\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n primaryId: \"two\",\n })\n ).toBeNull()\n\n await createTestActionExecution(storage.executions, {\n projectId: \"materializer-storage-contract\",\n actionId: \"renameDevice\",\n runId: \"missing-action-run\",\n })\n const missingActionMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"action\",\n id: \"renameDevice\",\n runId: \"missing-action-run\",\n })\n await expect(\n missingActionMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: \"renameDevice\", runId: \"missing-action-run\" },\n operations: [\n {\n id: \"missing-run-rename\",\n kind: \"object.patch\",\n ref: { objectTypeId: Device.id, primaryId: \"one\" },\n set: { name: \"Must not persist\" },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n ).rejects.toThrow(\"missing-action-run\")\n\n await queueTestActionRun(storage, {\n id: \"action-run\",\n projectId: \"materializer-storage-contract\",\n actionId: \"renameDevice\",\n subject: { kind: \"object\", objectTypeId: Device.id, primaryId: \"one\" },\n params: {},\n idempotencyKey: \"action-run\",\n })\n await storage.actionRuns.start({\n id: \"action-run\",\n projectId: \"materializer-storage-contract\",\n })\n const actionMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"action\",\n id: \"renameDevice\",\n runId: \"action-run\",\n })\n const actionCommit = await actionMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: \"renameDevice\", runId: \"action-run\" },\n operations: [\n {\n id: \"rename\",\n kind: \"object.patch\",\n ref: { objectTypeId: Device.id, primaryId: \"one\" },\n set: { name: \"Managed name\" },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"materializer-storage-contract\",\n origin: { kind: \"action\", actionRunId: \"action-run\" },\n })\n ).toMatchObject({ id: actionCommit.commitId })\n\n const telemetryVersion = {\n datasetId: readings.id,\n versionId: \"readings-v1\",\n createdAt: \"2026-01-03T00:00:00.000Z\",\n }\n await createTestProjectionExecution(storage.executions, {\n projectId: \"materializer-storage-contract\",\n projectionId: temperatureProjection.id,\n runId: \"missing-telemetry-run\",\n datasetId: readings.id,\n datasetVersionId: \"missing-readings-run\",\n })\n const missingTelemetryMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"projection\",\n id: temperatureProjection.id,\n runId: \"missing-telemetry-run\",\n })\n await expect(\n missingTelemetryMaterializer.telemetry.append({\n source: {\n kind: \"projection\",\n projection: { projectionId: temperatureProjection.id },\n datasetVersion: {\n datasetId: readings.id,\n versionId: \"missing-readings-run\",\n createdAt: \"2026-01-02T12:00:00.000Z\",\n },\n execution: {\n projectionRunId: \"missing-telemetry-run\",\n executionToken: \"missing-execution-token\",\n },\n batchOrdinal: 0,\n sourceRowCount: 1,\n sourceRowsSkipped: 0,\n inputExhausted: true,\n },\n points: [\n {\n series: {\n object: { objectTypeId: Device.id, primaryId: \"one\" },\n propertyId: \"temperature\",\n },\n value: 20,\n at: \"2026-01-02T13:00:00.000Z\",\n },\n ],\n })\n ).rejects.toThrow(\"missing-telemetry-run\")\n\n const telemetryExecution = await claim(storage, {\n runId: \"telemetry-v1\",\n projectionId: temperatureProjection.id,\n protocol: \"telemetry\",\n datasetVersion: telemetryVersion,\n fixedBatchSize: 1,\n })\n const telemetryMaterializer = await projectionMaterializer(\n materializer,\n storage,\n temperatureProjection.id,\n \"telemetry-v1\"\n )\n const telemetry = await telemetryMaterializer.telemetry.append({\n source: {\n kind: \"projection\",\n projection: { projectionId: temperatureProjection.id },\n datasetVersion: telemetryVersion,\n execution: telemetryExecution,\n batchOrdinal: 0,\n sourceRowCount: 1,\n sourceRowsSkipped: 0,\n inputExhausted: true,\n },\n points: [\n {\n series: {\n object: { objectTypeId: Device.id, primaryId: \"one\" },\n propertyId: \"temperature\",\n },\n value: 21.5,\n at: \"2026-01-03T01:00:00.000Z\",\n },\n ],\n })\n expect(telemetry).toMatchObject({ pointsCreated: 1, latestObjectsChanged: 1 })\n expect(\n await storage.timeseries.getLatest({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n objectId: \"one\",\n propertyId: \"temperature\",\n })\n ).toMatchObject({ value: 21.5, lastCommitId: telemetry.commitId })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} persists per-property Action edit times`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n let now = new Date(\"2026-02-01T00:00:10.000Z\")\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => now,\n materializationId: () => `conflict-contract-candidate-${++materializationOrdinal}`,\n },\n })\n const runtimeMaterializer = materializer.withScope(runtimeScope())\n const ref = { objectTypeId: ConflictDevice.id, primaryId: \"one\" }\n const replace = async (\n versionId: string,\n sourceUpdatedAt: string,\n name: string,\n state: string\n ) => {\n const datasetVersion = {\n datasetId: conflictDevices.id,\n versionId,\n createdAt: sourceUpdatedAt,\n }\n const execution = await claim(storage, {\n runId: `conflict-${versionId}`,\n projectionId: conflictDeviceProjection.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const projectionMaterializerForRun = await projectionMaterializer(\n materializer,\n storage,\n conflictDeviceProjection.id,\n `conflict-${versionId}`\n )\n await projectionMaterializerForRun.projections.replace({\n source: { projectionId: conflictDeviceProjection.id },\n datasetVersion,\n execution,\n entries: entries([\n {\n root: { kind: \"object\", ref },\n assertions: [{ kind: \"object\", ref, properties: { name, state }, sourceUpdatedAt }],\n },\n ]),\n })\n }\n const edit = (requestId: string, propertyId: \"name\" | \"state\", value: string) =>\n runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId },\n operations: [\n {\n id: requestId,\n kind: \"object.patch\",\n ref,\n set: { [propertyId]: value },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n\n try {\n await replace(\"v1\", \"2026-02-01T00:00:10.000Z\", \"Source A\", \"source-open\")\n\n now = new Date(\"2026-02-01T00:00:11.000Z\")\n await edit(\"conflict-name\", \"name\", \"Action B\")\n now = new Date(\"2026-02-01T00:00:13.000Z\")\n await edit(\"conflict-state\", \"state\", \"action-closed\")\n\n await replace(\"v2\", \"2026-02-01T00:00:12.000Z\", \"Source C\", \"source-changed\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: ConflictDevice.id,\n primaryId: \"one\",\n })\n ).toMatchObject({ properties: { id: \"one\", name: \"Source C\", state: \"action-closed\" } })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} persists cardinality-one edit authority by scope`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => new Date(\"2026-02-01T12:00:00.000Z\"),\n materializationId: () => `scope-contract-candidate-${++materializationOrdinal}`,\n },\n })\n const runtimeMaterializer = materializer.withScope(runtimeScope())\n const linkRef = (targetId: string) => ({\n source: { objectTypeId: Device.id, primaryId: \"document\" },\n linkId: \"parent\",\n target: { objectTypeId: Device.id, primaryId: targetId },\n })\n const replace = async (versionId: string, parentId: string) => {\n const datasetVersion = {\n datasetId: devices.id,\n versionId,\n createdAt: `2026-01-0${versionId.slice(1)}T00:00:00.000Z`,\n }\n const execution = await claim(storage, {\n runId: `scope-${versionId}`,\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const projectionMaterializerForRun = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n `scope-${versionId}`\n )\n await projectionMaterializerForRun.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion,\n execution,\n entries: entries([\n sourceEntry(\"document\", \"Document\", parentId),\n sourceEntry(\"rockland\", \"Rockland\"),\n sourceEntry(\"haverstraw\", \"Haverstraw\"),\n ]),\n })\n }\n const edit = (requestId: string, operation: OntologyEditOperation) =>\n runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId },\n operations: [operation],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n const targets = async () =>\n (\n await storage.objects.listLinks({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n objectId: \"document\",\n })\n ).map((row) => row.targetId)\n\n try {\n await replace(\"v1\", \"rockland\")\n await edit(\"scope-set\", {\n id: \"set\",\n kind: \"link.upsert\",\n ref: linkRef(\"rockland\"),\n })\n\n await replace(\"v2\", \"haverstraw\")\n expect(await targets()).toEqual([\"rockland\"])\n\n await edit(\"scope-reset\", {\n id: \"reset\",\n kind: \"link.reset\",\n ref: linkRef(\"rockland\"),\n })\n expect(await targets()).toEqual([\"haverstraw\"])\n\n await edit(\"scope-clear\", {\n id: \"clear\",\n kind: \"link.delete\",\n ref: linkRef(\"haverstraw\"),\n })\n await replace(\"v3\", \"rockland\")\n expect(await targets()).toEqual([])\n\n await edit(\"scope-clear-reset\", {\n id: \"reset\",\n kind: \"link.reset\",\n ref: linkRef(\"haverstraw\"),\n })\n expect(await targets()).toEqual([\"rockland\"])\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} fences projected cardinality-many link scopes by fingerprint`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => new Date(\"2026-02-01T12:00:00.000Z\"),\n materializationId: () => `many-scope-contract-candidate-${++materializationOrdinal}`,\n },\n })\n const runtimeMaterializer = materializer.withScope(runtimeScope())\n const source = { objectTypeId: Device.id, primaryId: \"source\" }\n const peer = (primaryId: string) => ({ objectTypeId: Device.id, primaryId })\n const linkRef = (targetId: string) => ({\n source,\n linkId: \"peers\",\n target: peer(targetId),\n })\n\n try {\n await runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId: \"many-scope-endpoints\" },\n operations: [\"source\", \"peer-a\", \"peer-b\", \"peer-c\"].map((primaryId) => ({\n id: `create-${primaryId}`,\n kind: \"object.create\" as const,\n ref: peer(primaryId),\n properties: { name: primaryId },\n })),\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n\n const datasetVersion = {\n datasetId: devicePeers.id,\n versionId: \"many-links-v1\",\n createdAt: \"2026-02-01T00:00:00.000Z\",\n }\n const execution = await claim(storage, {\n runId: \"many-links-v1\",\n projectionId: devicePeersProjection.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const projectedLinks = [linkRef(\"peer-a\"), linkRef(\"peer-b\")]\n await (\n await projectionMaterializer(\n materializer,\n storage,\n devicePeersProjection.id,\n \"many-links-v1\"\n )\n ).projections.replace({\n source: { projectionId: devicePeersProjection.id },\n datasetVersion,\n execution,\n entries: entries(\n projectedLinks.map((ref) => ({\n root: { kind: \"link\", ref },\n assertions: [{ kind: \"link\", ref }],\n }))\n ),\n })\n\n const observedLinks = await storage.objects.listLinks({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n objectId: source.primaryId,\n linkId: \"peers\",\n })\n const fingerprint = createLinkScopeFingerprint(\n observedLinks.map((row) => {\n if (row.lastCommitId === undefined) {\n throw new Error(\"Projected contract link is missing materializer provenance.\")\n }\n return {\n ref: linkRef(row.targetId),\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n lastCommitId: row.lastCommitId,\n }\n })\n )\n const commitObservation = async (runId: string, name: string) => {\n await queueTestActionRun(storage, {\n id: runId,\n projectId: \"materializer-storage-contract\",\n actionId: \"observePeers\",\n subject: { kind: \"object\", objectTypeId: Device.id, primaryId: source.primaryId },\n params: {},\n idempotencyKey: runId,\n })\n await storage.actionRuns.start({ id: runId, projectId: \"materializer-storage-contract\" })\n const actionMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"action\",\n id: \"observePeers\",\n runId,\n })\n return actionMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: \"observePeers\", runId },\n operations: [\n {\n id: `record-${runId}`,\n kind: \"object.patch\",\n ref: source,\n set: { name },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [{ source, linkId: \"peers\", fingerprint }],\n })\n }\n\n // Regression guard for G-021: make begin() hydrate the expected scope through the\n // cardinality-one slot reader again and this otherwise unrelated Action commit fails before\n // its already-stable fingerprint can be compared.\n await expect(commitObservation(\"many-scope-action\", \"observed peers\")).resolves.toMatchObject(\n { kind: \"edit\", created: true }\n )\n\n await runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId: \"many-scope-change\" },\n operations: [{ id: \"add-peer\", kind: \"link.upsert\", ref: linkRef(\"peer-c\") }],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n\n await expect(commitObservation(\"stale-many-scope-action\", \"must not commit\")).rejects.toThrow(\n \"Expected link scope changed\"\n )\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n primaryId: source.primaryId,\n })\n ).toMatchObject({ properties: { name: \"observed peers\" } })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n}\n\nfunction runtimeScope() {\n return createTestingScope({\n projectId: \"materializer-storage-contract\",\n executionId: \"materializer-storage-contract-runtime-execution\",\n requestId: \"materializer-storage-contract-runtime-request\",\n correlationId: \"materializer-storage-contract-runtime-correlation\",\n })\n}\n\nasync function projectionMaterializer(\n materializer: OntologyMaterializer,\n storage: ContractStorage,\n projectionId: string,\n runId: string\n) {\n return primitiveMaterializer(materializer, storage, {\n kind: \"projection\",\n id: projectionId,\n runId,\n })\n}\n\nasync function primitiveMaterializer(\n materializer: OntologyMaterializer,\n storage: ContractStorage,\n primitive: TrustedPrimitiveRef\n) {\n const run =\n primitive.kind === \"action\"\n ? await storage.actionRuns.getById({\n projectId: \"materializer-storage-contract\",\n id: primitive.runId,\n })\n : await storage.projectionRuns.getById({\n projectId: \"materializer-storage-contract\",\n id: primitive.runId,\n })\n const executionId = run?.executionId ?? `test_${primitive.kind}_execution:${primitive.runId}`\n const execution = await storage.executions.getById({\n projectId: \"materializer-storage-contract\",\n id: executionId,\n })\n if (!execution) throw new Error(`Test execution '${executionId}' is missing.`)\n return materializer.withScope(restoreTrustedPrimitiveExecutionScope({ execution, primitive }))\n}\n\nfunction requireContractStorage(storage: Storage): ContractStorage {\n if (!storage.actionRuns) {\n throw new Error(\"[Sixb] Materializer storage contract requires Action materialization runs.\")\n }\n if (!storage.projectionRuns) {\n throw new Error(\n \"[Sixb] Materializer storage contract requires projection materialization runs.\"\n )\n }\n return storage as ContractStorage\n}\n\nfunction sourceEntry(id: string, name: string, parentId?: string): ProjectionSourceEntry {\n const ref = { objectTypeId: Device.id, primaryId: id }\n return {\n root: { kind: \"object\", ref },\n assertions: [\n { kind: \"object\", ref, properties: { name } },\n ...(parentId\n ? [\n {\n kind: \"link\" as const,\n ref: {\n source: ref,\n linkId: \"parent\",\n target: { objectTypeId: Device.id, primaryId: parentId },\n },\n },\n ]\n : []),\n ],\n }\n}\n\nasync function* entries(values: readonly ProjectionSourceEntry[]) {\n for (const value of values) yield value\n}\n\nasync function claim(\n storage: ContractStorage,\n input: {\n readonly runId: string\n readonly projectionId: string\n readonly protocol: \"replacement\" | \"telemetry\"\n readonly datasetVersion: {\n readonly datasetId: string\n readonly versionId: string\n readonly createdAt: string\n }\n readonly fixedBatchSize?: number\n }\n) {\n const resolved =\n input.protocol === \"replacement\"\n ? projections.resolveSource(input.projectionId)\n : projections.resolveTelemetry(input.projectionId)\n const definition = resolved.definition\n const identityBase = {\n projectionId: input.projectionId,\n datasetVersion: input.datasetVersion,\n ontologyRevision: projections.ontologyRevision,\n projectionRevision: resolved.projectionRevision,\n ownershipHash: resolved.ownershipHash,\n }\n const common = {\n id: input.runId,\n projectId: \"materializer-storage-contract\",\n } as const\n\n if (definition._tag === \"TelemetryProjectionDefinition\") {\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"telemetry\", protocol: \"telemetry\" },\n target: { objectTypeId: definition.objectTypeId },\n fixedBatchSize: input.fixedBatchSize ?? 1,\n })\n return claim.execution\n }\n\n if (definition._tag === \"LinkProjectionDefinition\") {\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"link\", protocol: \"replacement\" },\n target: {\n sourceObjectTypeId: definition.sourceObjectTypeId,\n targetObjectTypeId: definition.targetObjectTypeId,\n },\n })\n return claim.execution\n }\n\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"object\", protocol: \"replacement\" },\n target: { objectTypeId: definition.objectTypeId },\n })\n return claim.execution\n}\n",
27
+ "import { expect, test } from \"bun:test\"\nimport {\n col,\n type DatasetDefinition,\n defineDataset,\n defineObjectType,\n defineProjection,\n link,\n OntologyRegistry,\n prop,\n type Storage,\n} from \"..\"\nimport type { TrustedPrimitiveRef } from \"../execution\"\nimport { restoreTrustedPrimitiveExecutionScope } from \"../execution/durable\"\nimport { createTestingScope } from \"../execution/scopes\"\nimport type { OntologyMaterializer } from \"../materializer\"\nimport {\n createLinkScopeFingerprint,\n createOntologyMaterializer,\n type OntologyEditOperation,\n ProjectionRegistry,\n type ProjectionSourceBase,\n type ProjectionSourceDeletion,\n type ProjectionSourceEntry,\n} from \"../materializer\"\nimport type { ActionRunStorage, ProjectionRunStorage } from \"../storage\"\nimport { createTestActionExecution, queueTestActionRun } from \"./action-execution\"\nimport { createTestProjectionExecution, startTestProjectionRun } from \"./projection-execution\"\n\nexport interface MaterializerStorageContractProvider<TStorage extends Storage> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\ntype ContractStorage = Storage & {\n readonly actionRuns: ActionRunStorage\n readonly projectionRuns: ProjectionRunStorage\n}\n\nconst Device = defineObjectType({\n id: \"StorageContractDevice\",\n name: \"Device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"temperature\", \"double\", { mode: \"telemetry\" }),\n ],\n links: [link.self(\"parent\", { cardinality: \"one\" }), link.self(\"peers\", { cardinality: \"many\" })],\n})\n\nconst devices = defineDataset(\"storage_contract_devices\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"name\", \"string\"),\n col(\"parent_id\", \"string\", { nullable: true }),\n ],\n})\nconst readings = defineDataset(\"storage_contract_readings\", {\n schema: [col(\"device_id\", \"string\"), col(\"at\", \"timestamp\"), col(\"value\", \"float64\")],\n})\nconst devicePeers = defineDataset(\"storage_contract_device_peers\", {\n schema: [col(\"source_id\", \"string\"), col(\"target_id\", \"string\")],\n})\nconst ConflictDevice = defineObjectType({\n id: \"StorageContractConflictDevice\",\n name: \"Conflict device\",\n properties: [\n prop(\"id\", \"string\", { primary: true, required: true }),\n prop(\"name\", \"string\", { required: true }),\n prop(\"state\", \"string\", { required: true }),\n ],\n})\nconst conflictDevices = defineDataset(\"storage_contract_conflict_devices\", {\n schema: [\n col(\"id\", \"string\"),\n col(\"name\", \"string\"),\n col(\"state\", \"string\"),\n col(\"updated_at\", \"timestamp\"),\n ],\n})\nconst deviceProjection = defineProjection(\"storage_contract_devices\", Device)\n .fromDataset(devices)\n .properties({ id: \"id\", name: \"name\" })\n .withLinks({\n parent: {\n link: Device.l.parent,\n sourceField: \"parent_id\",\n target: Device,\n },\n })\nconst temperatureProjection = defineProjection(\n \"storage_contract_temperatures\",\n Device.p.temperature\n)\n .fromDataset(readings)\n .points({ objectId: \"device_id\", at: \"at\", value: \"value\" })\nconst devicePeersProjection = defineProjection(\"storage_contract_device_peers\", Device.l.peers)\n .fromDataset(devicePeers)\n .sourceField(\"source_id\")\n .targetField(\"target_id\")\nconst conflictDeviceProjection = defineProjection(\n \"storage_contract_conflict_devices\",\n ConflictDevice\n)\n .fromDataset(conflictDevices)\n .properties({ id: \"id\", name: \"name\", state: \"state\" })\n .resolveConflicts({ strategy: \"mostRecent\", sourceTimestamp: \"updated_at\" })\n\nconst ontology = new OntologyRegistry({ sources: [Device, ConflictDevice] })\nconst projections = new ProjectionRegistry({\n projections: [\n deviceProjection,\n temperatureProjection,\n devicePeersProjection,\n conflictDeviceProjection,\n ],\n ontology,\n datasetsById: new Map<string, DatasetDefinition>([\n [devices.id, devices],\n [readings.id, readings],\n [devicePeers.id, devicePeers],\n [conflictDevices.id, conflictDevices],\n ]),\n})\n\nexport function runMaterializerStorageContractSuite<TStorage extends Storage>(\n name: string,\n provider: MaterializerStorageContractProvider<TStorage>\n): void {\n // Regression: replacing previousSourceRows with only the latest manifest loses \"a\" at v3.\n // Removing root retirement checks from cleanup deletes \"a\" when v1 becomes terminal.\n test(`${name} retains current roots across deltas, cleanup, overrides and full replacement`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let ordinal = 0\n const projectId = \"materializer-storage-contract\"\n const source = { projectionId: devices.id }\n const materializer = createOntologyMaterializer({\n projectId,\n ontology,\n projections,\n storage,\n dependencies: { batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 } },\n })\n const active = async (): Promise<ProjectionSourceBase> => {\n const current = await materializer.projections.getActive(source)\n if (!current?.lastCommitId) throw new Error(\"Missing source head\")\n return { materializationId: current.materializationId, lastCommitId: current.lastCommitId }\n }\n const replace = async (\n values: readonly (ProjectionSourceEntry | ProjectionSourceDeletion)[],\n base?: ProjectionSourceBase,\n interleave?: { readonly version: number; readonly beforeSeal?: () => Promise<void> }\n ) => {\n const version = interleave?.version ?? ++ordinal\n const datasetVersion = {\n datasetId: devices.id,\n versionId: `delta-v${version}`,\n createdAt: `2026-01-${String(version).padStart(2, \"0\")}T00:00:00.000Z`,\n }\n const execution = await claim(storage, {\n runId: `delta-run-${version}`,\n projectionId: devices.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const bound = await projectionMaterializer(\n materializer,\n storage,\n devices.id,\n execution.projectionRunId\n )\n return bound.projections.replace({\n source,\n datasetVersion,\n execution,\n entries: (async function* () {\n yield* entries(values)\n await interleave?.beforeSeal?.()\n })(),\n ...(base ? { base } : {}),\n })\n }\n const ref = (primaryId: string) => ({ objectTypeId: Device.id, primaryId })\n const object = (id: string) => storage.objects.getByPrimaryId({ projectId, ...ref(id) })\n const remove = (id: string): ProjectionSourceDeletion => ({\n root: { kind: \"object\", ref: ref(id) },\n deleted: true,\n })\n try {\n await replace([sourceEntry(\"a\", \"A\"), sourceEntry(\"b\", \"B\", \"a\"), sourceEntry(\"c\", \"C\")])\n const stale = await active()\n const initialA = await object(\"a\")\n const initialB = await object(\"b\")\n const transact = storage.transaction.bind(storage)\n // Fail after finalize has moved the source pointers, written the commit and its outbox.\n // Removing the enclosing transaction rollback must fail these head/value assertions.\n storage.transaction = (run, options) =>\n transact(async (tx) => {\n const materializations = new Proxy(tx.ontology.materializations, {\n get(target, key) {\n if (key !== \"finalize\") return Reflect.get(target, key)\n return async (input: Parameters<typeof target.finalize>[0]) => {\n await target.finalize(input)\n throw new Error(\"injected after source activation\")\n }\n },\n })\n const ontology = new Proxy(tx.ontology, {\n get(target, key) {\n return key === \"materializations\" ? materializations : Reflect.get(target, key)\n },\n })\n return run(\n new Proxy(tx, {\n get(target, key) {\n return key === \"ontology\" ? ontology : Reflect.get(target, key)\n },\n })\n )\n }, options)\n try {\n await expect(replace([remove(\"a\"), sourceEntry(\"b\", \"Failed B\")], stale)).rejects.toThrow(\n \"injected after source activation\"\n )\n } finally {\n storage.transaction = transact\n }\n expect(await active()).toEqual(stale)\n expect(await object(\"a\")).toEqual(initialA)\n expect(await object(\"b\")).toEqual(initialB)\n await replace([sourceEntry(\"b\", \"B2\", \"c\")], await active())\n await replace([sourceEntry(\"c\", \"C2\")], await active())\n expect(await object(\"a\")).toEqual(initialA)\n expect(await object(\"b\")).toMatchObject({ properties: { name: \"B2\" } })\n for (let pass = 0; pass < 20; pass++) {\n const result = await storage.ontology.sources.cleanupTerminal({\n projectId,\n terminalBefore: \"2100-01-01T00:00:00.000Z\",\n limit: 2,\n })\n if (result.rowsDeleted + result.materializationsDeleted === 0) break\n }\n const scoped = materializer.withScope(runtimeScope())\n const edit = (operations: readonly OntologyEditOperation[]) =>\n scoped.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId: `delta-edit-${++ordinal}` },\n operations,\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n await edit([\n { id: \"edit-a\", kind: \"object.upsert\", ref: ref(\"a\"), properties: { name: \"Edited A\" } },\n ])\n await edit([\n { id: \"reset-a\", kind: \"object.patch\", ref: ref(\"a\"), set: {}, unset: [], reset: [\"name\"] },\n ])\n expect(await object(\"a\")).toMatchObject({ properties: { name: \"A\" } })\n await replace([], await active())\n expect(await object(\"a\")).toMatchObject({ properties: { name: \"A\" } })\n await expect(replace([remove(\"a\")], stale)).rejects.toMatchObject({\n kind: \"source-materialization\",\n })\n expect(await object(\"a\")).not.toBeNull()\n await replace([remove(\"a\")], await active())\n expect(await object(\"a\")).toBeNull()\n expect(await object(\"b\")).toMatchObject({ properties: { name: \"B2\" } })\n await replace([sourceEntry(\"b\", \"B3\")])\n expect(await object(\"b\")).toMatchObject({ properties: { name: \"B3\" } })\n expect(await object(\"c\")).toBeNull()\n await replace([], await active())\n expect(await object(\"b\")).toMatchObject({ properties: { name: \"B3\" } })\n await replace([])\n expect(await object(\"b\")).toBeNull()\n\n // A different run commits after base validation but before this candidate is sealed.\n // Only checking the base before reading the delta would allow a stale publication here.\n const base = await active()\n const earlier = ++ordinal\n const later = ++ordinal\n await expect(\n replace([sourceEntry(\"a\", \"Stale delta\")], base, {\n version: later,\n beforeSeal: async () => {\n await replace([sourceEntry(\"a\", \"Concurrent value\")], base, { version: earlier })\n },\n })\n ).rejects.toMatchObject({ kind: \"source-materialization\" })\n expect(await object(\"a\")).toMatchObject({ properties: { name: \"Concurrent value\" } })\n await replace([sourceEntry(\"a\", \"Fresh delta\")], await active())\n expect(await object(\"a\")).toMatchObject({ properties: { name: \"Fresh delta\" } })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} persists replacement, Action, and telemetry commits atomically`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => new Date(\"2026-02-01T12:00:00.000Z\"),\n materializationId: () => `storage-contract-candidate-${++materializationOrdinal}`,\n },\n })\n try {\n const firstVersion = {\n datasetId: devices.id,\n versionId: \"v1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n }\n const firstExecution = await claim(storage, {\n runId: \"replacement-v1\",\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion: firstVersion,\n })\n const firstMaterializer = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n \"replacement-v1\"\n )\n const first = await firstMaterializer.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion: firstVersion,\n execution: firstExecution,\n entries: entries([sourceEntry(\"one\", \"One\", \"two\"), sourceEntry(\"two\", \"Two\")]),\n })\n expect(first.counts).toMatchObject({ objectsCreated: 2, linksCreated: 1 })\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n primaryId: \"one\",\n })\n ).toMatchObject({ properties: { id: \"one\", name: \"One\" }, lastCommitId: first.commitId })\n\n const secondVersion = {\n datasetId: devices.id,\n versionId: \"v2\",\n createdAt: \"2026-01-02T00:00:00.000Z\",\n }\n const secondExecution = await claim(storage, {\n runId: \"replacement-v2\",\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion: secondVersion,\n })\n const secondMaterializer = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n \"replacement-v2\"\n )\n const second = await secondMaterializer.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion: secondVersion,\n execution: secondExecution,\n entries: entries([sourceEntry(\"one\", \"One updated\")]),\n })\n expect(second.counts).toMatchObject({\n objectsUpdated: 1,\n objectsDeleted: 1,\n linksDeleted: 1,\n })\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n primaryId: \"two\",\n })\n ).toBeNull()\n\n await createTestActionExecution(storage.executions, {\n projectId: \"materializer-storage-contract\",\n actionId: \"renameDevice\",\n runId: \"missing-action-run\",\n })\n const missingActionMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"action\",\n id: \"renameDevice\",\n runId: \"missing-action-run\",\n })\n await expect(\n missingActionMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: \"renameDevice\", runId: \"missing-action-run\" },\n operations: [\n {\n id: \"missing-run-rename\",\n kind: \"object.patch\",\n ref: { objectTypeId: Device.id, primaryId: \"one\" },\n set: { name: \"Must not persist\" },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n ).rejects.toThrow(\"missing-action-run\")\n\n await queueTestActionRun(storage, {\n id: \"action-run\",\n projectId: \"materializer-storage-contract\",\n actionId: \"renameDevice\",\n subject: { kind: \"object\", objectTypeId: Device.id, primaryId: \"one\" },\n params: {},\n idempotencyKey: \"action-run\",\n })\n await storage.actionRuns.start({\n id: \"action-run\",\n projectId: \"materializer-storage-contract\",\n })\n const actionMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"action\",\n id: \"renameDevice\",\n runId: \"action-run\",\n })\n const actionCommit = await actionMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: \"renameDevice\", runId: \"action-run\" },\n operations: [\n {\n id: \"rename\",\n kind: \"object.patch\",\n ref: { objectTypeId: Device.id, primaryId: \"one\" },\n set: { name: \"Managed name\" },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"materializer-storage-contract\",\n origin: { kind: \"action\", actionRunId: \"action-run\" },\n })\n ).toMatchObject({ id: actionCommit.commitId })\n\n const telemetryVersion = {\n datasetId: readings.id,\n versionId: \"readings-v1\",\n createdAt: \"2026-01-03T00:00:00.000Z\",\n }\n await createTestProjectionExecution(storage.executions, {\n projectId: \"materializer-storage-contract\",\n projectionId: temperatureProjection.id,\n runId: \"missing-telemetry-run\",\n datasetId: readings.id,\n datasetVersionId: \"missing-readings-run\",\n })\n const missingTelemetryMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"projection\",\n id: temperatureProjection.id,\n runId: \"missing-telemetry-run\",\n })\n await expect(\n missingTelemetryMaterializer.telemetry.append({\n source: {\n kind: \"projection\",\n projection: { projectionId: temperatureProjection.id },\n datasetVersion: {\n datasetId: readings.id,\n versionId: \"missing-readings-run\",\n createdAt: \"2026-01-02T12:00:00.000Z\",\n },\n execution: {\n projectionRunId: \"missing-telemetry-run\",\n executionToken: \"missing-execution-token\",\n },\n batchOrdinal: 0,\n sourceRowCount: 1,\n sourceRowsSkipped: 0,\n inputExhausted: true,\n },\n points: [\n {\n series: {\n object: { objectTypeId: Device.id, primaryId: \"one\" },\n propertyId: \"temperature\",\n },\n value: 20,\n at: \"2026-01-02T13:00:00.000Z\",\n },\n ],\n })\n ).rejects.toThrow(\"missing-telemetry-run\")\n\n const telemetryExecution = await claim(storage, {\n runId: \"telemetry-v1\",\n projectionId: temperatureProjection.id,\n protocol: \"telemetry\",\n datasetVersion: telemetryVersion,\n fixedBatchSize: 1,\n })\n const telemetryMaterializer = await projectionMaterializer(\n materializer,\n storage,\n temperatureProjection.id,\n \"telemetry-v1\"\n )\n const telemetry = await telemetryMaterializer.telemetry.append({\n source: {\n kind: \"projection\",\n projection: { projectionId: temperatureProjection.id },\n datasetVersion: telemetryVersion,\n execution: telemetryExecution,\n batchOrdinal: 0,\n sourceRowCount: 1,\n sourceRowsSkipped: 0,\n inputExhausted: true,\n },\n points: [\n {\n series: {\n object: { objectTypeId: Device.id, primaryId: \"one\" },\n propertyId: \"temperature\",\n },\n value: 21.5,\n at: \"2026-01-03T01:00:00.000Z\",\n },\n ],\n })\n expect(telemetry).toMatchObject({ pointsCreated: 1, latestObjectsChanged: 1 })\n expect(\n await storage.timeseries.getLatest({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n objectId: \"one\",\n propertyId: \"temperature\",\n })\n ).toMatchObject({ value: 21.5, lastCommitId: telemetry.commitId })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} persists per-property Action edit times`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n let now = new Date(\"2026-02-01T00:00:10.000Z\")\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => now,\n materializationId: () => `conflict-contract-candidate-${++materializationOrdinal}`,\n },\n })\n const runtimeMaterializer = materializer.withScope(runtimeScope())\n const ref = { objectTypeId: ConflictDevice.id, primaryId: \"one\" }\n const replace = async (\n versionId: string,\n sourceUpdatedAt: string,\n name: string,\n state: string\n ) => {\n const datasetVersion = {\n datasetId: conflictDevices.id,\n versionId,\n createdAt: sourceUpdatedAt,\n }\n const execution = await claim(storage, {\n runId: `conflict-${versionId}`,\n projectionId: conflictDeviceProjection.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const projectionMaterializerForRun = await projectionMaterializer(\n materializer,\n storage,\n conflictDeviceProjection.id,\n `conflict-${versionId}`\n )\n await projectionMaterializerForRun.projections.replace({\n source: { projectionId: conflictDeviceProjection.id },\n datasetVersion,\n execution,\n entries: entries([\n {\n root: { kind: \"object\", ref },\n assertions: [{ kind: \"object\", ref, properties: { name, state }, sourceUpdatedAt }],\n },\n ]),\n })\n }\n const edit = (requestId: string, propertyId: \"name\" | \"state\", value: string) =>\n runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId },\n operations: [\n {\n id: requestId,\n kind: \"object.patch\",\n ref,\n set: { [propertyId]: value },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n\n try {\n await replace(\"v1\", \"2026-02-01T00:00:10.000Z\", \"Source A\", \"source-open\")\n\n now = new Date(\"2026-02-01T00:00:11.000Z\")\n await edit(\"conflict-name\", \"name\", \"Action B\")\n now = new Date(\"2026-02-01T00:00:13.000Z\")\n await edit(\"conflict-state\", \"state\", \"action-closed\")\n\n await replace(\"v2\", \"2026-02-01T00:00:12.000Z\", \"Source C\", \"source-changed\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: ConflictDevice.id,\n primaryId: \"one\",\n })\n ).toMatchObject({ properties: { id: \"one\", name: \"Source C\", state: \"action-closed\" } })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} persists cardinality-one edit authority by scope`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => new Date(\"2026-02-01T12:00:00.000Z\"),\n materializationId: () => `scope-contract-candidate-${++materializationOrdinal}`,\n },\n })\n const runtimeMaterializer = materializer.withScope(runtimeScope())\n const linkRef = (targetId: string) => ({\n source: { objectTypeId: Device.id, primaryId: \"document\" },\n linkId: \"parent\",\n target: { objectTypeId: Device.id, primaryId: targetId },\n })\n const replace = async (versionId: string, parentId: string) => {\n const datasetVersion = {\n datasetId: devices.id,\n versionId,\n createdAt: `2026-01-0${versionId.slice(1)}T00:00:00.000Z`,\n }\n const execution = await claim(storage, {\n runId: `scope-${versionId}`,\n projectionId: deviceProjection.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const projectionMaterializerForRun = await projectionMaterializer(\n materializer,\n storage,\n deviceProjection.id,\n `scope-${versionId}`\n )\n await projectionMaterializerForRun.projections.replace({\n source: { projectionId: deviceProjection.id },\n datasetVersion,\n execution,\n entries: entries([\n sourceEntry(\"document\", \"Document\", parentId),\n sourceEntry(\"rockland\", \"Rockland\"),\n sourceEntry(\"haverstraw\", \"Haverstraw\"),\n ]),\n })\n }\n const edit = (requestId: string, operation: OntologyEditOperation) =>\n runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId },\n operations: [operation],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n const targets = async () =>\n (\n await storage.objects.listLinks({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n objectId: \"document\",\n })\n ).map((row) => row.targetId)\n\n try {\n await replace(\"v1\", \"rockland\")\n await edit(\"scope-set\", {\n id: \"set\",\n kind: \"link.upsert\",\n ref: linkRef(\"rockland\"),\n })\n\n await replace(\"v2\", \"haverstraw\")\n expect(await targets()).toEqual([\"rockland\"])\n\n await edit(\"scope-reset\", {\n id: \"reset\",\n kind: \"link.reset\",\n ref: linkRef(\"rockland\"),\n })\n expect(await targets()).toEqual([\"haverstraw\"])\n\n await edit(\"scope-clear\", {\n id: \"clear\",\n kind: \"link.delete\",\n ref: linkRef(\"haverstraw\"),\n })\n await replace(\"v3\", \"rockland\")\n expect(await targets()).toEqual([])\n\n await edit(\"scope-clear-reset\", {\n id: \"reset\",\n kind: \"link.reset\",\n ref: linkRef(\"haverstraw\"),\n })\n expect(await targets()).toEqual([\"rockland\"])\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n\n test(`${name} fences projected cardinality-many link scopes by fingerprint`, async () => {\n const createdStorage = await provider.createStorage()\n const storage = requireContractStorage(createdStorage)\n let materializationOrdinal = 0\n const materializer = createOntologyMaterializer({\n projectId: \"materializer-storage-contract\",\n ontology,\n projections,\n storage,\n dependencies: {\n batching: { sourceStageRows: 1, statePageRows: 1, planChunkRows: 1 },\n clock: () => new Date(\"2026-02-01T12:00:00.000Z\"),\n materializationId: () => `many-scope-contract-candidate-${++materializationOrdinal}`,\n },\n })\n const runtimeMaterializer = materializer.withScope(runtimeScope())\n const source = { objectTypeId: Device.id, primaryId: \"source\" }\n const peer = (primaryId: string) => ({ objectTypeId: Device.id, primaryId })\n const linkRef = (targetId: string) => ({\n source,\n linkId: \"peers\",\n target: peer(targetId),\n })\n\n try {\n await runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId: \"many-scope-endpoints\" },\n operations: [\"source\", \"peer-a\", \"peer-b\", \"peer-c\"].map((primaryId) => ({\n id: `create-${primaryId}`,\n kind: \"object.create\" as const,\n ref: peer(primaryId),\n properties: { name: primaryId },\n })),\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n\n const datasetVersion = {\n datasetId: devicePeers.id,\n versionId: \"many-links-v1\",\n createdAt: \"2026-02-01T00:00:00.000Z\",\n }\n const execution = await claim(storage, {\n runId: \"many-links-v1\",\n projectionId: devicePeersProjection.id,\n protocol: \"replacement\",\n datasetVersion,\n })\n const projectedLinks = [linkRef(\"peer-a\"), linkRef(\"peer-b\")]\n await (\n await projectionMaterializer(\n materializer,\n storage,\n devicePeersProjection.id,\n \"many-links-v1\"\n )\n ).projections.replace({\n source: { projectionId: devicePeersProjection.id },\n datasetVersion,\n execution,\n entries: entries(\n projectedLinks.map((ref) => ({\n root: { kind: \"link\", ref },\n assertions: [{ kind: \"link\", ref }],\n }))\n ),\n })\n\n const observedLinks = await storage.objects.listLinks({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n objectId: source.primaryId,\n linkId: \"peers\",\n })\n const fingerprint = createLinkScopeFingerprint(\n observedLinks.map((row) => {\n if (row.lastCommitId === undefined) {\n throw new Error(\"Projected contract link is missing materializer provenance.\")\n }\n return {\n ref: linkRef(row.targetId),\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n lastCommitId: row.lastCommitId,\n }\n })\n )\n const commitObservation = async (runId: string, name: string) => {\n await queueTestActionRun(storage, {\n id: runId,\n projectId: \"materializer-storage-contract\",\n actionId: \"observePeers\",\n subject: { kind: \"object\", objectTypeId: Device.id, primaryId: source.primaryId },\n params: {},\n idempotencyKey: runId,\n })\n await storage.actionRuns.start({ id: runId, projectId: \"materializer-storage-contract\" })\n const actionMaterializer = await primitiveMaterializer(materializer, storage, {\n kind: \"action\",\n id: \"observePeers\",\n runId,\n })\n return actionMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"action\", actionId: \"observePeers\", runId },\n operations: [\n {\n id: `record-${runId}`,\n kind: \"object.patch\",\n ref: source,\n set: { name },\n unset: [],\n reset: [],\n },\n ],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [{ source, linkId: \"peers\", fingerprint }],\n })\n }\n\n // Regression guard for G-021: make begin() hydrate the expected scope through the\n // cardinality-one slot reader again and this otherwise unrelated Action commit fails before\n // its already-stable fingerprint can be compared.\n await expect(commitObservation(\"many-scope-action\", \"observed peers\")).resolves.toMatchObject(\n { kind: \"edit\", created: true }\n )\n\n await runtimeMaterializer.edits.commit({\n mode: \"atomic\",\n source: { kind: \"runtime\", requestId: \"many-scope-change\" },\n operations: [{ id: \"add-peer\", kind: \"link.upsert\", ref: linkRef(\"peer-c\") }],\n expectedObjects: [],\n expectedLinks: [],\n expectedLinkScopes: [],\n })\n\n await expect(commitObservation(\"stale-many-scope-action\", \"must not commit\")).rejects.toThrow(\n \"Expected link scope changed\"\n )\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"materializer-storage-contract\",\n objectTypeId: Device.id,\n primaryId: source.primaryId,\n })\n ).toMatchObject({ properties: { name: \"observed peers\" } })\n } finally {\n await provider.cleanup?.(createdStorage)\n }\n })\n}\n\nfunction runtimeScope() {\n return createTestingScope({\n projectId: \"materializer-storage-contract\",\n executionId: \"materializer-storage-contract-runtime-execution\",\n requestId: \"materializer-storage-contract-runtime-request\",\n correlationId: \"materializer-storage-contract-runtime-correlation\",\n })\n}\n\nasync function projectionMaterializer(\n materializer: OntologyMaterializer,\n storage: ContractStorage,\n projectionId: string,\n runId: string\n) {\n return primitiveMaterializer(materializer, storage, {\n kind: \"projection\",\n id: projectionId,\n runId,\n })\n}\n\nasync function primitiveMaterializer(\n materializer: OntologyMaterializer,\n storage: ContractStorage,\n primitive: TrustedPrimitiveRef\n) {\n const run =\n primitive.kind === \"action\"\n ? await storage.actionRuns.getById({\n projectId: \"materializer-storage-contract\",\n id: primitive.runId,\n })\n : await storage.projectionRuns.getById({\n projectId: \"materializer-storage-contract\",\n id: primitive.runId,\n })\n const executionId = run?.executionId ?? `test_${primitive.kind}_execution:${primitive.runId}`\n const execution = await storage.executions.getById({\n projectId: \"materializer-storage-contract\",\n id: executionId,\n })\n if (!execution) throw new Error(`Test execution '${executionId}' is missing.`)\n return materializer.withScope(restoreTrustedPrimitiveExecutionScope({ execution, primitive }))\n}\n\nfunction requireContractStorage(storage: Storage): ContractStorage {\n if (!storage.actionRuns) {\n throw new Error(\"[Sixb] Materializer storage contract requires Action materialization runs.\")\n }\n if (!storage.projectionRuns) {\n throw new Error(\n \"[Sixb] Materializer storage contract requires projection materialization runs.\"\n )\n }\n return storage as ContractStorage\n}\n\nfunction sourceEntry(id: string, name: string, parentId?: string): ProjectionSourceEntry {\n const ref = { objectTypeId: Device.id, primaryId: id }\n return {\n root: { kind: \"object\", ref },\n assertions: [\n { kind: \"object\", ref, properties: { name } },\n ...(parentId\n ? [\n {\n kind: \"link\" as const,\n ref: {\n source: ref,\n linkId: \"parent\",\n target: { objectTypeId: Device.id, primaryId: parentId },\n },\n },\n ]\n : []),\n ],\n }\n}\n\nasync function* entries(values: readonly (ProjectionSourceEntry | ProjectionSourceDeletion)[]) {\n for (const value of values) yield value\n}\n\nasync function claim(\n storage: ContractStorage,\n input: {\n readonly runId: string\n readonly projectionId: string\n readonly protocol: \"replacement\" | \"telemetry\"\n readonly datasetVersion: {\n readonly datasetId: string\n readonly versionId: string\n readonly createdAt: string\n }\n readonly fixedBatchSize?: number\n }\n) {\n const resolved =\n input.protocol === \"replacement\"\n ? projections.resolveSource(input.projectionId)\n : projections.resolveTelemetry(input.projectionId)\n const definition = resolved.definition\n const identityBase = {\n projectionId: input.projectionId,\n datasetVersion: input.datasetVersion,\n ontologyRevision: projections.ontologyRevision,\n projectionRevision: resolved.projectionRevision,\n ownershipHash: resolved.ownershipHash,\n }\n const common = {\n id: input.runId,\n projectId: \"materializer-storage-contract\",\n } as const\n\n if (definition._tag === \"TelemetryProjectionDefinition\") {\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"telemetry\", protocol: \"telemetry\" },\n target: { objectTypeId: definition.objectTypeId },\n fixedBatchSize: input.fixedBatchSize ?? 1,\n })\n return claim.execution\n }\n\n if (definition._tag === \"LinkProjectionDefinition\") {\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"link\", protocol: \"replacement\" },\n target: {\n sourceObjectTypeId: definition.sourceObjectTypeId,\n targetObjectTypeId: definition.targetObjectTypeId,\n },\n })\n return claim.execution\n }\n\n const claim = await startTestProjectionRun(storage, {\n ...common,\n identity: { ...identityBase, projectionKind: \"object\", protocol: \"replacement\" },\n target: { objectTypeId: definition.objectTypeId },\n })\n return claim.execution\n}\n",
27
28
  "import type { TrustedPrimitiveRef } from \"../execution\"\nimport type {\n ProjectionRunClaim,\n ProjectionRunRecord,\n QueueProjectionRunInput,\n StartOrReclaimProjectionRunInput,\n Storage,\n} from \"../storage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\ntype ProjectionRunQueueFixtureInput = QueueProjectionRunInput extends infer TInput\n ? TInput extends QueueProjectionRunInput\n ? Omit<TInput, \"executionId\">\n : never\n : never\n\n/** Create the durable execution required by a Projection-run storage fixture. */\nexport async function createTestProjectionExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly projectionId: string\n readonly runId: string\n readonly datasetId: string\n readonly datasetVersionId: string\n readonly executionId?: string\n }\n): Promise<string> {\n const executionId = input.executionId ?? `test_projection_execution:${input.runId}`\n const existing = await executions.getById({ projectId: input.projectId, id: executionId })\n if (existing) return executionId\n\n const primitive: TrustedPrimitiveRef = {\n kind: \"projection\",\n id: input.projectionId,\n runId: input.runId,\n }\n await executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: {\n type: \"datasetVersion\",\n datasetId: input.datasetId,\n versionId: input.datasetVersionId,\n },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n return executionId\n}\n\n/** Queue a Projection run with the valid durable execution fixture required by every provider. */\nexport async function queueTestProjectionRun(\n storage: Pick<Storage, \"projectionRuns\" | \"executions\">,\n input: ProjectionRunQueueFixtureInput\n): Promise<ProjectionRunRecord> {\n if (!storage.projectionRuns)\n throw new Error(\"Projection run storage is not configured for this test.\")\n const executionId = await createTestProjectionExecution(storage.executions, {\n projectId: input.projectId,\n projectionId: input.identity.projectionId,\n runId: input.id,\n datasetId: input.identity.datasetVersion.datasetId,\n datasetVersionId: input.identity.datasetVersion.versionId,\n })\n return storage.projectionRuns.queue({ ...input, executionId })\n}\n\n/** Start a Projection run after creating its durable execution and queued state. */\nexport async function startTestProjectionRun(\n storage: Pick<Storage, \"projectionRuns\" | \"executions\">,\n input: StartOrReclaimProjectionRunInput\n): Promise<ProjectionRunClaim> {\n const projectionRuns = storage.projectionRuns\n if (!projectionRuns) throw new Error(\"Projection run storage is not configured for this test.\")\n const { startedAt, ...queuedRun } = input\n await queueTestProjectionRun(storage, { ...queuedRun, queuedAt: startedAt })\n return projectionRuns.startOrReclaim(input)\n}\n\n/** Claim a queued fixture, or rotate its attempt when the same durable run is reclaimed. */\nexport async function claimTestProjectionRun(\n storage: Pick<Storage, \"projectionRuns\" | \"executions\">,\n input: StartOrReclaimProjectionRunInput\n): Promise<ProjectionRunClaim> {\n if (!storage.projectionRuns)\n throw new Error(\"Projection run storage is not configured for this test.\")\n const existing = await storage.projectionRuns.getById({\n projectId: input.projectId,\n id: input.id,\n })\n if (!existing) {\n const { startedAt, ...queuedRun } = input\n await queueTestProjectionRun(storage, { ...queuedRun, queuedAt: startedAt })\n }\n return storage.projectionRuns.startOrReclaim(input)\n}\n",
28
29
  "import { describe, expect, test } from \"bun:test\"\nimport type { JsonValue } from \"../json\"\nimport {\n collectObjectQueryValidationIssues,\n countObjects,\n executeObjectQuery,\n executeObjectQueryLinks,\n existsObjects,\n facetObjects,\n normalizeObjectQuery,\n type ObjectQuery,\n ObjectQueryPlanningError,\n validateObjectQuery,\n} from \"../objects/query\"\nimport { defineObjectType, link, OntologyRegistry, prop, stringEnum } from \"../ontology\"\nimport type { ObjectStorage, QueryObjectsResult } from \"../storage/objects\"\nimport type { Storage } from \"../storage/types\"\nimport {\n createMaterializerTestFixture,\n type MaterializerFixtureLink,\n type MaterializerFixtureObject,\n type MaterializerTestFixture,\n} from \"./materializer-fixture\"\n\nexport interface ObjectQueryProviderContractSuiteOptions<TStorage extends Storage> {\n /** Factory that produces a fresh complete storage instance for each test case. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"object-query-contract\"\n\nconst Device = defineObjectType({\n id: \"ContractDevice\",\n name: \"Contract Device\",\n properties: [\n prop(\"id\", \"string\", {\n required: true,\n primary: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"name\", \"string\", {\n query: { searchable: true, text: true, filterable: true, exact: true, sortable: true },\n }),\n ],\n search: { defaultText: [\"name\"] },\n})\n\nconst Room = defineObjectType({\n id: \"ContractRoom\",\n name: \"Contract Room\",\n properties: [\n prop(\"id\", \"string\", {\n required: true,\n primary: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"name\", \"string\", {\n query: { searchable: true, text: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"description\", \"string\", {\n query: { searchable: true, text: true },\n }),\n prop(\"floor\", \"string\", {\n nullable: true,\n query: { searchable: true, filterable: true, exact: true, sortable: true },\n }),\n prop(\"capacity\", \"double\", {\n query: { searchable: true, filterable: true, sortable: true },\n }),\n prop(\"occupied\", \"boolean\", {\n query: { searchable: true, filterable: true, exact: true, facet: true },\n }),\n prop(\"status\", stringEnum([\"active\", \"paused\"]), {\n query: { searchable: true, filterable: true, exact: true, facet: true },\n }),\n prop(\n \"tags\",\n { type: \"array\", items: \"string\" },\n { query: { searchable: true, filterable: true } }\n ),\n prop(\n \"metadata\",\n { type: \"map\", keySchema: \"string\", valueSchema: \"string\" },\n { query: { searchable: true, filterable: true } }\n ),\n prop(\n \"embedding\",\n { type: \"array\", items: \"double\" },\n { query: { searchable: true, vector: true } }\n ),\n ],\n links: [link(\"hasDevice\", Device)],\n search: {\n defaultText: [\"name\", \"description\"],\n vector: { property: \"embedding\", source: [\"name\", \"description\"] },\n },\n})\n\nconst Zone = defineObjectType({\n id: \"ContractZone\",\n name: \"Contract Zone\",\n properties: [prop(\"id\", \"string\", { required: true, primary: true })],\n links: [link(\"hasDevice\", Device)],\n})\n\nconst Asset = defineObjectType({\n id: \"ContractAsset\",\n name: \"Contract Asset\",\n properties: [prop(\"id\", \"string\", { required: true, primary: true })],\n})\n\nconst LaptopAsset = defineObjectType({\n id: \"ContractLaptopAsset\",\n name: \"Contract Laptop Asset\",\n extends: Asset,\n properties: [],\n})\n\nconst DefaultTextBase = defineObjectType({\n id: \"ContractDefaultTextBase\",\n name: \"Contract Default Text Base\",\n properties: [\n prop(\"id\", \"string\", { required: true, primary: true }),\n prop(\"name\", \"string\", { query: { searchable: true, text: true } }),\n prop(\"alias\", \"string\"),\n ],\n search: { defaultText: [\"name\"] },\n})\n\nconst DefaultTextChild = defineObjectType({\n id: \"ContractDefaultTextChild\",\n name: \"Contract Default Text Child\",\n extends: DefaultTextBase,\n properties: [prop(\"alias\", \"string\", { query: { searchable: true, text: true } })],\n search: { defaultText: [\"alias\"] },\n})\n\nexport const objectQueryContractOntology = new OntologyRegistry({\n sources: [Room, Device, Zone, Asset, LaptopAsset, DefaultTextBase, DefaultTextChild],\n})\n\n/**\n * Runs the shared object-query provider contract against any ObjectStorage.\n *\n * The contract defines the portable V1 query surface: capability declarations,\n * validation/normalization handoff, provider pushdown, bounded fallback,\n * canonical reference sets, traversal, set operations, pagination, search profile defaults, and stable\n * structured rejections for features outside a provider's capability map.\n */\nexport function runObjectQueryProviderContractSuite<TStorage extends Storage>(\n label: string,\n options: ObjectQueryProviderContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (\n body: (context: {\n readonly objects: TStorage[\"objects\"]\n readonly fixture: MaterializerTestFixture\n }) => Promise<void>\n ): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body({\n objects: storage.objects,\n fixture: createMaterializerTestFixture({\n projectId,\n ontology: objectQueryContractOntology,\n storage,\n }),\n })\n } finally {\n await options.teardown?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"normalizes query shape and resolves search profile defaults\", () => {\n const normalized = normalizeObjectQuery({\n kind: \"limit\",\n limit: 10,\n input: {\n kind: \"limit\",\n limit: 3,\n input: {\n kind: \"project\",\n properties: [\"id\", \"name\", \"id\"],\n input: {\n kind: \"text\",\n query: \"alpha\",\n fields: [\"name\", \"description\", \"name\"],\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n })\n\n expect(normalized.kind).toBe(\"limit\")\n if (normalized.kind !== \"limit\") return\n expect(normalized.limit).toBe(3)\n expect(normalized.input.kind).toBe(\"project\")\n if (normalized.input.kind !== \"project\") return\n expect(normalized.input.properties).toEqual([\"id\", \"name\"])\n expect(normalized.input.input.kind).toBe(\"text\")\n if (normalized.input.input.kind !== \"text\") return\n expect(normalized.input.input.fields).toEqual([\"name\", \"description\"])\n\n const validated = validateObjectQuery(\n { kind: \"text\", query: \"alpha\", input: { kind: \"start\", objectTypeId: Room.id } },\n { ontology: objectQueryContractOntology }\n )\n expect(validated.query.kind).toBe(\"text\")\n if (validated.query.kind === \"text\") {\n expect(validated.query.fields).toBeUndefined()\n expect(validated.query.fieldsByObjectType).toEqual({\n [Room.id]: [\"name\", \"description\"],\n })\n }\n })\n\n test(\"collects validation failures before provider planning\", () => {\n const issues = collectObjectQueryValidationIssues(\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"missing\", value: \"x\" },\n input: {\n kind: \"text\",\n query: \"alpha\",\n fields: [\"capacity\"],\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology }\n )\n\n expect(issues.map((issue) => issue.code)).toEqual(\n expect.arrayContaining([\n \"unknown_property\",\n \"query_field_not_enabled\",\n \"text_field_not_string_like\",\n ])\n )\n })\n\n test(\"declares the portable V1 query capability surface\", async () => {\n await withStorage(async ({ objects: storage }) => {\n const capabilities = storage.queryCapabilities()\n\n expect(capabilities.queryObjects).toBe(true)\n expect(capabilities.countObjects).toBe(true)\n expect(capabilities.existsObjects).toBe(true)\n expect(capabilities.facetObjects).toBe(true)\n for (const node of [\n \"start\",\n \"filter\",\n \"text\",\n \"sort\",\n \"limit\",\n \"page\",\n \"traverse\",\n \"set\",\n \"project\",\n ] as const) {\n expect(capabilities.nodes?.[node]).toBe(true)\n }\n for (const op of [\n \"and\",\n \"or\",\n \"not\",\n \"eq\",\n \"neq\",\n \"lt\",\n \"lte\",\n \"gt\",\n \"gte\",\n \"in\",\n \"exists\",\n \"contains\",\n ] as const) {\n expect(capabilities.predicateOps?.[op]).toBe(true)\n }\n expect(capabilities.sortKinds?.property).toBe(true)\n expect(capabilities.traversalDirections?.outgoing).toBe(true)\n expect(capabilities.traversalDirections?.incoming).toBe(true)\n expect(capabilities.setOps?.union).toBe(true)\n expect(capabilities.setOps?.intersect).toBe(true)\n expect(capabilities.setOps?.subtract).toBe(true)\n })\n })\n\n test(\"pushes down scalar predicates, boolean groups, sorting, limits, and projections\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\", \"name\", \"capacity\"],\n input: {\n kind: \"limit\",\n limit: 2,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"and\",\n items: [\n { op: \"eq\", propertyId: \"status\", value: \"active\" },\n { op: \"neq\", propertyId: \"name\", value: \"Gamma Huddle\" },\n { op: \"gte\", propertyId: \"capacity\", value: 10 },\n { op: \"lte\", propertyId: \"capacity\", value: 30 },\n { op: \"in\", propertyId: \"floor\", values: [\"2\"] },\n { op: \"contains\", propertyId: \"tags\", value: \"lab\" },\n {\n op: \"or\",\n items: [\n { op: \"contains\", propertyId: \"name\", value: \"Alpha\" },\n { op: \"contains\", propertyId: \"metadata\", value: \"wing\" },\n ],\n },\n { op: \"not\", item: { op: \"eq\", propertyId: \"id\", value: \"missing\" } },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-beta\", \"room-alpha\"])\n expect(result.objects[0]?.properties).toEqual({\n id: \"room-beta\",\n name: \"Beta Lab\",\n capacity: 30,\n })\n expect(result.total).toBe(2)\n expect(result.hasMore).toBe(false)\n })\n })\n\n test(\"queries opaque ids through canonical exact refs\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n const issue297 = \"github:issue:sixb-ai/sixb#297\"\n const issue298 = \"github:issue:sixb-ai/sixb#298\"\n await fixture.seed({\n objects: [\n objectSeed(Asset.id, issue297, { id: issue297 }),\n objectSeed(Asset.id, issue298, { id: issue298 }),\n ],\n })\n\n const refs = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"refs\",\n refs: [\n { objectTypeId: Asset.id, primaryId: issue298 },\n { objectTypeId: Asset.id, primaryId: issue297 },\n ],\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n // The JSON query body preserves URL-reserved characters without encoding.\n expect(refs.plan.mode).toBe(\n storage.queryCapabilities().nodes?.refs === true ? \"pushdown\" : \"fallback\"\n )\n expect(ids(refs)).toEqual([issue297, issue298])\n })\n })\n\n test(\"executes canonical heterogeneous refs with pagination and projection\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const refs: Extract<ObjectQuery, { kind: \"refs\" }>[\"refs\"] = [\n { objectTypeId: Device.id, primaryId: \"device-sensor\" },\n { objectTypeId: Room.id, primaryId: \"room-gamma\" },\n { objectTypeId: Room.id, primaryId: \"missing\" },\n { objectTypeId: Room.id, primaryId: \"room-alpha\" },\n ]\n const first = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: { kind: \"page\", pageSize: 2, input: { kind: \"refs\", refs } },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const second = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: {\n kind: \"page\",\n pageSize: 2,\n pageToken: first.nextPageToken,\n input: { kind: \"refs\", refs },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const count = await countObjects(\n { projectId, query: { kind: \"refs\", refs } },\n { ontology: objectQueryContractOntology, storage }\n )\n\n const expectedMode =\n storage.queryCapabilities().nodes?.refs === true ? \"pushdown\" : \"fallback\"\n expect(first.plan.mode).toBe(expectedMode)\n expect(ids(first)).toEqual([\"device-sensor\", \"room-alpha\"])\n expect(first.objects.map((row) => row.properties)).toEqual([\n { id: \"device-sensor\" },\n { id: \"room-alpha\" },\n ])\n expect(first.total).toBe(3)\n expect(first.hasMore).toBe(true)\n expect(first.nextPageToken).toBeTruthy()\n expect(second.plan.mode).toBe(expectedMode)\n expect(ids(second)).toEqual([\"room-gamma\"])\n expect(second.hasMore).toBe(false)\n expect(count.plan.mode).toBe(expectedMode)\n expect(count.count).toBe(3)\n })\n })\n\n test(\"composes refs with traversal in provider pushdown\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n if (storage.queryCapabilities().nodes?.refs !== true) return\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"hasDevice\",\n input: {\n kind: \"refs\",\n refs: [{ objectTypeId: Room.id, primaryId: \"room-alpha\" }],\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"device-projector\"])\n })\n })\n\n test(\"queries and paginates incident links over a provider-backed object set\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"refs\",\n refs: [{ objectTypeId: Device.id, primaryId: \"device-projector\" }],\n }\n\n const first = await executeObjectQueryLinks(\n {\n projectId,\n query,\n direction: \"incoming\",\n includeObjects: true,\n pageSize: 1,\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const second = await executeObjectQueryLinks(\n {\n projectId,\n query,\n direction: \"incoming\",\n includeObjects: true,\n pageSize: 1,\n pageToken: first.nextPageToken,\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(first.links).toEqual([\n expect.objectContaining({\n sourceTypeId: Room.id,\n sourceId: \"room-alpha\",\n linkId: \"hasDevice\",\n targetTypeId: Device.id,\n targetId: \"device-projector\",\n }),\n ])\n expect(first.objects.map((row) => row.primaryId)).toEqual([\n \"device-projector\",\n \"room-alpha\",\n ])\n expect(first.hasMore).toBe(true)\n expect(first.nextPageToken).toBeTruthy()\n expect(second.links).toEqual([\n expect.objectContaining({\n sourceTypeId: Zone.id,\n sourceId: \"zone-one\",\n linkId: \"hasDevice\",\n targetTypeId: Device.id,\n targetId: \"device-projector\",\n }),\n ])\n expect(second.objects.map((row) => row.primaryId)).toEqual([\"device-projector\", \"zone-one\"])\n expect(second.hasMore).toBe(false)\n })\n })\n\n test(\"does not admit a provider page probe into the link selector\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQueryLinks(\n {\n projectId,\n query: {\n kind: \"page\",\n pageSize: 1,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n direction: \"outgoing\",\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.links).toEqual([\n expect.objectContaining({ sourceId: \"room-alpha\", targetId: \"device-projector\" }),\n ])\n })\n })\n\n test(\"matches null, missing, neq, in, and not predicate semantics\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const nullable = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"or\",\n items: [\n { op: \"eq\", propertyId: \"floor\", value: null },\n { op: \"exists\", propertyId: \"floor\", value: false },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notTwoOrNull = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: {\n op: \"and\",\n items: [\n { op: \"neq\", propertyId: \"floor\", value: \"2\" },\n { op: \"in\", propertyId: \"floor\", values: [\"1\", null] },\n ],\n },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notNullFloor = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"neq\", propertyId: \"floor\", value: null },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const notFloorTwo = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"not\", item: { op: \"eq\", propertyId: \"floor\", value: \"2\" } },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(ids(nullable)).toEqual([\"room-missing-floor\", \"room-null-floor\"])\n expect(ids(notTwoOrNull)).toEqual([\"room-gamma\", \"room-null-floor\"])\n expect(ids(notNullFloor)).toEqual([\n \"room-alpha\",\n \"room-beta\",\n \"room-gamma\",\n \"room-missing-floor\",\n ])\n expect(ids(notFloorTwo)).toEqual([\"room-gamma\", \"room-missing-floor\", \"room-null-floor\"])\n })\n })\n\n test(\"keeps page tokens stable when projection hides sorted cursor fields\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const input: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"exists\", propertyId: \"capacity\", value: true },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n const page1 = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: { kind: \"page\", pageSize: 2, input },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const page2 = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"project\",\n properties: [\"id\"],\n input: { kind: \"page\", pageSize: 2, pageToken: page1.nextPageToken, input },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(page1.plan.mode).toBe(\"pushdown\")\n expect(ids(page1)).toEqual([\"room-beta\", \"room-gamma\"])\n expect(page1.objects.map((row) => row.properties)).toEqual([\n { id: \"room-beta\" },\n { id: \"room-gamma\" },\n ])\n expect(page1.hasMore).toBe(true)\n expect(page1.nextPageToken).toBeTruthy()\n expect(ids(page2)).toEqual([\"room-alpha\"])\n })\n })\n\n test(\"omits totals when requested without losing hasMore\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const limited = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const page = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: { kind: \"page\", pageSize: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const sortedLimited = await executeObjectQuery(\n {\n projectId,\n includeTotal: false,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"capacity\", direction: \"desc\" }],\n input: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(limited.plan.mode).toBe(\"pushdown\")\n expect(ids(limited)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(limited.total).toBeUndefined()\n expect(limited.hasMore).toBe(true)\n expect(ids(page)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(page.total).toBeUndefined()\n expect(page.hasMore).toBe(true)\n expect(page.nextPageToken).toBeTruthy()\n expect(ids(sortedLimited)).toEqual([\"room-beta\", \"room-alpha\"])\n expect(sortedLimited.total).toBeUndefined()\n expect(sortedLimited.hasMore).toBe(true)\n })\n })\n\n test(\"counts matching objects without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const active = await countObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await countObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 2, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(active.plan.mode).toBe(\"pushdown\")\n expect(active.count).toBe(2)\n expect(limited.count).toBe(5)\n })\n })\n\n test(\"checks existence without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const active = await existsObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const missing = await existsObjects(\n {\n projectId,\n query: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"name\", value: \"No Such Room\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await existsObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 0, input: { kind: \"start\", objectTypeId: Room.id } },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(active.plan.mode).toBe(\"pushdown\")\n expect(active.exists).toBe(true)\n expect(missing.exists).toBe(false)\n expect(limited.exists).toBe(true)\n })\n })\n\n test(\"plans aggregate operations without outer row-shaping requirements\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"relevance\" }],\n input: {\n kind: \"text\",\n query: \"alpha\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n\n const count = await countObjects(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n const exists = await existsObjects(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(count.plan.mode).toBe(\"pushdown\")\n if (count.plan.mode !== \"pushdown\") return\n expect(count.plan.query.kind).toBe(\"text\")\n expect(count.count).toBe(1)\n expect(exists.plan.mode).toBe(\"pushdown\")\n if (exists.plan.mode !== \"pushdown\") return\n expect(exists.plan.query.kind).toBe(\"text\")\n expect(exists.exists).toBe(true)\n })\n })\n\n test(\"counts matching objects by facetable properties without returning rows\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const status = await facetObjects(\n {\n projectId,\n query: { kind: \"start\", objectTypeId: Room.id },\n facets: [\n { propertyId: \"status\", limit: 10 },\n { propertyId: \"occupied\", limit: 10 },\n ],\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const limited = await facetObjects(\n {\n projectId,\n query: { kind: \"limit\", limit: 0, input: { kind: \"start\", objectTypeId: Room.id } },\n facets: [\n { propertyId: \"status\", limit: 10 },\n { propertyId: \"occupied\", limit: 10 },\n ],\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(status.plan.mode).toBe(\"pushdown\")\n expect(status.facets).toEqual([\n {\n propertyId: \"status\",\n buckets: [\n { value: \"paused\", count: 3 },\n { value: \"active\", count: 2 },\n ],\n },\n {\n propertyId: \"occupied\",\n buckets: [\n { value: false, count: 3 },\n { value: true, count: 2 },\n ],\n },\n ])\n expect(limited.facets).toEqual(status.facets)\n })\n })\n\n test(\"pushes down traversal and set operations\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const outgoing = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"hasDevice\",\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incoming = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incomingRooms = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n sourceObjectTypeId: Room.id,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const incomingZones = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"incoming\",\n linkId: \"hasDevice\",\n sourceObjectTypeId: Zone.id,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const intersect = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"set\",\n op: \"intersect\",\n inputs: [\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n {\n kind: \"filter\",\n predicate: { op: \"contains\", propertyId: \"tags\", value: \"lab\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n ],\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n const subtract = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"set\",\n op: \"subtract\",\n inputs: [\n {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n {\n kind: \"filter\",\n predicate: { op: \"contains\", propertyId: \"name\", value: \"Alpha\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n ],\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(outgoing.plan.mode).toBe(\"pushdown\")\n expect(incoming.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(outgoing)).toEqual([\"device-projector\", \"device-sensor\"])\n expect(sortedIds(incoming)).toEqual([\"room-alpha\", \"room-beta\", \"zone-one\"])\n expect(incomingRooms.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(incomingRooms)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(sortedIds(incomingZones)).toEqual([\"zone-one\"])\n expect(sortedIds(intersect)).toEqual([\"room-alpha\", \"room-beta\"])\n expect(ids(subtract)).toEqual([\"room-beta\"])\n })\n })\n\n test(\"hydrates expand links identically via pushdown or bounded fallback\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const outgoing = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"expand\",\n expansions: [{ linkId: \"hasDevice\", direction: \"outgoing\" }],\n input: {\n kind: \"limit\",\n limit: 10,\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n // A provider that declares expand pushdown hydrates links in-database;\n // otherwise the same links come back through the bounded fallback. Either\n // path must produce identical results.\n const expandMode = storage.queryCapabilities().nodes?.expand ? \"pushdown\" : \"fallback\"\n expect(outgoing.plan.mode).toBe(expandMode)\n expect(expandedIds(outgoing, \"room-alpha\", \"hasDevice\")).toEqual([\"device-projector\"])\n expect(expandedIds(outgoing, \"room-beta\", \"hasDevice\")).toEqual([\"device-sensor\"])\n\n const incoming = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"expand\",\n expansions: [{ linkId: \"hasDevice\", direction: \"incoming\" }],\n input: {\n kind: \"limit\",\n limit: 10,\n input: { kind: \"start\", objectTypeId: Device.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n // device-projector is linked from both a Room and a Zone.\n expect(incoming.plan.mode).toBe(expandMode)\n expect(expandedIds(incoming, \"device-projector\", \"hasDevice\")).toEqual([\n \"room-alpha\",\n \"zone-one\",\n ])\n expect(expandedIds(incoming, \"device-sensor\", \"hasDevice\")).toEqual([\"room-beta\"])\n })\n })\n\n test(\"expands includeSubtypes outside storage when the expanded query can push down\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 10,\n input: { kind: \"start\", objectTypeId: Asset.id, includeSubtypes: true },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(sortedIds(result)).toEqual([\"asset-base\", \"laptop-1\"])\n })\n })\n\n test(\"pushes down basic text search using search profile defaults\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"name\", direction: \"asc\" }],\n input: {\n kind: \"text\",\n query: \"alpha collaboration\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\"])\n })\n })\n\n test(\"scopes search profile defaults by object type for subtype text queries\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await fixture.seed({\n objects: [\n {\n ref: { objectTypeId: DefaultTextBase.id, primaryId: \"default-base\" },\n properties: { id: \"default-base\", name: \"ordinary\", alias: \"secret\" },\n },\n {\n ref: { objectTypeId: DefaultTextChild.id, primaryId: \"default-child\" },\n properties: { id: \"default-child\", name: \"ordinary\", alias: \"secret\" },\n },\n ],\n })\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"text\",\n query: \"secret\",\n input: {\n kind: \"start\",\n objectTypeId: DefaultTextBase.id,\n includeSubtypes: true,\n },\n },\n },\n { ontology: objectQueryContractOntology, storage }\n )\n\n expect(ids(result)).toEqual([\"default-child\"])\n })\n })\n\n test(\"executes or rejects relevance sorting according to provider capabilities\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"sort\",\n fields: [{ kind: \"relevance\" }],\n input: {\n kind: \"text\",\n query: \"alpha\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n }\n\n if (storage.queryCapabilities().sortKinds?.relevance === true) {\n const result = await executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\"])\n return\n }\n\n await expectPlanningIssue(\n executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n ),\n \"sort_kind_not_supported\"\n )\n })\n })\n\n test(\"executes or rejects vector search according to provider capabilities\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const query: ObjectQuery = {\n kind: \"vector\",\n propertyId: \"embedding\",\n vector: [1, 0],\n k: 2,\n input: { kind: \"start\", objectTypeId: Room.id },\n }\n\n if (storage.queryCapabilities().nodes?.vector === true) {\n const result = await executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n )\n expect(result.plan.mode).toBe(\"pushdown\")\n expect(ids(result)).toEqual([\"room-alpha\", \"room-beta\"])\n return\n }\n\n await expectPlanningIssue(\n executeObjectQuery(\n { projectId, query },\n { ontology: objectQueryContractOntology, storage }\n ),\n \"query_node_not_supported\"\n )\n })\n })\n\n test(\"executes bounded fallback when pushdown is disabled for a safe query\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const fallbackStorage = withoutQueryPushdown(storage)\n\n const result = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 2,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"name\", direction: \"asc\" }],\n input: {\n kind: \"filter\",\n predicate: { op: \"eq\", propertyId: \"status\", value: \"active\" },\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage: fallbackStorage, maxFallbackRows: 20 }\n )\n\n expect(result.plan.mode).toBe(\"fallback\")\n expect(ids(result)).toEqual([\"room-alpha\", \"room-beta\"])\n })\n })\n\n test(\"rejects fallback for unsupported query nodes when pushdown is disabled\", async () => {\n await withStorage(async ({ objects: storage, fixture }) => {\n await seedObjectQueryContractData(fixture)\n const fallbackStorage = withoutQueryPushdown(storage)\n\n await expectPlanningIssue(\n executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"limit\",\n limit: 5,\n input: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"hasDevice\",\n input: { kind: \"start\", objectTypeId: Room.id },\n },\n },\n },\n { ontology: objectQueryContractOntology, storage: fallbackStorage, maxFallbackRows: 20 }\n ),\n \"fallback_node_not_supported\"\n )\n })\n })\n })\n}\n\nexport async function seedObjectQueryContractData(fixture: MaterializerTestFixture): Promise<void> {\n await fixture.seed({\n objects: [\n objectSeed(Room.id, \"room-alpha\", {\n id: \"room-alpha\",\n name: \"Alpha Conference\",\n description: \"north alpha collaboration\",\n floor: \"2\",\n capacity: 10,\n occupied: true,\n status: \"active\",\n tags: [\"lab\", \"video\"],\n metadata: { wing: \"north\" },\n embedding: [1, 0],\n }),\n objectSeed(Room.id, \"room-beta\", {\n id: \"room-beta\",\n name: \"Beta Lab\",\n description: \"south beta focus\",\n floor: \"2\",\n capacity: 30,\n occupied: false,\n status: \"active\",\n tags: [\"lab\"],\n metadata: { wing: \"south\" },\n embedding: [0.8, 0.2],\n }),\n objectSeed(Room.id, \"room-gamma\", {\n id: \"room-gamma\",\n name: \"Gamma Huddle\",\n description: \"quiet office\",\n floor: \"1\",\n capacity: 20,\n occupied: true,\n status: \"paused\",\n tags: [\"office\"],\n metadata: { zone: \"quiet\" },\n embedding: [0, 1],\n }),\n objectSeed(Room.id, \"room-null-floor\", {\n id: \"room-null-floor\",\n name: \"Null Floor\",\n description: \"nullable floor fixture\",\n floor: null,\n occupied: false,\n status: \"paused\",\n tags: [],\n metadata: {},\n embedding: [0, 0],\n }),\n objectSeed(Room.id, \"room-missing-floor\", {\n id: \"room-missing-floor\",\n name: \"Missing Floor\",\n description: \"missing floor fixture\",\n occupied: false,\n status: \"paused\",\n tags: [],\n metadata: {},\n embedding: [0, 0],\n }),\n objectSeed(Device.id, \"device-projector\", {\n id: \"device-projector\",\n name: \"Projector\",\n }),\n objectSeed(Device.id, \"device-sensor\", { id: \"device-sensor\", name: \"Sensor\" }),\n objectSeed(Asset.id, \"asset-base\", { id: \"asset-base\" }),\n objectSeed(LaptopAsset.id, \"laptop-1\", { id: \"laptop-1\" }),\n objectSeed(Zone.id, \"zone-one\", { id: \"zone-one\" }),\n ],\n links: [\n linkSeed(Room.id, \"room-alpha\", \"hasDevice\", Device.id, \"device-projector\"),\n linkSeed(Room.id, \"room-beta\", \"hasDevice\", Device.id, \"device-sensor\"),\n linkSeed(Zone.id, \"zone-one\", \"hasDevice\", Device.id, \"device-projector\"),\n ],\n })\n}\n\nfunction objectSeed(\n objectTypeId: string,\n primaryId: string,\n properties: Record<string, JsonValue>\n): MaterializerFixtureObject {\n return {\n ref: { objectTypeId, primaryId },\n properties,\n }\n}\n\nfunction linkSeed(\n sourceTypeId: string,\n sourceId: string,\n linkId: string,\n targetTypeId: string,\n targetId: string\n): MaterializerFixtureLink {\n return {\n ref: {\n source: { objectTypeId: sourceTypeId, primaryId: sourceId },\n linkId,\n target: { objectTypeId: targetTypeId, primaryId: targetId },\n },\n }\n}\n\nfunction ids(result: QueryObjectsResult): string[] {\n return result.objects.map((row) => row.primaryId)\n}\n\n// Sorted primaryIds of the objects hydrated under `linkId` on the parent row.\nfunction expandedIds(result: QueryObjectsResult, parentId: string, linkId: string): string[] {\n const parent = result.objects.find((row) => row.primaryId === parentId)\n if (!parent) throw new Error(`parent row '${parentId}' not found`)\n const value = parent.links?.[linkId]\n if (!Array.isArray(value)) throw new Error(`expected an array of links under '${linkId}'`)\n return value.map((linked) => linked.primaryId).sort()\n}\n\nfunction sortedIds(result: QueryObjectsResult): string[] {\n return [...ids(result)].sort()\n}\n\nfunction withoutQueryPushdown(storage: ObjectStorage): ObjectStorage {\n return new Proxy(storage, {\n get(target, property, receiver) {\n if (property === \"queryCapabilities\") return () => ({ queryObjects: false })\n if (property === \"queryObjects\") return undefined\n\n const value = Reflect.get(target, property, receiver)\n return typeof value === \"function\" ? value.bind(target) : value\n },\n })\n}\n\nasync function expectPlanningIssue(promise: Promise<unknown>, code: string): Promise<void> {\n try {\n await promise\n } catch (error) {\n expect(error).toBeInstanceOf(ObjectQueryPlanningError)\n if (error instanceof ObjectQueryPlanningError) {\n expect(error.issues.map((issue) => issue.code)).toContain(code)\n }\n return\n }\n\n throw new Error(`Expected ObjectQueryPlanningError with code '${code}'`)\n}\n",
29
30
  "import { describe, expect, test } from \"bun:test\"\nimport type { JsonValue } from \"../json\"\nimport { executeObjectQuery, type ObjectQuery } from \"../objects/query\"\nimport { defineObjectType, link, OntologyRegistry, prop } from \"../ontology\"\nimport {\n compileSelectedObjectReadScope,\n linkBatchKey,\n MAX_OBJECT_READ_FACETS,\n type ObjectReadExecutionLimits,\n type ObjectReadScopeFactory,\n type ObjectReadStorage,\n objectBatchKey,\n type SelectedObjectReadScope,\n} from \"../storage/objects\"\nimport type { Storage } from \"../storage/types\"\nimport {\n createMaterializerTestFixture,\n type MaterializerFixtureLink,\n type MaterializerFixtureObject,\n type MaterializerTestFixture,\n} from \"./materializer-fixture\"\n\nexport interface ObjectReadScopeContractHarness<TStorage extends Storage> {\n readonly storage: TStorage\n /** Kept separate from `storage.objects` until the effective Storage contract activates it. */\n readonly objectReadScopeFactory: ObjectReadScopeFactory\n}\n\nexport interface ObjectReadScopeContractSuiteOptions<TStorage extends Storage> {\n readonly createHarness: () =>\n | ObjectReadScopeContractHarness<TStorage>\n | Promise<ObjectReadScopeContractHarness<TStorage>>\n readonly teardown?: (harness: ObjectReadScopeContractHarness<TStorage>) => void | Promise<void>\n}\n\nconst projectId = \"object-read-scope-contract\"\nconst otherProjectId = \"object-read-scope-contract-other\"\nconst Product = defineObjectType({\n id: \"ScopeProduct\",\n name: \"Scope Product\",\n properties: [\n prop(\"id\", \"string\", { required: true, primary: true }),\n prop(\"name\", \"string\", { query: { searchable: true, text: true } }),\n prop(\"internal\", \"string\"),\n ],\n search: { defaultText: [\"name\"] },\n})\n\nconst LineItem = defineObjectType({\n id: \"ScopeLineItem\",\n name: \"Scope Line Item\",\n properties: [\n prop(\"id\", \"string\", { required: true, primary: true }),\n prop(\"name\", \"string\", { query: { searchable: true, text: true, sortable: true } }),\n prop(\"price\", \"double\", { query: { searchable: true, filterable: true, sortable: true } }),\n prop(\"reviewNote\", \"string\"),\n prop(\"internal\", \"string\"),\n ],\n links: [link(\"product\", Product, { cardinality: \"one\" })],\n search: { defaultText: [\"name\"] },\n})\n\nconst Proposal = defineObjectType({\n id: \"ScopeProposal\",\n name: \"Scope Proposal\",\n properties: [\n prop(\"id\", \"string\", { required: true, primary: true }),\n prop(\"title\", \"string\", {\n query: { searchable: true, text: true, filterable: true, sortable: true },\n }),\n prop(\"rank\", \"double\", { query: { searchable: true, filterable: true, sortable: true } }),\n prop(\"category\", \"string\", { query: { searchable: true, filterable: true, facet: true } }),\n prop(\n \"embedding\",\n { type: \"array\", items: \"double\" },\n { query: { searchable: true, vector: true } }\n ),\n prop(\"secret\", \"string\", { query: { searchable: true, filterable: true, facet: true } }),\n ],\n links: [\n link(\"items\", LineItem, {\n properties: [prop(\"position\", \"double\"), prop(\"label\", \"string\"), prop(\"internal\", \"string\")],\n }),\n link(\"reviewers\", LineItem),\n link.self(\"related\"),\n link(\"aPrivate\", Product),\n link(\"zVisible\", Product),\n ],\n search: { defaultText: [\"title\"] },\n})\n\nexport const objectReadScopeContractOntology = new OntologyRegistry({\n sources: [Proposal, LineItem, Product],\n})\n\nconst limits: ObjectReadExecutionLimits = {\n maxTraversalFacts: 100,\n maxOutputJsonBytes: 1_000_000,\n}\n\n/**\n * Portable selected-object-read contract shared by every storage provider.\n *\n * It verifies the security boundary, not a provider's implementation strategy: selection is live,\n * path-sensitive, applied before every terminal, redacted, project-bound, and independently\n * budgeted.\n */\nexport function runObjectReadScopeContractSuite<TStorage extends Storage>(\n label: string,\n options: ObjectReadScopeContractSuiteOptions<TStorage>\n): void {\n const withHarness = async (\n body: (context: {\n readonly harness: ObjectReadScopeContractHarness<TStorage>\n readonly fixture: MaterializerTestFixture\n }) => Promise<void>\n ): Promise<void> => {\n const harness = await options.createHarness()\n try {\n const fixture = createMaterializerTestFixture({\n projectId,\n ontology: objectReadScopeContractOntology,\n storage: harness.storage,\n })\n await seed(fixture)\n await body({ harness, fixture })\n } finally {\n await options.teardown?.(harness)\n }\n }\n\n describe(label, () => {\n test(\"selects exact live identities, unions properties, and redacts detached rows\", async () => {\n await withHarness(async ({ harness, fixture }) => {\n const reader = createReader(harness.objectReadScopeFactory)\n\n const proposal = await reader.getByPrimaryId({\n projectId,\n objectTypeId: Proposal.id,\n primaryId: \"proposal-1\",\n })\n expect(proposal?.primaryId).toBe(\"proposal-1\")\n expect(proposal?.properties).toEqual({\n id: \"proposal-1\",\n title: \"Visible proposal\",\n rank: 50,\n category: \"visible\",\n embedding: [0, 1],\n })\n expect(proposal?.links).toBeUndefined()\n expect(\n await reader.getByPrimaryId({\n projectId,\n objectTypeId: Proposal.id,\n primaryId: \"proposal-2\",\n })\n ).toBeNull()\n\n const item = await reader.getByPrimaryId({\n projectId,\n objectTypeId: LineItem.id,\n primaryId: \"item:opaque|1\",\n })\n expect(item?.properties).toEqual({\n id: \"item:opaque|1\",\n name: \"Visible item\",\n reviewNote: \"Property union\",\n })\n expect(\n await reader.selectsObjectProperties({\n projectId,\n items: [\n { objectTypeId: LineItem.id, primaryId: \"item:opaque|1\", propertyId: \"price\" },\n { objectTypeId: LineItem.id, primaryId: \"item:opaque|1\", propertyId: \"price\" },\n { objectTypeId: LineItem.id, primaryId: \"item:opaque|1\", propertyId: \"secret\" },\n { objectTypeId: LineItem.id, primaryId: \"item-hidden\", propertyId: \"id\" },\n ],\n })\n ).toEqual([true, true, false, false])\n\n const listed = await reader.list({\n projectId,\n objectTypeId: LineItem.id,\n limit: 1,\n orderBy: \"primaryId\",\n order: \"asc\",\n })\n expect(listed).toMatchObject({ total: 2, hasMore: true })\n expect(listed.objects).toHaveLength(1)\n expect(listed.objects[0]?.primaryId).toBe(\"item:opaque|1\")\n expect(listed.objects[0]?.properties).toEqual({\n id: \"item:opaque|1\",\n name: \"Visible item\",\n reviewNote: \"Property union\",\n })\n expect(listed.objects[0]?.links).toBeUndefined()\n\n if (!item) throw new Error(\"expected a selected item\")\n item.properties.name = \"mutated outside provider\"\n expect(\n (\n await reader.getByPrimaryId({\n projectId,\n objectTypeId: LineItem.id,\n primaryId: \"item:opaque|1\",\n })\n )?.properties\n ).toEqual({ id: \"item:opaque|1\", name: \"Visible item\", reviewNote: \"Property union\" })\n\n await fixture.seed({\n objects: [object(LineItem.id, \"item-live\", { id: \"item-live\", name: \"Added later\" })],\n links: [linkRow(Proposal.id, \"proposal-1\", \"items\", LineItem.id, \"item-live\")],\n })\n expect(\n (\n await reader.getByPrimaryId({\n projectId,\n objectTypeId: LineItem.id,\n primaryId: \"item-live\",\n })\n )?.properties\n ).toEqual({ id: \"item-live\", name: \"Added later\" })\n\n await fixture.commit([\n {\n id: \"delete-live-link\",\n kind: \"link.delete\",\n ref: linkRow(Proposal.id, \"proposal-1\", \"items\", LineItem.id, \"item-live\").ref,\n },\n ])\n expect(\n await reader.getByPrimaryId({\n projectId,\n objectTypeId: LineItem.id,\n primaryId: \"item-live\",\n })\n ).toBeNull()\n })\n })\n\n test(\"supports an empty selection and rejects every cross-project call\", async () => {\n await withHarness(async ({ harness }) => {\n const empty = createReader(harness.objectReadScopeFactory, {\n kind: \"selected\",\n roots: [],\n })\n expect((await empty.list({ projectId })).total).toBe(0)\n expect(\n await empty.queryObjects?.({\n projectId,\n query: { kind: \"start\", objectTypeId: Proposal.id },\n })\n ).toMatchObject({ objects: [], total: 0 })\n\n const reader = createReader(harness.objectReadScopeFactory)\n const queryObjects = reader.queryObjects?.bind(reader)\n const countObjects = reader.countObjects?.bind(reader)\n const existsObjects = reader.existsObjects?.bind(reader)\n const facetObjects = reader.facetObjects?.bind(reader)\n if (!queryObjects || !countObjects || !existsObjects || !facetObjects) {\n throw new Error(\"Selected object-read scope contract requires every query terminal.\")\n }\n const crossProjectCalls: readonly (() => Promise<unknown>)[] = [\n () =>\n queryObjects({\n projectId: otherProjectId,\n query: { kind: \"start\", objectTypeId: Proposal.id },\n }),\n () =>\n countObjects({\n projectId: otherProjectId,\n query: { kind: \"start\", objectTypeId: Proposal.id },\n }),\n () =>\n existsObjects({\n projectId: otherProjectId,\n query: { kind: \"start\", objectTypeId: Proposal.id },\n }),\n () =>\n facetObjects({\n projectId: otherProjectId,\n query: { kind: \"start\", objectTypeId: Proposal.id },\n facets: [{ propertyId: \"category\", limit: 1 }],\n }),\n () =>\n reader.getByPrimaryId({\n projectId: otherProjectId,\n objectTypeId: Proposal.id,\n primaryId: \"proposal-1\",\n }),\n () =>\n reader.selectsObjectProperties({\n projectId: otherProjectId,\n items: [{ objectTypeId: Proposal.id, primaryId: \"proposal-1\", propertyId: \"id\" }],\n }),\n () =>\n reader.listLinks({\n projectId: otherProjectId,\n objectTypeId: Proposal.id,\n objectId: \"proposal-1\",\n }),\n () =>\n reader.getByPrimaryIdBatch({\n projectId: otherProjectId,\n items: [{ objectTypeId: Proposal.id, primaryId: \"proposal-1\" }],\n }),\n () =>\n reader.listLinksBatch({\n projectId: otherProjectId,\n items: [{ objectTypeId: Proposal.id, objectId: \"proposal-1\", linkId: \"items\" }],\n }),\n () =>\n reader.queryLinks({\n projectId: otherProjectId,\n objectRefs: [{ objectTypeId: Proposal.id, primaryId: \"proposal-1\" }],\n direction: \"outgoing\",\n limit: 1,\n }),\n () => reader.list({ projectId: otherProjectId }),\n ]\n\n for (const call of crossProjectCalls) {\n await expect(call()).rejects.toThrow(`belongs to project '${projectId}'`)\n }\n })\n })\n\n test(\"makes every selected target invisible as soon as its root is deleted\", async () => {\n await withHarness(async ({ harness, fixture }) => {\n const reader = createReader(harness.objectReadScopeFactory)\n await fixture.commit([\n {\n id: \"delete-selected-root\",\n kind: \"object.delete\",\n ref: { objectTypeId: Proposal.id, primaryId: \"proposal-1\" },\n },\n ])\n\n for (const ref of [\n { objectTypeId: Proposal.id, primaryId: \"proposal-1\" },\n { objectTypeId: LineItem.id, primaryId: \"item:opaque|1\" },\n { objectTypeId: LineItem.id, primaryId: \"reviewer-1\" },\n { objectTypeId: Product.id, primaryId: \"product-1\" },\n ]) {\n expect(await reader.getByPrimaryId({ projectId, ...ref })).toBeNull()\n }\n\n expect(await reader.list({ projectId })).toEqual({ objects: [], hasMore: false, total: 0 })\n expect(\n await reader.queryObjects?.({\n projectId,\n query: { kind: \"start\", objectTypeId: LineItem.id },\n })\n ).toMatchObject({ objects: [], total: 0 })\n expect(\n await reader.listLinks({\n projectId,\n objectTypeId: Proposal.id,\n objectId: \"proposal-1\",\n })\n ).toEqual([])\n expect(\n await reader.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Proposal.id, primaryId: \"proposal-1\" }],\n direction: \"outgoing\",\n limit: 10,\n })\n ).toEqual({ links: [], hasMore: false })\n })\n })\n\n test(\"uses collision-safe batch keys and exact incoming, outgoing, and self-loop semantics\", async () => {\n await withHarness(async ({ harness }) => {\n const reader = createReader(harness.objectReadScopeFactory)\n const objects = await reader.getByPrimaryIdBatch({\n projectId,\n items: [\n { objectTypeId: Proposal.id, primaryId: \"proposal-1\" },\n { objectTypeId: LineItem.id, primaryId: \"item:opaque|1\" },\n { objectTypeId: Proposal.id, primaryId: \"proposal-2\" },\n ],\n })\n expect([...objects.keys()]).toEqual([\n objectBatchKey(Proposal.id, \"proposal-1\"),\n objectBatchKey(LineItem.id, \"item:opaque|1\"),\n ])\n expect(objects.get(objectBatchKey(Proposal.id, \"proposal-1\"))?.properties).toEqual({\n id: \"proposal-1\",\n title: \"Visible proposal\",\n rank: 50,\n category: \"visible\",\n embedding: [0, 1],\n })\n expect(objects.get(objectBatchKey(Proposal.id, \"proposal-1\"))?.links).toBeUndefined()\n expect(objects.get(objectBatchKey(LineItem.id, \"item:opaque|1\"))?.properties).toEqual({\n id: \"item:opaque|1\",\n name: \"Visible item\",\n reviewNote: \"Property union\",\n })\n expect(objects.get(objectBatchKey(LineItem.id, \"item:opaque|1\"))?.links).toBeUndefined()\n\n const outgoing = await reader.listLinksBatch({\n projectId,\n direction: \"outgoing\",\n items: [{ objectTypeId: Proposal.id, objectId: \"proposal-1\", linkId: \"items\" }],\n })\n const outgoingRows = outgoing.get(linkBatchKey(Proposal.id, \"proposal-1\", \"items\"))\n expect(outgoingRows).toHaveLength(1)\n expect(outgoingRows?.[0]?.targetId).toBe(\"item:opaque|1\")\n expect(outgoingRows?.[0]?.properties).toEqual({ position: 1, label: \"primary\" })\n\n const listedLinks = await reader.listLinks({\n projectId,\n objectTypeId: Proposal.id,\n objectId: \"proposal-1\",\n linkId: \"items\",\n })\n expect(listedLinks).toHaveLength(1)\n expect(listedLinks[0]?.targetId).toBe(\"item:opaque|1\")\n expect(listedLinks[0]?.properties).toEqual({ position: 1, label: \"primary\" })\n\n const queriedLinks = await reader.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Proposal.id, primaryId: \"proposal-1\" }],\n direction: \"outgoing\",\n linkId: \"items\",\n limit: 10,\n })\n expect(queriedLinks.links).toHaveLength(1)\n expect(queriedLinks.links[0]?.targetId).toBe(\"item:opaque|1\")\n expect(queriedLinks.links[0]?.properties).toEqual({ position: 1, label: \"primary\" })\n\n const incoming = await reader.listLinksBatch({\n projectId,\n direction: \"incoming\",\n items: [{ objectTypeId: LineItem.id, objectId: \"item:opaque|1\", linkId: \"items\" }],\n })\n const incomingRows = incoming.get(linkBatchKey(LineItem.id, \"item:opaque|1\", \"items\"))\n expect(incomingRows).toHaveLength(1)\n expect(incomingRows?.[0]?.properties).toEqual({ position: 1, label: \"primary\" })\n expect(incoming.has(linkBatchKey(Proposal.id, \"proposal-1\", \"items\"))).toBe(false)\n\n const selfLoop = await reader.listLinksBatch({\n projectId,\n direction: \"both\",\n items: [{ objectTypeId: Proposal.id, objectId: \"proposal-1\", linkId: \"related\" }],\n })\n expect(selfLoop.get(linkBatchKey(Proposal.id, \"proposal-1\", \"related\"))).toHaveLength(1)\n })\n })\n\n test(\"applies scope before query ordering, pagination, predicates, and aggregate terminals\", async () => {\n await withHarness(async ({ harness }) => {\n const reader = createReader(harness.objectReadScopeFactory)\n const query = async (value: ObjectQuery) =>\n reader.queryObjects?.({ projectId, query: value })\n\n const queriedProposal = await query({ kind: \"start\", objectTypeId: Proposal.id })\n expect(queriedProposal?.objects.map((row) => row.primaryId)).toEqual([\"proposal-1\"])\n expect(queriedProposal?.objects[0]?.properties).toEqual({\n id: \"proposal-1\",\n title: \"Visible proposal\",\n rank: 50,\n category: \"visible\",\n embedding: [0, 1],\n })\n expect(queriedProposal?.objects[0]?.links).toBeUndefined()\n expect(\n (\n await query({\n kind: \"refs\",\n refs: [\n { objectTypeId: Proposal.id, primaryId: \"proposal-2\" },\n { objectTypeId: Proposal.id, primaryId: \"proposal-1\" },\n { objectTypeId: LineItem.id, primaryId: \"item:opaque|1\" },\n ],\n })\n )?.objects.map((row) => `${row.objectTypeId}:${row.primaryId}`)\n ).toEqual([`${LineItem.id}:item:opaque|1`, `${Proposal.id}:proposal-1`])\n expect(\n (\n await query({\n kind: \"filter\",\n input: { kind: \"start\", objectTypeId: Proposal.id },\n predicate: { op: \"eq\", propertyId: \"secret\", value: \"root-secret\" },\n })\n )?.objects\n ).toEqual([])\n expect(\n (\n await query({\n kind: \"limit\",\n limit: 1,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"rank\", direction: \"asc\" }],\n input: { kind: \"start\", objectTypeId: Proposal.id },\n },\n })\n )?.objects.map((row) => row.primaryId)\n ).toEqual([\"proposal-1\"])\n expect(\n (\n await query({\n kind: \"text\",\n input: { kind: \"start\", objectTypeId: Proposal.id },\n query: \"visible\",\n fields: [\"title\"],\n })\n )?.objects.map((row) => row.primaryId)\n ).toEqual([\"proposal-1\"])\n expect(\n (\n await query({\n kind: \"set\",\n op: \"union\",\n inputs: [\n { kind: \"start\", objectTypeId: Proposal.id },\n { kind: \"start\", objectTypeId: Product.id },\n ],\n })\n )?.objects.map((row) => row.primaryId)\n ).toEqual(expect.arrayContaining([\"proposal-1\", \"product-1\"]))\n\n const firstPage = await query({\n kind: \"page\",\n pageSize: 1,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: { kind: \"start\", objectTypeId: LineItem.id },\n },\n })\n expect(firstPage).toMatchObject({\n hasMore: true,\n objects: [{ primaryId: \"item:opaque|1\" }],\n })\n expect(firstPage?.nextPageToken).toBeString()\n const secondPage = await query({\n kind: \"page\",\n pageSize: 1,\n pageToken: firstPage?.nextPageToken,\n input: {\n kind: \"sort\",\n fields: [{ kind: \"property\", propertyId: \"id\", direction: \"asc\" }],\n input: { kind: \"start\", objectTypeId: LineItem.id },\n },\n })\n expect(secondPage).toMatchObject({\n hasMore: false,\n objects: [{ primaryId: \"reviewer-1\" }],\n })\n expect(secondPage?.objects[0]?.properties).toEqual({\n id: \"reviewer-1\",\n reviewNote: \"selected\",\n })\n expect(secondPage?.objects[0]?.links).toBeUndefined()\n\n expect(\n await reader.countObjects?.({\n projectId,\n query: { kind: \"start\", objectTypeId: Proposal.id },\n })\n ).toEqual({ count: 1 })\n expect(\n await reader.existsObjects?.({\n projectId,\n query: {\n kind: \"filter\",\n input: { kind: \"start\", objectTypeId: Proposal.id },\n predicate: { op: \"eq\", propertyId: \"secret\", value: \"root-secret\" },\n },\n })\n ).toEqual({ exists: false })\n expect(\n await reader.facetObjects?.({\n projectId,\n query: { kind: \"start\", objectTypeId: Proposal.id },\n facets: [\n { propertyId: \"category\", limit: 10 },\n { propertyId: \"secret\", limit: 10 },\n ],\n })\n ).toEqual({\n facets: [\n { propertyId: \"category\", buckets: [{ value: \"visible\", count: 1 }] },\n { propertyId: \"secret\", buckets: [] },\n ],\n })\n })\n })\n\n test(\"preserves path provenance through traverse and nested expand\", async () => {\n await withHarness(async ({ harness }) => {\n const reader = createReader(harness.objectReadScopeFactory)\n const traversed = await reader.queryObjects?.({\n projectId,\n query: {\n kind: \"traverse\",\n direction: \"outgoing\",\n linkId: \"product\",\n input: { kind: \"start\", objectTypeId: LineItem.id },\n },\n })\n expect(traversed?.objects.map((row) => row.primaryId)).toEqual([\"product-1\"])\n expect(traversed?.objects[0]?.properties).toEqual({\n id: \"product-1\",\n name: \"Visible product\",\n })\n expect(traversed?.objects[0]?.links).toBeUndefined()\n expect(\n await reader.getByPrimaryId({\n projectId,\n objectTypeId: Product.id,\n primaryId: \"product-review\",\n })\n ).toBeNull()\n\n const expanded = await executeObjectQuery(\n {\n projectId,\n query: {\n kind: \"expand\",\n input: {\n kind: \"limit\",\n limit: 10,\n input: { kind: \"start\", objectTypeId: Proposal.id },\n },\n expansions: [\n {\n linkId: \"items\",\n direction: \"outgoing\",\n expand: [{ linkId: \"product\", direction: \"outgoing\" }],\n },\n ],\n },\n },\n { ontology: objectReadScopeContractOntology, storage: reader }\n )\n const items = expanded.objects[0]?.links?.items\n expect(Array.isArray(items)).toBe(true)\n if (!Array.isArray(items)) throw new Error(\"expected expanded items\")\n expect(items[0]?.linkProperties).toEqual({ position: 1, label: \"primary\" })\n const expandedProduct = items[0]?.links?.product\n expect(expandedProduct).toMatchObject({ primaryId: \"product-1\" })\n if (!expandedProduct || Array.isArray(expandedProduct)) {\n throw new Error(\"expected one expanded product\")\n }\n expect(expandedProduct.properties).toEqual({\n id: \"product-1\",\n name: \"Visible product\",\n })\n expect(expandedProduct.links).toBeUndefined()\n })\n })\n\n test(\"filters unauthorized links and endpoints before canonical link pagination\", async () => {\n await withHarness(async ({ harness }) => {\n const reader = createReader(harness.objectReadScopeFactory, visibleLinkScope())\n expect(\n await reader.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Proposal.id, primaryId: \"proposal-1\" }],\n direction: \"outgoing\",\n limit: 1,\n })\n ).toMatchObject({ links: [{ linkId: \"zVisible\" }], hasMore: false })\n expect(\n await reader.queryLinks({\n projectId,\n objectRefs: [{ objectTypeId: Proposal.id, primaryId: \"proposal-1\" }],\n direction: \"outgoing\",\n endpointObjectTypeIds: [Proposal.id],\n limit: 1,\n })\n ).toEqual({ links: [], hasMore: false })\n })\n })\n\n test(\"enforces facet, traversal, and complete batch-output budgets independently\", async () => {\n await withHarness(async ({ harness }) => {\n const traversalBound = createReader(harness.objectReadScopeFactory, proposalScope(), {\n ...limits,\n maxTraversalFacts: 1,\n })\n await expect(traversalBound.list({ projectId })).rejects.toMatchObject({\n code: \"object_read_limit_exceeded\",\n metric: \"traversalFacts\",\n limit: 1,\n })\n\n const tinyOutput = createReader(harness.objectReadScopeFactory, proposalScope(), {\n ...limits,\n maxOutputJsonBytes: 8,\n })\n await expect(\n tinyOutput.getByPrimaryIdBatch({\n projectId,\n items: [{ objectTypeId: LineItem.id, primaryId: \"item:opaque|1\" }],\n })\n ).rejects.toMatchObject({\n code: \"object_read_limit_exceeded\",\n metric: \"outputJsonBytes\",\n limit: 8,\n })\n\n const facetBound = createReader(harness.objectReadScopeFactory, proposalScope(), {\n ...limits,\n maxTraversalFacts: 1,\n })\n await expect(\n facetBound.facetObjects?.({\n projectId,\n query: { kind: \"start\", objectTypeId: Proposal.id },\n facets: Array.from({ length: MAX_OBJECT_READ_FACETS + 1 }, (_, index) => ({\n propertyId: `facet-${index}`,\n limit: 1,\n })),\n })\n ).rejects.toThrow(`between 0 and ${MAX_OBJECT_READ_FACETS} facets`)\n })\n })\n })\n}\n\nfunction createReader(\n factory: ObjectReadScopeFactory,\n scope: SelectedObjectReadScope = proposalScope(),\n executionLimits: ObjectReadExecutionLimits = limits\n): ObjectReadStorage {\n return factory.createSelectedReadScope({\n projectId,\n scope: compileSelectedObjectReadScope(scope),\n limits: executionLimits,\n })\n}\n\nfunction proposalScope(): SelectedObjectReadScope {\n return {\n kind: \"selected\",\n roots: [\n {\n anchor: { objectTypeId: Proposal.id, primaryId: \"proposal-1\" },\n node: {\n objects: [\n {\n objectTypeId: Proposal.id,\n propertyIds: [\"id\", \"title\", \"rank\", \"category\", \"embedding\"],\n },\n ],\n links: [\n {\n definitions: [\n {\n sourceObjectTypeId: Proposal.id,\n linkId: \"items\",\n targetObjectTypeIds: [LineItem.id],\n propertyIds: [\"position\"],\n },\n {\n sourceObjectTypeId: Proposal.id,\n linkId: \"items\",\n targetObjectTypeIds: [LineItem.id],\n propertyIds: [\"label\", \"position\"],\n },\n ],\n target: {\n objects: [{ objectTypeId: LineItem.id, propertyIds: [\"id\", \"name\", \"price\"] }],\n links: [\n {\n definitions: [\n {\n sourceObjectTypeId: LineItem.id,\n linkId: \"product\",\n targetObjectTypeIds: [Product.id],\n propertyIds: [],\n },\n ],\n target: {\n objects: [{ objectTypeId: Product.id, propertyIds: [\"id\", \"name\"] }],\n links: [],\n },\n },\n ],\n },\n },\n {\n definitions: [\n {\n sourceObjectTypeId: Proposal.id,\n linkId: \"reviewers\",\n targetObjectTypeIds: [LineItem.id],\n propertyIds: [],\n },\n ],\n target: {\n objects: [{ objectTypeId: LineItem.id, propertyIds: [\"id\", \"reviewNote\"] }],\n links: [],\n },\n },\n {\n definitions: [\n {\n sourceObjectTypeId: Proposal.id,\n linkId: \"related\",\n targetObjectTypeIds: [Proposal.id],\n propertyIds: [],\n },\n ],\n target: {\n objects: [{ objectTypeId: Proposal.id, propertyIds: [\"id\", \"title\"] }],\n links: [],\n },\n },\n ],\n },\n },\n ],\n }\n}\n\nfunction visibleLinkScope(): SelectedObjectReadScope {\n return {\n kind: \"selected\",\n roots: [\n {\n anchor: { objectTypeId: Proposal.id, primaryId: \"proposal-1\" },\n node: {\n objects: [{ objectTypeId: Proposal.id, propertyIds: [\"id\"] }],\n links: [\n {\n definitions: [\n {\n sourceObjectTypeId: Proposal.id,\n linkId: \"zVisible\",\n targetObjectTypeIds: [Product.id],\n propertyIds: [],\n },\n ],\n target: {\n objects: [{ objectTypeId: Product.id, propertyIds: [\"id\"] }],\n links: [],\n },\n },\n ],\n },\n },\n ],\n }\n}\n\nasync function seed(fixture: MaterializerTestFixture): Promise<void> {\n await fixture.seed({\n objects: [\n object(Proposal.id, \"proposal-1\", {\n id: \"proposal-1\",\n title: \"Visible proposal\",\n rank: 50,\n category: \"visible\",\n embedding: [0, 1],\n secret: \"root-secret\",\n }),\n object(Proposal.id, \"proposal-2\", {\n id: \"proposal-2\",\n title: \"Hidden proposal\",\n rank: 1,\n category: \"hidden\",\n embedding: [1, 0],\n secret: \"hidden-secret\",\n }),\n object(LineItem.id, \"item:opaque|1\", {\n id: \"item:opaque|1\",\n name: \"Visible item\",\n reviewNote: \"Property union\",\n internal: \"hidden\",\n }),\n object(LineItem.id, \"item-hidden\", { id: \"item-hidden\", name: \"Hidden item\" }),\n object(LineItem.id, \"reviewer-1\", {\n id: \"reviewer-1\",\n name: \"Visible reviewer\",\n reviewNote: \"selected\",\n }),\n object(Product.id, \"product-1\", {\n id: \"product-1\",\n name: \"Visible product\",\n internal: \"hidden\",\n }),\n object(Product.id, \"product-review\", {\n id: \"product-review\",\n name: \"Product outside selected path\",\n }),\n ],\n links: [\n linkRow(Proposal.id, \"proposal-1\", \"items\", LineItem.id, \"item:opaque|1\", {\n position: 1,\n label: \"primary\",\n internal: \"hidden\",\n }),\n linkRow(Proposal.id, \"proposal-2\", \"items\", LineItem.id, \"item-hidden\"),\n linkRow(Proposal.id, \"proposal-1\", \"reviewers\", LineItem.id, \"item:opaque|1\"),\n linkRow(Proposal.id, \"proposal-1\", \"reviewers\", LineItem.id, \"reviewer-1\"),\n linkRow(Proposal.id, \"proposal-1\", \"related\", Proposal.id, \"proposal-1\"),\n linkRow(LineItem.id, \"item:opaque|1\", \"product\", Product.id, \"product-1\"),\n linkRow(LineItem.id, \"reviewer-1\", \"product\", Product.id, \"product-review\"),\n linkRow(Proposal.id, \"proposal-1\", \"aPrivate\", Product.id, \"product-review\"),\n linkRow(Proposal.id, \"proposal-1\", \"zVisible\", Product.id, \"product-1\"),\n ],\n })\n}\n\nfunction object(\n objectTypeId: string,\n primaryId: string,\n properties: Readonly<Record<string, JsonValue>>\n): MaterializerFixtureObject {\n return {\n ref: { objectTypeId, primaryId },\n properties,\n }\n}\n\nfunction linkRow(\n sourceObjectTypeId: string,\n sourcePrimaryId: string,\n linkId: string,\n targetObjectTypeId: string,\n targetPrimaryId: string,\n properties?: Readonly<Record<string, JsonValue>>\n): MaterializerFixtureLink {\n return {\n ref: {\n source: { objectTypeId: sourceObjectTypeId, primaryId: sourcePrimaryId },\n linkId,\n target: { objectTypeId: targetObjectTypeId, primaryId: targetPrimaryId },\n },\n ...(properties === undefined ? {} : { properties }),\n }\n}\n",
30
- "import { describe, expect, test } from \"bun:test\"\nimport type {\n ProjectionExecution,\n ProjectionMaterializationIdentity,\n} from \"../materialization/model\"\nimport type {\n MaterializationPlanFinalization,\n MaterializationPlanHeader,\n MaterializationSession,\n OntologyOutboxFailure,\n OntologySourceRecord,\n} from \"../storage/ontology\"\nimport type { ProjectionRunStorage } from \"../storage/projection-runs\"\nimport {\n commitEmptyEdit,\n commitExactObject,\n contractEditHeader,\n contractEditResult,\n ensureContractExecution,\n type OntologyContractStorage,\n} from \"./ontology-contract-fixture\"\nimport { startTestProjectionRun } from \"./projection-execution\"\n\nexport interface OntologyStorageContractStorage extends OntologyContractStorage {\n readonly projectionRuns: ProjectionRunStorage\n}\n\nexport interface OntologyStorageContractSuiteOptions<\n TStorage extends OntologyStorageContractStorage = OntologyStorageContractStorage,\n> {\n /** Factory that returns a fresh, fully transaction-capable storage facade for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional provider setup invoked after the storage facade is created. */\n readonly setup?: (storage: TStorage) => void | Promise<void>\n /** Optional provider cleanup invoked after every test, including failed tests. */\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst replacementIdentity = (\n versionId: string,\n projectionId = \"contract.devices\"\n): Extract<ProjectionMaterializationIdentity, { readonly projectionKind: \"object\" }> => ({\n projectionId,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: {\n datasetId: \"contract.devices\",\n versionId,\n createdAt: `2026-01-${versionId.padStart(2, \"0\")}T00:00:00.000Z`,\n },\n ontologyRevision: \"ontology-contract-revision\",\n projectionRevision: \"projection-contract-revision\",\n ownershipHash: \"ownership-contract-hash\",\n})\n\nconst emptyProjectionCounts = {\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} as const\n\ninterface ReadyCandidate {\n readonly identity: Extract<\n ProjectionMaterializationIdentity,\n { readonly projectionKind: \"object\" }\n >\n readonly execution: ProjectionExecution\n readonly materializationId: string\n readonly source: { readonly projectionId: string }\n readonly executionId: string\n}\n\nfunction ontologyOutboxFailure(message: string): OntologyOutboxFailure {\n return {\n code: \"event.delivery_failed\",\n message,\n retryable: true,\n at: \"2026-01-03T02:00:00.000Z\",\n }\n}\n\n/**\n * Runs provider-level ontology persistence contracts without asking the provider\n * to interpret ontology definitions, edits, or projection rows. Exact plans are\n * supplied directly and the suite checks durable lifecycle, CAS, outbox, and\n * cross-facade transaction behavior.\n */\nexport function runOntologyStorageContractSuite<TStorage extends OntologyStorageContractStorage>(\n label: string,\n options: OntologyStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await options.setup?.(storage)\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"stores one authoritative commit and rejects duplicate commit identities\", async () => {\n await withStorage(async (storage) => {\n await commitEmptyEdit(storage, \"commit-one\")\n const stored = await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"commit-one\",\n })\n expect(stored).toMatchObject({\n id: \"commit-one\",\n idempotencyKey: \"runtime:commit-one\",\n requestHash: \"hash:commit-one\",\n result: { commitId: \"commit-one\" },\n })\n expect(\n await storage.ontology.commits.getByIdempotencyKey({\n projectId: \"contract-project\",\n idempotencyKey: \"runtime:commit-one\",\n })\n ).toEqual(stored)\n\n await expect(commitEmptyEdit(storage, \"commit-one\")).rejects.toMatchObject({\n kind: \"idempotency\",\n })\n const divergent = structuredClone(contractEditHeader(\"different-id\"))\n ;(divergent.commit as { idempotencyKey: string }).idempotencyKey = \"runtime:commit-one\"\n ;(divergent.commit as { requestHash: string }).requestHash = \"different-hash\"\n await expect(\n storage.transaction(async (tx) => {\n await ensureContractExecution(tx, divergent)\n await tx.ontology.materializations.begin(divergent)\n })\n ).rejects.toMatchObject({ kind: \"idempotency\" })\n\n const list = await storage.ontology.commits.list({\n projectId: \"contract-project\",\n limit: 1,\n offset: 0,\n })\n expect(list).toMatchObject({ total: 1, hasMore: false })\n expect(list.commits.map((commit) => commit.id)).toEqual([\"commit-one\"])\n })\n })\n\n test(\"rejects an ontology commit whose execution does not exist\", async () => {\n await withStorage(async (storage) => {\n const header = contractEditHeader(\"missing-execution\")\n await expect(\n storage.transaction(async (tx) => {\n const session = await tx.ontology.materializations.begin(header)\n await tx.ontology.materializations.finalize({\n session,\n finalization: {\n sourceActivations: [],\n result: contractEditResult(header.commit.id),\n },\n })\n })\n ).rejects.toThrow()\n await expect(\n storage.ontology.commits.getById({\n projectId: header.commit.projectId,\n id: header.commit.id,\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"rejects unfinished sessions and rolls back their authoritative writes\", async () => {\n await withStorage(async (storage) => {\n const header = contractEditHeader(\"session-contract\")\n await expect(storage.ontology.materializations.begin(header)).rejects.toThrow(\n \"active storage transaction\"\n )\n\n await expect(\n commitExactObject(storage, \"unfinished-session\", { omitFinalize: true })\n ).rejects.toThrow(\"unfinished materialization session\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"unfinished-session\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"unfinished-session\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2027-01-01T00:00:00.000Z\",\n limit: 10,\n leaseId: \"unfinished-session-check\",\n leaseExpiresAt: \"2027-01-01T01:00:00.000Z\",\n })\n ).toEqual([])\n\n let leakedSession: MaterializationSession | undefined\n await expect(\n storage.transaction(async (tx) => {\n const leakedHeader = contractEditHeader(\"leaked-session\")\n await ensureContractExecution(tx, leakedHeader)\n leakedSession = await tx.ontology.materializations.begin(leakedHeader)\n })\n ).rejects.toThrow(\"unfinished materialization session\")\n if (!leakedSession) throw new Error(\"Expected an unfinished session handle\")\n const staleSession = leakedSession\n await storage.transaction(async (tx) => {\n await expect(\n tx.ontology.materializations.finalize({\n session: staleSession,\n finalization: {\n sourceActivations: [],\n result: contractEditResult(\"leaked-session\"),\n },\n })\n ).rejects.toThrow(\"inactive\")\n })\n })\n })\n\n test(\"stages insert-only source rows, seals counts, and fences stale execution tokens\", async () => {\n await withStorage(async (storage) => {\n const identity = replacementIdentity(\"01\")\n const claimed = await startTestProjectionRun(storage, {\n id: \"staging-run\",\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n const execution = claimed.execution\n const source = { projectionId: identity.projectionId }\n await expect(\n storage.ontology.sources.beginMaterialization({\n projectId: \"contract-project\",\n source,\n materializationId: \"mismatched-candidate\",\n execution,\n projectionKind: \"link\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: \"2026-01-01T00:00:00.000Z\",\n })\n ).rejects.toThrow(\"identity\")\n await storage.ontology.sources.beginMaterialization({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: \"2026-01-01T00:00:00.000Z\",\n })\n expect(\n await storage.ontology.sources.getActive({ projectId: \"contract-project\", source })\n ).toBeNull()\n\n const row = {\n root: {\n kind: \"object\" as const,\n ref: { objectTypeId: \"ContractDevice\", primaryId: \"one\" },\n },\n assertion: {\n kind: \"object\" as const,\n ref: { objectTypeId: \"ContractDevice\", primaryId: \"one\" },\n properties: { name: \"one\" },\n },\n stagingOrdinal: 0,\n }\n expect(\n await storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [row],\n })\n ).toEqual({ inserted: 1, unchanged: 0 })\n expect(\n await storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [row],\n })\n ).toEqual({ inserted: 0, unchanged: 1 })\n await expect(\n storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [\n {\n ...row,\n assertion: { ...row.assertion, properties: { name: \"different\" } },\n },\n ],\n })\n ).rejects.toThrow()\n\n const ready = await storage.ontology.sources.markReady({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rootCount: 1,\n assertionCount: 1,\n readyAt: \"2026-01-01T00:01:00.000Z\",\n })\n expect(ready).toMatchObject({ status: \"ready\", rootCount: 1, assertionCount: 1 })\n\n const reclaimed = await storage.projectionRuns.startOrReclaim({\n id: claimed.run.id,\n projectId: claimed.run.projectId,\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n await expect(\n storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [],\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n await expect(\n storage.ontology.sources.markReady({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rootCount: 1,\n assertionCount: 1,\n readyAt: \"2026-01-01T00:03:00.000Z\",\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n await expect(\n storage.ontology.sources.abandon({\n kind: \"candidate\",\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n abandonedAt: \"2026-01-01T00:03:00.000Z\",\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n const abandoned = await storage.ontology.sources.abandon({\n kind: \"reclaim\",\n projectId: \"contract-project\",\n source,\n execution: reclaimed.execution,\n abandonedAt: \"2026-01-01T00:02:00.000Z\",\n })\n expect(abandoned).toMatchObject({ status: \"abandoned\", executionToken: null })\n expect(\n await storage.ontology.sources.summarizeTerminal({ projectId: \"contract-project\" })\n ).toEqual({ count: 1, oldestTerminalAt: \"2026-01-01T00:02:00.000Z\" })\n\n expect(\n await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 1,\n })\n ).toEqual({ rowsDeleted: 1, materializationsDeleted: 0 })\n expect(\n await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 1,\n })\n ).toEqual({ rowsDeleted: 0, materializationsDeleted: 1 })\n expect(\n await storage.ontology.sources.summarizeTerminal({ projectId: \"contract-project\" })\n ).toEqual({ count: 0, oldestTerminalAt: null })\n })\n })\n\n test(\"atomically activates explicit empty candidates and rejects competing stale heads\", async () => {\n await withStorage(async (storage) => {\n const first = await createReadyEmptyCandidate(storage, \"run-one\", \"candidate-one\", \"01\")\n await activateEmptyCandidate(\n storage,\n first,\n null,\n \"commit-source-one\",\n \"2026-01-03T00:00:00.000Z\"\n )\n const activeOne = await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n expect(activeOne).toMatchObject({\n materializationId: first.materializationId,\n status: \"active\",\n rootCount: 0,\n assertionCount: 0,\n executionToken: null,\n })\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"projection\", projectionRunId: first.execution.projectionRunId },\n })\n ).toMatchObject({ id: \"commit-source-one\" })\n await expect(\n activateEmptyCandidate(\n storage,\n first,\n activeOne,\n \"duplicate-projection-origin\",\n \"2026-01-03T01:00:00.000Z\"\n )\n ).rejects.toMatchObject({ kind: \"run-correlation\" })\n\n const left = await createReadyEmptyCandidate(storage, \"run-left\", \"candidate-left\", \"02\")\n const right = await createReadyEmptyCandidate(storage, \"run-right\", \"candidate-right\", \"03\")\n await activateEmptyCandidate(\n storage,\n left,\n activeOne!,\n \"commit-source-left\",\n \"2026-01-04T00:00:00.000Z\"\n )\n await expect(\n activateEmptyCandidate(\n storage,\n right,\n activeOne!,\n \"commit-source-right\",\n \"2026-01-05T00:00:00.000Z\"\n )\n ).rejects.toMatchObject({ kind: \"projection-fence\" })\n const currentActive = await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n expect(currentActive).toMatchObject({ materializationId: left.materializationId })\n\n const stale = await createReadyEmptyCandidate(\n storage,\n \"run-stale-activation\",\n \"candidate-stale-activation\",\n \"04\"\n )\n const reclaimed = await storage.projectionRuns.startOrReclaim({\n id: stale.execution.projectionRunId,\n projectId: \"contract-project\",\n identity: stale.identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n await expect(\n activateEmptyCandidate(\n storage,\n stale,\n currentActive,\n \"commit-stale-activation\",\n \"2026-01-06T00:00:00.000Z\"\n )\n ).rejects.toThrow(\"execution token is stale\")\n await storage.ontology.sources.abandon({\n kind: \"reclaim\",\n projectId: \"contract-project\",\n source: stale.source,\n execution: reclaimed.execution,\n abandonedAt: \"2026-01-06T00:01:00.000Z\",\n })\n\n const cleanup = await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 10,\n })\n expect(cleanup.materializationsDeleted).toBeGreaterThanOrEqual(1)\n expect(\n await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n ).toMatchObject({ materializationId: left.materializationId })\n expect(\n await storage.ontology.sources.abandon({\n kind: \"candidate\",\n projectId: \"contract-project\",\n source: right.source,\n materializationId: right.materializationId,\n execution: right.execution,\n abandonedAt: \"2026-02-02T00:00:00.000Z\",\n })\n ).toMatchObject({ status: \"abandoned\" })\n })\n })\n\n test(\"rolls back exact rows, commits, and outbox writes through one transaction facade\", async () => {\n await withStorage(async (storage) => {\n await expect(\n commitExactObject(storage, \"rolled-back\", { throwAfterFinalize: true })\n ).rejects.toThrow(\"contract rollback\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"rolled-back\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"rolled-back\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2027-01-01T00:00:00.000Z\",\n limit: 10,\n leaseId: \"rollback-check\",\n leaseExpiresAt: \"2027-01-01T01:00:00.000Z\",\n })\n ).toEqual([])\n\n await commitExactObject(storage, \"committed\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"committed\",\n })\n ).toMatchObject({ properties: { name: \"committed\" }, lastCommitId: \"committed\" })\n\n await expect(\n commitExactObject(storage, \"stale-object-cas\", { primaryId: \"committed\" })\n ).rejects.toThrow(\"to be absent\")\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"stale-object-cas\",\n })\n ).toBeNull()\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"committed\",\n })\n ).toMatchObject({ properties: { name: \"committed\" }, lastCommitId: \"committed\" })\n })\n })\n\n test(\"leases outbox rows exclusively, reclaims expiry, fences stale workers, and purges\", async () => {\n await withStorage(async (storage) => {\n const outboxB = await commitExactObject(storage, \"outbox-b\")\n const outboxA = await commitExactObject(storage, \"outbox-a\")\n await expect(\n storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-02T19:00:00-05:00\",\n limit: 1,\n leaseId: \"noncanonical-lease\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n ).rejects.toThrow(\"canonical UTC\")\n const first = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-one\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n expect(first).toHaveLength(1)\n expect(first[0]).toMatchObject({ attempts: 1, leaseId: \"lease-one\" })\n expect(first[0].envelope.id).toBe([outboxA.eventId, outboxB.eventId].sort()[0])\n const concurrent = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:30:00.000Z\",\n limit: 10,\n leaseId: \"lease-concurrent\",\n leaseExpiresAt: \"2026-01-03T01:30:00.000Z\",\n })\n expect(concurrent).toHaveLength(1)\n expect(concurrent[0].envelope.id).not.toBe(first[0].envelope.id)\n\n const reclaimed = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T02:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-two\",\n leaseExpiresAt: \"2026-01-03T03:00:00.000Z\",\n })\n expect(reclaimed[0].envelope.id).toBe(first[0].envelope.id)\n await expect(\n storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [first[0].envelope.id],\n leaseId: \"lease-one\",\n publishedAt: \"2026-01-03T02:10:00.000Z\",\n })\n ).rejects.toThrow(\"lease does not match\")\n await storage.ontology.outbox.reschedule({\n projectId: \"contract-project\",\n ids: [reclaimed[0].envelope.id],\n leaseId: \"lease-two\",\n availableAt: \"2026-01-04T00:00:00.000Z\",\n failure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n const retried = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-04T00:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-three\",\n leaseExpiresAt: \"2026-01-04T01:00:00.000Z\",\n })\n expect(retried[0]).toMatchObject({\n attempts: 3,\n lastFailure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n await storage.ontology.outbox.reschedule({\n projectId: \"contract-project\",\n ids: [retried[0].envelope.id],\n leaseId: \"lease-three\",\n availableAt: \"2026-01-04T00:15:00.000Z\",\n })\n const lifecycleRescheduled = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-04T00:15:00.000Z\",\n limit: 1,\n leaseId: \"lease-four\",\n leaseExpiresAt: \"2026-01-04T01:15:00.000Z\",\n })\n expect(lifecycleRescheduled[0]).toMatchObject({\n attempts: 4,\n lastFailure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n expect(\n await storage.ontology.outbox.summarize({ projectId: \"contract-project\" })\n ).toMatchObject({ pendingCount: 2, retryingCount: 2, maxAttempts: 4 })\n await storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [lifecycleRescheduled[0].envelope.id],\n leaseId: \"lease-four\",\n publishedAt: \"2026-01-04T00:30:00.000Z\",\n })\n expect(\n await storage.ontology.outbox.purgePublished({\n projectId: \"contract-project\",\n publishedBefore: \"2026-01-05T00:00:00.000Z\",\n limit: 1,\n })\n ).toBe(1)\n })\n })\n\n test(\"keeps batch outbox settlement atomic when callers catch a stale lease\", async () => {\n await withStorage(async (storage) => {\n await commitExactObject(storage, \"lease-atomic-a\")\n await commitExactObject(storage, \"lease-atomic-b\")\n const claimed = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:00:00.000Z\",\n limit: 10,\n leaseId: \"lease-atomic-old\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n expect(claimed).toHaveLength(2)\n const [reclaimed] = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T02:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-atomic-new\",\n leaseExpiresAt: \"2026-01-03T03:00:00.000Z\",\n })\n const untouched = claimed.find((row) => row.envelope.id !== reclaimed!.envelope.id)!\n\n let conflict: unknown\n await storage.transaction(async (tx) => {\n try {\n await tx.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: claimed.map((row) => row.envelope.id),\n leaseId: \"lease-atomic-old\",\n publishedAt: \"2026-01-03T02:10:00.000Z\",\n })\n } catch (error) {\n conflict = error\n }\n })\n expect(conflict).toMatchObject({ kind: \"outbox-lease\" })\n\n await storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [untouched.envelope.id],\n leaseId: \"lease-atomic-old\",\n publishedAt: \"2026-01-03T02:20:00.000Z\",\n })\n })\n })\n\n test(\"rolls back a telemetry checkpoint with its authoritative ontology commit\", async () => {\n await withStorage(async (storage) => {\n const identity: ProjectionMaterializationIdentity = {\n projectionId: \"contract.telemetry\",\n projectionKind: \"telemetry\",\n protocol: \"telemetry\",\n datasetVersion: {\n datasetId: \"contract.readings\",\n versionId: \"telemetry-version\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-contract-revision\",\n projectionRevision: \"telemetry-contract-revision\",\n ownershipHash: \"telemetry-contract-ownership\",\n }\n const run = await startTestProjectionRun(storage, {\n id: \"telemetry-run\",\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n fixedBatchSize: 2,\n })\n const execute = async (throwAfter: boolean) => {\n await storage.transaction(async (tx) => {\n if (!tx.projectionRuns) {\n throw new Error(\"Contract transaction omitted required storage facades.\")\n }\n const header = telemetryHeader(identity, run.run.id, run.run.executionId)\n const session = await tx.ontology.materializations.begin(header)\n await tx.ontology.materializations.finalize({\n session,\n finalization: {\n sourceActivations: [],\n result: {\n kind: \"telemetry\",\n commitId: header.commit.id,\n created: true,\n eventCount: 0,\n committedAt: header.commit.committedAt,\n pointsCreated: 0,\n pointsUpdated: 0,\n pointsUnchanged: 0,\n latestObjectsChanged: 0,\n },\n },\n })\n await tx.projectionRuns.advanceTelemetryCheckpoint({\n id: run.run.id,\n projectId: run.run.projectId,\n identity,\n executionToken: run.execution.executionToken,\n batchOrdinal: 0,\n batchRowCount: 2,\n batchRowsSkipped: 2,\n inputExhausted: true,\n })\n if (throwAfter) throw new Error(\"telemetry rollback\")\n })\n }\n\n await expect(execute(true)).rejects.toThrow(\"telemetry rollback\")\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"telemetry\", projectionRunId: run.run.id, batchOrdinal: 0 },\n })\n ).toBeNull()\n expect(\n await storage.projectionRuns.getById({ projectId: run.run.projectId, id: run.run.id })\n ).toMatchObject({\n telemetryCheckpoint: { nextBatchOrdinal: 0, nextRowOffset: 0, inputExhausted: false },\n })\n\n await execute(false)\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"telemetry\", projectionRunId: run.run.id, batchOrdinal: 0 },\n })\n ).toMatchObject({ id: \"telemetry-commit\" })\n expect(\n await storage.projectionRuns.getById({ projectId: run.run.projectId, id: run.run.id })\n ).toMatchObject({\n telemetryCheckpoint: { nextBatchOrdinal: 1, nextRowOffset: 2, inputExhausted: true },\n })\n })\n })\n })\n}\n\nasync function createReadyEmptyCandidate(\n storage: OntologyStorageContractStorage,\n runId: string,\n materializationId: string,\n versionId: string\n): Promise<ReadyCandidate> {\n const identity = replacementIdentity(versionId)\n const run = await startTestProjectionRun(storage, {\n id: runId,\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n const execution = run.execution\n const source = { projectionId: identity.projectionId }\n await storage.ontology.sources.beginMaterialization({\n projectId: run.run.projectId,\n source,\n materializationId,\n execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: identity.datasetVersion.createdAt,\n })\n await storage.ontology.sources.markReady({\n projectId: run.run.projectId,\n source,\n materializationId,\n execution,\n rootCount: 0,\n assertionCount: 0,\n readyAt: new Date(Date.parse(identity.datasetVersion.createdAt) + 1_000).toISOString(),\n })\n return { identity, execution, materializationId, source, executionId: run.run.executionId }\n}\n\nasync function activateEmptyCandidate(\n storage: OntologyStorageContractStorage,\n candidate: ReadyCandidate,\n expectedActive: OntologySourceRecord | null,\n commitId: string,\n committedAt: string\n): Promise<void> {\n const expected = {\n source: candidate.source,\n activeMaterializationId: expectedActive?.materializationId ?? null,\n lastCommitId: expectedActive?.lastCommitId ?? null,\n }\n const header: MaterializationPlanHeader = {\n commit: {\n projectId: \"contract-project\",\n id: commitId,\n idempotencyKey: `projection:${commitId}`,\n requestHash: `hash:${commitId}`,\n executionId: candidate.executionId,\n origin: {\n kind: \"projection\",\n projectionId: candidate.source.projectionId,\n projectionRunId: candidate.execution.projectionRunId,\n datasetId: candidate.identity.datasetVersion.datasetId,\n datasetVersionId: candidate.identity.datasetVersion.versionId,\n },\n ontologyRevision: candidate.identity.ontologyRevision,\n projectionRevision: candidate.identity.projectionRevision,\n ownershipHash: candidate.identity.ownershipHash,\n intent: {\n kind: \"projection\",\n source: candidate.source,\n datasetVersion: candidate.identity.datasetVersion,\n },\n committedAt,\n },\n expected: { sources: [expected], objects: [], links: [], linkScopes: [], points: [] },\n }\n const finalization: MaterializationPlanFinalization = {\n sourceActivations: [\n {\n source: candidate.source,\n materializationId: candidate.materializationId,\n execution: candidate.execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: candidate.identity.datasetVersion,\n projectionRevision: candidate.identity.projectionRevision,\n ownershipHash: candidate.identity.ownershipHash,\n ontologyRevision: candidate.identity.ontologyRevision,\n expected,\n lastCommitId: commitId,\n updatedAt: committedAt,\n },\n ],\n result: {\n kind: \"projection\",\n commitId,\n created: true,\n eventCount: 0,\n committedAt,\n counts: emptyProjectionCounts,\n },\n }\n await storage.transaction(async (tx) => {\n if (!tx.projectionRuns) {\n throw new Error(\"Contract transaction omitted required storage facades.\")\n }\n await tx.projectionRuns.lockForMaterialization({\n id: candidate.execution.projectionRunId,\n projectId: header.commit.projectId,\n identity: candidate.identity,\n executionToken: candidate.execution.executionToken,\n })\n const session = await tx.ontology.materializations.begin(header)\n for (const entityKind of [\"object\", \"link\"] as const) {\n for await (const _page of tx.ontology.materializations.streamSourceReplacementState({\n session,\n source: candidate.source,\n candidateMaterializationId: candidate.materializationId,\n entityKind,\n pageRows: 1,\n })) {\n // Empty output intentionally has no classifications or exact writes.\n }\n }\n await tx.ontology.materializations.finalize({ session, finalization })\n })\n}\n\nfunction telemetryHeader(\n identity: ProjectionMaterializationIdentity,\n projectionRunId: string,\n executionId: string\n): MaterializationPlanHeader {\n if (identity.protocol !== \"telemetry\") throw new Error(\"Expected telemetry identity\")\n return {\n commit: {\n projectId: \"contract-project\",\n id: \"telemetry-commit\",\n idempotencyKey: \"telemetry:telemetry-run:0\",\n requestHash: \"hash:telemetry-run:0\",\n executionId,\n origin: {\n kind: \"telemetry\",\n source: {\n kind: \"projection\",\n projectionId: identity.projectionId,\n projectionRunId,\n datasetId: identity.datasetVersion.datasetId,\n datasetVersionId: identity.datasetVersion.versionId,\n batchOrdinal: 0,\n },\n },\n ontologyRevision: identity.ontologyRevision,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n intent: {\n kind: \"telemetry\",\n source: {\n kind: \"projection\",\n projection: { projectionId: identity.projectionId },\n datasetVersion: identity.datasetVersion,\n batchOrdinal: 0,\n sourceRowCount: 2,\n sourceRowsSkipped: 2,\n inputExhausted: true,\n },\n pointCount: 0,\n inputPointCount: 0,\n },\n committedAt: \"2026-01-02T00:00:00.000Z\",\n },\n expected: { sources: [], objects: [], links: [], linkScopes: [], points: [] },\n }\n}\n",
31
+ "import { describe, expect, test } from \"bun:test\"\nimport type {\n ProjectionExecution,\n ProjectionMaterializationIdentity,\n} from \"../materialization/model\"\nimport type {\n MaterializationPlanFinalization,\n MaterializationPlanHeader,\n MaterializationSession,\n OntologyOutboxFailure,\n OntologySourceRecord,\n} from \"../storage/ontology\"\nimport type { ProjectionRunStorage } from \"../storage/projection-runs\"\nimport {\n commitEmptyEdit,\n commitExactObject,\n contractEditHeader,\n contractEditResult,\n ensureContractExecution,\n type OntologyContractStorage,\n} from \"./ontology-contract-fixture\"\nimport { startTestProjectionRun } from \"./projection-execution\"\n\nexport interface OntologyStorageContractStorage extends OntologyContractStorage {\n readonly projectionRuns: ProjectionRunStorage\n}\n\nexport interface OntologyStorageContractSuiteOptions<\n TStorage extends OntologyStorageContractStorage = OntologyStorageContractStorage,\n> {\n /** Factory that returns a fresh, fully transaction-capable storage facade for each test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n /** Optional provider setup invoked after the storage facade is created. */\n readonly setup?: (storage: TStorage) => void | Promise<void>\n /** Optional provider cleanup invoked after every test, including failed tests. */\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst replacementIdentity = (\n versionId: string,\n projectionId = \"contract.devices\"\n): Extract<ProjectionMaterializationIdentity, { readonly projectionKind: \"object\" }> => ({\n projectionId,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: {\n datasetId: \"contract.devices\",\n versionId,\n createdAt: `2026-01-${versionId.padStart(2, \"0\")}T00:00:00.000Z`,\n },\n ontologyRevision: \"ontology-contract-revision\",\n projectionRevision: \"projection-contract-revision\",\n ownershipHash: \"ownership-contract-hash\",\n})\n\nconst emptyProjectionCounts = {\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} as const\n\ninterface ReadyCandidate {\n readonly identity: Extract<\n ProjectionMaterializationIdentity,\n { readonly projectionKind: \"object\" }\n >\n readonly execution: ProjectionExecution\n readonly materializationId: string\n readonly source: { readonly projectionId: string }\n readonly executionId: string\n}\n\nfunction ontologyOutboxFailure(message: string): OntologyOutboxFailure {\n return {\n code: \"event.delivery_failed\",\n message,\n retryable: true,\n at: \"2026-01-03T02:00:00.000Z\",\n }\n}\n\n/**\n * Runs provider-level ontology persistence contracts without asking the provider\n * to interpret ontology definitions, edits, or projection rows. Exact plans are\n * supplied directly and the suite checks durable lifecycle, CAS, outbox, and\n * cross-facade transaction behavior.\n */\nexport function runOntologyStorageContractSuite<TStorage extends OntologyStorageContractStorage>(\n label: string,\n options: OntologyStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await options.setup?.(storage)\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"stores one authoritative commit and rejects duplicate commit identities\", async () => {\n await withStorage(async (storage) => {\n await commitEmptyEdit(storage, \"commit-one\")\n const stored = await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"commit-one\",\n })\n expect(stored).toMatchObject({\n id: \"commit-one\",\n idempotencyKey: \"runtime:commit-one\",\n requestHash: \"hash:commit-one\",\n result: { commitId: \"commit-one\" },\n })\n expect(\n await storage.ontology.commits.getByIdempotencyKey({\n projectId: \"contract-project\",\n idempotencyKey: \"runtime:commit-one\",\n })\n ).toEqual(stored)\n\n await expect(commitEmptyEdit(storage, \"commit-one\")).rejects.toMatchObject({\n kind: \"idempotency\",\n })\n const divergent = structuredClone(contractEditHeader(\"different-id\"))\n ;(divergent.commit as { idempotencyKey: string }).idempotencyKey = \"runtime:commit-one\"\n ;(divergent.commit as { requestHash: string }).requestHash = \"different-hash\"\n await expect(\n storage.transaction(async (tx) => {\n await ensureContractExecution(tx, divergent)\n await tx.ontology.materializations.begin(divergent)\n })\n ).rejects.toMatchObject({ kind: \"idempotency\" })\n\n const list = await storage.ontology.commits.list({\n projectId: \"contract-project\",\n limit: 1,\n offset: 0,\n })\n expect(list).toMatchObject({ total: 1, hasMore: false })\n expect(list.commits.map((commit) => commit.id)).toEqual([\"commit-one\"])\n })\n })\n\n test(\"rejects an ontology commit whose execution does not exist\", async () => {\n await withStorage(async (storage) => {\n const header = contractEditHeader(\"missing-execution\")\n await expect(\n storage.transaction(async (tx) => {\n const session = await tx.ontology.materializations.begin(header)\n await tx.ontology.materializations.finalize({\n session,\n finalization: {\n sourceActivations: [],\n result: contractEditResult(header.commit.id),\n },\n })\n })\n ).rejects.toThrow()\n await expect(\n storage.ontology.commits.getById({\n projectId: header.commit.projectId,\n id: header.commit.id,\n })\n ).resolves.toBeNull()\n })\n })\n\n test(\"rejects unfinished sessions and rolls back their authoritative writes\", async () => {\n await withStorage(async (storage) => {\n const header = contractEditHeader(\"session-contract\")\n await expect(storage.ontology.materializations.begin(header)).rejects.toThrow(\n \"active storage transaction\"\n )\n\n await expect(\n commitExactObject(storage, \"unfinished-session\", { omitFinalize: true })\n ).rejects.toThrow(\"unfinished materialization session\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"unfinished-session\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"unfinished-session\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2027-01-01T00:00:00.000Z\",\n limit: 10,\n leaseId: \"unfinished-session-check\",\n leaseExpiresAt: \"2027-01-01T01:00:00.000Z\",\n })\n ).toEqual([])\n\n let leakedSession: MaterializationSession | undefined\n await expect(\n storage.transaction(async (tx) => {\n const leakedHeader = contractEditHeader(\"leaked-session\")\n await ensureContractExecution(tx, leakedHeader)\n leakedSession = await tx.ontology.materializations.begin(leakedHeader)\n })\n ).rejects.toThrow(\"unfinished materialization session\")\n if (!leakedSession) throw new Error(\"Expected an unfinished session handle\")\n const staleSession = leakedSession\n await storage.transaction(async (tx) => {\n await expect(\n tx.ontology.materializations.finalize({\n session: staleSession,\n finalization: {\n sourceActivations: [],\n result: contractEditResult(\"leaked-session\"),\n },\n })\n ).rejects.toThrow(\"inactive\")\n })\n })\n })\n\n test(\"stages insert-only source rows, seals counts, and fences stale execution tokens\", async () => {\n await withStorage(async (storage) => {\n const identity = replacementIdentity(\"01\")\n const claimed = await startTestProjectionRun(storage, {\n id: \"staging-run\",\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n const execution = claimed.execution\n const source = { projectionId: identity.projectionId }\n await expect(\n storage.ontology.sources.beginMaterialization({\n projectId: \"contract-project\",\n source,\n materializationId: \"mismatched-candidate\",\n execution,\n projectionKind: \"link\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: \"2026-01-01T00:00:00.000Z\",\n })\n ).rejects.toThrow(\"identity\")\n await storage.ontology.sources.beginMaterialization({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: \"2026-01-01T00:00:00.000Z\",\n })\n expect(\n await storage.ontology.sources.getActive({ projectId: \"contract-project\", source })\n ).toBeNull()\n\n const row = {\n root: {\n kind: \"object\" as const,\n ref: { objectTypeId: \"ContractDevice\", primaryId: \"one\" },\n },\n assertion: {\n kind: \"object\" as const,\n ref: { objectTypeId: \"ContractDevice\", primaryId: \"one\" },\n properties: { name: \"one\" },\n },\n stagingOrdinal: 0,\n }\n expect(\n await storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [row],\n })\n ).toEqual({ inserted: 1, unchanged: 0 })\n expect(\n await storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [row],\n })\n ).toEqual({ inserted: 0, unchanged: 1 })\n await expect(\n storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [\n {\n ...row,\n assertion: { ...row.assertion, properties: { name: \"different\" } },\n },\n ],\n })\n ).rejects.toThrow()\n\n const ready = await storage.ontology.sources.markReady({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rootCount: 1,\n assertionCount: 1,\n readyAt: \"2026-01-01T00:01:00.000Z\",\n })\n expect(ready).toMatchObject({ status: \"ready\", rootCount: 1, assertionCount: 1 })\n\n const reclaimed = await storage.projectionRuns.startOrReclaim({\n id: claimed.run.id,\n projectId: claimed.run.projectId,\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n await expect(\n storage.ontology.sources.stageRows({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rows: [],\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n await expect(\n storage.ontology.sources.markReady({\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n rootCount: 1,\n assertionCount: 1,\n readyAt: \"2026-01-01T00:03:00.000Z\",\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n await expect(\n storage.ontology.sources.abandon({\n kind: \"candidate\",\n projectId: \"contract-project\",\n source,\n materializationId: \"staging-candidate\",\n execution,\n abandonedAt: \"2026-01-01T00:03:00.000Z\",\n })\n ).rejects.toMatchObject({ kind: \"execution-lost\" })\n const abandoned = await storage.ontology.sources.abandon({\n kind: \"reclaim\",\n projectId: \"contract-project\",\n source,\n execution: reclaimed.execution,\n abandonedAt: \"2026-01-01T00:02:00.000Z\",\n })\n expect(abandoned).toMatchObject({ status: \"abandoned\", executionToken: null })\n expect(\n await storage.ontology.sources.summarizeTerminal({ projectId: \"contract-project\" })\n ).toEqual({ count: 1, oldestTerminalAt: \"2026-01-01T00:02:00.000Z\" })\n\n expect(\n await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 1,\n })\n ).toEqual({ rowsDeleted: 1, materializationsDeleted: 0 })\n expect(\n await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 1,\n })\n ).toEqual({ rowsDeleted: 1, materializationsDeleted: 0 })\n expect(\n await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 1,\n })\n ).toEqual({ rowsDeleted: 0, materializationsDeleted: 1 })\n expect(\n await storage.ontology.sources.summarizeTerminal({ projectId: \"contract-project\" })\n ).toEqual({ count: 0, oldestTerminalAt: null })\n })\n })\n\n test(\"atomically activates explicit empty candidates and rejects competing stale heads\", async () => {\n await withStorage(async (storage) => {\n const first = await createReadyEmptyCandidate(storage, \"run-one\", \"candidate-one\", \"01\")\n await activateEmptyCandidate(\n storage,\n first,\n null,\n \"commit-source-one\",\n \"2026-01-03T00:00:00.000Z\"\n )\n const activeOne = await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n expect(activeOne).toMatchObject({\n materializationId: first.materializationId,\n status: \"active\",\n rootCount: 0,\n assertionCount: 0,\n executionToken: null,\n })\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"projection\", projectionRunId: first.execution.projectionRunId },\n })\n ).toMatchObject({ id: \"commit-source-one\" })\n await expect(\n activateEmptyCandidate(\n storage,\n first,\n activeOne,\n \"duplicate-projection-origin\",\n \"2026-01-03T01:00:00.000Z\"\n )\n ).rejects.toMatchObject({ kind: \"run-correlation\" })\n\n const left = await createReadyEmptyCandidate(storage, \"run-left\", \"candidate-left\", \"02\")\n const right = await createReadyEmptyCandidate(storage, \"run-right\", \"candidate-right\", \"03\")\n await activateEmptyCandidate(\n storage,\n left,\n activeOne!,\n \"commit-source-left\",\n \"2026-01-04T00:00:00.000Z\"\n )\n await expect(\n activateEmptyCandidate(\n storage,\n right,\n activeOne!,\n \"commit-source-right\",\n \"2026-01-05T00:00:00.000Z\"\n )\n ).rejects.toMatchObject({ kind: \"projection-fence\" })\n const currentActive = await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n expect(currentActive).toMatchObject({ materializationId: left.materializationId })\n\n const stale = await createReadyEmptyCandidate(\n storage,\n \"run-stale-activation\",\n \"candidate-stale-activation\",\n \"04\"\n )\n const reclaimed = await storage.projectionRuns.startOrReclaim({\n id: stale.execution.projectionRunId,\n projectId: \"contract-project\",\n identity: stale.identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n await expect(\n activateEmptyCandidate(\n storage,\n stale,\n currentActive,\n \"commit-stale-activation\",\n \"2026-01-06T00:00:00.000Z\"\n )\n ).rejects.toThrow(\"execution token is stale\")\n await storage.ontology.sources.abandon({\n kind: \"reclaim\",\n projectId: \"contract-project\",\n source: stale.source,\n execution: reclaimed.execution,\n abandonedAt: \"2026-01-06T00:01:00.000Z\",\n })\n\n const cleanup = await storage.ontology.sources.cleanupTerminal({\n projectId: \"contract-project\",\n terminalBefore: \"2026-02-01T00:00:00.000Z\",\n limit: 10,\n })\n expect(cleanup.materializationsDeleted).toBeGreaterThanOrEqual(1)\n expect(\n await storage.ontology.sources.getActive({\n projectId: \"contract-project\",\n source: first.source,\n })\n ).toMatchObject({ materializationId: left.materializationId })\n expect(\n await storage.ontology.sources.abandon({\n kind: \"candidate\",\n projectId: \"contract-project\",\n source: right.source,\n materializationId: right.materializationId,\n execution: right.execution,\n abandonedAt: \"2026-02-02T00:00:00.000Z\",\n })\n ).toMatchObject({ status: \"abandoned\" })\n })\n })\n\n test(\"rolls back exact rows, commits, and outbox writes through one transaction facade\", async () => {\n await withStorage(async (storage) => {\n await expect(\n commitExactObject(storage, \"rolled-back\", { throwAfterFinalize: true })\n ).rejects.toThrow(\"contract rollback\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"rolled-back\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"rolled-back\",\n })\n ).toBeNull()\n expect(\n await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2027-01-01T00:00:00.000Z\",\n limit: 10,\n leaseId: \"rollback-check\",\n leaseExpiresAt: \"2027-01-01T01:00:00.000Z\",\n })\n ).toEqual([])\n\n await commitExactObject(storage, \"committed\")\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"committed\",\n })\n ).toMatchObject({ properties: { name: \"committed\" }, lastCommitId: \"committed\" })\n\n await expect(\n commitExactObject(storage, \"stale-object-cas\", { primaryId: \"committed\" })\n ).rejects.toThrow(\"to be absent\")\n expect(\n await storage.ontology.commits.getById({\n projectId: \"contract-project\",\n id: \"stale-object-cas\",\n })\n ).toBeNull()\n expect(\n await storage.objects.getByPrimaryId({\n projectId: \"contract-project\",\n objectTypeId: \"ContractDevice\",\n primaryId: \"committed\",\n })\n ).toMatchObject({ properties: { name: \"committed\" }, lastCommitId: \"committed\" })\n })\n })\n\n test(\"leases outbox rows exclusively, reclaims expiry, fences stale workers, and purges\", async () => {\n await withStorage(async (storage) => {\n const outboxB = await commitExactObject(storage, \"outbox-b\")\n const outboxA = await commitExactObject(storage, \"outbox-a\")\n await expect(\n storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-02T19:00:00-05:00\",\n limit: 1,\n leaseId: \"noncanonical-lease\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n ).rejects.toThrow(\"canonical UTC\")\n const first = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-one\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n expect(first).toHaveLength(1)\n expect(first[0]).toMatchObject({ attempts: 1, leaseId: \"lease-one\" })\n expect(first[0].envelope.id).toBe([outboxA.eventId, outboxB.eventId].sort()[0])\n const concurrent = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:30:00.000Z\",\n limit: 10,\n leaseId: \"lease-concurrent\",\n leaseExpiresAt: \"2026-01-03T01:30:00.000Z\",\n })\n expect(concurrent).toHaveLength(1)\n expect(concurrent[0].envelope.id).not.toBe(first[0].envelope.id)\n\n const reclaimed = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T02:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-two\",\n leaseExpiresAt: \"2026-01-03T03:00:00.000Z\",\n })\n expect(reclaimed[0].envelope.id).toBe(first[0].envelope.id)\n await expect(\n storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [first[0].envelope.id],\n leaseId: \"lease-one\",\n publishedAt: \"2026-01-03T02:10:00.000Z\",\n })\n ).rejects.toThrow(\"lease does not match\")\n await storage.ontology.outbox.reschedule({\n projectId: \"contract-project\",\n ids: [reclaimed[0].envelope.id],\n leaseId: \"lease-two\",\n availableAt: \"2026-01-04T00:00:00.000Z\",\n failure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n const retried = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-04T00:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-three\",\n leaseExpiresAt: \"2026-01-04T01:00:00.000Z\",\n })\n expect(retried[0]).toMatchObject({\n attempts: 3,\n lastFailure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n await storage.ontology.outbox.reschedule({\n projectId: \"contract-project\",\n ids: [retried[0].envelope.id],\n leaseId: \"lease-three\",\n availableAt: \"2026-01-04T00:15:00.000Z\",\n })\n const lifecycleRescheduled = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-04T00:15:00.000Z\",\n limit: 1,\n leaseId: \"lease-four\",\n leaseExpiresAt: \"2026-01-04T01:15:00.000Z\",\n })\n expect(lifecycleRescheduled[0]).toMatchObject({\n attempts: 4,\n lastFailure: ontologyOutboxFailure(\"broker unavailable\"),\n })\n expect(\n await storage.ontology.outbox.summarize({ projectId: \"contract-project\" })\n ).toMatchObject({ pendingCount: 2, retryingCount: 2, maxAttempts: 4 })\n await storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [lifecycleRescheduled[0].envelope.id],\n leaseId: \"lease-four\",\n publishedAt: \"2026-01-04T00:30:00.000Z\",\n })\n expect(\n await storage.ontology.outbox.purgePublished({\n projectId: \"contract-project\",\n publishedBefore: \"2026-01-05T00:00:00.000Z\",\n limit: 1,\n })\n ).toBe(1)\n })\n })\n\n test(\"keeps batch outbox settlement atomic when callers catch a stale lease\", async () => {\n await withStorage(async (storage) => {\n await commitExactObject(storage, \"lease-atomic-a\")\n await commitExactObject(storage, \"lease-atomic-b\")\n const claimed = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T00:00:00.000Z\",\n limit: 10,\n leaseId: \"lease-atomic-old\",\n leaseExpiresAt: \"2026-01-03T01:00:00.000Z\",\n })\n expect(claimed).toHaveLength(2)\n const [reclaimed] = await storage.ontology.outbox.claim({\n projectId: \"contract-project\",\n now: \"2026-01-03T02:00:00.000Z\",\n limit: 1,\n leaseId: \"lease-atomic-new\",\n leaseExpiresAt: \"2026-01-03T03:00:00.000Z\",\n })\n const untouched = claimed.find((row) => row.envelope.id !== reclaimed!.envelope.id)!\n\n let conflict: unknown\n await storage.transaction(async (tx) => {\n try {\n await tx.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: claimed.map((row) => row.envelope.id),\n leaseId: \"lease-atomic-old\",\n publishedAt: \"2026-01-03T02:10:00.000Z\",\n })\n } catch (error) {\n conflict = error\n }\n })\n expect(conflict).toMatchObject({ kind: \"outbox-lease\" })\n\n await storage.ontology.outbox.markPublished({\n projectId: \"contract-project\",\n ids: [untouched.envelope.id],\n leaseId: \"lease-atomic-old\",\n publishedAt: \"2026-01-03T02:20:00.000Z\",\n })\n })\n })\n\n test(\"rolls back a telemetry checkpoint with its authoritative ontology commit\", async () => {\n await withStorage(async (storage) => {\n const identity: ProjectionMaterializationIdentity = {\n projectionId: \"contract.telemetry\",\n projectionKind: \"telemetry\",\n protocol: \"telemetry\",\n datasetVersion: {\n datasetId: \"contract.readings\",\n versionId: \"telemetry-version\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-contract-revision\",\n projectionRevision: \"telemetry-contract-revision\",\n ownershipHash: \"telemetry-contract-ownership\",\n }\n const run = await startTestProjectionRun(storage, {\n id: \"telemetry-run\",\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n fixedBatchSize: 2,\n })\n const execute = async (throwAfter: boolean) => {\n await storage.transaction(async (tx) => {\n if (!tx.projectionRuns) {\n throw new Error(\"Contract transaction omitted required storage facades.\")\n }\n const header = telemetryHeader(identity, run.run.id, run.run.executionId)\n const session = await tx.ontology.materializations.begin(header)\n await tx.ontology.materializations.finalize({\n session,\n finalization: {\n sourceActivations: [],\n result: {\n kind: \"telemetry\",\n commitId: header.commit.id,\n created: true,\n eventCount: 0,\n committedAt: header.commit.committedAt,\n pointsCreated: 0,\n pointsUpdated: 0,\n pointsUnchanged: 0,\n latestObjectsChanged: 0,\n },\n },\n })\n await tx.projectionRuns.advanceTelemetryCheckpoint({\n id: run.run.id,\n projectId: run.run.projectId,\n identity,\n executionToken: run.execution.executionToken,\n batchOrdinal: 0,\n batchRowCount: 2,\n batchRowsSkipped: 2,\n inputExhausted: true,\n })\n if (throwAfter) throw new Error(\"telemetry rollback\")\n })\n }\n\n await expect(execute(true)).rejects.toThrow(\"telemetry rollback\")\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"telemetry\", projectionRunId: run.run.id, batchOrdinal: 0 },\n })\n ).toBeNull()\n expect(\n await storage.projectionRuns.getById({ projectId: run.run.projectId, id: run.run.id })\n ).toMatchObject({\n telemetryCheckpoint: { nextBatchOrdinal: 0, nextRowOffset: 0, inputExhausted: false },\n })\n\n await execute(false)\n expect(\n await storage.ontology.commits.getByOrigin({\n projectId: \"contract-project\",\n origin: { kind: \"telemetry\", projectionRunId: run.run.id, batchOrdinal: 0 },\n })\n ).toMatchObject({ id: \"telemetry-commit\" })\n expect(\n await storage.projectionRuns.getById({ projectId: run.run.projectId, id: run.run.id })\n ).toMatchObject({\n telemetryCheckpoint: { nextBatchOrdinal: 1, nextRowOffset: 2, inputExhausted: true },\n })\n })\n })\n })\n}\n\nasync function createReadyEmptyCandidate(\n storage: OntologyStorageContractStorage,\n runId: string,\n materializationId: string,\n versionId: string\n): Promise<ReadyCandidate> {\n const identity = replacementIdentity(versionId)\n const run = await startTestProjectionRun(storage, {\n id: runId,\n projectId: \"contract-project\",\n identity,\n target: { objectTypeId: \"ContractDevice\" },\n })\n const execution = run.execution\n const source = { projectionId: identity.projectionId }\n await storage.ontology.sources.beginMaterialization({\n projectId: run.run.projectId,\n source,\n materializationId,\n execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: identity.datasetVersion,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n ontologyRevision: identity.ontologyRevision,\n createdAt: identity.datasetVersion.createdAt,\n })\n await storage.ontology.sources.markReady({\n projectId: run.run.projectId,\n source,\n materializationId,\n execution,\n rootCount: 0,\n assertionCount: 0,\n readyAt: new Date(Date.parse(identity.datasetVersion.createdAt) + 1_000).toISOString(),\n })\n return { identity, execution, materializationId, source, executionId: run.run.executionId }\n}\n\nasync function activateEmptyCandidate(\n storage: OntologyStorageContractStorage,\n candidate: ReadyCandidate,\n expectedActive: OntologySourceRecord | null,\n commitId: string,\n committedAt: string\n): Promise<void> {\n const expected = {\n source: candidate.source,\n activeMaterializationId: expectedActive?.materializationId ?? null,\n lastCommitId: expectedActive?.lastCommitId ?? null,\n }\n const header: MaterializationPlanHeader = {\n commit: {\n projectId: \"contract-project\",\n id: commitId,\n idempotencyKey: `projection:${commitId}`,\n requestHash: `hash:${commitId}`,\n executionId: candidate.executionId,\n origin: {\n kind: \"projection\",\n projectionId: candidate.source.projectionId,\n projectionRunId: candidate.execution.projectionRunId,\n datasetId: candidate.identity.datasetVersion.datasetId,\n datasetVersionId: candidate.identity.datasetVersion.versionId,\n },\n ontologyRevision: candidate.identity.ontologyRevision,\n projectionRevision: candidate.identity.projectionRevision,\n ownershipHash: candidate.identity.ownershipHash,\n intent: {\n kind: \"projection\",\n source: candidate.source,\n datasetVersion: candidate.identity.datasetVersion,\n },\n committedAt,\n },\n expected: { sources: [expected], objects: [], links: [], linkScopes: [], points: [] },\n }\n const finalization: MaterializationPlanFinalization = {\n sourceActivations: [\n {\n source: candidate.source,\n materializationId: candidate.materializationId,\n execution: candidate.execution,\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: candidate.identity.datasetVersion,\n projectionRevision: candidate.identity.projectionRevision,\n ownershipHash: candidate.identity.ownershipHash,\n ontologyRevision: candidate.identity.ontologyRevision,\n expected,\n lastCommitId: commitId,\n updatedAt: committedAt,\n },\n ],\n result: {\n kind: \"projection\",\n commitId,\n created: true,\n eventCount: 0,\n committedAt,\n counts: emptyProjectionCounts,\n },\n }\n await storage.transaction(async (tx) => {\n if (!tx.projectionRuns) {\n throw new Error(\"Contract transaction omitted required storage facades.\")\n }\n await tx.projectionRuns.lockForMaterialization({\n id: candidate.execution.projectionRunId,\n projectId: header.commit.projectId,\n identity: candidate.identity,\n executionToken: candidate.execution.executionToken,\n })\n const session = await tx.ontology.materializations.begin(header)\n for (const entityKind of [\"object\", \"link\"] as const) {\n for await (const _page of tx.ontology.materializations.streamSourceReplacementState({\n session,\n source: candidate.source,\n candidateMaterializationId: candidate.materializationId,\n entityKind,\n pageRows: 1,\n })) {\n // Empty output intentionally has no classifications or exact writes.\n }\n }\n await tx.ontology.materializations.finalize({ session, finalization })\n })\n}\n\nfunction telemetryHeader(\n identity: ProjectionMaterializationIdentity,\n projectionRunId: string,\n executionId: string\n): MaterializationPlanHeader {\n if (identity.protocol !== \"telemetry\") throw new Error(\"Expected telemetry identity\")\n return {\n commit: {\n projectId: \"contract-project\",\n id: \"telemetry-commit\",\n idempotencyKey: \"telemetry:telemetry-run:0\",\n requestHash: \"hash:telemetry-run:0\",\n executionId,\n origin: {\n kind: \"telemetry\",\n source: {\n kind: \"projection\",\n projectionId: identity.projectionId,\n projectionRunId,\n datasetId: identity.datasetVersion.datasetId,\n datasetVersionId: identity.datasetVersion.versionId,\n batchOrdinal: 0,\n },\n },\n ontologyRevision: identity.ontologyRevision,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n intent: {\n kind: \"telemetry\",\n source: {\n kind: \"projection\",\n projection: { projectionId: identity.projectionId },\n datasetVersion: identity.datasetVersion,\n batchOrdinal: 0,\n sourceRowCount: 2,\n sourceRowsSkipped: 2,\n inputExhausted: true,\n },\n pointCount: 0,\n inputPointCount: 0,\n },\n committedAt: \"2026-01-02T00:00:00.000Z\",\n },\n expected: { sources: [], objects: [], links: [], linkScopes: [], points: [] },\n }\n}\n",
31
32
  "import type { TrustedPrimitiveRef } from \"../execution\"\nimport type { PipelineRunRecord, QueuePipelineRunInput, Storage } from \"../storage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\n/** Create the durable execution required by a Pipeline-run storage fixture. */\nexport async function createTestPipelineExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly pipelineId: string\n readonly runId: string\n readonly executionId?: string\n }\n): Promise<string> {\n const executionId = input.executionId ?? `test_pipeline_execution:${input.runId}`\n const existing = await executions.getById({ projectId: input.projectId, id: executionId })\n if (existing) return executionId\n\n const primitive: TrustedPrimitiveRef = {\n kind: \"pipeline\",\n id: input.pipelineId,\n runId: input.runId,\n }\n await executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"event\", eventId: `test_event:${input.runId}` },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n return executionId\n}\n\n/** Queue a Pipeline run with the valid durable execution fixture required by every provider. */\nexport async function queueTestPipelineRun(\n storage: Pick<Storage, \"pipelineRuns\" | \"executions\">,\n input: Omit<QueuePipelineRunInput, \"executionId\">\n): Promise<PipelineRunRecord> {\n if (!storage.pipelineRuns)\n throw new Error(\"Pipeline run storage is not configured for this test.\")\n const executionId = await createTestPipelineExecution(storage.executions, {\n projectId: input.projectId,\n pipelineId: input.pipelineId,\n runId: input.id,\n })\n return storage.pipelineRuns.queue({ ...input, executionId })\n}\n\n/** Start a Pipeline run after creating its durable execution and queued state. */\nexport async function startTestPipelineRun(\n storage: Pick<Storage, \"pipelineRuns\" | \"executions\">,\n input: Omit<QueuePipelineRunInput, \"executionId\" | \"queuedAt\"> & {\n readonly startedAt?: Date\n }\n): Promise<PipelineRunRecord> {\n const { startedAt, ...queuedRun } = input\n await queueTestPipelineRun(storage, { ...queuedRun, queuedAt: startedAt })\n return storage.pipelineRuns!.start({\n id: input.id,\n projectId: input.projectId,\n startedAt,\n })\n}\n",
32
- "import { describe, expect, test } from \"bun:test\"\nimport type { SixbFailure } from \"../errors/types\"\nimport type { ProjectionMaterializationIdentity } from \"../materialization/model\"\nimport type { ExecutionStorage } from \"../storage/executions\"\nimport type {\n ProjectionRunClaim,\n ProjectionRunFailureCode,\n ProjectionRunStorage,\n QueueProjectionRunInput,\n StartOrReclaimProjectionRunInput,\n} from \"../storage/projection-runs\"\n\nexport interface ProjectionRunStorageContractContext<\n TStorage extends ProjectionRunStorage = ProjectionRunStorage,\n> {\n readonly projectionRuns: TStorage\n readonly executions: ExecutionStorage\n}\n\nexport interface ProjectionRunStorageContractSuiteOptions<\n TStorage extends ProjectionRunStorage = ProjectionRunStorage,\n> {\n /** Factory that returns one isolated execution + projection-run store for each test. */\n readonly createStorage: () =>\n | ProjectionRunStorageContractContext<TStorage>\n | Promise<ProjectionRunStorageContractContext<TStorage>>\n readonly setup?: (context: ProjectionRunStorageContractContext<TStorage>) => void | Promise<void>\n readonly cleanup?: (\n context: ProjectionRunStorageContractContext<TStorage>\n ) => void | Promise<void>\n}\n\nconst projectId = \"contract-project\"\nconst objectTarget = { objectTypeId: \"Device\" } as const\n\nconst failure = {\n code: \"internal.unexpected\",\n message: \"Projection failed\",\n retryable: false,\n at: \"2026-06-01T12:00:00.000Z\",\n details: { projectionId: \"contract.devices\", runId: \"failed-run\" },\n} as const satisfies SixbFailure<ProjectionRunFailureCode>\n\nconst replacementIdentity = {\n projectionId: \"contract.devices\",\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: {\n datasetId: \"contract.devices\",\n versionId: \"version-1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-1\",\n projectionRevision: \"projection-1\",\n ownershipHash: \"ownership-1\",\n} as const satisfies ProjectionMaterializationIdentity\n\nconst telemetryIdentity = {\n projectionId: \"contract.temperatures\",\n projectionKind: \"telemetry\",\n protocol: \"telemetry\",\n datasetVersion: {\n datasetId: \"contract.readings\",\n versionId: \"version-1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-1\",\n projectionRevision: \"projection-telemetry-1\",\n ownershipHash: \"ownership-telemetry-1\",\n} as const satisfies ProjectionMaterializationIdentity\n\n/** Runs the single durable, fenced projection-run lifecycle against a provider. */\nexport function runProjectionRunStorageContractSuite<TStorage extends ProjectionRunStorage>(\n label: string,\n options: ProjectionRunStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (\n body: (context: ProjectionRunStorageContractContext<TStorage>) => Promise<void>\n ): Promise<void> => {\n const context = await options.createStorage()\n try {\n await options.setup?.(context)\n await body(context)\n } finally {\n await options.cleanup?.(context)\n }\n }\n\n describe(label, () => {\n test(\"admits a queued run only after its durable execution exists\", async () => {\n await withStorage(async (context) => {\n const input = replacementInput(\"queued-run\")\n await expect(\n context.projectionRuns.queue({\n ...input,\n executionId: \"missing-execution\",\n })\n ).rejects.toThrow()\n\n const wrongSourceExecutionId = \"execution:wrong-source\"\n await context.executions.create({\n id: wrongSourceExecutionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: \"projection\", runId: input.id },\n source: { type: \"event\", eventId: \"wrong-source\" },\n correlationId: input.id,\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: { kind: \"projection\", id: input.identity.projectionId, runId: input.id },\n },\n })\n await expect(\n context.projectionRuns.queue({\n ...input,\n executionId: wrongSourceExecutionId,\n })\n ).rejects.toThrow(\"does not authorize Projection run\")\n\n const admission = await admitProjectionRun(context, input)\n await expect(\n context.projectionRuns.getById({ projectId: input.projectId, id: input.id })\n ).resolves.toMatchObject({\n id: input.id,\n executionId: admission.executionId,\n status: \"queued\",\n attempt: 0,\n })\n })\n })\n\n test(\"requeues the same admission after an enqueue failure\", async () => {\n await withStorage(async (context) => {\n const input = replacementInput(\"enqueue-retry-run\")\n const admission = await admitProjectionRun(context, input)\n await expect(\n context.projectionRuns.failEnqueue({\n id: input.id,\n projectId: input.projectId,\n error: {\n code: \"queue.enqueue_failed\",\n message: \"queue unavailable\",\n retryable: true,\n at: \"2026-06-01T12:00:00.000Z\",\n details: { projectionId: input.identity.projectionId, runId: input.id },\n },\n })\n ).resolves.toMatchObject({\n status: \"failed\",\n error: { code: \"queue.enqueue_failed\", message: \"queue unavailable\" },\n })\n\n await expect(context.projectionRuns.queue(admission)).resolves.toMatchObject({\n executionId: admission.executionId,\n status: \"queued\",\n attempt: 0,\n })\n })\n })\n\n test(\"keeps one run while reclaim rotates its execution\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"replacement-run\")\n await admitProjectionRun(context, input)\n const first = await storage.startOrReclaim(input)\n const second = await storage.startOrReclaim(input)\n\n expect(first.run).toMatchObject({ id: input.id, attempt: 1, status: \"running\" })\n expect(second.run).toMatchObject({ id: input.id, attempt: 2, status: \"running\" })\n expect(second.execution.executionToken).not.toBe(first.execution.executionToken)\n expect(second.run).not.toHaveProperty(\"executionToken\")\n expect(await storage.getById({ projectId, id: input.id })).toMatchObject({\n identity: replacementIdentity,\n target: objectTarget,\n progress: { sourceRowsRead: 0, sourceRowsSkipped: 0 },\n })\n })\n })\n\n test(\"fences every stale lock, progress, and terminal write\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"fenced-run\")\n await admitProjectionRun(context, input)\n const stale = await storage.startOrReclaim(input)\n const current = await storage.startOrReclaim(input)\n\n await expect(storage.lockForMaterialization(executionInput(stale))).rejects.toThrow(\n \"execution token is stale\"\n )\n await expect(\n storage.update({\n ...executionInput(stale),\n progress: { sourceRowsRead: 1 },\n })\n ).rejects.toThrow(\"execution token is stale\")\n await expect(\n storage.finish({\n ...executionInput(stale),\n protocol: \"replacement\",\n status: \"cancelled\",\n })\n ).rejects.toThrow(\"execution token is stale\")\n\n await expect(\n storage.update({\n ...executionInput(current),\n progress: { sourceRowsRead: 3 },\n })\n ).resolves.toMatchObject({ progress: { sourceRowsRead: 3 } })\n })\n })\n\n test(\"rejects immutable identity and target drift\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"identity-run\")\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const changedIdentity = { ...replacementIdentity, ownershipHash: \"different-ownership\" }\n\n await expect(\n storage.startOrReclaim({ ...input, identity: changedIdentity })\n ).rejects.toThrow(\"identity does not match\")\n await expect(\n storage.startOrReclaim({ ...input, target: { objectTypeId: \"OtherDevice\" } })\n ).rejects.toThrow(\"target object types do not match\")\n await expect(\n storage.lockForMaterialization({\n ...executionInput(claim),\n identity: changedIdentity,\n })\n ).rejects.toThrow(\"identity does not match\")\n })\n })\n\n test(\"keeps physical progress monotone and internally consistent\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n await admitProjectionRun(context, replacementInput(\"progress-run\"))\n const claim = await storage.startOrReclaim(replacementInput(\"progress-run\"))\n const execution = executionInput(claim)\n await expect(\n storage.update({\n ...execution,\n progress: { sourceRowsRead: 1, sourceRowsSkipped: 2 },\n })\n ).rejects.toThrow(\"sourceRowsSkipped must not exceed sourceRowsRead\")\n await storage.update({\n ...execution,\n progress: { sourceRowsRead: 5, sourceRowsSkipped: 1 },\n })\n await expect(\n storage.update({ ...execution, progress: { sourceRowsRead: 4 } })\n ).rejects.toThrow(\"must not decrease\")\n })\n })\n\n test(\"rejects immutable dataset-version metadata reuse\", async () => {\n await withStorage(async (context) => {\n await admitProjectionRun(context, replacementInput(\"dataset-metadata-first\"))\n await expect(\n admitProjectionRun(context, {\n ...replacementInput(\"dataset-metadata-conflict\"),\n identity: {\n ...replacementIdentity,\n datasetVersion: {\n ...replacementIdentity.datasetVersion,\n createdAt: \"2026-01-02T00:00:00.000Z\",\n },\n },\n })\n ).rejects.toThrow(\"immutable dataset version id with different metadata\")\n })\n })\n\n test(\"advances telemetry in contiguous fixed physical batches\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"telemetry-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 3,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const execution = executionInput(claim)\n expect(claim.run).toMatchObject({\n telemetryCheckpoint: {\n fixedBatchSize: 3,\n nextBatchOrdinal: 0,\n nextRowOffset: 0,\n inputExhausted: false,\n },\n })\n await expect(\n storage.update({ ...execution, progress: { sourceRowsRead: 1 } })\n ).rejects.toThrow(\"can only advance with its checkpoint\")\n\n await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 0,\n batchRowCount: 3,\n batchRowsSkipped: 1,\n inputExhausted: false,\n })\n await expect(\n storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 2,\n batchRowCount: 1,\n batchRowsSkipped: 0,\n inputExhausted: true,\n })\n ).rejects.toThrow(\"expected batch ordinal 1\")\n await expect(\n storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 1,\n batchRowCount: 1,\n batchRowsSkipped: 0,\n inputExhausted: false,\n })\n ).rejects.toThrow(\"partial non-final batch\")\n\n const exhausted = await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 1,\n batchRowCount: 2,\n batchRowsSkipped: 1,\n inputExhausted: true,\n })\n expect(exhausted).toMatchObject({\n progress: { sourceRowsRead: 5, sourceRowsSkipped: 2 },\n telemetryCheckpoint: { nextBatchOrdinal: 2, nextRowOffset: 5, inputExhausted: true },\n })\n })\n })\n\n test(\"keeps a missing target until the batch it blocks commits\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"telemetry-missing-target-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 2,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const execution = executionInput(claim)\n const firstSeenAt = new Date(\"2026-06-01T12:00:00.000Z\")\n const missingTarget = {\n objectTypeId: \"Device\",\n objectId: \"missing-device\",\n batchOrdinal: 0,\n firstSeenAt,\n }\n\n const waiting = await storage.recordMissingTarget({ ...execution, missingTarget })\n expect(waiting.missingTarget).toEqual(missingTarget)\n expect(\n (await storage.getById({ projectId, id: \"telemetry-missing-target-run\" }))?.missingTarget\n ).toEqual(missingTarget)\n\n // A wait anchored to a batch the run has already passed would outlive the progress that\n // resolved it, so it is refused rather than stored.\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, batchOrdinal: 1 },\n })\n ).rejects.toThrow(\"cannot wait on batch 1\")\n\n // A run can only wait on the object type it writes: nothing else can appear in its\n // telemetry. Refused here so an adapter never has to rely on its own CHECK for it.\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, objectTypeId: \"Building\" },\n })\n ).rejects.toThrow(\"cannot wait on 'Building'\")\n\n // The whole wait or none of it. A half-written one reads as waiting since the epoch, or\n // waiting for nothing, and both decide a run's fate.\n for (const partial of [\n { objectId: \"\" },\n { objectTypeId: \"\" },\n { firstSeenAt: new Date(Number.NaN) },\n ]) {\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, ...partial },\n })\n ).rejects.toThrow()\n }\n\n // The write is last-wins; keeping the original start is the worker's rule, which only\n // records when the object or the batch changes. An adapter that merged instead would\n // make that rule unenforceable.\n const rerecorded = await storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, firstSeenAt: new Date(\"2026-06-01T12:01:00.000Z\") },\n })\n expect(rerecorded.missingTarget?.firstSeenAt).toEqual(new Date(\"2026-06-01T12:01:00.000Z\"))\n\n const advanced = await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 0,\n batchRowCount: 2,\n batchRowsSkipped: 0,\n inputExhausted: true,\n })\n expect(advanced.missingTarget).toBeUndefined()\n })\n })\n\n test(\"requires and records explicit telemetry EOF with terminal success\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"empty-telemetry-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 10,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n\n await expect(\n storage.finish({\n ...executionInput(claim),\n protocol: \"telemetry\",\n status: \"succeeded\",\n } as Parameters<ProjectionRunStorage[\"finish\"]>[0])\n ).rejects.toThrow(\"cannot succeed before input exhaustion\")\n await expect(storage.getById({ projectId, id: claim.run.id })).resolves.toMatchObject({\n status: \"running\",\n telemetryCheckpoint: { inputExhausted: false },\n })\n\n const finished = await storage.finish({\n ...executionInput(claim),\n protocol: \"telemetry\",\n status: \"succeeded\",\n inputExhausted: true,\n })\n expect(finished).toMatchObject({\n status: \"succeeded\",\n progress: { sourceRowsRead: 0 },\n telemetryCheckpoint: { inputExhausted: true },\n })\n await expect(storage.lockForMaterialization(executionInput(claim))).rejects.toThrow(\n \"already terminal\"\n )\n })\n })\n\n test(\"validates, detaches, and persists scoped failures\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n await admitProjectionRun(context, replacementInput(\"failed-run\"))\n const claim = await storage.startOrReclaim(replacementInput(\"failed-run\"))\n const finished = await storage.finish({\n ...executionInput(claim),\n protocol: \"replacement\",\n status: \"failed\",\n finishedAt: new Date(failure.at),\n error: failure,\n })\n\n expect(finished).toMatchObject({\n status: \"failed\",\n finishedAt: new Date(failure.at),\n error: failure,\n })\n expect(finished.error).not.toBe(failure)\n await expect(storage.getById({ projectId, id: \"failed-run\" })).resolves.toMatchObject({\n error: failure,\n })\n\n await admitProjectionRun(context, replacementInput(\"invalid-failure-run\"))\n const invalid = await storage.startOrReclaim(replacementInput(\"invalid-failure-run\"))\n await expect(\n storage.finish({\n ...executionInput(invalid),\n protocol: \"replacement\",\n status: \"failed\",\n error: { ...failure, code: \"dataset.not_found\" } as never,\n })\n ).rejects.toThrow(\"code is not allowed by this failure contract\")\n })\n })\n\n test(\"keeps equal run ids isolated by project\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const projectA = { ...replacementInput(\"shared-id\"), projectId: \"project-a\" } as const\n const projectB = { ...replacementInput(\"shared-id\"), projectId: \"project-b\" } as const\n await admitProjectionRun(context, projectA)\n await admitProjectionRun(context, projectB)\n await storage.startOrReclaim(projectA)\n await storage.startOrReclaim(projectB)\n\n expect(await storage.getById({ projectId: \"project-a\", id: \"shared-id\" })).not.toBeNull()\n expect(await storage.getById({ projectId: \"project-b\", id: \"shared-id\" })).not.toBeNull()\n expect(await storage.getById({ projectId: \"project-c\", id: \"shared-id\" })).toBeNull()\n })\n })\n })\n}\n\nasync function admitProjectionRun<TStorage extends ProjectionRunStorage>(\n context: ProjectionRunStorageContractContext<TStorage>,\n input: StartOrReclaimProjectionRunInput\n): Promise<QueueProjectionRunInput> {\n const executionId = `execution:${input.projectId}:${input.id}`\n await context.executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: \"projection\", runId: input.id },\n source: {\n type: \"datasetVersion\",\n datasetId: input.identity.datasetVersion.datasetId,\n versionId: input.identity.datasetVersion.versionId,\n },\n correlationId: input.id,\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: { kind: \"projection\", id: input.identity.projectionId, runId: input.id },\n },\n })\n const admission = {\n ...input,\n executionId,\n queuedAt: new Date(\"2026-01-01T00:00:01.000Z\"),\n } satisfies QueueProjectionRunInput\n await context.projectionRuns.queue(admission)\n return admission\n}\n\nfunction replacementInput(id: string) {\n return { id, projectId, identity: replacementIdentity, target: objectTarget } as const\n}\n\nfunction executionInput(claim: ProjectionRunClaim) {\n return {\n id: claim.run.id,\n projectId: claim.run.projectId,\n identity: claim.run.identity,\n executionToken: claim.execution.executionToken,\n }\n}\n",
33
+ "import { describe, expect, test } from \"bun:test\"\nimport type { SixbFailure } from \"../errors/types\"\nimport type { ProjectionMaterializationIdentity } from \"../materialization/model\"\nimport type { ExecutionStorage } from \"../storage/executions\"\nimport type {\n ProjectionRunClaim,\n ProjectionRunFailureCode,\n ProjectionRunStorage,\n QueueProjectionRunInput,\n StartOrReclaimProjectionRunInput,\n} from \"../storage/projection-runs\"\n\nexport interface ProjectionRunStorageContractContext<\n TStorage extends ProjectionRunStorage = ProjectionRunStorage,\n> {\n readonly projectionRuns: TStorage\n readonly executions: ExecutionStorage\n}\n\nexport interface ProjectionRunStorageContractSuiteOptions<\n TStorage extends ProjectionRunStorage = ProjectionRunStorage,\n> {\n /** Factory that returns one isolated execution + projection-run store for each test. */\n readonly createStorage: () =>\n | ProjectionRunStorageContractContext<TStorage>\n | Promise<ProjectionRunStorageContractContext<TStorage>>\n readonly setup?: (context: ProjectionRunStorageContractContext<TStorage>) => void | Promise<void>\n readonly cleanup?: (\n context: ProjectionRunStorageContractContext<TStorage>\n ) => void | Promise<void>\n}\n\nconst projectId = \"contract-project\"\nconst objectTarget = { objectTypeId: \"Device\" } as const\n\nconst failure = {\n code: \"internal.unexpected\",\n message: \"Projection failed\",\n retryable: false,\n at: \"2026-06-01T12:00:00.000Z\",\n details: { projectionId: \"contract.devices\", runId: \"failed-run\" },\n} as const satisfies SixbFailure<ProjectionRunFailureCode>\n\nconst replacementIdentity = {\n projectionId: \"contract.devices\",\n projectionKind: \"object\",\n protocol: \"replacement\",\n datasetVersion: {\n datasetId: \"contract.devices\",\n versionId: \"version-1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-1\",\n projectionRevision: \"projection-1\",\n ownershipHash: \"ownership-1\",\n} as const satisfies ProjectionMaterializationIdentity\n\nconst telemetryIdentity = {\n projectionId: \"contract.temperatures\",\n projectionKind: \"telemetry\",\n protocol: \"telemetry\",\n datasetVersion: {\n datasetId: \"contract.readings\",\n versionId: \"version-1\",\n createdAt: \"2026-01-01T00:00:00.000Z\",\n },\n ontologyRevision: \"ontology-1\",\n projectionRevision: \"projection-telemetry-1\",\n ownershipHash: \"ownership-telemetry-1\",\n} as const satisfies ProjectionMaterializationIdentity\n\n/** Runs the single durable, fenced projection-run lifecycle against a provider. */\nexport function runProjectionRunStorageContractSuite<TStorage extends ProjectionRunStorage>(\n label: string,\n options: ProjectionRunStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (\n body: (context: ProjectionRunStorageContractContext<TStorage>) => Promise<void>\n ): Promise<void> => {\n const context = await options.createStorage()\n try {\n await options.setup?.(context)\n await body(context)\n } finally {\n await options.cleanup?.(context)\n }\n }\n\n describe(label, () => {\n test(\"admits a queued run only after its durable execution exists\", async () => {\n await withStorage(async (context) => {\n const input = replacementInput(\"queued-run\")\n await expect(\n context.projectionRuns.queue({\n ...input,\n executionId: \"missing-execution\",\n })\n ).rejects.toThrow()\n\n const wrongSourceExecutionId = \"execution:wrong-source\"\n await context.executions.create({\n id: wrongSourceExecutionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: \"projection\", runId: input.id },\n source: { type: \"event\", eventId: \"wrong-source\" },\n correlationId: input.id,\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: { kind: \"projection\", id: input.identity.projectionId, runId: input.id },\n },\n })\n await expect(\n context.projectionRuns.queue({\n ...input,\n executionId: wrongSourceExecutionId,\n })\n ).rejects.toThrow(\"does not authorize Projection run\")\n\n const admission = await admitProjectionRun(context, input)\n await expect(\n context.projectionRuns.getById({ projectId: input.projectId, id: input.id })\n ).resolves.toMatchObject({\n id: input.id,\n executionId: admission.executionId,\n status: \"queued\",\n attempt: 0,\n })\n })\n })\n\n test(\"requeues the same admission after an enqueue failure\", async () => {\n await withStorage(async (context) => {\n const input = replacementInput(\"enqueue-retry-run\")\n const admission = await admitProjectionRun(context, input)\n await expect(\n context.projectionRuns.failEnqueue({\n id: input.id,\n projectId: input.projectId,\n error: {\n code: \"queue.enqueue_failed\",\n message: \"queue unavailable\",\n retryable: true,\n at: \"2026-06-01T12:00:00.000Z\",\n details: { projectionId: input.identity.projectionId, runId: input.id },\n },\n })\n ).resolves.toMatchObject({\n status: \"failed\",\n error: { code: \"queue.enqueue_failed\", message: \"queue unavailable\" },\n })\n\n await expect(context.projectionRuns.queue(admission)).resolves.toMatchObject({\n executionId: admission.executionId,\n status: \"queued\",\n attempt: 0,\n })\n })\n })\n\n test(\"keeps one run while reclaim rotates its execution\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"replacement-run\")\n await admitProjectionRun(context, input)\n const first = await storage.startOrReclaim(input)\n const second = await storage.startOrReclaim(input)\n\n expect(first.run).toMatchObject({ id: input.id, attempt: 1, status: \"running\" })\n expect(second.run).toMatchObject({ id: input.id, attempt: 2, status: \"running\" })\n expect(second.execution.executionToken).not.toBe(first.execution.executionToken)\n expect(second.run).not.toHaveProperty(\"executionToken\")\n expect(await storage.getById({ projectId, id: input.id })).toMatchObject({\n identity: replacementIdentity,\n target: objectTarget,\n progress: { sourceRowsRead: 0, sourceRowsSkipped: 0 },\n })\n })\n })\n\n test(\"fences every stale lock, progress, and terminal write\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"fenced-run\")\n await admitProjectionRun(context, input)\n const stale = await storage.startOrReclaim(input)\n const current = await storage.startOrReclaim(input)\n\n await expect(storage.lockForMaterialization(executionInput(stale))).rejects.toThrow(\n \"execution token is stale\"\n )\n await expect(\n storage.update({\n ...executionInput(stale),\n progress: { sourceRowsRead: 1 },\n })\n ).rejects.toThrow(\"execution token is stale\")\n await expect(\n storage.finish({\n ...executionInput(stale),\n protocol: \"replacement\",\n status: \"cancelled\",\n })\n ).rejects.toThrow(\"execution token is stale\")\n\n await expect(\n storage.update({\n ...executionInput(current),\n progress: { sourceRowsRead: 3 },\n })\n ).resolves.toMatchObject({ progress: { sourceRowsRead: 3 } })\n })\n })\n\n test(\"rejects immutable identity and target drift\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = replacementInput(\"identity-run\")\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const changedIdentity = { ...replacementIdentity, ownershipHash: \"different-ownership\" }\n\n await expect(\n storage.startOrReclaim({ ...input, identity: changedIdentity })\n ).rejects.toThrow(\"identity does not match\")\n await expect(\n storage.startOrReclaim({ ...input, target: { objectTypeId: \"OtherDevice\" } })\n ).rejects.toThrow(\"target object types do not match\")\n await expect(\n storage.lockForMaterialization({\n ...executionInput(claim),\n identity: changedIdentity,\n })\n ).rejects.toThrow(\"identity does not match\")\n })\n })\n\n test(\"keeps physical progress monotone and internally consistent\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n await admitProjectionRun(context, replacementInput(\"progress-run\"))\n const claim = await storage.startOrReclaim(replacementInput(\"progress-run\"))\n const execution = executionInput(claim)\n await expect(\n storage.update({\n ...execution,\n progress: { sourceRowsRead: 1, sourceRowsSkipped: 2 },\n })\n ).rejects.toThrow(\"sourceRowsSkipped must not exceed sourceRowsRead\")\n await storage.update({\n ...execution,\n progress: { sourceRowsRead: 5, sourceRowsSkipped: 1 },\n })\n await expect(\n storage.update({ ...execution, progress: { sourceRowsRead: 4 } })\n ).rejects.toThrow(\"must not decrease\")\n })\n })\n\n test(\"persists independent incremental progress across reclaim without a physical-row floor\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n await admitProjectionRun(context, replacementInput(\"delta-progress\"))\n const first = await storage.startOrReclaim(replacementInput(\"delta-progress\"))\n const updated = await storage.update({\n ...executionInput(first),\n progress: { sourceChangesRead: 12 },\n })\n expect(updated.progress).toEqual({\n sourceRowsRead: 0,\n sourceRowsSkipped: 0,\n sourceChangesRead: 12,\n })\n const second = await storage.startOrReclaim(replacementInput(\"delta-progress\"))\n expect(second.run.progress).toEqual(updated.progress)\n await expect(\n storage.update({ ...executionInput(first), progress: { sourceChangesRead: 13 } })\n ).rejects.toThrow()\n await expect(\n storage.update({ ...executionInput(second), progress: { sourceChangesRead: 11 } })\n ).rejects.toThrow(\"must not decrease\")\n const fallback = await storage.update({\n ...executionInput(second),\n progress: { sourceRowsRead: 2 },\n })\n expect(fallback.progress).toEqual({\n sourceRowsRead: 2,\n sourceRowsSkipped: 0,\n sourceChangesRead: 12,\n })\n })\n })\n\n test(\"rejects immutable dataset-version metadata reuse\", async () => {\n await withStorage(async (context) => {\n await admitProjectionRun(context, replacementInput(\"dataset-metadata-first\"))\n await expect(\n admitProjectionRun(context, {\n ...replacementInput(\"dataset-metadata-conflict\"),\n identity: {\n ...replacementIdentity,\n datasetVersion: {\n ...replacementIdentity.datasetVersion,\n createdAt: \"2026-01-02T00:00:00.000Z\",\n },\n },\n })\n ).rejects.toThrow(\"immutable dataset version id with different metadata\")\n })\n })\n\n test(\"advances telemetry in contiguous fixed physical batches\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"telemetry-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 3,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const execution = executionInput(claim)\n expect(claim.run).toMatchObject({\n telemetryCheckpoint: {\n fixedBatchSize: 3,\n nextBatchOrdinal: 0,\n nextRowOffset: 0,\n inputExhausted: false,\n },\n })\n await expect(\n storage.update({ ...execution, progress: { sourceRowsRead: 1 } })\n ).rejects.toThrow(\"can only advance with its checkpoint\")\n\n await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 0,\n batchRowCount: 3,\n batchRowsSkipped: 1,\n inputExhausted: false,\n })\n await expect(\n storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 2,\n batchRowCount: 1,\n batchRowsSkipped: 0,\n inputExhausted: true,\n })\n ).rejects.toThrow(\"expected batch ordinal 1\")\n await expect(\n storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 1,\n batchRowCount: 1,\n batchRowsSkipped: 0,\n inputExhausted: false,\n })\n ).rejects.toThrow(\"partial non-final batch\")\n\n const exhausted = await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 1,\n batchRowCount: 2,\n batchRowsSkipped: 1,\n inputExhausted: true,\n })\n expect(exhausted).toMatchObject({\n progress: { sourceRowsRead: 5, sourceRowsSkipped: 2 },\n telemetryCheckpoint: { nextBatchOrdinal: 2, nextRowOffset: 5, inputExhausted: true },\n })\n })\n })\n\n test(\"keeps a missing target until the batch it blocks commits\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"telemetry-missing-target-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 2,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n const execution = executionInput(claim)\n const firstSeenAt = new Date(\"2026-06-01T12:00:00.000Z\")\n const missingTarget = {\n objectTypeId: \"Device\",\n objectId: \"missing-device\",\n batchOrdinal: 0,\n firstSeenAt,\n }\n\n const waiting = await storage.recordMissingTarget({ ...execution, missingTarget })\n expect(waiting.missingTarget).toEqual(missingTarget)\n expect(\n (await storage.getById({ projectId, id: \"telemetry-missing-target-run\" }))?.missingTarget\n ).toEqual(missingTarget)\n\n // A wait anchored to a batch the run has already passed would outlive the progress that\n // resolved it, so it is refused rather than stored.\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, batchOrdinal: 1 },\n })\n ).rejects.toThrow(\"cannot wait on batch 1\")\n\n // A run can only wait on the object type it writes: nothing else can appear in its\n // telemetry. Refused here so an adapter never has to rely on its own CHECK for it.\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, objectTypeId: \"Building\" },\n })\n ).rejects.toThrow(\"cannot wait on 'Building'\")\n\n // The whole wait or none of it. A half-written one reads as waiting since the epoch, or\n // waiting for nothing, and both decide a run's fate.\n for (const partial of [\n { objectId: \"\" },\n { objectTypeId: \"\" },\n { firstSeenAt: new Date(Number.NaN) },\n ]) {\n await expect(\n storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, ...partial },\n })\n ).rejects.toThrow()\n }\n\n // The write is last-wins; keeping the original start is the worker's rule, which only\n // records when the object or the batch changes. An adapter that merged instead would\n // make that rule unenforceable.\n const rerecorded = await storage.recordMissingTarget({\n ...execution,\n missingTarget: { ...missingTarget, firstSeenAt: new Date(\"2026-06-01T12:01:00.000Z\") },\n })\n expect(rerecorded.missingTarget?.firstSeenAt).toEqual(new Date(\"2026-06-01T12:01:00.000Z\"))\n\n const advanced = await storage.advanceTelemetryCheckpoint({\n ...execution,\n batchOrdinal: 0,\n batchRowCount: 2,\n batchRowsSkipped: 0,\n inputExhausted: true,\n })\n expect(advanced.missingTarget).toBeUndefined()\n })\n })\n\n test(\"requires and records explicit telemetry EOF with terminal success\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const input = {\n id: \"empty-telemetry-run\",\n projectId,\n identity: telemetryIdentity,\n target: objectTarget,\n fixedBatchSize: 10,\n } as const\n await admitProjectionRun(context, input)\n const claim = await storage.startOrReclaim(input)\n\n await expect(\n storage.finish({\n ...executionInput(claim),\n protocol: \"telemetry\",\n status: \"succeeded\",\n } as Parameters<ProjectionRunStorage[\"finish\"]>[0])\n ).rejects.toThrow(\"cannot succeed before input exhaustion\")\n await expect(storage.getById({ projectId, id: claim.run.id })).resolves.toMatchObject({\n status: \"running\",\n telemetryCheckpoint: { inputExhausted: false },\n })\n\n const finished = await storage.finish({\n ...executionInput(claim),\n protocol: \"telemetry\",\n status: \"succeeded\",\n inputExhausted: true,\n })\n expect(finished).toMatchObject({\n status: \"succeeded\",\n progress: { sourceRowsRead: 0 },\n telemetryCheckpoint: { inputExhausted: true },\n })\n await expect(storage.lockForMaterialization(executionInput(claim))).rejects.toThrow(\n \"already terminal\"\n )\n })\n })\n\n test(\"validates, detaches, and persists scoped failures\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n await admitProjectionRun(context, replacementInput(\"failed-run\"))\n const claim = await storage.startOrReclaim(replacementInput(\"failed-run\"))\n const finished = await storage.finish({\n ...executionInput(claim),\n protocol: \"replacement\",\n status: \"failed\",\n finishedAt: new Date(failure.at),\n error: failure,\n })\n\n expect(finished).toMatchObject({\n status: \"failed\",\n finishedAt: new Date(failure.at),\n error: failure,\n })\n expect(finished.error).not.toBe(failure)\n await expect(storage.getById({ projectId, id: \"failed-run\" })).resolves.toMatchObject({\n error: failure,\n })\n\n await admitProjectionRun(context, replacementInput(\"invalid-failure-run\"))\n const invalid = await storage.startOrReclaim(replacementInput(\"invalid-failure-run\"))\n await expect(\n storage.finish({\n ...executionInput(invalid),\n protocol: \"replacement\",\n status: \"failed\",\n error: { ...failure, code: \"dataset.not_found\" } as never,\n })\n ).rejects.toThrow(\"code is not allowed by this failure contract\")\n })\n })\n\n test(\"keeps equal run ids isolated by project\", async () => {\n await withStorage(async (context) => {\n const storage = context.projectionRuns\n const projectA = { ...replacementInput(\"shared-id\"), projectId: \"project-a\" } as const\n const projectB = { ...replacementInput(\"shared-id\"), projectId: \"project-b\" } as const\n await admitProjectionRun(context, projectA)\n await admitProjectionRun(context, projectB)\n await storage.startOrReclaim(projectA)\n await storage.startOrReclaim(projectB)\n\n expect(await storage.getById({ projectId: \"project-a\", id: \"shared-id\" })).not.toBeNull()\n expect(await storage.getById({ projectId: \"project-b\", id: \"shared-id\" })).not.toBeNull()\n expect(await storage.getById({ projectId: \"project-c\", id: \"shared-id\" })).toBeNull()\n })\n })\n })\n}\n\nasync function admitProjectionRun<TStorage extends ProjectionRunStorage>(\n context: ProjectionRunStorageContractContext<TStorage>,\n input: StartOrReclaimProjectionRunInput\n): Promise<QueueProjectionRunInput> {\n const executionId = `execution:${input.projectId}:${input.id}`\n await context.executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: \"projection\", runId: input.id },\n source: {\n type: \"datasetVersion\",\n datasetId: input.identity.datasetVersion.datasetId,\n versionId: input.identity.datasetVersion.versionId,\n },\n correlationId: input.id,\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: { kind: \"projection\", id: input.identity.projectionId, runId: input.id },\n },\n })\n const admission = {\n ...input,\n executionId,\n queuedAt: new Date(\"2026-01-01T00:00:01.000Z\"),\n } satisfies QueueProjectionRunInput\n await context.projectionRuns.queue(admission)\n return admission\n}\n\nfunction replacementInput(id: string) {\n return { id, projectId, identity: replacementIdentity, target: objectTarget } as const\n}\n\nfunction executionInput(claim: ProjectionRunClaim) {\n return {\n id: claim.run.id,\n projectId: claim.run.projectId,\n identity: claim.run.identity,\n executionToken: claim.execution.executionToken,\n }\n}\n",
33
34
  "import { describe, expect, test } from \"bun:test\"\nimport { QueueError } from \"../queues/errors\"\nimport type { PipelineQueueJobFailureCode, QueueJobFailure, Queues } from \"../queues/types\"\n\nconst TERMINAL_FAILURE = {\n code: \"internal.unexpected\",\n retryable: false,\n message: \"boom\",\n at: \"2026-01-01T00:00:00.000Z\",\n details: { pipelineId: \"p-1\" },\n} as const satisfies QueueJobFailure<PipelineQueueJobFailureCode>\n\nexport interface QueueContractSuiteOptions {\n /** Factory that produces a fresh `Queues` instance for each test case. */\n readonly createQueues: () => Queues | Promise<Queues>\n /** Optional cleanup invoked after every test case. */\n readonly teardown?: (queues: Queues) => void | Promise<void>\n /**\n * Lease duration used in lease-expiry redelivery assertions. Providers with a stalled-check\n * interval (e.g., BullMQ) need a larger value than in-memory providers. Defaults to 20ms.\n */\n readonly shortLeaseMs?: number\n /**\n * Time to wait for a claim to become re-visible after its lease expires. Defaults to\n * `shortLeaseMs + 10`; providers that rely on a periodic checker must add that interval.\n */\n readonly leaseExpiryRedeliveryMs?: number\n /**\n * Time to wait for a delayed retry to become visible again. Defaults to `shortLeaseMs + 15`.\n */\n readonly retryRedeliveryMs?: number\n}\n\n/**\n * Runs the shared `Queues` contract against any provider.\n *\n * Every provider must exhibit the same enqueue/claim/complete/retry/fail/renewLease behavior\n * described here, which is the authoritative specification for Sixb queues — each test is\n * written in Arrange/Act/Assert form, with timing parameters exposed for providers that need\n * them (short lease durations, periodic checker intervals).\n */\nexport function runQueueContractSuite(label: string, options: QueueContractSuiteOptions): void {\n const shortLeaseMs = options.shortLeaseMs ?? 20\n const leaseExpiryRedeliveryMs = options.leaseExpiryRedeliveryMs ?? shortLeaseMs + 10\n const retryRedeliveryMs = options.retryRedeliveryMs ?? shortLeaseMs + 15\n\n const withQueues = async (body: (queues: Queues) => Promise<void>): Promise<void> => {\n const queues = await options.createQueues()\n try {\n await body(queues)\n } finally {\n await options.teardown?.(queues)\n }\n }\n\n describe(label, () => {\n describe(\"enqueue\", () => {\n test(\"returns envelopes with generated id, createdAt, availableAt, attempt=0\", async () => {\n await withQueues(async (queues) => {\n const before = Date.now()\n\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [\n {\n type: \"sync.run.requested\",\n payload: { runId: \"sync-1\" },\n },\n ],\n })\n\n expect(job?.id).toMatch(/^[0-9a-f-]{36}$/)\n expect(job?.projectId).toBe(\"project-a\")\n expect(job?.attempt).toBe(0)\n expect(job?.type).toBe(\"sync.run.requested\")\n expect(job?.payload.runId).toBe(\"sync-1\")\n expect(Date.parse(job!.createdAt)).toBeGreaterThanOrEqual(before)\n expect(job?.availableAt).toBe(job?.createdAt)\n })\n })\n\n test(\"deduplicates repeated enqueue with a caller-supplied id\", async () => {\n await withQueues(async (queues) => {\n const input = {\n id: \"dispatch-run-1\",\n type: \"sync.run.requested\" as const,\n payload: { runId: \"sync-1\" },\n }\n const [[first], [second]] = await Promise.all([\n queues.syncRuns.enqueue({ projectId: \"project-a\", jobs: [input] }),\n queues.syncRuns.enqueue({ projectId: \"project-a\", jobs: [input] }),\n ])\n\n expect(first?.id).toBe(input.id)\n expect(second?.id).toBe(input.id)\n await expect(\n queues.syncRuns.claim({ projectId: \"project-a\", workerId: \"worker-1\", limit: 2 })\n ).resolves.toHaveLength(1)\n })\n })\n\n test(\"treats caller-supplied ids as opaque across the job lifecycle\", async () => {\n await withQueues(async (queues) => {\n const id = \"workflow:review-meeting:node:0\"\n const input = {\n id,\n type: \"sync.run.requested\" as const,\n payload: { runId: \"sync-1\" },\n }\n\n const [[first], [duplicate]] = await Promise.all([\n queues.syncRuns.enqueue({ projectId: \"project-a\", jobs: [input] }),\n queues.syncRuns.enqueue({ projectId: \"project-a\", jobs: [input] }),\n ])\n const [claimed] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n limit: 2,\n })\n\n expect(first?.id).toBe(id)\n expect(duplicate?.id).toBe(id)\n expect(claimed?.job.id).toBe(id)\n if (queues.syncRuns.renewLease) {\n await expect(\n queues.syncRuns.renewLease({\n projectId: \"project-a\",\n jobId: id,\n leaseId: claimed!.leaseId,\n leaseMs: shortLeaseMs * 10,\n })\n ).resolves.toMatchObject({ job: { id } })\n }\n await queues.syncRuns.complete({\n projectId: \"project-a\",\n jobId: id,\n leaseId: claimed!.leaseId,\n })\n await expect(\n queues.syncRuns.claim({ projectId: \"project-a\", workerId: \"worker-2\" })\n ).resolves.toHaveLength(0)\n })\n })\n\n test(\"returns empty array when no jobs are passed\", async () => {\n await withQueues(async (queues) => {\n const result = await queues.syncRuns.enqueue({ projectId: \"project-a\", jobs: [] })\n\n expect(result).toEqual([])\n })\n })\n\n test(\"rejects empty projectId with QueueError\", async () => {\n await withQueues(async (queues) => {\n await expect(\n queues.syncRuns.enqueue({\n projectId: \" \",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"sync-1\" } }],\n })\n ).rejects.toBeInstanceOf(QueueError)\n })\n })\n })\n\n describe(\"claim\", () => {\n test(\"increments attempt to 1 on first successful claim\", async () => {\n await withQueues(async (queues) => {\n await queues.pipelines.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"pipeline.run.requested\", payload: { runId: \"p-1\" } }],\n })\n\n const [claimed] = await queues.pipelines.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n })\n\n expect(claimed?.job.attempt).toBe(1)\n expect(claimed?.job.payload.runId).toBe(\"p-1\")\n expect(claimed?.leaseId).toBeTruthy()\n expect(Date.parse(claimed!.leaseExpiresAt)).toBeGreaterThan(\n Date.parse(claimed!.claimedAt)\n )\n })\n })\n\n test(\"returns empty array when limit is 0 or negative\", async () => {\n await withQueues(async (queues) => {\n await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n\n const zero = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n limit: 0,\n })\n const negative = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n limit: -5,\n })\n\n expect(zero).toEqual([])\n expect(negative).toEqual([])\n })\n })\n\n test(\"rejects non-positive leaseMs with QueueError\", async () => {\n await withQueues(async (queues) => {\n await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n\n await expect(\n queues.syncRuns.claim({ projectId: \"project-a\", workerId: \"w-1\", leaseMs: 0 })\n ).rejects.toBeInstanceOf(QueueError)\n await expect(\n queues.syncRuns.claim({ projectId: \"project-a\", workerId: \"w-1\", leaseMs: -1 })\n ).rejects.toBeInstanceOf(QueueError)\n })\n })\n\n test(\"respects delayed visibility via availableAt\", async () => {\n await withQueues(async (queues) => {\n const availableAt = new Date(Date.now() + shortLeaseMs + 20).toISOString()\n await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" }, availableAt }],\n })\n\n const before = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n })\n await Bun.sleep(shortLeaseMs + 40)\n const after = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n })\n\n expect(before).toHaveLength(0)\n expect(after).toHaveLength(1)\n expect(after[0]?.job.availableAt).toBe(availableAt)\n })\n })\n\n test(\"isolates jobs across distinct projectIds\", async () => {\n await withQueues(async (queues) => {\n await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"a-1\" } }],\n })\n await queues.syncRuns.enqueue({\n projectId: \"project-b\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"b-1\" } }],\n })\n\n const claimedB = await queues.syncRuns.claim({\n projectId: \"project-b\",\n workerId: \"worker-b\",\n limit: 10,\n })\n\n expect(claimedB).toHaveLength(1)\n expect(claimedB[0]?.job.payload.runId).toBe(\"b-1\")\n expect(claimedB[0]?.job.projectId).toBe(\"project-b\")\n })\n })\n\n test(\"keeps every worker lane independent\", async () => {\n await withQueues(async (queues) => {\n await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n await queues.pipelines.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"pipeline.run.requested\", payload: { runId: \"p-1\" } }],\n })\n await queues.projections.enqueue({\n projectId: \"project-a\",\n jobs: [\n {\n type: \"projection.run.requested\",\n payload: { runId: \"projection-run-1\" },\n },\n ],\n })\n await queues.workflows.enqueue({\n projectId: \"project-a\",\n jobs: [\n {\n type: \"workflow.run.requested\",\n payload: { runId: \"workflow-run-1\" },\n },\n ],\n })\n await queues.actions.enqueue({\n projectId: \"project-a\",\n jobs: [\n {\n type: \"action.run.requested\",\n payload: {\n runId: \"act_1\",\n },\n },\n ],\n })\n await queues.agents.enqueue({\n projectId: \"project-a\",\n jobs: [\n {\n type: \"agent.run.requested\",\n payload: { runId: \"agent-run-1\" },\n },\n ],\n })\n await queues.agentChildren.enqueue({\n projectId: \"project-a\",\n jobs: [\n {\n type: \"agent.subagent-run.requested\",\n payload: { runId: \"child-run-1\" },\n },\n ],\n })\n\n const crossLane = await queues.pipelines.claim({\n projectId: \"project-a\",\n workerId: \"pipeline-worker-1\",\n limit: 10,\n })\n const projectionLane = await queues.projections.claim({\n projectId: \"project-a\",\n workerId: \"projection-worker-1\",\n limit: 10,\n })\n const workflowLane = await queues.workflows.claim({\n projectId: \"project-a\",\n workerId: \"workflow-worker-1\",\n limit: 10,\n })\n const actionLane = await queues.actions.claim({\n projectId: \"project-a\",\n workerId: \"action-worker-1\",\n limit: 10,\n })\n const agentLane = await queues.agents.claim({\n projectId: \"project-a\",\n workerId: \"agent-worker-1\",\n limit: 10,\n })\n const childLane = await queues.agentChildren.claim({\n projectId: \"project-a\",\n workerId: \"child-agent-worker-1\",\n limit: 10,\n })\n const sameLane = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"sync-worker-1\",\n limit: 10,\n })\n\n expect(crossLane).toHaveLength(1)\n expect(crossLane[0]?.job.payload.runId).toBe(\"p-1\")\n expect(projectionLane).toHaveLength(1)\n expect(projectionLane[0]?.job.payload.runId).toBe(\"projection-run-1\")\n expect(workflowLane).toHaveLength(1)\n expect(workflowLane[0]?.job.payload.runId).toBe(\"workflow-run-1\")\n expect(actionLane).toHaveLength(1)\n expect(actionLane[0]?.job.payload.runId).toBe(\"act_1\")\n expect(agentLane).toHaveLength(1)\n expect(agentLane[0]?.job).toMatchObject({\n type: \"agent.run.requested\",\n payload: { runId: \"agent-run-1\" },\n })\n expect(childLane).toHaveLength(1)\n expect(childLane[0]?.job.payload.runId).toBe(\"child-run-1\")\n expect(sameLane).toHaveLength(1)\n })\n })\n })\n\n describe(\"complete\", () => {\n test(\"removes the job from the lane permanently\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n const [claim] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n })\n\n await queues.syncRuns.complete({\n projectId: \"project-a\",\n jobId: job!.id,\n leaseId: claim!.leaseId,\n })\n\n const later = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-2\",\n limit: 10,\n })\n expect(later).toHaveLength(0)\n })\n })\n\n test(\"rejects a wrong leaseId with QueueError\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n leaseMs: shortLeaseMs * 10,\n })\n\n await expect(\n queues.syncRuns.complete({\n projectId: \"project-a\",\n jobId: job!.id,\n leaseId: \"not-the-right-lease\",\n })\n ).rejects.toBeInstanceOf(QueueError)\n })\n })\n })\n\n describe(\"retry\", () => {\n test(\"reschedules the job and bumps attempt on next claim\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n const [firstClaim] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n leaseMs: shortLeaseMs,\n })\n\n const retryAt = new Date(Date.now() + retryRedeliveryMs).toISOString()\n await queues.syncRuns.retry({\n projectId: \"project-a\",\n jobId: job!.id,\n leaseId: firstClaim!.leaseId,\n availableAt: retryAt,\n })\n await Bun.sleep(retryRedeliveryMs + 30)\n const [secondClaim] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-2\",\n leaseMs: shortLeaseMs,\n })\n\n expect(secondClaim?.job.id).toBe(job?.id)\n expect(secondClaim?.job.attempt).toBe(2)\n })\n })\n\n test(\"rejects invalid availableAt with QueueError\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n const [claim] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n leaseMs: shortLeaseMs * 10,\n })\n\n await expect(\n queues.syncRuns.retry({\n projectId: \"project-a\",\n jobId: job!.id,\n leaseId: claim!.leaseId,\n availableAt: \"not-a-timestamp\",\n })\n ).rejects.toBeInstanceOf(QueueError)\n })\n })\n })\n\n describe(\"fail\", () => {\n test(\"marks the job as terminally failed\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.pipelines.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"pipeline.run.requested\", payload: { runId: \"p-1\" } }],\n })\n const [claim] = await queues.pipelines.claim({\n projectId: \"project-a\",\n workerId: \"pipeline-worker-1\",\n })\n\n await queues.pipelines.fail({\n projectId: \"project-a\",\n jobId: job!.id,\n leaseId: claim!.leaseId,\n failure: TERMINAL_FAILURE,\n })\n\n const later = await queues.pipelines.claim({\n projectId: \"project-a\",\n workerId: \"pipeline-worker-2\",\n limit: 10,\n })\n expect(later).toHaveLength(0)\n })\n })\n })\n\n describe(\"renewLease\", () => {\n test(\"extends the lease and returns an updated claim\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n const [claim] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n leaseMs: shortLeaseMs + 20,\n })\n\n const renewed = await queues.syncRuns.renewLease?.({\n projectId: \"project-a\",\n jobId: job!.id,\n leaseId: claim!.leaseId,\n leaseMs: shortLeaseMs * 5,\n })\n\n expect(renewed?.job.id).toBe(job?.id)\n expect(renewed?.leaseId).toBe(claim?.leaseId)\n expect(Date.parse(renewed!.leaseExpiresAt)).toBeGreaterThan(\n Date.parse(claim!.leaseExpiresAt)\n )\n })\n })\n\n test(\"returns null for unknown jobId\", async () => {\n await withQueues(async (queues) => {\n const result = await queues.syncRuns.renewLease?.({\n projectId: \"project-a\",\n jobId: \"00000000-0000-0000-0000-000000000000\",\n leaseId: \"no-such-lease\",\n leaseMs: shortLeaseMs,\n })\n\n expect(result).toBeNull()\n })\n })\n\n test(\"returns null when the leaseId does not match\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n leaseMs: shortLeaseMs * 10,\n })\n\n const renewed = await queues.syncRuns.renewLease?.({\n projectId: \"project-a\",\n jobId: job!.id,\n leaseId: \"not-the-right-lease\",\n leaseMs: shortLeaseMs,\n })\n\n expect(renewed).toBeNull()\n })\n })\n })\n\n describe(\"redelivery\", () => {\n test(\"redelivers after lease expiry with attempt incremented\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n const [first] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n leaseMs: shortLeaseMs,\n })\n\n await Bun.sleep(leaseExpiryRedeliveryMs)\n const [second] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-2\",\n leaseMs: shortLeaseMs,\n })\n\n expect(first?.job.attempt).toBe(1)\n expect(second?.job.id).toBe(job?.id)\n expect(second!.job.attempt).toBeGreaterThanOrEqual(2)\n })\n })\n\n test(\"rejects complete on an already-expired lease\", async () => {\n await withQueues(async (queues) => {\n const [job] = await queues.syncRuns.enqueue({\n projectId: \"project-a\",\n jobs: [{ type: \"sync.run.requested\", payload: { runId: \"s-1\" } }],\n })\n const [claim] = await queues.syncRuns.claim({\n projectId: \"project-a\",\n workerId: \"worker-1\",\n leaseMs: shortLeaseMs,\n })\n\n await Bun.sleep(leaseExpiryRedeliveryMs)\n\n await expect(\n queues.syncRuns.complete({\n projectId: \"project-a\",\n jobId: job!.id,\n leaseId: claim!.leaseId,\n })\n ).rejects.toBeInstanceOf(QueueError)\n })\n })\n })\n\n describe(\"health\", () => {\n // `sixb check` reports its queues row from this call. While the method was absent, that row\n // was a literal the command printed green.\n test(\"resolves against a reachable backend\", async () => {\n await withQueues(async (queues) => {\n await expect(queues.health()).resolves.toBeUndefined()\n })\n })\n })\n\n describe(\"scope\", () => {\n // Asserted rather than left to the type checker: a provider that declares the wrong scope is\n // a deployment that looks healthy and claims nothing.\n test(\"declares whether it can be shared across processes\", async () => {\n await withQueues(async (queues) => {\n expect([\"process\", \"shared\"]).toContain(queues.scope)\n })\n })\n })\n })\n}\n",
34
35
  "import { afterEach, beforeEach, describe, expect, test } from \"bun:test\"\nimport { realpath } from \"node:fs/promises\"\nimport { type SandboxFactory, SandboxNotRunningError } from \"../sandboxes\"\n\n/**\n * Capability flags letting a provider declare which contract slices are\n * meaningful for it. Tests gated by an unsupported capability are skipped.\n */\nexport interface SandboxesContractCapabilities {\n /** network.mode=\"none\" actually blocks outbound network access. */\n readonly networkBlocking?: boolean\n /** readOnlyPaths/readWritePaths actually restrict filesystem writes. */\n readonly readOnlyEnforcement?: boolean\n /** Strong isolation, such as process namespaces, is in effect. */\n readonly isolation?: boolean\n}\n\nexport interface SandboxesContractSuiteOptions {\n /** Factory under test. Called once per describe block. */\n readonly createFactory: () => SandboxFactory | Promise<SandboxFactory>\n /** Optional cleanup invoked once per test after factory-created sandboxes are destroyed. */\n readonly teardown?: (factory: SandboxFactory) => void | Promise<void>\n readonly capabilities?: SandboxesContractCapabilities\n /**\n * Timeout in milliseconds used by the timeout/abort tests. Bump on slow CI.\n * Default 200ms.\n */\n readonly shortTimeoutMs?: number\n}\n\nconst SLEEP_BUDGET_SECONDS = 5\n\n/**\n * Provider-independent contract for Sandbox and SandboxFactory. Concrete\n * providers wire this into their tests via runSandboxesContractSuite(...).\n */\nexport function runSandboxesContractSuite(\n label: string,\n options: SandboxesContractSuiteOptions\n): void {\n const shortTimeoutMs = options.shortTimeoutMs ?? 200\n const capabilities = options.capabilities ?? {}\n\n describe(label, () => {\n let factory: SandboxFactory\n\n beforeEach(async () => {\n factory = await options.createFactory()\n })\n\n afterEach(async () => {\n await options.teardown?.(factory)\n })\n\n describe(\"lifecycle\", () => {\n test(\"create returns a running sandbox with a non-empty id\", async () => {\n const sandbox = await factory.create()\n try {\n expect(sandbox.status).toBe(\"running\")\n expect(sandbox.id.length).toBeGreaterThan(0)\n expect(sandbox.workingDirectory.length).toBeGreaterThan(0)\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"runCommand returns exit code 0 and captured stdout for echo\", async () => {\n const sandbox = await factory.create()\n try {\n const result = await sandbox.runCommand(\"echo\", [\"hello\"])\n expect(result.exitCode).toBe(0)\n expect(result.stdout.trim()).toBe(\"hello\")\n expect(result.stderr).toBe(\"\")\n expect(result.durationMs).toBeGreaterThanOrEqual(0)\n expect(result.timedOut).not.toBe(true)\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"nonexistent binary resolves with non-zero exit code\", async () => {\n const sandbox = await factory.create()\n try {\n const result = await sandbox.runCommand(\"does-not-exist-xyz-sixb-test\", [])\n expect(result.exitCode).not.toBe(0)\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"captures stdout and stderr as separate streams\", async () => {\n const sandbox = await factory.create()\n try {\n const result = await sandbox.runCommand(\"/bin/sh\", [\n \"-c\",\n \"echo out-line; echo err-line >&2; exit 0\",\n ])\n expect(result.exitCode).toBe(0)\n expect(result.stdout).toContain(\"out-line\")\n expect(result.stderr).toContain(\"err-line\")\n expect(result.stdout).not.toContain(\"err-line\")\n expect(result.stderr).not.toContain(\"out-line\")\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"stop transitions status and rejects subsequent runCommand\", async () => {\n const sandbox = await factory.create()\n try {\n await sandbox.stop()\n expect(sandbox.status).toBe(\"stopped\")\n await expect(sandbox.runCommand(\"echo\", [\"nope\"])).rejects.toBeInstanceOf(\n SandboxNotRunningError\n )\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"destroy is idempotent\", async () => {\n const sandbox = await factory.create()\n await sandbox.destroy()\n await sandbox.destroy()\n await expect(sandbox.runCommand(\"echo\", [\"x\"])).rejects.toBeInstanceOf(\n SandboxNotRunningError\n )\n })\n })\n\n describe(\"working directory\", () => {\n test(\"pwd reflects the configured workingDirectory\", async () => {\n const sandbox = await factory.create()\n try {\n const result = await sandbox.runCommand(\"pwd\")\n const expected = await realpath(sandbox.workingDirectory)\n expect(result.exitCode).toBe(0)\n expect(result.stdout.trim()).toBe(expected)\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"per-call cwd overrides the sandbox-level workingDirectory\", async () => {\n const sandbox = await factory.create()\n try {\n const expected = await realpath(\"/tmp\")\n const result = await sandbox.runCommand(\"pwd\", [], { cwd: \"/tmp\" })\n expect(result.exitCode).toBe(0)\n expect(result.stdout.trim()).toBe(expected)\n } finally {\n await sandbox.destroy()\n }\n })\n })\n\n describe(\"env merging\", () => {\n test(\"sandbox-level env is visible to commands\", async () => {\n const sandbox = await factory.create({ env: { SIXB_TEST_A: \"alpha\" } })\n try {\n const result = await sandbox.runCommand(\"printenv\", [\"SIXB_TEST_A\"])\n expect(result.exitCode).toBe(0)\n expect(result.stdout.trim()).toBe(\"alpha\")\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"per-call env wins on collision and adds new keys\", async () => {\n const sandbox = await factory.create({\n env: { SIXB_TEST_A: \"alpha\", SIXB_TEST_B: \"beta\" },\n })\n try {\n const a = await sandbox.runCommand(\"printenv\", [\"SIXB_TEST_A\"], {\n env: { SIXB_TEST_A: \"alpha2\", SIXB_TEST_C: \"gamma\" },\n })\n const b = await sandbox.runCommand(\"printenv\", [\"SIXB_TEST_B\"], {\n env: { SIXB_TEST_A: \"alpha2\", SIXB_TEST_C: \"gamma\" },\n })\n const c = await sandbox.runCommand(\"printenv\", [\"SIXB_TEST_C\"], {\n env: { SIXB_TEST_A: \"alpha2\", SIXB_TEST_C: \"gamma\" },\n })\n expect(a.stdout.trim()).toBe(\"alpha2\")\n expect(b.stdout.trim()).toBe(\"beta\")\n expect(c.stdout.trim()).toBe(\"gamma\")\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"host secrets are not leaked into the sandbox\", async () => {\n const secretKey = \"SIXB_HOST_SECRET_DO_NOT_LEAK\"\n const previous = process.env[secretKey]\n process.env[secretKey] = \"host-only-value\"\n try {\n const sandbox = await factory.create()\n try {\n const result = await sandbox.runCommand(\"printenv\", [secretKey])\n expect(result.exitCode).not.toBe(0)\n expect(result.stdout).not.toContain(\"host-only-value\")\n } finally {\n await sandbox.destroy()\n }\n } finally {\n if (previous === undefined) {\n delete process.env[secretKey]\n } else {\n process.env[secretKey] = previous\n }\n }\n })\n })\n\n describe(\"timeout and abort\", () => {\n test(\"sleep beyond timeout marks the result timedOut and exits non-zero\", async () => {\n const sandbox = await factory.create()\n try {\n const start = Date.now()\n const result = await sandbox.runCommand(\"sleep\", [String(SLEEP_BUDGET_SECONDS)], {\n timeout: shortTimeoutMs,\n })\n const elapsed = Date.now() - start\n expect(result.timedOut).toBe(true)\n expect(result.exitCode).not.toBe(0)\n expect(elapsed).toBeLessThan(SLEEP_BUDGET_SECONDS * 1000)\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"abort signal aborts an in-flight command\", async () => {\n const sandbox = await factory.create()\n try {\n const ac = new AbortController()\n setTimeout(() => ac.abort(), shortTimeoutMs)\n const start = Date.now()\n const result = await sandbox.runCommand(\"sleep\", [String(SLEEP_BUDGET_SECONDS)], {\n signal: ac.signal,\n })\n const elapsed = Date.now() - start\n expect(result.exitCode).not.toBe(0)\n expect(elapsed).toBeLessThan(SLEEP_BUDGET_SECONDS * 1000)\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"per-call timeout overrides sandbox-level timeout\", async () => {\n const sandbox = await factory.create({ timeout: SLEEP_BUDGET_SECONDS * 1000 })\n try {\n const result = await sandbox.runCommand(\"sleep\", [String(SLEEP_BUDGET_SECONDS)], {\n timeout: shortTimeoutMs,\n })\n expect(result.timedOut).toBe(true)\n } finally {\n await sandbox.destroy()\n }\n })\n })\n\n describe(\"file materialization\", () => {\n test(\"writeFiles materializes files a subsequent command can read\", async () => {\n const sandbox = await factory.create()\n try {\n const flat = `${sandbox.workingDirectory}/materialized.txt`\n const nested = `${sandbox.workingDirectory}/nested/dir/deep.txt`\n await sandbox.writeFiles([\n { path: flat, contents: \"flat-contents\" },\n { path: nested, contents: \"nested-contents\" },\n ])\n\n const flatResult = await sandbox.runCommand(\"cat\", [flat])\n expect(flatResult.exitCode).toBe(0)\n expect(flatResult.stdout).toContain(\"flat-contents\")\n\n // A nested path proves writeFiles creates missing parent directories.\n const nestedResult = await sandbox.runCommand(\"cat\", [nested])\n expect(nestedResult.exitCode).toBe(0)\n expect(nestedResult.stdout).toContain(\"nested-contents\")\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"writeFiles round-trips binary contents faithfully\", async () => {\n const sandbox = await factory.create()\n try {\n const path = `${sandbox.workingDirectory}/binary.dat`\n const bytes = new Uint8Array([0x00, 0x01, 0xfe, 0xff, 0x0a, 0x7f])\n await sandbox.writeFiles([{ path, contents: bytes }])\n\n const size = await sandbox.runCommand(\"wc\", [\"-c\", path])\n expect(size.exitCode).toBe(0)\n expect(size.stdout.trim().split(/\\s+/)[0]).toBe(String(bytes.length))\n\n // od proves the exact bytes survived transport (e.g. a provider's base64 round-trip).\n const hex = await sandbox.runCommand(\"od\", [\"-An\", \"-v\", \"-tx1\", path])\n expect(hex.exitCode).toBe(0)\n expect(hex.stdout.replace(/\\s+/g, \" \").trim()).toBe(\"00 01 fe ff 0a 7f\")\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"writeFiles applies an explicit file mode\", async () => {\n const sandbox = await factory.create()\n try {\n const path = `${sandbox.workingDirectory}/run.sh`\n await sandbox.writeFiles([{ path, contents: \"#!/bin/sh\\necho ran\\n\", mode: 0o755 }])\n\n // The exec bit is observable, proving mode was honored (not silently dropped).\n const result = await sandbox.runCommand(\"/bin/sh\", [\"-c\", `test -x ${path} && echo yes`])\n expect(result.exitCode).toBe(0)\n expect(result.stdout).toContain(\"yes\")\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"writeFiles after stop rejects\", async () => {\n const sandbox = await factory.create()\n await sandbox.stop()\n try {\n await expect(\n sandbox.writeFiles([{ path: `${sandbox.workingDirectory}/x.txt`, contents: \"x\" }])\n ).rejects.toThrow(SandboxNotRunningError)\n } finally {\n await sandbox.destroy()\n }\n })\n })\n\n if (capabilities.networkBlocking) {\n describe(\"network isolation\", () => {\n test('network.mode=\"none\" blocks outbound DNS / TCP', async () => {\n const sandbox = await factory.create({ network: { mode: \"none\" } })\n try {\n const result = await sandbox.runCommand(\"curl\", [\n \"-sS\",\n \"--max-time\",\n \"2\",\n \"https://example.com\",\n ])\n expect(result.exitCode).not.toBe(0)\n } finally {\n await sandbox.destroy()\n }\n })\n\n test('network.mode=\"all\" permits outbound traffic', async () => {\n const sandbox = await factory.create({ network: { mode: \"all\" } })\n try {\n const result = await sandbox.runCommand(\"curl\", [\n \"-sS\",\n \"--max-time\",\n \"5\",\n \"https://example.com\",\n ])\n expect(result.exitCode).not.toBe(6)\n } finally {\n await sandbox.destroy()\n }\n })\n })\n }\n\n // Restricted per-origin egress is intentionally NOT covered here: the only provider that enforces\n // it (smolvm) can be verified only by a live in-VM network call, which needs a network-capable\n // guest image and outbound internet — infrastructure this suite deliberately avoids so it stays\n // hermetic. smolvm's allow-list flag construction is unit-tested in its network-argv tests\n // instead. Add a conformance slice here once a provider can enforce egress under hermetic tests.\n\n if (capabilities.readOnlyEnforcement) {\n describe(\"filesystem isolation\", () => {\n test(\"writing inside readWritePaths succeeds\", async () => {\n const sandbox = await factory.create()\n try {\n const result = await sandbox.runCommand(\"/bin/sh\", [\n \"-c\",\n `echo content > ${sandbox.workingDirectory}/probe.txt && cat ${sandbox.workingDirectory}/probe.txt`,\n ])\n expect(result.exitCode).toBe(0)\n expect(result.stdout.trim()).toBe(\"content\")\n } finally {\n await sandbox.destroy()\n }\n })\n\n test(\"writing outside readWritePaths fails\", async () => {\n const sandbox = await factory.create()\n try {\n const result = await sandbox.runCommand(\"/bin/sh\", [\n \"-c\",\n \"echo nope > /etc/sixb-sandbox-must-not-write\",\n ])\n expect(result.exitCode).not.toBe(0)\n } finally {\n await sandbox.destroy()\n }\n })\n })\n }\n })\n}\n",
35
36
  "import { describe, expect, test } from \"bun:test\"\nimport type { CreateShareGrantInput, ShareGrantStorage } from \"../storage/share-grants\"\n\nexport interface ShareGrantStorageContractSuiteOptions<\n TStorage extends ShareGrantStorage = ShareGrantStorage,\n> {\n /** Returns an isolated provider capability for every test. */\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"share-grant-contract\"\nconst createdAt = new Date(\"2026-08-19T12:00:00.000Z\")\nconst expiresAt = new Date(\"2026-08-20T12:00:00.000Z\")\n\n/** Provider-neutral lifecycle and isolation contract for durable Share grants. */\nexport function runShareGrantStorageContractSuite<TStorage extends ShareGrantStorage>(\n label: string,\n options: ShareGrantStorageContractSuiteOptions<TStorage>\n): void {\n const withStorage = async (run: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await run(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"stores derived authority and returns defensive copies\", async () => {\n await withStorage(async (storage) => {\n const input = grantInput()\n const created = await storage.create(input)\n\n ;(input.target as { primaryId: string }).primaryId = \"mutated-input\"\n ;(input.issuedBy as { id: string }).id = \"mutated-input\"\n input.createdAt.setUTCFullYear(2040)\n attemptMutation(() => {\n ;(created.target as { primaryId: string }).primaryId = \"mutated-result\"\n })\n created.createdAt.setUTCFullYear(2041)\n const viewGrant = created.authoritySnapshot.access.grants[0]\n if (!viewGrant || viewGrant.kind !== \"object.view\") {\n throw new Error(\"Share grant storage fixture must contain an object.view grant.\")\n }\n attemptMutation(() => {\n ;(viewGrant.selection.roots[0]!.anchor as { primaryId: string }).primaryId =\n \"mutated-result\"\n })\n\n const stored = await storage.getById({ projectId, id: \"shr_1\" })\n expect(stored).toMatchObject({\n id: \"shr_1\",\n target: { objectTypeId: \"Report\", primaryId: \"report-1\" },\n issuedBy: { type: \"user\", id: \"usr_1\" },\n authoritySnapshot: { version: 1 },\n destinationPath: \"/reports/report-1\",\n createdAt,\n expiresAt,\n })\n expect(stored?.authorityDigest).toMatch(/^[0-9a-f]{64}$/)\n expect(stored?.tokenHash).toBe(\"a\".repeat(64))\n })\n })\n\n test(\"enforces id and token-hash uniqueness per project\", async () => {\n await withStorage(async (storage) => {\n await storage.create(grantInput())\n await expect(\n storage.create(grantInput({ tokenHash: \"b\".repeat(64) }))\n ).rejects.toMatchObject({ code: \"duplicate\" })\n await expect(storage.create(grantInput({ id: \"shr_2\" }))).rejects.toMatchObject({\n code: \"duplicate\",\n })\n\n await expect(\n storage.create(grantInput({ projectId: \"other-project\" }))\n ).resolves.toMatchObject({ id: \"shr_1\", projectId: \"other-project\" })\n })\n })\n\n test(\"lists a bounded deterministic page with total and hasMore\", async () => {\n await withStorage(async (storage) => {\n await storage.create(grantInput({ id: \"shr_a\", tokenHash: \"b\".repeat(64) }))\n await storage.create(grantInput({ id: \"shr_z\", tokenHash: \"c\".repeat(64) }))\n await storage.create(\n grantInput({\n id: \"shr_newer\",\n tokenHash: \"d\".repeat(64),\n createdAt: new Date(\"2026-08-19T13:00:00.000Z\"),\n })\n )\n\n await expect(\n storage.list({ projectId, now: createdAt, limit: 2, offset: 0 })\n ).resolves.toMatchObject({\n grants: [{ id: \"shr_newer\" }, { id: \"shr_z\" }],\n total: 3,\n hasMore: true,\n })\n await expect(\n storage.list({ projectId, now: createdAt, limit: 2, offset: 2 })\n ).resolves.toMatchObject({\n grants: [{ id: \"shr_a\" }],\n total: 3,\n hasMore: false,\n })\n })\n })\n\n test(\"filters by project, definition, target, expiry, and revocation\", async () => {\n await withStorage(async (storage) => {\n await storage.create(grantInput({ id: \"active\", tokenHash: \"b\".repeat(64) }))\n await storage.create(\n grantInput({\n id: \"other-target\",\n tokenHash: \"c\".repeat(64),\n targetPrimaryId: \"report-2\",\n destinationPath: \"/reports/report-2\",\n })\n )\n await storage.create(\n grantInput({ id: \"other-definition\", tokenHash: \"d\".repeat(64), definitionId: \"other\" })\n )\n await storage.create(\n grantInput({\n id: \"expired\",\n tokenHash: \"e\".repeat(64),\n expiresAt: new Date(\"2026-08-19T12:30:00.000Z\"),\n })\n )\n await storage.create(grantInput({ id: \"revoked\", tokenHash: \"f\".repeat(64) }))\n await storage.revoke({\n projectId,\n id: \"revoked\",\n revokedAt: new Date(\"2026-08-19T12:15:00.000Z\"),\n revokedBy: { type: \"user\", id: \"usr_revoker\" },\n })\n await storage.create(grantInput({ projectId: \"other-project\" }))\n\n const filter = {\n projectId,\n definitionId: \"published-report\",\n target: { objectTypeId: \"Report\", primaryId: \"report-1\" },\n now: new Date(\"2026-08-19T13:00:00.000Z\"),\n }\n await expect(storage.list(filter)).resolves.toMatchObject({\n grants: [{ id: \"active\" }],\n total: 1,\n hasMore: false,\n })\n const allStates = await storage.list({\n ...filter,\n includeExpired: true,\n includeRevoked: true,\n })\n expect(allStates.grants.map((grant) => grant.id)).toEqual([\"revoked\", \"expired\", \"active\"])\n })\n })\n\n test(\"treats the exact expiry instant as inactive\", async () => {\n await withStorage(async (storage) => {\n await storage.create(grantInput())\n await expect(storage.list({ projectId, now: expiresAt })).resolves.toMatchObject({\n grants: [],\n total: 0,\n })\n await expect(\n storage.list({ projectId, now: expiresAt, includeExpired: true })\n ).resolves.toMatchObject({ grants: [{ id: \"shr_1\" }], total: 1 })\n })\n })\n\n test(\"keeps the first concurrent revocation and makes later calls idempotent\", async () => {\n await withStorage(async (storage) => {\n await storage.create(grantInput())\n const left = {\n projectId,\n id: \"shr_1\",\n revokedAt: new Date(\"2026-08-19T13:00:00.000Z\"),\n revokedBy: { type: \"user\" as const, id: \"usr_left\" },\n }\n const right = {\n projectId,\n id: \"shr_1\",\n revokedAt: new Date(\"2026-08-19T14:00:00.000Z\"),\n revokedBy: { type: \"system\" as const, id: \"system\" },\n }\n\n const [first, second] = await Promise.all([storage.revoke(left), storage.revoke(right)])\n expect(first).toEqual(second)\n expect(\n await storage.revoke({ ...right, revokedAt: new Date(\"2026-08-19T15:00:00.000Z\") })\n ).toEqual(first)\n await expect(storage.revoke({ ...left, id: \"missing\" })).resolves.toBeNull()\n })\n })\n\n test(\"rejects invalid records and list windows consistently\", async () => {\n await withStorage(async (storage) => {\n const foreignAuthority = grantInput().authoritySnapshot\n const foreignViewGrant = foreignAuthority.access.grants[0]\n if (!foreignViewGrant || foreignViewGrant.kind !== \"object.view\") {\n throw new Error(\"Share grant storage fixture must contain an object.view grant.\")\n }\n ;(foreignViewGrant.selection.roots[0]!.anchor as { primaryId: string }).primaryId = \"other\"\n\n const invalid: CreateShareGrantInput[] = [\n grantInput({ projectId: \"\" }),\n grantInput({ tokenHash: \"not-a-hash\" }),\n grantInput({ destinationPath: \"https://example.com/report\" }),\n grantInput({ destinationPath: \"/reports//report-1\" }),\n grantInput({ destinationPath: \"/reports?id=1\" }),\n grantInput({ destinationPath: \"/shared\" }),\n grantInput({ destinationPath: \"/shared/report-1\" }),\n grantInput({ destinationPath: \"/shared%2Freport-1\" }),\n grantInput({ destinationPath: \"/shared%5Creport-1\" }),\n grantInput({ destinationPath: \"/%73hared/report-1\" }),\n grantInput({ expiresAt: new Date(createdAt) }),\n grantInput({ createdAt: new Date(\"invalid\") }),\n grantInput({ issuedBy: { type: \"system\", id: \"system\" } as never }),\n grantInput({ authoritySnapshot: foreignAuthority }),\n ]\n for (const input of invalid) {\n await expect(storage.create(input)).rejects.toMatchObject({ code: \"invalid_input\" })\n }\n await expect(storage.create(null as never)).rejects.toMatchObject({\n code: \"invalid_input\",\n })\n await expect(storage.getById(null as never)).rejects.toMatchObject({\n code: \"invalid_input\",\n })\n\n await expect(storage.list({ projectId, now: createdAt, limit: 201 })).rejects.toMatchObject(\n { code: \"invalid_input\" }\n )\n await expect(storage.list({ projectId, now: new Date(\"invalid\") })).rejects.toMatchObject({\n code: \"invalid_input\",\n })\n })\n })\n\n test(\"rejects a revocation before creation without changing the grant\", async () => {\n await withStorage(async (storage) => {\n await storage.create(grantInput())\n await expect(\n storage.revoke({\n projectId,\n id: \"shr_1\",\n revokedAt: new Date(\"2026-08-19T11:59:59.999Z\"),\n revokedBy: { type: \"user\", id: \"usr_1\" },\n })\n ).rejects.toMatchObject({ code: \"invalid_input\" })\n const unchanged = await storage.getById({ projectId, id: \"shr_1\" })\n expect(unchanged).not.toBeNull()\n expect(unchanged).not.toHaveProperty(\"revokedAt\")\n expect(unchanged).not.toHaveProperty(\"revokedBy\")\n })\n })\n })\n}\n\nfunction grantInput(\n overrides: Partial<CreateShareGrantInput> & { readonly targetPrimaryId?: string } = {}\n): CreateShareGrantInput {\n const targetPrimaryId = overrides.targetPrimaryId ?? \"report-1\"\n const target = overrides.target ?? { objectTypeId: \"Report\", primaryId: targetPrimaryId }\n const base: CreateShareGrantInput = {\n id: \"shr_1\",\n projectId,\n definitionId: \"published-report\",\n target,\n issuedBy: { type: \"user\", id: \"usr_1\" },\n authoritySnapshot: authoritySnapshot(target.objectTypeId, target.primaryId),\n tokenHash: \"a\".repeat(64),\n destinationPath: \"/reports/report-1\",\n createdAt: new Date(createdAt),\n expiresAt: new Date(expiresAt),\n }\n const { targetPrimaryId: _targetPrimaryId, ...recordOverrides } = overrides\n return { ...base, ...recordOverrides }\n}\n\nfunction authoritySnapshot(\n objectTypeId: string,\n primaryId: string\n): CreateShareGrantInput[\"authoritySnapshot\"] {\n return {\n version: 1,\n access: {\n grants: [\n {\n kind: \"object.view\",\n selection: {\n kind: \"selected\",\n roots: [\n {\n anchor: { objectTypeId, primaryId },\n node: {\n objects: [{ objectTypeId, propertyIds: [\"id\", \"title\"] }],\n links: [],\n },\n },\n ],\n },\n },\n ],\n },\n }\n}\n\nexport function createShareGrantStorageContractInput(\n overrides: Partial<CreateShareGrantInput> = {}\n): CreateShareGrantInput {\n return grantInput(overrides)\n}\n\nfunction attemptMutation(mutate: () => void): void {\n try {\n mutate()\n } catch (error) {\n expect(error).toBeInstanceOf(TypeError)\n }\n}\n",
@@ -38,7 +39,7 @@
38
39
  "import type { TrustedPrimitiveRef } from \"../execution\"\nimport type { StartWebhookRunInput, Storage, WebhookRunRecord } from \"../storage\"\nimport type { ExecutionStorage } from \"../storage/executions\"\n\n/** Create the durable execution required by a Webhook-run storage fixture. */\nexport async function createTestWebhookExecution(\n executions: ExecutionStorage,\n input: {\n readonly projectId: string\n readonly route: string\n readonly runId: string\n readonly executionId?: string\n }\n): Promise<string> {\n const executionId = input.executionId ?? `test_webhook_execution:${input.runId}`\n const existing = await executions.getById({ projectId: input.projectId, id: executionId })\n if (existing) return executionId\n\n const primitive: TrustedPrimitiveRef = {\n kind: \"webhook\",\n id: input.route,\n runId: input.runId,\n }\n await executions.create({\n id: executionId,\n projectId: input.projectId,\n executor: { type: \"primitive\", kind: primitive.kind, runId: primitive.runId },\n source: { type: \"webhook\", deliveryId: input.runId },\n correlationId: `test_correlation:${input.runId}`,\n authorizationRef: { type: \"trustedPrimitive\", primitive },\n })\n return executionId\n}\n\n/** Start a Webhook run with the valid durable execution fixture required by every provider. */\nexport async function startTestWebhookRun(\n storage: Pick<Storage, \"webhookRuns\" | \"executions\">,\n input: Omit<StartWebhookRunInput, \"executionId\">\n): Promise<WebhookRunRecord> {\n if (!storage.webhookRuns) throw new Error(\"Webhook run storage is not configured for this test.\")\n const executionId = await createTestWebhookExecution(storage.executions, {\n projectId: input.projectId,\n route: input.route,\n runId: input.id,\n })\n return storage.webhookRuns.start({ ...input, executionId })\n}\n",
39
40
  "import { describe, expect, test } from \"bun:test\"\nimport type { SixbFailure } from \"../errors/types\"\nimport type { CreateExecutionInput, Storage } from \"../storage\"\nimport type { WebhookRunFailureCode } from \"../storage/webhook-runs\"\nimport { startTestWebhookRun } from \"./webhook-execution\"\n\nexport type WebhookRunStorageContractStorage = Storage & {\n readonly webhookRuns: NonNullable<Storage[\"webhookRuns\"]>\n}\n\nexport interface WebhookRunStorageContractSuiteOptions<\n TStorage extends WebhookRunStorageContractStorage = WebhookRunStorageContractStorage,\n> {\n readonly createStorage: () => TStorage | Promise<TStorage>\n readonly cleanup?: (storage: TStorage) => void | Promise<void>\n}\n\nconst projectId = \"webhook-contract\"\nconst route = \"/api/webhooks/github/events\"\nconst bodySha256 = \"0\".repeat(64)\nconst finishedAt = new Date(\"2026-06-01T12:01:00.000Z\")\nconst retryableFailure = {\n code: \"webhook.delivery_failed\",\n message: \"Webhook delivery failed.\",\n retryable: true,\n at: finishedAt.toISOString(),\n details: { connectorId: \"github\", webhookId: \"events\", runId: \"delivery-retry\" },\n} as const satisfies SixbFailure<WebhookRunFailureCode>\nconst rejectedFailure = {\n code: \"webhook.delivery_rejected\",\n message: \"Webhook delivery was rejected.\",\n retryable: false,\n at: finishedAt.toISOString(),\n} as const satisfies SixbFailure<WebhookRunFailureCode>\n\n/** Runs the durable Webhook delivery contract against one complete storage provider. */\nexport function runWebhookRunStorageContractSuite<\n TStorage extends WebhookRunStorageContractStorage,\n>(label: string, options: WebhookRunStorageContractSuiteOptions<TStorage>): void {\n const withStorage = async (body: (storage: TStorage) => Promise<void>): Promise<void> => {\n const storage = await options.createStorage()\n try {\n await body(storage)\n } finally {\n await options.cleanup?.(storage)\n }\n }\n\n describe(label, () => {\n test(\"round-trips the immutable execution and delivery identity\", async () => {\n await withStorage(async (storage) => {\n const run = await startTestWebhookRun(storage, runInput(\"delivery-1\", \"provider-1\"))\n expect(run).toMatchObject({\n id: \"delivery-1\",\n projectId,\n executionId: \"test_webhook_execution:delivery-1\",\n connectorId: \"github\",\n webhookId: \"events\",\n status: \"running\",\n route,\n requestBodyBytes: 12,\n requestBodySha256: bodySha256,\n idempotencyKey: \"provider-1\",\n })\n await expect(\n storage.webhookRuns.getByDelivery({\n projectId,\n connectorId: \"github\",\n webhookId: \"events\",\n idempotencyKey: \"provider-1\",\n })\n ).resolves.toEqual(run)\n })\n })\n\n test(\"rejects missing or mismatched execution authority\", async () => {\n await withStorage(async (storage) => {\n const missing = runInput(\"missing-execution\")\n await expect(\n storage.webhookRuns.start({ ...missing, executionId: \"missing\" })\n ).rejects.toMatchObject({ code: \"invalid_execution\" })\n\n await storage.executions.create(disabledRequestExecution(\"wrong-execution\"))\n await expect(\n storage.webhookRuns.start({ ...missing, executionId: \"wrong-execution\" })\n ).rejects.toMatchObject({ code: \"invalid_execution\" })\n })\n })\n\n test(\"enforces one run per provider delivery key\", async () => {\n await withStorage(async (storage) => {\n await startTestWebhookRun(storage, runInput(\"delivery-first\", \"provider-shared\"))\n await expect(\n startTestWebhookRun(storage, runInput(\"delivery-second\", \"provider-shared\"))\n ).rejects.toMatchObject({ code: \"duplicate_run\" })\n })\n })\n\n test(\"restarts only retryable failures without changing execution identity\", async () => {\n await withStorage(async (storage) => {\n const started = await startTestWebhookRun(\n storage,\n runInput(\"delivery-retry\", \"provider-retry\")\n )\n await storage.webhookRuns.finish({\n projectId,\n id: started.id,\n status: \"failed\",\n finishedAt,\n responseStatus: 503,\n error: retryableFailure,\n })\n const restarted = await storage.webhookRuns.restart({ projectId, id: started.id })\n expect(restarted).toMatchObject({\n id: started.id,\n executionId: started.executionId,\n status: \"running\",\n })\n expect(restarted.finishedAt).toBeUndefined()\n expect(restarted.responseStatus).toBeUndefined()\n expect(restarted.error).toBeUndefined()\n\n await storage.webhookRuns.finish({\n projectId,\n id: started.id,\n status: \"succeeded\",\n responseStatus: 202,\n })\n await expect(\n storage.webhookRuns.restart({ projectId, id: started.id })\n ).rejects.toMatchObject({ code: \"invalid_transition\" })\n })\n })\n\n test(\"does not reopen a terminal client rejection\", async () => {\n await withStorage(async (storage) => {\n const run = await startTestWebhookRun(storage, runInput(\"delivery-rejected\"))\n await storage.webhookRuns.finish({\n projectId,\n id: run.id,\n status: \"failed\",\n finishedAt,\n responseStatus: 422,\n error: rejectedFailure,\n })\n await expect(storage.webhookRuns.restart({ projectId, id: run.id })).rejects.toMatchObject({\n code: \"invalid_transition\",\n })\n })\n })\n\n test(\"persists a validated, detached failure through get and list\", async () => {\n await withStorage(async (storage) => {\n const run = await startTestWebhookRun(storage, runInput(\"failed-run\", \"failed-key\"))\n const failedRunFailure = {\n ...retryableFailure,\n details: { ...retryableFailure.details, runId: run.id },\n }\n const mutableFailure = {\n code: \"webhook.delivery_failed\" as const,\n message: String(failedRunFailure.message),\n retryable: true as const,\n at: failedRunFailure.at,\n details: {\n connectorId: String(failedRunFailure.details.connectorId),\n webhookId: String(failedRunFailure.details.webhookId),\n runId: String(failedRunFailure.details.runId),\n },\n }\n const finished = await storage.webhookRuns.finish({\n projectId,\n id: run.id,\n status: \"failed\",\n finishedAt,\n responseStatus: 503,\n error: mutableFailure,\n })\n\n mutableFailure.details.runId = \"mutated-after-write\"\n expect(finished.error).toEqual(failedRunFailure)\n await expect(storage.webhookRuns.getById({ projectId, id: run.id })).resolves.toMatchObject(\n {\n error: failedRunFailure,\n }\n )\n await expect(\n storage.webhookRuns.list({\n projectId,\n statuses: [\"failed\"],\n idempotencyKey: \"failed-key\",\n })\n ).resolves.toMatchObject({ runs: [{ id: run.id, error: failedRunFailure }], total: 1 })\n })\n })\n\n test(\"rejects failures outside the Webhook run contract without finishing\", async () => {\n await withStorage(async (storage) => {\n const run = await startTestWebhookRun(storage, runInput(\"invalid-failure\"))\n await expect(\n storage.webhookRuns.finish({\n projectId,\n id: run.id,\n status: \"failed\",\n finishedAt,\n error: { ...retryableFailure, code: \"runtime.cancelled\" } as never,\n })\n ).rejects.toThrow(\"code is not allowed by this failure contract\")\n const unchanged = await storage.webhookRuns.getById({ projectId, id: run.id })\n expect(unchanged?.status).toBe(\"running\")\n expect(unchanged?.error).toBeUndefined()\n })\n })\n })\n}\n\nfunction runInput(id: string, idempotencyKey?: string) {\n return {\n id,\n projectId,\n connectorId: \"github\",\n webhookId: \"events\",\n method: \"POST\",\n route,\n requestBodyBytes: 12,\n requestBodySha256: bodySha256,\n ...(idempotencyKey === undefined ? {} : { idempotencyKey }),\n startedAt: new Date(\"2026-06-01T12:00:00.000Z\"),\n }\n}\n\nfunction disabledRequestExecution(id: string): CreateExecutionInput {\n return {\n id,\n projectId,\n executor: { type: \"request\", requestId: id },\n source: { type: \"http\", requestId: id },\n correlationId: `correlation:${id}`,\n authorizationRef: { type: \"disabled\" },\n }\n}\n"
40
41
  ],
41
- "mappings": "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",
42
- "debugId": "4F3927DB98A42FED64756E2164756E21",
42
+ "mappings": "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",
43
+ "debugId": "29763EF5A28C28D864756E2164756E21",
43
44
  "names": []
44
45
  }