@telora/daemon 0.22.132 → 0.22.136

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 (549) hide show
  1. package/build-info.json +6 -3
  2. package/dist/audit/audit-hooks.d.ts +6 -2
  3. package/dist/audit/audit-hooks.d.ts.map +1 -1
  4. package/dist/audit/audit-hooks.js +12 -5
  5. package/dist/audit/audit-hooks.js.map +1 -1
  6. package/dist/audit/audit-phase.js +1 -1
  7. package/dist/audit/audit-phase.js.map +1 -1
  8. package/dist/backends/index.d.ts.map +1 -1
  9. package/dist/backends/index.js +1 -0
  10. package/dist/backends/index.js.map +1 -1
  11. package/dist/completion/completion-phase-registry.d.ts +4 -0
  12. package/dist/completion/completion-phase-registry.d.ts.map +1 -1
  13. package/dist/completion/completion-phase-registry.js +63 -18
  14. package/dist/completion/completion-phase-registry.js.map +1 -1
  15. package/dist/completion/exit-classification.d.ts.map +1 -1
  16. package/dist/completion/exit-classification.js +1 -0
  17. package/dist/completion/exit-classification.js.map +1 -1
  18. package/dist/completion/review-approved-head-gate.d.ts +53 -0
  19. package/dist/completion/review-approved-head-gate.d.ts.map +1 -0
  20. package/dist/completion/review-approved-head-gate.js +124 -0
  21. package/dist/completion/review-approved-head-gate.js.map +1 -0
  22. package/dist/completion/review-census-record.d.ts +52 -0
  23. package/dist/completion/review-census-record.d.ts.map +1 -0
  24. package/dist/completion/review-census-record.js +145 -0
  25. package/dist/completion/review-census-record.js.map +1 -0
  26. package/dist/completion/review-exit-deps.d.ts +5 -1
  27. package/dist/completion/review-exit-deps.d.ts.map +1 -1
  28. package/dist/completion/review-exit-deps.js +7 -2
  29. package/dist/completion/review-exit-deps.js.map +1 -1
  30. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  31. package/dist/completion/review-exit-phase.js +29 -16
  32. package/dist/completion/review-exit-phase.js.map +1 -1
  33. package/dist/completion/review-exit-progress.d.ts +8 -0
  34. package/dist/completion/review-exit-progress.d.ts.map +1 -1
  35. package/dist/completion/review-exit-progress.js +14 -0
  36. package/dist/completion/review-exit-progress.js.map +1 -1
  37. package/dist/completion/review-exit-shortfall-park.d.ts +14 -0
  38. package/dist/completion/review-exit-shortfall-park.d.ts.map +1 -0
  39. package/dist/completion/review-exit-shortfall-park.js +52 -0
  40. package/dist/completion/review-exit-shortfall-park.js.map +1 -0
  41. package/dist/completion/review-exit-shortfall.js +1 -1
  42. package/dist/completion/review-exit-shortfall.js.map +1 -1
  43. package/dist/completion/review-exit-verdict-gate.d.ts +58 -0
  44. package/dist/completion/review-exit-verdict-gate.d.ts.map +1 -1
  45. package/dist/completion/review-exit-verdict-gate.js +68 -8
  46. package/dist/completion/review-exit-verdict-gate.js.map +1 -1
  47. package/dist/completion/review-next-step.d.ts +15 -3
  48. package/dist/completion/review-next-step.d.ts.map +1 -1
  49. package/dist/completion/review-next-step.js +7 -2
  50. package/dist/completion/review-next-step.js.map +1 -1
  51. package/dist/completion/standing-approval-convergence.d.ts +68 -0
  52. package/dist/completion/standing-approval-convergence.d.ts.map +1 -0
  53. package/dist/completion/standing-approval-convergence.js +230 -0
  54. package/dist/completion/standing-approval-convergence.js.map +1 -0
  55. package/dist/completion/standing-approval-deps.d.ts +5 -0
  56. package/dist/completion/standing-approval-deps.d.ts.map +1 -0
  57. package/dist/completion/standing-approval-deps.js +37 -0
  58. package/dist/completion/standing-approval-deps.js.map +1 -0
  59. package/dist/completion/state-cascade.d.ts +11 -0
  60. package/dist/completion/state-cascade.d.ts.map +1 -1
  61. package/dist/completion/state-cascade.js +40 -1
  62. package/dist/completion/state-cascade.js.map +1 -1
  63. package/dist/completion/team-lifecycle.d.ts +14 -2
  64. package/dist/completion/team-lifecycle.d.ts.map +1 -1
  65. package/dist/completion/team-lifecycle.js +36 -36
  66. package/dist/completion/team-lifecycle.js.map +1 -1
  67. package/dist/completion/terminated-work-reconcile.d.ts +3 -1
  68. package/dist/completion/terminated-work-reconcile.d.ts.map +1 -1
  69. package/dist/completion/terminated-work-reconcile.js +24 -11
  70. package/dist/completion/terminated-work-reconcile.js.map +1 -1
  71. package/dist/delivery/delivery-advance-block.d.ts +6 -0
  72. package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
  73. package/dist/delivery/delivery-advance-block.js +29 -3
  74. package/dist/delivery/delivery-advance-block.js.map +1 -1
  75. package/dist/delivery/delivery-reconciler.d.ts.map +1 -1
  76. package/dist/delivery/delivery-reconciler.js +4 -1
  77. package/dist/delivery/delivery-reconciler.js.map +1 -1
  78. package/dist/delivery/operator-hold.d.ts.map +1 -1
  79. package/dist/delivery/operator-hold.js +3 -1
  80. package/dist/delivery/operator-hold.js.map +1 -1
  81. package/dist/directive/directive-executor.d.ts.map +1 -1
  82. package/dist/directive/directive-executor.js +6 -0
  83. package/dist/directive/directive-executor.js.map +1 -1
  84. package/dist/directive/directive-queue.d.ts +8 -0
  85. package/dist/directive/directive-queue.d.ts.map +1 -1
  86. package/dist/directive/directive-queue.js +20 -0
  87. package/dist/directive/directive-queue.js.map +1 -1
  88. package/dist/directive/phase-sync.d.ts +5 -0
  89. package/dist/directive/phase-sync.d.ts.map +1 -1
  90. package/dist/directive/phase-sync.js +11 -1
  91. package/dist/directive/phase-sync.js.map +1 -1
  92. package/dist/directive/stranded-review-reroute.d.ts +37 -0
  93. package/dist/directive/stranded-review-reroute.d.ts.map +1 -0
  94. package/dist/directive/stranded-review-reroute.js +150 -0
  95. package/dist/directive/stranded-review-reroute.js.map +1 -0
  96. package/dist/focus/focus-engine.d.ts.map +1 -1
  97. package/dist/focus/focus-engine.js +15 -3
  98. package/dist/focus/focus-engine.js.map +1 -1
  99. package/dist/focus/focus-executor.d.ts.map +1 -1
  100. package/dist/focus/focus-executor.js +9 -65
  101. package/dist/focus/focus-executor.js.map +1 -1
  102. package/dist/focus/focus-lifecycle.d.ts +12 -0
  103. package/dist/focus/focus-lifecycle.d.ts.map +1 -1
  104. package/dist/focus/focus-lifecycle.js +66 -37
  105. package/dist/focus/focus-lifecycle.js.map +1 -1
  106. package/dist/focus/focus-phase.d.ts.map +1 -1
  107. package/dist/focus/focus-phase.js +6 -0
  108. package/dist/focus/focus-phase.js.map +1 -1
  109. package/dist/focus/focus-spawn-decision.d.ts.map +1 -1
  110. package/dist/focus/focus-spawn-decision.js +1 -0
  111. package/dist/focus/focus-spawn-decision.js.map +1 -1
  112. package/dist/focus/focus-team-state.d.ts +10 -0
  113. package/dist/focus/focus-team-state.d.ts.map +1 -1
  114. package/dist/focus/focus-team-state.js +19 -1
  115. package/dist/focus/focus-team-state.js.map +1 -1
  116. package/dist/focus/listener-auto-advance.d.ts.map +1 -1
  117. package/dist/focus/listener-auto-advance.js +1 -0
  118. package/dist/focus/listener-auto-advance.js.map +1 -1
  119. package/dist/focus/listener-spawn.d.ts +10 -0
  120. package/dist/focus/listener-spawn.d.ts.map +1 -1
  121. package/dist/focus/listener-spawn.js +46 -4
  122. package/dist/focus/listener-spawn.js.map +1 -1
  123. package/dist/focus/listener-state.d.ts.map +1 -1
  124. package/dist/focus/listener-state.js +11 -1
  125. package/dist/focus/listener-state.js.map +1 -1
  126. package/dist/focus/listener.d.ts +42 -0
  127. package/dist/focus/listener.d.ts.map +1 -1
  128. package/dist/focus/listener.js +62 -33
  129. package/dist/focus/listener.js.map +1 -1
  130. package/dist/focus/pending-review-approved-head.d.ts +41 -0
  131. package/dist/focus/pending-review-approved-head.d.ts.map +1 -0
  132. package/dist/focus/pending-review-approved-head.js +198 -0
  133. package/dist/focus/pending-review-approved-head.js.map +1 -0
  134. package/dist/focus/pending-spawn-pass-deps.d.ts +5 -0
  135. package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
  136. package/dist/focus/pending-spawn-pass-deps.js +2 -1
  137. package/dist/focus/pending-spawn-pass-deps.js.map +1 -1
  138. package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -1
  139. package/dist/focus/pending-spawn-review-next-step.js +26 -4
  140. package/dist/focus/pending-spawn-review-next-step.js.map +1 -1
  141. package/dist/focus/review-spawn-coverage.d.ts +87 -0
  142. package/dist/focus/review-spawn-coverage.d.ts.map +1 -0
  143. package/dist/focus/review-spawn-coverage.js +104 -0
  144. package/dist/focus/review-spawn-coverage.js.map +1 -0
  145. package/dist/focus/session-health.d.ts +5 -2
  146. package/dist/focus/session-health.d.ts.map +1 -1
  147. package/dist/focus/session-health.js +2 -1
  148. package/dist/focus/session-health.js.map +1 -1
  149. package/dist/focus/session-process-reap.d.ts +50 -0
  150. package/dist/focus/session-process-reap.d.ts.map +1 -0
  151. package/dist/focus/session-process-reap.js +77 -0
  152. package/dist/focus/session-process-reap.js.map +1 -0
  153. package/dist/focus/unchanged-reviewed-head.d.ts +40 -0
  154. package/dist/focus/unchanged-reviewed-head.d.ts.map +1 -0
  155. package/dist/focus/unchanged-reviewed-head.js +84 -0
  156. package/dist/focus/unchanged-reviewed-head.js.map +1 -0
  157. package/dist/focus/verify-open-issues.d.ts +4 -19
  158. package/dist/focus/verify-open-issues.d.ts.map +1 -1
  159. package/dist/focus/verify-open-issues.js +83 -41
  160. package/dist/focus/verify-open-issues.js.map +1 -1
  161. package/dist/git/focus-integration-sync.d.ts +61 -0
  162. package/dist/git/focus-integration-sync.d.ts.map +1 -0
  163. package/dist/git/focus-integration-sync.js +73 -0
  164. package/dist/git/focus-integration-sync.js.map +1 -0
  165. package/dist/git/focus-own-delta.d.ts +38 -0
  166. package/dist/git/focus-own-delta.d.ts.map +1 -0
  167. package/dist/git/focus-own-delta.js +193 -0
  168. package/dist/git/focus-own-delta.js.map +1 -0
  169. package/dist/git/index.d.ts +2 -0
  170. package/dist/git/index.d.ts.map +1 -1
  171. package/dist/git/index.js +4 -0
  172. package/dist/git/index.js.map +1 -1
  173. package/dist/git/merge.d.ts.map +1 -1
  174. package/dist/git/merge.js +11 -1
  175. package/dist/git/merge.js.map +1 -1
  176. package/dist/git/resolution-restore.d.ts +66 -0
  177. package/dist/git/resolution-restore.d.ts.map +1 -0
  178. package/dist/git/resolution-restore.js +331 -0
  179. package/dist/git/resolution-restore.js.map +1 -0
  180. package/dist/loops/engine.d.ts.map +1 -1
  181. package/dist/loops/engine.js.map +1 -1
  182. package/dist/merge/abandoned-merge-recovery.d.ts +72 -0
  183. package/dist/merge/abandoned-merge-recovery.d.ts.map +1 -0
  184. package/dist/merge/abandoned-merge-recovery.js +117 -0
  185. package/dist/merge/abandoned-merge-recovery.js.map +1 -0
  186. package/dist/merge/focus-merge.d.ts +19 -0
  187. package/dist/merge/focus-merge.d.ts.map +1 -1
  188. package/dist/merge/focus-merge.js +136 -99
  189. package/dist/merge/focus-merge.js.map +1 -1
  190. package/dist/merge/merge-back-activity.d.ts +11 -0
  191. package/dist/merge/merge-back-activity.d.ts.map +1 -0
  192. package/dist/merge/merge-back-activity.js +57 -0
  193. package/dist/merge/merge-back-activity.js.map +1 -0
  194. package/dist/merge/merge-back-conflict.d.ts +119 -0
  195. package/dist/merge/merge-back-conflict.d.ts.map +1 -0
  196. package/dist/merge/merge-back-conflict.js +178 -0
  197. package/dist/merge/merge-back-conflict.js.map +1 -0
  198. package/dist/merge/merge-back-followup.d.ts +109 -0
  199. package/dist/merge/merge-back-followup.d.ts.map +1 -0
  200. package/dist/merge/merge-back-followup.js +316 -0
  201. package/dist/merge/merge-back-followup.js.map +1 -0
  202. package/dist/merge/merge-back-loop.d.ts +2 -0
  203. package/dist/merge/merge-back-loop.d.ts.map +1 -1
  204. package/dist/merge/merge-back-loop.js +14 -15
  205. package/dist/merge/merge-back-loop.js.map +1 -1
  206. package/dist/merge/merge-conflict-escalation.d.ts +12 -0
  207. package/dist/merge/merge-conflict-escalation.d.ts.map +1 -1
  208. package/dist/merge/merge-conflict-escalation.js +37 -2
  209. package/dist/merge/merge-conflict-escalation.js.map +1 -1
  210. package/dist/merge/merge-gate-coverage.d.ts.map +1 -1
  211. package/dist/merge/merge-gate-coverage.js +1 -0
  212. package/dist/merge/merge-gate-coverage.js.map +1 -1
  213. package/dist/prompt/prompt-listing.d.ts +5 -0
  214. package/dist/prompt/prompt-listing.d.ts.map +1 -1
  215. package/dist/prompt/prompt-listing.js +35 -0
  216. package/dist/prompt/prompt-listing.js.map +1 -1
  217. package/dist/prompt-sections/routing-decider-sections.d.ts.map +1 -1
  218. package/dist/prompt-sections/routing-decider-sections.js +2 -0
  219. package/dist/prompt-sections/routing-decider-sections.js.map +1 -1
  220. package/dist/prompt-sections/shortfall-park-section.d.ts +43 -0
  221. package/dist/prompt-sections/shortfall-park-section.d.ts.map +1 -0
  222. package/dist/prompt-sections/shortfall-park-section.js +36 -0
  223. package/dist/prompt-sections/shortfall-park-section.js.map +1 -0
  224. package/dist/queries/agent-resolvable-promotion.d.ts +16 -2
  225. package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -1
  226. package/dist/queries/agent-resolvable-promotion.js +30 -3
  227. package/dist/queries/agent-resolvable-promotion.js.map +1 -1
  228. package/dist/queries/cause-key.d.ts +17 -22
  229. package/dist/queries/cause-key.d.ts.map +1 -1
  230. package/dist/queries/cause-key.js +50 -1
  231. package/dist/queries/cause-key.js.map +1 -1
  232. package/dist/queries/commit-attributions.d.ts +18 -0
  233. package/dist/queries/commit-attributions.d.ts.map +1 -0
  234. package/dist/queries/commit-attributions.js +39 -0
  235. package/dist/queries/commit-attributions.js.map +1 -0
  236. package/dist/queries/deliveries.d.ts.map +1 -1
  237. package/dist/queries/deliveries.js +3 -1
  238. package/dist/queries/deliveries.js.map +1 -1
  239. package/dist/queries/delivery-gate-state.d.ts +21 -5
  240. package/dist/queries/delivery-gate-state.d.ts.map +1 -1
  241. package/dist/queries/delivery-gate-state.js +35 -9
  242. package/dist/queries/delivery-gate-state.js.map +1 -1
  243. package/dist/queries/escalation-consumption.d.ts.map +1 -1
  244. package/dist/queries/escalation-consumption.js +2 -1
  245. package/dist/queries/escalation-consumption.js.map +1 -1
  246. package/dist/queries/escalation-field-bounds.d.ts +48 -0
  247. package/dist/queries/escalation-field-bounds.d.ts.map +1 -0
  248. package/dist/queries/escalation-field-bounds.js +83 -0
  249. package/dist/queries/escalation-field-bounds.js.map +1 -0
  250. package/dist/queries/escalation-refusal.d.ts +88 -0
  251. package/dist/queries/escalation-refusal.d.ts.map +1 -0
  252. package/dist/queries/escalation-refusal.js +217 -0
  253. package/dist/queries/escalation-refusal.js.map +1 -0
  254. package/dist/queries/escalation-suppression.d.ts +6 -0
  255. package/dist/queries/escalation-suppression.d.ts.map +1 -1
  256. package/dist/queries/escalation-suppression.js +4 -13
  257. package/dist/queries/escalation-suppression.js.map +1 -1
  258. package/dist/queries/escalations.d.ts +5 -13
  259. package/dist/queries/escalations.d.ts.map +1 -1
  260. package/dist/queries/escalations.js +25 -30
  261. package/dist/queries/escalations.js.map +1 -1
  262. package/dist/queries/filing-observation.d.ts.map +1 -1
  263. package/dist/queries/filing-observation.js +3 -1
  264. package/dist/queries/filing-observation.js.map +1 -1
  265. package/dist/queries/focus-review-approval.d.ts +2 -0
  266. package/dist/queries/focus-review-approval.d.ts.map +1 -1
  267. package/dist/queries/focus-review-approval.js +7 -2
  268. package/dist/queries/focus-review-approval.js.map +1 -1
  269. package/dist/queries/focuses.d.ts.map +1 -1
  270. package/dist/queries/focuses.js +2 -1
  271. package/dist/queries/focuses.js.map +1 -1
  272. package/dist/queries/incident-correlation.d.ts.map +1 -1
  273. package/dist/queries/incident-correlation.js +4 -1
  274. package/dist/queries/incident-correlation.js.map +1 -1
  275. package/dist/queries/misattributed-commits-record.d.ts +26 -0
  276. package/dist/queries/misattributed-commits-record.d.ts.map +1 -0
  277. package/dist/queries/misattributed-commits-record.js +5 -0
  278. package/dist/queries/misattributed-commits-record.js.map +1 -0
  279. package/dist/queries/reality-tree.d.ts.map +1 -1
  280. package/dist/queries/reality-tree.js +2 -1
  281. package/dist/queries/reality-tree.js.map +1 -1
  282. package/dist/queries/schemas.d.ts +3 -0
  283. package/dist/queries/schemas.d.ts.map +1 -1
  284. package/dist/queries/schemas.js +1 -0
  285. package/dist/queries/schemas.js.map +1 -1
  286. package/dist/queries/shared.js +1 -1
  287. package/dist/queries/shortfall-park-record.d.ts +48 -0
  288. package/dist/queries/shortfall-park-record.d.ts.map +1 -0
  289. package/dist/queries/shortfall-park-record.js +31 -0
  290. package/dist/queries/shortfall-park-record.js.map +1 -0
  291. package/dist/queries/shortfall-rulings.d.ts +71 -0
  292. package/dist/queries/shortfall-rulings.d.ts.map +1 -0
  293. package/dist/queries/shortfall-rulings.js +53 -0
  294. package/dist/queries/shortfall-rulings.js.map +1 -0
  295. package/dist/queries/verification.d.ts +20 -1
  296. package/dist/queries/verification.d.ts.map +1 -1
  297. package/dist/queries/verification.js +48 -8
  298. package/dist/queries/verification.js.map +1 -1
  299. package/dist/resolvers/index.d.ts +2 -2
  300. package/dist/resolvers/index.d.ts.map +1 -1
  301. package/dist/resolvers/index.js +1 -1
  302. package/dist/resolvers/index.js.map +1 -1
  303. package/dist/resolvers/shared/delivery-trailer.d.ts +99 -0
  304. package/dist/resolvers/shared/delivery-trailer.d.ts.map +1 -0
  305. package/dist/resolvers/shared/delivery-trailer.js +103 -0
  306. package/dist/resolvers/shared/delivery-trailer.js.map +1 -0
  307. package/dist/resolvers/shared/git-diff.d.ts +11 -84
  308. package/dist/resolvers/shared/git-diff.d.ts.map +1 -1
  309. package/dist/resolvers/shared/git-diff.js +17 -84
  310. package/dist/resolvers/shared/git-diff.js.map +1 -1
  311. package/dist/resolvers/shared/review-window-commits.d.ts.map +1 -1
  312. package/dist/resolvers/shared/review-window-commits.js +1 -0
  313. package/dist/resolvers/shared/review-window-commits.js.map +1 -1
  314. package/dist/session/session-lineage.d.ts.map +1 -1
  315. package/dist/session/session-lineage.js +1 -0
  316. package/dist/session/session-lineage.js.map +1 -1
  317. package/dist/shell/config.d.ts +2 -1
  318. package/dist/shell/config.d.ts.map +1 -1
  319. package/dist/shell/config.js +21 -4
  320. package/dist/shell/config.js.map +1 -1
  321. package/dist/shell/crash-recovery.d.ts +3 -7
  322. package/dist/shell/crash-recovery.d.ts.map +1 -1
  323. package/dist/shell/crash-recovery.js +28 -31
  324. package/dist/shell/crash-recovery.js.map +1 -1
  325. package/dist/shell/orphan-capture.d.ts +42 -0
  326. package/dist/shell/orphan-capture.d.ts.map +1 -0
  327. package/dist/shell/orphan-capture.js +53 -0
  328. package/dist/shell/orphan-capture.js.map +1 -0
  329. package/dist/shell/worker-pidfile.d.ts +22 -4
  330. package/dist/shell/worker-pidfile.d.ts.map +1 -1
  331. package/dist/shell/worker-pidfile.js +51 -13
  332. package/dist/shell/worker-pidfile.js.map +1 -1
  333. package/dist/spawn/helpers.d.ts +3 -0
  334. package/dist/spawn/helpers.d.ts.map +1 -1
  335. package/dist/spawn/helpers.js +28 -9
  336. package/dist/spawn/helpers.js.map +1 -1
  337. package/dist/spawn/lead-launch.d.ts +34 -0
  338. package/dist/spawn/lead-launch.d.ts.map +1 -0
  339. package/dist/spawn/lead-launch.js +34 -0
  340. package/dist/spawn/lead-launch.js.map +1 -0
  341. package/dist/spawn/lead-process-ownership.d.ts +91 -0
  342. package/dist/spawn/lead-process-ownership.d.ts.map +1 -0
  343. package/dist/spawn/lead-process-ownership.js +120 -0
  344. package/dist/spawn/lead-process-ownership.js.map +1 -0
  345. package/dist/spawn/lifecycle.d.ts +43 -3
  346. package/dist/spawn/lifecycle.d.ts.map +1 -1
  347. package/dist/spawn/lifecycle.js +75 -44
  348. package/dist/spawn/lifecycle.js.map +1 -1
  349. package/dist/spawn/liveness.d.ts.map +1 -1
  350. package/dist/spawn/liveness.js +5 -1
  351. package/dist/spawn/liveness.js.map +1 -1
  352. package/dist/spawn/one-shot-process-ownership.d.ts +48 -0
  353. package/dist/spawn/one-shot-process-ownership.d.ts.map +1 -0
  354. package/dist/spawn/one-shot-process-ownership.js +44 -0
  355. package/dist/spawn/one-shot-process-ownership.js.map +1 -0
  356. package/dist/spawn/process-group-kill.d.ts +79 -0
  357. package/dist/spawn/process-group-kill.d.ts.map +1 -0
  358. package/dist/spawn/process-group-kill.js +210 -0
  359. package/dist/spawn/process-group-kill.js.map +1 -0
  360. package/dist/spawn/process-spawn.d.ts +18 -1
  361. package/dist/spawn/process-spawn.d.ts.map +1 -1
  362. package/dist/spawn/process-spawn.js +51 -20
  363. package/dist/spawn/process-spawn.js.map +1 -1
  364. package/dist/spawn/resolution-budget.d.ts +38 -0
  365. package/dist/spawn/resolution-budget.d.ts.map +1 -0
  366. package/dist/spawn/resolution-budget.js +87 -0
  367. package/dist/spawn/resolution-budget.js.map +1 -0
  368. package/dist/spawn/review-hold-park.d.ts.map +1 -1
  369. package/dist/spawn/review-hold-park.js +37 -5
  370. package/dist/spawn/review-hold-park.js.map +1 -1
  371. package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
  372. package/dist/spawn/spawn-cooldown.js +9 -0
  373. package/dist/spawn/spawn-cooldown.js.map +1 -1
  374. package/dist/spawn/untracked-lead-sweep.d.ts +29 -0
  375. package/dist/spawn/untracked-lead-sweep.d.ts.map +1 -0
  376. package/dist/spawn/untracked-lead-sweep.js +100 -0
  377. package/dist/spawn/untracked-lead-sweep.js.map +1 -0
  378. package/dist/spawn/worker-registry.d.ts.map +1 -1
  379. package/dist/spawn/worker-registry.js +4 -1
  380. package/dist/spawn/worker-registry.js.map +1 -1
  381. package/dist/spawn/worktree-session.d.ts.map +1 -1
  382. package/dist/spawn/worktree-session.js +8 -6
  383. package/dist/spawn/worktree-session.js.map +1 -1
  384. package/dist/testing/fixtures/exit-capture-verify.d.ts +41 -0
  385. package/dist/testing/fixtures/exit-capture-verify.d.ts.map +1 -0
  386. package/dist/testing/fixtures/exit-capture-verify.js +152 -0
  387. package/dist/testing/fixtures/exit-capture-verify.js.map +1 -0
  388. package/dist/testing/fixtures/index.js +1 -1
  389. package/dist/testing/fixtures/pending-spawn-world.d.ts +7 -0
  390. package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
  391. package/dist/testing/fixtures/pending-spawn-world.js +21 -1
  392. package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
  393. package/dist/testing/fixtures/stubborn-lead-process.d.ts +22 -0
  394. package/dist/testing/fixtures/stubborn-lead-process.d.ts.map +1 -0
  395. package/dist/testing/fixtures/stubborn-lead-process.js +68 -0
  396. package/dist/testing/fixtures/stubborn-lead-process.js.map +1 -0
  397. package/dist/types/config.d.ts +13 -0
  398. package/dist/types/config.d.ts.map +1 -1
  399. package/dist/types/focus.d.ts +7 -0
  400. package/dist/types/focus.d.ts.map +1 -1
  401. package/dist/types/index.js +1 -1
  402. package/dist/verify/commit-verdict-record.d.ts +13 -3
  403. package/dist/verify/commit-verdict-record.d.ts.map +1 -1
  404. package/dist/verify/commit-verdict-record.js +45 -25
  405. package/dist/verify/commit-verdict-record.js.map +1 -1
  406. package/dist/verify/credit-rearm.d.ts +18 -0
  407. package/dist/verify/credit-rearm.d.ts.map +1 -0
  408. package/dist/verify/credit-rearm.js +69 -0
  409. package/dist/verify/credit-rearm.js.map +1 -0
  410. package/dist/verify/delivery-commit-set.d.ts +10 -0
  411. package/dist/verify/delivery-commit-set.d.ts.map +1 -0
  412. package/dist/verify/delivery-commit-set.js +82 -0
  413. package/dist/verify/delivery-commit-set.js.map +1 -0
  414. package/dist/verify/explicit-rearm.d.ts.map +1 -1
  415. package/dist/verify/explicit-rearm.js +2 -0
  416. package/dist/verify/explicit-rearm.js.map +1 -1
  417. package/dist/verify/failure-signature.d.ts.map +1 -1
  418. package/dist/verify/failure-signature.js +1 -0
  419. package/dist/verify/failure-signature.js.map +1 -1
  420. package/dist/verify/gate-run-registry.d.ts.map +1 -1
  421. package/dist/verify/gate-run-registry.js +3 -0
  422. package/dist/verify/gate-run-registry.js.map +1 -1
  423. package/dist/verify/injection-stamp.d.ts +29 -0
  424. package/dist/verify/injection-stamp.d.ts.map +1 -0
  425. package/dist/verify/injection-stamp.js +139 -0
  426. package/dist/verify/injection-stamp.js.map +1 -0
  427. package/dist/verify/misattributed-commits-read.d.ts +31 -0
  428. package/dist/verify/misattributed-commits-read.d.ts.map +1 -0
  429. package/dist/verify/misattributed-commits-read.js +47 -0
  430. package/dist/verify/misattributed-commits-read.js.map +1 -0
  431. package/dist/verify/misattributed-commits.d.ts +52 -0
  432. package/dist/verify/misattributed-commits.d.ts.map +1 -0
  433. package/dist/verify/misattributed-commits.js +148 -0
  434. package/dist/verify/misattributed-commits.js.map +1 -0
  435. package/dist/verify/no-own-delta-verdict.d.ts +47 -0
  436. package/dist/verify/no-own-delta-verdict.d.ts.map +1 -0
  437. package/dist/verify/no-own-delta-verdict.js +74 -0
  438. package/dist/verify/no-own-delta-verdict.js.map +1 -0
  439. package/dist/verify/shortfall-park-escalation.d.ts +41 -0
  440. package/dist/verify/shortfall-park-escalation.d.ts.map +1 -0
  441. package/dist/verify/shortfall-park-escalation.js +177 -0
  442. package/dist/verify/shortfall-park-escalation.js.map +1 -0
  443. package/dist/verify/shortfall-park.d.ts +109 -0
  444. package/dist/verify/shortfall-park.d.ts.map +1 -0
  445. package/dist/verify/shortfall-park.js +208 -0
  446. package/dist/verify/shortfall-park.js.map +1 -0
  447. package/dist/verify/shortfall-repeat.d.ts +47 -16
  448. package/dist/verify/shortfall-repeat.d.ts.map +1 -1
  449. package/dist/verify/shortfall-repeat.js +77 -23
  450. package/dist/verify/shortfall-repeat.js.map +1 -1
  451. package/dist/verify/shortfall-rulings.d.ts +106 -0
  452. package/dist/verify/shortfall-rulings.d.ts.map +1 -0
  453. package/dist/verify/shortfall-rulings.js +118 -0
  454. package/dist/verify/shortfall-rulings.js.map +1 -0
  455. package/dist/verify/stall-detectors.d.ts.map +1 -1
  456. package/dist/verify/stall-detectors.js +10 -4
  457. package/dist/verify/stall-detectors.js.map +1 -1
  458. package/dist/verify/verification-attribution-base.d.ts +26 -0
  459. package/dist/verify/verification-attribution-base.d.ts.map +1 -0
  460. package/dist/verify/verification-attribution-base.js +127 -0
  461. package/dist/verify/verification-attribution-base.js.map +1 -0
  462. package/dist/verify/verification-attribution-deps.d.ts +32 -0
  463. package/dist/verify/verification-attribution-deps.d.ts.map +1 -0
  464. package/dist/verify/verification-attribution-deps.js +209 -0
  465. package/dist/verify/verification-attribution-deps.js.map +1 -0
  466. package/dist/verify/verification-baseline.d.ts +6 -0
  467. package/dist/verify/verification-baseline.d.ts.map +1 -1
  468. package/dist/verify/verification-baseline.js +27 -11
  469. package/dist/verify/verification-baseline.js.map +1 -1
  470. package/dist/verify/verification-commit-sharing.d.ts.map +1 -1
  471. package/dist/verify/verification-commit-sharing.js +30 -8
  472. package/dist/verify/verification-commit-sharing.js.map +1 -1
  473. package/dist/verify/verification-config.d.ts.map +1 -1
  474. package/dist/verify/verification-config.js +2 -0
  475. package/dist/verify/verification-config.js.map +1 -1
  476. package/dist/verify/verification-default-on.d.ts +3 -0
  477. package/dist/verify/verification-default-on.d.ts.map +1 -1
  478. package/dist/verify/verification-default-on.js +5 -1
  479. package/dist/verify/verification-default-on.js.map +1 -1
  480. package/dist/verify/verification-deps-default.d.ts.map +1 -1
  481. package/dist/verify/verification-deps-default.js +61 -120
  482. package/dist/verify/verification-deps-default.js.map +1 -1
  483. package/dist/verify/verification-deps.d.ts +26 -4
  484. package/dist/verify/verification-deps.d.ts.map +1 -1
  485. package/dist/verify/verification-deterministic.d.ts +15 -0
  486. package/dist/verify/verification-deterministic.d.ts.map +1 -1
  487. package/dist/verify/verification-deterministic.js +1 -12
  488. package/dist/verify/verification-deterministic.js.map +1 -1
  489. package/dist/verify/verification-engine.d.ts +9 -6
  490. package/dist/verify/verification-engine.d.ts.map +1 -1
  491. package/dist/verify/verification-engine.js +43 -62
  492. package/dist/verify/verification-engine.js.map +1 -1
  493. package/dist/verify/verification-evidence-unavailable-feedback.d.ts +2 -1
  494. package/dist/verify/verification-evidence-unavailable-feedback.d.ts.map +1 -1
  495. package/dist/verify/verification-evidence-unavailable-feedback.js +19 -1
  496. package/dist/verify/verification-evidence-unavailable-feedback.js.map +1 -1
  497. package/dist/verify/verification-failure-parser.d.ts +57 -1
  498. package/dist/verify/verification-failure-parser.d.ts.map +1 -1
  499. package/dist/verify/verification-failure-parser.js +116 -10
  500. package/dist/verify/verification-failure-parser.js.map +1 -1
  501. package/dist/verify/verification-feedback.d.ts +60 -43
  502. package/dist/verify/verification-feedback.d.ts.map +1 -1
  503. package/dist/verify/verification-feedback.js +115 -120
  504. package/dist/verify/verification-feedback.js.map +1 -1
  505. package/dist/verify/verification-history-reset.d.ts +2 -1
  506. package/dist/verify/verification-history-reset.d.ts.map +1 -1
  507. package/dist/verify/verification-history-reset.js +4 -2
  508. package/dist/verify/verification-history-reset.js.map +1 -1
  509. package/dist/verify/verification-rework-issue.d.ts +87 -0
  510. package/dist/verify/verification-rework-issue.d.ts.map +1 -0
  511. package/dist/verify/verification-rework-issue.js +212 -0
  512. package/dist/verify/verification-rework-issue.js.map +1 -0
  513. package/dist/verify/verification-rework-messages.d.ts.map +1 -1
  514. package/dist/verify/verification-rework-messages.js +10 -0
  515. package/dist/verify/verification-rework-messages.js.map +1 -1
  516. package/dist/verify/verify-gate-stall.d.ts +2 -0
  517. package/dist/verify/verify-gate-stall.d.ts.map +1 -1
  518. package/dist/verify/verify-gate-stall.js +35 -9
  519. package/dist/verify/verify-gate-stall.js.map +1 -1
  520. package/dist/verify/verify-restatement.d.ts.map +1 -1
  521. package/dist/verify/verify-restatement.js +9 -2
  522. package/dist/verify/verify-restatement.js.map +1 -1
  523. package/dist/worktree/capture-attribution-read.d.ts +47 -0
  524. package/dist/worktree/capture-attribution-read.d.ts.map +1 -0
  525. package/dist/worktree/capture-attribution-read.js +98 -0
  526. package/dist/worktree/capture-attribution-read.js.map +1 -0
  527. package/dist/worktree/capture-attribution.d.ts +26 -0
  528. package/dist/worktree/capture-attribution.d.ts.map +1 -0
  529. package/dist/worktree/capture-attribution.js +111 -0
  530. package/dist/worktree/capture-attribution.js.map +1 -0
  531. package/dist/worktree/index.d.ts.map +1 -1
  532. package/dist/worktree/index.js +2 -1
  533. package/dist/worktree/index.js.map +1 -1
  534. package/dist/worktree/provision.d.ts.map +1 -1
  535. package/dist/worktree/provision.js +23 -6
  536. package/dist/worktree/provision.js.map +1 -1
  537. package/dist/worktree/safety.d.ts +14 -4
  538. package/dist/worktree/safety.d.ts.map +1 -1
  539. package/dist/worktree/safety.js +37 -7
  540. package/dist/worktree/safety.js.map +1 -1
  541. package/dist/worktree/scratch-guard.d.ts +53 -2
  542. package/dist/worktree/scratch-guard.d.ts.map +1 -1
  543. package/dist/worktree/scratch-guard.js +115 -30
  544. package/dist/worktree/scratch-guard.js.map +1 -1
  545. package/dist/worktree/unmerged-capture-escalation.d.ts +52 -0
  546. package/dist/worktree/unmerged-capture-escalation.d.ts.map +1 -0
  547. package/dist/worktree/unmerged-capture-escalation.js +64 -0
  548. package/dist/worktree/unmerged-capture-escalation.js.map +1 -0
  549. package/package.json +2 -2
@@ -1,6 +1,15 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
2
  // Pinned by: packages/daemon/src/completion/review-next-step.test.ts,
3
- // packages/daemon/src/focus/pending-spawn-review-next-step.test.ts
3
+ // packages/daemon/src/focus/parked-shortfall-spawn.test.ts,
4
+ // packages/daemon/src/focus/pending-review-approved-head.test.ts,
5
+ // packages/daemon/src/focus/pending-spawn-review-next-step.test.ts,
6
+ // packages/daemon/src/focus/unchanged-reviewed-head.test.ts,
7
+ // packages/daemon/src/integration/approved-head-gate-failure-respawn-regression.test.ts,
8
+ // packages/daemon/src/integration/approved-head-hold-release-regression.test.ts,
9
+ // packages/daemon/src/integration/failed-verdict-review-exit-respawn-regression.test.ts,
10
+ // packages/daemon/src/integration/failed-verdict-review-loop-regression.test.ts,
11
+ // packages/daemon/src/integration/shortfall-park-incident-regression.test.ts,
12
+ // packages/daemon/src/spawn/review-hold-park-shortfall.test.ts
4
13
  // PINNED-BY-END
5
14
  /**
6
15
  * Pending-spawn gate: a queued NON-review spawn directive is dropped when the
@@ -17,6 +26,14 @@
17
26
  * resolveReviewNextStep), derived here with review_requested_at null, so it holds
18
27
  * even when the directive is consumed BEFORE the window is stamped.
19
28
  *
29
+ * A focus whose EVERY verify delivery is parked on a repeating verify shortfall
30
+ * (the 'parked' decision, verify/shortfall-park.ts) drops a queued coding
31
+ * directive too: open work filed on a parked delivery is not coding work, and a
32
+ * coding lead spawned onto it has nothing truthful to commit -- it stamps the
33
+ * work done and feeds the next identical verify failure. No coding team spawns
34
+ * for it until verify re-judges a changed delivery commit set (or a ruling) and
35
+ * releases the park.
36
+ *
20
37
  * A REVIEW-lineage directive is never dropped here: it is the next step. When the
21
38
  * deliveries or issues cannot be read, the directive is DEFERRED: it stays queued
22
39
  * and nothing spawns this poll. Spawning the coding lead on an unreadable state
@@ -124,7 +141,9 @@ async function readReviewNextStep(focus, deps) {
124
141
  });
125
142
  if (decision.step === 'issues_unreadable')
126
143
  return { next: 'unreadable', what: 'issues', error: decision.error };
127
- return { next: decision.step === 'review' ? 'review' : 'coding' };
144
+ if (decision.step === 'review' || decision.step === 'parked')
145
+ return { next: decision.step };
146
+ return { next: 'coding' };
128
147
  }
129
148
  /**
130
149
  * The ONE escalation an expired unreadable-state deferral owes. Restoring the
@@ -318,8 +337,11 @@ export async function pendingCodingSpawnSupersededByReview(focus, deps = {}) {
318
337
  if (read.next === 'coding')
319
338
  return false;
320
339
  clearPendingSpawnDirective(focus.focus_id);
321
- log.info(`[listener] Dropping queued ${pending.sessionType} directive for "${focus.focus_name}" -- every delivery is in ` +
322
- `verify with no open work and review is enabled; the next actionable step is a review pass, not a coding lead`);
340
+ log.info(read.next === 'parked'
341
+ ? `[listener] Dropping queued ${pending.sessionType} directive for "${focus.focus_name}" -- every verify delivery ` +
342
+ `is parked on a repeating verify shortfall; a coding lead has nothing truthful to commit until verify releases the park`
343
+ : `[listener] Dropping queued ${pending.sessionType} directive for "${focus.focus_name}" -- every delivery is in ` +
344
+ `verify with no open work and review is enabled; the next actionable step is a review pass, not a coding lead`);
323
345
  return true;
324
346
  }
325
347
  //# sourceMappingURL=pending-spawn-review-next-step.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pending-spawn-review-next-step.js","sourceRoot":"","sources":["../../src/focus/pending-spawn-review-next-step.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pending-spawn-review-next-step.js","sourceRoot":"","sources":["../../src/focus/pending-spawn-review-next-step.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The review spawn's coverage step: pin the focus-branch tip THIS review pass
3
+ * covers, or abort the spawn before any session opens. spawnFocusTeam opens its
4
+ * team-lead session ONLY through openTeamSessionAfterReviewCoverage, which couples
5
+ * this step to the session creation it gates (pinned by
6
+ * review-spawn-session-wiring.test.ts), so a review session cannot be created
7
+ * without passing it.
8
+ *
9
+ * It is the one point every review session passes through, whatever queued it: a
10
+ * review-lineage pending directive (the pending-spawn and ready-focus passes), or
11
+ * no directive at all, where spawnFocusTeam derives the review lineage from the
12
+ * synced stage (a focus in "reviewing" -- review_requested_at still set over verify
13
+ * deliveries -- force-spawned by an answer re-arm or a restart). The upstream gates
14
+ * (completion/review-approved-head-gate.ts on the window,
15
+ * focus/pending-review-approved-head.ts on a queued review directive) cannot see
16
+ * the directive-less route, so the approved-head decline is repeated here as the
17
+ * last line: a review whose spawn-tip is the commit the focus's current approval
18
+ * already judged opens no session, so it cannot stamp another approval of that
19
+ * commit.
20
+ *
21
+ * Aborts (returns true, no session opened) when:
22
+ * - the coverage anchor is unresolvable: a review over it would run to a
23
+ * succeeded exit with coverageComplete=false, auto-approve withheld as apparent
24
+ * drift, and a full-pass re-review armed every cycle -- structurally forever
25
+ * (the 2026-08-06 224-rejection loop);
26
+ * - the spawn-tip is the currently approved commit;
27
+ * - the approval cannot be read. FAILS CLOSED (deferred, not dropped): unreadable
28
+ * is no evidence the head is unapproved, and a review opened on it can stamp
29
+ * the duplicate approval this step exists to prevent. The spawn only RESERVES a
30
+ * queued directive (acknowledged once the team initializes), so the directive
31
+ * stays queued and the next poll retries once the approval reads again; a
32
+ * directive-less route is retried by whatever force-spawned it.
33
+ *
34
+ * Otherwise it pins the tip on the team state (captured post-rebase before any
35
+ * mid-review commits), captures the PRIOR coverage watermark, and persists the tip
36
+ * DURABLY as the coverage candidate (product_focuses.review_coverage_sha) so the
37
+ * edge review_complete path can stamp reviewed_through_sha atomically with the
38
+ * verdict. The persisted value is the coverage CANDIDATE only; it does not mark
39
+ * the focus reviewed (the verdict does). Best-effort persist: a write failure is
40
+ * logged, never fatal (the review runs minutes before review_complete).
41
+ *
42
+ * @module focus/review-spawn-coverage
43
+ */
44
+ import type { DaemonConfig, FocusTeamState } from '../types/index.js';
45
+ /** The focus a review spawn is for, and where its branch resolves. */
46
+ export interface ReviewSpawnCoverageTarget {
47
+ worktreePath: string;
48
+ branchName: string;
49
+ focusId: string;
50
+ focusName: string;
51
+ config: Pick<DaemonConfig, 'organizationId' | 'productId'> & Partial<Pick<DaemonConfig, 'integrationBranch'>>;
52
+ }
53
+ /** Injectable IO; each defaults to the real implementation. */
54
+ export interface ReviewSpawnCoverageDeps {
55
+ resolveRef?: (repoPath: string, ref: string) => string | null;
56
+ /** The commit the focus's current approval judged, null when none. Throws when unreadable. */
57
+ readApprovedReviewSha?: (productId: string, focusId: string) => Promise<string | null>;
58
+ /** The focus's reviewed_through_sha before this pass. Throws when unreadable. */
59
+ readPriorWatermark?: (organizationId: string, productId: string, focusId: string) => Promise<string | null>;
60
+ setReviewCoverageSha?: (focusId: string, sha: string) => Promise<void>;
61
+ /**
62
+ * Whether `tip` adds nothing of the focus's own on top of `anchor`: every commit
63
+ * since is another focus's, already on integration (git/focus-own-delta.ts).
64
+ * Throws when unreadable (then the review is not declined on it).
65
+ */
66
+ addsNoOwnWork?: (target: ReviewSpawnCoverageTarget, integrationBranch: string, anchor: string, tip: string) => Promise<boolean>;
67
+ }
68
+ /**
69
+ * The production ownership proof: provenance is read from the NAMED focus branch
70
+ * (not whatever the worktree has checked out), with the focus's delivery ids from
71
+ * `listDeliveryIds` (the product-api by default).
72
+ */
73
+ export declare function makeAddsNoOwnWork(listDeliveryIds?: (focusId: string) => Promise<readonly string[]>): NonNullable<ReviewSpawnCoverageDeps['addsNoOwnWork']>;
74
+ /**
75
+ * Pin a review spawn's coverage anchor, or report that the spawn must abort
76
+ * (true: no session may open). Only a 'review' session type is governed by the
77
+ * approved-head decline; see the module header.
78
+ */
79
+ export declare function captureReviewSpawnCoverage(teamState: FocusTeamState, target: ReviewSpawnCoverageTarget, deps?: ReviewSpawnCoverageDeps): Promise<boolean>;
80
+ /**
81
+ * Open the spawn's team-lead session, passing the review coverage step first: a
82
+ * review session type runs captureReviewSpawnCoverage and, when it aborts, the
83
+ * session is never opened (null, exactly like a failed session creation). Other
84
+ * session types open directly. The one way spawnFocusTeam creates a session.
85
+ */
86
+ export declare function openTeamSessionAfterReviewCoverage<S>(teamState: FocusTeamState, target: ReviewSpawnCoverageTarget, openSession: () => Promise<S | null>, deps?: ReviewSpawnCoverageDeps): Promise<S | null>;
87
+ //# sourceMappingURL=review-spawn-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-spawn-coverage.d.ts","sourceRoot":"","sources":["../../src/focus/review-spawn-coverage.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAatE,sEAAsE;AACtE,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC;CAC/G;AAED,+DAA+D;AAC/D,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9D,8FAA8F;IAC9F,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvF,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5G,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjI;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAA2E,GACzI,WAAW,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAIvD;AA6CD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,yBAAyB,EACjC,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,OAAO,CAAC,CAkClB;AAED;;;;;GAKG;AACH,wBAAsB,kCAAkC,CAAC,CAAC,EACxD,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,yBAAyB,EACjC,WAAW,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,EACpC,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAGnB"}
@@ -0,0 +1,104 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/focus/review-spawn-coverage.test.ts,
3
+ // packages/daemon/src/integration/approved-head-gate-failure-respawn-regression.test.ts,
4
+ // packages/daemon/src/integration/fully-merged-focus-sibling-red-scenario.test.ts
5
+ // PINNED-BY-END
6
+ import { resolveRef } from '../git/index.js';
7
+ import { shouldAbortReviewSpawnForUnresolvableCoverage } from '../completion/review-spawn-coverage-guard.js';
8
+ import { isHeadAlreadyApproved } from '../completion/review-approved-head-gate.js';
9
+ import { listReviewAutoApprovals } from '../completion/review-auto-approval-record.js';
10
+ import { readLatestApprovedReviewSha } from '../queries/focus-review-approval.js';
11
+ import { getFocusDeliveries, setReviewCoverageSha } from '../queries/focuses.js';
12
+ import { isForeignOnlyExtension } from '../git/focus-own-delta.js';
13
+ import { getActiveFocuses } from '../queries/focus-discovery.js';
14
+ import { createLogger } from '../shell/log.js';
15
+ const log = createLogger({ module: 'focus-executor' });
16
+ /**
17
+ * The production ownership proof: provenance is read from the NAMED focus branch
18
+ * (not whatever the worktree has checked out), with the focus's delivery ids from
19
+ * `listDeliveryIds` (the product-api by default).
20
+ */
21
+ export function makeAddsNoOwnWork(listDeliveryIds = async (focusId) => (await getFocusDeliveries(focusId)).map((d) => d.id)) {
22
+ return async (target, integrationBranch, anchor, tip) => isForeignOnlyExtension(target.worktreePath, integrationBranch, anchor, tip, new Set(await listDeliveryIds(target.focusId)), { focusBranch: target.branchName });
23
+ }
24
+ const defaultAddsNoOwnWork = makeAddsNoOwnWork();
25
+ /** Whether the spawn-tip adds no own work past `anchor`; false when it cannot be shown (the review is not declined on it). */
26
+ async function tipAddsNoOwnWork(target, anchor, tip, deps) {
27
+ const integrationBranch = target.config.integrationBranch;
28
+ if (!anchor || !integrationBranch || anchor === tip)
29
+ return false;
30
+ return (deps.addsNoOwnWork ?? defaultAddsNoOwnWork)(target, integrationBranch, anchor, tip).catch(() => false);
31
+ }
32
+ const defaultReadApprovedReviewSha = (productId, focusId) => readLatestApprovedReviewSha(focusId, { autoApprovals: listReviewAutoApprovals(productId, focusId) });
33
+ const defaultReadPriorWatermark = async (organizationId, productId, focusId) => (await getActiveFocuses(organizationId, productId)).find((f) => f.focus_id === focusId)?.reviewed_through_sha ?? null;
34
+ /** Whether a review at the spawn-tip must not open: the tip is the approved commit, or the approval is unreadable (fails closed). */
35
+ async function reviewSpawnDeclined(target, spawnTip, deps) {
36
+ let approvedSha;
37
+ try {
38
+ approvedSha = await (deps.readApprovedReviewSha ?? defaultReadApprovedReviewSha)(target.config.productId, target.focusId);
39
+ }
40
+ catch (err) {
41
+ log.warn(`[focus-executor] Review spawn DEFERRED for "${target.focusName}": its current approval is unreadable, so head ` +
42
+ `${spawnTip.slice(0, 12)} may already be approved. No session opened; retried next poll: ${err.message}`);
43
+ return true;
44
+ }
45
+ if (!isHeadAlreadyApproved({ headSha: spawnTip, approvedSha })) {
46
+ if (!(await tipAddsNoOwnWork(target, approvedSha, spawnTip, deps)))
47
+ return false;
48
+ log.info(`[focus-executor] Review spawn DECLINED for "${target.focusName}": its head ${spawnTip.slice(0, 12)} adds only other ` +
49
+ `foci's commits (already on integration) to its approved commit ${(approvedSha ?? '').slice(0, 12)} -- no review over ` +
50
+ `a range with nothing of its own. No session opened.`);
51
+ return true;
52
+ }
53
+ log.info(`[focus-executor] Review spawn DECLINED for "${target.focusName}": its head ${spawnTip.slice(0, 12)} is the commit its ` +
54
+ `current approval already judged -- review runs once per distinct focus head. No session opened.`);
55
+ return true;
56
+ }
57
+ /**
58
+ * Pin a review spawn's coverage anchor, or report that the spawn must abort
59
+ * (true: no session may open). Only a 'review' session type is governed by the
60
+ * approved-head decline; see the module header.
61
+ */
62
+ export async function captureReviewSpawnCoverage(teamState, target, deps = {}) {
63
+ const { worktreePath, branchName, focusId, focusName, config } = target;
64
+ const spawnTip = (deps.resolveRef ?? resolveRef)(worktreePath, branchName);
65
+ if (shouldAbortReviewSpawnForUnresolvableCoverage(teamState.sessionType, spawnTip)) {
66
+ log.error(`[focus-executor] Review spawn ABORTED for "${focusName}": coverage ref ` +
67
+ `"${branchName}" could not be resolved in ${worktreePath}. No session opened ` +
68
+ `(a review over an unresolvable coverage anchor would loop as unknown-coverage drift).`);
69
+ return true;
70
+ }
71
+ if (spawnTip && teamState.sessionType === 'review' && await reviewSpawnDeclined(target, spawnTip, deps))
72
+ return true;
73
+ teamState.reviewSpawnTip = spawnTip;
74
+ // Capture the PRIOR coverage watermark BEFORE this pass's review_complete
75
+ // promotes the spawn-tip into it (migration 20260909203246), so the hand-off
76
+ // delta rule measures against the prior value. A read failure leaves it null --
77
+ // the exit handler treats an absent carry as no proof of advance.
78
+ try {
79
+ teamState.reviewPriorWatermark = await (deps.readPriorWatermark ?? defaultReadPriorWatermark)(config.organizationId, config.productId, focusId);
80
+ }
81
+ catch (err) {
82
+ log.warn(`[focus-executor] Could not resolve prior review watermark for "${focusName}": ${err.message}`);
83
+ teamState.reviewPriorWatermark = null;
84
+ }
85
+ if (teamState.sessionType === 'review' && spawnTip && await tipAddsNoOwnWork(target, teamState.reviewPriorWatermark, spawnTip, deps)) {
86
+ log.info(`[focus-executor] Review spawn DECLINED for "${focusName}": the range ${(teamState.reviewPriorWatermark ?? '').slice(0, 12)}..` +
87
+ `${spawnTip.slice(0, 12)} holds only other foci's commits (already on integration) and none of its own. No session opened.`);
88
+ return true;
89
+ }
90
+ (deps.setReviewCoverageSha ?? setReviewCoverageSha)(focusId, spawnTip).catch((err) => log.warn(`[focus-executor] Failed to persist review_coverage_sha for "${focusName}": ${err.message}`));
91
+ return false;
92
+ }
93
+ /**
94
+ * Open the spawn's team-lead session, passing the review coverage step first: a
95
+ * review session type runs captureReviewSpawnCoverage and, when it aborts, the
96
+ * session is never opened (null, exactly like a failed session creation). Other
97
+ * session types open directly. The one way spawnFocusTeam creates a session.
98
+ */
99
+ export async function openTeamSessionAfterReviewCoverage(teamState, target, openSession, deps = {}) {
100
+ if (teamState.sessionType === 'review' && await captureReviewSpawnCoverage(teamState, target, deps))
101
+ return null;
102
+ return openSession();
103
+ }
104
+ //# sourceMappingURL=review-spawn-coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-spawn-coverage.js","sourceRoot":"","sources":["../../src/focus/review-spawn-coverage.ts"],"names":[],"mappings":"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"}
@@ -80,9 +80,12 @@ export interface SessionHealthDecision {
80
80
  * row left running with a dead process; `silent_abandoned` = a session whose
81
81
  * process is ALIVE but which has made no observed call past the silence
82
82
  * threshold (a live-but-dead session -- the case the process scan is blind to).
83
- * Callers log/attribute the three differently.
83
+ * `untracked_process` is never produced by the classifier: the health sweep
84
+ * converts a `live_process` skip to it once it has ended that session's
85
+ * process (a verified daemon-spawned process no team tracks).
86
+ * Callers log/attribute the kinds differently.
84
87
  */
85
- kind?: 'team_orphan' | 'system_straggler' | 'silent_abandoned';
88
+ kind?: 'team_orphan' | 'system_straggler' | 'silent_abandoned' | 'untracked_process';
86
89
  }
87
90
  /**
88
91
  * Classify one active session for the health sweep. Pure: no I/O, no clock read.
@@ -1 +1 @@
1
- {"version":3,"file":"session-health.d.ts","sourceRoot":"","sources":["../../src/focus/session-health.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,QAAgB,CAAC;AAE5D,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,OAAO,CAErF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,GAAG,MAAM,GAAG,IAAI,CAKlG;AAED,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,uBAAuB,GAC/B,cAAc,GACd,eAAe,GACf,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,uCAAuC;IACvC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,aAAa,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;CAChE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,oBAAoB,GACxB,qBAAqB,CAqDvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,GAAG,EAAE,oBAAoB,GACxB,qBAAqB,EAAE,CAEzB"}
1
+ {"version":3,"file":"session-health.d.ts","sourceRoot":"","sources":["../../src/focus/session-health.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,QAAgB,CAAC;AAE5D,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,OAAO,CAErF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,GAAG,MAAM,GAAG,IAAI,CAKlG;AAED,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,uBAAuB,GAC/B,cAAc,GACd,eAAe,GACf,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,uCAAuC;IACvC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,aAAa,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;CACtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,oBAAoB,GACxB,qBAAqB,CAqDvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,GAAG,EAAE,oBAAoB,GACxB,qBAAqB,EAAE,CAEzB"}
@@ -1,5 +1,6 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: packages/daemon/src/focus/session-health.test.ts
2
+ // Pinned by: packages/daemon/src/focus/session-health.test.ts,
3
+ // packages/daemon/src/focus/session-process-reap.test.ts
3
4
  // PINNED-BY-END
4
5
  /**
5
6
  * Grace period: a session started within this window is left alone even if it
@@ -1 +1 @@
1
- {"version":3,"file":"session-health.js","sourceRoot":"","sources":["../../src/focus/session-health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-health.js","sourceRoot":"","sources":["../../src/focus/session-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * The health sweep's process half: a session it reaps loses its OS process tree.
3
+ *
4
+ * `classifySessionsHealth` decides which agent_sessions rows are stale. Closing a
5
+ * row used to be the whole act -- the row went `failed` while the process it
6
+ * named kept running (a silent-abandoned reap at 10:28 left a `claude --resume`
7
+ * lead alive at 10:52), and a live process no team tracked was logged every 30s
8
+ * and left alone. This module makes every reap end the process, or log exactly
9
+ * why it did not:
10
+ *
11
+ * - a CLOSE decision (team_orphan / system_straggler / silent_abandoned) ends
12
+ * the session's process group;
13
+ * - a `live_process` SKIP whose process is a verified daemon-spawned lead no
14
+ * team tracks is ended too, and turned into an `untracked_process` close so
15
+ * its row is marked failed.
16
+ *
17
+ * A pid is signalled only when it is safe: no live team or worker owns it, and
18
+ * either the process is already gone (a live group with that id can only be the
19
+ * session's own stragglers -- the kernel does not reuse an id a group still
20
+ * holds) or its start identity matches the spawn record in the worker pidfile.
21
+ */
22
+ import type { AgentSession } from '../types/index.js';
23
+ import type { SessionHealthDecision } from './session-health.js';
24
+ import { type LeadOwnershipDeps } from '../spawn/lead-process-ownership.js';
25
+ import { type ProcessGroupKillResult } from '../spawn/process-group-kill.js';
26
+ /** What happened to one session's process. */
27
+ export interface SessionProcessReap {
28
+ sessionId: string;
29
+ pid: number | null;
30
+ /** The termination result, when the process group was signalled. */
31
+ result: ProcessGroupKillResult | null;
32
+ /** Why the process was not signalled, when it was not. */
33
+ notSignalledReason: string | null;
34
+ }
35
+ /** True when the reap left no process running for the session. */
36
+ export declare function sessionProcessGone(reap: SessionProcessReap): boolean;
37
+ /**
38
+ * End one session's process tree, or report why it must not be signalled.
39
+ * Never throws.
40
+ */
41
+ export declare function reapSessionProcess(session: Pick<AgentSession, 'id' | 'pid'>, context: string, deps?: LeadOwnershipDeps): Promise<SessionProcessReap>;
42
+ /**
43
+ * Apply the process half of the health sweep to its decisions. Close decisions
44
+ * get their process tree ended (or the reason logged). A `live_process` skip is
45
+ * ended when it is a verified daemon-spawned process no team tracks, and is
46
+ * returned as an `untracked_process` close so its row is marked failed; any
47
+ * other skip is returned unchanged.
48
+ */
49
+ export declare function reapSessionHealthProcesses(sessions: readonly AgentSession[], decisions: readonly SessionHealthDecision[], deps?: LeadOwnershipDeps): Promise<SessionHealthDecision[]>;
50
+ //# sourceMappingURL=session-process-reap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-process-reap.d.ts","sourceRoot":"","sources":["../../src/focus/session-process-reap.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,gCAAgC,CAAC;AAKxC,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,oEAAoE;IACpE,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,0DAA0D;IAC1D,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAEpE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,KAAK,CAAC,EACzC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAqB7B;AAWD;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,SAAS,EAAE,SAAS,qBAAqB,EAAE,EAC3C,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAelC"}
@@ -0,0 +1,77 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/focus/session-process-reap.test.ts
3
+ // PINNED-BY-END
4
+ import { currentlyTrackedPids, } from '../spawn/lead-process-ownership.js';
5
+ import { readWorkerPidfile, removeWorkerPid } from '../shell/worker-pidfile.js';
6
+ import { processGroupEnded, readProcessStartIdentity, terminateProcessGroup, } from '../spawn/process-group-kill.js';
7
+ import { createLogger } from '../shell/log.js';
8
+ const log = createLogger({ module: 'session-process-reap' });
9
+ /** True when the reap left no process running for the session. */
10
+ export function sessionProcessGone(reap) {
11
+ return reap.result !== null && processGroupEnded(reap.result);
12
+ }
13
+ /**
14
+ * End one session's process tree, or report why it must not be signalled.
15
+ * Never throws.
16
+ */
17
+ export async function reapSessionProcess(session, context, deps = {}) {
18
+ const pid = session.pid ?? null;
19
+ const base = { sessionId: session.id, pid };
20
+ const notSignalled = (reason) => ({ ...base, result: null, notSignalledReason: reason });
21
+ if (pid == null)
22
+ return notSignalled('no pid is recorded on the session row');
23
+ const tracked = (deps.trackedPids ?? currentlyTrackedPids)();
24
+ if (tracked.has(pid))
25
+ return notSignalled(`pid ${pid} is owned by a live team or worker`);
26
+ const readStartIdentity = deps.readStartIdentity ?? readProcessStartIdentity;
27
+ const live = readStartIdentity(pid);
28
+ if (live !== null) {
29
+ const entry = (deps.readEntries ?? (() => readWorkerPidfile()))().find((e) => e.pid === pid);
30
+ if (!entry?.startIdentity)
31
+ return notSignalled(`pid ${pid} has no spawn record, so it cannot be verified as this session's process`);
32
+ if (entry.startIdentity !== live)
33
+ return notSignalled(`pid ${pid} now belongs to a different process than the one spawned`);
34
+ }
35
+ const terminate = deps.terminate ?? ((pgid, opts) => terminateProcessGroup(pgid, opts));
36
+ const result = await terminate(pid, { label: `session ${session.id}`, context });
37
+ if (processGroupEnded(result)) {
38
+ (deps.removeEntry ?? ((p) => removeWorkerPid(p)))(pid);
39
+ }
40
+ return { ...base, result, notSignalledReason: null };
41
+ }
42
+ function logReap(reap, d) {
43
+ if (reap.notSignalledReason === null)
44
+ return;
45
+ const line = `[health] Session ${d.sessionId} (${d.kind ?? d.skipReason ?? 'unknown'}): process not signalled -- ${reap.notSignalledReason}`;
46
+ // A live one-shot or team owning the pid is healthy; everything else is a
47
+ // process the reap could not end, which an operator should be able to see.
48
+ if (d.verdict === 'skip' && reap.notSignalledReason.includes('owned by a live team or worker'))
49
+ log.debug(line);
50
+ else
51
+ log.warn(line);
52
+ }
53
+ /**
54
+ * Apply the process half of the health sweep to its decisions. Close decisions
55
+ * get their process tree ended (or the reason logged). A `live_process` skip is
56
+ * ended when it is a verified daemon-spawned process no team tracks, and is
57
+ * returned as an `untracked_process` close so its row is marked failed; any
58
+ * other skip is returned unchanged.
59
+ */
60
+ export async function reapSessionHealthProcesses(sessions, decisions, deps = {}) {
61
+ const byId = new Map(sessions.map((s) => [s.id, s]));
62
+ return Promise.all(decisions.map(async (d) => {
63
+ const reapable = d.verdict === 'close' || d.skipReason === 'live_process';
64
+ const session = byId.get(d.sessionId);
65
+ if (!reapable || !session)
66
+ return d;
67
+ const context = d.verdict === 'close' ? `session reap (${d.kind ?? 'stale'})` : 'untracked live session';
68
+ const reap = await reapSessionProcess(session, context, deps);
69
+ logReap(reap, d);
70
+ if (d.verdict === 'skip' && reap.result !== null && sessionProcessGone(reap)) {
71
+ log.warn(`[health] Session ${d.sessionId} had a live process no team tracks -- terminated it (focus=${d.focusId ?? 'none'})`);
72
+ return { sessionId: d.sessionId, focusId: d.focusId, deliveryId: d.deliveryId, status: d.status, verdict: 'close', kind: 'untracked_process' };
73
+ }
74
+ return d;
75
+ }));
76
+ }
77
+ //# sourceMappingURL=session-process-reap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-process-reap.js","sourceRoot":"","sources":["../../src/focus/session-process-reap.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oEAAoE;AACpE,gBAAgB;AA0BhB,OAAO,EACL,oBAAoB,GAErB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GAEtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAY7D,kEAAkE;AAClE,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAyC,EACzC,OAAe,EACf,OAA0B,EAAE;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,CAAC,MAAc,EAAsB,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;IACrH,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,YAAY,CAAC,uCAAuC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC,EAAE,CAAC;IAC7D,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC,OAAO,GAAG,oCAAoC,CAAC,CAAC;IAE1F,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,wBAAwB,CAAC;IAC7E,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7F,IAAI,CAAC,KAAK,EAAE,aAAa;YAAE,OAAO,YAAY,CAAC,OAAO,GAAG,0EAA0E,CAAC,CAAC;QACrI,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI;YAAE,OAAO,YAAY,CAAC,OAAO,GAAG,0DAA0D,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,OAAO,CAAC,IAAwB,EAAE,CAAwB;IACjE,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI;QAAE,OAAO;IAC7C,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,IAAI,SAAS,+BAA+B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC7I,0EAA0E;IAC1E,2EAA2E;IAC3E,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;QAC3G,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAAiC,EACjC,SAA2C,EAC3C,OAA0B,EAAE;IAE5B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAkC,EAAE;QAC3E,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,CAAC;QAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACzG,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7E,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,8DAA8D,CAAC,CAAC,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC;YAC9H,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;QACjJ,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type ReviewCensus } from '../completion/review-census-record.js';
2
+ import type { ReviewHeadApprovalTarget } from '../completion/review-approved-head-gate.js';
3
+ /** The delivery slice the read takes (structural). */
4
+ export interface UnchangedHeadDelivery {
5
+ id: string;
6
+ executionStatus?: string | null;
7
+ iterationCount?: number | null;
8
+ }
9
+ /** The gate verdict slice the read takes. */
10
+ export interface UnchangedHeadVerdict {
11
+ outcome: 'passed' | 'failed';
12
+ recordedAt: string;
13
+ }
14
+ /** Injectable reads; each defaults to the real implementation. */
15
+ export interface UnchangedReviewedHeadDeps {
16
+ resolveRef: (repoPath: string, ref: string) => string | null;
17
+ listReviewCensuses: (productId: string, focusId: string) => readonly ReviewCensus[];
18
+ getFocusDeliveries: (focusId: string) => Promise<readonly UnchangedHeadDelivery[]>;
19
+ readCommitVerdict: (productId: string, focusId: string, sha: string) => UnchangedHeadVerdict | null;
20
+ }
21
+ export declare const defaultUnchangedReviewedHeadDeps: () => UnchangedReviewedHeadDeps;
22
+ /** The unchanged range a review would re-judge: its head and the verdict the last review already saw. */
23
+ export interface UnchangedReviewedHead {
24
+ sha: string;
25
+ verdict: 'passed' | 'failed';
26
+ reviewedAt: string;
27
+ }
28
+ /** Whether the review range is unchanged since `census` (see the module header). Pure. */
29
+ export declare function isReviewedRangeUnchanged(input: {
30
+ headSha: string | null;
31
+ census: ReviewCensus | null;
32
+ deliveries: readonly UnchangedHeadDelivery[];
33
+ verdict: UnchangedHeadVerdict | null;
34
+ }): boolean;
35
+ /**
36
+ * The unchanged reviewed head, or null when the range changed or cannot be read.
37
+ * Throws only when the deliveries read throws (the caller fails open).
38
+ */
39
+ export declare function readUnchangedReviewedHead(target: ReviewHeadApprovalTarget, deps?: UnchangedReviewedHeadDeps): Promise<UnchangedReviewedHead | null>;
40
+ //# sourceMappingURL=unchanged-reviewed-head.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unchanged-reviewed-head.d.ts","sourceRoot":"","sources":["../../src/focus/unchanged-reviewed-head.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAE9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAK3F,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7D,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,SAAS,YAAY,EAAE,CAAC;IACpF,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAAC;IACnF,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,oBAAoB,GAAG,IAAI,CAAC;CACrG;AAED,eAAO,MAAM,gCAAgC,QAAO,yBAKlD,CAAC;AAEH,yGAAyG;AACzG,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0FAA0F;AAC1F,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtC,GAAG,OAAO,CAUV;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,wBAAwB,EAChC,IAAI,GAAE,yBAA8D,GACnE,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CASvC"}