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

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 +201 -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 +1586 -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 +300 -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 +3154 -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,683 @@
1
+ /**
2
+ * The probabilistic-selection seam: guesses may schedule work; only real
3
+ * dependencies decide truth.
4
+ *
5
+ * `docs/guides/defer-work-with-selection.md` describes learning, from run
6
+ * history, which changes *tend to* affect which flows, and letting those
7
+ * guesses do exactly three things: suggest extra work, postpone work that
8
+ * almost never fails, and order the queue. This module is the engine-store
9
+ * half of the proposal: the belief and verdict types, the pluggable
10
+ * `Selection` service, and the deterministic default layers. `PlanScheduler`
11
+ * is the one consumer, and it offers only **sinks** — nodes nothing in the
12
+ * plan depends on — because deferring a node something consumes would block
13
+ * or corrupt its consumers. Meta's Predictive Test Selection (ICSE-SEIP 2019)
14
+ * skips tests under exactly this restriction: tests are sinks.
15
+ *
16
+ * Seven v1 laws bound what a verdict may do, and the scheduler's tests assert
17
+ * each:
18
+ *
19
+ * 1. A verdict never enters key material and never changes a cache row: an
20
+ * admitted node's step key and cached result are computed exactly as if
21
+ * selection did not exist.
22
+ * 2. `deferred` is never passed. The node does not execute, writes no cache
23
+ * row, and is journaled as a debt (`flows.engine.selection-deferred`)
24
+ * that a later guess-free pass repays.
25
+ * 3. Only sinks are deferrable. A Defer or Propose verdict naming anything
26
+ * else is ignored and journaled as an inconsistency observation —
27
+ * Skyframe's `GraphInconsistencyReceiver` shape: note it, decide, never
28
+ * wire the detector to /dev/null.
29
+ * 4. Guesses add or postpone, never remove. A node the plan requires runs
30
+ * exactly as today, and the run-level `full` override restores full
31
+ * execution the way `--fresh` ignores the cache.
32
+ * 5. Training only moves confidence: it never creates edges or touches the
33
+ * journal, and misses reduce confidence faster than hits accrue it.
34
+ * 6. Repayment is a pure widening: `debt(runId)` keeps the v1 same-run fold,
35
+ * while `debt(runId, { repaidBy })` additionally accepts settlements from
36
+ * listed recertification runs.
37
+ * 7. The plan card, risk annotation, and read-set proposal helpers are pure
38
+ * functions of plain data and require no services.
39
+ *
40
+ * Pluggability is dependency injection at the owning seam, exactly as
41
+ * `Reconciliation` beside it: {@link layerNoop} admits everything and is the
42
+ * behavioral default when no layer is provided; {@link layerHeuristic} is a
43
+ * pure, deterministic function of the pinned belief snapshot; a model-backed
44
+ * selector is a different `Layer`, lives outside this package, and this
45
+ * package must not grow a model dependency.
46
+ *
47
+ * Deliberately still out of scope, recorded here so the absences read as
48
+ * decisions rather than oversights: the model-backed selection layer (this
49
+ * package must not grow a model dependency), selection CLI verbs (`@smthrs/cli`
50
+ * owns CLI verbs and `smithers gc` drives `Retention.collect`, but no selection
51
+ * verbs are exposed yet), approval routing from risk (approval machinery lives
52
+ * elsewhere), auto-appending proposed nodes (pending human review), and
53
+ * scheduled recertification cadence (a product/system-flow concern; this
54
+ * module ships only the primitive).
55
+ *
56
+ * @since 0.1.0
57
+ */
58
+
59
+ import { Journal, type JournalEvent } from "@smthrs/journal"
60
+ import * as Context from "effect/Context"
61
+ import * as Effect from "effect/Effect"
62
+ import * as Layer from "effect/Layer"
63
+ import * as Option from "effect/Option"
64
+ import * as Schema from "effect/Schema"
65
+
66
+ const Confidence = Schema.Number.check(
67
+ Schema.isGreaterThanOrEqualTo(0),
68
+ Schema.isLessThanOrEqualTo(1)
69
+ )
70
+
71
+ /**
72
+ * Epoch/counter values accepted by both public schemas and SQLite.
73
+ *
74
+ * @category schemas
75
+ * @since 1.0.0
76
+ */
77
+ export const NonNegativeSafeInt = Schema.Int.check(
78
+ Schema.isGreaterThanOrEqualTo(0),
79
+ Schema.isLessThanOrEqualTo(Number.MAX_SAFE_INTEGER)
80
+ )
81
+
82
+ /**
83
+ * The most `*` or `**` tokens a `SuspectedEdge.scope` may carry. Matching is
84
+ * linear in the path either way; the bound keeps each match cheap and refuses
85
+ * degenerate scopes at the write.
86
+ *
87
+ * @since 1.0.0
88
+ * @category constants
89
+ */
90
+ export const maxScopeWildcards = 8
91
+
92
+ const scopeWildcards = (scope: string): number => scope.match(/\*\*|\*/g)?.length ?? 0
93
+
94
+ /**
95
+ * A recorded guess with a fixed shape: "changes matching this path pattern
96
+ * tend to affect this flow". It is a belief, not a dependency — it carries
97
+ * confidence and evidence, and training moves the confidence; nothing here
98
+ * ever enters a step key.
99
+ *
100
+ * @since 0.1.0
101
+ * @category schemas
102
+ */
103
+ export const SuspectedEdge = Schema.Struct({
104
+ /** The path glob changed files are matched against, with at most `maxScopeWildcards` `*` or `**` tokens. */
105
+ scope: Schema.NonEmptyString.check(
106
+ Schema.makeFilter((scope) =>
107
+ scopeWildcards(scope) <= maxScopeWildcards
108
+ ? undefined
109
+ : `scope carries more than ${maxScopeWildcards} * or ** wildcards`
110
+ )
111
+ ),
112
+ /** The flow or step name the guess says the change affects. */
113
+ affects: Schema.NonEmptyString,
114
+ /** In `[0, 1]`; moved by outcomes, never by hand. */
115
+ confidence: Confidence,
116
+ /** The edge is inert until the snapshot's `pinnedAtMs` reaches this. */
117
+ validFromMs: NonNegativeSafeInt,
118
+ /** References to the journal facts the guess was learned from. */
119
+ evidence: Schema.Array(Schema.String)
120
+ })
121
+
122
+ /**
123
+ * The value form of {@link SuspectedEdge}.
124
+ *
125
+ * @since 0.1.0
126
+ * @category models
127
+ */
128
+ export type SuspectedEdge = typeof SuspectedEdge.Type
129
+
130
+ /**
131
+ * The suspected edges in force for one run, pinned before planning. Pinning
132
+ * is what keeps selection a pure function of data in hand: a belief updated
133
+ * mid-run cannot change what this run defers.
134
+ *
135
+ * @since 0.1.0
136
+ * @category schemas
137
+ */
138
+ export const BeliefSnapshot = Schema.Struct({
139
+ pinnedAtMs: NonNegativeSafeInt,
140
+ edges: Schema.Array(SuspectedEdge)
141
+ })
142
+
143
+ /**
144
+ * The value form of {@link BeliefSnapshot}.
145
+ *
146
+ * @since 0.1.0
147
+ * @category models
148
+ */
149
+ export type BeliefSnapshot = typeof BeliefSnapshot.Type
150
+
151
+ /**
152
+ * What selection decided: admit the work (the default), postpone it to a
153
+ * guess-free pass, or propose a flow no real dependency reaches.
154
+ *
155
+ * The design draft names this union `SelectionVerdict`; here the `Selection`
156
+ * namespace carries that prefix, so the export is `Verdict`, the same shape
157
+ * `Reconciliation.Verdict` takes beside it.
158
+ *
159
+ * @since 0.1.0
160
+ * @category schemas
161
+ */
162
+ export const Verdict = Schema.Union([
163
+ Schema.TaggedStruct("Admit", {}),
164
+ Schema.TaggedStruct("Defer", { edge: SuspectedEdge, likelihood: Confidence }),
165
+ Schema.TaggedStruct("Propose", { flow: Schema.NonEmptyString, edge: SuspectedEdge, confidence: Confidence })
166
+ ])
167
+
168
+ /**
169
+ * The value form of {@link Verdict}.
170
+ *
171
+ * @since 0.1.0
172
+ * @category models
173
+ */
174
+ export type Verdict = typeof Verdict.Type
175
+
176
+ /**
177
+ * Deferral policy, inherited per directory like cache freshness windows.
178
+ *
179
+ * @since 0.1.0
180
+ * @category models
181
+ */
182
+ export interface Policy {
183
+ /**
184
+ * A sink whose best matched likelihood is strictly below this threshold is
185
+ * deferred. Zero defers nothing; a likelihood exactly at the threshold is
186
+ * admitted.
187
+ */
188
+ readonly deferBelow: number
189
+ }
190
+
191
+ /**
192
+ * One deferrable candidate the scheduler offers: a plan node nothing in the
193
+ * plan depends on.
194
+ *
195
+ * @since 0.1.0
196
+ * @category models
197
+ */
198
+ export interface Candidate {
199
+ readonly nodeId: string
200
+ /** The plan-time key: the identity the scheduler already holds. */
201
+ readonly planKey: string
202
+ /** Historical failure rate for the sink, used only when a live edge already names it. */
203
+ readonly stats?: {
204
+ readonly failures: number
205
+ readonly runs: number
206
+ } | undefined
207
+ }
208
+
209
+ /**
210
+ * Everything one selection consult sees. The scheduler builds it once per
211
+ * run, so a verdict is a pure function of the changed set, the plan's shape,
212
+ * and the pinned beliefs.
213
+ *
214
+ * @since 0.1.0
215
+ * @category models
216
+ */
217
+ export interface Input {
218
+ /** Paths this change touched, matched against edge scopes. */
219
+ readonly changed: ReadonlyArray<string>
220
+ /** The only deferrable candidates: plan nodes with no dependents. */
221
+ readonly sinks: ReadonlyArray<Candidate>
222
+ /**
223
+ * Every name the plan accounts for: its flow and its node ids. An edge
224
+ * whose `affects` names none of these reaches work the plan cannot see,
225
+ * which is what a `Propose` verdict records.
226
+ */
227
+ readonly present: ReadonlyArray<string>
228
+ /** The belief snapshot pinned before planning. */
229
+ readonly beliefs: BeliefSnapshot
230
+ readonly policy: Policy
231
+ }
232
+
233
+ /**
234
+ * One returned verdict. `nodeId` names the offered candidate for `Admit` and
235
+ * `Defer`; a `Propose` names work outside the plan, so there it carries the
236
+ * proposed flow's name instead of a plan node id.
237
+ *
238
+ * @since 0.1.0
239
+ * @category models
240
+ */
241
+ export interface Selected {
242
+ readonly nodeId: string
243
+ readonly verdict: Verdict
244
+ }
245
+
246
+ /**
247
+ * The pluggable selector.
248
+ *
249
+ * @since 0.1.0
250
+ * @category models
251
+ */
252
+ export interface Service {
253
+ readonly select: (input: Input) => Effect.Effect<ReadonlyArray<Selected>>
254
+ }
255
+
256
+ /**
257
+ * Service tag for the probabilistic-selection seam.
258
+ *
259
+ * @since 0.1.0
260
+ * @category services
261
+ */
262
+ export class Selection extends Context.Service<Selection, Service>()("@smthrs/engine-store/Selection") {}
263
+
264
+ /**
265
+ * Names a {@link Service} implementation as a selector.
266
+ *
267
+ * It is the identity function: the value is checked against the interface at
268
+ * its definition site, which is where a wrong-shaped selector should be
269
+ * reported rather than at whichever layer eventually provides it.
270
+ *
271
+ * @since 0.1.0
272
+ * @category constructors
273
+ */
274
+ export const make = (service: Service): Service => service
275
+
276
+ /**
277
+ * Provides a {@link Service} as the {@link Selection} seam.
278
+ *
279
+ * @since 0.1.0
280
+ * @category layers
281
+ */
282
+ export const layer = (service: Service): Layer.Layer<Selection> => Layer.succeed(Selection, service)
283
+
284
+ /**
285
+ * Admits everything. This is the behavioral default: with no `Selection`
286
+ * layer provided the scheduler falls back to it, and a run under it is
287
+ * byte-identical to a run before this seam existed — same keys, same cache
288
+ * rows, same journal.
289
+ *
290
+ * @since 0.1.0
291
+ * @category constructors
292
+ */
293
+ export const makeNoop = (): Service => ({
294
+ select: Effect.fn("Selection.select")((input) =>
295
+ Effect.succeed(
296
+ input.sinks.map((candidate): Selected => ({ nodeId: candidate.nodeId, verdict: { _tag: "Admit" } }))
297
+ )
298
+ )
299
+ })
300
+
301
+ /**
302
+ * Provides the selector that admits everything.
303
+ *
304
+ * @since 0.1.0
305
+ * @category layers
306
+ */
307
+ export const layerNoop: Layer.Layer<Selection> = Layer.sync(Selection, makeNoop)
308
+
309
+ /**
310
+ * Compiles a path glob: `**` crosses path
311
+ * separators, `*` and `?` stay within a segment, everything else is literal.
312
+ * The whole path must match, so `packages/smithers/flows/engine/src/**` selects everything
313
+ * under that directory and nothing beside it.
314
+ *
315
+ * The result runs the glob as a set of token positions advanced one path
316
+ * character at a time, so a match costs at most path length times token
317
+ * count and never backtracks, even for a scope stored before the wildcard cap.
318
+ */
319
+ const compileScope = (scope: string): (path: string) => boolean => {
320
+ const tokens = scope.split("**").flatMap((segment, index) => [
321
+ ...(index === 0 ? [] : ["**"]),
322
+ ...segment
323
+ ])
324
+ const close = (states: Uint8Array): Uint8Array => {
325
+ for (let index = 0; index < tokens.length; index++) {
326
+ if (states[index] === 1 && (tokens[index] === "*" || tokens[index] === "**")) states[index + 1] = 1
327
+ }
328
+ return states
329
+ }
330
+ return (path) => {
331
+ let states = close(new Uint8Array(tokens.length + 1).fill(1, 0, 1))
332
+ for (const char of path) {
333
+ const next = new Uint8Array(tokens.length + 1)
334
+ let live = false
335
+ for (let index = 0; index < tokens.length; index++) {
336
+ if (states[index] !== 1) continue
337
+ const token = tokens[index]
338
+ const target = token === "**" || (token === "*" && char !== "/")
339
+ ? index
340
+ : (token === "?" && char !== "/") || token === char
341
+ ? index + 1
342
+ : -1
343
+ if (target >= 0) {
344
+ next[target] = 1
345
+ live = true
346
+ }
347
+ }
348
+ if (!live) return false
349
+ states = close(next)
350
+ }
351
+ return states[tokens.length] === 1
352
+ }
353
+ }
354
+
355
+ const makeScopeMatcher = () => {
356
+ const matchers = new Map<string, (path: string) => boolean>()
357
+ return (scope: string, path: string): boolean => {
358
+ let matcher = matchers.get(scope)
359
+ if (matcher === undefined) {
360
+ matcher = compileScope(scope)
361
+ matchers.set(scope, matcher)
362
+ }
363
+ return matcher(path)
364
+ }
365
+ }
366
+
367
+ const liveEdges = (beliefs: BeliefSnapshot, paths: ReadonlyArray<string>): ReadonlyArray<SuspectedEdge> => {
368
+ const matchesScope = makeScopeMatcher()
369
+ return beliefs.edges.filter((edge) =>
370
+ edge.validFromMs <= beliefs.pinnedAtMs
371
+ && paths.some((path) => matchesScope(edge.scope, path))
372
+ )
373
+ }
374
+
375
+ /**
376
+ * The deterministic default heuristics: pure, no IO, no model calls, a
377
+ * function of nothing but its input.
378
+ *
379
+ * An edge is *live* when its `validFromMs` has been reached at the
380
+ * snapshot's `pinnedAtMs` and some changed path matches its scope glob. A
381
+ * live edge yields likelihood equal to the maximum of its confidence and the
382
+ * candidate's historical `failures / max(runs, 1)` rate. A sink whose best
383
+ * likelihood is strictly below `policy.deferBelow` is deferred under its
384
+ * best edge; a sink no live edge names — or one at or above the threshold —
385
+ * is admitted. Stats alone never defer: they only keep a live edge from
386
+ * postponing a flaky sink. A live edge whose `affects` names nothing the plan
387
+ * contains proposes that flow, once per flow under its highest-confidence
388
+ * edge.
389
+ *
390
+ * @since 0.1.0
391
+ * @category constructors
392
+ */
393
+ export const makeHeuristic = (): Service => ({
394
+ select: Effect.fn("Selection.select")((input) =>
395
+ Effect.sync(() => {
396
+ const live = liveEdges(input.beliefs, input.changed)
397
+ const verdicts: Array<Selected> = []
398
+ for (const candidate of input.sinks) {
399
+ let best: SuspectedEdge | undefined = undefined
400
+ for (const edge of live) {
401
+ if (edge.affects !== candidate.nodeId) continue
402
+ if (best === undefined || edge.confidence > best.confidence) best = edge
403
+ }
404
+ const failureLikelihood = candidate.stats === undefined
405
+ ? 0
406
+ : candidate.stats.failures / Math.max(candidate.stats.runs, 1)
407
+ const likelihood = Math.max(best?.confidence ?? 0, failureLikelihood)
408
+ verdicts.push(
409
+ best !== undefined && likelihood < input.policy.deferBelow
410
+ ? { nodeId: candidate.nodeId, verdict: { _tag: "Defer", edge: best, likelihood } }
411
+ : { nodeId: candidate.nodeId, verdict: { _tag: "Admit" } }
412
+ )
413
+ }
414
+ const present = new Set(input.present)
415
+ const proposals = new Map<string, SuspectedEdge>()
416
+ for (const edge of live) {
417
+ if (present.has(edge.affects)) continue
418
+ const existing = proposals.get(edge.affects)
419
+ if (existing === undefined || edge.confidence > existing.confidence) proposals.set(edge.affects, edge)
420
+ }
421
+ for (const [flow, edge] of proposals) {
422
+ verdicts.push({ nodeId: flow, verdict: { _tag: "Propose", flow, edge, confidence: edge.confidence } })
423
+ }
424
+ return verdicts
425
+ })
426
+ )
427
+ })
428
+
429
+ /**
430
+ * Provides the deterministic default heuristics.
431
+ *
432
+ * @since 0.1.0
433
+ * @category layers
434
+ */
435
+ export const layerHeuristic: Layer.Layer<Selection> = Layer.sync(Selection, makeHeuristic)
436
+
437
+ /**
438
+ * One unpaid deferral: the work a guess postponed, with everything a
439
+ * guess-free follow-up needs to execute exactly it — the node, its
440
+ * content-addressed plan key, the edge that caused the postponement, and the
441
+ * journal position the debt was recorded at.
442
+ *
443
+ * @since 0.1.0
444
+ * @category schemas
445
+ */
446
+ export const DebtEntry = Schema.Struct({
447
+ planId: Schema.NonEmptyString,
448
+ nodeId: Schema.NonEmptyString,
449
+ /** The plan-time key: the content-addressed handle repayment settles against. */
450
+ planKey: Schema.NonEmptyString,
451
+ edge: SuspectedEdge,
452
+ likelihood: Schema.Number,
453
+ /** Journal provenance: the durable sequence the deferral was recorded at. */
454
+ seq: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))
455
+ })
456
+
457
+ /**
458
+ * The value form of {@link DebtEntry}.
459
+ *
460
+ * @since 0.1.0
461
+ * @category models
462
+ */
463
+ export type DebtEntry = typeof DebtEntry.Type
464
+
465
+ /**
466
+ * The `flows.engine.selection-deferred` payload the scheduler writes. Read
467
+ * tolerantly: `likelihood` stays an unrefined number here — unlike the
468
+ * `Verdict` union's `[0, 1]` refinement — so a historically journaled
469
+ * out-of-range value cannot silently drop a real debt.
470
+ */
471
+ const DeferredPayload = Schema.Struct({
472
+ planId: Schema.NonEmptyString,
473
+ nodeId: Schema.NonEmptyString,
474
+ planKey: Schema.NonEmptyString,
475
+ edge: SuspectedEdge,
476
+ likelihood: Schema.Number
477
+ })
478
+
479
+ const decodeDeferred = Schema.decodeUnknownOption(DeferredPayload)
480
+
481
+ /** The slice of a `flows.engine.node-settled` payload repayment reads. */
482
+ const SettledPayload = Schema.Struct({
483
+ planKey: Schema.NonEmptyString,
484
+ outcome: Schema.String
485
+ })
486
+
487
+ const decodeSettled = Schema.decodeUnknownOption(SettledPayload)
488
+
489
+ /**
490
+ * Options for {@link debt}: which recertification runs may repay this run's
491
+ * deferrals. The caller names the repaying runs explicitly — the fold never
492
+ * guesses which other runs were guess-free passes.
493
+ *
494
+ * @since 0.1.0
495
+ * @category models
496
+ */
497
+ export interface DebtOptions {
498
+ readonly repaidBy?: ReadonlyArray<string> | undefined
499
+ }
500
+
501
+ /**
502
+ * Lists the run's unpaid deferrals by folding the journal: every
503
+ * `flows.engine.selection-deferred` record opens a debt under its plan key,
504
+ * and a later `node-settled` under the same key with a real outcome —
505
+ * `built`, `clean`, or `failed` — closes it. A `skipped` settlement does not:
506
+ * that work never ran, so it is still owed. A `failed` one does: the
507
+ * guess-free pass executed the work and surfaced the miss, which is the
508
+ * training signal the spec asks for.
509
+ *
510
+ * `debt(runId)` keeps the v1 same-run fold: only a settlement journaled
511
+ * under the same `runId` closes a debt. `debt(runId, { repaidBy })` is the
512
+ * pure widening of law 6 — settlements journaled under a listed
513
+ * recertification run also close, matched by plan key, and nothing else
514
+ * changes. `PlanScheduler.recertify` is the driver that produces such a run.
515
+ *
516
+ * The journal is read directly rather than projected into a table, for the
517
+ * same reason the scheduler consumes deviations from it: a deferral is a
518
+ * durable, replayable fact, and a second store would be a cache of one.
519
+ *
520
+ * @since 0.1.0
521
+ * @category queries
522
+ */
523
+ export const debt = Effect.fn("Selection.debt")((runId: string, options?: DebtOptions) =>
524
+ Effect.gen(function*() {
525
+ const journal = yield* Journal.Journal
526
+ const owed = new Map<string, DebtEntry>()
527
+
528
+ const fold = (run: string, closesOnly: boolean) =>
529
+ Effect.gen(function*() {
530
+ let cursor: number | undefined = undefined
531
+ while (true) {
532
+ const page: Journal.EntriesPage = yield* journal.entries({
533
+ runId: run as JournalEvent.RunId,
534
+ ...(cursor === undefined ? {} : { after: cursor as JournalEvent.Seq }),
535
+ limit: 512
536
+ })
537
+ for (const entry of page.entries) {
538
+ cursor = entry.seq
539
+ if (!closesOnly && entry.eventType === "flows.engine.selection-deferred") {
540
+ const payload = decodeDeferred(entry.payload)
541
+ if (Option.isNone(payload)) continue
542
+ owed.set(payload.value.planKey, { ...payload.value, seq: entry.seq })
543
+ continue
544
+ }
545
+ if (entry.eventType !== "flows.engine.node-settled") continue
546
+ const payload = decodeSettled(entry.payload)
547
+ if (Option.isNone(payload)) continue
548
+ const outcome = payload.value.outcome
549
+ if (outcome === "built" || outcome === "clean" || outcome === "failed") {
550
+ owed.delete(payload.value.planKey)
551
+ }
552
+ }
553
+ if (!page.hasMore) break
554
+ }
555
+ })
556
+
557
+ yield* fold(runId, false)
558
+ for (const repayer of options?.repaidBy ?? []) {
559
+ yield* fold(repayer, true)
560
+ }
561
+ return [...owed.values()] as ReadonlyArray<DebtEntry>
562
+ })
563
+ )
564
+
565
+ /**
566
+ * A pure risk annotation for a change, never a gate. The level comes from
567
+ * the live matching edges alone: `"high"` if any has confidence at or above
568
+ * `0.7`, `"medium"` at or above `0.4`, else `"low"`. Each contributing edge
569
+ * is named in `reasons` as `<scope> -> <affects> (<confidence>)`.
570
+ *
571
+ * The design draft passed the plan in this input; the pinned rule never
572
+ * reads it, so the shipped signature drops it — recorded here so the
573
+ * narrowing reads as a decision.
574
+ *
575
+ * @since 0.1.0
576
+ * @category models
577
+ */
578
+ export interface Risk {
579
+ readonly level: "low" | "medium" | "high"
580
+ readonly reasons: ReadonlyArray<string>
581
+ }
582
+
583
+ /**
584
+ * Computes the {@link Risk} annotation for a change against the pinned
585
+ * belief snapshot. Pure: same input, same output, no services.
586
+ *
587
+ * @since 0.1.0
588
+ * @category combinators
589
+ */
590
+ export const risk = (input: {
591
+ readonly changed: ReadonlyArray<string>
592
+ readonly beliefs: BeliefSnapshot
593
+ }): Risk => {
594
+ const live = liveEdges(input.beliefs, input.changed)
595
+ const level = live.some((edge) => edge.confidence >= 0.7)
596
+ ? "high"
597
+ : live.some((edge) => edge.confidence >= 0.4)
598
+ ? "medium"
599
+ : "low"
600
+ return {
601
+ level,
602
+ reasons: live.map((edge) => `${edge.scope} -> ${edge.affects} (${edge.confidence})`)
603
+ }
604
+ }
605
+
606
+ /**
607
+ * What {@link card} renders from: settlements and deferral/proposal details
608
+ * as plain data, plus the recertification cadence label and an optional
609
+ * {@link Risk} annotation.
610
+ *
611
+ * @since 0.1.0
612
+ * @category models
613
+ */
614
+ export interface CardInput {
615
+ readonly settlements: ReadonlyArray<{ readonly nodeId: string; readonly outcome: string }>
616
+ readonly deferrals: ReadonlyArray<{ readonly nodeId: string; readonly likelihood: number }>
617
+ readonly proposals: ReadonlyArray<{ readonly flow: string; readonly confidence: number; readonly scope: string }>
618
+ readonly cadence: string
619
+ readonly risk?: Risk | undefined
620
+ }
621
+
622
+ /**
623
+ * Renders the plan card, one string per line, in the spec's row grammar:
624
+ * `clean` renders as `cached`, `built` as `run`, `deferred` carries its fail
625
+ * likelihood and the recertification cadence, each proposal names the edge
626
+ * that suggested it, and any other outcome renders under its own name. Pure:
627
+ * no IO, no services.
628
+ *
629
+ * @since 0.1.0
630
+ * @category combinators
631
+ */
632
+ export const card = (input: CardInput): ReadonlyArray<string> => {
633
+ const likelihoods = new Map(input.deferrals.map((deferral) => [deferral.nodeId, deferral.likelihood]))
634
+ const row = (label: string, rest: string) => ` ${label.padEnd(8)} ${rest}`
635
+ const lines: Array<string> = []
636
+ for (const settlement of input.settlements) {
637
+ if (settlement.outcome === "clean") lines.push(row("cached", settlement.nodeId))
638
+ else if (settlement.outcome === "built") lines.push(row("run", settlement.nodeId))
639
+ else if (settlement.outcome === "deferred") {
640
+ const likelihood = likelihoods.get(settlement.nodeId) ?? 0
641
+ lines.push(row("deferred", `${settlement.nodeId} fail likelihood ${likelihood} - recert ${input.cadence}`))
642
+ } else lines.push(row(settlement.outcome, settlement.nodeId))
643
+ }
644
+ for (const proposal of input.proposals) {
645
+ lines.push(row("proposed", `${proposal.flow} suspected edge ${proposal.confidence} - ${proposal.scope} touched`))
646
+ }
647
+ if (input.risk !== undefined) {
648
+ lines.push(row("risk", `${input.risk.level} - ${input.risk.reasons.join("; ")}`))
649
+ }
650
+ return lines
651
+ }
652
+
653
+ /**
654
+ * The workspace paths a flow's live suspected edges select: the
655
+ * `boundaryMode: "expected"` feeder. A path is included when any edge valid
656
+ * at the snapshot's pin names the flow in `affects` and matches the path
657
+ * with its scope glob; the result is deduplicated and keeps input order.
658
+ * Pure: no IO, no services. Wiring this into an agent step is future work —
659
+ * no agent steps exist in this repo.
660
+ *
661
+ * @since 0.1.0
662
+ * @category combinators
663
+ */
664
+ export const proposeReadSet = (input: {
665
+ readonly beliefs: BeliefSnapshot
666
+ readonly flow: string
667
+ readonly paths: ReadonlyArray<string>
668
+ }): ReadonlyArray<string> => {
669
+ const edges = input.beliefs.edges.filter((edge) =>
670
+ edge.validFromMs <= input.beliefs.pinnedAtMs && edge.affects === input.flow
671
+ )
672
+ const matchesScope = makeScopeMatcher()
673
+ const seen = new Set<string>()
674
+ const selected: Array<string> = []
675
+ for (const path of input.paths) {
676
+ if (seen.has(path)) continue
677
+ if (edges.some((edge) => matchesScope(edge.scope, path))) {
678
+ seen.add(path)
679
+ selected.push(path)
680
+ }
681
+ }
682
+ return selected
683
+ }