@smthrs/control 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 (418) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/LICENSE +21 -0
  3. package/README.md +168 -2
  4. package/dist/cjs/ApprovalAuthority.d.ts +73 -0
  5. package/dist/cjs/ApprovalAuthority.d.ts.map +1 -0
  6. package/dist/cjs/ApprovalAuthority.js +62 -0
  7. package/dist/cjs/ApprovalAuthority.js.map +7 -0
  8. package/dist/cjs/Cancellation.d.ts +107 -0
  9. package/dist/cjs/Cancellation.d.ts.map +1 -0
  10. package/dist/cjs/Cancellation.js +72 -0
  11. package/dist/cjs/Cancellation.js.map +7 -0
  12. package/dist/cjs/Channels.d.ts +170 -0
  13. package/dist/cjs/Channels.d.ts.map +1 -0
  14. package/dist/cjs/Channels.js +278 -0
  15. package/dist/cjs/Channels.js.map +7 -0
  16. package/dist/cjs/Control.d.ts +202 -0
  17. package/dist/cjs/Control.d.ts.map +1 -0
  18. package/dist/cjs/Control.js +47 -0
  19. package/dist/cjs/Control.js.map +7 -0
  20. package/dist/cjs/ControlClient.d.ts +52 -0
  21. package/dist/cjs/ControlClient.d.ts.map +1 -0
  22. package/dist/cjs/ControlClient.js +191 -0
  23. package/dist/cjs/ControlClient.js.map +7 -0
  24. package/dist/cjs/ControlError.d.ts +318 -0
  25. package/dist/cjs/ControlError.d.ts.map +1 -0
  26. package/dist/cjs/ControlError.js +249 -0
  27. package/dist/cjs/ControlError.js.map +7 -0
  28. package/dist/cjs/ControlExecutor.d.ts +372 -0
  29. package/dist/cjs/ControlExecutor.d.ts.map +1 -0
  30. package/dist/cjs/ControlExecutor.js +123 -0
  31. package/dist/cjs/ControlExecutor.js.map +7 -0
  32. package/dist/cjs/ControlFacts.d.ts +454 -0
  33. package/dist/cjs/ControlFacts.d.ts.map +1 -0
  34. package/dist/cjs/ControlFacts.js +261 -0
  35. package/dist/cjs/ControlFacts.js.map +7 -0
  36. package/dist/cjs/ControlLive.d.ts +23 -0
  37. package/dist/cjs/ControlLive.d.ts.map +1 -0
  38. package/dist/cjs/ControlLive.js +1293 -0
  39. package/dist/cjs/ControlLive.js.map +7 -0
  40. package/dist/cjs/ControlRpcs.d.ts +1204 -0
  41. package/dist/cjs/ControlRpcs.d.ts.map +1 -0
  42. package/dist/cjs/ControlRpcs.js +247 -0
  43. package/dist/cjs/ControlRpcs.js.map +7 -0
  44. package/dist/cjs/ControlRuntime.d.ts +635 -0
  45. package/dist/cjs/ControlRuntime.d.ts.map +1 -0
  46. package/dist/cjs/ControlRuntime.js +744 -0
  47. package/dist/cjs/ControlRuntime.js.map +7 -0
  48. package/dist/cjs/ControlSchema.d.ts +2642 -0
  49. package/dist/cjs/ControlSchema.d.ts.map +1 -0
  50. package/dist/cjs/ControlSchema.js +634 -0
  51. package/dist/cjs/ControlSchema.js.map +7 -0
  52. package/dist/cjs/ControlServer.d.ts +51 -0
  53. package/dist/cjs/ControlServer.d.ts.map +1 -0
  54. package/dist/cjs/ControlServer.js +121 -0
  55. package/dist/cjs/ControlServer.js.map +7 -0
  56. package/dist/cjs/Credential.d.ts +136 -0
  57. package/dist/cjs/Credential.d.ts.map +1 -0
  58. package/dist/cjs/Credential.js +168 -0
  59. package/dist/cjs/Credential.js.map +7 -0
  60. package/dist/cjs/CredentialCipher.d.ts +90 -0
  61. package/dist/cjs/CredentialCipher.d.ts.map +1 -0
  62. package/dist/cjs/CredentialCipher.js +45 -0
  63. package/dist/cjs/CredentialCipher.js.map +7 -0
  64. package/dist/cjs/CredentialStore.d.ts +97 -0
  65. package/dist/cjs/CredentialStore.d.ts.map +1 -0
  66. package/dist/cjs/CredentialStore.js +81 -0
  67. package/dist/cjs/CredentialStore.js.map +7 -0
  68. package/dist/cjs/DispatchReader.d.ts +112 -0
  69. package/dist/cjs/DispatchReader.d.ts.map +1 -0
  70. package/dist/cjs/DispatchReader.js +45 -0
  71. package/dist/cjs/DispatchReader.js.map +7 -0
  72. package/dist/cjs/Health.d.ts +333 -0
  73. package/dist/cjs/Health.d.ts.map +1 -0
  74. package/dist/cjs/Health.js +311 -0
  75. package/dist/cjs/Health.js.map +7 -0
  76. package/dist/cjs/JevSessionChecker.d.ts +57 -0
  77. package/dist/cjs/JevSessionChecker.d.ts.map +1 -0
  78. package/dist/cjs/JevSessionChecker.js +113 -0
  79. package/dist/cjs/JevSessionChecker.js.map +7 -0
  80. package/dist/cjs/Lineage.d.ts +131 -0
  81. package/dist/cjs/Lineage.d.ts.map +1 -0
  82. package/dist/cjs/Lineage.js +81 -0
  83. package/dist/cjs/Lineage.js.map +7 -0
  84. package/dist/cjs/Migrations.d.ts +34 -0
  85. package/dist/cjs/Migrations.d.ts.map +1 -0
  86. package/dist/cjs/Migrations.js +60 -0
  87. package/dist/cjs/Migrations.js.map +7 -0
  88. package/dist/cjs/Monitor.d.ts +282 -0
  89. package/dist/cjs/Monitor.d.ts.map +1 -0
  90. package/dist/cjs/Monitor.js +283 -0
  91. package/dist/cjs/Monitor.js.map +7 -0
  92. package/dist/cjs/ScopedToken.d.ts +193 -0
  93. package/dist/cjs/ScopedToken.d.ts.map +1 -0
  94. package/dist/cjs/ScopedToken.js +135 -0
  95. package/dist/cjs/ScopedToken.js.map +7 -0
  96. package/dist/cjs/SqlControlRuntime.d.ts +161 -0
  97. package/dist/cjs/SqlControlRuntime.d.ts.map +1 -0
  98. package/dist/cjs/SqlControlRuntime.js +1522 -0
  99. package/dist/cjs/SqlControlRuntime.js.map +7 -0
  100. package/dist/cjs/SqlCredentialStore.d.ts +43 -0
  101. package/dist/cjs/SqlCredentialStore.d.ts.map +1 -0
  102. package/dist/cjs/SqlCredentialStore.js +113 -0
  103. package/dist/cjs/SqlCredentialStore.js.map +7 -0
  104. package/dist/cjs/Steering.d.ts +69 -0
  105. package/dist/cjs/Steering.d.ts.map +1 -0
  106. package/dist/cjs/Steering.js +49 -0
  107. package/dist/cjs/Steering.js.map +7 -0
  108. package/dist/cjs/SystemFlows.d.ts +223 -0
  109. package/dist/cjs/SystemFlows.d.ts.map +1 -0
  110. package/dist/cjs/SystemFlows.js +195 -0
  111. package/dist/cjs/SystemFlows.js.map +7 -0
  112. package/dist/cjs/WebCryptoCipher.d.ts +49 -0
  113. package/dist/cjs/WebCryptoCipher.d.ts.map +1 -0
  114. package/dist/cjs/WebCryptoCipher.js +129 -0
  115. package/dist/cjs/WebCryptoCipher.js.map +7 -0
  116. package/dist/cjs/WebhookChannel.d.ts +113 -0
  117. package/dist/cjs/WebhookChannel.d.ts.map +1 -0
  118. package/dist/cjs/WebhookChannel.js +98 -0
  119. package/dist/cjs/WebhookChannel.js.map +7 -0
  120. package/dist/cjs/index.d.ts +160 -0
  121. package/dist/cjs/index.d.ts.map +1 -0
  122. package/dist/cjs/index.js +91 -0
  123. package/dist/cjs/index.js.map +7 -0
  124. package/dist/cjs/internal/MutationBoundary.d.ts +27 -0
  125. package/dist/cjs/internal/MutationBoundary.d.ts.map +1 -0
  126. package/dist/cjs/internal/MutationBoundary.js +50 -0
  127. package/dist/cjs/internal/MutationBoundary.js.map +7 -0
  128. package/dist/cjs/internal/activeFibers.d.ts +12 -0
  129. package/dist/cjs/internal/activeFibers.d.ts.map +1 -0
  130. package/dist/cjs/internal/activeFibers.js +30 -0
  131. package/dist/cjs/internal/activeFibers.js.map +7 -0
  132. package/dist/cjs/internal/issues.d.ts +28 -0
  133. package/dist/cjs/internal/issues.d.ts.map +1 -0
  134. package/dist/cjs/internal/issues.js +34 -0
  135. package/dist/cjs/internal/issues.js.map +7 -0
  136. package/dist/cjs/internal/planning.d.ts +347 -0
  137. package/dist/cjs/internal/planning.d.ts.map +1 -0
  138. package/dist/cjs/internal/planning.js +137 -0
  139. package/dist/cjs/internal/planning.js.map +7 -0
  140. package/dist/cjs/internal/sqlSchemaErrors.d.ts +18 -0
  141. package/dist/cjs/internal/sqlSchemaErrors.d.ts.map +1 -0
  142. package/dist/cjs/internal/sqlSchemaErrors.js +40 -0
  143. package/dist/cjs/internal/sqlSchemaErrors.js.map +7 -0
  144. package/dist/cjs/migrations/0001_control_tables.d.ts +18 -0
  145. package/dist/cjs/migrations/0001_control_tables.d.ts.map +1 -0
  146. package/dist/cjs/migrations/0001_control_tables.js +115 -0
  147. package/dist/cjs/migrations/0001_control_tables.js.map +7 -0
  148. package/dist/cjs/migrations/0002_run_keys.d.ts +15 -0
  149. package/dist/cjs/migrations/0002_run_keys.d.ts.map +1 -0
  150. package/dist/cjs/migrations/0002_run_keys.js +44 -0
  151. package/dist/cjs/migrations/0002_run_keys.js.map +7 -0
  152. package/dist/cjs/migrations/0003_signal_commands.d.ts +13 -0
  153. package/dist/cjs/migrations/0003_signal_commands.d.ts.map +1 -0
  154. package/dist/cjs/migrations/0003_signal_commands.js +50 -0
  155. package/dist/cjs/migrations/0003_signal_commands.js.map +7 -0
  156. package/dist/cjs/migrations/0004_approval_decisions.d.ts +13 -0
  157. package/dist/cjs/migrations/0004_approval_decisions.d.ts.map +1 -0
  158. package/dist/cjs/migrations/0004_approval_decisions.js +45 -0
  159. package/dist/cjs/migrations/0004_approval_decisions.js.map +7 -0
  160. package/dist/cjs/migrations/0005_signal_principals.d.ts +18 -0
  161. package/dist/cjs/migrations/0005_signal_principals.d.ts.map +1 -0
  162. package/dist/cjs/migrations/0005_signal_principals.js +45 -0
  163. package/dist/cjs/migrations/0005_signal_principals.js.map +7 -0
  164. package/dist/cjs/migrations/0006_run_principals.d.ts +18 -0
  165. package/dist/cjs/migrations/0006_run_principals.d.ts.map +1 -0
  166. package/dist/cjs/migrations/0006_run_principals.js +49 -0
  167. package/dist/cjs/migrations/0006_run_principals.js.map +7 -0
  168. package/dist/cjs/migrations/0007_resume_consent.d.ts +18 -0
  169. package/dist/cjs/migrations/0007_resume_consent.d.ts.map +1 -0
  170. package/dist/cjs/migrations/0007_resume_consent.js +46 -0
  171. package/dist/cjs/migrations/0007_resume_consent.js.map +7 -0
  172. package/dist/cjs/package.json +1 -0
  173. package/dist/cjs/test/TestControl.d.ts +19 -0
  174. package/dist/cjs/test/TestControl.d.ts.map +1 -0
  175. package/dist/cjs/test/TestControl.js +62 -0
  176. package/dist/cjs/test/TestControl.js.map +7 -0
  177. package/dist/esm/ApprovalAuthority.d.ts +73 -0
  178. package/dist/esm/ApprovalAuthority.d.ts.map +1 -0
  179. package/dist/esm/ApprovalAuthority.js +72 -0
  180. package/dist/esm/ApprovalAuthority.js.map +1 -0
  181. package/dist/esm/Cancellation.d.ts +107 -0
  182. package/dist/esm/Cancellation.d.ts.map +1 -0
  183. package/dist/esm/Cancellation.js +116 -0
  184. package/dist/esm/Cancellation.js.map +1 -0
  185. package/dist/esm/Channels.d.ts +170 -0
  186. package/dist/esm/Channels.d.ts.map +1 -0
  187. package/dist/esm/Channels.js +312 -0
  188. package/dist/esm/Channels.js.map +1 -0
  189. package/dist/esm/Control.d.ts +202 -0
  190. package/dist/esm/Control.d.ts.map +1 -0
  191. package/dist/esm/Control.js +42 -0
  192. package/dist/esm/Control.js.map +1 -0
  193. package/dist/esm/ControlClient.d.ts +52 -0
  194. package/dist/esm/ControlClient.d.ts.map +1 -0
  195. package/dist/esm/ControlClient.js +217 -0
  196. package/dist/esm/ControlClient.js.map +1 -0
  197. package/dist/esm/ControlError.d.ts +318 -0
  198. package/dist/esm/ControlError.d.ts.map +1 -0
  199. package/dist/esm/ControlError.js +359 -0
  200. package/dist/esm/ControlError.js.map +1 -0
  201. package/dist/esm/ControlExecutor.d.ts +372 -0
  202. package/dist/esm/ControlExecutor.d.ts.map +1 -0
  203. package/dist/esm/ControlExecutor.js +212 -0
  204. package/dist/esm/ControlExecutor.js.map +1 -0
  205. package/dist/esm/ControlFacts.d.ts +454 -0
  206. package/dist/esm/ControlFacts.d.ts.map +1 -0
  207. package/dist/esm/ControlFacts.js +324 -0
  208. package/dist/esm/ControlFacts.js.map +1 -0
  209. package/dist/esm/ControlLive.d.ts +23 -0
  210. package/dist/esm/ControlLive.d.ts.map +1 -0
  211. package/dist/esm/ControlLive.js +1589 -0
  212. package/dist/esm/ControlLive.js.map +1 -0
  213. package/dist/esm/ControlRpcs.d.ts +1204 -0
  214. package/dist/esm/ControlRpcs.d.ts.map +1 -0
  215. package/dist/esm/ControlRpcs.js +299 -0
  216. package/dist/esm/ControlRpcs.js.map +1 -0
  217. package/dist/esm/ControlRuntime.d.ts +635 -0
  218. package/dist/esm/ControlRuntime.d.ts.map +1 -0
  219. package/dist/esm/ControlRuntime.js +808 -0
  220. package/dist/esm/ControlRuntime.js.map +1 -0
  221. package/dist/esm/ControlSchema.d.ts +2642 -0
  222. package/dist/esm/ControlSchema.d.ts.map +1 -0
  223. package/dist/esm/ControlSchema.js +1030 -0
  224. package/dist/esm/ControlSchema.js.map +1 -0
  225. package/dist/esm/ControlServer.d.ts +51 -0
  226. package/dist/esm/ControlServer.d.ts.map +1 -0
  227. package/dist/esm/ControlServer.js +145 -0
  228. package/dist/esm/ControlServer.js.map +1 -0
  229. package/dist/esm/Credential.d.ts +136 -0
  230. package/dist/esm/Credential.d.ts.map +1 -0
  231. package/dist/esm/Credential.js +190 -0
  232. package/dist/esm/Credential.js.map +1 -0
  233. package/dist/esm/CredentialCipher.d.ts +90 -0
  234. package/dist/esm/CredentialCipher.d.ts.map +1 -0
  235. package/dist/esm/CredentialCipher.js +56 -0
  236. package/dist/esm/CredentialCipher.js.map +1 -0
  237. package/dist/esm/CredentialStore.d.ts +97 -0
  238. package/dist/esm/CredentialStore.d.ts.map +1 -0
  239. package/dist/esm/CredentialStore.js +101 -0
  240. package/dist/esm/CredentialStore.js.map +1 -0
  241. package/dist/esm/DispatchReader.d.ts +112 -0
  242. package/dist/esm/DispatchReader.d.ts.map +1 -0
  243. package/dist/esm/DispatchReader.js +76 -0
  244. package/dist/esm/DispatchReader.js.map +1 -0
  245. package/dist/esm/Health.d.ts +333 -0
  246. package/dist/esm/Health.d.ts.map +1 -0
  247. package/dist/esm/Health.js +400 -0
  248. package/dist/esm/Health.js.map +1 -0
  249. package/dist/esm/JevSessionChecker.d.ts +57 -0
  250. package/dist/esm/JevSessionChecker.d.ts.map +1 -0
  251. package/dist/esm/JevSessionChecker.js +108 -0
  252. package/dist/esm/JevSessionChecker.js.map +1 -0
  253. package/dist/esm/Lineage.d.ts +131 -0
  254. package/dist/esm/Lineage.d.ts.map +1 -0
  255. package/dist/esm/Lineage.js +174 -0
  256. package/dist/esm/Lineage.js.map +1 -0
  257. package/dist/esm/Migrations.d.ts +34 -0
  258. package/dist/esm/Migrations.d.ts.map +1 -0
  259. package/dist/esm/Migrations.js +53 -0
  260. package/dist/esm/Migrations.js.map +1 -0
  261. package/dist/esm/Monitor.d.ts +282 -0
  262. package/dist/esm/Monitor.d.ts.map +1 -0
  263. package/dist/esm/Monitor.js +415 -0
  264. package/dist/esm/Monitor.js.map +1 -0
  265. package/dist/esm/ScopedToken.d.ts +193 -0
  266. package/dist/esm/ScopedToken.d.ts.map +1 -0
  267. package/dist/esm/ScopedToken.js +224 -0
  268. package/dist/esm/ScopedToken.js.map +1 -0
  269. package/dist/esm/SqlControlRuntime.d.ts +161 -0
  270. package/dist/esm/SqlControlRuntime.d.ts.map +1 -0
  271. package/dist/esm/SqlControlRuntime.js +1756 -0
  272. package/dist/esm/SqlControlRuntime.js.map +1 -0
  273. package/dist/esm/SqlCredentialStore.d.ts +43 -0
  274. package/dist/esm/SqlCredentialStore.d.ts.map +1 -0
  275. package/dist/esm/SqlCredentialStore.js +97 -0
  276. package/dist/esm/SqlCredentialStore.js.map +1 -0
  277. package/dist/esm/Steering.d.ts +69 -0
  278. package/dist/esm/Steering.d.ts.map +1 -0
  279. package/dist/esm/Steering.js +89 -0
  280. package/dist/esm/Steering.js.map +1 -0
  281. package/dist/esm/SystemFlows.d.ts +223 -0
  282. package/dist/esm/SystemFlows.d.ts.map +1 -0
  283. package/dist/esm/SystemFlows.js +198 -0
  284. package/dist/esm/SystemFlows.js.map +1 -0
  285. package/dist/esm/WebCryptoCipher.d.ts +49 -0
  286. package/dist/esm/WebCryptoCipher.d.ts.map +1 -0
  287. package/dist/esm/WebCryptoCipher.js +123 -0
  288. package/dist/esm/WebCryptoCipher.js.map +1 -0
  289. package/dist/esm/WebhookChannel.d.ts +113 -0
  290. package/dist/esm/WebhookChannel.d.ts.map +1 -0
  291. package/dist/esm/WebhookChannel.js +109 -0
  292. package/dist/esm/WebhookChannel.js.map +1 -0
  293. package/dist/esm/index.d.ts +160 -0
  294. package/dist/esm/index.d.ts.map +1 -0
  295. package/dist/esm/index.js +160 -0
  296. package/dist/esm/index.js.map +1 -0
  297. package/dist/esm/internal/MutationBoundary.d.ts +27 -0
  298. package/dist/esm/internal/MutationBoundary.d.ts.map +1 -0
  299. package/dist/esm/internal/MutationBoundary.js +40 -0
  300. package/dist/esm/internal/MutationBoundary.js.map +1 -0
  301. package/dist/esm/internal/activeFibers.d.ts +12 -0
  302. package/dist/esm/internal/activeFibers.d.ts.map +1 -0
  303. package/dist/esm/internal/activeFibers.js +17 -0
  304. package/dist/esm/internal/activeFibers.js.map +1 -0
  305. package/dist/esm/internal/issues.d.ts +28 -0
  306. package/dist/esm/internal/issues.d.ts.map +1 -0
  307. package/dist/esm/internal/issues.js +35 -0
  308. package/dist/esm/internal/issues.js.map +1 -0
  309. package/dist/esm/internal/planning.d.ts +347 -0
  310. package/dist/esm/internal/planning.d.ts.map +1 -0
  311. package/dist/esm/internal/planning.js +199 -0
  312. package/dist/esm/internal/planning.js.map +1 -0
  313. package/dist/esm/internal/sqlSchemaErrors.d.ts +18 -0
  314. package/dist/esm/internal/sqlSchemaErrors.d.ts.map +1 -0
  315. package/dist/esm/internal/sqlSchemaErrors.js +38 -0
  316. package/dist/esm/internal/sqlSchemaErrors.js.map +1 -0
  317. package/dist/esm/migrations/0001_control_tables.d.ts +18 -0
  318. package/dist/esm/migrations/0001_control_tables.d.ts.map +1 -0
  319. package/dist/esm/migrations/0001_control_tables.js +96 -0
  320. package/dist/esm/migrations/0001_control_tables.js.map +1 -0
  321. package/dist/esm/migrations/0002_run_keys.d.ts +15 -0
  322. package/dist/esm/migrations/0002_run_keys.d.ts.map +1 -0
  323. package/dist/esm/migrations/0002_run_keys.js +22 -0
  324. package/dist/esm/migrations/0002_run_keys.js.map +1 -0
  325. package/dist/esm/migrations/0003_signal_commands.d.ts +13 -0
  326. package/dist/esm/migrations/0003_signal_commands.d.ts.map +1 -0
  327. package/dist/esm/migrations/0003_signal_commands.js +26 -0
  328. package/dist/esm/migrations/0003_signal_commands.js.map +1 -0
  329. package/dist/esm/migrations/0004_approval_decisions.d.ts +13 -0
  330. package/dist/esm/migrations/0004_approval_decisions.d.ts.map +1 -0
  331. package/dist/esm/migrations/0004_approval_decisions.js +25 -0
  332. package/dist/esm/migrations/0004_approval_decisions.js.map +1 -0
  333. package/dist/esm/migrations/0005_signal_principals.d.ts +18 -0
  334. package/dist/esm/migrations/0005_signal_principals.d.ts.map +1 -0
  335. package/dist/esm/migrations/0005_signal_principals.js +27 -0
  336. package/dist/esm/migrations/0005_signal_principals.js.map +1 -0
  337. package/dist/esm/migrations/0006_run_principals.d.ts +18 -0
  338. package/dist/esm/migrations/0006_run_principals.d.ts.map +1 -0
  339. package/dist/esm/migrations/0006_run_principals.js +30 -0
  340. package/dist/esm/migrations/0006_run_principals.js.map +1 -0
  341. package/dist/esm/migrations/0007_resume_consent.d.ts +18 -0
  342. package/dist/esm/migrations/0007_resume_consent.d.ts.map +1 -0
  343. package/dist/esm/migrations/0007_resume_consent.js +27 -0
  344. package/dist/esm/migrations/0007_resume_consent.js.map +1 -0
  345. package/dist/esm/test/TestControl.d.ts +19 -0
  346. package/dist/esm/test/TestControl.d.ts.map +1 -0
  347. package/dist/esm/test/TestControl.js +30 -0
  348. package/dist/esm/test/TestControl.js.map +1 -0
  349. package/docs/README.md +189 -0
  350. package/docs/api.md +982 -0
  351. package/docs/concepts/authority.md +109 -0
  352. package/docs/concepts/cancellation.md +129 -0
  353. package/docs/concepts/lineage.md +132 -0
  354. package/docs/concepts/ownership.md +139 -0
  355. package/docs/concepts/projections.md +203 -0
  356. package/docs/concepts/receipts.md +128 -0
  357. package/docs/guides/approvals.md +284 -0
  358. package/docs/guides/cancel-and-resume.md +162 -0
  359. package/docs/guides/durable-storage.md +147 -0
  360. package/docs/guides/implement-an-executor.md +173 -0
  361. package/docs/guides/ingest-a-webhook.md +177 -0
  362. package/docs/guides/list-runs.md +160 -0
  363. package/docs/guides/monitor-runs.md +176 -0
  364. package/docs/guides/observe-health.md +147 -0
  365. package/docs/guides/postgres-tests.md +7 -0
  366. package/docs/guides/serve-over-rpc.md +220 -0
  367. package/docs/guides/signal-a-run.md +53 -0
  368. package/docs/guides/steer-a-run.md +138 -0
  369. package/docs/guides/store-credentials.md +164 -0
  370. package/docs/guides/testing.md +139 -0
  371. package/docs/guides/watch-a-run.md +154 -0
  372. package/docs/installation.md +106 -0
  373. package/docs/quickstart.md +163 -0
  374. package/docs/troubleshooting.md +208 -0
  375. package/package.json +405 -3
  376. package/src/ApprovalAuthority.ts +114 -0
  377. package/src/Cancellation.ts +172 -0
  378. package/src/Channels.ts +493 -0
  379. package/src/Control.ts +337 -0
  380. package/src/ControlClient.ts +319 -0
  381. package/src/ControlError.ts +378 -0
  382. package/src/ControlExecutor.ts +490 -0
  383. package/src/ControlFacts.ts +383 -0
  384. package/src/ControlLive.ts +2127 -0
  385. package/src/ControlRpcs.ts +443 -0
  386. package/src/ControlRuntime.ts +1601 -0
  387. package/src/ControlSchema.ts +1380 -0
  388. package/src/ControlServer.ts +182 -0
  389. package/src/Credential.ts +310 -0
  390. package/src/CredentialCipher.ts +110 -0
  391. package/src/CredentialStore.ts +152 -0
  392. package/src/DispatchReader.ts +122 -0
  393. package/src/Health.ts +591 -0
  394. package/src/JevSessionChecker.ts +127 -0
  395. package/src/Lineage.ts +203 -0
  396. package/src/Migrations.ts +56 -0
  397. package/src/Monitor.ts +600 -0
  398. package/src/ScopedToken.ts +306 -0
  399. package/src/SqlControlRuntime.ts +2478 -0
  400. package/src/SqlCredentialStore.ts +148 -0
  401. package/src/Steering.ts +96 -0
  402. package/src/SystemFlows.ts +225 -0
  403. package/src/WebCryptoCipher.ts +169 -0
  404. package/src/WebhookChannel.ts +166 -0
  405. package/src/index.ts +188 -0
  406. package/src/internal/MutationBoundary.ts +46 -0
  407. package/src/internal/activeFibers.ts +22 -0
  408. package/src/internal/issues.ts +40 -0
  409. package/src/internal/planning.ts +262 -0
  410. package/src/internal/sqlSchemaErrors.ts +37 -0
  411. package/src/migrations/0001_control_tables.ts +99 -0
  412. package/src/migrations/0002_run_keys.ts +23 -0
  413. package/src/migrations/0003_signal_commands.ts +27 -0
  414. package/src/migrations/0004_approval_decisions.ts +25 -0
  415. package/src/migrations/0005_signal_principals.ts +27 -0
  416. package/src/migrations/0006_run_principals.ts +31 -0
  417. package/src/migrations/0007_resume_consent.ts +28 -0
  418. package/src/test/TestControl.ts +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlLive.js","sourceRoot":"","sources":["../../src/ControlLive.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * In-process Control implementation over `ControlRuntime`, the flow\n * registry, and the append-only journal.\n *\n * @since 0.1.0\n */\n\nimport * as Sha256 from \"@smthrs/crypto/Sha256\"\nimport * as Fault from \"@smthrs/flow/Fault\"\nimport { Journal, JournalEvent } from \"@smthrs/journal\"\nimport { NotificationQueue } from \"@smthrs/notifications\"\nimport * as SteerPayload from \"@smthrs/notifications/SteerPayload\"\nimport { Registry } from \"@smthrs/registry\"\nimport { inputDocument } from \"@smthrs/registry/Descriptor\"\nimport { Cause, Deferred, Effect, Exit, Layer, Option, Schema, Semaphore, Stream } from \"effect\"\nimport * as Cancellation from \"./Cancellation.ts\"\nimport {\n type ApprovalInput,\n Control,\n type ListInput,\n type RunMutationInput,\n type Service,\n type SignalInput,\n type SteerInput,\n type WatchInput\n} from \"./Control.ts\"\nimport {\n ClaimLost,\n type CodeDrift,\n type ControlError,\n type EnvelopeMismatch,\n InvalidInput,\n type LaunchFailed,\n NoMatchingWait,\n PersistenceError,\n type PlanDenied,\n type PlanDigestMismatch,\n type PlanNotFound,\n RunNotFound,\n Unauthorized,\n Unavailable\n} from \"./ControlError.ts\"\nimport type { CancelRecord, Launch } from \"./ControlExecutor.ts\"\nimport { ControlExecutor } from \"./ControlExecutor.ts\"\nimport * as ControlFacts from \"./ControlFacts.ts\"\nimport { ControlRuntime, type IdPage, type IdPageRequest, launchedByMatches, type RunPage } from \"./ControlRuntime.ts\"\nimport type {\n ControlEvent,\n FireSummary,\n IdempotencyKey,\n ListResponse,\n Receipt,\n RunHost,\n RunId,\n RunSummary,\n TriggerSummary,\n WatchFilter\n} from \"./ControlSchema.ts\"\nimport {\n ApprovalInputSchema,\n defaultPageSize,\n ListRequest,\n maxPageSize,\n Principal,\n ReasonedMutationInputSchema,\n ResumeInputSchema,\n RunInputSchema,\n SignalInputSchema,\n SteerInputSchema,\n steerItem,\n WatchCursor\n} from \"./ControlSchema.ts\"\nimport * as DispatchReader from \"./DispatchReader.ts\"\nimport { schemaIssuePath } from \"./internal/issues.ts\"\nimport * as MutationBoundary from \"./internal/MutationBoundary.ts\"\nimport { alreadyApplied, canonical, mutationKey } from \"./internal/planning.ts\"\nimport * as Lineage from \"./Lineage.ts\"\nimport * as Steering from \"./Steering.ts\"\n\nconst sourceId = JournalEvent.SourceId.make(\"/control\")\n\nconst snapshotPageSize = 1024\nconst snapshotPartitionConcurrency = 8\n/** Partition ids a global watch reads per keyed inventory page. */\nconst partitionPageSize = 100\n\nconst unavailable = (feature: string): Unavailable =>\n new Unavailable({ feature, ticket: \"control-runtime-engine-integration\" })\n\n/**\n * What a failed journal read during `watch` answers.\n *\n * A closed journal means this composition has no journal to watch, so the\n * feature is unavailable. Any other code is a storage failure and keeps its\n * cause, so the operator sees what the journal reported.\n */\nconst watchReadFailed = (cause: Journal.JournalError): Unavailable | PersistenceError =>\n cause.code === \"journal_closed\"\n ? unavailable(\"watch\")\n : new PersistenceError({\n operation: \"watch\",\n message: `Reading the control journal failed (${cause.code})`,\n cause\n })\n\nconst accepted = (key: IdempotencyKey, runId?: RunId): Receipt =>\n runId === undefined\n ? { _tag: \"Accepted\", receiptId: key }\n : { _tag: \"Accepted\", receiptId: key, runId }\n\nconst terminal = (status: RunSummary[\"status\"]): boolean =>\n status === \"cancelled\" || status === \"completed\" || status === \"failed\"\n\n/**\n * Whether a status means a process is holding the run right now.\n *\n * `accepted` is what a claim writes, and nothing rewrites it until the run\n * settles: only `Control.run` promotes a run to `running`, and only when its\n * own executor took the launch. A run restarted by `Control.resume` or by an\n * approval therefore spends its whole second life `accepted`. Both statuses\n * project onto the store's `running` (`SqlControlRuntime`'s `storeStatus`), so\n * a lost claim against either one means a live peer owns the row — which\n * release policy 5.1 answers `ClaimLost`. Asking for the literal `running` alone\n * answered `Accepted` for a peer's accepted run and hid the peer.\n */\nconst live = (status: RunSummary[\"status\"]): boolean => status === \"running\" || status === \"accepted\"\n\nconst terminalOrAccepted = (\n key: IdempotencyKey,\n run: RunSummary\n): Receipt =>\n terminal(run.status)\n ? { _tag: \"Terminal\", runId: run.runId, status: run.status }\n : accepted(key, run.runId)\n\n/**\n * The two paths a SERVER stamps a principal onto, and the only two an\n * idempotency fingerprint may ignore.\n *\n * `ControlServer` overwrites `input.principal` and `input.message.principal`\n * with the identity it authenticated, and the stamp carries a wall clock, so\n * keeping either made the second `smithers cancel` of one run look like a\n * different mutation under the same key: a bearer-authenticated retry answered\n * `Conflict` instead of the cancel's own receipt.\n *\n * Nothing else named `principal` is stamped. The previous replacer dropped the\n * key at EVERY depth, so two signals whose payloads differed only in a nested\n * `principal` collided under one key and the second payload was never\n * delivered.\n */\nconst withoutStampedPrincipal = (input: unknown): unknown => {\n /* v8 ignore next -- every caller passes a mutation the boundary already decoded into a struct; the guard keeps the helper total for a reader */\n if (input === null || typeof input !== \"object\") return input\n const { principal: _principal, ...rest } = input as Record<string, unknown>\n const message = rest[\"message\"]\n if (message === null || typeof message !== \"object\") return rest\n const { principal: _messagePrincipal, ...messageRest } = message as Record<string, unknown>\n return { ...rest, message: messageRest }\n}\n\n/**\n * What an idempotency key is bound to: one actor's stated intent.\n *\n * The input has already crossed the inert boundary. The principal's stable id\n * and kind remain in the document while its server clock is omitted, and the\n * canonical bytes are reduced to one fixed-size durable digest.\n */\nconst fingerprint = (operation: string, principal: typeof Principal.Type, input: unknown): string =>\n `control-mutation:v2:${\n Sha256.digestSync(canonical({\n operation,\n actor: { id: principal.id, kind: principal.kind },\n intent: withoutStampedPrincipal(input)\n }))\n }`\n\nconst json = (value: unknown): ControlEvent[\"payload\"] => JSON.parse(JSON.stringify(value)) as ControlEvent[\"payload\"]\n\n/**\n * The trigger provenance an admitted plan input declared, verbatim.\n *\n * The control plane does not know the record's shape: the flow's own input\n * schema bounded it at plan time (`flows/coding/dispatch.ts` `MessageTrigger`\n * is the first). Admission carries it onto the accepted record so a journal\n * reader — the Steps view's trigger row (#2115) — renders what was recorded,\n * never what it inferred from a prompt. Anything that is not a record is\n * dropped rather than carried.\n */\nconst declaredTrigger = (decodedInput: unknown): Record<string, unknown> | undefined => {\n if (decodedInput === null || typeof decodedInput !== \"object\" || Array.isArray(decodedInput)) return undefined\n const held = (decodedInput as Record<string, unknown>)[\"trigger\"]\n return held !== null && typeof held === \"object\" && !Array.isArray(held) ? held as Record<string, unknown> : undefined\n}\n\nconst invalid = (issue: string): InvalidInput => new InvalidInput({ issue })\n\nconst AttributedApprovalInput = Schema.Struct({\n ...ApprovalInputSchema.fields,\n principal: Schema.optional(Principal)\n})\nconst AttributedReasonedMutationInput = Schema.Struct({\n ...ReasonedMutationInputSchema.fields,\n principal: Schema.optional(Principal)\n})\nconst AttributedResumeInput = Schema.Struct({\n ...ResumeInputSchema.fields,\n principal: Schema.optional(Principal)\n})\nconst AttributedRunInput = Schema.Union([\n Schema.Struct({\n ...RunInputSchema.members[0].fields,\n principal: Schema.optional(Principal),\n reservedRunId: Schema.optional(Schema.NonEmptyString)\n }),\n Schema.Struct({ ...RunInputSchema.members[1].fields, principal: Schema.optional(Principal) })\n])\nconst AttributedSignalInput = Schema.Struct({\n ...SignalInputSchema.fields,\n principal: Schema.optional(Principal)\n})\n\n// The surrogate scan restates, at the point the DURABLE KEY is formed, what\n// `MutationBoundary.admit` already refused: a lone surrogate is not a string\n// SQLite and JSON round-trip identically, and this value is a primary key. The\n// two refusing arms are therefore unreachable through every caller, and stay\n// as the local invariant rather than as a check somebody may delete upstream.\nconst validIdempotencyKey = (value: string): boolean => {\n if (value.length === 0 || value.length > 1024 || value.includes(\"\\0\")) return false\n for (let index = 0; index < value.length; index++) {\n const unit = value.charCodeAt(index)\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const low = value.charCodeAt(++index)\n /* v8 ignore next -- an unpaired high surrogate is refused by the mutation boundary first */\n if (!(low >= 0xdc00 && low <= 0xdfff)) return false\n continue\n }\n /* v8 ignore next -- a lone low surrogate is refused by the mutation boundary first */\n if (unit >= 0xdc00 && unit <= 0xdfff) return false\n }\n return true\n}\n\n/** Admits, schema-decodes, and detaches one mutation before its first wait. */\nconst snapshotMutation = <A extends { readonly idempotencyKey: string }>(\n operation: string,\n decode: (input: unknown) => Effect.Effect<A, Schema.SchemaError>,\n input: unknown\n): Effect.Effect<A, InvalidInput> =>\n Effect.suspend(() => {\n const admitted = MutationBoundary.admit(input)\n if (!admitted.ok) return Effect.fail(invalid(`${operation}: ${admitted.complaint}`))\n return decode(admitted.value).pipe(\n Effect.mapError((error) => invalid(`${operation}: invalid mutation at ${schemaIssuePath(error)}`)),\n Effect.flatMap((snapshot) =>\n validIdempotencyKey(snapshot.idempotencyKey)\n ? Effect.succeed(snapshot)\n : Effect.fail(invalid(`${operation}.idempotencyKey: must be 1 to 1024 well-formed characters`))\n )\n )\n })\n\nconst snapshotApproval = (operation: string, input: unknown) =>\n snapshotMutation(operation, Schema.decodeUnknownEffect(AttributedApprovalInput), input)\nconst snapshotReasonedMutation = (operation: string, input: unknown) =>\n snapshotMutation(operation, Schema.decodeUnknownEffect(AttributedReasonedMutationInput), input)\nconst snapshotResume = (input: unknown) =>\n snapshotMutation(\"resume\", Schema.decodeUnknownEffect(AttributedResumeInput), input)\nconst snapshotRun = (input: unknown) => snapshotMutation(\"run\", Schema.decodeUnknownEffect(AttributedRunInput), input)\nconst snapshotSignal = (input: unknown) =>\n snapshotMutation(\"signal\", Schema.decodeUnknownEffect(AttributedSignalInput), input)\nconst snapshotSteer = (input: unknown) => snapshotMutation(\"steer\", Schema.decodeUnknownEffect(SteerInputSchema), input)\n\n/**\n * Refuses a page size or cursor that cannot make progress.\n *\n * A `limit` of zero, a negative or fractional one, `NaN`, and `Infinity` all\n * used to answer `{ items: [], nextCursor: String(start) }`, which is a cursor\n * a client loops on forever; an unparsable cursor silently restarted at the\n * first page. Both are caller mistakes, and a control plane that answers a\n * mistake with a plausible-looking page is the partial behaviour rc.0 forbids.\n * `ControlSchema.PageLimit` refuses the same sizes on the wire; this is the\n * in-process half, which no schema decodes.\n */\nconst pageBounds = (\n cursor: string | undefined,\n limit: number | undefined\n): Effect.Effect<{ readonly start: number; readonly size: number }, InvalidInput> => {\n if (limit !== undefined && (!Number.isSafeInteger(limit) || limit < 1 || limit > maxPageSize)) {\n return Effect.fail(\n invalid(`limit: must be an integer between 1 and ${maxPageSize}, received ${String(limit)}`)\n )\n }\n if (cursor === undefined) return Effect.succeed({ start: 0, size: limit ?? defaultPageSize })\n const start = Number(cursor)\n return Number.isSafeInteger(start) && start >= 0\n ? Effect.succeed({ start, size: limit ?? defaultPageSize })\n : Effect.fail(invalid(`cursor: must be a cursor this listing returned, received ${JSON.stringify(cursor)}`))\n}\n\nconst cursorNatural = Schema.Number.check(\n Schema.isInt(),\n Schema.isGreaterThanOrEqualTo(0),\n Schema.isLessThanOrEqualTo(Number.MAX_SAFE_INTEGER)\n)\nconst runCursor = Schema.fromJsonString(Schema.Struct({\n version: Schema.Literal(1),\n filters: Schema.String,\n source: Schema.Union([Schema.Literal(0), Schema.Literal(1)]),\n sequence: cursorNatural,\n createdAt: cursorNatural,\n runId: Schema.NonEmptyString\n}))\n\nconst page = <A>(\n values: ReadonlyArray<A>,\n bounds: { readonly start: number; readonly size: number }\n): { readonly items: ReadonlyArray<A>; readonly nextCursor?: string | undefined } => {\n const items = values.slice(bounds.start, bounds.start + bounds.size)\n const next = bounds.start + items.length\n return next < values.length ? { items, nextCursor: String(next) } : { items }\n}\n\nconst eventFromEntry = (entry: JournalEvent.Entry): ControlEvent => ({\n sequence: entry.seq,\n kind: entry.eventType,\n runId: entry.runId,\n occurredAt: entry.emittedAtMs,\n payload: entry.payload as ControlEvent[\"payload\"]\n})\n\n/**\n * Live in-process Control layer.\n *\n * Writes delegate to `ControlRuntime`; journal events are observational\n * records. `watch` only replays and follows committed journal entries.\n *\n * @category layers\n * @since 0.1.0\n */\nexport const layer: Layer.Layer<\n Control,\n never,\n ControlRuntime | Journal.Journal | NotificationQueue.NotificationQueue | Registry.Registry\n> = Layer.effect(\n Control,\n Effect.gen(function*() {\n const runtime = yield* ControlRuntime\n const journal = yield* Journal.Journal\n const notifications = yield* NotificationQueue.NotificationQueue\n const registry = yield* Registry.Registry\n const executor = yield* Effect.serviceOption(ControlExecutor)\n // Optional like the executor: a composition without a trigger store still\n // plans, runs, and lists flows and runs. Only the two trigger listings\n // refuse, and they refuse with the same typed issue `layerNone` answers,\n // so a caller cannot tell an omitted port from a declared empty one.\n const dispatch = Option.getOrElse(\n yield* Effect.serviceOption(DispatchReader.DispatchReader),\n DispatchReader.makeNone\n )\n /**\n * Whether this composition has an executor that can be asked about a run.\n *\n * Read once: the executor is captured when the layer is built, so the\n * answer cannot change between two listings of one page.\n */\n const observing = Option.isSome(executor) && executor.value.readExecution !== undefined\n const observe = (run: RunSummary): Effect.Effect<RunSummary, PersistenceError> =>\n Effect.gen(function*() {\n if (Option.isNone(executor) || executor.value.readExecution === undefined) return run\n const observed = yield* executor.value.readExecution(run.runId)\n if (observed._tag === \"Missing\") return { ...run, executionObservation: \"missing\" as const }\n return {\n ...run,\n executionObservation: \"observed\" as const,\n executionView: observed.executionView,\n status: observed.status,\n waitingReason: observed.waitingReason,\n parentRunId: observed.parentRunId,\n lineageId: observed.lineageId,\n roundOrdinal: observed.roundOrdinal,\n // The executor's answer replaces this plane's copy here as it does\n // for every other observed field. It has to: a control plane over\n // its own coordination database cannot see the executions a flow\n // spawned, so a nested `HumanTask` park is a fact only the executor\n // holds. Where the two share one database the runtime computes the\n // same rows itself and the observation reproduces them.\n pendingWaits: observed.pendingWaits\n }\n })\n const getRun = (runId: string) => runtime.getRun(runId).pipe(Effect.flatMap(observe))\n\n /** Fails `CodeDrift` when re-driving the run would enter code it did not start on. */\n const refuseCodeDrift = (runId: RunId) =>\n runtime.codeDrift(runId).pipe(Effect.flatMap((drift) => drift === undefined ? Effect.void : Effect.fail(drift)))\n\n /**\n * The run with the drift a resume would refuse, for an operator reading it.\n * A drift that cannot be computed is left absent rather than failing the read.\n */\n const withCodeDrift = (run: RunSummary): Effect.Effect<RunSummary> =>\n terminal(run.status)\n ? Effect.succeed(run)\n : runtime.codeDrift(run.runId).pipe(\n Effect.map((drift) =>\n drift === undefined ? run : {\n ...run,\n codeDrift: {\n ...(drift.recorded === undefined ? {} : { recorded: drift.recorded }),\n ...(drift.current === undefined ? {} : { current: drift.current }),\n ...(drift.recordedEngine === undefined ? {} : { recordedEngine: drift.recordedEngine }),\n ...(drift.currentEngine === undefined ? {} : { currentEngine: drift.currentEngine })\n }\n }\n ),\n Effect.orElseSucceed(() => run)\n )\n\n const mutationSemaphore = yield* Semaphore.make(1)\n\n /** Journals one control event and answers its journal sequence. */\n const record = (\n runId: string,\n eventType: string,\n payload: ControlEvent[\"payload\"]\n ): Effect.Effect<number, PersistenceError> =>\n // Unfenced: the control plane mutates runs it does not own — that is\n // the point of a control plane — so its event records are\n // first-writer-wins admissions, not owner-fenced lifecycle writes.\n journal.emitDurableUnfenced(\n new JournalEvent.Input({\n runId: JournalEvent.RunId.make(runId),\n sourceId,\n eventType,\n payload: json(payload)\n })\n ).pipe(\n Effect.map((receipt) => receipt.seq),\n Effect.mapError((cause) =>\n new PersistenceError({\n operation: eventType,\n message: `Failed to persist ${eventType}`,\n cause\n })\n )\n )\n\n const emit = (\n runId: string,\n eventType: string,\n payload: ControlEvent[\"payload\"]\n ): Effect.Effect<void, PersistenceError> => Effect.asVoid(record(runId, eventType, payload))\n\n /**\n * Ends a run the executor was handed and could not take.\n *\n * `ControlExecutor.launch` fails when nothing in this composition will\n * ever drive the run: no seat resolved, the flow declares none, the body\n * would not load, the provider could not be constructed. The run row\n * and its idempotency receipt are already durable by then. Keep that\n * admission and record the failure; replaying its key must never launch\n * another run. An explicit retry uses a new key.\n *\n * A settlement that cannot be written is logged rather than raised. The\n * caller is already receiving the refusal it has to act on, and replacing\n * it with a persistence error would hide which key is missing.\n */\n const settleUnlaunched = (\n runId: RunId,\n cause: string,\n fault: Fault.Fault\n ): Effect.Effect<void> =>\n Effect.gen(function*() {\n const fence = yield* runtime.claimFence(runId)\n const run = yield* runtime.writeStatus(runId, fence, \"failed\")\n yield* emit(\n runId,\n \"control.run.failed\",\n json({ runId, status: \"failed\", cause: cause.slice(0, 4096), fault, ...ControlFacts.runFact(run) })\n )\n }).pipe(\n journal.transact,\n Effect.catchCause((failure) =>\n Effect.annotateLogs(\n Effect.logWarning(\"A refused launch could not be settled\"),\n { runId, cause: Cause.pretty(failure) }\n )\n )\n )\n\n const transact = <A, E, R>(\n operation: string,\n effect: Effect.Effect<A, E, R>\n ): Effect.Effect<A, E | PersistenceError, R> =>\n mutationSemaphore.withPermits(1)(\n journal.transact(effect).pipe(\n Effect.mapError((cause) =>\n cause instanceof Journal.JournalError\n ? new PersistenceError({\n operation: `${operation}.idempotency`,\n message: `Failed to commit ${operation} and its idempotency receipt atomically`,\n cause\n })\n : cause\n )\n )\n )\n\n /**\n * Runs one mutation under its idempotency key.\n *\n * `replay` is what a recorded receipt is worth on a second ask. For every\n * mutation that CHANGES something — a launch, a decision, a signal — it is\n * everything: the receipt is the proof the change was made once, and\n * replaying it is the whole guarantee.\n *\n * `cancel` is the exception, and it is `replay: false`. Its receipt is an\n * answer ABOUT a run, and the run can be in a different state by the time\n * the operator asks again: a cancel against a run a live peer owns answers\n * `Accepted` and finishes nothing, and replaying that answer as\n * `AlreadyApplied` turned a run nobody could reach into a run nobody could\n * ask about either — the release validation left two of them, with `smithers\n * cancel` and `smithers down` both answering from the receipt and neither\n * ever reaching the row. Cancellation needs no receipt to be idempotent:\n * the run's own terminality is stronger, and `cancel` reads it first and\n * answers `Terminal` without touching anything.\n */\n const mutate = <E, R>(\n operation: string,\n key: IdempotencyKey,\n principal: typeof Principal.Type,\n mutationFingerprint: string,\n effect: Effect.Effect<Receipt, E, R>,\n replay = true,\n claimRunKey = false\n ): Effect.Effect<Receipt, E | InvalidInput | PersistenceError, R> =>\n transact(\n operation,\n Effect.gen(function*() {\n const durableKey = mutationKey(operation, key, principal)\n const prior = yield* runtime.lookupMutation(durableKey, mutationFingerprint)\n if (prior !== undefined && (replay || prior._tag === \"Conflict\")) {\n return prior._tag === \"AlreadyApplied\"\n ? { ...prior, receiptId: key }\n : prior\n }\n const claim = claimRunKey\n ? yield* runtime.claimRunKey(durableKey, mutationFingerprint)\n : undefined\n if (claim?._tag === \"Raced\") return alreadyApplied(key, claim.receipt)\n return yield* Effect.gen(function*() {\n const receipt = yield* effect\n // A key that already carries a receipt is not re-recorded: the store\n // refuses to overwrite one, and the answer this call returns is the\n // fresh read of the run rather than the record.\n if (receipt._tag === \"Parked\" && claimRunKey) {\n yield* runtime.releaseRunKey(durableKey)\n } else if (receipt._tag !== \"Parked\" && prior === undefined) {\n yield* runtime.recordMutation(durableKey, mutationFingerprint, receipt)\n }\n return receipt\n }).pipe(Effect.onExit((exit) =>\n claim?._tag === \"Claimed\" && Exit.isFailure(exit)\n ? runtime.releaseRunKey(durableKey)\n : Effect.void\n ))\n })\n )\n\n /**\n * Hands a decided run's resume to whoever hosts its execution.\n *\n * Outside the mutation's write transaction, for `signal`'s reason: taking\n * the resume up re-drives the run, and the engine's own writes would wait\n * on the writer the transaction holds. A host that answers `resuming` has\n * claimed the row and is driving, so its delegation is cleared here; every\n * other composition leaves it standing for the host's own poll.\n */\n const takeUpResume = (\n runId: RunId,\n sequence: number\n ): Effect.Effect<void, PersistenceError> =>\n Option.isNone(executor)\n ? Effect.void\n : executor.value.resumeRun({ runId }).pipe(\n Effect.flatMap((uptake) => uptake === \"resuming\" ? runtime.clearResume(runId, sequence) : Effect.void)\n )\n\n /**\n * Hands an admitted run to the executor, then records its acknowledgment.\n *\n * Outside the admission's transaction: the executor may immediately read\n * through another connection or fork a driver, so the run, its approval\n * and its receipt are committed before any execution crosses this line.\n */\n const hand = (launch: Launch) =>\n Effect.gen(function*() {\n const acceptance = Option.isSome(executor)\n ? yield* executor.value.launch(launch).pipe(\n Effect.tapError((error) => settleUnlaunched(error.runId, error.message, Fault.of(error)))\n )\n : \"pending\"\n yield* transact(\n \"run.acceptance\",\n Effect.gen(function*() {\n // A fast executor may already have completed or parked. Never\n // regress its durable outcome with the launch acknowledgment.\n const current = yield* runtime.getRun(launch.run.runId)\n if (current.status !== \"accepted\") return\n const fence = yield* runtime.claimFence(current.runId)\n const run = acceptance === \"accepted\"\n ? yield* runtime.writeStatus(current.runId, fence, \"running\")\n : yield* runtime.releasePending(current.runId, fence)\n yield* emit(\n run.runId,\n acceptance === \"accepted\" ? \"control.run.running\" : \"control.run.pending\",\n {\n runId: run.runId,\n status: run.status,\n ...ControlFacts.runFact(run)\n } as ControlEvent[\"payload\"]\n )\n })\n )\n })\n\n /**\n * Launches a run whose admitting process died before handing it over.\n *\n * The admission and its receipt commit before {@link hand}, so a crash in\n * between left the run `accepted` under its dead admitter, and a retry of\n * the same key only read the receipt back: nothing ever launched it. The\n * acknowledgment is what `accepted` with an owner lacks — a queued launch\n * releases its owner. This process owning the run means another call here\n * is between its admission and its launch; a live peer owning it is the\n * same case elsewhere and keeps it (`ClaimLost`). Only a dead owner's run is\n * claimed, under the run store's fence, so two retries launch it once.\n */\n const relaunchStranded = (runId: RunId) =>\n Effect.gen(function*() {\n const current = yield* runtime.getRun(runId)\n if (current.status !== \"accepted\" || current.ownerId === undefined) return\n const ours = yield* runtime.claimFence(runId).pipe(\n Effect.as(true),\n Effect.catchTag(\"/control/ClaimLost\", () => Effect.succeed(false))\n )\n if (ours) return\n yield* refuseCodeDrift(runId)\n const claimed = yield* runtime.resume(runId, { scope: \"launched\" }).pipe(\n Effect.catchTag(\"/control/ClaimLost\", () => Effect.succeed(undefined))\n )\n if (claimed === undefined || claimed.status !== \"accepted\" || claimed.planId === undefined) return\n yield* hand({ plan: yield* runtime.getPlan(claimed.planId), run: claimed })\n }).pipe(\n // The recorded receipt is the retry's answer either way; a relaunch\n // that fails leaves the run where it was for the next retry.\n Effect.catch((failure) =>\n Effect.annotateLogs(\n Effect.logWarning(\"A stranded run could not be relaunched\"),\n { runId, cause: failure.message }\n )\n )\n )\n\n const decide = (\n decision: \"approved\" | \"denied\",\n submitted: ApprovalInput\n ) =>\n Effect.gen(function*() {\n const input = yield* snapshotApproval(decision, submitted)\n // Check the authenticated identity before replay or any grant writes.\n const principal = yield* runtime.stampPrincipal(input.principal)\n return yield* decideAs(decision, input, principal).pipe(\n // Every refusal leaves a durable audit record: who asked, for which\n // target, under which scope. The journal row's time is when. It is\n // written after the refused mutation rolled back, so it is the only\n // row the refusal adds; a record that cannot be written fails the\n // call rather than leaving an unaudited refusal.\n Effect.catchTag(\"/control/Unauthorized\", (refusal) =>\n emit(\n input.target._tag === \"Plan\" ? `plan:${input.target.planId}` : input.target.runId,\n \"control.approval.refused\",\n json({ decision, principal, scope: input.scope, target: input.target })\n ).pipe(Effect.andThen(Effect.fail(refusal))))\n )\n })\n\n const decideAs = (\n decision: \"approved\" | \"denied\",\n input: Effect.Success<ReturnType<typeof snapshotApproval>>,\n principal: typeof Principal.Type\n ) =>\n Effect.gen(function*() {\n // Authorization precedes target reads and idempotency replay: neither\n // an old receipt nor a terminal run confers authority on this caller.\n yield* runtime.authorizeApproval({ principal, target: input.target, decision, scope: input.scope })\n // A decision on a settled run decides nothing, and it is read BEFORE\n // the idempotency replay for `resume`'s reason: the recorded receipt\n // describes the earlier call, not the run. Answering `Accepted` sent\n // `smithers approve` into `awaitRun` waiting for a settlement that had\n // already happened — the release validation's 120-second silent block — and\n // recorded a resume delegation for a run no host may take up.\n //\n // A plan-level decision has no run yet, and a target whose run this\n // plane cannot find is left to `lookupApproval` to refuse.\n if (input.target._tag === \"Node\") {\n const current = yield* getRun(input.target.runId).pipe(\n Effect.catchTag(\"/control/RunNotFound\", () => Effect.succeed(undefined))\n )\n if (current !== undefined && terminal(current.status)) {\n const settled: Receipt = { _tag: \"Terminal\", runId: current.runId, status: current.status }\n return settled\n }\n }\n // Set by the mutation when it records a delegation, and left unset on\n // the idempotency replay path — where the original call already\n // delegated and the host's own poll is what takes it up.\n let delegated: number | undefined\n const receipt = yield* mutate(\n decision,\n input.idempotencyKey,\n principal,\n fingerprint(decision, principal, input),\n Effect.gen(function*() {\n // A node decision restarts the run, so it re-enters the flow's\n // current code: a changed flow is refused before anything is\n // resolved, and the run stays waiting for this decision.\n if (input.target._tag === \"Node\") yield* refuseCodeDrift(input.target.runId)\n const token = yield* runtime.lookupApproval(input.target)\n // Resolve (and recheck authority) before installing any grant. The\n // durable adapter commits all three writes in this transaction;\n // the memory test adapter must also leave no grant on refusal.\n yield* runtime.resolveApproval(token, decision, principal, input.scope)\n if (decision === \"approved\") {\n yield* runtime.installBulkGrant(token, input.target.envelope, input.scope)\n }\n yield* emit(\n input.target._tag === \"Plan\" ? `plan:${input.target.planId}` : input.target.runId,\n `control.approval.${decision}`,\n json({\n ...ControlFacts.approvalDecisionFact(token.tokenId, input.target),\n target: input.target._tag,\n scope: input.scope,\n envelope: input.target.envelope,\n principal\n })\n )\n if (input.target._tag === \"Plan\") return accepted(input.idempotencyKey)\n // A decision on a node target has to restart the run the ask parked,\n // in this call. Answering without a restart left the run in\n // `waiting-approval` until a second call arrived, and a denial the\n // run never learns about is a denial that decided nothing.\n //\n // The restart is recorded, not performed, and this plane does NOT\n // claim the row. `scope: \"launched\"` reads like a process scope and\n // is not one — it is a `control_runs` lookup, a durable table every\n // process over one control database shares — so claiming here took\n // the row away from the host that could still drive it, and left it\n // `accepted` under a process with no executor. The delegation is\n // durable instead: the host takes it up on its next poll and clears\n // it, and the journal entry stays as the operator's record of why\n // (triage B-15).\n const runId = input.target.runId\n delegated = yield* runtime.requestResume(runId)\n yield* emit(runId, \"control.run.resumed\", { runId })\n return accepted(input.idempotencyKey, runId)\n })\n )\n if (input.target._tag === \"Node\" && delegated !== undefined) {\n yield* takeUpResume(input.target.runId, delegated)\n }\n return receipt\n })\n\n /**\n * Restarts a parked run, by claiming it or by asking whoever owns it.\n *\n * A run this plane launched is this plane's to claim, and `scope:\n * \"launched\"` is how the runtime is told to check. A run the ENGINE created\n * — a child, a fork, a trampoline round — has its own driver, and claiming\n * it here overwrote the engine's `state_json` and owner columns with a\n * control-plane summary, after which that driver's `scheduleResume` no\n * longer recognized the row: the run stayed suspended with its waiting\n * reason set and its execution never returned (control-plane example 38).\n *\n * Both public resume spellings journal `control.run.resume`. The caller\n * or a host-supplied journal subscriber must drive the execution, and\n * this path never offers `executor.resumeRun`. A run a live peer is\n * HOLDING — `running`, or the `accepted` a claim writes and only a\n * settlement rewrites — is still `ClaimLost`: there is nothing to\n * restart, and pretending otherwise would hide the peer.\n *\n * A run a live host PARKED is that host's to drive: claiming it would\n * steal its execution (#3342), and refusing left a lease-lapsed park\n * nothing could restart. The resume is handed to the host instead. The\n * journal entry names the host, and a durable delegation carries its\n * sequence as the operator's consent, which the host records as the\n * per-release retry permission before it re-drives the run (#2982). The\n * receipt's `handedTo` tells the caller it holds nothing to drive.\n */\n const runMutation = (\n submitted: RunMutationInput\n ): Effect.Effect<Receipt, RunNotFound | ClaimLost | CodeDrift | InvalidInput | PersistenceError> =>\n Effect.gen(function*() {\n const input = yield* snapshotResume(submitted)\n // Terminality is read BEFORE the idempotency replay, as `cancel` reads\n // it. A recorded receipt is the proof a restart was made once; it is\n // not an answer about the run, and the run settles afterwards. The\n // release validation asked `run --resume` for a completed run and was told\n // `AlreadyApplied`, which describes the earlier call and says nothing\n // about the run the operator named (spec item 3).\n const settled = yield* getRun(input.runId)\n if (terminal(settled.status)) {\n return { _tag: \"Terminal\", runId: settled.runId, status: settled.status }\n }\n const principal = yield* runtime.stampPrincipal(input.principal)\n return yield* mutate(\n \"resume\",\n input.idempotencyKey,\n principal,\n fingerprint(\"resume\", principal, input),\n Effect.gen(function*() {\n const current = yield* getRun(input.runId)\n if (terminal(current.status)) {\n return { _tag: \"Terminal\", runId: current.runId, status: current.status }\n }\n // Every claim re-enters the flow's current code, so a changed flow\n // is refused before the claim and the run stays where it was.\n if (input.allowCodeDrift !== true) yield* refuseCodeDrift(input.runId)\n let handedTo: RunHost | undefined\n const claimed = yield* (input.allowCodeDrift === true\n ? runtime.resumeAdopting(input.runId, { scope: \"launched\" })\n : runtime.resume(input.runId, { scope: \"launched\" })).pipe(\n Effect.catchTag(\"/control/ClaimLost\", (error) => {\n if (error.parkedBy !== undefined) {\n handedTo = error.parkedBy\n return Effect.succeed(undefined)\n }\n if (error.reason !== undefined) return Effect.fail(error)\n return runtime.getRun(input.runId).pipe(Effect.flatMap((stored) =>\n // A retained fork is parked in control and pending in the\n // engine. Its accepted read overlay is not a live claim.\n // Never replace that engine continuation with control state.\n live(stored.status) ||\n (live(current.status) && current.executionView?.current.status !== \"pending\")\n ? Effect.fail(new ClaimLost({ runId: input.runId }))\n : Effect.succeed(undefined)\n ))\n })\n )\n // The same attribution `cancel` writes, for the same reason: the\n // contract records `reason` on the journal entry the mutation\n // writes and `principal` as stamped by the runtime, and a resume\n // that carried neither left an operator unable to say who restarted\n // a run or why.\n const sequence = yield* record(\n input.runId,\n \"control.run.resume\",\n json({\n runId: input.runId,\n status: (claimed ?? current).status,\n ...(claimed === undefined ? {} : ControlFacts.runFact(claimed)),\n principal,\n ...(input.reason === undefined ? {} : { reason: input.reason }),\n ...(handedTo === undefined ? {} : { handedTo })\n })\n )\n if (handedTo !== undefined) {\n yield* runtime.requestResume(input.runId, { consent: sequence })\n const handedOff: Receipt = {\n _tag: \"Accepted\",\n receiptId: input.idempotencyKey,\n runId: input.runId,\n handedTo\n }\n return handedOff\n }\n return claimed === undefined\n ? accepted(input.idempotencyKey, input.runId)\n : terminalOrAccepted(input.idempotencyKey, claimed)\n })\n )\n })\n\n /**\n * Makes a cancellation durable on the engine row through the executor.\n *\n * Absent executor, absent engine: the composition runs nothing, so there is\n * no row to write and the local interrupt is the whole cancel. An executor\n * that answers `unknown` has an engine that never heard of the run, which\n * is the same situation with a different messenger.\n */\n const executorRequestCancel = (\n runId: RunId\n ): Effect.Effect<CancelRecord, PersistenceError> =>\n Option.isNone(executor)\n ? Effect.succeed(\"unknown\" as const)\n : executor.value.requestCancel({ runId })\n\n /**\n * Finishes the parked execution the cancel just recorded a request on.\n *\n * Outside the mutation's write transaction, for `takeUpResume`'s reason:\n * settling a park re-enters the engine, and the engine's writes would wait\n * on the writer the transaction holds — which deadlocks the cancel rather\n * than slowing it. So this runs on the way out, once the request and the\n * terminal control status are both committed.\n */\n const executorSettleCancelledPark = (\n runId: RunId\n ): Effect.Effect<void, PersistenceError> =>\n Option.isNone(executor)\n ? Effect.void\n : executor.value.settleCancelledPark({ runId })\n\n /**\n * Moves this plane's row onto the status the engine already reached.\n *\n * A reconciliation that cannot be written is logged rather than raised, for\n * `settleUnlaunched`'s reason: the caller is already receiving the engine's\n * terminal receipt, which is the true answer, and a live peer holding the\n * row will settle it itself.\n */\n const reconcileTerminal = (\n runId: RunId,\n status: RunSummary[\"status\"]\n ): Effect.Effect<void> =>\n Effect.gen(function*() {\n // Reconcile the coordination row itself. Applying the engine overlay\n // here would make a stale row appear settled before it was persisted.\n const current = yield* runtime.getRun(runId)\n if (terminal(current.status)) return\n const fence = yield* runtime.claimFence(runId).pipe(\n // A parked coordination row has released its fence. Claim that row\n // before copying the engine's terminal fact; a live peer still wins.\n Effect.catchTag(\"/control/ClaimLost\", () =>\n runtime.resume(runId).pipe(Effect.andThen(runtime.claimFence(runId))))\n )\n const run = yield* runtime.writeStatus(runId, fence, status)\n yield* emit(runId, `control.run.${status}`, json({ runId, status, ...ControlFacts.runFact(run) }))\n }).pipe(\n journal.transact,\n Effect.catchCause((failure) =>\n Effect.annotateLogs(\n Effect.logWarning(\"A settled engine row could not be reconciled onto the control row\"),\n { runId, status, cause: Cause.pretty(failure) }\n )\n )\n )\n\n /**\n * Resumes a parked run whose park a steer has just answered.\n *\n * Only two parks are the steer's to end. A run parked on `event` is\n * waiting for something to arrive, and a steer is something arriving. A\n * run parked on `released` lost its owner to a sweep\n * (`@smthrs/engine-store` `DisasterRecovery.fence`) and nothing is coming\n * to claim it, so the steer claims it.\n *\n * Every other park keeps waiting. An `approval`, `timer`, or `quota` park\n * is waiting for a decision, a clock, or a budget that a message does not\n * supply. A park with NO reason at all is an operator's own park, written\n * through `ControlRuntime.writeStatus`, and it is the one park a steer must\n * not end: an operator who stopped a run and then sent it a message is\n * queuing the message for when they restart it, not asking for the stop to\n * be undone. A park a control plane cannot explain is left alone for the\n * same reason.\n *\n * A lost claim is not a failure here. It means another process already\n * owns the run, or the run belongs to a driver this plane did not launch\n * — an engine-created child keeps its park, because claiming it would\n * strand it under this plane's fence where no engine re-drives it. The\n * steer itself is already durable in the notification queue, so the\n * owning driver delivers it at the run's next boundary. A refusal naming\n * the live parked host delegates a wake to that host, so an idle retained\n * module gets that boundary without transferring its fence.\n */\n const wake = (\n run: RunSummary,\n messageId: string\n ): Effect.Effect<void, PersistenceError> => {\n if (run.status !== \"parked\") return Effect.void\n if (run.waitingReason !== \"event\" && run.waitingReason !== \"released\") return Effect.void\n // A changed flow keeps its park: the steer stays queued, and the\n // operator decides with `runs resume --allow-code-drift`.\n return refuseCodeDrift(run.runId).pipe(\n Effect.andThen(runtime.resume(run.runId, { scope: \"launched\" })),\n Effect.flatMap((resumed) =>\n emit(\n run.runId,\n \"control.steer.woke\",\n {\n runId: run.runId,\n messageId,\n status: resumed.status,\n ...ControlFacts.runFact(resumed)\n } as ControlEvent[\"payload\"]\n )\n ),\n // A detached live host keeps its fence. Delegate the admitted event\n // wake to it, just as a node decision does, instead of leaving an idle\n // retained module with input it will never get a boundary to drain.\n Effect.catchTag(\n \"/control/ClaimLost\",\n (refusal) =>\n refusal.parkedBy === undefined ? Effect.void : Effect.gen(function*() {\n const delegated = yield* runtime.requestResume(run.runId).pipe(\n Effect.catchTag(\"/control/InvalidInput\", () => Effect.succeed(undefined))\n )\n if (delegated !== undefined) yield* emit(run.runId, \"control.run.resumed\", { runId: run.runId })\n })\n ),\n Effect.catchTag(\"/control/RunNotFound\", () => Effect.void),\n Effect.catchTag(\n \"/control/CodeDrift\",\n (drift) =>\n Effect.annotateLogs(Effect.logWarning(\"A steer did not wake a run whose code changed\"), {\n runId: run.runId,\n cause: drift.message\n })\n )\n )\n }\n\n /**\n * A page of run summaries with their pending steer counts filled in.\n *\n * The count comes from the notification queue rather than from a column,\n * because pending is admitted minus promoted and the queue owns both\n * halves. A queue that is unavailable leaves the field absent — \"not\n * known\" is representable, and it is the truth — while a journal that\n * fails is a failed listing.\n */\n const withSteering = (\n runs: ReadonlyArray<RunSummary>\n ): Effect.Effect<ReadonlyArray<RunSummary>, ControlError> =>\n Effect.forEach(runs, (run) =>\n notifications.pending(run.runId).pipe(\n Effect.map((pending): RunSummary => ({\n ...run,\n steering: {\n pending: pending.filter((notification) => notification.delivery === \"steer\").length\n }\n })),\n Effect.catchTag(\"/notifications/NotificationError\", () => Effect.succeed(run)),\n Effect.mapError((cause) =>\n new PersistenceError({\n operation: \"control.list.steering\",\n message: `Failed to read pending steering for ${run.runId}`,\n cause\n })\n )\n ))\n\n /**\n * The runs every recorded fire of a trigger started. A reader answers the\n * ledger prefix a page at `cursor` needs, so the window widens until the\n * reader answers less than it could.\n */\n const triggerRuns = (triggerId: string) =>\n Effect.gen(function*() {\n let start = 0\n while (true) {\n const fires = yield* dispatch.fires({\n _tag: \"fires\",\n filters: { triggerId },\n limit: maxPageSize,\n ...(start === 0 ? {} : { cursor: String(start) })\n })\n if (fires.length <= start + maxPageSize) {\n return fires.flatMap((fire) => fire.triggerId === triggerId && fire.runId !== undefined ? [fire.runId] : [])\n }\n start = Math.max(fires.length, start * 2)\n }\n })\n\n /**\n * Whether a restricted reader may see `runId`: only a run this plane\n * launched for the reader's own principal. A plan partition, an\n * engine-created run, and a run that does not exist are all invisible.\n */\n const readerSees = (reader: Principal, runId: string): Effect.Effect<boolean, PersistenceError> =>\n runId.startsWith(\"plan:\")\n ? Effect.succeed(false)\n : runtime.getRun(runId).pipe(\n Effect.map((run) => launchedByMatches(run, reader)),\n Effect.catchTag(\"/control/RunNotFound\", () => Effect.succeed(false))\n )\n\n /**\n * Confines a mutation to a run its reader may see, with the rule `List`\n * and `Watch` use: another principal's run answers `RunNotFound` exactly\n * as a missing one, before any idempotency replay can describe it.\n */\n const confined = <A, E, R>(\n submitted: { readonly reader?: Principal | undefined; readonly runId: string },\n mutation: Effect.Effect<A, E, R>\n ): Effect.Effect<A, E | RunNotFound | PersistenceError, R> =>\n submitted.reader === undefined ? mutation : Effect.flatMap(\n readerSees(submitted.reader, submitted.runId),\n (visible): Effect.Effect<A, E | RunNotFound, R> =>\n visible ? mutation : Effect.fail(new RunNotFound({ runId: submitted.runId }))\n )\n\n const list = (request: ListInput): Effect.Effect<ListResponse, ControlError> =>\n Effect.gen(function*() {\n if (request._tag === \"executions\") {\n if (request.reader !== undefined && !(yield* readerSees(request.reader, request.runId))) {\n return yield* new RunNotFound({ runId: request.runId })\n }\n yield* runtime.getRun(request.runId)\n yield* Schema.decodeUnknownEffect(ListRequest)(request).pipe(\n Effect.mapError(() => invalid(\"executionIds: at most 200 nonempty execution IDs are admitted\"))\n )\n const batch = Option.isSome(executor) && executor.value.readExecutions !== undefined\n ? yield* executor.value.readExecutions(request)\n : {\n source: null,\n revision: null,\n snapshots: request.executionIds.map((executionId) => ({\n _tag: \"Unavailable\" as const,\n executionId,\n reason: \"unsupported\" as const\n }))\n }\n return { _tag: \"executions\", source: batch.source, revision: batch.revision, items: batch.snapshots }\n }\n const bounds = yield* pageBounds(request._tag === \"runs\" ? undefined : request.cursor, request.limit)\n if (request._tag === \"plans\") {\n // A plan's input and envelope are an operator's to read.\n if (request.reader !== undefined) return { _tag: \"plans\", items: [] }\n const result = yield* runtime.queryPlans({\n flowId: request.filters?.flowId,\n decision: request.filters?.decision,\n after: bounds.start,\n limit: bounds.size\n })\n const items = result.plans.map((plan) => ({\n card: plan.card,\n // The JSON form the durable runtime stores, whichever runtime answers.\n input: JSON.parse(JSON.stringify(plan.decodedInput ?? null)) as Schema.Json,\n decision: plan.decision\n }))\n return result.next === undefined\n ? { _tag: \"plans\", items }\n : { _tag: \"plans\", items, nextCursor: String(result.next) }\n }\n\n if (request._tag === \"flows\") {\n const [registered, warnings] = yield* Effect.all([registry.list(), registry.warnings()])\n const available = registered.length > 0\n ? registered.map((descriptor) => ({\n flowId: descriptor.name,\n description: descriptor.description,\n ...(inputDocument(descriptor.input) === undefined\n ? {}\n : { inputSchema: inputDocument(descriptor.input)! })\n }))\n : yield* runtime.listFlows\n const result = page(available, bounds)\n const diagnostics = warnings.length === 0 ? {} : { warnings }\n return result.nextCursor === undefined\n ? { _tag: \"flows\", items: result.items, ...diagnostics }\n : { _tag: \"flows\", items: result.items, ...diagnostics, nextCursor: result.nextCursor }\n }\n\n if (request._tag === \"triggers\") {\n // A trigger's input and active run belong to whoever configured it;\n // like a plan, it is an operator's to read.\n if (request.reader !== undefined) return { _tag: \"triggers\", items: [] }\n let triggers: ReadonlyArray<TriggerSummary> = yield* dispatch.list(request)\n if (request.filters?.triggerId !== undefined) {\n triggers = triggers.filter((trigger) => trigger.triggerId === request.filters?.triggerId)\n }\n if (request.filters?.flowId !== undefined) {\n triggers = triggers.filter((trigger) => trigger.flowId === request.filters?.flowId)\n }\n if (request.filters?.enabled !== undefined) {\n triggers = triggers.filter((trigger) => trigger.enabled === request.filters?.enabled)\n }\n const result = page(triggers, bounds)\n return result.nextCursor === undefined\n ? { _tag: \"triggers\", items: result.items }\n : { _tag: \"triggers\", items: result.items, nextCursor: result.nextCursor }\n }\n\n if (request._tag === \"fires\") {\n let fires: ReadonlyArray<FireSummary> = yield* dispatch.fires(request)\n const reader = request.reader\n if (reader !== undefined) {\n // A restricted reader sees the fires that started its own runs.\n const seen = yield* Effect.forEach(fires, (fire) =>\n fire.runId === undefined ? Effect.succeed(false) : readerSees(reader, fire.runId))\n fires = fires.filter((_, index) =>\n seen[index]\n )\n }\n if (request.filters?.triggerId !== undefined) {\n fires = fires.filter((fire) => fire.triggerId === request.filters?.triggerId)\n }\n if (request.filters?.runId !== undefined) {\n fires = fires.filter((fire) => fire.runId === request.filters?.runId)\n }\n if (request.filters?.outcome !== undefined) {\n fires = fires.filter((fire) => fire.outcome === request.filters?.outcome)\n }\n const result = page(fires, bounds)\n return result.nextCursor === undefined\n ? { _tag: \"fires\", items: result.items }\n : { _tag: \"fires\", items: result.items, nextCursor: result.nextCursor }\n }\n\n const filters = request.filters\n // A restricted reader lists only its own runs, whatever it asked for:\n // naming another principal's id selects nothing.\n const reader = request.reader\n if (reader !== undefined && filters?.principalId !== undefined && filters.principalId !== reader.id) {\n return { _tag: \"runs\", items: [] }\n }\n const launcher = reader !== undefined\n ? { id: reader.id, kind: reader.kind }\n : filters?.principalId === undefined\n ? undefined\n : { id: filters.principalId }\n const fingerprint = JSON.stringify([\n filters?.runId ?? null,\n filters?.flowId ?? null,\n filters?.status ?? null,\n filters?.parentRunId ?? null,\n filters?.lineageId ?? null,\n // Keep legacy cursor fingerprints byte-identical unless opting in.\n ...(filters?.terminal === undefined && request.order === undefined\n ? []\n : [filters?.terminal ?? null, request.order ?? null]),\n ...(filters?.since === undefined && filters?.until === undefined && filters?.triggerId === undefined\n ? []\n : [filters.since ?? null, filters.until ?? null, filters.triggerId ?? null]),\n ...(launcher === undefined ? [] : [launcher.id, launcher.kind ?? null])\n ])\n const cursor = request.cursor === undefined ? undefined : yield* Schema.decodeUnknownEffect(runCursor)(\n request.cursor\n ).pipe(Effect.mapError(() => invalid(\"cursor: expected a run listing cursor\")))\n if (cursor !== undefined && cursor.filters !== fingerprint) {\n return yield* invalid(\"cursor: belongs to different run filters\")\n }\n // Exact lookups retain their one-row path. Other queries select durable\n // summary fields in the adapter before observing the selected page.\n if (filters?.runId !== undefined) {\n let runs = yield* getRun(filters.runId).pipe(\n Effect.map((run) => [run]),\n Effect.catchTag(\"/control/RunNotFound\", () => Effect.succeed<Array<RunSummary>>([]))\n )\n if (filters.flowId !== undefined) runs = runs.filter((run) => run.flowId === filters.flowId)\n if (filters.status !== undefined) runs = runs.filter((run) => run.status === filters.status)\n if (filters.terminal !== undefined) runs = runs.filter((run) => terminal(run.status) === filters.terminal)\n if (filters.parentRunId !== undefined) runs = runs.filter((run) => run.parentRunId === filters.parentRunId)\n if (filters.lineageId !== undefined) runs = runs.filter((run) => run.lineageId === filters.lineageId)\n if (launcher !== undefined) runs = runs.filter((run) => launchedByMatches(run, launcher))\n if (filters.since !== undefined) runs = runs.filter((run) => run.createdAt >= filters.since!)\n if (filters.until !== undefined) runs = runs.filter((run) => run.createdAt < filters.until!)\n if (filters.triggerId !== undefined) {\n const started = yield* triggerRuns(filters.triggerId)\n runs = runs.filter((run) => started.includes(run.runId))\n }\n return { _tag: \"runs\", items: yield* withSteering(yield* Effect.forEach(runs, withCodeDrift)) }\n }\n // A status filter has to select on the status a caller will READ.\n // `observe` replaces this plane's copy with the executor's, so a run\n // the engine has parked on a human wait answers `waiting-approval`\n // while the coordination row still says whatever it last recorded —\n // and the adapter's own filter dropped it before anybody looked. That\n // is what left workspace 6f2733a3's run-1 out of every\n // `status: \"waiting-approval\"` page while the run tree was waiting on\n // a person. The exact-lookup branch above has always filtered on the\n // observed summary; this makes the paged branch agree.\n //\n // The source therefore selects without the status and the page is\n // filled from observed rows, asking for only as many as are still\n // needed so a page never over-delivers rows its cursor has passed. A\n // filter the source cannot evaluate costs a walk, which is why the\n // walk stops at a full page or at the end of the runs.\n const postFiltered = observing && (filters?.status !== undefined || filters?.terminal !== undefined)\n const { triggerId, principalId: _principalId, ...unowned } = filters ?? {}\n const selected = launcher === undefined ? unowned : { ...unowned, launchedBy: launcher }\n const narrowed = triggerId === undefined ? selected : { ...selected, runIds: yield* triggerRuns(triggerId) }\n const sourceFilters = postFiltered\n ? Object.fromEntries(Object.entries(narrowed).filter(([key]) => key !== \"status\" && key !== \"terminal\"))\n : narrowed\n const collected: Array<RunSummary> = []\n let sourceCursor = cursor\n let sourceNext: RunPage[\"nextCursor\"]\n while (true) {\n const result = yield* runtime.queryRuns({\n filters: sourceFilters,\n order: request.order,\n cursor: sourceCursor,\n limit: bounds.size - collected.length\n })\n const observed = yield* Effect.forEach(result.items, observe)\n for (const run of observed) {\n if (\n !postFiltered ||\n (filters?.status === undefined || run.status === filters.status) &&\n (filters?.terminal === undefined || terminal(run.status) === filters.terminal)\n ) collected.push(run)\n }\n sourceNext = result.nextCursor\n if (!postFiltered || sourceNext === undefined || collected.length >= bounds.size) break\n sourceCursor = { version: 1, filters: fingerprint, ...sourceNext }\n }\n const items = yield* withSteering(collected)\n return sourceNext === undefined\n ? { _tag: \"runs\", items }\n : {\n _tag: \"runs\",\n items,\n nextCursor: JSON.stringify({ version: 1, filters: fingerprint, ...sourceNext })\n }\n })\n\n const streamForRun = (\n runId: RunId,\n filter: WatchFilter\n ): Stream.Stream<ControlEvent, ControlError> =>\n journal.stream({\n runId: JournalEvent.RunId.make(runId),\n ...(filter.afterSequence === undefined\n ? {}\n : { afterSequence: JournalEvent.Seq.make(filter.afterSequence) })\n }).pipe(\n Stream.map(eventFromEntry),\n Stream.mapError(watchReadFailed)\n )\n\n /**\n * Finds the last committed sequence without walking the history. The\n * journal's public cursor is forward-only, so exponential probes first\n * bracket the tail and binary probes then pin it exactly. Only these\n * indexed one-row reads run in the transaction that fixes the cutoff.\n */\n const snapshotHighWater = (\n runId: JournalEvent.RunId\n ): Effect.Effect<JournalEvent.Seq | undefined, ControlError> =>\n journal.transact(\n Effect.gen(function*() {\n const first = yield* journal.entries({ runId, limit: 1 })\n const initial = first.entries[0]\n if (initial === undefined) return undefined\n\n let lower = initial.seq as number\n let step = 1\n let upper = lower\n const maximumSequence = Number.MAX_SAFE_INTEGER - 1\n while (lower < maximumSequence) {\n const probe = Math.min(maximumSequence, lower + step - 1)\n const next = yield* journal.entries({\n runId,\n after: JournalEvent.Seq.make(probe),\n limit: 1\n })\n const entry = next.entries[0]\n if (entry === undefined) {\n upper = probe\n break\n }\n lower = entry.seq\n if (lower === maximumSequence) return entry.seq\n step = Math.min(maximumSequence - lower, step * 2)\n }\n\n while (lower < upper) {\n const middle = lower + Math.ceil((upper - lower) / 2)\n const next = yield* journal.entries({\n runId,\n after: JournalEvent.Seq.make(middle - 1),\n limit: 1\n })\n const entry = next.entries[0]\n if (entry === undefined) {\n upper = middle - 1\n } else {\n lower = entry.seq\n }\n }\n return JournalEvent.Seq.make(lower)\n })\n ).pipe(Effect.mapError(watchReadFailed))\n\n const snapshotForRunAt = (\n runId: RunId,\n filter: WatchFilter,\n highWater: JournalEvent.Seq | undefined\n ): Stream.Stream<ControlEvent, ControlError> => {\n const journalRunId = JournalEvent.RunId.make(runId)\n const initialAfter = filter.afterSequence === undefined\n ? undefined\n : JournalEvent.Seq.make(filter.afterSequence)\n if (highWater === undefined || (initialAfter !== undefined && initialAfter >= highWater)) {\n return Stream.empty\n }\n return Stream.paginate(initialAfter, (after) =>\n journal.entries({\n runId: journalRunId,\n ...(after === undefined ? {} : { after }),\n limit: snapshotPageSize\n }).pipe(\n Effect.map((page) => {\n const entries = page.entries.filter((entry) => entry.seq <= highWater)\n const last = entries.at(-1)\n const next = last === undefined || last.seq >= highWater || !page.hasMore\n ? Option.none<JournalEvent.Seq | undefined>()\n : Option.some<JournalEvent.Seq | undefined>(last.seq)\n return [entries, next] as const\n }),\n Effect.mapError(watchReadFailed)\n )).pipe(Stream.map(eventFromEntry))\n }\n\n const snapshotForRun = (\n runId: RunId,\n filter: WatchFilter\n ): Stream.Stream<ControlEvent, ControlError> =>\n Stream.unwrap(\n Effect.map(\n snapshotHighWater(JournalEvent.RunId.make(runId)),\n (highWater) => snapshotForRunAt(runId, filter, highWater)\n )\n )\n\n /**\n * Every journal partition, plans first, one inventory page at a time.\n *\n * The walk reads keys only and pulls the next page when the consumer asks\n * for it, so a global watch holds one page of ids rather than the whole\n * run table. Each inventory's first page pins its newest position and\n * every later page stops there, so the walk is finite however fast runs\n * are admitted: a partition that exists before the walk starts is listed\n * exactly once, and one created during the walk is left to the follow\n * tail.\n */\n const inventory = (\n page: (request: IdPageRequest) => Effect.Effect<IdPage, ControlError>\n ): Stream.Stream<string, ControlError> => {\n const first: Omit<IdPageRequest, \"limit\"> = {}\n return Stream.paginate(\n first,\n (cursor) =>\n Effect.map(\n page({ ...cursor, limit: partitionPageSize }),\n (next) =>\n [\n next.ids,\n next.next === undefined ? Option.none() : Option.some({ after: next.next, through: next.through })\n ] as const\n )\n )\n }\n\n const journalPartitions: Stream.Stream<string, ControlError> = Stream.concat(\n Stream.map(inventory(runtime.pagePlanIds), (planId) => `plan:${planId}`),\n inventory(runtime.pageRunIds)\n )\n\n const snapshot = (filter: WatchFilter): Stream.Stream<ControlEvent, ControlError> =>\n filter.runId !== undefined\n ? snapshotForRun(filter.runId, filter)\n : Stream.flatMap(journalPartitions, (partition) => snapshotForRun(partition, filter), {\n concurrency: snapshotPartitionConcurrency\n })\n\n const entries = (filter: WatchFilter): Stream.Stream<ControlEvent, ControlError> =>\n filter.follow === false\n ? snapshot(filter)\n : filter.runId !== undefined\n ? streamForRun(filter.runId, filter)\n : Stream.unwrap(\n Effect.gen(function*() {\n const subscription = yield* journal.changes\n // Subscribe first, then pin each partition's cutoff. A row\n // committed at or before its cutoff is read from the finite\n // snapshot; one committed after it is read from the buffered tail.\n // This is a handoff, not a bounded duplicate cache, so an\n // arbitrarily long history cannot make an old overlap reappear.\n //\n // A cutoff is pinned by whichever side reaches its partition\n // first: the paged walk, or the tail when an entry arrives for a\n // partition the walk has not reached or never lists (one created\n // after the walk passed its key). That side reads the partition's\n // snapshot; the other reuses the cutoff. The map keeps one cutoff\n // per partition seen for the life of the stream.\n const cutoffs = new Map<string, Deferred.Deferred<JournalEvent.Seq | undefined, ControlError>>()\n const pin = (partition: string): Effect.Effect<JournalEvent.Seq | undefined, ControlError> => {\n const pinned = Deferred.makeUnsafe<JournalEvent.Seq | undefined, ControlError>()\n cutoffs.set(partition, pinned)\n return snapshotHighWater(JournalEvent.RunId.make(partition)).pipe(\n Effect.onExit((exit) => Deferred.done(pinned, exit))\n )\n }\n const walk = journalPartitions.pipe(\n Stream.mapEffect(\n (partition) =>\n Effect.suspend(() =>\n cutoffs.has(partition)\n ? Effect.succeed(Option.none())\n : Effect.map(pin(partition), (highWater) => Option.some([partition, highWater] as const))\n ),\n { concurrency: snapshotPartitionConcurrency }\n ),\n Stream.filter(Option.isSome),\n Stream.map((pinned) => pinned.value),\n Stream.flatMap(([partition, highWater]) => snapshotForRunAt(partition, filter, highWater), {\n concurrency: snapshotPartitionConcurrency\n })\n )\n /** The partition's cutoff, pinning it when the walk has not. */\n type Cutoff = { readonly highWater: JournalEvent.Seq | undefined; readonly claimed: boolean }\n const cutoffFor = (partition: string): Effect.Effect<Cutoff, ControlError> =>\n Effect.suspend((): Effect.Effect<Cutoff, ControlError> => {\n const known = cutoffs.get(partition)\n if (known !== undefined) {\n return Effect.map(Deferred.await(known), (highWater) => ({ highWater, claimed: false }))\n }\n return Effect.map(pin(partition), (highWater) => ({ highWater, claimed: true }))\n })\n /**\n * Detects a live tail that silently lost entries.\n *\n * `changes` is a sliding PubSub: a watcher that falls behind drops\n * committed entries with no signal, which turns this follow into a\n * permanently incomplete stream. Sequence numbers are\n * partition-local, so each tail entry is checked against the last\n * sequence this watcher saw for its partition (or the snapshot\n * cutoff for one it has not tailed yet).\n *\n * A gap is not proof of loss on its own: a rolled-back transaction\n * leaves an allocated sequence unused, and that hole is benign. The\n * durable journal disambiguates — an entry in the gap that was\n * committed but never delivered here is a real loss and fails the\n * stream, while a hole with no durable entry is skipped.\n *\n * One limitation, by design: the disambiguation reads the durable\n * journal, so an entry that was committed, dropped, and then\n * compacted away before the check runs reports as a benign hole.\n * Closing that needs a registered reader cursor, which the\n * partition-merged tail does not hold.\n */\n const seenByPartition = new Map<string, number>()\n const gapCheck = (\n partition: string,\n expected: number | undefined,\n arrived: number\n ): Effect.Effect<void, ControlError> =>\n journal.entries({\n runId: JournalEvent.RunId.make(partition),\n ...(expected === undefined ? {} : { after: JournalEvent.Seq.make(expected) }),\n limit: 1\n }).pipe(\n Effect.mapError(watchReadFailed),\n Effect.flatMap((page) => {\n const missed = page.entries[0]\n if (missed === undefined || missed.seq >= arrived) return Effect.void\n return Effect.fail(\n new PersistenceError({\n operation: \"watch\",\n message:\n `the live tail lost journal entries for ${partition}: sequence ${missed.seq} was committed but never delivered to this watcher`\n })\n )\n })\n )\n const trackTail = (\n entry: JournalEvent.Entry,\n cutoff: JournalEvent.Seq | undefined\n ): Effect.Effect<Option.Option<JournalEvent.Entry>, ControlError> => {\n const partition = String(entry.runId)\n const expected = seenByPartition.get(partition) ?? cutoff\n // A committed entry at or below the cursor was already delivered\n // (or is covered by the snapshot); passing it on teaches nothing.\n if (expected !== undefined && entry.seq <= expected) return Effect.succeed(Option.none())\n seenByPartition.set(partition, entry.seq)\n return expected !== undefined && entry.seq === expected + 1\n ? Effect.succeed(Option.some(entry))\n : Effect.map(gapCheck(partition, expected, entry.seq), () => Option.some(entry))\n }\n const tail = Stream.fromSubscription(subscription).pipe(\n // Every committed entry names its partition. The first one from a\n // partition nobody pinned yet pins it here and is preceded by that\n // partition's snapshot, which also recovers any earlier notice the\n // sliding buffer dropped.\n Stream.flatMap((entry) =>\n Stream.unwrap(Effect.gen(function*() {\n const partition = String(entry.runId)\n const { highWater, claimed } = yield* cutoffFor(partition)\n const history = claimed ? snapshotForRunAt(partition, filter, highWater) : Stream.empty\n if (highWater !== undefined && entry.seq <= highWater) return history\n const tracked = yield* trackTail(entry, highWater)\n return Option.isSome(tracked)\n ? Stream.concat(history, Stream.succeed(eventFromEntry(tracked.value)))\n : history\n }))\n )\n )\n // The walk already bounds its own reads, and the tail is its own\n // fiber, so snapshot work never starves the live tail. An unbounded\n // merge read every partition of an unbounded database at once,\n // which is the allocation a remote watcher could force.\n return Stream.merge(walk, tail)\n })\n )\n\n /**\n * Keeps a restricted reader's watch to the runs it launched. A named run it\n * may not see fails `RunNotFound` exactly as a missing one does; a global\n * watch drops every other partition's events, deciding each partition once.\n */\n const watch = (filter: WatchInput): Stream.Stream<ControlEvent, ControlError> => {\n const { reader, ...unrestricted } = filter\n if (reader === undefined) return watchAll(unrestricted)\n if (filter.runId !== undefined) {\n const runId = filter.runId\n return Stream.unwrap(Effect.map(\n readerSees(reader, runId),\n (visible) => visible ? watchAll(unrestricted) : Stream.fail(new RunNotFound({ runId }))\n ))\n }\n const decided = new Map<string, boolean>()\n return watchAll(unrestricted).pipe(\n // A lost-tail failure names the partition and sequence it missed,\n // which may be another principal's; a restricted reader learns only\n // that its stream ended incomplete.\n Stream.mapError((error) =>\n error._tag === \"/control/PersistenceError\"\n ? new PersistenceError({ operation: \"watch\", message: \"the watch lost journal entries and ended\" })\n : error\n ),\n Stream.filterEffect((event) => {\n // eventFromEntry, Lineage.derive and Steering.derive retain the journal partition.\n const partition = event.runId!\n const known = decided.get(partition)\n if (known !== undefined) return Effect.succeed(known)\n return Effect.tap(\n readerSees(reader, partition),\n (visible) => Effect.sync(() => decided.set(partition, visible))\n )\n })\n )\n }\n\n /** Expands each source row in stable order and checkpoints individual members. */\n const watchAll = (filter: WatchFilter): Stream.Stream<ControlEvent, ControlError> => {\n if (filter.afterSequence !== undefined && filter.runId === undefined) {\n return Stream.fail(invalid(\"afterSequence: a watch cursor resumes one run, so it requires runId\"))\n }\n const cursor = filter.afterCursor\n if (cursor !== undefined) {\n if (filter.runId === undefined) {\n return Stream.fail(invalid(\"afterCursor: a watch cursor resumes one run, so it requires runId\"))\n }\n if (filter.afterSequence !== undefined) {\n return Stream.fail(invalid(\"afterCursor: cannot be combined with afterSequence\"))\n }\n if (!Schema.is(WatchCursor)(cursor)) {\n return Stream.fail(invalid(\"afterCursor: sequence and offset must be nonnegative safe journal integers\"))\n }\n }\n // A partial checkpoint rereads only its source row. A complete one\n // starts strictly after it, so polling never rereads completed entries.\n const afterSequence = cursor === undefined ?\n filter.afterSequence\n : cursor.offset === undefined ?\n cursor.sequence\n : cursor.sequence === 0\n ? undefined\n : cursor.sequence - 1\n return entries({\n ...filter,\n afterSequence\n }).pipe(\n Stream.map((event): ReadonlyArray<ControlEvent> => {\n const lineage = Lineage.derive(event)\n const expanded = [event, ...(lineage === undefined ? [] : [lineage]), ...Steering.derive(event)]\n const checkpointed = expanded.map((member, offset): ControlEvent => ({\n ...member,\n cursor: offset === expanded.length - 1 ? { sequence: event.sequence } : { sequence: event.sequence, offset }\n }))\n return cursor?.offset !== undefined && event.sequence === cursor.sequence\n ? checkpointed.slice(cursor.offset + 1)\n : checkpointed\n }),\n Stream.flattenIterable\n )\n }\n\n const service: Service = {\n plan: Effect.fn(\"Control.plan\")((input) =>\n mutationSemaphore.withPermits(1)(\n journal.transact(Effect.gen(function*() {\n // The SQL runtime's plan, key and token writes join this transaction.\n // Memory publication cannot roll back, and older SQL writes could\n // commit without an entry, so a stored card also needs a journal check.\n const { card, created } = yield* runtime.plan(input)\n const runId = JournalEvent.RunId.make(`plan:${card.planId}`)\n if (!created) {\n let after: JournalEvent.Seq | undefined\n while (true) {\n const page = yield* journal.entries({\n runId,\n ...(after === undefined ? {} : { after }),\n limit: snapshotPageSize\n })\n if (\n page.entries.some((entry) =>\n entry.sourceId === sourceId && entry.eventType === \"control.plan.created\"\n )\n ) {\n return card\n }\n if (!page.hasMore) break\n after = page.entries[page.entries.length - 1]!.seq\n }\n }\n yield* emit(runId, \"control.plan.created\", {\n planId: card.planId,\n flowId: card.flowId,\n digest: card.digest\n })\n return card\n })).pipe(\n Effect.mapError((cause) =>\n cause instanceof Journal.JournalError\n ? new PersistenceError({\n operation: \"plan\",\n message: \"Failed to commit plan and its creation entry atomically\",\n cause\n })\n : cause\n )\n )\n ).pipe(Effect.flatMap((card) =>\n registry.warnings().pipe(Effect.map((all) => {\n const warnings = all.filter((warning) => warning.name === input.flowId)\n return warnings.length === 0 ? card : { warnings, ...card }\n }))\n ))\n ),\n run: Effect.fn(\"Control.run\")((submitted) =>\n Effect.gen(function*() {\n const input = yield* snapshotRun(submitted)\n // One resume, one implementation. This member used to be a second\n // path with none of `Control.resume`'s fixes: it claimed without\n // `scope: \"launched\"`, so resuming an engine-created child overwrote\n // the engine's continuation state; it replayed a recorded receipt as\n // `AlreadyApplied` for a run that had since settled; and it journaled\n // `control.run.resumed`, which `AgentSession` reads as an approval\n // DELEGATION rather than as the claim a resume is.\n if (input._tag === \"Resume\") return yield* runMutation(input)\n const principal = yield* runtime.stampPrincipal(input.principal)\n let admitted: Launch | undefined\n const receipt = yield* mutate<\n | RunNotFound\n | PlanNotFound\n | PlanDenied\n | PlanDigestMismatch\n | EnvelopeMismatch\n | ClaimLost\n | LaunchFailed\n | PersistenceError,\n never\n >(\n \"run\",\n input.idempotencyKey,\n principal,\n fingerprint(\"run\", principal, input),\n Effect.gen(function*() {\n const launched = yield* runtime.launch(\n input.planId,\n input.digest,\n input.envelope,\n principal,\n input.reservedRunId\n )\n if (launched._tag === \"Parked\") {\n return { ...launched.receipt, receiptId: input.idempotencyKey }\n }\n const plan = yield* runtime.getPlan(input.planId)\n const trigger = declaredTrigger(plan.decodedInput)\n yield* emit(\n launched.run.runId,\n \"control.run.accepted\",\n {\n runId: launched.run.runId,\n planId: input.planId,\n digest: input.digest,\n status: launched.run.status,\n ...(trigger === undefined ? {} : { trigger }),\n ...ControlFacts.runFact(launched.run, \"created\")\n } as ControlEvent[\"payload\"]\n )\n admitted = { plan, run: launched.run }\n return {\n _tag: \"Accepted\",\n receiptId: input.idempotencyKey,\n runId: launched.run.runId\n }\n }),\n true,\n true\n )\n // The executor may immediately read through another connection or\n // fork a driver. Its run, approval and dedupe receipt must all be\n // committed before any execution crosses that boundary.\n if (receipt._tag === \"Accepted\" && admitted !== undefined) yield* hand(admitted)\n else if (receipt._tag === \"AlreadyApplied\" && receipt.runId !== undefined) {\n yield* relaunchStranded(receipt.runId)\n }\n return receipt\n })\n ),\n approve: Effect.fn(\"Control.approve\")((input) => decide(\"approved\", input)),\n deny: Effect.fn(\"Control.deny\")((input) => decide(\"denied\", input)),\n steer: Effect.fn(\"Control.steer\")((submitted: SteerInput) =>\n confined(\n submitted,\n Effect.flatMap(snapshotSteer(submitted), (input) =>\n mutate(\n \"steer\",\n input.idempotencyKey,\n input.message.principal,\n fingerprint(\"steer\", input.message.principal, input),\n Effect.gen(function*() {\n // Two run ids naming two runs is a caller mistake with a durable\n // consequence: the notification is admitted to `input.runId` while\n // the stored `SteerMessage.runId` names another run, so the message\n // an operator later reads says it belongs somewhere it was never\n // delivered.\n if (input.message.runId !== input.runId) {\n return yield* Effect.fail(\n invalid(\n `message.runId: must be ${JSON.stringify(input.runId)}, received ${\n JSON.stringify(input.message.runId)\n }`\n )\n )\n }\n const run = yield* getRun(input.runId)\n // A run that will never take another turn cannot be steered, and\n // storing the steer anyway would leave an operator watching a\n // message that has no boundary left to deliver it.\n if (terminal(run.status)) return { _tag: \"Terminal\", runId: run.runId, status: run.status }\n const item = steerItem(input.message)\n const admission = yield* notifications.admit(input.runId, {\n _tag: \"human-steer\",\n id: input.message.messageId,\n delivery: \"steer\",\n targetLineageId: input.runId,\n provenance: {\n sourceRunId: input.runId,\n sourceLineageId: input.runId,\n sourceTurn: 0,\n sourceActor: `${input.message.principal.kind}:${input.message.principal.id}`,\n ...(input.message.attribution === undefined ? {} : { attribution: input.message.attribution })\n },\n payload: SteerPayload.encode(item)\n }, input.version).pipe(\n Effect.mapError((cause) =>\n cause instanceof NotificationQueue.NotificationError ? cause : new PersistenceError({\n operation: \"control.steer.notification\",\n message: \"Failed to admit steering notification\",\n cause\n })\n )\n )\n const inputReceipt = (): Receipt => {\n if (input.version === undefined || item.kind !== \"Message\") {\n return accepted(input.idempotencyKey, input.runId)\n }\n const payload = admission.consumedNotification?.payload as { body?: string } | undefined\n return {\n _tag: \"Accepted\",\n receiptId: input.idempotencyKey,\n runId: input.runId,\n inputConsumed: admission.consumed === true,\n inputBody: payload?.body ?? item.body\n }\n }\n if (input.version !== undefined && (admission.consumed || admission.duplicate)) {\n return inputReceipt()\n }\n if (admission.decision === \"rejected-full\") {\n return yield* Effect.fail(\n new NotificationQueue.NotificationError({\n code: \"notification_full\",\n notificationId: input.message.messageId,\n message: \"Steering queue is full; retry after pending notifications are delivered\"\n })\n )\n }\n // `createdAt` is the caller's own stated time, and the enqueue\n // entry is the one place it is kept: `steerItem` strips the control\n // envelope before the message reaches the queue, so a field the\n // journal did not carry was a field nothing ever read.\n yield* emit(input.runId, Steering.enqueuedEventType, {\n runId: input.runId,\n messageId: input.message.messageId,\n kind: item.kind,\n createdAt: input.message.createdAt\n })\n yield* wake(run, input.message.messageId)\n return inputReceipt()\n })\n ))\n )\n ),\n signal: Effect.fn(\"Control.signal\")((submitted: SignalInput) =>\n confined(\n submitted,\n Effect.flatMap(snapshotSignal(submitted), (input) =>\n Effect.gen(function*() {\n const principal = yield* runtime.stampPrincipal(input.principal)\n const key = fingerprint(\"signal\", principal, input)\n const durableKey = mutationKey(\"signal\", input.idempotencyKey, principal)\n // Admission, payload and receipt commit together before any engine\n // operation. The writer is released before completing a deferred.\n const receipt = yield* mutate(\n \"signal\",\n input.idempotencyKey,\n principal,\n key,\n Effect.gen(function*() {\n const current = yield* getRun(input.runId)\n if (terminal(current.status)) {\n return { _tag: \"Terminal\" as const, runId: current.runId, status: current.status }\n }\n // The admitting identity is stored with the command: whether the\n // signal may answer a human wait is decided at delivery, which\n // can be a replay after restart with no caller present.\n yield* runtime.admitSignal(durableKey, input.runId, input.signal, principal)\n yield* emit(input.runId, \"control.signal.admitted\", {\n commandId: durableKey,\n runId: input.runId,\n name: input.signal.name\n })\n return accepted(input.idempotencyKey, input.runId)\n }),\n true,\n true\n )\n if (receipt._tag !== \"Accepted\" && receipt._tag !== \"AlreadyApplied\") return receipt\n const command = yield* runtime.signalCommand(durableKey)\n if (command === undefined || command.state === \"delivered\" || command.state === \"terminal\") return receipt\n if (command.state === \"rejected\") {\n return yield* new NoMatchingWait({ runId: input.runId, waitName: input.signal.name })\n }\n const delivery = Option.isNone(executor) ?\n \"unknown\" as const\n : yield* executor.value.deliverSignal({ ...command })\n if (delivery === \"no-match\") {\n yield* runtime.settleSignal(durableKey, \"rejected\")\n return yield* new NoMatchingWait({ runId: input.runId, waitName: input.signal.name })\n }\n if (delivery === \"refused\") {\n yield* runtime.settleSignal(durableKey, \"rejected\")\n return yield* new Unauthorized({\n message: `This caller has no authority to answer \"${input.signal.name}\" on run ${input.runId}`\n })\n }\n if (delivery === \"delivered\") {\n yield* runtime.settleSignal(durableKey, \"delivered\")\n }\n return receipt\n }))\n )\n ),\n cancel: Effect.fn(\"Control.cancel\")((submitted) =>\n confined(\n submitted,\n Effect.flatMap(\n snapshotReasonedMutation(\"cancel\", submitted),\n (input) =>\n Effect.flatMap(runtime.stampPrincipal(input.principal), (principal) =>\n mutate(\n \"cancel\",\n input.idempotencyKey,\n principal,\n fingerprint(\"cancel\", principal, input),\n Effect.gen(function*() {\n const current = yield* getRun(input.runId)\n // A run that has already settled cannot be cancelled, and a cancel\n // request journaled against it would be a request nothing can ever\n // act on. Answer with what actually happened to the run.\n if (terminal(current.status)) {\n yield* reconcileTerminal(input.runId, current.status)\n return { _tag: \"Terminal\", runId: current.runId, status: current.status }\n }\n // The durable half, and the only half that reaches a run another\n // process owns: fibers are process-local, so an interrupt can only\n // stop a run this process is driving. The executor writes\n // `cancel_requested_at_ms` on the engine row instead, and the\n // owner's cancel poll acts on it within a heartbeat.\n //\n // It runs INSIDE the mutation's transaction on purpose. An engine\n // that refuses the request rolls the whole cancel back — no\n // attribution event, no terminal control status — because a\n // control row that says `cancelled` while the engine row is still\n // running is the one state an operator can never recover from.\n //\n // It runs BEFORE the attribution event for the mirror-image\n // reason. The control row this plane read may be stale — the two\n // `flows_runs` tables are two files in the shipped CLI — and an\n // engine row that has already settled makes the cancel a request\n // nobody can act on. Attributing and transitioning it anyway is\n // exactly the terminal disagreement B-11 forbids, so the engine's\n // own status becomes the receipt and nothing else happens.\n const record = yield* executorRequestCancel(input.runId)\n if (typeof record !== \"string\") {\n // The engine finished the run before the request arrived. Nobody\n // cancelled anything, so no attribution is written; but leaving\n // the control row saying `running` for a run the engine settled\n // is permanent, because no verb converges it: `cancel` answers\n // `Terminal` without writing and `resume` refuses a settled run.\n // `ps` listed it live and `gc` skipped it forever. Writing the\n // ENGINE's own status is convergence, not the terminal\n // disagreement B-11 forbids, which is a control row reading\n // `cancelled` over an engine row reading `completed`.\n yield* reconcileTerminal(input.runId, record.status)\n return { _tag: \"Terminal\", runId: input.runId, status: record.status }\n }\n // Attribution is keyed on the request being NEWLY recorded. A\n // cancel that committed without it would be durable and anonymous,\n // and nothing afterwards could say who asked — but this mutation\n // runs with `replay: false`, so an operator asking a second time\n // re-executes it, and attributing every ask journaled one\n // `control.run.cancel-requested` per ask for one cancellation.\n // `already-requested` is the engine saying the column was set\n // before this call arrived, so the record already exists.\n //\n // It stays BEFORE the interrupt, and in the mutation's own\n // transaction.\n const prior = yield* runtime.lookupMutation(\n mutationKey(\"cancel\", input.idempotencyKey, principal),\n fingerprint(\"cancel\", principal, input)\n )\n // A retry after cleanup or settlement failed already committed\n // this request's attribution with its acceptance receipt.\n if (record !== \"already-requested\" && prior === undefined) {\n yield* emit(\n input.runId,\n Cancellation.requestedEventType,\n json({\n runId: input.runId,\n source: \"control\",\n principal,\n ...(input.reason === undefined ? {} : { reason: input.reason })\n })\n )\n }\n return accepted(input.idempotencyKey, input.runId)\n }),\n false\n ).pipe(\n Effect.flatMap((receipt) =>\n Effect.gen(function*() {\n if (receipt._tag !== \"Accepted\") return receipt\n // The request and receipt are committed before any finalizer runs.\n // Finalizers may use this same mutation permit or durable writer.\n const settle: NonNullable<Parameters<typeof runtime.interrupt>[1]> = (effect) =>\n transact(\n \"cancel\",\n Effect.gen(function*() {\n const run = yield* effect\n yield* emit(\n input.runId,\n `control.run.${run.status}`,\n {\n runId: input.runId,\n status: run.status,\n ...ControlFacts.runFact(run)\n } as ControlEvent[\"payload\"]\n )\n return run\n })\n )\n const run = yield* runtime.interrupt(input.runId, settle).pipe(\n Effect.catchTag(\"/control/ClaimLost\", () =>\n Effect.gen(function*() {\n const current = yield* getRun(input.runId)\n if (terminal(current.status)) return current\n // A live peer acts on the durable request. An unowned park\n // needs this caller to claim it and finish the cancellation.\n if (live(current.status) && current.ownerId !== undefined) return undefined\n return yield* runtime.resume(input.runId).pipe(\n Effect.andThen(runtime.interrupt(input.runId, settle)),\n Effect.catchTag(\"/control/ClaimLost\", () => Effect.succeed(undefined))\n )\n }))\n )\n return run === undefined\n ? receipt\n : terminalOrAccepted(input.idempotencyKey, run)\n })\n ),\n // Both rows, before the process that asked goes away. The engine row\n // carries the request the moment the mutation commits, but nothing\n // drives a parked run, so the row stayed `suspended` until some\n // later long-lived engine happened to sweep it: `gc` collected the\n // run in `control.db` and skipped it in `engine.db` for fifteen\n // seconds and six commands in the release validation.\n Effect.tap(() =>\n Effect.gen(function*() {\n yield* executorSettleCancelledPark(input.runId)\n // The engine can finish between the request and local interrupt,\n // or while settling an unowned park. Its read overlay alone does\n // not persist the control row or deliver the terminal watch event.\n const current = yield* getRun(input.runId)\n if (terminal(current.status)) yield* reconcileTerminal(input.runId, current.status)\n })\n )\n ))\n )\n )\n ),\n resume: Effect.fn(\"Control.resume\")((input) => confined(input, runMutation(input))),\n list,\n watch\n }\n return Control.of(service)\n })\n)\n"]}