@telora/daemon 0.23.48 → 0.23.56

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 (370) hide show
  1. package/build-info.json +2 -2
  2. package/dist/completion/review-exit/review-census-record.d.ts.map +1 -1
  3. package/dist/completion/review-exit/review-census-record.js +4 -0
  4. package/dist/completion/review-exit/review-census-record.js.map +1 -1
  5. package/dist/completion/review-exit/review-exit-deps.js +1 -1
  6. package/dist/completion/review-exit/review-exit-phase.js +1 -1
  7. package/dist/completion/state-cascade/failed-verdict-stranded-filing.d.ts +35 -0
  8. package/dist/completion/state-cascade/failed-verdict-stranded-filing.d.ts.map +1 -0
  9. package/dist/completion/state-cascade/failed-verdict-stranded-filing.js +93 -0
  10. package/dist/completion/state-cascade/failed-verdict-stranded-filing.js.map +1 -0
  11. package/dist/completion/state-cascade/review-approved-head-gate.d.ts.map +1 -1
  12. package/dist/completion/state-cascade/review-approved-head-gate.js +3 -0
  13. package/dist/completion/state-cascade/review-approved-head-gate.js.map +1 -1
  14. package/dist/completion/state-cascade/review-next-step.d.ts +19 -6
  15. package/dist/completion/state-cascade/review-next-step.d.ts.map +1 -1
  16. package/dist/completion/state-cascade/review-next-step.js +6 -2
  17. package/dist/completion/state-cascade/review-next-step.js.map +1 -1
  18. package/dist/completion/state-cascade/review-request-gate.d.ts +5 -0
  19. package/dist/completion/state-cascade/review-request-gate.d.ts.map +1 -1
  20. package/dist/completion/state-cascade/review-request-gate.js +7 -1
  21. package/dist/completion/state-cascade/review-request-gate.js.map +1 -1
  22. package/dist/completion/state-cascade/review-verify-judgment-gate.d.ts +137 -0
  23. package/dist/completion/state-cascade/review-verify-judgment-gate.d.ts.map +1 -0
  24. package/dist/completion/state-cascade/review-verify-judgment-gate.js +98 -0
  25. package/dist/completion/state-cascade/review-verify-judgment-gate.js.map +1 -0
  26. package/dist/completion/state-cascade/standing-approval-convergence.d.ts +18 -8
  27. package/dist/completion/state-cascade/standing-approval-convergence.d.ts.map +1 -1
  28. package/dist/completion/state-cascade/standing-approval-convergence.js +81 -16
  29. package/dist/completion/state-cascade/standing-approval-convergence.js.map +1 -1
  30. package/dist/completion/state-cascade/standing-approval-failed-verdict.d.ts +107 -0
  31. package/dist/completion/state-cascade/standing-approval-failed-verdict.d.ts.map +1 -0
  32. package/dist/completion/state-cascade/standing-approval-failed-verdict.js +121 -0
  33. package/dist/completion/state-cascade/standing-approval-failed-verdict.js.map +1 -0
  34. package/dist/completion/state-cascade/standing-approval-stranded.d.ts +29 -3
  35. package/dist/completion/state-cascade/standing-approval-stranded.d.ts.map +1 -1
  36. package/dist/completion/state-cascade/standing-approval-stranded.js +121 -7
  37. package/dist/completion/state-cascade/standing-approval-stranded.js.map +1 -1
  38. package/dist/completion/state-cascade/state-cascade.d.ts +14 -0
  39. package/dist/completion/state-cascade/state-cascade.d.ts.map +1 -1
  40. package/dist/completion/state-cascade/state-cascade.js +15 -6
  41. package/dist/completion/state-cascade/state-cascade.js.map +1 -1
  42. package/dist/completion/team-exit/status-advance-phase.d.ts +7 -0
  43. package/dist/completion/team-exit/status-advance-phase.d.ts.map +1 -1
  44. package/dist/completion/team-exit/status-advance-phase.js +26 -17
  45. package/dist/completion/team-exit/status-advance-phase.js.map +1 -1
  46. package/dist/composition/advance-precheck-context.d.ts.map +1 -1
  47. package/dist/composition/advance-precheck-context.js +3 -0
  48. package/dist/composition/advance-precheck-context.js.map +1 -1
  49. package/dist/composition/execution-merge-context.d.ts.map +1 -1
  50. package/dist/composition/execution-merge-context.js +1 -0
  51. package/dist/composition/execution-merge-context.js.map +1 -1
  52. package/dist/composition/execution-migrations-context.d.ts.map +1 -1
  53. package/dist/composition/execution-migrations-context.js +1 -20
  54. package/dist/composition/execution-migrations-context.js.map +1 -1
  55. package/dist/composition/runtime-delivery-advance-context.d.ts +12 -3
  56. package/dist/composition/runtime-delivery-advance-context.d.ts.map +1 -1
  57. package/dist/composition/runtime-delivery-advance-context.js +36 -4
  58. package/dist/composition/runtime-delivery-advance-context.js.map +1 -1
  59. package/dist/composition/standing-approval-context.d.ts.map +1 -1
  60. package/dist/composition/standing-approval-context.js +4 -0
  61. package/dist/composition/standing-approval-context.js.map +1 -1
  62. package/dist/composition/state-cascade-context.d.ts +9 -0
  63. package/dist/composition/state-cascade-context.d.ts.map +1 -1
  64. package/dist/composition/state-cascade-context.js +21 -1
  65. package/dist/composition/state-cascade-context.js.map +1 -1
  66. package/dist/composition/tower-pass-context.d.ts.map +1 -1
  67. package/dist/composition/tower-pass-context.js +2 -1
  68. package/dist/composition/tower-pass-context.js.map +1 -1
  69. package/dist/composition/verification-context.js +1 -1
  70. package/dist/composition/verify-feedback-context.d.ts +5 -1
  71. package/dist/composition/verify-feedback-context.d.ts.map +1 -1
  72. package/dist/composition/verify-feedback-context.js +8 -3
  73. package/dist/composition/verify-feedback-context.js.map +1 -1
  74. package/dist/config/live-daemon-config.js +1 -1
  75. package/dist/delivery/delivery-lifecycle.d.ts.map +1 -1
  76. package/dist/delivery/delivery-lifecycle.js +3 -0
  77. package/dist/delivery/delivery-lifecycle.js.map +1 -1
  78. package/dist/delivery/operator-hold.d.ts.map +1 -1
  79. package/dist/delivery/operator-hold.js +2 -0
  80. package/dist/delivery/operator-hold.js.map +1 -1
  81. package/dist/delivery/paused-revival.d.ts.map +1 -1
  82. package/dist/delivery/paused-revival.js +2 -1
  83. package/dist/delivery/paused-revival.js.map +1 -1
  84. package/dist/delivery/recorded-concerns.d.ts +5 -2
  85. package/dist/delivery/recorded-concerns.d.ts.map +1 -1
  86. package/dist/delivery/recorded-concerns.js +8 -4
  87. package/dist/delivery/recorded-concerns.js.map +1 -1
  88. package/dist/directive/directive-queue.js +1 -1
  89. package/dist/focus/focus-poller-auto-advance.d.ts +15 -0
  90. package/dist/focus/focus-poller-auto-advance.d.ts.map +1 -1
  91. package/dist/focus/focus-poller-auto-advance.js +23 -15
  92. package/dist/focus/focus-poller-auto-advance.js.map +1 -1
  93. package/dist/focus/focus-poller-spawn.js +1 -1
  94. package/dist/focus/focus-poller-state.js +1 -1
  95. package/dist/focus/pending-review-approved-head.d.ts.map +1 -1
  96. package/dist/focus/pending-review-approved-head.js +7 -3
  97. package/dist/focus/pending-review-approved-head.js.map +1 -1
  98. package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -1
  99. package/dist/focus/pending-spawn-review-next-step.js +11 -9
  100. package/dist/focus/pending-spawn-review-next-step.js.map +1 -1
  101. package/dist/focus/ready-focus-team-work.d.ts.map +1 -1
  102. package/dist/focus/ready-focus-team-work.js +2 -1
  103. package/dist/focus/ready-focus-team-work.js.map +1 -1
  104. package/dist/git/focus-branch-containment.js +2 -2
  105. package/dist/git/focus-branch-containment.js.map +1 -1
  106. package/dist/git/index.d.ts.map +1 -1
  107. package/dist/git/index.js +1 -0
  108. package/dist/git/index.js.map +1 -1
  109. package/dist/merge/approval-gate-state.d.ts.map +1 -1
  110. package/dist/merge/approval-gate-state.js +1 -0
  111. package/dist/merge/approval-gate-state.js.map +1 -1
  112. package/dist/merge/completion-merge-driver.d.ts.map +1 -1
  113. package/dist/merge/completion-merge-driver.js +1 -0
  114. package/dist/merge/completion-merge-driver.js.map +1 -1
  115. package/dist/merge/completion-merge-gate.d.ts.map +1 -1
  116. package/dist/merge/completion-merge-gate.js +1 -0
  117. package/dist/merge/completion-merge-gate.js.map +1 -1
  118. package/dist/merge/merge-back-loop.d.ts.map +1 -1
  119. package/dist/merge/merge-back-loop.js +1 -0
  120. package/dist/merge/merge-back-loop.js.map +1 -1
  121. package/dist/prd/index.d.ts.map +1 -1
  122. package/dist/prd/index.js +2 -1
  123. package/dist/prd/index.js.map +1 -1
  124. package/dist/prompt-sections/execution-sections.d.ts +5 -0
  125. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  126. package/dist/prompt-sections/execution-sections.js +12 -2
  127. package/dist/prompt-sections/execution-sections.js.map +1 -1
  128. package/dist/prompt-sections/gate-verdict-section.d.ts.map +1 -1
  129. package/dist/prompt-sections/gate-verdict-section.js +3 -1
  130. package/dist/prompt-sections/gate-verdict-section.js.map +1 -1
  131. package/dist/prompt-sections/persona-sections.d.ts +10 -0
  132. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  133. package/dist/prompt-sections/persona-sections.js +21 -6
  134. package/dist/prompt-sections/persona-sections.js.map +1 -1
  135. package/dist/prompt-sections/prompt-listing.d.ts +33 -0
  136. package/dist/prompt-sections/prompt-listing.d.ts.map +1 -1
  137. package/dist/prompt-sections/prompt-listing.js +67 -13
  138. package/dist/prompt-sections/prompt-listing.js.map +1 -1
  139. package/dist/prompt-sections/routing-decider-sections.d.ts.map +1 -1
  140. package/dist/prompt-sections/routing-decider-sections.js +6 -2
  141. package/dist/prompt-sections/routing-decider-sections.js.map +1 -1
  142. package/dist/prompt-sections/shared.js +1 -1
  143. package/dist/prompt-sections/shortfall-gap-lines.d.ts +32 -0
  144. package/dist/prompt-sections/shortfall-gap-lines.d.ts.map +1 -0
  145. package/dist/prompt-sections/shortfall-gap-lines.js +58 -0
  146. package/dist/prompt-sections/shortfall-gap-lines.js.map +1 -0
  147. package/dist/prompt-sections/shortfall-park-section.d.ts +7 -1
  148. package/dist/prompt-sections/shortfall-park-section.d.ts.map +1 -1
  149. package/dist/prompt-sections/shortfall-park-section.js +27 -0
  150. package/dist/prompt-sections/shortfall-park-section.js.map +1 -1
  151. package/dist/queries/api-client/shared.js +1 -1
  152. package/dist/queries/delivery-gate-state/delivery-gate-state.d.ts +43 -16
  153. package/dist/queries/delivery-gate-state/delivery-gate-state.d.ts.map +1 -1
  154. package/dist/queries/delivery-gate-state/delivery-gate-state.js +43 -11
  155. package/dist/queries/delivery-gate-state/delivery-gate-state.js.map +1 -1
  156. package/dist/queries/delivery-gate-state/shortfall-judgment-record.d.ts +56 -0
  157. package/dist/queries/delivery-gate-state/shortfall-judgment-record.d.ts.map +1 -0
  158. package/dist/queries/delivery-gate-state/shortfall-judgment-record.js +123 -0
  159. package/dist/queries/delivery-gate-state/shortfall-judgment-record.js.map +1 -0
  160. package/dist/queries/delivery-gate-state/verify-own-holds.d.ts.map +1 -1
  161. package/dist/queries/delivery-gate-state/verify-own-holds.js +2 -1
  162. package/dist/queries/delivery-gate-state/verify-own-holds.js.map +1 -1
  163. package/dist/queries/escalations/cause-key.d.ts +9 -1
  164. package/dist/queries/escalations/cause-key.d.ts.map +1 -1
  165. package/dist/queries/escalations/cause-key.js +16 -2
  166. package/dist/queries/escalations/cause-key.js.map +1 -1
  167. package/dist/queries/escalations/filing-observation.d.ts.map +1 -1
  168. package/dist/queries/escalations/filing-observation.js +3 -0
  169. package/dist/queries/escalations/filing-observation.js.map +1 -1
  170. package/dist/queries/focus-review/focus-review-approval.d.ts.map +1 -1
  171. package/dist/queries/focus-review/focus-review-approval.js +3 -0
  172. package/dist/queries/focus-review/focus-review-approval.js.map +1 -1
  173. package/dist/queries/prd/prd.d.ts.map +1 -1
  174. package/dist/queries/prd/prd.js +2 -1
  175. package/dist/queries/prd/prd.js.map +1 -1
  176. package/dist/queries/verification/shortfall-rulings.d.ts.map +1 -1
  177. package/dist/queries/verification/shortfall-rulings.js +3 -1
  178. package/dist/queries/verification/shortfall-rulings.js.map +1 -1
  179. package/dist/queries/verification/verification.js +1 -1
  180. package/dist/session/session-lineage.d.ts.map +1 -1
  181. package/dist/session/session-lineage.js +1 -0
  182. package/dist/session/session-lineage.js.map +1 -1
  183. package/dist/spawn/prompt-assembly.d.ts.map +1 -1
  184. package/dist/spawn/prompt-assembly.js +13 -1
  185. package/dist/spawn/prompt-assembly.js.map +1 -1
  186. package/dist/spawn/review-hold-park.d.ts.map +1 -1
  187. package/dist/spawn/review-hold-park.js +1 -0
  188. package/dist/spawn/review-hold-park.js.map +1 -1
  189. package/dist/supervision/agent-resolvable-promotion.d.ts +3 -2
  190. package/dist/supervision/agent-resolvable-promotion.d.ts.map +1 -1
  191. package/dist/supervision/agent-resolvable-promotion.js +3 -2
  192. package/dist/supervision/agent-resolvable-promotion.js.map +1 -1
  193. package/dist/supervision/escalation-clearing.d.ts +14 -1
  194. package/dist/supervision/escalation-clearing.d.ts.map +1 -1
  195. package/dist/supervision/escalation-clearing.js +28 -1
  196. package/dist/supervision/escalation-clearing.js.map +1 -1
  197. package/dist/supervision/escalation-suppression.js +1 -1
  198. package/dist/supervision/focus-delivery-aggregate-phase.d.ts.map +1 -1
  199. package/dist/supervision/focus-delivery-aggregate-phase.js +2 -0
  200. package/dist/supervision/focus-delivery-aggregate-phase.js.map +1 -1
  201. package/dist/supervision/holds.d.ts.map +1 -1
  202. package/dist/supervision/holds.js +1 -0
  203. package/dist/supervision/holds.js.map +1 -1
  204. package/dist/supervision/null-role-spawn.d.ts.map +1 -1
  205. package/dist/supervision/null-role-spawn.js +1 -0
  206. package/dist/supervision/null-role-spawn.js.map +1 -1
  207. package/dist/supervision/stop-registry.d.ts +1 -0
  208. package/dist/supervision/stop-registry.d.ts.map +1 -1
  209. package/dist/supervision/stop-rows-delivery.d.ts +8 -0
  210. package/dist/supervision/stop-rows-delivery.d.ts.map +1 -1
  211. package/dist/supervision/stop-rows-delivery.js +31 -4
  212. package/dist/supervision/stop-rows-delivery.js.map +1 -1
  213. package/dist/supervision/team-work.d.ts.map +1 -1
  214. package/dist/supervision/team-work.js +1 -0
  215. package/dist/supervision/team-work.js.map +1 -1
  216. package/dist/supervision/verify-gate-stall.d.ts.map +1 -1
  217. package/dist/supervision/verify-gate-stall.js +1 -0
  218. package/dist/supervision/verify-gate-stall.js.map +1 -1
  219. package/dist/testing/fixtures/api-client.js +1 -1
  220. package/dist/testing/fixtures/completion-judge-stubs.d.ts.map +1 -1
  221. package/dist/testing/fixtures/completion-judge-stubs.js +1 -0
  222. package/dist/testing/fixtures/completion-judge-stubs.js.map +1 -1
  223. package/dist/testing/fixtures/escalation-store.d.ts +35 -0
  224. package/dist/testing/fixtures/escalation-store.d.ts.map +1 -0
  225. package/dist/testing/fixtures/escalation-store.js +86 -0
  226. package/dist/testing/fixtures/escalation-store.js.map +1 -0
  227. package/dist/testing/fixtures/index.js +1 -1
  228. package/dist/testing/fixtures/merge-log-capture.d.ts.map +1 -1
  229. package/dist/testing/fixtures/merge-log-capture.js +1 -0
  230. package/dist/testing/fixtures/merge-log-capture.js.map +1 -1
  231. package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
  232. package/dist/testing/fixtures/pending-spawn-world.js +1 -0
  233. package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
  234. package/dist/testing/fixtures/recording-api-client.js +1 -1
  235. package/dist/testing/fixtures/review-exit-deps.js +1 -1
  236. package/dist/testing/fixtures/shortfall-rework-hold-deps.d.ts +22 -0
  237. package/dist/testing/fixtures/shortfall-rework-hold-deps.d.ts.map +1 -0
  238. package/dist/testing/fixtures/shortfall-rework-hold-deps.js +44 -0
  239. package/dist/testing/fixtures/shortfall-rework-hold-deps.js.map +1 -0
  240. package/dist/testing/fixtures/verification-feedback-deps.d.ts +7 -2
  241. package/dist/testing/fixtures/verification-feedback-deps.d.ts.map +1 -1
  242. package/dist/testing/fixtures/verification-feedback-deps.js +15 -19
  243. package/dist/testing/fixtures/verification-feedback-deps.js.map +1 -1
  244. package/dist/types/index.js +1 -1
  245. package/dist/types/issue-description-budget.d.ts.map +1 -1
  246. package/dist/types/issue-description-budget.js +1 -0
  247. package/dist/types/issue-description-budget.js.map +1 -1
  248. package/dist/types/issue-status.d.ts +17 -0
  249. package/dist/types/issue-status.d.ts.map +1 -1
  250. package/dist/types/issue-status.js +23 -1
  251. package/dist/types/issue-status.js.map +1 -1
  252. package/dist/verify/effect-reconciliation/pending-injection-stamp.d.ts.map +1 -1
  253. package/dist/verify/effect-reconciliation/pending-injection-stamp.js +1 -0
  254. package/dist/verify/effect-reconciliation/pending-injection-stamp.js.map +1 -1
  255. package/dist/verify/effect-reconciliation/verify-reconciliation.d.ts +18 -3
  256. package/dist/verify/effect-reconciliation/verify-reconciliation.d.ts.map +1 -1
  257. package/dist/verify/effect-reconciliation/verify-reconciliation.js +26 -6
  258. package/dist/verify/effect-reconciliation/verify-reconciliation.js.map +1 -1
  259. package/dist/verify/effect-reconciliation/verify-restatement.d.ts +8 -0
  260. package/dist/verify/effect-reconciliation/verify-restatement.d.ts.map +1 -1
  261. package/dist/verify/effect-reconciliation/verify-restatement.js +5 -2
  262. package/dist/verify/effect-reconciliation/verify-restatement.js.map +1 -1
  263. package/dist/verify/engine/verification-commit-sharing.d.ts +6 -0
  264. package/dist/verify/engine/verification-commit-sharing.d.ts.map +1 -1
  265. package/dist/verify/engine/verification-commit-sharing.js +34 -1
  266. package/dist/verify/engine/verification-commit-sharing.js.map +1 -1
  267. package/dist/verify/engine/verification-deps.js +1 -1
  268. package/dist/verify/engine/verification-engine.d.ts.map +1 -1
  269. package/dist/verify/engine/verification-engine.js +12 -3
  270. package/dist/verify/engine/verification-engine.js.map +1 -1
  271. package/dist/verify/gate-config/verification-config.js +1 -1
  272. package/dist/verify/gate-verdicts/commit-verdict-record.js +1 -1
  273. package/dist/verify/gate-verdicts/explicit-gate-outcome.d.ts.map +1 -1
  274. package/dist/verify/gate-verdicts/explicit-gate-outcome.js +2 -0
  275. package/dist/verify/gate-verdicts/explicit-gate-outcome.js.map +1 -1
  276. package/dist/verify/gate-verdicts/gate-run-registry.js +1 -1
  277. package/dist/verify/gate-verdicts/own-gate-verdict.d.ts +10 -0
  278. package/dist/verify/gate-verdicts/own-gate-verdict.d.ts.map +1 -1
  279. package/dist/verify/gate-verdicts/own-gate-verdict.js +3 -2
  280. package/dist/verify/gate-verdicts/own-gate-verdict.js.map +1 -1
  281. package/dist/verify/outcome-routing/shortfall-rework-issue.d.ts +101 -0
  282. package/dist/verify/outcome-routing/shortfall-rework-issue.d.ts.map +1 -0
  283. package/dist/verify/outcome-routing/shortfall-rework-issue.js +250 -0
  284. package/dist/verify/outcome-routing/shortfall-rework-issue.js.map +1 -0
  285. package/dist/verify/outcome-routing/verification-evidence-unavailable-feedback.d.ts.map +1 -1
  286. package/dist/verify/outcome-routing/verification-evidence-unavailable-feedback.js +4 -1
  287. package/dist/verify/outcome-routing/verification-evidence-unavailable-feedback.js.map +1 -1
  288. package/dist/verify/outcome-routing/verification-feedback.d.ts +38 -7
  289. package/dist/verify/outcome-routing/verification-feedback.d.ts.map +1 -1
  290. package/dist/verify/outcome-routing/verification-feedback.js +45 -46
  291. package/dist/verify/outcome-routing/verification-feedback.js.map +1 -1
  292. package/dist/verify/outcome-routing/verification-history-reset.d.ts +2 -1
  293. package/dist/verify/outcome-routing/verification-history-reset.d.ts.map +1 -1
  294. package/dist/verify/outcome-routing/verification-history-reset.js +5 -2
  295. package/dist/verify/outcome-routing/verification-history-reset.js.map +1 -1
  296. package/dist/verify/outcome-routing/verification-model-unavailable-hold.d.ts +2 -1
  297. package/dist/verify/outcome-routing/verification-model-unavailable-hold.d.ts.map +1 -1
  298. package/dist/verify/outcome-routing/verification-model-unavailable-hold.js +5 -1
  299. package/dist/verify/outcome-routing/verification-model-unavailable-hold.js.map +1 -1
  300. package/dist/verify/outcome-routing/verification-rework-issue.d.ts.map +1 -1
  301. package/dist/verify/outcome-routing/verification-rework-issue.js +4 -1
  302. package/dist/verify/outcome-routing/verification-rework-issue.js.map +1 -1
  303. package/dist/verify/outcome-routing/verification-rework-messages.d.ts +8 -2
  304. package/dist/verify/outcome-routing/verification-rework-messages.d.ts.map +1 -1
  305. package/dist/verify/outcome-routing/verification-rework-messages.js +18 -7
  306. package/dist/verify/outcome-routing/verification-rework-messages.js.map +1 -1
  307. package/dist/verify/run-selection/default-on-guards.d.ts +15 -0
  308. package/dist/verify/run-selection/default-on-guards.d.ts.map +1 -1
  309. package/dist/verify/run-selection/default-on-guards.js +18 -1
  310. package/dist/verify/run-selection/default-on-guards.js.map +1 -1
  311. package/dist/verify/run-selection/explicit-rearm.d.ts.map +1 -1
  312. package/dist/verify/run-selection/explicit-rearm.js +1 -0
  313. package/dist/verify/run-selection/explicit-rearm.js.map +1 -1
  314. package/dist/verify/run-selection/pre-review-gate-dispatch.d.ts.map +1 -1
  315. package/dist/verify/run-selection/pre-review-gate-dispatch.js +15 -6
  316. package/dist/verify/run-selection/pre-review-gate-dispatch.js.map +1 -1
  317. package/dist/verify/run-selection/reselection-log-line.d.ts +1 -1
  318. package/dist/verify/run-selection/reselection-log-line.d.ts.map +1 -1
  319. package/dist/verify/run-selection/reselection-log-line.js +6 -2
  320. package/dist/verify/run-selection/reselection-log-line.js.map +1 -1
  321. package/dist/verify/run-selection/unanswered-dispatch.d.ts +20 -0
  322. package/dist/verify/run-selection/unanswered-dispatch.d.ts.map +1 -0
  323. package/dist/verify/run-selection/unanswered-dispatch.js +85 -0
  324. package/dist/verify/run-selection/unanswered-dispatch.js.map +1 -0
  325. package/dist/verify/run-selection/verification-default-on.d.ts.map +1 -1
  326. package/dist/verify/run-selection/verification-default-on.js +2 -1
  327. package/dist/verify/run-selection/verification-default-on.js.map +1 -1
  328. package/dist/verify/shortfalls/delivery-commit-set.d.ts.map +1 -1
  329. package/dist/verify/shortfalls/delivery-commit-set.js +2 -1
  330. package/dist/verify/shortfalls/delivery-commit-set.js.map +1 -1
  331. package/dist/verify/shortfalls/latest-shortfall-judgment.d.ts +24 -0
  332. package/dist/verify/shortfalls/latest-shortfall-judgment.d.ts.map +1 -0
  333. package/dist/verify/shortfalls/latest-shortfall-judgment.js +94 -0
  334. package/dist/verify/shortfalls/latest-shortfall-judgment.js.map +1 -0
  335. package/dist/verify/shortfalls/parked-shortfall-reuse.d.ts.map +1 -1
  336. package/dist/verify/shortfalls/parked-shortfall-reuse.js +20 -6
  337. package/dist/verify/shortfalls/parked-shortfall-reuse.js.map +1 -1
  338. package/dist/verify/shortfalls/shortfall-judgment-log.d.ts +12 -0
  339. package/dist/verify/shortfalls/shortfall-judgment-log.d.ts.map +1 -0
  340. package/dist/verify/shortfalls/shortfall-judgment-log.js +56 -0
  341. package/dist/verify/shortfalls/shortfall-judgment-log.js.map +1 -0
  342. package/dist/verify/shortfalls/shortfall-park-escalation.d.ts.map +1 -1
  343. package/dist/verify/shortfalls/shortfall-park-escalation.js +6 -2
  344. package/dist/verify/shortfalls/shortfall-park-escalation.js.map +1 -1
  345. package/dist/verify/shortfalls/shortfall-park.d.ts +9 -0
  346. package/dist/verify/shortfalls/shortfall-park.d.ts.map +1 -1
  347. package/dist/verify/shortfalls/shortfall-park.js +23 -19
  348. package/dist/verify/shortfalls/shortfall-park.js.map +1 -1
  349. package/dist/verify/shortfalls/shortfall-repeat.d.ts +14 -0
  350. package/dist/verify/shortfalls/shortfall-repeat.d.ts.map +1 -1
  351. package/dist/verify/shortfalls/shortfall-repeat.js +15 -1
  352. package/dist/verify/shortfalls/shortfall-repeat.js.map +1 -1
  353. package/dist/verify/shortfalls/shortfall-rework-hold.d.ts +66 -0
  354. package/dist/verify/shortfalls/shortfall-rework-hold.d.ts.map +1 -0
  355. package/dist/verify/shortfalls/shortfall-rework-hold.js +230 -0
  356. package/dist/verify/shortfalls/shortfall-rework-hold.js.map +1 -0
  357. package/dist/verify/shortfalls/shortfall-rulings.d.ts +40 -10
  358. package/dist/verify/shortfalls/shortfall-rulings.d.ts.map +1 -1
  359. package/dist/verify/shortfalls/shortfall-rulings.js +59 -15
  360. package/dist/verify/shortfalls/shortfall-rulings.js.map +1 -1
  361. package/dist/worktree/focus-worktree-state.d.ts.map +1 -1
  362. package/dist/worktree/focus-worktree-state.js +1 -0
  363. package/dist/worktree/focus-worktree-state.js.map +1 -1
  364. package/dist/worktree/provision.d.ts.map +1 -1
  365. package/dist/worktree/provision.js +1 -0
  366. package/dist/worktree/provision.js.map +1 -1
  367. package/dist/worktree/safety.d.ts.map +1 -1
  368. package/dist/worktree/safety.js +1 -0
  369. package/dist/worktree/safety.js.map +1 -1
  370. package/package.json +1 -1
@@ -0,0 +1,121 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/completion/state-cascade/standing-approval-failed-verdict.test.ts
3
+ // PINNED-BY-END
4
+ import { filterWorkIssues } from '../../types/issue-status.js';
5
+ import { splitOpenWork } from '../../delivery/recorded-concerns.js';
6
+ import { sameCommit } from '../../queries/focus-review/focus-review-approval.js';
7
+ import { readFailedShortfallJudgment } from '../../verify/shortfalls/latest-shortfall-judgment.js';
8
+ import { rulingRecordedSince } from '../../verify/shortfalls/shortfall-park.js';
9
+ import { createLogger } from '../../log/daemon-log.js';
10
+ const log = createLogger({ module: 'state-cascade' });
11
+ /** deliveryId -> the last state logged for it (one line per delivery per state, not one per poll). */
12
+ const lastNoted = new Map();
13
+ /**
14
+ * The deliveries whose latest verify judgment is a shortfall failure (rule 1 of
15
+ * the module header); every other delivery's logged state is forgotten.
16
+ */
17
+ export function failedVerdictCandidates(deliveries) {
18
+ const out = [];
19
+ for (const delivery of deliveries) {
20
+ const failed = readFailedShortfallJudgment(delivery);
21
+ if (failed !== null)
22
+ out.push({ delivery, failed });
23
+ else
24
+ lastNoted.delete(delivery.id);
25
+ }
26
+ return out;
27
+ }
28
+ /** The judged commit when it is the approved head (rule 2), else null. Pure. */
29
+ function judgedAtHead(failed, head) {
30
+ const sha = failed.judgment.judgedSha;
31
+ if (sha === undefined || sha === '')
32
+ return null;
33
+ return sameCommit(sha, head.approvedSha) || (head.advanceHead !== null && sameCommit(sha, head.advanceHead)) ? sha : null;
34
+ }
35
+ /** What the streak compares for a failed-verdict decline (module header, THE SIGNATURE). Pure. */
36
+ export function failedVerdictSignature(failed, approvedSha) {
37
+ const nodes = failed.judgment.nodes.map((n) => `${n.nodeId}:${n.unjudged ?? ''}:${n.reason}`).join(';');
38
+ return `failed_verdict|${approvedSha}|${failed.outcome ?? 'unrecorded'}|${failed.judgment.judgedSha ?? ''}|${failed.judgment.heldAt}|${nodes}`;
39
+ }
40
+ /** Forget every logged state (the convergence's test seam calls it). */
41
+ export function forgetFailedVerdictNotes() {
42
+ lastNoted.clear();
43
+ }
44
+ function noteOnce(d, state, line) {
45
+ if (lastNoted.get(d.id) === state)
46
+ return;
47
+ lastNoted.set(d.id, state);
48
+ log.info(line());
49
+ }
50
+ /** Why `d` is not counted this poll (module header, NOT COUNTED), or null when nothing answers for it. */
51
+ async function answeredBy(d, failed, deps, concernIds) {
52
+ if (deps.isGateRunSelected?.(d.id) === true)
53
+ return 'a verify run for it is in flight';
54
+ if (deps.readShortfallRulings) {
55
+ const { fingerprint } = await deps.readShortfallRulings(d.id);
56
+ if (rulingRecordedSince(failed.appliedRulings, fingerprint))
57
+ return 'a ruling verify did not apply is in force; it awaits re-judgement';
58
+ }
59
+ const work = filterWorkIssues(await deps.getDeliveryIssues(d.id));
60
+ if (splitOpenWork(work, await concernIds()).owed.length > 0)
61
+ return 'it owes open work; a coding pass is next';
62
+ return null;
63
+ }
64
+ /** The decline for one counted delivery: its judgment, held at the approved head. */
65
+ function declineOf(d, failed, judgedSha, approvedSha, readFailure) {
66
+ const payload = {
67
+ heldAt: failed.judgment.heldAt, judgedSha, outcome: failed.outcome, nodes: failed.judgment.nodes,
68
+ };
69
+ const ids = failed.judgment.nodes.map((n) => n.nodeId).join(', ');
70
+ if (readFailure !== null) {
71
+ return { deliveryId: d.id, deliveryName: d.name, kind: 'read_failed', reason: `a read failed (${readFailure})`, failed: payload };
72
+ }
73
+ return {
74
+ deliveryId: d.id,
75
+ deliveryName: d.name,
76
+ kind: 'failed_verdict',
77
+ reason: `verify's latest judgment of ${approvedSha.slice(0, 12)} is a failure on node(s) ${ids}`,
78
+ signature: failedVerdictSignature(failed, approvedSha),
79
+ failed: payload,
80
+ };
81
+ }
82
+ /**
83
+ * Examine each failed-verdict candidate at the approved head and return the
84
+ * declines to count (module header). `readConcernIds` is called at most once.
85
+ * Never throws: a read that fails is a `read_failed` decline.
86
+ */
87
+ export async function examineFailedVerdicts(focus, candidates, head, deps, readConcernIds) {
88
+ let concerns;
89
+ const concernIds = () => (concerns ??= readConcernIds());
90
+ const declines = [];
91
+ for (const { delivery: d, failed } of candidates) {
92
+ const judgedSha = judgedAtHead(failed, head);
93
+ if (judgedSha === null) {
94
+ lastNoted.delete(d.id);
95
+ continue;
96
+ }
97
+ let answered;
98
+ try {
99
+ answered = await answeredBy(d, failed, deps, concernIds);
100
+ }
101
+ catch (err) {
102
+ const decline = declineOf(d, failed, judgedSha, head.approvedSha, err.message);
103
+ noteOnce(d, decline.reason, () => `[state-cascade] Delivery "${d.name}" on "${focus.focusName}" failed verify at the approved head ` +
104
+ `${head.approvedSha.slice(0, 12)} and could not be examined this poll: ${decline.reason}. Left in verify; re-read next poll.`);
105
+ declines.push(decline);
106
+ continue;
107
+ }
108
+ if (answered !== null) {
109
+ noteOnce(d, `answered:${answered}`, () => `[state-cascade] Delivery "${d.name}" on "${focus.focusName}" failed verify at the ` +
110
+ `approved head ${head.approvedSha.slice(0, 12)}; not stranded: ${answered}.`);
111
+ continue;
112
+ }
113
+ const decline = declineOf(d, failed, judgedSha, head.approvedSha, null);
114
+ noteOnce(d, decline.signature ?? decline.reason, () => `[state-cascade] Delivery "${d.name}" on "${focus.focusName}": ${decline.reason}, ` +
115
+ 'and nothing re-judges it -- no verify run, no park, no ruling since that judgment, no owed work. Left in verify; ' +
116
+ 'filed as stranded if it stands for the stranded poll count. A shortfall ruling on those nodes, or a new delivery commit, moves it.');
117
+ declines.push(decline);
118
+ }
119
+ return declines;
120
+ }
121
+ //# sourceMappingURL=standing-approval-failed-verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standing-approval-failed-verdict.js","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-failed-verdict.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,mGAAmG;AACnG,gBAAgB;AAmEhB,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,qDAAqD,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAgC,MAAM,sDAAsD,CAAC;AACjI,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAIhF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AA6BtD,sGAAsG;AACtG,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAAwC;IAC9E,MAAM,GAAG,GAA6B,EAAE,CAAC;IACzC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,MAAM,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;;YAC/C,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,SAAS,YAAY,CAAC,MAA+B,EAAE,IAAuB;IAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;IACtC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5H,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,sBAAsB,CAAC,MAA+B,EAAE,WAAmB;IACzF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxG,OAAO,kBAAkB,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,YAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;AACjJ,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,wBAAwB;IACtC,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAoB,EAAE,KAAa,EAAE,IAAkB;IACvE,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK;QAAE,OAAO;IAC1C,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3B,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACnB,CAAC;AAED,0GAA0G;AAC1G,KAAK,UAAU,UAAU,CACvB,CAAoB,EACpB,MAA+B,EAC/B,IAAuB,EACvB,UAA8C;IAE9C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI;QAAE,OAAO,kCAAkC,CAAC;IACvF,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,mBAAmB,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC;YAAE,OAAO,mEAAmE,CAAC;IAC1I,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,0CAA0C,CAAC;IAC/G,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qFAAqF;AACrF,SAAS,SAAS,CAChB,CAAoB,EACpB,MAA+B,EAC/B,SAAiB,EACjB,WAAmB,EACnB,WAA0B;IAE1B,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;KACjG,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,WAAW,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACpI,CAAC;IACD,OAAO;QACL,UAAU,EAAE,CAAC,CAAC,EAAE;QAChB,YAAY,EAAE,CAAC,CAAC,IAAI;QACpB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,+BAA+B,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,GAAG,EAAE;QAChG,SAAS,EAAE,sBAAsB,CAAC,MAAM,EAAE,WAAW,CAAC;QACtD,MAAM,EAAE,OAAO;KAChB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAyB,EACzB,UAA6C,EAC7C,IAAuB,EACvB,IAAuB,EACvB,cAAkD;IAElD,IAAI,QAAkD,CAAC;IACvD,MAAM,UAAU,GAAG,GAAiC,EAAE,CAAC,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC,CAAC;IACvF,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,KAAK,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,QAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAC1F,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,SAAS,uCAAuC;gBAClI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,yCAAyC,OAAO,CAAC,MAAM,sCAAsC,CAAC,CAAC;YACjI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,QAAQ,CAAC,CAAC,EAAE,YAAY,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,SAAS,yBAAyB;gBAC5H,iBAAiB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,QAAQ,GAAG,CAAC,CAAC;YAChF,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACxE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,SAAS,MAAM,OAAO,CAAC,MAAM,IAAI;YACxI,mHAAmH;YACnH,oIAAoI,CAAC,CAAC;QACxI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { FileEscalationIdempotentParams, FileEscalationIdempotentResult } from '../../supervision/escalation-suppression.js';
2
+ import { type StrandedFailedJudgment } from './failed-verdict-stranded-filing.js';
2
3
  /** Consecutive passes with the identical decline before the delivery is filed, and between asks after (~2.5 min at the 30s poll). */
3
4
  export declare const STANDING_APPROVAL_STRANDED_POLLS = 5;
4
5
  /** The filing's escalation_kind (see the module header for why this existing kind). */
@@ -6,13 +7,17 @@ export declare const STANDING_APPROVAL_STRANDED_KIND = "verify_gate_unclearable"
6
7
  /** metadata.diagnosis of the filing (its cause namespace). */
7
8
  export declare const STANDING_APPROVAL_STRANDED_DIAGNOSIS = "standing_approval_unconverged";
8
9
  /** Why a pass declined a delivery: the class decides whether it is ever filed. */
9
- export type StandingApprovalDeclineKind = 'census' | 'reconciler' | 'operator_hold' | 'external_hold' | 'shortfall_hold' | 'verdict' | 'read_failed';
10
+ export type StandingApprovalDeclineKind = 'census' | 'reconciler' | 'operator_hold' | 'external_hold' | 'shortfall_hold' | 'verdict' | 'read_failed' | 'failed_verdict';
10
11
  /** One decline a pass made. */
11
12
  export interface StandingApprovalDecline {
12
13
  deliveryId: string;
13
14
  deliveryName: string;
14
15
  kind: StandingApprovalDeclineKind;
15
16
  reason: string;
17
+ /** What the identical-poll streak compares; the reason when absent. */
18
+ signature?: string;
19
+ /** The failed verify judgment that holds it (a failed-verdict decline, or a failed one the pass could not examine). */
20
+ failed?: StrandedFailedJudgment;
16
21
  }
17
22
  /** The focus the filing is anchored under. */
18
23
  export interface StrandedFocus {
@@ -23,11 +28,19 @@ export interface StrandedFocus {
23
28
  }
24
29
  /** The idempotent filer (supervision/escalation-suppression.ts fileEscalationIdempotent in production). */
25
30
  export type StrandedEscalationFiler = (params: FileEscalationIdempotentParams) => Promise<FileEscalationIdempotentResult>;
26
- /** Test seam: forget every streak. */
31
+ /**
32
+ * Resolves the open rows carrying any of `causeKeys` on the focus and retires the
33
+ * keys where they were absorbed as symptoms; returns the count resolved
34
+ * (supervision/escalation-clearing.ts resolveOpenEscalationsOfCause in production).
35
+ */
36
+ export type StrandedEscalationResolver = (focusId: string, causeKeys: readonly string[], notes: string) => Promise<number>;
37
+ /** Test seam: forget every streak and every ask. */
27
38
  export declare function __resetStandingApprovalStrandedForTests(): void;
28
39
  /** The cause key: one filing per delivery per approved commit. Pure. */
29
40
  export declare function strandedCauseKey(deliveryId: string, approvedSha: string): string;
30
- /** The filing for one stranded delivery. Pure. */
41
+ /** Every stranded cause key a delivery can carry at an approved commit: the passed and the failed-verdict filing. Pure. */
42
+ export declare function strandedCauseKeys(deliveryId: string, approvedSha: string): string[];
43
+ /** The filing for one stranded delivery: the failed-verdict variant when a failed judgment holds it. Pure. */
31
44
  export declare function buildStrandedEscalation(focus: StrandedFocus, decline: StandingApprovalDecline, approvedSha: string, polls: number): FileEscalationIdempotentParams;
32
45
  /**
33
46
  * Record one pass's declines and ask the idempotent gate to file each delivery
@@ -36,4 +49,17 @@ export declare function buildStrandedEscalation(focus: StrandedFocus, decline: S
36
49
  * at: one not declined this pass loses its streak. Never throws.
37
50
  */
38
51
  export declare function reportStandingApprovalDeclines(focus: StrandedFocus, approvedSha: string | null, seen: readonly string[], declines: readonly StandingApprovalDecline[], file: StrandedEscalationFiler | undefined): Promise<string[]>;
52
+ /** The delivery fields the close half reads. */
53
+ export interface StrandedDeliveryState {
54
+ id: string;
55
+ name: string;
56
+ executionStatus: string | null;
57
+ }
58
+ /**
59
+ * The close half (module header): resolve the open stranded rows of every
60
+ * delivery whose stranding ended -- `converged` by this pass at `approvedSha`, or
61
+ * one the gate was asked about that now sits outside verify. A resolve that
62
+ * fails is retried on the next pass. Returns the count resolved. Never throws.
63
+ */
64
+ export declare function resolveClearedStrands(focus: StrandedFocus, deliveries: readonly StrandedDeliveryState[], converged: readonly string[], approvedSha: string | null, resolve: StrandedEscalationResolver | undefined): Promise<number>;
39
65
  //# sourceMappingURL=standing-approval-stranded.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"standing-approval-stranded.d.ts","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-stranded.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EACV,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,6CAA6C,CAAC;AAMrD,qIAAqI;AACrI,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD,uFAAuF;AACvF,eAAO,MAAM,+BAA+B,4BAA4B,CAAC;AAEzE,8DAA8D;AAC9D,eAAO,MAAM,oCAAoC,kCAAmC,CAAC;AAErF,kFAAkF;AAClF,MAAM,MAAM,2BAA2B,GACnC,QAAQ,GAAG,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,CAAC;AAK/G,+BAA+B;AAC/B,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,2BAA2B,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2GAA2G;AAC3G,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,8BAA8B,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAO1H,sCAAsC;AACtC,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,kDAAkD;AAClD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,uBAAuB,EAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,8BAA8B,CAqChC;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,QAAQ,EAAE,SAAS,uBAAuB,EAAE,EAC5C,IAAI,EAAE,uBAAuB,GAAG,SAAS,GACxC,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB"}
1
+ {"version":3,"file":"standing-approval-stranded.d.ts","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-stranded.ts"],"names":[],"mappings":"AA0EA,OAAO,KAAK,EACV,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,6CAA6C,CAAC;AAMrD,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAKhH,qIAAqI;AACrI,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD,uFAAuF;AACvF,eAAO,MAAM,+BAA+B,4BAA4B,CAAC;AAEzE,8DAA8D;AAC9D,eAAO,MAAM,oCAAoC,kCAAmC,CAAC;AAErF,kFAAkF;AAClF,MAAM,MAAM,2BAA2B,GACnC,QAAQ,GAAG,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAKlI,+BAA+B;AAC/B,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,2BAA2B,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uHAAuH;IACvH,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2GAA2G;AAC3G,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,8BAA8B,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAE1H;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAU3H,oDAAoD;AACpD,wBAAgB,uCAAuC,IAAI,IAAI,CAG9D;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,2HAA2H;AAC3H,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnF;AAyCD,8GAA8G;AAC9G,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,uBAAuB,EAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,8BAA8B,CAsChC;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,QAAQ,EAAE,SAAS,uBAAuB,EAAE,EAC5C,IAAI,EAAE,uBAAuB,GAAG,SAAS,GACxC,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB;AAED,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAUD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,SAAS,qBAAqB,EAAE,EAC5C,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,OAAO,EAAE,0BAA0B,GAAG,SAAS,GAC9C,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
@@ -1,5 +1,9 @@
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/completion/state-cascade/standing-approval-stranded.test.ts
2
+ // Pinned by: packages/daemon/src/completion/state-cascade/standing-approval-failed-verdict.test.ts,
3
+ // packages/daemon/src/completion/state-cascade/standing-approval-stranded.test.ts,
4
+ // packages/daemon/src/integration/approved-head-hold-release-no-directive-regression.test.ts,
5
+ // packages/daemon/src/integration/failed-verdict-ruling-rejudge-regression.test.ts,
6
+ // packages/daemon/src/supervision/agent-resolvable-promotion-sweep.test.ts
3
7
  // PINNED-BY-END
4
8
  /**
5
9
  * A delivery the standing-approval convergence keeps declining for the SAME reason
@@ -35,6 +39,25 @@
35
39
  * again. A delivery that converges, stops being a candidate, or changes reason
36
40
  * starts its count over.
37
41
  *
42
+ * A FAILED VERDICT is reported here too
43
+ * (completion/state-cascade/standing-approval-failed-verdict.ts): a verify
44
+ * delivery whose latest verify judgment of the approved commit is a failure, with
45
+ * nothing re-judging it, is declined as `failed_verdict` on every poll, counted by
46
+ * the same streak and filed after the same STANDING_APPROVAL_STRANDED_POLLS. Its
47
+ * streak is keyed on the decline's `signature` (the head, the row's outcome and
48
+ * the judgment), not its prose; its filing names every held node and the act that
49
+ * moves it (completion/state-cascade/failed-verdict-stranded-filing.ts) under the
50
+ * same cause family with its own subject (standingApprovalFailedVerdictCauseKey).
51
+ *
52
+ * THE CLOSE HALF. A delivery whose stranding ended -- the pass converged it to
53
+ * done, or a delivery the gate was asked about has left verify -- has its open
54
+ * stranded rows (either variant, for that approved commit) resolved auto_swept,
55
+ * and the keys retired where they were absorbed as symptoms
56
+ * (resolveClearedStrands; production: supervision/escalation-clearing.ts
57
+ * resolveOpenEscalationsOfCause). A convergence asks every time (a restart cannot
58
+ * hide a row from it); leaving verify is known only for a delivery this process
59
+ * asked the gate about. Best-effort, like the filing.
60
+ *
38
61
  * Two declines are never filed: an operator hold (the open hold IS the human
39
62
  * signal) and an external hold (a declared wait on another product's request,
40
63
  * which clears itself). The kind is verify_gate_unclearable, whose self-report
@@ -46,8 +69,9 @@
46
69
  *
47
70
  * @module completion/state-cascade/standing-approval-stranded
48
71
  */
49
- import { ESCALATION_DISPOSITIONS, ESCALATION_REASONS } from '@telora/daemon-core';
50
- import { STANDING_APPROVAL_STRANDED_CAUSE, standingApprovalStrandedCauseKey } from '../../queries/escalations/cause-key.js';
72
+ import { DELIVERY_STATUS, ESCALATION_DISPOSITIONS, ESCALATION_REASONS } from '@telora/daemon-core';
73
+ import { STANDING_APPROVAL_STRANDED_CAUSE, standingApprovalFailedVerdictCauseKey, standingApprovalStrandedCauseKey, } from '../../queries/escalations/cause-key.js';
74
+ import { buildFailedVerdictFilingText } from './failed-verdict-stranded-filing.js';
51
75
  import { createLogger } from '../../log/daemon-log.js';
52
76
  const log = createLogger({ module: 'state-cascade' });
53
77
  /** Consecutive passes with the identical decline before the delivery is filed, and between asks after (~2.5 min at the 30s poll). */
@@ -60,16 +84,57 @@ export const STANDING_APPROVAL_STRANDED_DIAGNOSIS = STANDING_APPROVAL_STRANDED_C
60
84
  const NEVER_FILED = new Set(['operator_hold', 'external_hold']);
61
85
  /** Per-delivery streak of the identical decline since it began, or since the gate was last asked. */
62
86
  const streaks = new Map();
63
- /** Test seam: forget every streak. */
87
+ /** Delivery id -> the approved commit the gate was last asked to file it at (the close half's memory). */
88
+ const asked = new Map();
89
+ /** Test seam: forget every streak and every ask. */
64
90
  export function __resetStandingApprovalStrandedForTests() {
65
91
  streaks.clear();
92
+ asked.clear();
66
93
  }
67
94
  /** The cause key: one filing per delivery per approved commit. Pure. */
68
95
  export function strandedCauseKey(deliveryId, approvedSha) {
69
96
  return standingApprovalStrandedCauseKey(deliveryId, approvedSha);
70
97
  }
71
- /** The filing for one stranded delivery. Pure. */
98
+ /** Every stranded cause key a delivery can carry at an approved commit: the passed and the failed-verdict filing. Pure. */
99
+ export function strandedCauseKeys(deliveryId, approvedSha) {
100
+ return [standingApprovalStrandedCauseKey(deliveryId, approvedSha), standingApprovalFailedVerdictCauseKey(deliveryId, approvedSha)];
101
+ }
102
+ /** The filing for a delivery held by a failed verify verdict at the approved commit (module header). Pure. */
103
+ function buildFailedVerdictStrandedEscalation(focus, decline, failed, approvedSha, polls) {
104
+ const text = buildFailedVerdictFilingText({
105
+ focusName: focus.focusName, deliveryName: decline.deliveryName, approvedSha, polls,
106
+ reason: decline.reason, examined: decline.kind === 'failed_verdict', failed,
107
+ });
108
+ return {
109
+ causeKey: standingApprovalFailedVerdictCauseKey(decline.deliveryId, approvedSha),
110
+ organizationId: focus.organizationId,
111
+ sessionId: '',
112
+ issueId: null,
113
+ reasonType: ESCALATION_REASONS.ERROR_ENCOUNTERED,
114
+ disposition: ESCALATION_DISPOSITIONS.NEEDS_OPERATOR,
115
+ humanAct: { kind: 'unreachable_capability', act: text.act },
116
+ anchor: { deliveryId: decline.deliveryId, focusId: focus.focusId },
117
+ productId: focus.productId,
118
+ escalationKind: STANDING_APPROVAL_STRANDED_KIND,
119
+ description: text.description,
120
+ whatWasTried: text.whatWasTried,
121
+ helpNeeded: text.act,
122
+ metadata: {
123
+ cause: STANDING_APPROVAL_STRANDED_KIND,
124
+ diagnosis: STANDING_APPROVAL_STRANDED_DIAGNOSIS,
125
+ deliveryName: decline.deliveryName,
126
+ approvedSha,
127
+ declineKind: decline.kind,
128
+ reason: decline.reason,
129
+ consecutivePolls: polls,
130
+ ...text.metadata,
131
+ },
132
+ };
133
+ }
134
+ /** The filing for one stranded delivery: the failed-verdict variant when a failed judgment holds it. Pure. */
72
135
  export function buildStrandedEscalation(focus, decline, approvedSha, polls) {
136
+ if (decline.failed)
137
+ return buildFailedVerdictStrandedEscalation(focus, decline, decline.failed, approvedSha, polls);
73
138
  const sha = approvedSha.slice(0, 12);
74
139
  const act = `Decide delivery "${decline.deliveryName}" on focus "${focus.focusName}": it passed verify at ${sha}, the ` +
75
140
  `commit the focus's standing approval judged, but cannot converge to done because ${decline.reason}. Clear ` +
@@ -117,15 +182,17 @@ export async function reportStandingApprovalDeclines(focus, approvedSha, seen, d
117
182
  streaks.delete(id);
118
183
  const filed = [];
119
184
  for (const d of declines) {
185
+ const signature = d.signature ?? d.reason;
120
186
  const prior = streaks.get(d.deliveryId);
121
- const streak = { reason: d.reason, count: prior?.reason === d.reason ? prior.count + 1 : 1 };
187
+ const streak = { signature, count: prior?.signature === signature ? prior.count + 1 : 1 };
122
188
  streaks.set(d.deliveryId, streak);
123
189
  if (streak.count < STANDING_APPROVAL_STRANDED_POLLS || NEVER_FILED.has(d.kind))
124
190
  continue;
125
191
  if (approvedSha === null || file === undefined)
126
192
  continue;
127
193
  // Asked now; the next ask is STANDING_APPROVAL_STRANDED_POLLS passes on. The open row suppresses it, a resolved one does not.
128
- streaks.set(d.deliveryId, { reason: d.reason, count: 0 });
194
+ streaks.set(d.deliveryId, { signature, count: 0 });
195
+ asked.set(d.deliveryId, approvedSha);
129
196
  try {
130
197
  const result = await file(buildStrandedEscalation(focus, d, approvedSha, streak.count));
131
198
  if (result.filed) {
@@ -139,4 +206,51 @@ export async function reportStandingApprovalDeclines(focus, approvedSha, seen, d
139
206
  }
140
207
  return filed;
141
208
  }
209
+ /** Why a delivery's stranding ended, for the resolution note. Pure. */
210
+ function endedNote(d, convergedHere, approvedSha) {
211
+ const name = d ? `"${d.name}"` : 'the delivery';
212
+ return convergedHere
213
+ ? `Auto-resolved by the daemon: delivery ${name} converged to done on the standing approval at ${approvedSha.slice(0, 12)}; it is no longer stranded.`
214
+ : `Auto-resolved by the daemon: delivery ${name} left verify (now ${d?.executionStatus ?? 'unknown'}); it is no longer stranded at the approved head ${approvedSha.slice(0, 12)}.`;
215
+ }
216
+ /**
217
+ * The close half (module header): resolve the open stranded rows of every
218
+ * delivery whose stranding ended -- `converged` by this pass at `approvedSha`, or
219
+ * one the gate was asked about that now sits outside verify. A resolve that
220
+ * fails is retried on the next pass. Returns the count resolved. Never throws.
221
+ */
222
+ export async function resolveClearedStrands(focus, deliveries, converged, approvedSha, resolve) {
223
+ if (resolve === undefined)
224
+ return 0;
225
+ // Delivery id -> every approved commit its stranding may have been filed at.
226
+ const ended = new Map();
227
+ const end = (id, sha) => { ended.set(id, (ended.get(id) ?? new Set()).add(sha)); };
228
+ if (approvedSha !== null)
229
+ for (const id of converged)
230
+ end(id, approvedSha);
231
+ for (const d of deliveries) {
232
+ const sha = asked.get(d.id);
233
+ if (sha !== undefined && (d.executionStatus !== DELIVERY_STATUS.VERIFY || converged.includes(d.id)))
234
+ end(d.id, sha);
235
+ }
236
+ let resolved = 0;
237
+ for (const [id, shas] of ended) {
238
+ const sha = asked.get(id);
239
+ asked.delete(id);
240
+ const d = deliveries.find((x) => x.id === id);
241
+ const keys = [...shas].flatMap((at) => strandedCauseKeys(id, at));
242
+ const at = approvedSha !== null && converged.includes(id) ? approvedSha : [...shas][0] ?? '';
243
+ try {
244
+ const n = await resolve(focus.focusId, keys, endedNote(d, converged.includes(id), at));
245
+ resolved += n;
246
+ if (n > 0)
247
+ log.info(`[state-cascade] Delivery "${d?.name ?? id}" on "${focus.focusName}" is no longer stranded; resolved its ${n} stranded escalation(s).`);
248
+ }
249
+ catch (err) {
250
+ asked.set(id, sha ?? at);
251
+ log.warn(`[state-cascade] failed to resolve the stranded-delivery escalation for "${d?.name ?? id}" (retried next poll): ${err.message}`);
252
+ }
253
+ }
254
+ return resolved;
255
+ }
142
256
  //# sourceMappingURL=standing-approval-stranded.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standing-approval-stranded.js","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-stranded.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standing-approval-stranded.js","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-stranded.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ import { type StandingApprovalDeps } from './standing-approval-convergence.js';
15
15
  import { type RecordedConcernReader } from '../../delivery/recorded-concerns.js';
16
16
  import { type BranchAheadRead, type CompletionMergePendingDeps } from '../../merge/completion-merge-pending.js';
17
17
  import { type FocusHeadGateVerdict, type ReviewRequestGateDeps } from './review-request-gate.js';
18
+ import { type FocusHeadVerifyJudgment, type ReviewVerifyJudgmentDeps } from './review-verify-judgment-gate.js';
18
19
  /** Injectable dependencies for cascade functions (testing). */
19
20
  export interface CascadeDeps {
20
21
  getFocusDeliveries: (focusId: string) => Promise<FocusDeliveryInfo[]>;
@@ -96,6 +97,17 @@ export interface CascadeDeps {
96
97
  * object omitting it behaves as before (no gate).
97
98
  */
98
99
  readHeadGateVerdict?: (focusId: string, verifyDeliveries: readonly FocusDeliveryInfo[]) => Promise<FocusHeadGateVerdict>;
100
+ /**
101
+ * Whether verify has FINISHED judging the focus HEAD across its verify deliveries
102
+ * (completion/state-cascade/review-verify-judgment-gate.ts): no verify run in
103
+ * flight for any of them, and a verify outcome recorded for that HEAD -- effect
104
+ * reconciliation included -- for each one verify judges. checkAutoReview reads it
105
+ * after the gate verdict, whose record is written before the reconciliation, and
106
+ * opens the window only on `judged`; a recorded failure routes rework instead.
107
+ * Fails CLOSED. Wired per focus by runFocusCascadePass; a partial test deps
108
+ * object omitting it behaves as before (the gate verdict alone decides).
109
+ */
110
+ readVerifyJudgment?: (focusId: string, verifyDeliveries: readonly FocusDeliveryInfo[]) => Promise<FocusHeadVerifyJudgment>;
99
111
  }
100
112
  /**
101
113
  * Every collaborator of one cascade pass (runCascadeChecks), bound once at the
@@ -122,6 +134,8 @@ export interface StateCascadeContext {
122
134
  reviewCycleCapHold: ReviewCycleCapHoldDeps;
123
135
  /** The gate verdict reads the review request waits on (completion/state-cascade/review-request-gate.ts). */
124
136
  reviewRequestGate: ReviewRequestGateDeps;
137
+ /** The verify-outcome reads the review request waits on after the gate verdict (completion/state-cascade/review-verify-judgment-gate.ts). */
138
+ reviewVerifyJudgment: ReviewVerifyJudgmentDeps;
125
139
  /** The pending completion merge that holds the arm through it (merge/completion-merge-pending.ts). */
126
140
  completionMergePending: CompletionMergePendingDeps & {
127
141
  readBranchAhead: (repoPath: string, branchName: string, integrationBranch: string) => BranchAheadRead;
@@ -1 +1 @@
1
- {"version":3,"file":"state-cascade.d.ts","sourceRoot":"","sources":["../../../src/completion/state-cascade/state-cascade.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAqC,KAAK,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAC1I,OAAO,EAA8C,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EAC1B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACzG,OAAO,EAAmC,KAAK,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACzH,OAAO,EAA6B,KAAK,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC3G,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEvG,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAChC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAsD,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAMrJ,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,8GAA8G;IAC9G,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjH,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnE;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,qBAAqB,CAAC;IAC/C;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAC9E;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1E;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,iBAAiB,EAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC1H;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,qFAAqF;IACrF,OAAO,EAAE,WAAW,CAAC;IACrB,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,WAAW,EAAE,eAAe,CAAC;IAC7B,kHAAkH;IAClH,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,oBAAoB,CAAC;IAC1I,WAAW,EAAE,eAAe,CAAC;IAC7B,eAAe,EAAE,mBAAmB,CAAC;IACrC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,yBAAyB,EAAE,6BAA6B,CAAC;IACzD,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,4FAA4F;IAC5F,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,4GAA4G;IAC5G,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,sGAAsG;IACtG,sBAAsB,EAAE,0BAA0B,GAAG;QACnD,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,eAAe,CAAC;KACvG,CAAC;CACH;AAED,sHAAsH;AACtH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE,eAAe,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAMzJ;AAED,qGAAqG;AACrG,wBAAsB,oCAAoC,CACxD,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC/D,UAAU,EAAE,iBAAiB,EAAE,EAC/B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,CAQf;AAkED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAExE;AAcD;;;GAGG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAKxD;AA6HD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,2BAA2B,EAClC,cAAc,EAAE,cAAc,GAAG,IAAI,EACrC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAIf;AAsGD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,2BAA2B,EAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAsEf;AA6KD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBpG"}
1
+ {"version":3,"file":"state-cascade.d.ts","sourceRoot":"","sources":["../../../src/completion/state-cascade/state-cascade.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: 24 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/completion/state-cascade/state-cascade.ts
2
+ // Pinned by: 27 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/completion/state-cascade/state-cascade.ts
3
3
  // PINNED-BY-END
4
4
  /**
5
5
  * Deterministic state cascade engine.
@@ -49,6 +49,7 @@ import { NO_RECORDED_CONCERNS } from '../../delivery/recorded-concerns.js';
49
49
  import { createLogger } from '../../log/daemon-log.js';
50
50
  import { completionMergePendingFor, noteCompletionMergePendingWritten, reconcileCompletionMergePending, } from '../../merge/completion-merge-pending.js';
51
51
  import { readFocusHeadGateVerdict, verdictOpensReviewWindow } from './review-request-gate.js';
52
+ import { declinesReviewBeforeVerifyJudged, readFocusHeadVerifyJudgment, __resetReviewVerifyJudgmentGateForTests, } from './review-verify-judgment-gate.js';
52
53
  import { recordPreReviewRunNotOwed } from '../../daemon-state/pre-review-run-not-owed.js';
53
54
  const log = createLogger({ module: 'state-cascade' });
54
55
  /** The window-open write for this pass: it marks the completion merge pending unless git proves the branch merged. */
@@ -163,6 +164,7 @@ export function __resetReviewSignaturesForTesting() {
163
164
  settledSweptFocuses.clear();
164
165
  parkedFocusesLogged.clear();
165
166
  gateDeclineLogged.clear();
167
+ __resetReviewVerifyJudgmentGateForTests();
166
168
  }
167
169
  /**
168
170
  * When a focus reaches the verifying phase and auto-review is enabled
@@ -243,12 +245,14 @@ function declinesReviewWindowOnIssues(focusId, next) {
243
245
  }
244
246
  return false;
245
247
  }
246
- function logParkedFocusOnce(focusId, parkedCount) {
248
+ function logParkedFocusOnce(focusId, parkedIds, verifyCount) {
247
249
  if (parkedFocusesLogged.has(focusId))
248
250
  return;
249
251
  parkedFocusesLogged.add(focusId);
250
- log.info(`[state-cascade] Not opening a review window on focus ${focusId}: all ${parkedCount} verify delivery(ies) are ` +
251
- `parked on a repeating verify shortfall -- neither review nor coding is next until verify releases a park.`);
252
+ const which = parkedIds.length === verifyCount ? `all ${verifyCount}` : `${parkedIds.length} of ${verifyCount}`;
253
+ log.info(`[state-cascade] Not opening a review window on focus ${focusId}: ${which} verify delivery(ies) are parked on a ` +
254
+ `repeating verify shortfall (${parkedIds.join(', ')}) -- a review would approve the head a parked one failed, so ` +
255
+ `neither review nor coding is next until a ruling or a new delivery commit releases the park (its escalation names it).`);
252
256
  }
253
257
  /** A head-verdict reader that reads at most once per pass: the review request and the record share one answer. */
254
258
  function readHeadVerdictOnce(read) {
@@ -319,9 +323,10 @@ async function decideAutoReview(focusId, phase, pipelineConfig, reviewRequestedA
319
323
  });
320
324
  if (next.step === 'not_converged')
321
325
  return;
322
- // Every verify delivery is parked on a repeating shortfall: no review window, no skip record -- verify re-judgement is next.
326
+ // A verify delivery is parked on a repeating shortfall and no unparked one owes work: no review window (it would
327
+ // approve the head the parked one failed), no skip record -- verify re-judgement on a ruling or a new commit is next.
323
328
  if (next.step === 'parked') {
324
- logParkedFocusOnce(focusId, next.verifyDeliveries.length);
329
+ logParkedFocusOnce(focusId, next.parkedDeliveries.map((d) => d.id), next.verifyDeliveries.length);
325
330
  return;
326
331
  }
327
332
  parkedFocusesLogged.delete(focusId);
@@ -362,6 +367,9 @@ async function decideAutoReview(focusId, phase, pipelineConfig, reviewRequestedA
362
367
  // The full gate runs once per focus HEAD, before review: the window opens only on its passing verdict.
363
368
  if (await declinesReviewWithoutPassingVerdict(focusId, verifyDeliveries, deps.readHeadGateVerdict))
364
369
  return;
370
+ // That verdict is recorded before verify reconciles the effects: the window waits for verify to FINISH judging HEAD.
371
+ if (await declinesReviewBeforeVerifyJudged(focusId, verifyDeliveries, deps.readVerifyJudgment))
372
+ return;
365
373
  try {
366
374
  await deps.setReviewRequestedAt(focusId, new Date().toISOString());
367
375
  lastReviewSignature.set(focusId, signature);
@@ -502,6 +510,7 @@ async function runFocusCascadePass(pc, focus, ctx) {
502
510
  readReviewHeadApproval: readHeadApproval,
503
511
  readBreakerHold: () => readBreakerHold({ focusId: focus.focus_id, branchName: focus.branch_name, repoPath: pc.repoPath }, ctx.breakerHold),
504
512
  readHeadGateVerdict: (focusId, verifyDeliveries) => readFocusHeadGateVerdict(ctx.reviewRequestGate, { productId: pc.productId, focusId, focusReadOnly: focus.read_only }, verifyDeliveries),
513
+ readVerifyJudgment: (focusId, verifyDeliveries) => readFocusHeadVerifyJudgment(ctx.reviewVerifyJudgment, { productId: pc.productId, focusId, focusReadOnly: focus.read_only }, verifyDeliveries),
505
514
  });
506
515
  // A verify delivery released at the approved head closes on that approval, not on a second review of the same commit.
507
516
  await convergeOnStandingApproval({ organizationId: pc.organizationId, productId: pc.productId, focusId: focus.focus_id, focusName: focus.focus_name, readOnly: focus.read_only }, deliveries, ctx.standingApproval(pc.productId, focus.focus_id, readHeadApproval));