@smthrs/engine-store 0.0.0-stage → 1.0.0-rc.3

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 (787) hide show
  1. package/CHANGELOG.md +247 -0
  2. package/LICENSE +21 -0
  3. package/README.md +146 -2
  4. package/dist/cjs/ArtifactGc.d.ts +235 -0
  5. package/dist/cjs/ArtifactGc.d.ts.map +1 -0
  6. package/dist/cjs/ArtifactGc.js +183 -0
  7. package/dist/cjs/ArtifactGc.js.map +7 -0
  8. package/dist/cjs/ArtifactSync.d.ts +164 -0
  9. package/dist/cjs/ArtifactSync.d.ts.map +1 -0
  10. package/dist/cjs/ArtifactSync.js +144 -0
  11. package/dist/cjs/ArtifactSync.js.map +7 -0
  12. package/dist/cjs/CacheSync.d.ts +112 -0
  13. package/dist/cjs/CacheSync.d.ts.map +1 -0
  14. package/dist/cjs/CacheSync.js +64 -0
  15. package/dist/cjs/CacheSync.js.map +7 -0
  16. package/dist/cjs/DeferredClockFold.d.ts +354 -0
  17. package/dist/cjs/DeferredClockFold.d.ts.map +1 -0
  18. package/dist/cjs/DeferredClockFold.js +335 -0
  19. package/dist/cjs/DeferredClockFold.js.map +7 -0
  20. package/dist/cjs/DisasterRecovery.d.ts +431 -0
  21. package/dist/cjs/DisasterRecovery.d.ts.map +1 -0
  22. package/dist/cjs/DisasterRecovery.js +453 -0
  23. package/dist/cjs/DisasterRecovery.js.map +7 -0
  24. package/dist/cjs/DurableEngineState.d.ts +776 -0
  25. package/dist/cjs/DurableEngineState.d.ts.map +1 -0
  26. package/dist/cjs/DurableEngineState.js +1536 -0
  27. package/dist/cjs/DurableEngineState.js.map +7 -0
  28. package/dist/cjs/EngineStore.d.ts +158 -0
  29. package/dist/cjs/EngineStore.d.ts.map +1 -0
  30. package/dist/cjs/EngineStore.js +398 -0
  31. package/dist/cjs/EngineStore.js.map +7 -0
  32. package/dist/cjs/EngineStoreMetrics.d.ts +276 -0
  33. package/dist/cjs/EngineStoreMetrics.d.ts.map +1 -0
  34. package/dist/cjs/EngineStoreMetrics.js +135 -0
  35. package/dist/cjs/EngineStoreMetrics.js.map +7 -0
  36. package/dist/cjs/Errors.d.ts +22 -0
  37. package/dist/cjs/Errors.d.ts.map +1 -0
  38. package/dist/cjs/Errors.js +39 -0
  39. package/dist/cjs/Errors.js.map +7 -0
  40. package/dist/cjs/EventTypes.d.ts +27 -0
  41. package/dist/cjs/EventTypes.d.ts.map +1 -0
  42. package/dist/cjs/EventTypes.js +37 -0
  43. package/dist/cjs/EventTypes.js.map +7 -0
  44. package/dist/cjs/ExecutionFacts.d.ts +59 -0
  45. package/dist/cjs/ExecutionFacts.d.ts.map +1 -0
  46. package/dist/cjs/ExecutionFacts.js +123 -0
  47. package/dist/cjs/ExecutionFacts.js.map +7 -0
  48. package/dist/cjs/ExecutionSnapshot.d.ts +117 -0
  49. package/dist/cjs/ExecutionSnapshot.d.ts.map +1 -0
  50. package/dist/cjs/ExecutionSnapshot.js +111 -0
  51. package/dist/cjs/ExecutionSnapshot.js.map +7 -0
  52. package/dist/cjs/Inconsistency.d.ts +154 -0
  53. package/dist/cjs/Inconsistency.d.ts.map +1 -0
  54. package/dist/cjs/Inconsistency.js +135 -0
  55. package/dist/cjs/Inconsistency.js.map +7 -0
  56. package/dist/cjs/Migrations.d.ts +56 -0
  57. package/dist/cjs/Migrations.d.ts.map +1 -0
  58. package/dist/cjs/Migrations.js +78 -0
  59. package/dist/cjs/Migrations.js.map +7 -0
  60. package/dist/cjs/OwnerIdentity.d.ts +91 -0
  61. package/dist/cjs/OwnerIdentity.d.ts.map +1 -0
  62. package/dist/cjs/OwnerIdentity.js +65 -0
  63. package/dist/cjs/OwnerIdentity.js.map +7 -0
  64. package/dist/cjs/PlanInputStore.d.ts +110 -0
  65. package/dist/cjs/PlanInputStore.d.ts.map +1 -0
  66. package/dist/cjs/PlanInputStore.js +224 -0
  67. package/dist/cjs/PlanInputStore.js.map +7 -0
  68. package/dist/cjs/PlanMergeStore.d.ts +113 -0
  69. package/dist/cjs/PlanMergeStore.d.ts.map +1 -0
  70. package/dist/cjs/PlanMergeStore.js +255 -0
  71. package/dist/cjs/PlanMergeStore.js.map +7 -0
  72. package/dist/cjs/PlanScheduler.d.ts +363 -0
  73. package/dist/cjs/PlanScheduler.d.ts.map +1 -0
  74. package/dist/cjs/PlanScheduler.js +1090 -0
  75. package/dist/cjs/PlanScheduler.js.map +7 -0
  76. package/dist/cjs/Reconciliation.d.ts +175 -0
  77. package/dist/cjs/Reconciliation.d.ts.map +1 -0
  78. package/dist/cjs/Reconciliation.js +119 -0
  79. package/dist/cjs/Reconciliation.js.map +7 -0
  80. package/dist/cjs/ReplayOnly.d.ts +91 -0
  81. package/dist/cjs/ReplayOnly.d.ts.map +1 -0
  82. package/dist/cjs/ReplayOnly.js +52 -0
  83. package/dist/cjs/ReplayOnly.js.map +7 -0
  84. package/dist/cjs/Retention.d.ts +113 -0
  85. package/dist/cjs/Retention.d.ts.map +1 -0
  86. package/dist/cjs/Retention.js +99 -0
  87. package/dist/cjs/Retention.js.map +7 -0
  88. package/dist/cjs/RunCatalogRead.d.ts +17 -0
  89. package/dist/cjs/RunCatalogRead.d.ts.map +1 -0
  90. package/dist/cjs/RunCatalogRead.js +33 -0
  91. package/dist/cjs/RunCatalogRead.js.map +7 -0
  92. package/dist/cjs/RunChangeFeed.d.ts +75 -0
  93. package/dist/cjs/RunChangeFeed.d.ts.map +1 -0
  94. package/dist/cjs/RunChangeFeed.js +96 -0
  95. package/dist/cjs/RunChangeFeed.js.map +7 -0
  96. package/dist/cjs/RunState.d.ts +116 -0
  97. package/dist/cjs/RunState.d.ts.map +1 -0
  98. package/dist/cjs/RunState.js +76 -0
  99. package/dist/cjs/RunState.js.map +7 -0
  100. package/dist/cjs/Selection.d.ts +495 -0
  101. package/dist/cjs/Selection.d.ts.map +1 -0
  102. package/dist/cjs/Selection.js +288 -0
  103. package/dist/cjs/Selection.js.map +7 -0
  104. package/dist/cjs/SelectionStore.d.ts +141 -0
  105. package/dist/cjs/SelectionStore.d.ts.map +1 -0
  106. package/dist/cjs/SelectionStore.js +229 -0
  107. package/dist/cjs/SelectionStore.js.map +7 -0
  108. package/dist/cjs/StepBoundary.d.ts +501 -0
  109. package/dist/cjs/StepBoundary.d.ts.map +1 -0
  110. package/dist/cjs/StepBoundary.js +619 -0
  111. package/dist/cjs/StepBoundary.js.map +7 -0
  112. package/dist/cjs/StepCacheFold.d.ts +148 -0
  113. package/dist/cjs/StepCacheFold.d.ts.map +1 -0
  114. package/dist/cjs/StepCacheFold.js +131 -0
  115. package/dist/cjs/StepCacheFold.js.map +7 -0
  116. package/dist/cjs/StepSandbox.d.ts +78 -0
  117. package/dist/cjs/StepSandbox.d.ts.map +1 -0
  118. package/dist/cjs/StepSandbox.js +75 -0
  119. package/dist/cjs/StepSandbox.js.map +7 -0
  120. package/dist/cjs/WakeBus.d.ts +116 -0
  121. package/dist/cjs/WakeBus.d.ts.map +1 -0
  122. package/dist/cjs/WakeBus.js +89 -0
  123. package/dist/cjs/WakeBus.js.map +7 -0
  124. package/dist/cjs/WorkspaceSandbox.d.ts +619 -0
  125. package/dist/cjs/WorkspaceSandbox.d.ts.map +1 -0
  126. package/dist/cjs/WorkspaceSandbox.js +711 -0
  127. package/dist/cjs/WorkspaceSandbox.js.map +7 -0
  128. package/dist/cjs/index.d.ts +157 -0
  129. package/dist/cjs/index.d.ts.map +1 -0
  130. package/dist/cjs/index.js +95 -0
  131. package/dist/cjs/index.js.map +7 -0
  132. package/dist/cjs/internal/ActionPersistence.d.ts +276 -0
  133. package/dist/cjs/internal/ActionPersistence.d.ts.map +1 -0
  134. package/dist/cjs/internal/ActionPersistence.js +1395 -0
  135. package/dist/cjs/internal/ActionPersistence.js.map +7 -0
  136. package/dist/cjs/internal/ArtifactRoots.d.ts +38 -0
  137. package/dist/cjs/internal/ArtifactRoots.d.ts.map +1 -0
  138. package/dist/cjs/internal/ArtifactRoots.js +89 -0
  139. package/dist/cjs/internal/ArtifactRoots.js.map +7 -0
  140. package/dist/cjs/internal/AttemptAdmission.d.ts +53 -0
  141. package/dist/cjs/internal/AttemptAdmission.d.ts.map +1 -0
  142. package/dist/cjs/internal/AttemptAdmission.js +52 -0
  143. package/dist/cjs/internal/AttemptAdmission.js.map +7 -0
  144. package/dist/cjs/internal/AttemptLifecycle.d.ts +245 -0
  145. package/dist/cjs/internal/AttemptLifecycle.d.ts.map +1 -0
  146. package/dist/cjs/internal/AttemptLifecycle.js +112 -0
  147. package/dist/cjs/internal/AttemptLifecycle.js.map +7 -0
  148. package/dist/cjs/internal/AttemptProbe.d.ts +53 -0
  149. package/dist/cjs/internal/AttemptProbe.d.ts.map +1 -0
  150. package/dist/cjs/internal/AttemptProbe.js +66 -0
  151. package/dist/cjs/internal/AttemptProbe.js.map +7 -0
  152. package/dist/cjs/internal/CacheAdmission.d.ts +79 -0
  153. package/dist/cjs/internal/CacheAdmission.d.ts.map +1 -0
  154. package/dist/cjs/internal/CacheAdmission.js +71 -0
  155. package/dist/cjs/internal/CacheAdmission.js.map +7 -0
  156. package/dist/cjs/internal/CacheAgeHistory.d.ts +27 -0
  157. package/dist/cjs/internal/CacheAgeHistory.d.ts.map +1 -0
  158. package/dist/cjs/internal/CacheAgeHistory.js +61 -0
  159. package/dist/cjs/internal/CacheAgeHistory.js.map +7 -0
  160. package/dist/cjs/internal/CacheAgeVerdicts.d.ts +15 -0
  161. package/dist/cjs/internal/CacheAgeVerdicts.d.ts.map +1 -0
  162. package/dist/cjs/internal/CacheAgeVerdicts.js +73 -0
  163. package/dist/cjs/internal/CacheAgeVerdicts.js.map +7 -0
  164. package/dist/cjs/internal/CacheOutputPolicy.d.ts +24 -0
  165. package/dist/cjs/internal/CacheOutputPolicy.d.ts.map +1 -0
  166. package/dist/cjs/internal/CacheOutputPolicy.js +75 -0
  167. package/dist/cjs/internal/CacheOutputPolicy.js.map +7 -0
  168. package/dist/cjs/internal/CachePublication.d.ts +97 -0
  169. package/dist/cjs/internal/CachePublication.d.ts.map +1 -0
  170. package/dist/cjs/internal/CachePublication.js +80 -0
  171. package/dist/cjs/internal/CachePublication.js.map +7 -0
  172. package/dist/cjs/internal/CallFacts.d.ts +15 -0
  173. package/dist/cjs/internal/CallFacts.d.ts.map +1 -0
  174. package/dist/cjs/internal/CallFacts.js +97 -0
  175. package/dist/cjs/internal/CallFacts.js.map +7 -0
  176. package/dist/cjs/internal/CopiedRecord.d.ts +61 -0
  177. package/dist/cjs/internal/CopiedRecord.d.ts.map +1 -0
  178. package/dist/cjs/internal/CopiedRecord.js +134 -0
  179. package/dist/cjs/internal/CopiedRecord.js.map +7 -0
  180. package/dist/cjs/internal/DeferredPersistence.d.ts +108 -0
  181. package/dist/cjs/internal/DeferredPersistence.d.ts.map +1 -0
  182. package/dist/cjs/internal/DeferredPersistence.js +270 -0
  183. package/dist/cjs/internal/DeferredPersistence.js.map +7 -0
  184. package/dist/cjs/internal/EffectRecords.d.ts +92 -0
  185. package/dist/cjs/internal/EffectRecords.d.ts.map +1 -0
  186. package/dist/cjs/internal/EffectRecords.js +63 -0
  187. package/dist/cjs/internal/EffectRecords.js.map +7 -0
  188. package/dist/cjs/internal/EngineJj.d.ts +30 -0
  189. package/dist/cjs/internal/EngineJj.d.ts.map +1 -0
  190. package/dist/cjs/internal/EngineJj.js +42 -0
  191. package/dist/cjs/internal/EngineJj.js.map +7 -0
  192. package/dist/cjs/internal/EngineStateSchema.d.ts +68 -0
  193. package/dist/cjs/internal/EngineStateSchema.d.ts.map +1 -0
  194. package/dist/cjs/internal/EngineStateSchema.js +58 -0
  195. package/dist/cjs/internal/EngineStateSchema.js.map +7 -0
  196. package/dist/cjs/internal/ExecutionSnapshotRead.d.ts +162 -0
  197. package/dist/cjs/internal/ExecutionSnapshotRead.d.ts.map +1 -0
  198. package/dist/cjs/internal/ExecutionSnapshotRead.js +199 -0
  199. package/dist/cjs/internal/ExecutionSnapshotRead.js.map +7 -0
  200. package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts +39 -0
  201. package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts.map +1 -0
  202. package/dist/cjs/internal/ExecutionSnapshotRelations.js +105 -0
  203. package/dist/cjs/internal/ExecutionSnapshotRelations.js.map +7 -0
  204. package/dist/cjs/internal/ExitEncoding.d.ts +180 -0
  205. package/dist/cjs/internal/ExitEncoding.d.ts.map +1 -0
  206. package/dist/cjs/internal/ExitEncoding.js +236 -0
  207. package/dist/cjs/internal/ExitEncoding.js.map +7 -0
  208. package/dist/cjs/internal/FileBoundarySnapshot.d.ts +14 -0
  209. package/dist/cjs/internal/FileBoundarySnapshot.d.ts.map +1 -0
  210. package/dist/cjs/internal/FileBoundarySnapshot.js +51 -0
  211. package/dist/cjs/internal/FileBoundarySnapshot.js.map +7 -0
  212. package/dist/cjs/internal/FileEnumeration.d.ts +127 -0
  213. package/dist/cjs/internal/FileEnumeration.d.ts.map +1 -0
  214. package/dist/cjs/internal/FileEnumeration.js +194 -0
  215. package/dist/cjs/internal/FileEnumeration.js.map +7 -0
  216. package/dist/cjs/internal/HostReflection.d.ts +80 -0
  217. package/dist/cjs/internal/HostReflection.d.ts.map +1 -0
  218. package/dist/cjs/internal/HostReflection.js +43 -0
  219. package/dist/cjs/internal/HostReflection.js.map +7 -0
  220. package/dist/cjs/internal/JournalRecords.d.ts +325 -0
  221. package/dist/cjs/internal/JournalRecords.d.ts.map +1 -0
  222. package/dist/cjs/internal/JournalRecords.js +122 -0
  223. package/dist/cjs/internal/JournalRecords.js.map +7 -0
  224. package/dist/cjs/internal/NodeJournal.d.ts +157 -0
  225. package/dist/cjs/internal/NodeJournal.d.ts.map +1 -0
  226. package/dist/cjs/internal/NodeJournal.js +192 -0
  227. package/dist/cjs/internal/NodeJournal.js.map +7 -0
  228. package/dist/cjs/internal/Ordering.d.ts +14 -0
  229. package/dist/cjs/internal/Ordering.d.ts.map +1 -0
  230. package/dist/cjs/internal/Ordering.js +25 -0
  231. package/dist/cjs/internal/Ordering.js.map +7 -0
  232. package/dist/cjs/internal/PlanInputs.d.ts +14 -0
  233. package/dist/cjs/internal/PlanInputs.d.ts.map +1 -0
  234. package/dist/cjs/internal/PlanInputs.js +78 -0
  235. package/dist/cjs/internal/PlanInputs.js.map +7 -0
  236. package/dist/cjs/internal/PlanMerges.d.ts +178 -0
  237. package/dist/cjs/internal/PlanMerges.d.ts.map +1 -0
  238. package/dist/cjs/internal/PlanMerges.js +125 -0
  239. package/dist/cjs/internal/PlanMerges.js.map +7 -0
  240. package/dist/cjs/internal/ProvenanceSlot.d.ts +30 -0
  241. package/dist/cjs/internal/ProvenanceSlot.d.ts.map +1 -0
  242. package/dist/cjs/internal/ProvenanceSlot.js +53 -0
  243. package/dist/cjs/internal/ProvenanceSlot.js.map +7 -0
  244. package/dist/cjs/internal/ResultEnvelope.d.ts +88 -0
  245. package/dist/cjs/internal/ResultEnvelope.d.ts.map +1 -0
  246. package/dist/cjs/internal/ResultEnvelope.js +90 -0
  247. package/dist/cjs/internal/ResultEnvelope.js.map +7 -0
  248. package/dist/cjs/internal/RetentionOps.d.ts +414 -0
  249. package/dist/cjs/internal/RetentionOps.d.ts.map +1 -0
  250. package/dist/cjs/internal/RetentionOps.js +354 -0
  251. package/dist/cjs/internal/RetentionOps.js.map +7 -0
  252. package/dist/cjs/internal/RunCatalogOps.d.ts +118 -0
  253. package/dist/cjs/internal/RunCatalogOps.d.ts.map +1 -0
  254. package/dist/cjs/internal/RunCatalogOps.js +85 -0
  255. package/dist/cjs/internal/RunCatalogOps.js.map +7 -0
  256. package/dist/cjs/internal/RunCoordinator.d.ts +78 -0
  257. package/dist/cjs/internal/RunCoordinator.d.ts.map +1 -0
  258. package/dist/cjs/internal/RunCoordinator.js +123 -0
  259. package/dist/cjs/internal/RunCoordinator.js.map +7 -0
  260. package/dist/cjs/internal/RunDriver.d.ts +192 -0
  261. package/dist/cjs/internal/RunDriver.d.ts.map +1 -0
  262. package/dist/cjs/internal/RunDriver.js +1584 -0
  263. package/dist/cjs/internal/RunDriver.js.map +7 -0
  264. package/dist/cjs/internal/RunLifecycle.d.ts +22 -0
  265. package/dist/cjs/internal/RunLifecycle.d.ts.map +1 -0
  266. package/dist/cjs/internal/RunLifecycle.js +63 -0
  267. package/dist/cjs/internal/RunLifecycle.js.map +7 -0
  268. package/dist/cjs/internal/RunListing.d.ts +78 -0
  269. package/dist/cjs/internal/RunListing.d.ts.map +1 -0
  270. package/dist/cjs/internal/RunListing.js +171 -0
  271. package/dist/cjs/internal/RunListing.js.map +7 -0
  272. package/dist/cjs/internal/RunListingError.d.ts +35 -0
  273. package/dist/cjs/internal/RunListingError.d.ts.map +1 -0
  274. package/dist/cjs/internal/RunListingError.js +47 -0
  275. package/dist/cjs/internal/RunListingError.js.map +7 -0
  276. package/dist/cjs/internal/RuntimeGraph.d.ts +73 -0
  277. package/dist/cjs/internal/RuntimeGraph.d.ts.map +1 -0
  278. package/dist/cjs/internal/RuntimeGraph.js +180 -0
  279. package/dist/cjs/internal/RuntimeGraph.js.map +7 -0
  280. package/dist/cjs/internal/SandboxedExecution.d.ts +80 -0
  281. package/dist/cjs/internal/SandboxedExecution.d.ts.map +1 -0
  282. package/dist/cjs/internal/SandboxedExecution.js +104 -0
  283. package/dist/cjs/internal/SandboxedExecution.js.map +7 -0
  284. package/dist/cjs/internal/StateTransaction.d.ts +44 -0
  285. package/dist/cjs/internal/StateTransaction.d.ts.map +1 -0
  286. package/dist/cjs/internal/StateTransaction.js +52 -0
  287. package/dist/cjs/internal/StateTransaction.js.map +7 -0
  288. package/dist/cjs/internal/StepFacts.d.ts +14 -0
  289. package/dist/cjs/internal/StepFacts.d.ts.map +1 -0
  290. package/dist/cjs/internal/StepFacts.js +58 -0
  291. package/dist/cjs/internal/StepFacts.js.map +7 -0
  292. package/dist/cjs/internal/TypedEvents.d.ts +14 -0
  293. package/dist/cjs/internal/TypedEvents.d.ts.map +1 -0
  294. package/dist/cjs/internal/TypedEvents.js +37 -0
  295. package/dist/cjs/internal/TypedEvents.js.map +7 -0
  296. package/dist/cjs/migrations/0001_initial.d.ts +17 -0
  297. package/dist/cjs/migrations/0001_initial.d.ts.map +1 -0
  298. package/dist/cjs/migrations/0001_initial.js +61 -0
  299. package/dist/cjs/migrations/0001_initial.js.map +7 -0
  300. package/dist/cjs/migrations/0002_selection_store.d.ts +15 -0
  301. package/dist/cjs/migrations/0002_selection_store.d.ts.map +1 -0
  302. package/dist/cjs/migrations/0002_selection_store.js +56 -0
  303. package/dist/cjs/migrations/0002_selection_store.js.map +7 -0
  304. package/dist/cjs/migrations/0003_plan_inputs.d.ts +13 -0
  305. package/dist/cjs/migrations/0003_plan_inputs.d.ts.map +1 -0
  306. package/dist/cjs/migrations/0003_plan_inputs.js +90 -0
  307. package/dist/cjs/migrations/0003_plan_inputs.js.map +7 -0
  308. package/dist/cjs/migrations/0004_plan_environment.d.ts +14 -0
  309. package/dist/cjs/migrations/0004_plan_environment.d.ts.map +1 -0
  310. package/dist/cjs/migrations/0004_plan_environment.js +56 -0
  311. package/dist/cjs/migrations/0004_plan_environment.js.map +7 -0
  312. package/dist/cjs/migrations/0005_plan_merges.d.ts +14 -0
  313. package/dist/cjs/migrations/0005_plan_merges.d.ts.map +1 -0
  314. package/dist/cjs/migrations/0005_plan_merges.js +82 -0
  315. package/dist/cjs/migrations/0005_plan_merges.js.map +7 -0
  316. package/dist/cjs/migrations/0006_execution_listing.d.ts +15 -0
  317. package/dist/cjs/migrations/0006_execution_listing.d.ts.map +1 -0
  318. package/dist/cjs/migrations/0006_execution_listing.js +101 -0
  319. package/dist/cjs/migrations/0006_execution_listing.js.map +7 -0
  320. package/dist/cjs/migrations/0007_run_parent_sequence.d.ts +15 -0
  321. package/dist/cjs/migrations/0007_run_parent_sequence.d.ts.map +1 -0
  322. package/dist/cjs/migrations/0007_run_parent_sequence.js +40 -0
  323. package/dist/cjs/migrations/0007_run_parent_sequence.js.map +7 -0
  324. package/dist/cjs/migrations/0008_deferred_consumption.d.ts +16 -0
  325. package/dist/cjs/migrations/0008_deferred_consumption.d.ts.map +1 -0
  326. package/dist/cjs/migrations/0008_deferred_consumption.js +45 -0
  327. package/dist/cjs/migrations/0008_deferred_consumption.js.map +7 -0
  328. package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts +24 -0
  329. package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts.map +1 -0
  330. package/dist/cjs/migrations/0009_deferred_clock_facts.js +141 -0
  331. package/dist/cjs/migrations/0009_deferred_clock_facts.js.map +7 -0
  332. package/dist/cjs/migrations/0010_pending_cancellation.d.ts +15 -0
  333. package/dist/cjs/migrations/0010_pending_cancellation.d.ts.map +1 -0
  334. package/dist/cjs/migrations/0010_pending_cancellation.js +41 -0
  335. package/dist/cjs/migrations/0010_pending_cancellation.js.map +7 -0
  336. package/dist/cjs/package.json +1 -0
  337. package/dist/cjs/test/TestStores.d.ts +89 -0
  338. package/dist/cjs/test/TestStores.d.ts.map +1 -0
  339. package/dist/cjs/test/TestStores.js +98 -0
  340. package/dist/cjs/test/TestStores.js.map +7 -0
  341. package/dist/esm/ArtifactGc.d.ts +235 -0
  342. package/dist/esm/ArtifactGc.d.ts.map +1 -0
  343. package/dist/esm/ArtifactGc.js +268 -0
  344. package/dist/esm/ArtifactGc.js.map +1 -0
  345. package/dist/esm/ArtifactSync.d.ts +164 -0
  346. package/dist/esm/ArtifactSync.d.ts.map +1 -0
  347. package/dist/esm/ArtifactSync.js +176 -0
  348. package/dist/esm/ArtifactSync.js.map +1 -0
  349. package/dist/esm/CacheSync.d.ts +112 -0
  350. package/dist/esm/CacheSync.d.ts.map +1 -0
  351. package/dist/esm/CacheSync.js +94 -0
  352. package/dist/esm/CacheSync.js.map +1 -0
  353. package/dist/esm/DeferredClockFold.d.ts +354 -0
  354. package/dist/esm/DeferredClockFold.d.ts.map +1 -0
  355. package/dist/esm/DeferredClockFold.js +472 -0
  356. package/dist/esm/DeferredClockFold.js.map +1 -0
  357. package/dist/esm/DisasterRecovery.d.ts +431 -0
  358. package/dist/esm/DisasterRecovery.d.ts.map +1 -0
  359. package/dist/esm/DisasterRecovery.js +523 -0
  360. package/dist/esm/DisasterRecovery.js.map +1 -0
  361. package/dist/esm/DurableEngineState.d.ts +776 -0
  362. package/dist/esm/DurableEngineState.d.ts.map +1 -0
  363. package/dist/esm/DurableEngineState.js +1648 -0
  364. package/dist/esm/DurableEngineState.js.map +1 -0
  365. package/dist/esm/EngineStore.d.ts +158 -0
  366. package/dist/esm/EngineStore.d.ts.map +1 -0
  367. package/dist/esm/EngineStore.js +403 -0
  368. package/dist/esm/EngineStore.js.map +1 -0
  369. package/dist/esm/EngineStoreMetrics.d.ts +276 -0
  370. package/dist/esm/EngineStoreMetrics.d.ts.map +1 -0
  371. package/dist/esm/EngineStoreMetrics.js +260 -0
  372. package/dist/esm/EngineStoreMetrics.js.map +1 -0
  373. package/dist/esm/Errors.d.ts +22 -0
  374. package/dist/esm/Errors.d.ts.map +1 -0
  375. package/dist/esm/Errors.js +22 -0
  376. package/dist/esm/Errors.js.map +1 -0
  377. package/dist/esm/EventTypes.d.ts +27 -0
  378. package/dist/esm/EventTypes.d.ts.map +1 -0
  379. package/dist/esm/EventTypes.js +27 -0
  380. package/dist/esm/EventTypes.js.map +1 -0
  381. package/dist/esm/ExecutionFacts.d.ts +59 -0
  382. package/dist/esm/ExecutionFacts.d.ts.map +1 -0
  383. package/dist/esm/ExecutionFacts.js +96 -0
  384. package/dist/esm/ExecutionFacts.js.map +1 -0
  385. package/dist/esm/ExecutionSnapshot.d.ts +117 -0
  386. package/dist/esm/ExecutionSnapshot.d.ts.map +1 -0
  387. package/dist/esm/ExecutionSnapshot.js +95 -0
  388. package/dist/esm/ExecutionSnapshot.js.map +1 -0
  389. package/dist/esm/Inconsistency.d.ts +154 -0
  390. package/dist/esm/Inconsistency.d.ts.map +1 -0
  391. package/dist/esm/Inconsistency.js +133 -0
  392. package/dist/esm/Inconsistency.js.map +1 -0
  393. package/dist/esm/Migrations.d.ts +56 -0
  394. package/dist/esm/Migrations.d.ts.map +1 -0
  395. package/dist/esm/Migrations.js +91 -0
  396. package/dist/esm/Migrations.js.map +1 -0
  397. package/dist/esm/OwnerIdentity.d.ts +91 -0
  398. package/dist/esm/OwnerIdentity.d.ts.map +1 -0
  399. package/dist/esm/OwnerIdentity.js +99 -0
  400. package/dist/esm/OwnerIdentity.js.map +1 -0
  401. package/dist/esm/PlanInputStore.d.ts +110 -0
  402. package/dist/esm/PlanInputStore.d.ts.map +1 -0
  403. package/dist/esm/PlanInputStore.js +207 -0
  404. package/dist/esm/PlanInputStore.js.map +1 -0
  405. package/dist/esm/PlanMergeStore.d.ts +113 -0
  406. package/dist/esm/PlanMergeStore.d.ts.map +1 -0
  407. package/dist/esm/PlanMergeStore.js +244 -0
  408. package/dist/esm/PlanMergeStore.js.map +1 -0
  409. package/dist/esm/PlanScheduler.d.ts +363 -0
  410. package/dist/esm/PlanScheduler.d.ts.map +1 -0
  411. package/dist/esm/PlanScheduler.js +1321 -0
  412. package/dist/esm/PlanScheduler.js.map +1 -0
  413. package/dist/esm/Reconciliation.d.ts +175 -0
  414. package/dist/esm/Reconciliation.d.ts.map +1 -0
  415. package/dist/esm/Reconciliation.js +175 -0
  416. package/dist/esm/Reconciliation.js.map +1 -0
  417. package/dist/esm/ReplayOnly.d.ts +91 -0
  418. package/dist/esm/ReplayOnly.d.ts.map +1 -0
  419. package/dist/esm/ReplayOnly.js +59 -0
  420. package/dist/esm/ReplayOnly.js.map +1 -0
  421. package/dist/esm/Retention.d.ts +113 -0
  422. package/dist/esm/Retention.d.ts.map +1 -0
  423. package/dist/esm/Retention.js +139 -0
  424. package/dist/esm/Retention.js.map +1 -0
  425. package/dist/esm/RunCatalogRead.d.ts +17 -0
  426. package/dist/esm/RunCatalogRead.d.ts.map +1 -0
  427. package/dist/esm/RunCatalogRead.js +17 -0
  428. package/dist/esm/RunCatalogRead.js.map +1 -0
  429. package/dist/esm/RunChangeFeed.d.ts +75 -0
  430. package/dist/esm/RunChangeFeed.d.ts.map +1 -0
  431. package/dist/esm/RunChangeFeed.js +81 -0
  432. package/dist/esm/RunChangeFeed.js.map +1 -0
  433. package/dist/esm/RunState.d.ts +116 -0
  434. package/dist/esm/RunState.d.ts.map +1 -0
  435. package/dist/esm/RunState.js +109 -0
  436. package/dist/esm/RunState.js.map +1 -0
  437. package/dist/esm/Selection.d.ts +495 -0
  438. package/dist/esm/Selection.d.ts.map +1 -0
  439. package/dist/esm/Selection.js +482 -0
  440. package/dist/esm/Selection.js.map +1 -0
  441. package/dist/esm/SelectionStore.d.ts +141 -0
  442. package/dist/esm/SelectionStore.d.ts.map +1 -0
  443. package/dist/esm/SelectionStore.js +215 -0
  444. package/dist/esm/SelectionStore.js.map +1 -0
  445. package/dist/esm/StepBoundary.d.ts +501 -0
  446. package/dist/esm/StepBoundary.d.ts.map +1 -0
  447. package/dist/esm/StepBoundary.js +919 -0
  448. package/dist/esm/StepBoundary.js.map +1 -0
  449. package/dist/esm/StepCacheFold.d.ts +148 -0
  450. package/dist/esm/StepCacheFold.d.ts.map +1 -0
  451. package/dist/esm/StepCacheFold.js +201 -0
  452. package/dist/esm/StepCacheFold.js.map +1 -0
  453. package/dist/esm/StepSandbox.d.ts +78 -0
  454. package/dist/esm/StepSandbox.d.ts.map +1 -0
  455. package/dist/esm/StepSandbox.js +70 -0
  456. package/dist/esm/StepSandbox.js.map +1 -0
  457. package/dist/esm/WakeBus.d.ts +116 -0
  458. package/dist/esm/WakeBus.d.ts.map +1 -0
  459. package/dist/esm/WakeBus.js +121 -0
  460. package/dist/esm/WakeBus.js.map +1 -0
  461. package/dist/esm/WorkspaceSandbox.d.ts +619 -0
  462. package/dist/esm/WorkspaceSandbox.d.ts.map +1 -0
  463. package/dist/esm/WorkspaceSandbox.js +985 -0
  464. package/dist/esm/WorkspaceSandbox.js.map +1 -0
  465. package/dist/esm/index.d.ts +157 -0
  466. package/dist/esm/index.d.ts.map +1 -0
  467. package/dist/esm/index.js +157 -0
  468. package/dist/esm/index.js.map +1 -0
  469. package/dist/esm/internal/ActionPersistence.d.ts +276 -0
  470. package/dist/esm/internal/ActionPersistence.d.ts.map +1 -0
  471. package/dist/esm/internal/ActionPersistence.js +2306 -0
  472. package/dist/esm/internal/ActionPersistence.js.map +1 -0
  473. package/dist/esm/internal/ArtifactRoots.d.ts +38 -0
  474. package/dist/esm/internal/ArtifactRoots.d.ts.map +1 -0
  475. package/dist/esm/internal/ArtifactRoots.js +76 -0
  476. package/dist/esm/internal/ArtifactRoots.js.map +1 -0
  477. package/dist/esm/internal/AttemptAdmission.d.ts +53 -0
  478. package/dist/esm/internal/AttemptAdmission.d.ts.map +1 -0
  479. package/dist/esm/internal/AttemptAdmission.js +52 -0
  480. package/dist/esm/internal/AttemptAdmission.js.map +1 -0
  481. package/dist/esm/internal/AttemptLifecycle.d.ts +245 -0
  482. package/dist/esm/internal/AttemptLifecycle.d.ts.map +1 -0
  483. package/dist/esm/internal/AttemptLifecycle.js +104 -0
  484. package/dist/esm/internal/AttemptLifecycle.js.map +1 -0
  485. package/dist/esm/internal/AttemptProbe.d.ts +53 -0
  486. package/dist/esm/internal/AttemptProbe.d.ts.map +1 -0
  487. package/dist/esm/internal/AttemptProbe.js +83 -0
  488. package/dist/esm/internal/AttemptProbe.js.map +1 -0
  489. package/dist/esm/internal/CacheAdmission.d.ts +79 -0
  490. package/dist/esm/internal/CacheAdmission.d.ts.map +1 -0
  491. package/dist/esm/internal/CacheAdmission.js +72 -0
  492. package/dist/esm/internal/CacheAdmission.js.map +1 -0
  493. package/dist/esm/internal/CacheAgeHistory.d.ts +27 -0
  494. package/dist/esm/internal/CacheAgeHistory.d.ts.map +1 -0
  495. package/dist/esm/internal/CacheAgeHistory.js +49 -0
  496. package/dist/esm/internal/CacheAgeHistory.js.map +1 -0
  497. package/dist/esm/internal/CacheAgeVerdicts.d.ts +15 -0
  498. package/dist/esm/internal/CacheAgeVerdicts.d.ts.map +1 -0
  499. package/dist/esm/internal/CacheAgeVerdicts.js +54 -0
  500. package/dist/esm/internal/CacheAgeVerdicts.js.map +1 -0
  501. package/dist/esm/internal/CacheOutputPolicy.d.ts +24 -0
  502. package/dist/esm/internal/CacheOutputPolicy.d.ts.map +1 -0
  503. package/dist/esm/internal/CacheOutputPolicy.js +73 -0
  504. package/dist/esm/internal/CacheOutputPolicy.js.map +1 -0
  505. package/dist/esm/internal/CachePublication.d.ts +97 -0
  506. package/dist/esm/internal/CachePublication.d.ts.map +1 -0
  507. package/dist/esm/internal/CachePublication.js +116 -0
  508. package/dist/esm/internal/CachePublication.js.map +1 -0
  509. package/dist/esm/internal/CallFacts.d.ts +15 -0
  510. package/dist/esm/internal/CallFacts.d.ts.map +1 -0
  511. package/dist/esm/internal/CallFacts.js +83 -0
  512. package/dist/esm/internal/CallFacts.js.map +1 -0
  513. package/dist/esm/internal/CopiedRecord.d.ts +61 -0
  514. package/dist/esm/internal/CopiedRecord.d.ts.map +1 -0
  515. package/dist/esm/internal/CopiedRecord.js +165 -0
  516. package/dist/esm/internal/CopiedRecord.js.map +1 -0
  517. package/dist/esm/internal/DeferredPersistence.d.ts +108 -0
  518. package/dist/esm/internal/DeferredPersistence.d.ts.map +1 -0
  519. package/dist/esm/internal/DeferredPersistence.js +240 -0
  520. package/dist/esm/internal/DeferredPersistence.js.map +1 -0
  521. package/dist/esm/internal/EffectRecords.d.ts +92 -0
  522. package/dist/esm/internal/EffectRecords.d.ts.map +1 -0
  523. package/dist/esm/internal/EffectRecords.js +94 -0
  524. package/dist/esm/internal/EffectRecords.js.map +1 -0
  525. package/dist/esm/internal/EngineJj.d.ts +30 -0
  526. package/dist/esm/internal/EngineJj.d.ts.map +1 -0
  527. package/dist/esm/internal/EngineJj.js +29 -0
  528. package/dist/esm/internal/EngineJj.js.map +1 -0
  529. package/dist/esm/internal/EngineStateSchema.d.ts +68 -0
  530. package/dist/esm/internal/EngineStateSchema.d.ts.map +1 -0
  531. package/dist/esm/internal/EngineStateSchema.js +53 -0
  532. package/dist/esm/internal/EngineStateSchema.js.map +1 -0
  533. package/dist/esm/internal/ExecutionSnapshotRead.d.ts +162 -0
  534. package/dist/esm/internal/ExecutionSnapshotRead.d.ts.map +1 -0
  535. package/dist/esm/internal/ExecutionSnapshotRead.js +218 -0
  536. package/dist/esm/internal/ExecutionSnapshotRead.js.map +1 -0
  537. package/dist/esm/internal/ExecutionSnapshotRelations.d.ts +39 -0
  538. package/dist/esm/internal/ExecutionSnapshotRelations.d.ts.map +1 -0
  539. package/dist/esm/internal/ExecutionSnapshotRelations.js +81 -0
  540. package/dist/esm/internal/ExecutionSnapshotRelations.js.map +1 -0
  541. package/dist/esm/internal/ExitEncoding.d.ts +180 -0
  542. package/dist/esm/internal/ExitEncoding.d.ts.map +1 -0
  543. package/dist/esm/internal/ExitEncoding.js +361 -0
  544. package/dist/esm/internal/ExitEncoding.js.map +1 -0
  545. package/dist/esm/internal/FileBoundarySnapshot.d.ts +14 -0
  546. package/dist/esm/internal/FileBoundarySnapshot.d.ts.map +1 -0
  547. package/dist/esm/internal/FileBoundarySnapshot.js +29 -0
  548. package/dist/esm/internal/FileBoundarySnapshot.js.map +1 -0
  549. package/dist/esm/internal/FileEnumeration.d.ts +127 -0
  550. package/dist/esm/internal/FileEnumeration.d.ts.map +1 -0
  551. package/dist/esm/internal/FileEnumeration.js +236 -0
  552. package/dist/esm/internal/FileEnumeration.js.map +1 -0
  553. package/dist/esm/internal/HostReflection.d.ts +80 -0
  554. package/dist/esm/internal/HostReflection.d.ts.map +1 -0
  555. package/dist/esm/internal/HostReflection.js +98 -0
  556. package/dist/esm/internal/HostReflection.js.map +1 -0
  557. package/dist/esm/internal/JournalRecords.d.ts +325 -0
  558. package/dist/esm/internal/JournalRecords.d.ts.map +1 -0
  559. package/dist/esm/internal/JournalRecords.js +306 -0
  560. package/dist/esm/internal/JournalRecords.js.map +1 -0
  561. package/dist/esm/internal/NodeJournal.d.ts +157 -0
  562. package/dist/esm/internal/NodeJournal.d.ts.map +1 -0
  563. package/dist/esm/internal/NodeJournal.js +298 -0
  564. package/dist/esm/internal/NodeJournal.js.map +1 -0
  565. package/dist/esm/internal/Ordering.d.ts +14 -0
  566. package/dist/esm/internal/Ordering.d.ts.map +1 -0
  567. package/dist/esm/internal/Ordering.js +14 -0
  568. package/dist/esm/internal/Ordering.js.map +1 -0
  569. package/dist/esm/internal/PlanInputs.d.ts +14 -0
  570. package/dist/esm/internal/PlanInputs.d.ts.map +1 -0
  571. package/dist/esm/internal/PlanInputs.js +57 -0
  572. package/dist/esm/internal/PlanInputs.js.map +1 -0
  573. package/dist/esm/internal/PlanMerges.d.ts +178 -0
  574. package/dist/esm/internal/PlanMerges.d.ts.map +1 -0
  575. package/dist/esm/internal/PlanMerges.js +113 -0
  576. package/dist/esm/internal/PlanMerges.js.map +1 -0
  577. package/dist/esm/internal/ProvenanceSlot.d.ts +30 -0
  578. package/dist/esm/internal/ProvenanceSlot.d.ts.map +1 -0
  579. package/dist/esm/internal/ProvenanceSlot.js +39 -0
  580. package/dist/esm/internal/ProvenanceSlot.js.map +1 -0
  581. package/dist/esm/internal/ResultEnvelope.d.ts +88 -0
  582. package/dist/esm/internal/ResultEnvelope.d.ts.map +1 -0
  583. package/dist/esm/internal/ResultEnvelope.js +83 -0
  584. package/dist/esm/internal/ResultEnvelope.js.map +1 -0
  585. package/dist/esm/internal/RetentionOps.d.ts +414 -0
  586. package/dist/esm/internal/RetentionOps.d.ts.map +1 -0
  587. package/dist/esm/internal/RetentionOps.js +576 -0
  588. package/dist/esm/internal/RetentionOps.js.map +1 -0
  589. package/dist/esm/internal/RunCatalogOps.d.ts +118 -0
  590. package/dist/esm/internal/RunCatalogOps.d.ts.map +1 -0
  591. package/dist/esm/internal/RunCatalogOps.js +120 -0
  592. package/dist/esm/internal/RunCatalogOps.js.map +1 -0
  593. package/dist/esm/internal/RunCoordinator.d.ts +78 -0
  594. package/dist/esm/internal/RunCoordinator.d.ts.map +1 -0
  595. package/dist/esm/internal/RunCoordinator.js +115 -0
  596. package/dist/esm/internal/RunCoordinator.js.map +1 -0
  597. package/dist/esm/internal/RunDriver.d.ts +192 -0
  598. package/dist/esm/internal/RunDriver.d.ts.map +1 -0
  599. package/dist/esm/internal/RunDriver.js +2334 -0
  600. package/dist/esm/internal/RunDriver.js.map +1 -0
  601. package/dist/esm/internal/RunLifecycle.d.ts +22 -0
  602. package/dist/esm/internal/RunLifecycle.d.ts.map +1 -0
  603. package/dist/esm/internal/RunLifecycle.js +49 -0
  604. package/dist/esm/internal/RunLifecycle.js.map +1 -0
  605. package/dist/esm/internal/RunListing.d.ts +78 -0
  606. package/dist/esm/internal/RunListing.d.ts.map +1 -0
  607. package/dist/esm/internal/RunListing.js +146 -0
  608. package/dist/esm/internal/RunListing.js.map +1 -0
  609. package/dist/esm/internal/RunListingError.d.ts +35 -0
  610. package/dist/esm/internal/RunListingError.d.ts.map +1 -0
  611. package/dist/esm/internal/RunListingError.js +27 -0
  612. package/dist/esm/internal/RunListingError.js.map +1 -0
  613. package/dist/esm/internal/RuntimeGraph.d.ts +73 -0
  614. package/dist/esm/internal/RuntimeGraph.d.ts.map +1 -0
  615. package/dist/esm/internal/RuntimeGraph.js +182 -0
  616. package/dist/esm/internal/RuntimeGraph.js.map +1 -0
  617. package/dist/esm/internal/SandboxedExecution.d.ts +80 -0
  618. package/dist/esm/internal/SandboxedExecution.d.ts.map +1 -0
  619. package/dist/esm/internal/SandboxedExecution.js +107 -0
  620. package/dist/esm/internal/SandboxedExecution.js.map +1 -0
  621. package/dist/esm/internal/StateTransaction.d.ts +44 -0
  622. package/dist/esm/internal/StateTransaction.d.ts.map +1 -0
  623. package/dist/esm/internal/StateTransaction.js +54 -0
  624. package/dist/esm/internal/StateTransaction.js.map +1 -0
  625. package/dist/esm/internal/StepFacts.d.ts +14 -0
  626. package/dist/esm/internal/StepFacts.d.ts.map +1 -0
  627. package/dist/esm/internal/StepFacts.js +35 -0
  628. package/dist/esm/internal/StepFacts.js.map +1 -0
  629. package/dist/esm/internal/TypedEvents.d.ts +14 -0
  630. package/dist/esm/internal/TypedEvents.d.ts.map +1 -0
  631. package/dist/esm/internal/TypedEvents.js +14 -0
  632. package/dist/esm/internal/TypedEvents.js.map +1 -0
  633. package/dist/esm/migrations/0001_initial.d.ts +17 -0
  634. package/dist/esm/migrations/0001_initial.d.ts.map +1 -0
  635. package/dist/esm/migrations/0001_initial.js +41 -0
  636. package/dist/esm/migrations/0001_initial.js.map +1 -0
  637. package/dist/esm/migrations/0002_selection_store.d.ts +15 -0
  638. package/dist/esm/migrations/0002_selection_store.d.ts.map +1 -0
  639. package/dist/esm/migrations/0002_selection_store.js +34 -0
  640. package/dist/esm/migrations/0002_selection_store.js.map +1 -0
  641. package/dist/esm/migrations/0003_plan_inputs.d.ts +13 -0
  642. package/dist/esm/migrations/0003_plan_inputs.d.ts.map +1 -0
  643. package/dist/esm/migrations/0003_plan_inputs.js +70 -0
  644. package/dist/esm/migrations/0003_plan_inputs.js.map +1 -0
  645. package/dist/esm/migrations/0004_plan_environment.d.ts +14 -0
  646. package/dist/esm/migrations/0004_plan_environment.d.ts.map +1 -0
  647. package/dist/esm/migrations/0004_plan_environment.js +33 -0
  648. package/dist/esm/migrations/0004_plan_environment.js.map +1 -0
  649. package/dist/esm/migrations/0005_plan_merges.d.ts +14 -0
  650. package/dist/esm/migrations/0005_plan_merges.d.ts.map +1 -0
  651. package/dist/esm/migrations/0005_plan_merges.js +59 -0
  652. package/dist/esm/migrations/0005_plan_merges.js.map +1 -0
  653. package/dist/esm/migrations/0006_execution_listing.d.ts +15 -0
  654. package/dist/esm/migrations/0006_execution_listing.d.ts.map +1 -0
  655. package/dist/esm/migrations/0006_execution_listing.js +81 -0
  656. package/dist/esm/migrations/0006_execution_listing.js.map +1 -0
  657. package/dist/esm/migrations/0007_run_parent_sequence.d.ts +15 -0
  658. package/dist/esm/migrations/0007_run_parent_sequence.d.ts.map +1 -0
  659. package/dist/esm/migrations/0007_run_parent_sequence.js +18 -0
  660. package/dist/esm/migrations/0007_run_parent_sequence.js.map +1 -0
  661. package/dist/esm/migrations/0008_deferred_consumption.d.ts +16 -0
  662. package/dist/esm/migrations/0008_deferred_consumption.d.ts.map +1 -0
  663. package/dist/esm/migrations/0008_deferred_consumption.js +24 -0
  664. package/dist/esm/migrations/0008_deferred_consumption.js.map +1 -0
  665. package/dist/esm/migrations/0009_deferred_clock_facts.d.ts +24 -0
  666. package/dist/esm/migrations/0009_deferred_clock_facts.d.ts.map +1 -0
  667. package/dist/esm/migrations/0009_deferred_clock_facts.js +127 -0
  668. package/dist/esm/migrations/0009_deferred_clock_facts.js.map +1 -0
  669. package/dist/esm/migrations/0010_pending_cancellation.d.ts +15 -0
  670. package/dist/esm/migrations/0010_pending_cancellation.d.ts.map +1 -0
  671. package/dist/esm/migrations/0010_pending_cancellation.js +19 -0
  672. package/dist/esm/migrations/0010_pending_cancellation.js.map +1 -0
  673. package/dist/esm/test/TestStores.d.ts +89 -0
  674. package/dist/esm/test/TestStores.d.ts.map +1 -0
  675. package/dist/esm/test/TestStores.js +103 -0
  676. package/dist/esm/test/TestStores.js.map +1 -0
  677. package/docs/README.md +113 -0
  678. package/docs/api.md +1494 -0
  679. package/docs/concepts/attempts-and-replay.md +149 -0
  680. package/docs/concepts/cache-admission.md +265 -0
  681. package/docs/concepts/call-facts.md +86 -0
  682. package/docs/concepts/durable-waits.md +175 -0
  683. package/docs/concepts/execution-facts.md +90 -0
  684. package/docs/concepts/ownership-and-fencing.md +128 -0
  685. package/docs/concepts/step-boundaries.md +148 -0
  686. package/docs/concepts/workspace-transactions.md +199 -0
  687. package/docs/event-types.md +14 -0
  688. package/docs/guides/back-up-and-restore.md +164 -0
  689. package/docs/guides/collect-unreferenced-artifacts.md +128 -0
  690. package/docs/guides/compose-a-durable-engine.md +146 -0
  691. package/docs/guides/coordinate-two-processes.md +120 -0
  692. package/docs/guides/defer-work-with-selection.md +171 -0
  693. package/docs/guides/delete-old-run-history.md +154 -0
  694. package/docs/guides/drive-a-plan.md +314 -0
  695. package/docs/guides/observe-engine-metrics.md +98 -0
  696. package/docs/guides/observe-executions.md +187 -0
  697. package/docs/guides/reclaim-runs-from-a-dead-host.md +133 -0
  698. package/docs/guides/share-a-cache-across-machines.md +134 -0
  699. package/docs/guides/testing.md +123 -0
  700. package/docs/installation.md +102 -0
  701. package/docs/quickstart.md +215 -0
  702. package/docs/troubleshooting.md +347 -0
  703. package/package.json +438 -3
  704. package/src/ArtifactGc.ts +408 -0
  705. package/src/ArtifactSync.ts +278 -0
  706. package/src/CacheSync.ts +131 -0
  707. package/src/DeferredClockFold.ts +586 -0
  708. package/src/DisasterRecovery.ts +888 -0
  709. package/src/DurableEngineState.ts +2656 -0
  710. package/src/EngineStore.ts +656 -0
  711. package/src/EngineStoreMetrics.ts +331 -0
  712. package/src/Errors.ts +28 -0
  713. package/src/EventTypes.ts +27 -0
  714. package/src/ExecutionFacts.ts +125 -0
  715. package/src/ExecutionSnapshot.ts +186 -0
  716. package/src/Inconsistency.ts +253 -0
  717. package/src/Migrations.ts +95 -0
  718. package/src/OwnerIdentity.ts +125 -0
  719. package/src/PlanInputStore.ts +292 -0
  720. package/src/PlanMergeStore.ts +330 -0
  721. package/src/PlanScheduler.ts +1806 -0
  722. package/src/Reconciliation.ts +224 -0
  723. package/src/ReplayOnly.ts +95 -0
  724. package/src/Retention.ts +214 -0
  725. package/src/RunCatalogRead.ts +27 -0
  726. package/src/RunChangeFeed.ts +125 -0
  727. package/src/RunState.ts +137 -0
  728. package/src/Selection.ts +683 -0
  729. package/src/SelectionStore.ts +353 -0
  730. package/src/StepBoundary.ts +1165 -0
  731. package/src/StepCacheFold.ts +244 -0
  732. package/src/StepSandbox.ts +110 -0
  733. package/src/WakeBus.ts +167 -0
  734. package/src/WorkspaceSandbox.ts +1604 -0
  735. package/src/index.ts +185 -0
  736. package/src/internal/ActionPersistence.ts +2687 -0
  737. package/src/internal/ArtifactRoots.ts +92 -0
  738. package/src/internal/AttemptAdmission.ts +76 -0
  739. package/src/internal/AttemptLifecycle.ts +163 -0
  740. package/src/internal/AttemptProbe.ts +90 -0
  741. package/src/internal/CacheAdmission.ts +133 -0
  742. package/src/internal/CacheAgeHistory.ts +58 -0
  743. package/src/internal/CacheAgeVerdicts.ts +61 -0
  744. package/src/internal/CacheOutputPolicy.ts +82 -0
  745. package/src/internal/CachePublication.ts +153 -0
  746. package/src/internal/CallFacts.ts +87 -0
  747. package/src/internal/CopiedRecord.ts +201 -0
  748. package/src/internal/DeferredPersistence.ts +459 -0
  749. package/src/internal/EffectRecords.ts +136 -0
  750. package/src/internal/EngineJj.ts +30 -0
  751. package/src/internal/EngineStateSchema.ts +92 -0
  752. package/src/internal/ExecutionSnapshotRead.ts +298 -0
  753. package/src/internal/ExecutionSnapshotRelations.ts +121 -0
  754. package/src/internal/ExitEncoding.ts +453 -0
  755. package/src/internal/FileBoundarySnapshot.ts +39 -0
  756. package/src/internal/FileEnumeration.ts +334 -0
  757. package/src/internal/HostReflection.ts +128 -0
  758. package/src/internal/JournalRecords.ts +396 -0
  759. package/src/internal/NodeJournal.ts +340 -0
  760. package/src/internal/Ordering.ts +14 -0
  761. package/src/internal/PlanInputs.ts +62 -0
  762. package/src/internal/PlanMerges.ts +123 -0
  763. package/src/internal/ProvenanceSlot.ts +52 -0
  764. package/src/internal/ResultEnvelope.ts +118 -0
  765. package/src/internal/RetentionOps.ts +865 -0
  766. package/src/internal/RunCatalogOps.ts +174 -0
  767. package/src/internal/RunCoordinator.ts +215 -0
  768. package/src/internal/RunDriver.ts +3152 -0
  769. package/src/internal/RunLifecycle.ts +53 -0
  770. package/src/internal/RunListing.ts +210 -0
  771. package/src/internal/RunListingError.ts +37 -0
  772. package/src/internal/RuntimeGraph.ts +253 -0
  773. package/src/internal/SandboxedExecution.ts +165 -0
  774. package/src/internal/StateTransaction.ts +71 -0
  775. package/src/internal/StepFacts.ts +36 -0
  776. package/src/internal/TypedEvents.ts +29 -0
  777. package/src/migrations/0001_initial.ts +51 -0
  778. package/src/migrations/0002_selection_store.ts +38 -0
  779. package/src/migrations/0003_plan_inputs.ts +75 -0
  780. package/src/migrations/0004_plan_environment.ts +34 -0
  781. package/src/migrations/0005_plan_merges.ts +60 -0
  782. package/src/migrations/0006_execution_listing.ts +86 -0
  783. package/src/migrations/0007_run_parent_sequence.ts +19 -0
  784. package/src/migrations/0008_deferred_consumption.ts +27 -0
  785. package/src/migrations/0009_deferred_clock_facts.ts +163 -0
  786. package/src/migrations/0010_pending_cancellation.ts +20 -0
  787. package/src/test/TestStores.ts +145 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Shared fail-closed decoding of artifact addresses held by durable engine
3
+ * rows.
4
+ *
5
+ * @since 1.0.0
6
+ */
7
+
8
+ import * as ArtifactStore from "@smthrs/artifacts/ArtifactStore"
9
+ import * as Effect from "effect/Effect"
10
+ import * as Schema from "effect/Schema"
11
+ import * as StepBoundary from "../StepBoundary.ts"
12
+
13
+ const RootMeta = Schema.Struct({ boundary: StepBoundary.BoundaryEvidence })
14
+ const MetaJson = Schema.fromJsonString(Schema.Unknown)
15
+ // The store's own address schema is the one rule for what counts as a digest;
16
+ // reimplementing it here is how the two drift apart.
17
+ const isDigest = Schema.is(ArtifactStore.Digest)
18
+
19
+ /**
20
+ * A durable root row this build cannot interpret safely.
21
+ *
22
+ * @category errors
23
+ * @since 1.0.0
24
+ */
25
+ export class ArtifactRootDecodeError extends Schema.TaggedError<ArtifactRootDecodeError>()(
26
+ "@smthrs/engine-store/ArtifactRootDecodeError",
27
+ { table: Schema.String, cause: Schema.Unknown }
28
+ ) {
29
+ override readonly name = "ArtifactRootDecodeError"
30
+ override get message(): string {
31
+ return `a ${this.table} row carries artifact evidence this build cannot decode`
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Extracts referenced boundary digests from one metadata column.
37
+ *
38
+ * @category decoding
39
+ * @since 1.0.0
40
+ */
41
+ export const rootDigests = (
42
+ table: string,
43
+ metaJson: string
44
+ ): Effect.Effect<ReadonlyArray<string>, ArtifactRootDecodeError> =>
45
+ Effect.gen(function*() {
46
+ const meta = yield* Schema.decodeUnknownEffect(MetaJson)(metaJson).pipe(
47
+ Effect.mapError((cause) => new ArtifactRootDecodeError({ table, cause }))
48
+ )
49
+ if (meta === null || typeof meta !== "object" || !("boundary" in meta)) return []
50
+ const decoded = Schema.decodeUnknownResult(RootMeta)(meta)
51
+ if (decoded._tag === "Failure") {
52
+ return yield* Effect.fail(new ArtifactRootDecodeError({ table, cause: decoded.failure }))
53
+ }
54
+ return StepBoundary.referencedDigests(decoded.success.boundary)
55
+ })
56
+
57
+ const collectArtifactDigests = (root: unknown): ReadonlyArray<string> => {
58
+ const digests = new Set<string>()
59
+ const pending: Array<unknown> = [root]
60
+ while (pending.length > 0) {
61
+ const next = pending.pop()
62
+ if (typeof next === "string") {
63
+ if (isDigest(next)) digests.add(next)
64
+ continue
65
+ }
66
+ if (Array.isArray(next)) {
67
+ pending.push(...next)
68
+ continue
69
+ }
70
+ if (next !== null && typeof next === "object") {
71
+ pending.push(...Object.values(next as Readonly<Record<string, unknown>>))
72
+ }
73
+ }
74
+ return [...digests]
75
+ }
76
+
77
+ /**
78
+ * Extracts digest-shaped addresses from one opaque attempt checkpoint.
79
+ *
80
+ * @category decoding
81
+ * @since 1.0.0
82
+ */
83
+ export const checkpointDigests = (
84
+ checkpointJson: string | null
85
+ ): Effect.Effect<ReadonlyArray<string>, ArtifactRootDecodeError> =>
86
+ Effect.gen(function*() {
87
+ if (checkpointJson === null) return []
88
+ const checkpoint = yield* Schema.decodeUnknownEffect(MetaJson)(checkpointJson).pipe(
89
+ Effect.mapError((cause) => new ArtifactRootDecodeError({ table: "flows_attempts.checkpoint_json", cause }))
90
+ )
91
+ return collectArtifactDigests(checkpoint)
92
+ })
@@ -0,0 +1,76 @@
1
+ /**
2
+ * The in-process attempt admission mutex.
3
+ *
4
+ * One instance lives per store incarnation (per `EngineStore.make`, alongside
5
+ * the owner nonce). Every durable action dispatch holds the key's permit
6
+ * for its whole admission-execute-finish span, so at most one fiber of this
7
+ * process can be driving a given `(runId, stepKeyDigest, attempt)` at a time.
8
+ *
9
+ * That exclusion is the liveness evidence adoption needs (issues #86, #102,
10
+ * #103): a persisted `running` row observed *while holding the key's permit*
11
+ * cannot belong to a live fiber of this process — a live same-key dispatch
12
+ * would be holding the permit — so it is crash or interruption evidence and
13
+ * safe to adopt, whether the admitting incarnation was another process
14
+ * (superseded by the run fence) or this very one (a dead fiber after an
15
+ * in-process re-drive). The recorded incarnation nonce alone could not make
16
+ * that distinction, which both let a TOCTOU window double-execute an
17
+ * irreversible body (issue #102) and permanently failed a same-incarnation
18
+ * re-drive with `AttemptAdmissionRejected` (issue #103).
19
+ *
20
+ * @since 0.1.0
21
+ */
22
+
23
+ import * as Context from "effect/Context"
24
+ import * as Effect from "effect/Effect"
25
+ import * as Layer from "effect/Layer"
26
+ import * as RcMap from "effect/RcMap"
27
+ import * as Scope from "effect/Scope"
28
+ import * as Semaphore from "effect/Semaphore"
29
+
30
+ /**
31
+ * The single operation the admission mutex exposes: run something while
32
+ * holding a key's exclusive permit.
33
+ *
34
+ * It is deliberately not a lock/unlock pair. Handing out a permit a caller
35
+ * must remember to return would make an interrupted dispatch leak exclusion
36
+ * for the rest of the process's life; a bracketing combinator cannot.
37
+ *
38
+ * @since 0.1.0
39
+ * @category services
40
+ */
41
+ export interface Service {
42
+ /**
43
+ * Runs `effect` while holding this process's exclusive permit for `key`.
44
+ * Concurrent same-key callers wait; the permit is released on any exit,
45
+ * including interruption.
46
+ */
47
+ readonly withPermit: (
48
+ key: string
49
+ ) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
50
+ }
51
+
52
+ /**
53
+ * Constructs the keyed admission mutex synchronously.
54
+ *
55
+ * Gates are reference-counted and removed once no fiber holds or awaits
56
+ * them, so the map does not grow with the number of distinct keys a
57
+ * long-lived process dispatches.
58
+ *
59
+ * @since 0.1.0
60
+ * @category constructors
61
+ */
62
+ export const makeUnsafe = (): Service => {
63
+ // One layer identity per incarnation; each operation borrows its owner
64
+ // through a shared memo map, so the last operation releases the RcMap.
65
+ const Locks = Context.Service<RcMap.RcMap<string, Semaphore.Semaphore>>("AttemptAdmission/Locks")
66
+ const layer = Layer.effect(Locks, RcMap.make({ lookup: (_key: string) => Semaphore.make(1) }))
67
+ const owners = Layer.makeMemoMapUnsafe()
68
+ return {
69
+ withPermit: (key) => (effect) =>
70
+ Effect.scoped(Effect.gen(function*() {
71
+ const services = yield* Layer.buildWithMemoMap(layer, owners, yield* Scope.Scope)
72
+ const lock = yield* RcMap.get(Context.get(services, Locks), key)
73
+ return yield* lock.withPermit(effect)
74
+ }))
75
+ }
76
+ }
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Complete attempt-history projection. The attempt store remains authoritative;
3
+ * only v2 histories contain enough evidence to rebuild this projection.
4
+ *
5
+ * @since 1.0.0
6
+ */
7
+
8
+ import * as EngineEvent from "@smthrs/journal/EngineEvent"
9
+ import * as JournalEvent from "@smthrs/journal/JournalEvent"
10
+ import type * as Projection from "@smthrs/journal/Projection"
11
+ import * as Cause from "effect/Cause"
12
+ import * as Effect from "effect/Effect"
13
+ import * as Schema from "effect/Schema"
14
+
15
+ /**
16
+ * An attempt state with completion data required only at completion.
17
+ *
18
+ * @category schemas
19
+ * @since 1.0.0
20
+ */
21
+ export const AttemptLifecycle = EngineEvent.AttemptLifecycle
22
+ /**
23
+ * An attempt state with completion data required only at completion.
24
+ *
25
+ * @category models
26
+ * @since 1.0.0
27
+ */
28
+ export type AttemptLifecycle = EngineEvent.AttemptLifecycle
29
+ /**
30
+ * Validate untrusted encoded state without dropping contradictory fields.
31
+ *
32
+ * @category decoders
33
+ * @since 1.0.0
34
+ */
35
+ export const decode = (input: unknown) =>
36
+ Effect.suspend(() => Schema.decodeUnknownEffect(AttemptLifecycle, { onExcessProperty: "error" })(input)).pipe(
37
+ Effect.catchCause((cause) =>
38
+ Effect.fail(
39
+ new EngineEvent.EventError({
40
+ code: "malformed",
41
+ message: "invalid attempt lifecycle",
42
+ cause: Cause.squash(cause)
43
+ })
44
+ )
45
+ )
46
+ )
47
+
48
+ /**
49
+ * The latest complete journal state for one attempt.
50
+ *
51
+ * @category models
52
+ * @since 1.0.0
53
+ */
54
+ export interface Row {
55
+ readonly executionId: string
56
+ readonly stepKeyDigest: string
57
+ readonly attempt: number
58
+ readonly seq: number
59
+ readonly lifecycle: AttemptLifecycle
60
+ }
61
+
62
+ /**
63
+ * Attempt projection rows, independent of executable engine storage.
64
+ *
65
+ * @category models
66
+ * @since 1.0.0
67
+ */
68
+ export type State = ReadonlyArray<Row>
69
+
70
+ /**
71
+ * A versioned retained projection. Its sequence covers every included row.
72
+ *
73
+ * @category schemas
74
+ * @since 1.0.0
75
+ */
76
+ export const Snapshot = Schema.Struct({
77
+ version: Schema.Literal(2),
78
+ lineage: EngineEvent.Lineage,
79
+ seq: JournalEvent.Seq,
80
+ rows: Schema.Array(Schema.Struct({
81
+ executionId: JournalEvent.Identifier,
82
+ stepKeyDigest: JournalEvent.Identifier,
83
+ attempt: JournalEvent.NonNegativeQuantity,
84
+ seq: JournalEvent.Seq,
85
+ lifecycle: AttemptLifecycle
86
+ }))
87
+ }).check(
88
+ Schema.makeFilter((snapshot) =>
89
+ snapshot.rows.every((row) => row.seq <= snapshot.seq && row.executionId === snapshot.lineage.runId) &&
90
+ new Set(snapshot.rows.map((row) => JSON.stringify([row.executionId, row.stepKeyDigest, row.attempt]))).size ===
91
+ snapshot.rows.length
92
+ )
93
+ )
94
+
95
+ /**
96
+ * Decode retained state and check all lineage coordinates before suffix replay.
97
+ * Source admission still applies independently to every suffix event.
98
+ *
99
+ * @category decoders
100
+ * @since 1.0.0
101
+ */
102
+ export const restore = (input: unknown, consumer: EngineEvent.Consumer) =>
103
+ Effect.suspend(() => Schema.decodeUnknownEffect(Snapshot, { onExcessProperty: "error" })(input)).pipe(
104
+ Effect.flatMap((snapshot) => {
105
+ const lineage = snapshot.lineage
106
+ return lineage.runId !== consumer.runId || lineage.lineageId !== consumer.lineageId ||
107
+ lineage.rootRunId !== consumer.rootRunId || lineage.round !== consumer.round ||
108
+ lineage.parentRunId !== consumer.parentRunId
109
+ ? Effect.fail(
110
+ new EngineEvent.EventError({
111
+ code: "foreign",
112
+ message: "attempt snapshot is outside the consumer lineage",
113
+ cause: lineage
114
+ })
115
+ )
116
+ : Effect.succeed(snapshot)
117
+ }),
118
+ Effect.catchCause((failure) => {
119
+ const cause = Cause.squash(failure)
120
+ return Effect.fail(
121
+ cause instanceof EngineEvent.EventError ?
122
+ cause
123
+ : new EngineEvent.EventError({ code: "malformed", message: "invalid attempt snapshot", cause })
124
+ )
125
+ })
126
+ )
127
+
128
+ /**
129
+ * Reduces full lifecycle records with monotonic sequence and legal state
130
+ * transitions. A missing start is incomplete history, never terminal success.
131
+ *
132
+ * @category projections
133
+ * @since 1.0.0
134
+ */
135
+ export const projection = (consumer: EngineEvent.Consumer): Projection.Projection<State, EngineEvent.EventError> => ({
136
+ name: "flows/engine/attempts/v2",
137
+ initial: [],
138
+ reduce: (state, entry) =>
139
+ Effect.gen(function*() {
140
+ const decoded = yield* EngineEvent.decodeEntry(entry, consumer)
141
+ if (decoded._tag !== "Attempt") return state
142
+ const { attempt, executionId, lifecycle, stepKeyDigest } = decoded.payload
143
+ const previous = state.find((row) =>
144
+ row.executionId === executionId && row.stepKeyDigest === stepKeyDigest && row.attempt === attempt
145
+ )
146
+ if (
147
+ previous === undefined
148
+ ? lifecycle.state !== "running"
149
+ : entry.seq <= previous.seq || previous.lifecycle.state === "succeeded" ||
150
+ previous.lifecycle.state === "failed" || lifecycle.startedAtMs !== previous.lifecycle.startedAtMs
151
+ ) {
152
+ return yield* Effect.fail(
153
+ new EngineEvent.EventError({
154
+ code: "transition",
155
+ message: "attempt history has a missing start, reordered record or transition after completion",
156
+ cause: { previous, entry }
157
+ })
158
+ )
159
+ }
160
+ const row: Row = { executionId, stepKeyDigest, attempt, seq: entry.seq, lifecycle }
161
+ return [...state.filter((candidate) => candidate !== previous), row]
162
+ })
163
+ })
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Survivor discovery for an action key's attempt rows.
3
+ *
4
+ * Two implementations answer the same question — the durable state's single
5
+ * ordered range read (issue #77) and the point-probe walk against
6
+ * `AttemptStore` for storage that cannot range-scan. They are kept here
7
+ * together, behind one entry point, because their answers must agree: a run
8
+ * that resumes under SQL state and under the fallback must restore the same
9
+ * retry origin and the same attempt counter (issue #96).
10
+ *
11
+ * @since 0.1.0
12
+ */
13
+
14
+ import type { AttemptStore } from "@smthrs/run-store"
15
+ import * as Effect from "effect/Effect"
16
+ import * as Option from "effect/Option"
17
+ import type * as DurableEngineState from "../DurableEngineState.ts"
18
+
19
+ /**
20
+ * How long a pruned leading run of attempt numbers the survivor scan
21
+ * tolerates before it reports "no attempt row survives".
22
+ *
23
+ * A retention/prune job removes attempts oldest-first, so a surviving
24
+ * sequence is contiguous once its first row is found; the bound caps the
25
+ * pruned prefix walk (issue #69). It is a *semantic* bound, not merely a
26
+ * cost bound: the point-probe fallback cannot distinguish "nothing ever ran"
27
+ * from "the first 33 attempts were pruned" without a range read, so both
28
+ * paths apply the same tolerance and a key whose earliest survivor sits past
29
+ * it restarts its expiration budget and attempt numbering on either backend
30
+ * (issue #96). Restarting is safe — the pruned numbers are gone, so the
31
+ * fresh counter cannot collide — and, unlike the previous split, it is the
32
+ * same behaviour on every backend.
33
+ *
34
+ * @since 0.1.0
35
+ * @category constants
36
+ */
37
+ export const prunedPrefixScanLimit = 32
38
+
39
+ /**
40
+ * Finds the surviving attempt rows for an action key: the earliest row's
41
+ * start time — the durable retry origin when attempt 1 itself was pruned
42
+ * (issue #69) — and the highest attempt number contiguous from it, from
43
+ * which the engine resumes the attempt counter (issue #59). `Option.none()`
44
+ * means no attempt row survives within `prunedPrefixScanLimit`.
45
+ *
46
+ * When the durable state can range-scan attempts, one ordered SELECT answers
47
+ * both questions (issue #77); otherwise the point-read scan against
48
+ * `AttemptStore` answers them, paying up to `prunedPrefixScanLimit`
49
+ * sequential gets for a key that never ran. Both answers pass through the
50
+ * same tolerance check, so the two paths cannot diverge (issue #96).
51
+ *
52
+ * @since 0.1.0
53
+ * @category combinators
54
+ */
55
+ export const probeAttempts = (
56
+ attemptStore: AttemptStore.Service,
57
+ survivors: DurableEngineState.Service["attemptSurvivors"],
58
+ runId: string,
59
+ stepKeyDigest: string
60
+ ): Effect.Effect<Option.Option<DurableEngineState.AttemptSurvivors>> =>
61
+ Effect.gen(function*() {
62
+ if (survivors !== undefined) {
63
+ const found = yield* survivors(runId, stepKeyDigest)
64
+ if (Option.isNone(found)) return Option.none()
65
+ return found.value.earliestAttempt > prunedPrefixScanLimit
66
+ ? Option.none()
67
+ : found
68
+ }
69
+ let earliest = Option.none<AttemptStore.Attempt>()
70
+ let attempt = 1
71
+ for (; attempt <= prunedPrefixScanLimit; attempt++) {
72
+ const row = yield* attemptStore.get({ runId, stepKeyDigest, attempt }).pipe(Effect.orDie)
73
+ if (Option.isSome(row)) {
74
+ earliest = row
75
+ break
76
+ }
77
+ }
78
+ if (Option.isNone(earliest)) return Option.none()
79
+ let latest = attempt
80
+ for (let next = attempt + 1;; next++) {
81
+ const row = yield* attemptStore.get({ runId, stepKeyDigest, attempt: next }).pipe(Effect.orDie)
82
+ if (Option.isNone(row)) break
83
+ latest = next
84
+ }
85
+ return Option.some({
86
+ earliestAttempt: attempt,
87
+ earliestStartedAtMs: earliest.value.startedAtMs,
88
+ latest
89
+ })
90
+ })
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Pure, phase-specific cache evidence admission. Storage decoding, current-read
3
+ * measurement, TTL history, output replay and publication I/O stay with their owners.
4
+ * @since 1.0.0-rc.0
5
+ */
6
+
7
+ import type { Action } from "@smthrs/flow"
8
+ import type { FileBoundary } from "@smthrs/flow/FileBoundary"
9
+ import * as FileSet from "@smthrs/plan/FileSet"
10
+ import type * as StepBoundary from "../StepBoundary.ts"
11
+
12
+ /** Reasons an existing declaration cannot name reusable results.
13
+ * @category models
14
+ * @since 1.0.0-rc.0
15
+ */
16
+ export type DisabledReason = "unsealed" | "missing-boundary" | "expected-boundary" | "unresolved-read-glob"
17
+
18
+ /** Declaration eligibility is separate from proof that a result may be reused.
19
+ * @category models
20
+ * @since 1.0.0-rc.0
21
+ */
22
+ export type Declaration =
23
+ | { readonly _tag: "Eligible"; readonly metadata: FileBoundary }
24
+ | { readonly _tag: "Disabled"; readonly reason: DisabledReason }
25
+
26
+ /** The proof-bearing part of already-decoded attempt metadata.
27
+ * @category models
28
+ * @since 1.0.0-rc.0
29
+ */
30
+ export interface Metadata {
31
+ readonly tier: Action.Tier
32
+ readonly boundary?: StepBoundary.BoundaryEvidence | undefined
33
+ readonly readSetVerified?: true | undefined
34
+ readonly boundaryQuarantined?: true | undefined
35
+ }
36
+
37
+ /** A refusal is not a failure of an already durable action outcome.
38
+ * @category models
39
+ * @since 1.0.0-rc.0
40
+ */
41
+ export interface Refused {
42
+ readonly _tag: "Refused"
43
+ readonly reason:
44
+ | DisabledReason
45
+ | "invalid-meta"
46
+ | "unsealed-meta"
47
+ | "missing-evidence"
48
+ | "deviation"
49
+ | "unverified-writes"
50
+ | "unverified-hermetic-reads"
51
+ | "unverified-recorded-reads"
52
+ | "quarantined-evidence"
53
+ | "contradictory-evidence"
54
+ }
55
+
56
+ /** Necessary historical evidence, not yet a hit: current reads and outputs still need verification.
57
+ * @category models
58
+ * @since 1.0.0-rc.0
59
+ */
60
+ export interface CandidateEvidence<M extends Metadata> {
61
+ readonly _tag: "CandidateEvidence"
62
+ readonly meta: M
63
+ readonly evidence: StepBoundary.BoundaryEvidence
64
+ }
65
+
66
+ /** Shared gate for fresh completion and durable-completion convergence.
67
+ * @category models
68
+ * @since 1.0.0-rc.0
69
+ */
70
+ export interface PublishCompletion<M extends Metadata> {
71
+ readonly _tag: "PublishCompletion"
72
+ readonly meta: M
73
+ }
74
+
75
+ /** Classifies existing declaration policy without changing keys or measuring the host.
76
+ * @category classifiers
77
+ * @since 1.0.0-rc.0
78
+ */
79
+ export const declaration = (
80
+ input: { readonly tier: Action.Tier; readonly metadata?: FileBoundary | undefined }
81
+ ): Declaration => {
82
+ if (input.tier !== "sealed") return { _tag: "Disabled", reason: "unsealed" }
83
+ if (input.metadata === undefined) return { _tag: "Disabled", reason: "missing-boundary" }
84
+ if (input.metadata.boundaryMode !== "hard") return { _tag: "Disabled", reason: "expected-boundary" }
85
+ if (input.metadata.readSet.some(FileSet.isGlob)) return { _tag: "Disabled", reason: "unresolved-read-glob" }
86
+ return { _tag: "Eligible", metadata: input.metadata }
87
+ }
88
+
89
+ /** Candidate reads are remeasured, so do not require a historical readSetVerified flag here.
90
+ * @category classifiers
91
+ * @since 1.0.0-rc.0
92
+ */
93
+ export const candidate = <M extends Metadata>(meta: M | undefined): CandidateEvidence<M> | Refused => {
94
+ if (meta === undefined) return { _tag: "Refused", reason: "invalid-meta" }
95
+ // Legacy flags never override quarantine. Retain the durable outcome and
96
+ // the original metadata, but refuse to promote contradictory proof to reuse.
97
+ if (meta.boundaryQuarantined === true) {
98
+ return {
99
+ _tag: "Refused",
100
+ reason: meta.boundary !== undefined || meta.readSetVerified === true
101
+ ? "contradictory-evidence"
102
+ : "quarantined-evidence"
103
+ }
104
+ }
105
+ if (meta.readSetVerified === true && meta.boundary === undefined) {
106
+ return { _tag: "Refused", reason: "contradictory-evidence" }
107
+ }
108
+ if (meta.tier !== "sealed") return { _tag: "Refused", reason: "unsealed-meta" }
109
+ const evidence = meta.boundary
110
+ if (evidence === undefined) return { _tag: "Refused", reason: "missing-evidence" }
111
+ if (evidence.deviation !== undefined) return { _tag: "Refused", reason: "deviation" }
112
+ if (evidence.wholeTreeWritesVerified !== true) return { _tag: "Refused", reason: "unverified-writes" }
113
+ if (evidence.hermeticReadsVerified !== true) return { _tag: "Refused", reason: "unverified-hermetic-reads" }
114
+ return { _tag: "CandidateEvidence", meta, evidence }
115
+ }
116
+
117
+ /** Publication additionally requires the read proof associated with the completed body.
118
+ * Both stored quarantine and the caller's current integrity verdict forbid publication.
119
+ * @category classifiers
120
+ * @since 1.0.0-rc.0
121
+ */
122
+ export const completion = <M extends Metadata>(
123
+ declared: Declaration,
124
+ meta: M | undefined,
125
+ quarantined: boolean
126
+ ): PublishCompletion<M> | Refused => {
127
+ if (quarantined) return { _tag: "Refused", reason: "quarantined-evidence" }
128
+ if (declared._tag === "Disabled") return { _tag: "Refused", reason: declared.reason }
129
+ const checked = candidate(meta)
130
+ if (checked._tag === "Refused") return checked
131
+ if (checked.meta.readSetVerified !== true) return { _tag: "Refused", reason: "unverified-recorded-reads" }
132
+ return { _tag: "PublishCompletion", meta: checked.meta }
133
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Read-only validation of copied cache-age decisions. Producer identities and
3
+ * persisted payloads remain unchanged; ancestry alone is not a reuse proof.
4
+ * @since 1.0.0-rc.0
5
+ */
6
+
7
+ import { FlowEngine } from "@smthrs/engine"
8
+ import type { Journal, JournalEvent } from "@smthrs/journal"
9
+ import type { RunStore } from "@smthrs/run-store"
10
+ import * as Effect from "effect/Effect"
11
+ import { find, prove } from "./CopiedRecord.ts"
12
+
13
+ /**
14
+ * Paged journal lookup shared with copied-record validation.
15
+ * @category accessors
16
+ * @since 1.0.0-rc.0
17
+ */
18
+ export { find } from "./CopiedRecord.ts"
19
+
20
+ const fieldsEqual = (value: unknown, expected: unknown): boolean => {
21
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false
22
+ if (typeof expected !== "object" || expected === null || Array.isArray(expected)) return false
23
+ const record = value as Readonly<Record<string, unknown>>
24
+ const keys = Object.keys(expected)
25
+ return Object.keys(record).length === keys.length &&
26
+ keys.every((key) => record[key] === (expected as Readonly<Record<string, unknown>>)[key])
27
+ }
28
+
29
+ /** A copied verdict is usable only through an exact, retained fork prefix.
30
+ * Missing/compacted ancestry and malformed or unrelated history fail closed.
31
+ * @category accessors
32
+ * @since 1.0.0-rc.0
33
+ */
34
+ export const copiedVerdict = (options: {
35
+ readonly journal: Journal.Service
36
+ readonly runs: RunStore.Service
37
+ readonly runId: string
38
+ readonly decision: JournalEvent.Input
39
+ readonly conflict: Journal.JournalError
40
+ }): Effect.Effect<"admitted" | "expired", Journal.JournalError> =>
41
+ Effect.gen(function*() {
42
+ const { journal, conflict, decision } = options
43
+ const source = (entry: JournalEvent.Entry) =>
44
+ entry.sourceId === decision.sourceId && entry.sourceSeq === decision.sourceSeq
45
+ const entry = yield* find(journal, options.runId, source)
46
+ if (entry === undefined) return yield* Effect.fail(conflict)
47
+ const payload = entry.payload as { readonly verdict?: unknown } | null
48
+ const verdict = payload?.verdict
49
+ if (verdict !== "admitted" && verdict !== "expired") return yield* Effect.fail(conflict)
50
+ const expected = { ...decision.payload as Readonly<Record<string, unknown>>, verdict }
51
+ if (entry.eventType !== decision.eventType || !fieldsEqual(entry.payload, expected)) {
52
+ return yield* Effect.fail(conflict)
53
+ }
54
+ const original = yield* prove({ ...options, entry, same: fieldsEqual })
55
+ return fieldsEqual(original.record.meta, { lineageId: FlowEngine.Lineage.root(original.ancestor) })
56
+ ? verdict
57
+ : yield* Effect.fail(conflict)
58
+ })
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Incremental evidence for the no-TTL cache guard.
3
+ * @since 1.0.0-rc.0
4
+ */
5
+
6
+ import { Journal, JournalEvent } from "@smthrs/journal"
7
+ import * as Effect from "effect/Effect"
8
+ import * as Semaphore from "effect/Semaphore"
9
+
10
+ /**
11
+ * Per-executor index of TTL markers in an append-only journal generation.
12
+ * Refresh before answering, retaining the first record for either its producer
13
+ * key or payload key so malformed and copied verdicts still refuse removal.
14
+ * @category constructors
15
+ * @since 1.0.0-rc.0
16
+ */
17
+ export const make = (runId: string) => {
18
+ const gate = Semaphore.makeUnsafe(1)
19
+ const id = JournalEvent.RunId.make(runId)
20
+ let source: Journal.Service | undefined
21
+ let generation: number | undefined
22
+ let after: JournalEvent.Seq | undefined
23
+ const verdicts = new Map<string, JournalEvent.Entry>()
24
+ return (
25
+ journal: Journal.Service,
26
+ keyDigest: string
27
+ ): Effect.Effect<JournalEvent.Entry | undefined, Journal.JournalError> =>
28
+ Semaphore.withPermit(gate)(Effect.gen(function*() {
29
+ const currentGeneration = journal.generation === undefined ? 0 : (yield* journal.generation(id)).generation
30
+ if (source !== journal || generation !== currentGeneration) {
31
+ source = journal
32
+ generation = currentGeneration
33
+ after = undefined
34
+ verdicts.clear()
35
+ }
36
+ while (true) {
37
+ const page = yield* journal.entries({ runId: id, limit: 128, ...after === undefined ? {} : { after } })
38
+ const next = page.entries.at(-1)?.seq
39
+ if (
40
+ (page.hasMore && next === undefined) ||
41
+ (next !== undefined && after !== undefined && next <= after)
42
+ ) {
43
+ return yield* Effect.fail(
44
+ new Journal.JournalError({ code: "read_failed", message: "cache history cursor did not advance" })
45
+ )
46
+ }
47
+ for (const entry of page.entries) {
48
+ const producerKey = /^cache:([^:]+):ttl:/.exec(entry.sourceId)?.[1]
49
+ const payload = entry.payload as { action?: unknown; keyDigest?: unknown } | null
50
+ if (producerKey !== undefined && !verdicts.has(producerKey)) verdicts.set(producerKey, entry)
51
+ if (payload?.action === "ttl" && typeof payload.keyDigest === "string" && !verdicts.has(payload.keyDigest)) {
52
+ verdicts.set(payload.keyDigest, entry)
53
+ }
54
+ }
55
+ // Publish each fully processed page, including the final one. A read
56
+ // failure or interruption retries only the unvalidated suffix.
57
+ after = next ?? after
58
+ if (!page.hasMore) return verdicts.get(keyDigest)
59
+ }
60
+ }))
61
+ }