@smthrs/engine-store 1.0.0-rc.4 → 1.0.0-rc.6

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 (257) hide show
  1. package/README.md +5 -5
  2. package/dist/cjs/ArtifactGc.d.ts +1 -1
  3. package/dist/cjs/ArtifactGc.d.ts.map +1 -1
  4. package/dist/cjs/ArtifactGc.js +1 -1
  5. package/dist/cjs/ArtifactGc.js.map +1 -1
  6. package/dist/cjs/DeferredClockFold.d.ts +4 -4
  7. package/dist/cjs/DeferredClockFold.d.ts.map +1 -1
  8. package/dist/cjs/DeferredClockFold.js +1 -1
  9. package/dist/cjs/DeferredClockFold.js.map +1 -1
  10. package/dist/cjs/DisasterRecovery.d.ts +1 -1
  11. package/dist/cjs/DisasterRecovery.d.ts.map +1 -1
  12. package/dist/cjs/DisasterRecovery.js +1 -1
  13. package/dist/cjs/DisasterRecovery.js.map +1 -1
  14. package/dist/cjs/DurableEngineState.d.ts +1 -1
  15. package/dist/cjs/DurableEngineState.d.ts.map +1 -1
  16. package/dist/cjs/DurableEngineState.js +1 -1
  17. package/dist/cjs/DurableEngineState.js.map +1 -1
  18. package/dist/cjs/ExecutionSnapshot.d.ts +2 -2
  19. package/dist/cjs/ExecutionSnapshot.d.ts.map +1 -1
  20. package/dist/cjs/ExecutionSnapshot.js +1 -1
  21. package/dist/cjs/ExecutionSnapshot.js.map +1 -1
  22. package/dist/cjs/Migrations.d.ts +2 -2
  23. package/dist/cjs/Migrations.d.ts.map +1 -1
  24. package/dist/cjs/OwnerIdentity.js +1 -1
  25. package/dist/cjs/OwnerIdentity.js.map +2 -2
  26. package/dist/cjs/PlanInputStore.d.ts +1 -1
  27. package/dist/cjs/PlanInputStore.d.ts.map +1 -1
  28. package/dist/cjs/PlanInputStore.js +1 -1
  29. package/dist/cjs/PlanInputStore.js.map +1 -1
  30. package/dist/cjs/PlanMergeStore.d.ts +1 -1
  31. package/dist/cjs/PlanMergeStore.d.ts.map +1 -1
  32. package/dist/cjs/PlanMergeStore.js +1 -1
  33. package/dist/cjs/PlanMergeStore.js.map +1 -1
  34. package/dist/cjs/Retention.d.ts +2 -2
  35. package/dist/cjs/Retention.d.ts.map +1 -1
  36. package/dist/cjs/Retention.js +1 -1
  37. package/dist/cjs/Retention.js.map +1 -1
  38. package/dist/cjs/RunChangeFeed.d.ts +1 -1
  39. package/dist/cjs/RunChangeFeed.d.ts.map +1 -1
  40. package/dist/cjs/RunChangeFeed.js +1 -1
  41. package/dist/cjs/RunChangeFeed.js.map +1 -1
  42. package/dist/cjs/SelectionStore.d.ts +1 -1
  43. package/dist/cjs/SelectionStore.d.ts.map +1 -1
  44. package/dist/cjs/SelectionStore.js +1 -1
  45. package/dist/cjs/SelectionStore.js.map +1 -1
  46. package/dist/cjs/StepBoundary.js +3 -3
  47. package/dist/cjs/StepBoundary.js.map +2 -2
  48. package/dist/cjs/StepCacheFold.d.ts +2 -2
  49. package/dist/cjs/StepCacheFold.d.ts.map +1 -1
  50. package/dist/cjs/StepCacheFold.js +1 -1
  51. package/dist/cjs/StepCacheFold.js.map +1 -1
  52. package/dist/cjs/internal/EngineStateSchema.d.ts +1 -1
  53. package/dist/cjs/internal/EngineStateSchema.d.ts.map +1 -1
  54. package/dist/cjs/internal/EngineStateSchema.js.map +1 -1
  55. package/dist/cjs/internal/ExecutionSnapshotRead.d.ts +3 -3
  56. package/dist/cjs/internal/ExecutionSnapshotRead.d.ts.map +1 -1
  57. package/dist/cjs/internal/ExecutionSnapshotRead.js.map +1 -1
  58. package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts +1 -1
  59. package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts.map +1 -1
  60. package/dist/cjs/internal/ExecutionSnapshotRelations.js.map +1 -1
  61. package/dist/cjs/internal/RetentionOps.d.ts +2 -2
  62. package/dist/cjs/internal/RetentionOps.d.ts.map +1 -1
  63. package/dist/cjs/internal/RetentionOps.js +1 -1
  64. package/dist/cjs/internal/RetentionOps.js.map +1 -1
  65. package/dist/cjs/internal/RunCatalogOps.d.ts +1 -1
  66. package/dist/cjs/internal/RunCatalogOps.d.ts.map +1 -1
  67. package/dist/cjs/internal/RunCatalogOps.js +1 -1
  68. package/dist/cjs/internal/RunCatalogOps.js.map +1 -1
  69. package/dist/cjs/internal/RunListing.d.ts +1 -1
  70. package/dist/cjs/internal/RunListing.d.ts.map +1 -1
  71. package/dist/cjs/internal/RunListing.js +1 -1
  72. package/dist/cjs/internal/RunListing.js.map +1 -1
  73. package/dist/cjs/migrations/0001_initial.d.ts +1 -1
  74. package/dist/cjs/migrations/0001_initial.d.ts.map +1 -1
  75. package/dist/cjs/migrations/0001_initial.js +1 -1
  76. package/dist/cjs/migrations/0001_initial.js.map +1 -1
  77. package/dist/cjs/migrations/0002_selection_store.d.ts +1 -1
  78. package/dist/cjs/migrations/0002_selection_store.d.ts.map +1 -1
  79. package/dist/cjs/migrations/0002_selection_store.js +1 -1
  80. package/dist/cjs/migrations/0002_selection_store.js.map +1 -1
  81. package/dist/cjs/migrations/0003_plan_inputs.d.ts +1 -1
  82. package/dist/cjs/migrations/0003_plan_inputs.d.ts.map +1 -1
  83. package/dist/cjs/migrations/0003_plan_inputs.js +1 -1
  84. package/dist/cjs/migrations/0003_plan_inputs.js.map +1 -1
  85. package/dist/cjs/migrations/0004_plan_environment.d.ts +1 -1
  86. package/dist/cjs/migrations/0004_plan_environment.d.ts.map +1 -1
  87. package/dist/cjs/migrations/0004_plan_environment.js +1 -1
  88. package/dist/cjs/migrations/0004_plan_environment.js.map +1 -1
  89. package/dist/cjs/migrations/0005_plan_merges.d.ts +1 -1
  90. package/dist/cjs/migrations/0005_plan_merges.d.ts.map +1 -1
  91. package/dist/cjs/migrations/0005_plan_merges.js +1 -1
  92. package/dist/cjs/migrations/0005_plan_merges.js.map +1 -1
  93. package/dist/cjs/migrations/0006_execution_listing.d.ts +1 -1
  94. package/dist/cjs/migrations/0006_execution_listing.d.ts.map +1 -1
  95. package/dist/cjs/migrations/0006_execution_listing.js +1 -1
  96. package/dist/cjs/migrations/0006_execution_listing.js.map +1 -1
  97. package/dist/cjs/migrations/0007_run_parent_sequence.d.ts +1 -1
  98. package/dist/cjs/migrations/0007_run_parent_sequence.d.ts.map +1 -1
  99. package/dist/cjs/migrations/0007_run_parent_sequence.js +1 -1
  100. package/dist/cjs/migrations/0007_run_parent_sequence.js.map +1 -1
  101. package/dist/cjs/migrations/0008_deferred_consumption.d.ts +1 -1
  102. package/dist/cjs/migrations/0008_deferred_consumption.d.ts.map +1 -1
  103. package/dist/cjs/migrations/0008_deferred_consumption.js +1 -1
  104. package/dist/cjs/migrations/0008_deferred_consumption.js.map +1 -1
  105. package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts +1 -1
  106. package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts.map +1 -1
  107. package/dist/cjs/migrations/0009_deferred_clock_facts.js +1 -1
  108. package/dist/cjs/migrations/0009_deferred_clock_facts.js.map +1 -1
  109. package/dist/cjs/migrations/0010_pending_cancellation.d.ts +1 -1
  110. package/dist/cjs/migrations/0010_pending_cancellation.d.ts.map +1 -1
  111. package/dist/cjs/migrations/0010_pending_cancellation.js +1 -1
  112. package/dist/cjs/migrations/0010_pending_cancellation.js.map +1 -1
  113. package/dist/cjs/test/TestStores.d.ts +4 -4
  114. package/dist/cjs/test/TestStores.d.ts.map +1 -1
  115. package/dist/esm/ArtifactGc.d.ts +1 -1
  116. package/dist/esm/ArtifactGc.d.ts.map +1 -1
  117. package/dist/esm/ArtifactGc.js +1 -1
  118. package/dist/esm/ArtifactGc.js.map +1 -1
  119. package/dist/esm/DeferredClockFold.d.ts +4 -4
  120. package/dist/esm/DeferredClockFold.d.ts.map +1 -1
  121. package/dist/esm/DeferredClockFold.js +1 -1
  122. package/dist/esm/DeferredClockFold.js.map +1 -1
  123. package/dist/esm/DisasterRecovery.d.ts +1 -1
  124. package/dist/esm/DisasterRecovery.d.ts.map +1 -1
  125. package/dist/esm/DisasterRecovery.js +1 -1
  126. package/dist/esm/DisasterRecovery.js.map +1 -1
  127. package/dist/esm/DurableEngineState.d.ts +1 -1
  128. package/dist/esm/DurableEngineState.d.ts.map +1 -1
  129. package/dist/esm/DurableEngineState.js +1 -1
  130. package/dist/esm/DurableEngineState.js.map +1 -1
  131. package/dist/esm/ExecutionSnapshot.d.ts +2 -2
  132. package/dist/esm/ExecutionSnapshot.d.ts.map +1 -1
  133. package/dist/esm/ExecutionSnapshot.js +1 -1
  134. package/dist/esm/ExecutionSnapshot.js.map +1 -1
  135. package/dist/esm/Migrations.d.ts +2 -2
  136. package/dist/esm/Migrations.d.ts.map +1 -1
  137. package/dist/esm/OwnerIdentity.js +1 -1
  138. package/dist/esm/OwnerIdentity.js.map +1 -1
  139. package/dist/esm/PlanInputStore.d.ts +1 -1
  140. package/dist/esm/PlanInputStore.d.ts.map +1 -1
  141. package/dist/esm/PlanInputStore.js +1 -1
  142. package/dist/esm/PlanInputStore.js.map +1 -1
  143. package/dist/esm/PlanMergeStore.d.ts +1 -1
  144. package/dist/esm/PlanMergeStore.d.ts.map +1 -1
  145. package/dist/esm/PlanMergeStore.js +1 -1
  146. package/dist/esm/PlanMergeStore.js.map +1 -1
  147. package/dist/esm/Retention.d.ts +2 -2
  148. package/dist/esm/Retention.d.ts.map +1 -1
  149. package/dist/esm/Retention.js +1 -1
  150. package/dist/esm/Retention.js.map +1 -1
  151. package/dist/esm/RunChangeFeed.d.ts +1 -1
  152. package/dist/esm/RunChangeFeed.d.ts.map +1 -1
  153. package/dist/esm/RunChangeFeed.js +1 -1
  154. package/dist/esm/RunChangeFeed.js.map +1 -1
  155. package/dist/esm/SelectionStore.d.ts +1 -1
  156. package/dist/esm/SelectionStore.d.ts.map +1 -1
  157. package/dist/esm/SelectionStore.js +1 -1
  158. package/dist/esm/SelectionStore.js.map +1 -1
  159. package/dist/esm/StepBoundary.js +3 -3
  160. package/dist/esm/StepBoundary.js.map +1 -1
  161. package/dist/esm/StepCacheFold.d.ts +2 -2
  162. package/dist/esm/StepCacheFold.d.ts.map +1 -1
  163. package/dist/esm/StepCacheFold.js +1 -1
  164. package/dist/esm/StepCacheFold.js.map +1 -1
  165. package/dist/esm/internal/EngineStateSchema.d.ts +1 -1
  166. package/dist/esm/internal/EngineStateSchema.d.ts.map +1 -1
  167. package/dist/esm/internal/EngineStateSchema.js.map +1 -1
  168. package/dist/esm/internal/ExecutionSnapshotRead.d.ts +3 -3
  169. package/dist/esm/internal/ExecutionSnapshotRead.d.ts.map +1 -1
  170. package/dist/esm/internal/ExecutionSnapshotRead.js.map +1 -1
  171. package/dist/esm/internal/ExecutionSnapshotRelations.d.ts +1 -1
  172. package/dist/esm/internal/ExecutionSnapshotRelations.d.ts.map +1 -1
  173. package/dist/esm/internal/ExecutionSnapshotRelations.js.map +1 -1
  174. package/dist/esm/internal/RetentionOps.d.ts +2 -2
  175. package/dist/esm/internal/RetentionOps.d.ts.map +1 -1
  176. package/dist/esm/internal/RetentionOps.js +1 -1
  177. package/dist/esm/internal/RetentionOps.js.map +1 -1
  178. package/dist/esm/internal/RunCatalogOps.d.ts +1 -1
  179. package/dist/esm/internal/RunCatalogOps.d.ts.map +1 -1
  180. package/dist/esm/internal/RunCatalogOps.js +1 -1
  181. package/dist/esm/internal/RunCatalogOps.js.map +1 -1
  182. package/dist/esm/internal/RunListing.d.ts +1 -1
  183. package/dist/esm/internal/RunListing.d.ts.map +1 -1
  184. package/dist/esm/internal/RunListing.js +1 -1
  185. package/dist/esm/internal/RunListing.js.map +1 -1
  186. package/dist/esm/migrations/0001_initial.d.ts +1 -1
  187. package/dist/esm/migrations/0001_initial.d.ts.map +1 -1
  188. package/dist/esm/migrations/0001_initial.js +1 -1
  189. package/dist/esm/migrations/0001_initial.js.map +1 -1
  190. package/dist/esm/migrations/0002_selection_store.d.ts +1 -1
  191. package/dist/esm/migrations/0002_selection_store.d.ts.map +1 -1
  192. package/dist/esm/migrations/0002_selection_store.js +1 -1
  193. package/dist/esm/migrations/0002_selection_store.js.map +1 -1
  194. package/dist/esm/migrations/0003_plan_inputs.d.ts +1 -1
  195. package/dist/esm/migrations/0003_plan_inputs.d.ts.map +1 -1
  196. package/dist/esm/migrations/0003_plan_inputs.js +1 -1
  197. package/dist/esm/migrations/0003_plan_inputs.js.map +1 -1
  198. package/dist/esm/migrations/0004_plan_environment.d.ts +1 -1
  199. package/dist/esm/migrations/0004_plan_environment.d.ts.map +1 -1
  200. package/dist/esm/migrations/0004_plan_environment.js +1 -1
  201. package/dist/esm/migrations/0004_plan_environment.js.map +1 -1
  202. package/dist/esm/migrations/0005_plan_merges.d.ts +1 -1
  203. package/dist/esm/migrations/0005_plan_merges.d.ts.map +1 -1
  204. package/dist/esm/migrations/0005_plan_merges.js +1 -1
  205. package/dist/esm/migrations/0005_plan_merges.js.map +1 -1
  206. package/dist/esm/migrations/0006_execution_listing.d.ts +1 -1
  207. package/dist/esm/migrations/0006_execution_listing.d.ts.map +1 -1
  208. package/dist/esm/migrations/0006_execution_listing.js +1 -1
  209. package/dist/esm/migrations/0006_execution_listing.js.map +1 -1
  210. package/dist/esm/migrations/0007_run_parent_sequence.d.ts +1 -1
  211. package/dist/esm/migrations/0007_run_parent_sequence.d.ts.map +1 -1
  212. package/dist/esm/migrations/0007_run_parent_sequence.js +1 -1
  213. package/dist/esm/migrations/0007_run_parent_sequence.js.map +1 -1
  214. package/dist/esm/migrations/0008_deferred_consumption.d.ts +1 -1
  215. package/dist/esm/migrations/0008_deferred_consumption.d.ts.map +1 -1
  216. package/dist/esm/migrations/0008_deferred_consumption.js +1 -1
  217. package/dist/esm/migrations/0008_deferred_consumption.js.map +1 -1
  218. package/dist/esm/migrations/0009_deferred_clock_facts.d.ts +1 -1
  219. package/dist/esm/migrations/0009_deferred_clock_facts.d.ts.map +1 -1
  220. package/dist/esm/migrations/0009_deferred_clock_facts.js +1 -1
  221. package/dist/esm/migrations/0009_deferred_clock_facts.js.map +1 -1
  222. package/dist/esm/migrations/0010_pending_cancellation.d.ts +1 -1
  223. package/dist/esm/migrations/0010_pending_cancellation.d.ts.map +1 -1
  224. package/dist/esm/migrations/0010_pending_cancellation.js +1 -1
  225. package/dist/esm/migrations/0010_pending_cancellation.js.map +1 -1
  226. package/dist/esm/test/TestStores.d.ts +4 -4
  227. package/dist/esm/test/TestStores.d.ts.map +1 -1
  228. package/package.json +22 -22
  229. package/src/ArtifactGc.ts +1 -1
  230. package/src/DeferredClockFold.ts +1 -1
  231. package/src/DisasterRecovery.ts +1 -1
  232. package/src/DurableEngineState.ts +1 -1
  233. package/src/ExecutionSnapshot.ts +1 -1
  234. package/src/OwnerIdentity.ts +1 -1
  235. package/src/PlanInputStore.ts +1 -1
  236. package/src/PlanMergeStore.ts +1 -1
  237. package/src/Retention.ts +2 -2
  238. package/src/RunChangeFeed.ts +1 -1
  239. package/src/SelectionStore.ts +1 -1
  240. package/src/StepBoundary.ts +3 -3
  241. package/src/StepCacheFold.ts +1 -1
  242. package/src/internal/EngineStateSchema.ts +1 -1
  243. package/src/internal/ExecutionSnapshotRead.ts +1 -1
  244. package/src/internal/ExecutionSnapshotRelations.ts +1 -1
  245. package/src/internal/RetentionOps.ts +2 -2
  246. package/src/internal/RunCatalogOps.ts +1 -1
  247. package/src/internal/RunListing.ts +1 -1
  248. package/src/migrations/0001_initial.ts +1 -1
  249. package/src/migrations/0002_selection_store.ts +1 -1
  250. package/src/migrations/0003_plan_inputs.ts +1 -1
  251. package/src/migrations/0004_plan_environment.ts +1 -1
  252. package/src/migrations/0005_plan_merges.ts +1 -1
  253. package/src/migrations/0006_execution_listing.ts +1 -1
  254. package/src/migrations/0007_run_parent_sequence.ts +1 -1
  255. package/src/migrations/0008_deferred_consumption.ts +1 -1
  256. package/src/migrations/0009_deferred_clock_facts.ts +1 -1
  257. package/src/migrations/0010_pending_cancellation.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"StepCacheFold.d.ts","sourceRoot":"","sources":["../../src/StepCacheFold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,SAAS,kCAAkC,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,MAAM,CAAkD,CAAA;AAEpG;;;;;GAKG;AACH,MAAM,WAAW,KAAK;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IAClE,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;CAC1C;AAED;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,UAAU,CAAC,WAAW,KAAG,MACsB,CAAA;AAqB1E;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,OAAO,YAAY,CAAC,KAAK,KAAG,KAMhE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,KAA+D,CAAA;AAErF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAIlD,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,aAAa,CAAC,UAAU,CAAC,WAAW,CAS7E,CAAA;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAwBD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,OAAO;;;;;;;uMAgClB,CAAA"}
1
+ {"version":3,"file":"StepCacheFold.d.ts","sourceRoot":"","sources":["../../src/StepCacheFold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,kCAAkC,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,MAAM,CAAkD,CAAA;AAEpG;;;;;GAKG;AACH,MAAM,WAAW,KAAK;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IAClE,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;CAC1C;AAED;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,UAAU,CAAC,WAAW,KAAG,MACsB,CAAA;AAqB1E;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,OAAO,YAAY,CAAC,KAAK,KAAG,KAMhE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,KAA+D,CAAA;AAErF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAIlD,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,aAAa,CAAC,UAAU,CAAC,WAAW,CAS7E,CAAA;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAwBD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,OAAO;;;;;;;8LAgClB,CAAA"}
@@ -41,7 +41,7 @@ import { CacheStore } from "@smthrs/step-cache";
41
41
  import * as Effect from "effect/Effect";
42
42
  import * as HashMap from "effect/HashMap";
43
43
  import * as HashSet from "effect/HashSet";
44
- import * as SqlClient from "effect/unstable/sql/SqlClient";
44
+ import * as SqlClient from "effect/sql/SqlClient";
45
45
  /**
46
46
  * The journal event type the fold reads.
47
47
  *
@@ -1 +1 @@
1
- {"version":3,"file":"StepCacheFold.js","sourceRoot":"","sources":["../../src/StepCacheFold.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The step-cache fold: `flows_step_cache` heads rebuilt from the journal.\n *\n * A head exists only because a `CacheStore.put` inserted it, and\n * `ActionPersistence` journals exactly that insertion as a\n * `flows.engine.cache-provenance` entry with action `admitted`, in the same\n * `journal.transact` as the `put`. A duplicate or a losing first-writer race\n * writes a ledger row but no head, so it journals no `admitted` entry. Every\n * engine eviction is journalled before the fenced `CacheStore.evict` that\n * performs it: `expired`, `stale_read_set`, and `replay_failed` with reason\n * `corruption`, each naming the row it retires. The fold retires a row on any\n * `replay_failed` that names it: a producer slot keeps the first reason it\n * journalled, so a corruption can hide behind an earlier host failure. A row\n * whose replay failed only on the host is then a miss.\n *\n * The fold keeps the admitted rows no eviction retired. A key with one such\n * row gets it back as its head. A key with several lost at least one of them\n * without a journal entry (`sweepExpired`, retention, an unfenced `evict`), and\n * the journal cannot say which one the store still held, so it gets no head.\n *\n * Cache results stay in the append-only `flows_step_cache_recorded` ledger\n * that the `admitted` entry addresses. The journal is redacted and replayed to\n * sync subscribers, so it carries the decision and the provenance, never the\n * executable result (issue #72).\n *\n * A rebuild writes a subset of the live heads, apart from rows removed without\n * a journal entry, whose restored hits still pass the engine's age, read-set,\n * and digest checks. Shared-tier write-backs have no local entry and are not\n * rebuilt. Compaction and rewind delete eviction entries, so a store holding\n * a compacted run, or one where any run was ever rewound, gets no heads at all.\n * Retention is not yet covered: it deletes a run's entries, and with them the\n * compaction floor and any eviction that run journalled of another run's row,\n * so a rebuild after retention can restore a row the engine evicted (issue\n * #2053). A convergence re-record that reuses an evicted row's provenance stays\n * retired, so that key misses.\n *\n * @since 1.0.0\n */\n\nimport { Journal, type JournalEvent, Projection } from \"@smthrs/journal\"\nimport { CacheStore } from \"@smthrs/step-cache\"\nimport * as Effect from \"effect/Effect\"\nimport * as HashMap from \"effect/HashMap\"\nimport * as HashSet from \"effect/HashSet\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * The journal event type the fold reads.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const eventType = \"flows.engine.cache-provenance\"\n\n/**\n * Provenance actions that retire the row they name.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const retiringActions: ReadonlyArray<string> = [\"expired\", \"stale_read_set\", \"replay_failed\"]\n\n/**\n * Admitted rows folded so far, and the ones the journal retired.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface State {\n /** Every row a `put` inserted as a head, by {@link refId}. */\n readonly admitted: HashMap.HashMap<string, CacheStore.RecordedRef>\n /** Rows an engine eviction retired, by {@link refId}. */\n readonly retired: HashSet.HashSet<string>\n}\n\n/**\n * The stable identity of a recorded row.\n *\n * @category models\n * @since 1.0.0\n */\nexport const refId = (ref: CacheStore.RecordedRef): string =>\n JSON.stringify([ref.keyDigest, ref.recordedRunId, ref.recordedEventSeq])\n\nconst record = (value: unknown): Readonly<Record<string, unknown>> | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Readonly<Record<string, unknown>>\n : undefined\n\n/** The row a payload names by `keyDigest`/`recordedRunId`/`recordedEventSeq`, if it names one. */\nconst named = (payload: Readonly<Record<string, unknown>>): CacheStore.RecordedRef | undefined =>\n typeof payload.keyDigest === \"string\" && typeof payload.recordedRunId === \"string\" &&\n typeof payload.recordedEventSeq === \"number\"\n ? {\n keyDigest: payload.keyDigest,\n recordedRunId: payload.recordedRunId,\n recordedEventSeq: payload.recordedEventSeq\n }\n : undefined\n\nconst retires = (payload: Readonly<Record<string, unknown>>): boolean =>\n retiringActions.includes(payload.action as string)\n\n/**\n * Folds one committed journal entry.\n *\n * @category folds\n * @since 1.0.0\n */\nexport const reduce = (state: State, entry: JournalEvent.Entry): State => {\n const payload = record(entry.payload)\n const ref = entry.eventType === eventType && payload !== undefined ? named(payload) : undefined\n if (ref === undefined) return state\n if (payload!.action === \"admitted\") return { ...state, admitted: HashMap.set(state.admitted, refId(ref), ref) }\n return retires(payload!) ? { ...state, retired: HashSet.add(state.retired, refId(ref)) } : state\n}\n\n/**\n * The empty fold.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const initial: State = { admitted: HashMap.empty(), retired: HashSet.empty() }\n\n/**\n * The fold as a journal projection, for `Journal.project` over one run.\n *\n * @category folds\n * @since 1.0.0\n */\nexport const projection: Projection.Projection<State> = Projection.make({\n name: \"flows.engine.step-cache\",\n initial,\n reduce: (state, entry) => Effect.succeed(reduce(state, entry))\n})\n\n/**\n * The head each key may be rebuilt with: its one admitted row no eviction\n * retired. A key with more than one such row gets none.\n *\n * @category folds\n * @since 1.0.0\n */\nexport const candidates = (state: State): ReadonlyArray<CacheStore.RecordedRef> => {\n const byKey = new Map<string, Array<CacheStore.RecordedRef>>()\n for (const [id, ref] of state.admitted) {\n if (HashSet.has(state.retired, id)) continue\n const refs = byKey.get(ref.keyDigest)\n if (refs === undefined) byKey.set(ref.keyDigest, [ref])\n else refs.push(ref)\n }\n return [...byKey.values()].flatMap((refs) => refs.length === 1 ? refs : [])\n}\n\n/**\n * What a {@link rebuild} read and wrote.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Rebuilt {\n /** Runs with cache provenance entries. */\n readonly runs: number\n /** Runs with a compaction floor. Any makes the rebuild write no heads. */\n readonly compacted: number\n /** Runs a rewind truncated. Any makes the rebuild write no heads. */\n readonly rewound: number\n readonly admitted: number\n readonly retired: number\n readonly heads: number\n}\n\nconst pageSize = 512\n\n/** Folds one run's cache provenance entries into `state`, in sequence order. */\nconst foldRun = (journal: Journal.Service, runId: string, start: State) =>\n Effect.gen(function*() {\n let state = start\n let after: JournalEvent.Seq | undefined\n while (true) {\n const page = yield* journal.entries({\n runId: runId as JournalEvent.RunId,\n eventTypes: [eventType],\n limit: pageSize,\n ...(after === undefined ? {} : { after })\n })\n for (const entry of page.entries) {\n state = reduce(state, entry)\n after = entry.seq\n }\n if (!page.hasMore) return state\n }\n })\n\n/**\n * Rebuilds every `flows_step_cache` head from the journal.\n *\n * Reads each run's cache provenance entries in sequence order, folds them,\n * and replaces the heads through `CacheStore.rebuildHeads` in one writer\n * transaction. A store with a compacted or rewound run clears the heads\n * instead: the eviction that retired a row may be gone. A journal read failure, including\n * a compaction that lands during the read, leaves the heads untouched.\n *\n * Run it on a quiescent store, as a restore does: a cache write that commits\n * between the journal read and the rewrite is dropped from the heads (a miss,\n * never a wrong hit).\n *\n * @category operations\n * @since 1.0.0\n */\nexport const rebuild = Effect.fn(\"StepCacheFold.rebuild\")(function*() {\n const journal = yield* Journal.Journal\n const sql = yield* SqlClient.SqlClient\n const floors = yield* sql<{ readonly compacted: number | string }>`\n SELECT COUNT(DISTINCT run_id) AS compacted FROM flows_journal_checkpoints\n WHERE compacted_at_ms IS NOT NULL\n `\n const compacted = Number(floors[0]!.compacted)\n const generations = yield* sql<{ readonly rewound: number | string }>`\n SELECT COUNT(*) AS rewound FROM flows_journal_generations\n `\n const rewound = Number(generations[0]!.rewound)\n const runs = yield* sql<{ readonly run_id: string }>`\n SELECT DISTINCT run_id FROM flows_journal_events\n WHERE event_type = ${eventType}\n ORDER BY run_id\n `\n let state = initial\n if (compacted === 0 && rewound === 0) {\n for (const { run_id } of runs) {\n state = yield* foldRun(journal, run_id, state)\n }\n }\n const heads = yield* CacheStore.rebuildHeads(candidates(state))\n return {\n runs: runs.length,\n compacted,\n rewound,\n admitted: HashMap.size(state.admitted),\n retired: HashSet.size(state.retired),\n heads\n } satisfies Rebuilt\n})\n"]}
1
+ {"version":3,"file":"StepCacheFold.js","sourceRoot":"","sources":["../../src/StepCacheFold.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The step-cache fold: `flows_step_cache` heads rebuilt from the journal.\n *\n * A head exists only because a `CacheStore.put` inserted it, and\n * `ActionPersistence` journals exactly that insertion as a\n * `flows.engine.cache-provenance` entry with action `admitted`, in the same\n * `journal.transact` as the `put`. A duplicate or a losing first-writer race\n * writes a ledger row but no head, so it journals no `admitted` entry. Every\n * engine eviction is journalled before the fenced `CacheStore.evict` that\n * performs it: `expired`, `stale_read_set`, and `replay_failed` with reason\n * `corruption`, each naming the row it retires. The fold retires a row on any\n * `replay_failed` that names it: a producer slot keeps the first reason it\n * journalled, so a corruption can hide behind an earlier host failure. A row\n * whose replay failed only on the host is then a miss.\n *\n * The fold keeps the admitted rows no eviction retired. A key with one such\n * row gets it back as its head. A key with several lost at least one of them\n * without a journal entry (`sweepExpired`, retention, an unfenced `evict`), and\n * the journal cannot say which one the store still held, so it gets no head.\n *\n * Cache results stay in the append-only `flows_step_cache_recorded` ledger\n * that the `admitted` entry addresses. The journal is redacted and replayed to\n * sync subscribers, so it carries the decision and the provenance, never the\n * executable result (issue #72).\n *\n * A rebuild writes a subset of the live heads, apart from rows removed without\n * a journal entry, whose restored hits still pass the engine's age, read-set,\n * and digest checks. Shared-tier write-backs have no local entry and are not\n * rebuilt. Compaction and rewind delete eviction entries, so a store holding\n * a compacted run, or one where any run was ever rewound, gets no heads at all.\n * Retention is not yet covered: it deletes a run's entries, and with them the\n * compaction floor and any eviction that run journalled of another run's row,\n * so a rebuild after retention can restore a row the engine evicted (issue\n * #2053). A convergence re-record that reuses an evicted row's provenance stays\n * retired, so that key misses.\n *\n * @since 1.0.0\n */\n\nimport { Journal, type JournalEvent, Projection } from \"@smthrs/journal\"\nimport { CacheStore } from \"@smthrs/step-cache\"\nimport * as Effect from \"effect/Effect\"\nimport * as HashMap from \"effect/HashMap\"\nimport * as HashSet from \"effect/HashSet\"\nimport * as SqlClient from \"effect/sql/SqlClient\"\n\n/**\n * The journal event type the fold reads.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const eventType = \"flows.engine.cache-provenance\"\n\n/**\n * Provenance actions that retire the row they name.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const retiringActions: ReadonlyArray<string> = [\"expired\", \"stale_read_set\", \"replay_failed\"]\n\n/**\n * Admitted rows folded so far, and the ones the journal retired.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface State {\n /** Every row a `put` inserted as a head, by {@link refId}. */\n readonly admitted: HashMap.HashMap<string, CacheStore.RecordedRef>\n /** Rows an engine eviction retired, by {@link refId}. */\n readonly retired: HashSet.HashSet<string>\n}\n\n/**\n * The stable identity of a recorded row.\n *\n * @category models\n * @since 1.0.0\n */\nexport const refId = (ref: CacheStore.RecordedRef): string =>\n JSON.stringify([ref.keyDigest, ref.recordedRunId, ref.recordedEventSeq])\n\nconst record = (value: unknown): Readonly<Record<string, unknown>> | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Readonly<Record<string, unknown>>\n : undefined\n\n/** The row a payload names by `keyDigest`/`recordedRunId`/`recordedEventSeq`, if it names one. */\nconst named = (payload: Readonly<Record<string, unknown>>): CacheStore.RecordedRef | undefined =>\n typeof payload.keyDigest === \"string\" && typeof payload.recordedRunId === \"string\" &&\n typeof payload.recordedEventSeq === \"number\"\n ? {\n keyDigest: payload.keyDigest,\n recordedRunId: payload.recordedRunId,\n recordedEventSeq: payload.recordedEventSeq\n }\n : undefined\n\nconst retires = (payload: Readonly<Record<string, unknown>>): boolean =>\n retiringActions.includes(payload.action as string)\n\n/**\n * Folds one committed journal entry.\n *\n * @category folds\n * @since 1.0.0\n */\nexport const reduce = (state: State, entry: JournalEvent.Entry): State => {\n const payload = record(entry.payload)\n const ref = entry.eventType === eventType && payload !== undefined ? named(payload) : undefined\n if (ref === undefined) return state\n if (payload!.action === \"admitted\") return { ...state, admitted: HashMap.set(state.admitted, refId(ref), ref) }\n return retires(payload!) ? { ...state, retired: HashSet.add(state.retired, refId(ref)) } : state\n}\n\n/**\n * The empty fold.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const initial: State = { admitted: HashMap.empty(), retired: HashSet.empty() }\n\n/**\n * The fold as a journal projection, for `Journal.project` over one run.\n *\n * @category folds\n * @since 1.0.0\n */\nexport const projection: Projection.Projection<State> = Projection.make({\n name: \"flows.engine.step-cache\",\n initial,\n reduce: (state, entry) => Effect.succeed(reduce(state, entry))\n})\n\n/**\n * The head each key may be rebuilt with: its one admitted row no eviction\n * retired. A key with more than one such row gets none.\n *\n * @category folds\n * @since 1.0.0\n */\nexport const candidates = (state: State): ReadonlyArray<CacheStore.RecordedRef> => {\n const byKey = new Map<string, Array<CacheStore.RecordedRef>>()\n for (const [id, ref] of state.admitted) {\n if (HashSet.has(state.retired, id)) continue\n const refs = byKey.get(ref.keyDigest)\n if (refs === undefined) byKey.set(ref.keyDigest, [ref])\n else refs.push(ref)\n }\n return [...byKey.values()].flatMap((refs) => refs.length === 1 ? refs : [])\n}\n\n/**\n * What a {@link rebuild} read and wrote.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Rebuilt {\n /** Runs with cache provenance entries. */\n readonly runs: number\n /** Runs with a compaction floor. Any makes the rebuild write no heads. */\n readonly compacted: number\n /** Runs a rewind truncated. Any makes the rebuild write no heads. */\n readonly rewound: number\n readonly admitted: number\n readonly retired: number\n readonly heads: number\n}\n\nconst pageSize = 512\n\n/** Folds one run's cache provenance entries into `state`, in sequence order. */\nconst foldRun = (journal: Journal.Service, runId: string, start: State) =>\n Effect.gen(function*() {\n let state = start\n let after: JournalEvent.Seq | undefined\n while (true) {\n const page = yield* journal.entries({\n runId: runId as JournalEvent.RunId,\n eventTypes: [eventType],\n limit: pageSize,\n ...(after === undefined ? {} : { after })\n })\n for (const entry of page.entries) {\n state = reduce(state, entry)\n after = entry.seq\n }\n if (!page.hasMore) return state\n }\n })\n\n/**\n * Rebuilds every `flows_step_cache` head from the journal.\n *\n * Reads each run's cache provenance entries in sequence order, folds them,\n * and replaces the heads through `CacheStore.rebuildHeads` in one writer\n * transaction. A store with a compacted or rewound run clears the heads\n * instead: the eviction that retired a row may be gone. A journal read failure, including\n * a compaction that lands during the read, leaves the heads untouched.\n *\n * Run it on a quiescent store, as a restore does: a cache write that commits\n * between the journal read and the rewrite is dropped from the heads (a miss,\n * never a wrong hit).\n *\n * @category operations\n * @since 1.0.0\n */\nexport const rebuild = Effect.fn(\"StepCacheFold.rebuild\")(function*() {\n const journal = yield* Journal.Journal\n const sql = yield* SqlClient.SqlClient\n const floors = yield* sql<{ readonly compacted: number | string }>`\n SELECT COUNT(DISTINCT run_id) AS compacted FROM flows_journal_checkpoints\n WHERE compacted_at_ms IS NOT NULL\n `\n const compacted = Number(floors[0]!.compacted)\n const generations = yield* sql<{ readonly rewound: number | string }>`\n SELECT COUNT(*) AS rewound FROM flows_journal_generations\n `\n const rewound = Number(generations[0]!.rewound)\n const runs = yield* sql<{ readonly run_id: string }>`\n SELECT DISTINCT run_id FROM flows_journal_events\n WHERE event_type = ${eventType}\n ORDER BY run_id\n `\n let state = initial\n if (compacted === 0 && rewound === 0) {\n for (const { run_id } of runs) {\n state = yield* foldRun(journal, run_id, state)\n }\n }\n const heads = yield* CacheStore.rebuildHeads(candidates(state))\n return {\n runs: runs.length,\n compacted,\n rewound,\n admitted: HashMap.size(state.admitted),\n retired: HashSet.size(state.retired),\n heads\n } satisfies Rebuilt\n})\n"]}
@@ -18,7 +18,7 @@
18
18
  */
19
19
  import type { Service as WriterService } from "@smthrs/database/DurableWriter";
20
20
  import * as Effect from "effect/Effect";
21
- import type * as SqlClient from "effect/unstable/sql/SqlClient";
21
+ import type * as SqlClient from "effect/sql/SqlClient";
22
22
  /**
23
23
  * SQL dialects a statement is known to be accepted by, verbatim.
24
24
  *
@@ -1 +1 @@
1
- {"version":3,"file":"EngineStateSchema.d.ts","sourceRoot":"","sources":["../../../src/internal/EngineStateSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9E,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAA;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,SAAS,CAa/C,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,SAAS,CAAC,SAAS,EAAE,QAAQ,aAAa,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAMvF,CAAA"}
1
+ {"version":3,"file":"EngineStateSchema.d.ts","sourceRoot":"","sources":["../../../src/internal/EngineStateSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9E,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAA;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,SAAS,CAa/C,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,SAAS,CAAC,SAAS,EAAE,QAAQ,aAAa,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAMvF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"EngineStateSchema.js","sourceRoot":"","sources":["../../../src/internal/EngineStateSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAiCvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD;QACE,IAAI,EAAE,8BAA8B;QACpC,MAAM,EACJ,0MAA0M;QAC5M,yEAAyE;QACzE,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAChC,GAAG,EAAE;;;;KAIJ;KACF;CACF,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAwB,EAAE,MAAqB,EAAuB,EAAE;AAC5F,uEAAuE;AACvE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAC5C,UAAU,EACV,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EACzE,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAA","sourcesContent":["/**\n * The schema objects `DurableEngineState` creates outside the journal\n * migration, and the inventory of what porting them to another\n * dialect costs.\n *\n * Each durable package owns its migration ladder. Spawn edges and their GC\n * trigger moved into engine-store migration 0006. The remaining\n * statements are engine-store-owned storage created idempotently at\n * construction instead (issues #40/#41/#79/#81). That is a deliberate lane\n * boundary, not an oversight — but it left the statements invisible to the\n * pg-porting plan in the database roadmap, which\n * scoped only the journal migration's SQLite-specific DDL. Declaring them here\n * makes the inventory machine-readable: a test diffs the database's schema\n * objects across `make` against this list, so no engine-owned statement can\n * be added without appearing in the porting inventory (issue #92).\n *\n * @since 0.1.0\n */\n\nimport { isReadOnly } from \"@smthrs/database/Dialect\"\nimport type { Service as WriterService } from \"@smthrs/database/DurableWriter\"\nimport * as Effect from \"effect/Effect\"\nimport type * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * SQL dialects a statement is known to be accepted by, verbatim.\n *\n * @since 0.1.0\n * @category models\n */\nexport type Dialect = \"sqlite\" | \"postgres\"\n\n/**\n * One engine-store-owned schema object.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Statement {\n /** The schema object's name, as it appears in the catalog. */\n readonly name: string\n /** Why the object exists, by issue. */\n readonly reason: string\n /**\n * Dialects that accept this statement unchanged. A statement listing only\n * `\"sqlite\"` must be rewritten before a Postgres/PGlite `Database` layer\n * can construct this service — `make` pipes every one of them through\n * `Effect.orDie`, so an unported statement is a construction-time defect,\n * not a recoverable error.\n */\n readonly dialects: ReadonlyArray<Dialect>\n readonly ddl: string\n}\n\n/**\n * The porting inventory: every engine-store-owned statement, in creation order.\n *\n * @since 0.1.0\n * @category constants\n */\nexport const statements: ReadonlyArray<Statement> = [\n {\n name: \"flows_runs_stale_running_idx\",\n reason:\n \"Serves the stale-running sweep's per-tick predicate (issue #79): `status = 'running' AND heartbeat_at_ms < cutoff`, ordered by heartbeat. A partial index keeps it tiny — only live running rows appear.\",\n // Partial indexes are valid Postgres since 9.5, so this one ports as-is.\n dialects: [\"sqlite\", \"postgres\"],\n ddl: `\n CREATE INDEX IF NOT EXISTS flows_runs_stale_running_idx\n ON flows_runs (heartbeat_at_ms)\n WHERE status = 'running'\n `\n }\n]\n\n/**\n * Creates the engine-store-owned objects, idempotently, in inventory order.\n *\n * `flows_runs` must already exist — every query in this service assumes a\n * migrated database, so `make` composes over one by construction. A read-only\n * client installs nothing.\n *\n * @since 0.1.0\n * @category constructors\n */\nexport const apply = (sql: SqlClient.SqlClient, writer: WriterService): Effect.Effect<void> =>\n // A read-only observer reads the schema it finds and installs nothing.\n isReadOnly(sql) ? Effect.void : Effect.forEach(\n statements,\n (statement) => writer.write(sql.unsafe(statement.ddl)).pipe(Effect.orDie),\n { discard: true }\n )\n"]}
1
+ {"version":3,"file":"EngineStateSchema.js","sourceRoot":"","sources":["../../../src/internal/EngineStateSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAiCvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD;QACE,IAAI,EAAE,8BAA8B;QACpC,MAAM,EACJ,0MAA0M;QAC5M,yEAAyE;QACzE,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAChC,GAAG,EAAE;;;;KAIJ;KACF;CACF,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAwB,EAAE,MAAqB,EAAuB,EAAE;AAC5F,uEAAuE;AACvE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAC5C,UAAU,EACV,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EACzE,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAA","sourcesContent":["/**\n * The schema objects `DurableEngineState` creates outside the journal\n * migration, and the inventory of what porting them to another\n * dialect costs.\n *\n * Each durable package owns its migration ladder. Spawn edges and their GC\n * trigger moved into engine-store migration 0006. The remaining\n * statements are engine-store-owned storage created idempotently at\n * construction instead (issues #40/#41/#79/#81). That is a deliberate lane\n * boundary, not an oversight — but it left the statements invisible to the\n * pg-porting plan in the database roadmap, which\n * scoped only the journal migration's SQLite-specific DDL. Declaring them here\n * makes the inventory machine-readable: a test diffs the database's schema\n * objects across `make` against this list, so no engine-owned statement can\n * be added without appearing in the porting inventory (issue #92).\n *\n * @since 0.1.0\n */\n\nimport { isReadOnly } from \"@smthrs/database/Dialect\"\nimport type { Service as WriterService } from \"@smthrs/database/DurableWriter\"\nimport * as Effect from \"effect/Effect\"\nimport type * as SqlClient from \"effect/sql/SqlClient\"\n\n/**\n * SQL dialects a statement is known to be accepted by, verbatim.\n *\n * @since 0.1.0\n * @category models\n */\nexport type Dialect = \"sqlite\" | \"postgres\"\n\n/**\n * One engine-store-owned schema object.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Statement {\n /** The schema object's name, as it appears in the catalog. */\n readonly name: string\n /** Why the object exists, by issue. */\n readonly reason: string\n /**\n * Dialects that accept this statement unchanged. A statement listing only\n * `\"sqlite\"` must be rewritten before a Postgres/PGlite `Database` layer\n * can construct this service — `make` pipes every one of them through\n * `Effect.orDie`, so an unported statement is a construction-time defect,\n * not a recoverable error.\n */\n readonly dialects: ReadonlyArray<Dialect>\n readonly ddl: string\n}\n\n/**\n * The porting inventory: every engine-store-owned statement, in creation order.\n *\n * @since 0.1.0\n * @category constants\n */\nexport const statements: ReadonlyArray<Statement> = [\n {\n name: \"flows_runs_stale_running_idx\",\n reason:\n \"Serves the stale-running sweep's per-tick predicate (issue #79): `status = 'running' AND heartbeat_at_ms < cutoff`, ordered by heartbeat. A partial index keeps it tiny — only live running rows appear.\",\n // Partial indexes are valid Postgres since 9.5, so this one ports as-is.\n dialects: [\"sqlite\", \"postgres\"],\n ddl: `\n CREATE INDEX IF NOT EXISTS flows_runs_stale_running_idx\n ON flows_runs (heartbeat_at_ms)\n WHERE status = 'running'\n `\n }\n]\n\n/**\n * Creates the engine-store-owned objects, idempotently, in inventory order.\n *\n * `flows_runs` must already exist — every query in this service assumes a\n * migrated database, so `make` composes over one by construction. A read-only\n * client installs nothing.\n *\n * @since 0.1.0\n * @category constructors\n */\nexport const apply = (sql: SqlClient.SqlClient, writer: WriterService): Effect.Effect<void> =>\n // A read-only observer reads the schema it finds and installs nothing.\n isReadOnly(sql) ? Effect.void : Effect.forEach(\n statements,\n (statement) => writer.write(sql.unsafe(statement.ddl)).pipe(Effect.orDie),\n { discard: true }\n )\n"]}
@@ -6,7 +6,7 @@
6
6
  import * as Sha256 from "@smthrs/crypto/Sha256";
7
7
  import { RunStoreError } from "@smthrs/run-store/RunStore";
8
8
  import { Effect, Schema } from "effect";
9
- import type * as SqlClient from "effect/unstable/sql/SqlClient";
9
+ import type * as SqlClient from "effect/sql/SqlClient";
10
10
  import type { Batch } from "../ExecutionSnapshot.ts";
11
11
  /**
12
12
  * Non-negative safe integer for timestamps and revisions.
@@ -59,7 +59,7 @@ export type Position = typeof Position.Type;
59
59
  * @since 1.0.0
60
60
  * @private
61
61
  */
62
- export declare const transaction: <A, E, R>(sql: SqlClient.SqlClient, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, import("effect/unstable/sql/SqlError").SqlError | E, R>;
62
+ export declare const transaction: <A, E, R>(sql: SqlClient.SqlClient, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, import("effect/sql/SqlError").SqlError | E, R>;
63
63
  /**
64
64
  * Preserves failure causes and interruption at the read boundary.
65
65
  *
@@ -83,7 +83,7 @@ export declare const decode: <S extends Schema.Top>(schema: S, input: unknown) =
83
83
  export declare const position: (sql: SqlClient.SqlClient) => Effect.Effect<{
84
84
  readonly source: string;
85
85
  readonly revision: number;
86
- }, import("effect/unstable/sql/SqlError").SqlError | RunStoreError, never>;
86
+ }, import("effect/sql/SqlError").SqlError | RunStoreError, never>;
87
87
  /**
88
88
  * Structured waiting condition; nullable fields preserve older unknown values.
89
89
  * The opaque wake token leaves the engine only as its SHA-256 `tokenDigest`,
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionSnapshotRead.d.ts","sourceRoot":"","sources":["../../../src/internal/ExecutionSnapshotRead.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAE/C,OAAO,EAAa,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAS,MAAM,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC5D,OAAO,KAAK,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAGpD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,YAAuF,CAAA;AAC3G;;;;;GAKG;AACH,eAAO,MAAM,UAAU,uBAKtB,CAAA;AACD;;;;;GAKG;AACH,eAAO,MAAM,MAAM,eAA0D,CAAA;AAC7E;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;EAAuD,CAAA;AAC5E;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,SAAS,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,6EAiB1F,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAY/G,CAAA;AAEL;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,OAAO,mEAQlE,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,CAAC,SAAS;;;0EAG9C,CAAA;AAkCH;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;CACvD;AAiBD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,yQAEmF,CAAA;AAE7G;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,EAAE,IAAI,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAkDjD,CAAA;AAEJ;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAA;AAElE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,KAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAmB7G,CAAA"}
1
+ {"version":3,"file":"ExecutionSnapshotRead.d.ts","sourceRoot":"","sources":["../../../src/internal/ExecutionSnapshotRead.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAE/C,OAAO,EAAa,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAS,MAAM,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC5D,OAAO,KAAK,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAGpD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,YAAuF,CAAA;AAC3G;;;;;GAKG;AACH,eAAO,MAAM,UAAU,uBAKtB,CAAA;AACD;;;;;GAKG;AACH,eAAO,MAAM,MAAM,eAA0D,CAAA;AAC7E;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;EAAuD,CAAA;AAC5E;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,SAAS,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,oEAiB1F,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAY/G,CAAA;AAEL;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,OAAO,mEAQlE,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,CAAC,SAAS;;;iEAG9C,CAAA;AAkCH;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;CACvD;AAiBD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,yQAEmF,CAAA;AAE7G;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,EAAE,IAAI,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAkDjD,CAAA;AAEJ;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAA;AAElE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,KAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAmB7G,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionSnapshotRead.js","sourceRoot":"","sources":["../../../src/internal/ExecutionSnapshotRead.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared transactional execution decoding.\n *\n * @since 1.0.0\n */\n\nimport * as Sha256 from \"@smthrs/crypto/Sha256\"\nimport { OwnerId } from \"@smthrs/journal/OwnerId\"\nimport { RunStatus, RunStoreError } from \"@smthrs/run-store/RunStore\"\nimport { Cause, Effect, Exit, Option, Schema } from \"effect\"\nimport type * as SqlClient from \"effect/unstable/sql/SqlClient\"\nimport type { Batch } from \"../ExecutionSnapshot.ts\"\nimport { RunState } from \"../RunState.ts\"\n\n/**\n * Non-negative safe integer for timestamps and revisions.\n *\n * @private\n * @since 1.0.0\n */\nexport const Natural = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: Number.MAX_SAFE_INTEGER }))\n/**\n * Bounded identifier with a durable text encoding.\n *\n * @private\n * @since 1.0.0\n */\nexport const Identifier = Schema.NonEmptyString.check(\n Schema.isMaxLength(1024),\n Schema.makeFilter((value) =>\n !value.includes(\"\\0\") && !/[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/.test(value)\n )\n)\n/**\n * Engine database source identity.\n *\n * @private\n * @since 1.0.0\n */\nexport const Source = Schema.String.check(Schema.isPattern(/^[0-9a-f]{32}$/))\n/**\n * Source identity and observed high-water mark.\n *\n * @private\n * @since 1.0.0\n */\nexport const Position = Schema.Struct({ source: Source, revision: Natural })\n/**\n * Source identity and observed high-water mark.\n *\n * @private\n * @since 1.0.0\n */\nexport type Position = typeof Position.Type\n\n/**\n * A deferred read transaction on the reserved engine connection. The normal\n * writable client's transaction starts IMMEDIATE; a read needs only SQLite's\n * snapshot and must allow a WAL writer to commit while it reads. PostgreSQL\n * reads at REPEATABLE READ so every statement shares the snapshot the position\n * was read from; READ COMMITTED would let a concurrent commit make a row look\n * newer than its position. Reuse the SQL\n * client's transaction service to join an existing transaction. No read body\n * exposes a mutation callback. Connection reservation and interruption release\n * remain scoped, including when BEGIN or the read fails.\n * @since 1.0.0\n * @private\n */\nexport const transaction = <A, E, R>(sql: SqlClient.SqlClient, effect: Effect.Effect<A, E, R>) =>\n Effect.flatMap(\n Effect.serviceOption(sql.transactionService),\n (existing) =>\n Option.isSome(existing) ? effect : Effect.scoped(Effect.gen(function*() {\n const connection = yield* sql.reserve\n return yield* Effect.acquireUseRelease(\n connection.executeUnprepared(\n sql.onDialectOrElse({ pg: () => \"BEGIN ISOLATION LEVEL REPEATABLE READ READ ONLY\", orElse: () => \"BEGIN\" }),\n [],\n undefined\n ),\n () => effect.pipe(Effect.provideService(sql.transactionService, [connection, 0])),\n (_, exit) =>\n connection.executeUnprepared(Exit.isSuccess(exit) ? \"COMMIT\" : \"ROLLBACK\", [], undefined).pipe(Effect.orDie)\n )\n }))\n )\n\n/**\n * Preserves failure causes and interruption at the read boundary.\n *\n * @private\n * @since 1.0.0\n */\nexport const boundary = <A, E, R>(method: string, effect: Effect.Effect<A, E, R>): Effect.Effect<A, RunStoreError, R> =>\n effect.pipe(Effect.catchCause((cause) => {\n if (Cause.hasInterruptsOnly(cause)) return Effect.failCause(cause as Cause.Cause<never>)\n const original = Cause.squash(cause)\n return Effect.fail(\n original instanceof RunStoreError ? original : new RunStoreError({\n method,\n code: \"persistence_failed\",\n message: \"engine execution observation failed\",\n cause: original\n })\n )\n }))\n\n/**\n * Decodes stored SQL values with the original schema error.\n *\n * @private\n * @since 1.0.0\n */\nexport const decode = <S extends Schema.Top>(schema: S, input: unknown) =>\n Schema.decodeUnknownEffect(schema)(input).pipe(Effect.mapError((cause) =>\n new RunStoreError({\n method: \"ExecutionSnapshot.decode\",\n code: \"decode_failed\",\n message: \"stored execution observation is malformed\",\n cause\n })\n ))\n\n/**\n * Reads the engine database identity and revision.\n *\n * @private\n * @since 1.0.0\n */\nexport const position = (sql: SqlClient.SqlClient) =>\n sql`SELECT source, revision FROM flows_run_source WHERE singleton = 1`.pipe(\n Effect.flatMap((rows) => decode(Position, rows[0]))\n )\n\nconst Row = Schema.Struct({\n run_id: Identifier,\n status: RunStatus,\n created_at_ms: Natural,\n started_at_ms: Schema.NullOr(Natural),\n finished_at_ms: Schema.NullOr(Natural),\n owner_host_id: Schema.NullOr(Identifier),\n owner_pid: Schema.NullOr(Natural),\n owner_nonce: Schema.NullOr(Identifier),\n heartbeat_at_ms: Schema.NullOr(Natural),\n state_json: Schema.fromJsonString(RunState),\n parent_run_id: Schema.NullOr(Identifier),\n spawn_parent_id: Schema.NullOr(Identifier),\n spawn_seq: Schema.NullOr(Natural),\n execution_parent_id: Schema.NullOr(Identifier),\n lineage_id: Schema.NullOr(Identifier),\n round_ordinal: Schema.NullOr(Natural),\n cancel_requested_at_ms: Schema.NullOr(Natural),\n cancel_acknowledgement_json: Schema.NullOr(Schema.fromJsonString(Schema.Struct({\n observedAtMs: Natural,\n owner: OwnerId\n }))),\n // These opaque values use DurableEngineState's existing non-empty-string\n // contract. They are not run IDs and must not acquire an identifier ceiling.\n waiting_reason: Schema.NullOr(Schema.NonEmptyString),\n waiting_wake_at_ms: Schema.NullOr(Natural),\n waiting_token: Schema.NullOr(Schema.NonEmptyString),\n waiting_request: Schema.optional(Schema.NullOr(Schema.fromJsonString(Schema.Json))),\n revision: Natural,\n deleted: Schema.Literal(0)\n})\n\n/**\n * Structured waiting condition; nullable fields preserve older unknown values.\n * The opaque wake token leaves the engine only as its SHA-256 `tokenDigest`,\n * the same digest `ExecutionFacts` records: a reader may correlate a wait but\n * never holds the address that resolves it.\n *\n * @private\n * @since 1.0.0\n */\nexport interface Waiting {\n readonly kind: \"timer\" | \"signal\" | \"approval\" | \"quota\" | \"human\" | \"other\"\n readonly reason: string\n readonly wakeAtMs: number | null\n readonly tokenDigest: Sha256.Digest | null\n readonly request?: typeof Schema.Json.Type | undefined\n}\n\nconst waitingKind = (reason: string): Waiting[\"kind\"] => {\n switch (reason) {\n case \"timer\":\n case \"approval\":\n case \"quota\":\n case \"human\":\n return reason\n case \"event\":\n case \"signal\":\n return \"signal\"\n default:\n return \"other\"\n }\n}\n\n/**\n * Page-scoped lifecycle fields and indexed earliest spawn edge.\n *\n * @private\n * @since 1.0.0\n */\nexport const selectColumns = `r.*, c.revision, c.deleted,\n (SELECT parent_id FROM flows_run_parents WHERE child_id = r.run_id ORDER BY seq, parent_id LIMIT 1) AS spawn_parent_id,\n (SELECT seq FROM flows_run_parents WHERE child_id = r.run_id ORDER BY seq, parent_id LIMIT 1) AS spawn_seq`\n\n/**\n * Decodes a run row and validates observation invariants.\n *\n * @private\n * @since 1.0.0\n */\nexport const observed = (input: unknown, at: Position) =>\n Effect.gen(function*() {\n const row = yield* decode(Row, input)\n const parentRunId = row.parent_run_id ?? row.spawn_parent_id\n const ownerFields = [row.owner_host_id, row.owner_pid, row.owner_nonce, row.heartbeat_at_ms]\n const validOwner = row.status === \"running\"\n ? ownerFields.every((value) => value !== null)\n : ownerFields.every((value) => value === null)\n if (\n !validOwner || row.revision === 0 || row.revision > at.revision ||\n parentRunId !== row.execution_parent_id || parentRunId === row.run_id ||\n (row.lineage_id === null) !== (row.round_ordinal === null) ||\n (row.waiting_reason === null && (row.waiting_wake_at_ms !== null || row.waiting_token !== null ||\n row.waiting_request !== undefined && row.waiting_request !== null)) ||\n (row.cancel_acknowledgement_json !== null && row.cancel_requested_at_ms === null)\n ) {\n return yield* Effect.fail(\n new RunStoreError({\n method: \"ExecutionSnapshot.decode\",\n code: \"decode_failed\",\n message: \"stored execution observation violates its invariants\",\n cause: new Error(\"inconsistent execution identity, wait, cancellation or revision\")\n })\n )\n }\n return {\n _tag: \"Observed\" as const,\n runId: row.run_id,\n source: at.source,\n revision: row.revision,\n status: row.status,\n flowName: row.state_json.flowName,\n createdAtMs: row.created_at_ms,\n startedAtMs: row.started_at_ms,\n finishedAtMs: row.finished_at_ms,\n parentRunId,\n lineageId: row.lineage_id ?? row.run_id,\n roundOrdinal: row.round_ordinal ?? 0,\n cancellation: {\n requestedAtMs: row.cancel_requested_at_ms,\n acknowledgement: row.cancel_acknowledgement_json\n },\n waiting: row.waiting_reason === null ? null : {\n kind: waitingKind(row.waiting_reason),\n reason: row.waiting_reason,\n wakeAtMs: row.waiting_wake_at_ms,\n tokenDigest: row.waiting_token === null ? null : Sha256.digestSync(row.waiting_token),\n ...(row.waiting_request === undefined || row.waiting_request === null ? {} : { request: row.waiting_request })\n }\n }\n })\n\n/**\n * The result of a successful execution observation.\n *\n * @private\n * @since 1.0.0\n */\nexport type Observed = Effect.Success<ReturnType<typeof observed>>\n\n/**\n * Validates source, identity, ordering and revision coherence at the batch boundary.\n *\n * @private\n * @since 1.0.0\n */\nexport const coherentBatch = (runIds: ReadonlyArray<string>, batch: Batch): Effect.Effect<Batch, RunStoreError> => {\n const validPosition = Schema.is(Position)\n if (\n !validPosition(batch) || batch.snapshots.length !== runIds.length ||\n batch.snapshots.some((row, index) =>\n !validPosition(row) || row.runId !== runIds[index] || row.source !== batch.source ||\n row.revision > batch.revision\n )\n ) {\n return Effect.fail(\n new RunStoreError({\n method: \"ExecutionSnapshot.read\",\n code: \"persistence_failed\",\n message: \"stored execution batch is incoherent: source, identity, order or revision mismatch\",\n cause: undefined\n })\n )\n }\n return Effect.succeed(batch)\n}\n"]}
1
+ {"version":3,"file":"ExecutionSnapshotRead.js","sourceRoot":"","sources":["../../../src/internal/ExecutionSnapshotRead.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared transactional execution decoding.\n *\n * @since 1.0.0\n */\n\nimport * as Sha256 from \"@smthrs/crypto/Sha256\"\nimport { OwnerId } from \"@smthrs/journal/OwnerId\"\nimport { RunStatus, RunStoreError } from \"@smthrs/run-store/RunStore\"\nimport { Cause, Effect, Exit, Option, Schema } from \"effect\"\nimport type * as SqlClient from \"effect/sql/SqlClient\"\nimport type { Batch } from \"../ExecutionSnapshot.ts\"\nimport { RunState } from \"../RunState.ts\"\n\n/**\n * Non-negative safe integer for timestamps and revisions.\n *\n * @private\n * @since 1.0.0\n */\nexport const Natural = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: Number.MAX_SAFE_INTEGER }))\n/**\n * Bounded identifier with a durable text encoding.\n *\n * @private\n * @since 1.0.0\n */\nexport const Identifier = Schema.NonEmptyString.check(\n Schema.isMaxLength(1024),\n Schema.makeFilter((value) =>\n !value.includes(\"\\0\") && !/[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/.test(value)\n )\n)\n/**\n * Engine database source identity.\n *\n * @private\n * @since 1.0.0\n */\nexport const Source = Schema.String.check(Schema.isPattern(/^[0-9a-f]{32}$/))\n/**\n * Source identity and observed high-water mark.\n *\n * @private\n * @since 1.0.0\n */\nexport const Position = Schema.Struct({ source: Source, revision: Natural })\n/**\n * Source identity and observed high-water mark.\n *\n * @private\n * @since 1.0.0\n */\nexport type Position = typeof Position.Type\n\n/**\n * A deferred read transaction on the reserved engine connection. The normal\n * writable client's transaction starts IMMEDIATE; a read needs only SQLite's\n * snapshot and must allow a WAL writer to commit while it reads. PostgreSQL\n * reads at REPEATABLE READ so every statement shares the snapshot the position\n * was read from; READ COMMITTED would let a concurrent commit make a row look\n * newer than its position. Reuse the SQL\n * client's transaction service to join an existing transaction. No read body\n * exposes a mutation callback. Connection reservation and interruption release\n * remain scoped, including when BEGIN or the read fails.\n * @since 1.0.0\n * @private\n */\nexport const transaction = <A, E, R>(sql: SqlClient.SqlClient, effect: Effect.Effect<A, E, R>) =>\n Effect.flatMap(\n Effect.serviceOption(sql.transactionService),\n (existing) =>\n Option.isSome(existing) ? effect : Effect.scoped(Effect.gen(function*() {\n const connection = yield* sql.reserve\n return yield* Effect.acquireUseRelease(\n connection.executeUnprepared(\n sql.onDialectOrElse({ pg: () => \"BEGIN ISOLATION LEVEL REPEATABLE READ READ ONLY\", orElse: () => \"BEGIN\" }),\n [],\n undefined\n ),\n () => effect.pipe(Effect.provideService(sql.transactionService, [connection, 0])),\n (_, exit) =>\n connection.executeUnprepared(Exit.isSuccess(exit) ? \"COMMIT\" : \"ROLLBACK\", [], undefined).pipe(Effect.orDie)\n )\n }))\n )\n\n/**\n * Preserves failure causes and interruption at the read boundary.\n *\n * @private\n * @since 1.0.0\n */\nexport const boundary = <A, E, R>(method: string, effect: Effect.Effect<A, E, R>): Effect.Effect<A, RunStoreError, R> =>\n effect.pipe(Effect.catchCause((cause) => {\n if (Cause.hasInterruptsOnly(cause)) return Effect.failCause(cause as Cause.Cause<never>)\n const original = Cause.squash(cause)\n return Effect.fail(\n original instanceof RunStoreError ? original : new RunStoreError({\n method,\n code: \"persistence_failed\",\n message: \"engine execution observation failed\",\n cause: original\n })\n )\n }))\n\n/**\n * Decodes stored SQL values with the original schema error.\n *\n * @private\n * @since 1.0.0\n */\nexport const decode = <S extends Schema.Top>(schema: S, input: unknown) =>\n Schema.decodeUnknownEffect(schema)(input).pipe(Effect.mapError((cause) =>\n new RunStoreError({\n method: \"ExecutionSnapshot.decode\",\n code: \"decode_failed\",\n message: \"stored execution observation is malformed\",\n cause\n })\n ))\n\n/**\n * Reads the engine database identity and revision.\n *\n * @private\n * @since 1.0.0\n */\nexport const position = (sql: SqlClient.SqlClient) =>\n sql`SELECT source, revision FROM flows_run_source WHERE singleton = 1`.pipe(\n Effect.flatMap((rows) => decode(Position, rows[0]))\n )\n\nconst Row = Schema.Struct({\n run_id: Identifier,\n status: RunStatus,\n created_at_ms: Natural,\n started_at_ms: Schema.NullOr(Natural),\n finished_at_ms: Schema.NullOr(Natural),\n owner_host_id: Schema.NullOr(Identifier),\n owner_pid: Schema.NullOr(Natural),\n owner_nonce: Schema.NullOr(Identifier),\n heartbeat_at_ms: Schema.NullOr(Natural),\n state_json: Schema.fromJsonString(RunState),\n parent_run_id: Schema.NullOr(Identifier),\n spawn_parent_id: Schema.NullOr(Identifier),\n spawn_seq: Schema.NullOr(Natural),\n execution_parent_id: Schema.NullOr(Identifier),\n lineage_id: Schema.NullOr(Identifier),\n round_ordinal: Schema.NullOr(Natural),\n cancel_requested_at_ms: Schema.NullOr(Natural),\n cancel_acknowledgement_json: Schema.NullOr(Schema.fromJsonString(Schema.Struct({\n observedAtMs: Natural,\n owner: OwnerId\n }))),\n // These opaque values use DurableEngineState's existing non-empty-string\n // contract. They are not run IDs and must not acquire an identifier ceiling.\n waiting_reason: Schema.NullOr(Schema.NonEmptyString),\n waiting_wake_at_ms: Schema.NullOr(Natural),\n waiting_token: Schema.NullOr(Schema.NonEmptyString),\n waiting_request: Schema.optional(Schema.NullOr(Schema.fromJsonString(Schema.Json))),\n revision: Natural,\n deleted: Schema.Literal(0)\n})\n\n/**\n * Structured waiting condition; nullable fields preserve older unknown values.\n * The opaque wake token leaves the engine only as its SHA-256 `tokenDigest`,\n * the same digest `ExecutionFacts` records: a reader may correlate a wait but\n * never holds the address that resolves it.\n *\n * @private\n * @since 1.0.0\n */\nexport interface Waiting {\n readonly kind: \"timer\" | \"signal\" | \"approval\" | \"quota\" | \"human\" | \"other\"\n readonly reason: string\n readonly wakeAtMs: number | null\n readonly tokenDigest: Sha256.Digest | null\n readonly request?: typeof Schema.Json.Type | undefined\n}\n\nconst waitingKind = (reason: string): Waiting[\"kind\"] => {\n switch (reason) {\n case \"timer\":\n case \"approval\":\n case \"quota\":\n case \"human\":\n return reason\n case \"event\":\n case \"signal\":\n return \"signal\"\n default:\n return \"other\"\n }\n}\n\n/**\n * Page-scoped lifecycle fields and indexed earliest spawn edge.\n *\n * @private\n * @since 1.0.0\n */\nexport const selectColumns = `r.*, c.revision, c.deleted,\n (SELECT parent_id FROM flows_run_parents WHERE child_id = r.run_id ORDER BY seq, parent_id LIMIT 1) AS spawn_parent_id,\n (SELECT seq FROM flows_run_parents WHERE child_id = r.run_id ORDER BY seq, parent_id LIMIT 1) AS spawn_seq`\n\n/**\n * Decodes a run row and validates observation invariants.\n *\n * @private\n * @since 1.0.0\n */\nexport const observed = (input: unknown, at: Position) =>\n Effect.gen(function*() {\n const row = yield* decode(Row, input)\n const parentRunId = row.parent_run_id ?? row.spawn_parent_id\n const ownerFields = [row.owner_host_id, row.owner_pid, row.owner_nonce, row.heartbeat_at_ms]\n const validOwner = row.status === \"running\"\n ? ownerFields.every((value) => value !== null)\n : ownerFields.every((value) => value === null)\n if (\n !validOwner || row.revision === 0 || row.revision > at.revision ||\n parentRunId !== row.execution_parent_id || parentRunId === row.run_id ||\n (row.lineage_id === null) !== (row.round_ordinal === null) ||\n (row.waiting_reason === null && (row.waiting_wake_at_ms !== null || row.waiting_token !== null ||\n row.waiting_request !== undefined && row.waiting_request !== null)) ||\n (row.cancel_acknowledgement_json !== null && row.cancel_requested_at_ms === null)\n ) {\n return yield* Effect.fail(\n new RunStoreError({\n method: \"ExecutionSnapshot.decode\",\n code: \"decode_failed\",\n message: \"stored execution observation violates its invariants\",\n cause: new Error(\"inconsistent execution identity, wait, cancellation or revision\")\n })\n )\n }\n return {\n _tag: \"Observed\" as const,\n runId: row.run_id,\n source: at.source,\n revision: row.revision,\n status: row.status,\n flowName: row.state_json.flowName,\n createdAtMs: row.created_at_ms,\n startedAtMs: row.started_at_ms,\n finishedAtMs: row.finished_at_ms,\n parentRunId,\n lineageId: row.lineage_id ?? row.run_id,\n roundOrdinal: row.round_ordinal ?? 0,\n cancellation: {\n requestedAtMs: row.cancel_requested_at_ms,\n acknowledgement: row.cancel_acknowledgement_json\n },\n waiting: row.waiting_reason === null ? null : {\n kind: waitingKind(row.waiting_reason),\n reason: row.waiting_reason,\n wakeAtMs: row.waiting_wake_at_ms,\n tokenDigest: row.waiting_token === null ? null : Sha256.digestSync(row.waiting_token),\n ...(row.waiting_request === undefined || row.waiting_request === null ? {} : { request: row.waiting_request })\n }\n }\n })\n\n/**\n * The result of a successful execution observation.\n *\n * @private\n * @since 1.0.0\n */\nexport type Observed = Effect.Success<ReturnType<typeof observed>>\n\n/**\n * Validates source, identity, ordering and revision coherence at the batch boundary.\n *\n * @private\n * @since 1.0.0\n */\nexport const coherentBatch = (runIds: ReadonlyArray<string>, batch: Batch): Effect.Effect<Batch, RunStoreError> => {\n const validPosition = Schema.is(Position)\n if (\n !validPosition(batch) || batch.snapshots.length !== runIds.length ||\n batch.snapshots.some((row, index) =>\n !validPosition(row) || row.runId !== runIds[index] || row.source !== batch.source ||\n row.revision > batch.revision\n )\n ) {\n return Effect.fail(\n new RunStoreError({\n method: \"ExecutionSnapshot.read\",\n code: \"persistence_failed\",\n message: \"stored execution batch is incoherent: source, identity, order or revision mismatch\",\n cause: undefined\n })\n )\n }\n return Effect.succeed(batch)\n}\n"]}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { RunStoreError } from "@smthrs/run-store/RunStore";
7
7
  import { Effect } from "effect";
8
- import type * as SqlClient from "effect/unstable/sql/SqlClient";
8
+ import type * as SqlClient from "effect/sql/SqlClient";
9
9
  import type { Batch, Snapshot } from "../ExecutionSnapshot.ts";
10
10
  /**
11
11
  * Child edges and trampoline rounds are different relations.
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionSnapshotRelations.d.ts","sourceRoot":"","sources":["../../../src/internal/ExecutionSnapshotRelations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,KAAK,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAG9D;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AACD;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAkBD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GACf,KAAK,SAAS,CAAC,SAAS,EACxB,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,MAE1E,SAAS,cAAc,KAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CA0DhE,CAAA"}
1
+ {"version":3,"file":"ExecutionSnapshotRelations.d.ts","sourceRoot":"","sources":["../../../src/internal/ExecutionSnapshotRelations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,KAAK,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAG9D;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AACD;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAkBD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GACf,KAAK,SAAS,CAAC,SAAS,EACxB,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,MAE1E,SAAS,cAAc,KAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CA0DhE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionSnapshotRelations.js","sourceRoot":"","sources":["../../../src/internal/ExecutionSnapshotRelations.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Page-scoped durable child and round enumeration.\n *\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport { RunStoreError } from \"@smthrs/run-store/RunStore\"\nimport { Effect, Schema } from \"effect\"\nimport type * as SqlClient from \"effect/unstable/sql/SqlClient\"\nimport type { Batch, Snapshot } from \"../ExecutionSnapshot.ts\"\nimport * as Read from \"./ExecutionSnapshotRead.ts\"\n\n/**\n * Child edges and trampoline rounds are different relations.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface RelatedOptions {\n readonly runId: string\n readonly kind: \"children\" | \"rounds\"\n readonly cursor?: string\n readonly limit?: number\n}\n/**\n * A requested anchor and its page, observed in one transaction.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface RelatedPage extends Batch {\n readonly anchor: Snapshot\n readonly cursor: string | null\n}\nconst Kind = Schema.Literals([\"children\", \"rounds\"])\nconst Options = Schema.Struct({\n runId: Read.Identifier,\n kind: Kind,\n cursor: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(32768))),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 200 })))\n})\nconst Cursor = Schema.fromJsonString(Schema.Struct({\n version: Schema.Literal(1),\n source: Read.Source,\n runId: Read.Identifier,\n kind: Kind,\n ordinal: Read.Natural,\n lastRunId: Read.Identifier\n}))\nconst Relation = Schema.Struct({ run_id: Read.Identifier, ordinal: Read.Natural })\n\n/**\n * Builds a bounded relation reader over the shared snapshot port.\n *\n * @private\n * @since 1.0.0\n */\nexport const make = (\n sql: SqlClient.SqlClient,\n read: (ids: ReadonlyArray<string>) => Effect.Effect<Batch, RunStoreError>\n) =>\n(options: RelatedOptions): Effect.Effect<RelatedPage, RunStoreError> =>\n Read.boundary(\n \"ExecutionSnapshot.related\",\n Effect.gen(function*() {\n const input = yield* Read.decode(Options, options)\n const cursor = input.cursor === undefined ? null : yield* Read.decode(Cursor, input.cursor)\n return yield* Read.transaction(\n sql,\n Effect.gen(function*() {\n const at = yield* Read.position(sql)\n if (\n cursor !== null &&\n (cursor.source !== at.source || cursor.runId !== input.runId || cursor.kind !== input.kind)\n ) {\n return yield* Effect.fail(\n new RunStoreError({\n method: \"ExecutionSnapshot.related\",\n code: \"invalid_run\",\n message: \"relation cursor belongs to another query or source\",\n cause: cursor\n })\n )\n }\n const anchor = (yield* read([input.runId])).snapshots[0]!\n const limit = input.limit ?? 100\n const values: Array<string | number | null> = [input.runId]\n const columns = input.kind === \"children\" ? [\"seq\", \"child_id\"] : [\"COALESCE(round_ordinal, 0)\", \"run_id\"]\n const after = cursor === null ? \"\" : `AND (${columns.join(\", \")}) > (?, ?)`\n if (cursor !== null) values.push(cursor.ordinal, cursor.lastRunId)\n values.push(limit + 1)\n const query = input.kind === \"children\"\n ? `SELECT child_id AS run_id, seq AS ordinal FROM flows_run_parents\n WHERE parent_id = ? ${after} ORDER BY seq, child_id LIMIT ?`\n : `SELECT run_id, COALESCE(round_ordinal, 0) AS ordinal FROM flows_runs\n WHERE execution_lineage = (SELECT execution_lineage FROM flows_runs WHERE run_id = ?)\n ${after} ORDER BY COALESCE(round_ordinal, 0), run_id LIMIT ?`\n const rows = yield* Dialect.query(sql, query, values)\n const decoded = yield* Effect.forEach(rows, (row) => Read.decode(Relation, row))\n const selected = decoded.slice(0, limit)\n const batch = yield* read(selected.map((row) => row.run_id))\n const last = selected[selected.length - 1]\n return {\n ...batch,\n anchor,\n cursor: decoded.length > limit ?\n JSON.stringify({\n version: 1,\n source: at.source,\n runId: input.runId,\n kind: input.kind,\n ordinal: last!.ordinal,\n lastRunId: last!.run_id\n }) :\n null\n }\n })\n )\n })\n )\n"]}
1
+ {"version":3,"file":"ExecutionSnapshotRelations.js","sourceRoot":"","sources":["../../../src/internal/ExecutionSnapshotRelations.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Page-scoped durable child and round enumeration.\n *\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport { RunStoreError } from \"@smthrs/run-store/RunStore\"\nimport { Effect, Schema } from \"effect\"\nimport type * as SqlClient from \"effect/sql/SqlClient\"\nimport type { Batch, Snapshot } from \"../ExecutionSnapshot.ts\"\nimport * as Read from \"./ExecutionSnapshotRead.ts\"\n\n/**\n * Child edges and trampoline rounds are different relations.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface RelatedOptions {\n readonly runId: string\n readonly kind: \"children\" | \"rounds\"\n readonly cursor?: string\n readonly limit?: number\n}\n/**\n * A requested anchor and its page, observed in one transaction.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface RelatedPage extends Batch {\n readonly anchor: Snapshot\n readonly cursor: string | null\n}\nconst Kind = Schema.Literals([\"children\", \"rounds\"])\nconst Options = Schema.Struct({\n runId: Read.Identifier,\n kind: Kind,\n cursor: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(32768))),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 200 })))\n})\nconst Cursor = Schema.fromJsonString(Schema.Struct({\n version: Schema.Literal(1),\n source: Read.Source,\n runId: Read.Identifier,\n kind: Kind,\n ordinal: Read.Natural,\n lastRunId: Read.Identifier\n}))\nconst Relation = Schema.Struct({ run_id: Read.Identifier, ordinal: Read.Natural })\n\n/**\n * Builds a bounded relation reader over the shared snapshot port.\n *\n * @private\n * @since 1.0.0\n */\nexport const make = (\n sql: SqlClient.SqlClient,\n read: (ids: ReadonlyArray<string>) => Effect.Effect<Batch, RunStoreError>\n) =>\n(options: RelatedOptions): Effect.Effect<RelatedPage, RunStoreError> =>\n Read.boundary(\n \"ExecutionSnapshot.related\",\n Effect.gen(function*() {\n const input = yield* Read.decode(Options, options)\n const cursor = input.cursor === undefined ? null : yield* Read.decode(Cursor, input.cursor)\n return yield* Read.transaction(\n sql,\n Effect.gen(function*() {\n const at = yield* Read.position(sql)\n if (\n cursor !== null &&\n (cursor.source !== at.source || cursor.runId !== input.runId || cursor.kind !== input.kind)\n ) {\n return yield* Effect.fail(\n new RunStoreError({\n method: \"ExecutionSnapshot.related\",\n code: \"invalid_run\",\n message: \"relation cursor belongs to another query or source\",\n cause: cursor\n })\n )\n }\n const anchor = (yield* read([input.runId])).snapshots[0]!\n const limit = input.limit ?? 100\n const values: Array<string | number | null> = [input.runId]\n const columns = input.kind === \"children\" ? [\"seq\", \"child_id\"] : [\"COALESCE(round_ordinal, 0)\", \"run_id\"]\n const after = cursor === null ? \"\" : `AND (${columns.join(\", \")}) > (?, ?)`\n if (cursor !== null) values.push(cursor.ordinal, cursor.lastRunId)\n values.push(limit + 1)\n const query = input.kind === \"children\"\n ? `SELECT child_id AS run_id, seq AS ordinal FROM flows_run_parents\n WHERE parent_id = ? ${after} ORDER BY seq, child_id LIMIT ?`\n : `SELECT run_id, COALESCE(round_ordinal, 0) AS ordinal FROM flows_runs\n WHERE execution_lineage = (SELECT execution_lineage FROM flows_runs WHERE run_id = ?)\n ${after} ORDER BY COALESCE(round_ordinal, 0), run_id LIMIT ?`\n const rows = yield* Dialect.query(sql, query, values)\n const decoded = yield* Effect.forEach(rows, (row) => Read.decode(Relation, row))\n const selected = decoded.slice(0, limit)\n const batch = yield* read(selected.map((row) => row.run_id))\n const last = selected[selected.length - 1]\n return {\n ...batch,\n anchor,\n cursor: decoded.length > limit ?\n JSON.stringify({\n version: 1,\n source: at.source,\n runId: input.runId,\n kind: input.kind,\n ordinal: last!.ordinal,\n lastRunId: last!.run_id\n }) :\n null\n }\n })\n )\n })\n )\n"]}
@@ -53,8 +53,8 @@ import * as Context from "effect/Context";
53
53
  import * as Effect from "effect/Effect";
54
54
  import * as Layer from "effect/Layer";
55
55
  import * as Schema from "effect/Schema";
56
- import * as SqlClient from "effect/unstable/sql/SqlClient";
57
- import type { SqlError } from "effect/unstable/sql/SqlError";
56
+ import * as SqlClient from "effect/sql/SqlClient";
57
+ import type { SqlError } from "effect/sql/SqlError";
58
58
  /**
59
59
  * Stable error codes returned by retention.
60
60
  *
@@ -1 +1 @@
1
- {"version":3,"file":"RetentionOps.d.ts","sourceRoot":"","sources":["../../../src/internal/RetentionOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RetentionOps.d.ts","sourceRoot":"","sources":["../../../src/internal/RetentionOps.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,7 @@ import * as Context from "effect/Context";
57
57
  import * as Effect from "effect/Effect";
58
58
  import * as Layer from "effect/Layer";
59
59
  import * as Schema from "effect/Schema";
60
- import * as SqlClient from "effect/unstable/sql/SqlClient";
60
+ import * as SqlClient from "effect/sql/SqlClient";
61
61
  /**
62
62
  * Stable error codes returned by retention.
63
63
  *