@telora/daemon 0.22.306 → 0.23.1

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 (414) hide show
  1. package/build-info.json +13 -3
  2. package/dist/audit/audit-floor-policy.js +1 -1
  3. package/dist/audit/audit-floor-policy.js.map +1 -1
  4. package/dist/audit/audit-prompt.d.ts.map +1 -1
  5. package/dist/audit/audit-prompt.js +21 -14
  6. package/dist/audit/audit-prompt.js.map +1 -1
  7. package/dist/completion/completion-event/event.d.ts +7 -0
  8. package/dist/completion/completion-event/event.d.ts.map +1 -1
  9. package/dist/completion/completion-event/event.js.map +1 -1
  10. package/dist/completion/review-cycle-budget/review-cycle-cap.d.ts +9 -1
  11. package/dist/completion/review-cycle-budget/review-cycle-cap.d.ts.map +1 -1
  12. package/dist/completion/review-cycle-budget/review-cycle-cap.js +2 -1
  13. package/dist/completion/review-cycle-budget/review-cycle-cap.js.map +1 -1
  14. package/dist/completion/review-exit/review-census-record.d.ts.map +1 -1
  15. package/dist/completion/review-exit/review-census-record.js +1 -0
  16. package/dist/completion/review-exit/review-census-record.js.map +1 -1
  17. package/dist/completion/review-exit/review-exit-deps.d.ts +2 -0
  18. package/dist/completion/review-exit/review-exit-deps.d.ts.map +1 -1
  19. package/dist/completion/review-exit/review-exit-deps.js +1 -1
  20. package/dist/completion/review-exit/review-exit-evidence.d.ts +10 -0
  21. package/dist/completion/review-exit/review-exit-evidence.d.ts.map +1 -1
  22. package/dist/completion/review-exit/review-exit-evidence.js +12 -2
  23. package/dist/completion/review-exit/review-exit-evidence.js.map +1 -1
  24. package/dist/completion/review-exit/review-exit-falsifiers.d.ts +72 -0
  25. package/dist/completion/review-exit/review-exit-falsifiers.d.ts.map +1 -0
  26. package/dist/completion/review-exit/review-exit-falsifiers.js +84 -0
  27. package/dist/completion/review-exit/review-exit-falsifiers.js.map +1 -0
  28. package/dist/completion/review-exit/review-exit-phase.d.ts +9 -0
  29. package/dist/completion/review-exit/review-exit-phase.d.ts.map +1 -1
  30. package/dist/completion/review-exit/review-exit-phase.js +10 -8
  31. package/dist/completion/review-exit/review-exit-phase.js.map +1 -1
  32. package/dist/completion/review-exit-holds/commit-verdict-release.d.ts.map +1 -1
  33. package/dist/completion/review-exit-holds/commit-verdict-release.js +34 -12
  34. package/dist/completion/review-exit-holds/commit-verdict-release.js.map +1 -1
  35. package/dist/completion/review-exit-holds/review-exit-verdict-gate.d.ts +33 -1
  36. package/dist/completion/review-exit-holds/review-exit-verdict-gate.d.ts.map +1 -1
  37. package/dist/completion/review-exit-holds/review-exit-verdict-gate.js +30 -1
  38. package/dist/completion/review-exit-holds/review-exit-verdict-gate.js.map +1 -1
  39. package/dist/completion/state-cascade/review-approved-head-gate.d.ts +6 -0
  40. package/dist/completion/state-cascade/review-approved-head-gate.d.ts.map +1 -1
  41. package/dist/completion/state-cascade/review-approved-head-gate.js +2 -1
  42. package/dist/completion/state-cascade/review-approved-head-gate.js.map +1 -1
  43. package/dist/completion/state-cascade/review-next-step.d.ts +11 -0
  44. package/dist/completion/state-cascade/review-next-step.d.ts.map +1 -1
  45. package/dist/completion/state-cascade/review-next-step.js +6 -3
  46. package/dist/completion/state-cascade/review-next-step.js.map +1 -1
  47. package/dist/completion/state-cascade/standing-approval-convergence.d.ts +3 -0
  48. package/dist/completion/state-cascade/standing-approval-convergence.d.ts.map +1 -1
  49. package/dist/completion/state-cascade/standing-approval-convergence.js +32 -15
  50. package/dist/completion/state-cascade/standing-approval-convergence.js.map +1 -1
  51. package/dist/completion/state-cascade/state-cascade.d.ts +8 -0
  52. package/dist/completion/state-cascade/state-cascade.d.ts.map +1 -1
  53. package/dist/completion/state-cascade/state-cascade.js +2 -0
  54. package/dist/completion/state-cascade/state-cascade.js.map +1 -1
  55. package/dist/completion/team-exit/status-advance-phase.d.ts +6 -0
  56. package/dist/completion/team-exit/status-advance-phase.d.ts.map +1 -1
  57. package/dist/completion/team-exit/status-advance-phase.js +12 -9
  58. package/dist/completion/team-exit/status-advance-phase.js.map +1 -1
  59. package/dist/completion/team-exit/team-completion.d.ts.map +1 -1
  60. package/dist/completion/team-exit/team-completion.js +1 -0
  61. package/dist/completion/team-exit/team-completion.js.map +1 -1
  62. package/dist/completion/team-exit/terminated-work-reconcile.d.ts +6 -0
  63. package/dist/completion/team-exit/terminated-work-reconcile.d.ts.map +1 -1
  64. package/dist/completion/team-exit/terminated-work-reconcile.js +5 -7
  65. package/dist/completion/team-exit/terminated-work-reconcile.js.map +1 -1
  66. package/dist/completion/team-outcome/apply-advance.d.ts.map +1 -1
  67. package/dist/completion/team-outcome/apply-advance.js +3 -2
  68. package/dist/completion/team-outcome/apply-advance.js.map +1 -1
  69. package/dist/completion/team-outcome/apply-close.d.ts.map +1 -1
  70. package/dist/completion/team-outcome/apply-close.js +1 -0
  71. package/dist/completion/team-outcome/apply-close.js.map +1 -1
  72. package/dist/completion/team-outcome/apply-turn.d.ts.map +1 -1
  73. package/dist/completion/team-outcome/apply-turn.js +13 -7
  74. package/dist/completion/team-outcome/apply-turn.js.map +1 -1
  75. package/dist/completion/team-outcome/decide-close-rows.d.ts.map +1 -1
  76. package/dist/completion/team-outcome/decide-close-rows.js +2 -7
  77. package/dist/completion/team-outcome/decide-close-rows.js.map +1 -1
  78. package/dist/completion/team-outcome/decide-turn-entry-rows.d.ts.map +1 -1
  79. package/dist/completion/team-outcome/decide-turn-entry-rows.js +5 -1
  80. package/dist/completion/team-outcome/decide-turn-entry-rows.js.map +1 -1
  81. package/dist/completion/team-outcome/delivery-advance-types.d.ts +19 -2
  82. package/dist/completion/team-outcome/delivery-advance-types.d.ts.map +1 -1
  83. package/dist/completion/team-outcome/exit-pipeline-state.d.ts +5 -0
  84. package/dist/completion/team-outcome/exit-pipeline-state.d.ts.map +1 -1
  85. package/dist/completion/team-outcome/exit-pipeline-state.js.map +1 -1
  86. package/dist/completion/team-outcome/work-facts.d.ts +7 -1
  87. package/dist/completion/team-outcome/work-facts.d.ts.map +1 -1
  88. package/dist/completion/team-outcome/work-facts.js +9 -4
  89. package/dist/completion/team-outcome/work-facts.js.map +1 -1
  90. package/dist/composition/advance-precheck-context.d.ts.map +1 -1
  91. package/dist/composition/advance-precheck-context.js +1 -0
  92. package/dist/composition/advance-precheck-context.js.map +1 -1
  93. package/dist/composition/completion-event-context.d.ts.map +1 -1
  94. package/dist/composition/completion-event-context.js +4 -0
  95. package/dist/composition/completion-event-context.js.map +1 -1
  96. package/dist/composition/daemon-contexts.js +1 -1
  97. package/dist/composition/execution-directive-context.d.ts.map +1 -1
  98. package/dist/composition/execution-directive-context.js +1 -0
  99. package/dist/composition/execution-directive-context.js.map +1 -1
  100. package/dist/composition/execution-resolver-context.d.ts.map +1 -1
  101. package/dist/composition/execution-resolver-context.js +2 -1
  102. package/dist/composition/execution-resolver-context.js.map +1 -1
  103. package/dist/composition/execution-spawn-context.d.ts +1 -1
  104. package/dist/composition/execution-spawn-context.d.ts.map +1 -1
  105. package/dist/composition/execution-spawn-context.js +6 -3
  106. package/dist/composition/execution-spawn-context.js.map +1 -1
  107. package/dist/composition/reopening-falsifier-context.d.ts +9 -0
  108. package/dist/composition/reopening-falsifier-context.d.ts.map +1 -0
  109. package/dist/composition/reopening-falsifier-context.js +82 -0
  110. package/dist/composition/reopening-falsifier-context.js.map +1 -0
  111. package/dist/composition/review-exit-context.d.ts.map +1 -1
  112. package/dist/composition/review-exit-context.js +5 -2
  113. package/dist/composition/review-exit-context.js.map +1 -1
  114. package/dist/composition/runtime-contexts.d.ts.map +1 -1
  115. package/dist/composition/runtime-contexts.js +4 -3
  116. package/dist/composition/runtime-contexts.js.map +1 -1
  117. package/dist/composition/runtime-delivery-advance-context.d.ts.map +1 -1
  118. package/dist/composition/runtime-delivery-advance-context.js +4 -0
  119. package/dist/composition/runtime-delivery-advance-context.js.map +1 -1
  120. package/dist/composition/runtime-spawn-pass-context.d.ts.map +1 -1
  121. package/dist/composition/runtime-spawn-pass-context.js +5 -1
  122. package/dist/composition/runtime-spawn-pass-context.js.map +1 -1
  123. package/dist/composition/spawn-pass-deps.d.ts.map +1 -1
  124. package/dist/composition/spawn-pass-deps.js +4 -0
  125. package/dist/composition/spawn-pass-deps.js.map +1 -1
  126. package/dist/composition/standing-approval-context.d.ts.map +1 -1
  127. package/dist/composition/standing-approval-context.js +3 -0
  128. package/dist/composition/standing-approval-context.js.map +1 -1
  129. package/dist/composition/state-cascade-context.d.ts.map +1 -1
  130. package/dist/composition/state-cascade-context.js +7 -2
  131. package/dist/composition/state-cascade-context.js.map +1 -1
  132. package/dist/config/live-daemon-config.d.ts.map +1 -1
  133. package/dist/config/live-daemon-config.js +2 -0
  134. package/dist/config/live-daemon-config.js.map +1 -1
  135. package/dist/daemon-state/focus-team-state.js +1 -1
  136. package/dist/delivery/commit-verdict-hold.d.ts +12 -0
  137. package/dist/delivery/commit-verdict-hold.d.ts.map +1 -1
  138. package/dist/delivery/commit-verdict-hold.js +11 -0
  139. package/dist/delivery/commit-verdict-hold.js.map +1 -1
  140. package/dist/delivery/delivery-lifecycle.d.ts.map +1 -1
  141. package/dist/delivery/delivery-lifecycle.js +1 -0
  142. package/dist/delivery/delivery-lifecycle.js.map +1 -1
  143. package/dist/delivery/delivery-reconciler-apply.d.ts.map +1 -1
  144. package/dist/delivery/delivery-reconciler-apply.js +10 -2
  145. package/dist/delivery/delivery-reconciler-apply.js.map +1 -1
  146. package/dist/delivery/delivery-reconciler.d.ts +33 -18
  147. package/dist/delivery/delivery-reconciler.d.ts.map +1 -1
  148. package/dist/delivery/delivery-reconciler.js +33 -23
  149. package/dist/delivery/delivery-reconciler.js.map +1 -1
  150. package/dist/delivery/recorded-concerns.d.ts +57 -0
  151. package/dist/delivery/recorded-concerns.d.ts.map +1 -0
  152. package/dist/delivery/recorded-concerns.js +45 -0
  153. package/dist/delivery/recorded-concerns.js.map +1 -0
  154. package/dist/directive/directive-queue.d.ts +13 -0
  155. package/dist/directive/directive-queue.d.ts.map +1 -1
  156. package/dist/directive/directive-queue.js +19 -1
  157. package/dist/directive/directive-queue.js.map +1 -1
  158. package/dist/directive/phase-sync.d.ts +10 -0
  159. package/dist/directive/phase-sync.d.ts.map +1 -1
  160. package/dist/directive/phase-sync.js +11 -0
  161. package/dist/directive/phase-sync.js.map +1 -1
  162. package/dist/focus/closed-review-window.d.ts +26 -0
  163. package/dist/focus/closed-review-window.d.ts.map +1 -0
  164. package/dist/focus/closed-review-window.js +62 -0
  165. package/dist/focus/closed-review-window.js.map +1 -0
  166. package/dist/focus/daemon-contexts.js +1 -1
  167. package/dist/focus/directive-executor.d.ts.map +1 -1
  168. package/dist/focus/directive-executor.js +3 -8
  169. package/dist/focus/directive-executor.js.map +1 -1
  170. package/dist/focus/focus-executor.js +2 -2
  171. package/dist/focus/focus-executor.js.map +1 -1
  172. package/dist/focus/focus-poller-auto-advance.d.ts +7 -0
  173. package/dist/focus/focus-poller-auto-advance.d.ts.map +1 -1
  174. package/dist/focus/focus-poller-auto-advance.js +8 -6
  175. package/dist/focus/focus-poller-auto-advance.js.map +1 -1
  176. package/dist/focus/focus-poller-spawn.d.ts.map +1 -1
  177. package/dist/focus/focus-poller-spawn.js +39 -28
  178. package/dist/focus/focus-poller-spawn.js.map +1 -1
  179. package/dist/focus/focus-poller-state.d.ts.map +1 -1
  180. package/dist/focus/focus-poller-state.js +2 -0
  181. package/dist/focus/focus-poller-state.js.map +1 -1
  182. package/dist/focus/pending-review-approved-head.d.ts.map +1 -1
  183. package/dist/focus/pending-review-approved-head.js +2 -0
  184. package/dist/focus/pending-review-approved-head.js.map +1 -1
  185. package/dist/focus/pending-spawn-pass-deps.d.ts +3 -0
  186. package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
  187. package/dist/focus/pending-spawn-pass-deps.js +1 -0
  188. package/dist/focus/pending-spawn-pass-deps.js.map +1 -1
  189. package/dist/focus/pending-spawn-review-next-step.d.ts +3 -0
  190. package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -1
  191. package/dist/focus/pending-spawn-review-next-step.js +3 -0
  192. package/dist/focus/pending-spawn-review-next-step.js.map +1 -1
  193. package/dist/focus/ready-focus-team-work.d.ts +8 -0
  194. package/dist/focus/ready-focus-team-work.d.ts.map +1 -1
  195. package/dist/focus/ready-focus-team-work.js +5 -1
  196. package/dist/focus/ready-focus-team-work.js.map +1 -1
  197. package/dist/focus/stranded-review-reroute.d.ts +32 -1
  198. package/dist/focus/stranded-review-reroute.d.ts.map +1 -1
  199. package/dist/focus/stranded-review-reroute.js +50 -1
  200. package/dist/focus/stranded-review-reroute.js.map +1 -1
  201. package/dist/focus/verify-open-issues.d.ts +7 -0
  202. package/dist/focus/verify-open-issues.d.ts.map +1 -1
  203. package/dist/focus/verify-open-issues.js +8 -4
  204. package/dist/focus/verify-open-issues.js.map +1 -1
  205. package/dist/focus-stage-lifecycle/ratify-bar-gate.d.ts.map +1 -1
  206. package/dist/focus-stage-lifecycle/ratify-bar-gate.js +4 -3
  207. package/dist/focus-stage-lifecycle/ratify-bar-gate.js.map +1 -1
  208. package/dist/nexus/intake-prompt-sections.js +3 -3
  209. package/dist/nexus/intake-prompt-sections.js.map +1 -1
  210. package/dist/prd/arm-readiness.d.ts +49 -74
  211. package/dist/prd/arm-readiness.d.ts.map +1 -1
  212. package/dist/prd/arm-readiness.js +48 -196
  213. package/dist/prd/arm-readiness.js.map +1 -1
  214. package/dist/prd/frontier-arming.d.ts.map +1 -1
  215. package/dist/prd/frontier-arming.js +0 -2
  216. package/dist/prd/frontier-arming.js.map +1 -1
  217. package/dist/prd/scoping-prompt.js +3 -3
  218. package/dist/prd/scoping-prompt.js.map +1 -1
  219. package/dist/prompt/focus-prompt-builder.d.ts +9 -2
  220. package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
  221. package/dist/prompt/focus-prompt-builder.js +19 -8
  222. package/dist/prompt/focus-prompt-builder.js.map +1 -1
  223. package/dist/prompt/team-prompt-base.d.ts.map +1 -1
  224. package/dist/prompt/team-prompt-base.js +2 -1
  225. package/dist/prompt/team-prompt-base.js.map +1 -1
  226. package/dist/prompt-sections/execution-sections.d.ts +7 -1
  227. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  228. package/dist/prompt-sections/execution-sections.js +41 -22
  229. package/dist/prompt-sections/execution-sections.js.map +1 -1
  230. package/dist/prompt-sections/persona-sections.d.ts +6 -0
  231. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  232. package/dist/prompt-sections/persona-sections.js +27 -1
  233. package/dist/prompt-sections/persona-sections.js.map +1 -1
  234. package/dist/prompt-sections/prompt-listing.d.ts +21 -0
  235. package/dist/prompt-sections/prompt-listing.d.ts.map +1 -1
  236. package/dist/prompt-sections/prompt-listing.js +35 -0
  237. package/dist/prompt-sections/prompt-listing.js.map +1 -1
  238. package/dist/prompt-sections/role-sections.d.ts.map +1 -1
  239. package/dist/prompt-sections/role-sections.js +9 -6
  240. package/dist/prompt-sections/role-sections.js.map +1 -1
  241. package/dist/prompt-sections/shared.d.ts +7 -0
  242. package/dist/prompt-sections/shared.d.ts.map +1 -1
  243. package/dist/prompt-sections/shared.js +1 -1
  244. package/dist/prompt-sections/shared.js.map +1 -1
  245. package/dist/queries/deliveries/issues.d.ts.map +1 -1
  246. package/dist/queries/deliveries/issues.js +1 -0
  247. package/dist/queries/deliveries/issues.js.map +1 -1
  248. package/dist/queries/focus-review/criterion-reopenings.d.ts +62 -0
  249. package/dist/queries/focus-review/criterion-reopenings.d.ts.map +1 -0
  250. package/dist/queries/focus-review/criterion-reopenings.js +67 -0
  251. package/dist/queries/focus-review/criterion-reopenings.js.map +1 -0
  252. package/dist/queries/focus-review/recorded-concern-ids.d.ts +47 -0
  253. package/dist/queries/focus-review/recorded-concern-ids.d.ts.map +1 -0
  254. package/dist/queries/focus-review/recorded-concern-ids.js +33 -0
  255. package/dist/queries/focus-review/recorded-concern-ids.js.map +1 -0
  256. package/dist/queries/focus-review/review-finding-facts.d.ts.map +1 -1
  257. package/dist/queries/focus-review/review-finding-facts.js +5 -1
  258. package/dist/queries/focus-review/review-finding-facts.js.map +1 -1
  259. package/dist/queries/focuses/arm-covered-targets.d.ts +10 -1
  260. package/dist/queries/focuses/arm-covered-targets.d.ts.map +1 -1
  261. package/dist/queries/focuses/arm-covered-targets.js +9 -0
  262. package/dist/queries/focuses/arm-covered-targets.js.map +1 -1
  263. package/dist/queries/focuses/ended-arm.d.ts +12 -0
  264. package/dist/queries/focuses/ended-arm.d.ts.map +1 -1
  265. package/dist/queries/focuses/focus-criteria-standing.d.ts +17 -0
  266. package/dist/queries/focuses/focus-criteria-standing.d.ts.map +1 -1
  267. package/dist/queries/focuses/focus-criteria-standing.js +29 -1
  268. package/dist/queries/focuses/focus-criteria-standing.js.map +1 -1
  269. package/dist/queries/focuses/focus-discovery.d.ts.map +1 -1
  270. package/dist/queries/focuses/focus-discovery.js +2 -1
  271. package/dist/queries/focuses/focus-discovery.js.map +1 -1
  272. package/dist/queries/verification/verification.js +1 -1
  273. package/dist/reality/injection-writeback.d.ts +5 -4
  274. package/dist/reality/injection-writeback.d.ts.map +1 -1
  275. package/dist/reality/injection-writeback.js +3 -2
  276. package/dist/reality/injection-writeback.js.map +1 -1
  277. package/dist/reality/reality-writeback.d.ts +13 -12
  278. package/dist/reality/reality-writeback.d.ts.map +1 -1
  279. package/dist/reality/reality-writeback.js +5 -5
  280. package/dist/reality/reality-writeback.js.map +1 -1
  281. package/dist/resolvers/assembly-engine.js +1 -1
  282. package/dist/resolvers/compose/focus-injections-compose.d.ts.map +1 -1
  283. package/dist/resolvers/compose/focus-injections-compose.js +3 -2
  284. package/dist/resolvers/compose/focus-injections-compose.js.map +1 -1
  285. package/dist/resolvers/compose/loop-delivery-index-compose.d.ts +10 -0
  286. package/dist/resolvers/compose/loop-delivery-index-compose.d.ts.map +1 -1
  287. package/dist/resolvers/compose/loop-delivery-index-compose.js +15 -3
  288. package/dist/resolvers/compose/loop-delivery-index-compose.js.map +1 -1
  289. package/dist/resolvers/delivery-listing.d.ts +7 -0
  290. package/dist/resolvers/delivery-listing.d.ts.map +1 -1
  291. package/dist/resolvers/delivery-listing.js +26 -4
  292. package/dist/resolvers/delivery-listing.js.map +1 -1
  293. package/dist/resolvers/focus-anchoring-injections.d.ts +0 -24
  294. package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
  295. package/dist/resolvers/focus-anchoring-injections.js +38 -28
  296. package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
  297. package/dist/resolvers/focus-criteria-standing.d.ts.map +1 -1
  298. package/dist/resolvers/focus-criteria-standing.js +19 -8
  299. package/dist/resolvers/focus-criteria-standing.js.map +1 -1
  300. package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
  301. package/dist/resolvers/loop-delivery-index.js +9 -1
  302. package/dist/resolvers/loop-delivery-index.js.map +1 -1
  303. package/dist/resolvers/shared/loop.d.ts +17 -0
  304. package/dist/resolvers/shared/loop.d.ts.map +1 -1
  305. package/dist/resolvers/shared/loop.js.map +1 -1
  306. package/dist/security/security-auto-inject.d.ts +19 -5
  307. package/dist/security/security-auto-inject.d.ts.map +1 -1
  308. package/dist/security/security-auto-inject.js +21 -6
  309. package/dist/security/security-auto-inject.js.map +1 -1
  310. package/dist/session/session-lineage.d.ts +29 -9
  311. package/dist/session/session-lineage.d.ts.map +1 -1
  312. package/dist/session/session-lineage.js +33 -8
  313. package/dist/session/session-lineage.js.map +1 -1
  314. package/dist/spawn/directive-dispatch.d.ts.map +1 -1
  315. package/dist/spawn/directive-dispatch.js +1 -0
  316. package/dist/spawn/directive-dispatch.js.map +1 -1
  317. package/dist/spawn/idle-work-stamp.d.ts +7 -0
  318. package/dist/spawn/idle-work-stamp.d.ts.map +1 -1
  319. package/dist/spawn/idle-work-stamp.js +2 -1
  320. package/dist/spawn/idle-work-stamp.js.map +1 -1
  321. package/dist/spawn/lead-continuation.d.ts +7 -0
  322. package/dist/spawn/lead-continuation.d.ts.map +1 -1
  323. package/dist/spawn/lead-continuation.js +5 -2
  324. package/dist/spawn/lead-continuation.js.map +1 -1
  325. package/dist/spawn/loop-llm-client.d.ts +10 -1
  326. package/dist/spawn/loop-llm-client.d.ts.map +1 -1
  327. package/dist/spawn/loop-llm-client.js +15 -7
  328. package/dist/spawn/loop-llm-client.js.map +1 -1
  329. package/dist/spawn/model-id-guards.d.ts +9 -4
  330. package/dist/spawn/model-id-guards.d.ts.map +1 -1
  331. package/dist/spawn/model-id-guards.js +11 -4
  332. package/dist/spawn/model-id-guards.js.map +1 -1
  333. package/dist/spawn/prompt-assembly.d.ts +2 -0
  334. package/dist/spawn/prompt-assembly.d.ts.map +1 -1
  335. package/dist/spawn/prompt-assembly.js +3 -1
  336. package/dist/spawn/prompt-assembly.js.map +1 -1
  337. package/dist/spawn/review-hold-park.d.ts +4 -2
  338. package/dist/spawn/review-hold-park.d.ts.map +1 -1
  339. package/dist/spawn/review-hold-park.js +9 -5
  340. package/dist/spawn/review-hold-park.js.map +1 -1
  341. package/dist/spawn/worktree-session.d.ts +14 -3
  342. package/dist/spawn/worktree-session.d.ts.map +1 -1
  343. package/dist/spawn/worktree-session.js +13 -3
  344. package/dist/spawn/worktree-session.js.map +1 -1
  345. package/dist/supervision/spawn-cooldown.js +1 -1
  346. package/dist/supervision/team-work.d.ts +15 -1
  347. package/dist/supervision/team-work.d.ts.map +1 -1
  348. package/dist/supervision/team-work.js +7 -2
  349. package/dist/supervision/team-work.js.map +1 -1
  350. package/dist/templates/agents-md.d.ts.map +1 -1
  351. package/dist/templates/agents-md.js +1 -0
  352. package/dist/templates/agents-md.js.map +1 -1
  353. package/dist/templates/claude-md.d.ts +1 -1
  354. package/dist/templates/claude-md.d.ts.map +1 -1
  355. package/dist/templates/claude-md.js +12 -0
  356. package/dist/templates/claude-md.js.map +1 -1
  357. package/dist/testing/arm-coverage-model.d.ts +13 -0
  358. package/dist/testing/arm-coverage-model.d.ts.map +1 -1
  359. package/dist/testing/arm-coverage-model.js +118 -9
  360. package/dist/testing/arm-coverage-model.js.map +1 -1
  361. package/dist/testing/fixtures/approved-head-inert-deps.d.ts.map +1 -1
  362. package/dist/testing/fixtures/approved-head-inert-deps.js +1 -0
  363. package/dist/testing/fixtures/approved-head-inert-deps.js.map +1 -1
  364. package/dist/testing/fixtures/completion-event-deps.d.ts +1 -1
  365. package/dist/testing/fixtures/completion-event-deps.d.ts.map +1 -1
  366. package/dist/testing/fixtures/completion-event-deps.js +1 -0
  367. package/dist/testing/fixtures/completion-event-deps.js.map +1 -1
  368. package/dist/testing/fixtures/index.js +1 -1
  369. package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
  370. package/dist/testing/fixtures/pending-spawn-world.js +3 -0
  371. package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
  372. package/dist/testing/fixtures/process-close-context.d.ts.map +1 -1
  373. package/dist/testing/fixtures/process-close-context.js +1 -0
  374. package/dist/testing/fixtures/process-close-context.js.map +1 -1
  375. package/dist/testing/fixtures/recording-api-client.js +1 -1
  376. package/dist/testing/fixtures/review-exit-deps.js +1 -1
  377. package/dist/testing/fixtures/session-wire.d.ts.map +1 -1
  378. package/dist/testing/fixtures/session-wire.js +2 -1
  379. package/dist/testing/fixtures/session-wire.js.map +1 -1
  380. package/dist/types/index.js +1 -1
  381. package/dist/verify/attribution/verification-baseline-run.d.ts.map +1 -1
  382. package/dist/verify/attribution/verification-baseline-run.js +2 -1
  383. package/dist/verify/attribution/verification-baseline-run.js.map +1 -1
  384. package/dist/verify/effect-reconciliation/recorded-targets.d.ts +14 -0
  385. package/dist/verify/effect-reconciliation/recorded-targets.d.ts.map +1 -1
  386. package/dist/verify/effect-reconciliation/recorded-targets.js +20 -0
  387. package/dist/verify/effect-reconciliation/recorded-targets.js.map +1 -1
  388. package/dist/verify/effect-reconciliation/verify-restatement.d.ts +15 -1
  389. package/dist/verify/effect-reconciliation/verify-restatement.d.ts.map +1 -1
  390. package/dist/verify/effect-reconciliation/verify-restatement.js +93 -59
  391. package/dist/verify/effect-reconciliation/verify-restatement.js.map +1 -1
  392. package/dist/verify/engine/reconciliation-step.d.ts.map +1 -1
  393. package/dist/verify/engine/reconciliation-step.js +4 -1
  394. package/dist/verify/engine/reconciliation-step.js.map +1 -1
  395. package/dist/verify/falsifier/falsifier-command.d.ts +37 -0
  396. package/dist/verify/falsifier/falsifier-command.d.ts.map +1 -0
  397. package/dist/verify/falsifier/falsifier-command.js +40 -0
  398. package/dist/verify/falsifier/falsifier-command.js.map +1 -0
  399. package/dist/verify/falsifier/falsifier-run.d.ts +47 -0
  400. package/dist/verify/falsifier/falsifier-run.d.ts.map +1 -0
  401. package/dist/verify/falsifier/falsifier-run.js +117 -0
  402. package/dist/verify/falsifier/falsifier-run.js.map +1 -0
  403. package/dist/verify/falsifier/falsifier-verdict.d.ts +52 -0
  404. package/dist/verify/falsifier/falsifier-verdict.d.ts.map +1 -0
  405. package/dist/verify/falsifier/falsifier-verdict.js +61 -0
  406. package/dist/verify/falsifier/falsifier-verdict.js.map +1 -0
  407. package/dist/verify/shortfalls/pre-judge-rulings.d.ts.map +1 -1
  408. package/dist/verify/shortfalls/pre-judge-rulings.js +2 -1
  409. package/dist/verify/shortfalls/pre-judge-rulings.js.map +1 -1
  410. package/dist/worktree/verify-hold-facts.d.ts +2 -0
  411. package/dist/worktree/verify-hold-facts.d.ts.map +1 -1
  412. package/dist/worktree/verify-hold-facts.js +1 -0
  413. package/dist/worktree/verify-hold-facts.js.map +1 -1
  414. package/package.json +2 -2
@@ -4,13 +4,18 @@ export interface ReconcilerIssue {
4
4
  status: string;
5
5
  issueType: string;
6
6
  /**
7
- * Whether this open issue is a DEFERRABLE review note -- a low-severity
8
- * triage note a review pass filed that is acceptable to defer past the verify
9
- * gate. The deferrability POLICY (what counts as deferrable: a review-filed,
10
- * open issue that review-defect-detector.isBlockingReviewFinding does not
11
- * call blocking -- a recorded concern, or with no recorded fact a P2/P3) lives
12
- * with the review classifier; the reconciler only consumes the resolved flag. Absent/false => the issue is blocking open work
13
- * (the default, so callers that do not classify behave exactly as before).
7
+ * Whether this open issue is DEFERRABLE -- a review finding that is not owed
8
+ * work, so it counts as open work at NO stage (queued, coding, verify,
9
+ * verify_failed, done): a delivery whose only open work is deferrable advances
10
+ * exactly as one with none. The POLICY lives with the callers that resolve it:
11
+ * - the review exit (review-exit-evidence.ts deferrableIssueIds): a
12
+ * review-filed, open issue review-defect-detector.isBlockingReviewFinding
13
+ * does not call blocking -- a recorded concern, or with no recorded fact
14
+ * an explicit P2/P3;
15
+ * - every live writer (delivery/recorded-concerns.ts): ONLY a review-filed
16
+ * issue whose recorded class is `concern` -- no priority fallback.
17
+ * Absent/false => the issue is blocking open work (the default, so an
18
+ * unclassified issue behaves exactly as before at every stage).
14
19
  */
15
20
  deferrable?: boolean;
16
21
  }
@@ -161,26 +166,36 @@ export declare function areDeliveryIssuesDone(issues: ReadonlyArray<ReconcilerIs
161
166
  /** Whether the delivery has at least one work issue (Task/Bug). */
162
167
  export declare function hasWorkIssues(issues: ReadonlyArray<ReconcilerIssue>): boolean;
163
168
  /**
164
- * Whether any work issue is in an OPEN (active) status. This is the routing
165
- * signal for verify -> verify_failed (open work on a verify delivery) and the
166
- * coding/verify_failed re-queue (open work re-queues). Mirror image of
167
- * areDeliveryIssuesDone for deliveries that have work.
169
+ * Whether any work issue is in an OPEN (active) status, deferrable or not.
170
+ * Mirror image of areDeliveryIssuesDone for deliveries that have work. The
171
+ * reconciler itself routes on hasBlockingOpenWork (below), which equals this
172
+ * when no issue is marked deferrable.
168
173
  */
169
174
  export declare function hasOpenWork(issues: ReadonlyArray<ReconcilerIssue>): boolean;
170
175
  /** Whether any work issue is actively In Progress -- the queued -> coding driver. */
171
176
  export declare function hasActiveWork(issues: ReadonlyArray<ReconcilerIssue>): boolean;
172
177
  /**
173
178
  * Whether any work issue is BLOCKING open work: open (To Do / In Progress /
174
- * Blocked) AND not a deferrable review note. This is the verify -> verify_failed
175
- * routing signal: a verify delivery whose only open work is deferrable
176
- * low-severity review notes converges (approve) instead of re-coding. With no
177
- * issue marked `deferrable` this is identical to hasOpenWork, so every
178
- * non-classifying caller keeps its current behavior.
179
+ * Blocked) AND not deferrable. This is the reconciler's open-work signal at
180
+ * EVERY stage: queued (all non-deferrable work terminal -> coding), coding and
181
+ * verify_failed (blocking open work re-queues), verify (-> verify_failed) and
182
+ * done (re-open). A delivery whose only open work is deferrable concerns
183
+ * advances instead of re-coding them. With no issue marked `deferrable` this
184
+ * is identical to hasOpenWork (and its negation to areDeliveryIssuesDone), so
185
+ * every non-classifying caller keeps its current behavior.
179
186
  */
180
187
  export declare function hasBlockingOpenWork(issues: ReadonlyArray<ReconcilerIssue>): boolean;
181
188
  /**
182
189
  * Compute the single next execution_status for a delivery from its full signal.
183
190
  *
191
+ * "Open work" below is BLOCKING open work at every stage (hasBlockingOpenWork):
192
+ * an issue flagged `deferrable` (a recorded concern) is not owed and never
193
+ * holds, re-queues or re-opens a delivery. "All done" means all NON-deferrable
194
+ * work is terminal. A delivery whose only work issues are open deferrable
195
+ * concerns HAS work issues (the empty-delivery scoping gate does not apply) and
196
+ * none of it is owed, so it advances. Unclassified issues are blocking, so for
197
+ * them this table is exactly the pre-classification behaviour.
198
+ *
184
199
  * Faithful to the current live writers (Delivery 2 characterization):
185
200
  * - queued : has work + all done -> coding (step toward verify);
186
201
  * has work + active -> coding (work started);
@@ -192,8 +207,8 @@ export declare function hasBlockingOpenWork(issues: ReadonlyArray<ReconcilerIssu
192
207
  * all done + uncommitted worktree -> stay coding (git-safety gate);
193
208
  * all done + committed + guard blocked -> paused;
194
209
  * all done + committed -> verify.
195
- * - verify : blocking open work -> verify_failed (deferrable low-severity
196
- * review notes do NOT block -> converge);
210
+ * - verify : open work -> verify_failed (deferrable review
211
+ * notes do NOT block -> converge);
197
212
  * guard blocked -> paused;
198
213
  * verdict gaps_found -> verify_failed (never converge on an
199
214
  * unresolved verdict);
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-reconciler.d.ts","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler.ts"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,eAAe,EAAE,OAAO,CAAC;IACzB,8EAA8E;IAC9E,YAAY,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC;IAC3C;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;IAC/D;;;;;;;;;;;;;OAaG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,eAAe,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACvC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,YAAY,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3C;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,MAAM,EAAE,eAAe,CAAC;IACxB,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAIrF;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAE7E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAE3E;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAE7E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAGnF;AAcD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA6L9E"}
1
+ {"version":3,"file":"delivery-reconciler.d.ts","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler.ts"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,eAAe,EAAE,OAAO,CAAC;IACzB,8EAA8E;IAC9E,YAAY,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC;IAC3C;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;IAC/D;;;;;;;;;;;;;OAaG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,eAAe,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACvC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,YAAY,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3C;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,MAAM,EAAE,eAAe,CAAC;IACxB,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAIrF;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAE7E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAE3E;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAE7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,OAAO,CAGnF;AAcD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA6L9E"}
@@ -78,10 +78,10 @@ export function hasWorkIssues(issues) {
78
78
  return filterWorkIssues([...issues]).length > 0;
79
79
  }
80
80
  /**
81
- * Whether any work issue is in an OPEN (active) status. This is the routing
82
- * signal for verify -> verify_failed (open work on a verify delivery) and the
83
- * coding/verify_failed re-queue (open work re-queues). Mirror image of
84
- * areDeliveryIssuesDone for deliveries that have work.
81
+ * Whether any work issue is in an OPEN (active) status, deferrable or not.
82
+ * Mirror image of areDeliveryIssuesDone for deliveries that have work. The
83
+ * reconciler itself routes on hasBlockingOpenWork (below), which equals this
84
+ * when no issue is marked deferrable.
85
85
  */
86
86
  export function hasOpenWork(issues) {
87
87
  return filterWorkIssues([...issues]).some(i => OPEN_ISSUE_STATUSES.has(i.status));
@@ -92,11 +92,13 @@ export function hasActiveWork(issues) {
92
92
  }
93
93
  /**
94
94
  * Whether any work issue is BLOCKING open work: open (To Do / In Progress /
95
- * Blocked) AND not a deferrable review note. This is the verify -> verify_failed
96
- * routing signal: a verify delivery whose only open work is deferrable
97
- * low-severity review notes converges (approve) instead of re-coding. With no
98
- * issue marked `deferrable` this is identical to hasOpenWork, so every
99
- * non-classifying caller keeps its current behavior.
95
+ * Blocked) AND not deferrable. This is the reconciler's open-work signal at
96
+ * EVERY stage: queued (all non-deferrable work terminal -> coding), coding and
97
+ * verify_failed (blocking open work re-queues), verify (-> verify_failed) and
98
+ * done (re-open). A delivery whose only open work is deferrable concerns
99
+ * advances instead of re-coding them. With no issue marked `deferrable` this
100
+ * is identical to hasOpenWork (and its negation to areDeliveryIssuesDone), so
101
+ * every non-classifying caller keeps its current behavior.
100
102
  */
101
103
  export function hasBlockingOpenWork(issues) {
102
104
  return filterWorkIssues([...issues])
@@ -115,6 +117,14 @@ function result(currentStatus, target, reason) {
115
117
  /**
116
118
  * Compute the single next execution_status for a delivery from its full signal.
117
119
  *
120
+ * "Open work" below is BLOCKING open work at every stage (hasBlockingOpenWork):
121
+ * an issue flagged `deferrable` (a recorded concern) is not owed and never
122
+ * holds, re-queues or re-opens a delivery. "All done" means all NON-deferrable
123
+ * work is terminal. A delivery whose only work issues are open deferrable
124
+ * concerns HAS work issues (the empty-delivery scoping gate does not apply) and
125
+ * none of it is owed, so it advances. Unclassified issues are blocking, so for
126
+ * them this table is exactly the pre-classification behaviour.
127
+ *
118
128
  * Faithful to the current live writers (Delivery 2 characterization):
119
129
  * - queued : has work + all done -> coding (step toward verify);
120
130
  * has work + active -> coding (work started);
@@ -126,8 +136,8 @@ function result(currentStatus, target, reason) {
126
136
  * all done + uncommitted worktree -> stay coding (git-safety gate);
127
137
  * all done + committed + guard blocked -> paused;
128
138
  * all done + committed -> verify.
129
- * - verify : blocking open work -> verify_failed (deferrable low-severity
130
- * review notes do NOT block -> converge);
139
+ * - verify : open work -> verify_failed (deferrable review
140
+ * notes do NOT block -> converge);
131
141
  * guard blocked -> paused;
132
142
  * verdict gaps_found -> verify_failed (never converge on an
133
143
  * unresolved verdict);
@@ -146,8 +156,8 @@ function result(currentStatus, target, reason) {
146
156
  */
147
157
  export function reconcileDeliveryStatus(input) {
148
158
  const { currentStatus, issues, gitState, guardVerdict, reviewState, discoveryOnly } = input;
149
- const allDone = areDeliveryIssuesDone(issues);
150
- const openWork = hasOpenWork(issues);
159
+ // Every stage reads BLOCKING open work: a deferrable (recorded-concern) issue is not owed.
160
+ const blockingOpen = hasBlockingOpenWork(issues);
151
161
  const hasWork = hasWorkIssues(issues);
152
162
  switch (currentStatus) {
153
163
  case DELIVERY_STATUS.QUEUED: {
@@ -159,8 +169,8 @@ export function reconcileDeliveryStatus(input) {
159
169
  }
160
170
  return result(currentStatus, DELIVERY_STATUS.QUEUED, 'no work issues yet (scoping gate holds queued)');
161
171
  }
162
- if (allDone) {
163
- return result(currentStatus, DELIVERY_STATUS.CODING, 'queued with all work terminal -> step to coding before advancing');
172
+ if (!blockingOpen) {
173
+ return result(currentStatus, DELIVERY_STATUS.CODING, 'queued with all non-deferrable work terminal -> step to coding before advancing');
164
174
  }
165
175
  if (hasActiveWork(issues)) {
166
176
  return result(currentStatus, DELIVERY_STATUS.CODING, 'work in progress -> coding');
@@ -168,8 +178,8 @@ export function reconcileDeliveryStatus(input) {
168
178
  return result(currentStatus, DELIVERY_STATUS.QUEUED, 'work not started -> stay queued');
169
179
  }
170
180
  case DELIVERY_STATUS.CODING: {
171
- if (openWork) {
172
- return result(currentStatus, DELIVERY_STATUS.QUEUED, 'open work remains -> re-queue');
181
+ if (blockingOpen) {
182
+ return result(currentStatus, DELIVERY_STATUS.QUEUED, 'blocking open work remains -> re-queue');
173
183
  }
174
184
  // Empty-delivery scoping gate: a delivery with NO work issues must never
175
185
  // advance coding -> verify on the vacuous "all issues done" truth
@@ -198,7 +208,7 @@ export function reconcileDeliveryStatus(input) {
198
208
  // rather than re-coding -- the notes stay tracked but do not churn the
199
209
  // verify gate. Non-classified issues are blocking by default, so this is
200
210
  // identical to the raw open-work check for every other caller.
201
- if (hasBlockingOpenWork(issues)) {
211
+ if (blockingOpen) {
202
212
  return result(currentStatus, DELIVERY_STATUS.VERIFY_FAILED, 'blocking open work on a verify delivery -> verify_failed');
203
213
  }
204
214
  if (guardVerdict?.blocked) {
@@ -259,10 +269,10 @@ export function reconcileDeliveryStatus(input) {
259
269
  return result(currentStatus, DELIVERY_STATUS.VERIFY, 'no open work, awaiting review outcome -> stay verify');
260
270
  }
261
271
  case DELIVERY_STATUS.VERIFY_FAILED: {
262
- if (openWork) {
263
- return result(currentStatus, DELIVERY_STATUS.QUEUED, 'verify_failed with open work -> re-queue');
272
+ if (blockingOpen) {
273
+ return result(currentStatus, DELIVERY_STATUS.QUEUED, 'verify_failed with blocking open work -> re-queue');
264
274
  }
265
- return result(currentStatus, DELIVERY_STATUS.CODING, 'verify_failed, work done -> coding (re-iterate)');
275
+ return result(currentStatus, DELIVERY_STATUS.CODING, 'verify_failed, non-deferrable work done -> coding (re-iterate)');
266
276
  }
267
277
  case DELIVERY_STATUS.PAUSED: {
268
278
  // A pause is a guard BLOCK on a transition (coding->verify or
@@ -301,7 +311,7 @@ export function reconcileDeliveryStatus(input) {
301
311
  // rather than failing whichever sibling happens to be in verify.
302
312
  if (reviewState?.outcome === 'gaps_found' &&
303
313
  reviewState.gapsAttribution === 'targeted' &&
304
- hasBlockingOpenWork(issues)) {
314
+ blockingOpen) {
305
315
  return result(currentStatus, DELIVERY_STATUS.VERIFY_FAILED, 'gaps_found targets this done delivery with open work -> re-open to verify_failed');
306
316
  }
307
317
  // Shape B durability: re-open a done delivery that owns an OPEN, BLOCKING,
@@ -314,7 +324,7 @@ export function reconcileDeliveryStatus(input) {
314
324
  // guard so a closed gap does not churn a settled delivery, and the
315
325
  // review-filed restriction (encoded in the flag) keeps a human-filed
316
326
  // backlog item from re-opening it.
317
- if (reviewState?.reviewFiledBlockingOnDone && hasBlockingOpenWork(issues)) {
327
+ if (reviewState?.reviewFiledBlockingOnDone && blockingOpen) {
318
328
  return result(currentStatus, DELIVERY_STATUS.VERIFY_FAILED, 'review-filed blocking gap on a done delivery -> re-open to verify_failed (evidence, not verdict)');
319
329
  }
320
330
  return result(currentStatus, currentStatus, 'done is terminal -> stay');
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-reconciler.js","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-reconciler.js","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,kGAAkG;AAClG,yFAAyF;AACzF,oEAAoE;AACpE,8DAA8D;AAC9D,qEAAqE;AACrE,wEAAwE;AACxE,4EAA4E;AAC5E,8EAA8E;AAC9E,2FAA2F;AAC3F,mFAAmF;AACnF,wEAAwE;AACxE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA4JzE,wEAAwE;AAExE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAsC;IAC1E,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAsB,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,aAAa,CAAC,MAAsC;IAClE,OAAO,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAsB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAsC;IAChE,OAAO,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,aAAa,CAAC,MAAsC;IAClE,OAAO,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;AAClG,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAsC;IACxE,OAAO,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAsB,CAAC;SACtD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,wEAAwE;AAExE,SAAS,MAAM,CAAC,aAA8B,EAAE,MAAuB,EAAE,MAAc;IACrF,MAAM,OAAO,GAAG,MAAM,KAAK,aAAa,CAAC;IACzC,OAAO;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,SAAS,EAAE,CAAC,OAAO,IAAI,iBAAiB,CAAC,aAAa,EAAE,MAAM,CAAC;KAChE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAqB;IAC3D,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAC5F,2FAA2F;IAC3F,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtC,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,sEAAsE;gBACtE,oEAAoE;gBACpE,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,yEAAyE,CAAC,CAAC;gBAClI,CAAC;gBACD,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;YACzG,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,iFAAiF,CAAC,CAAC;YAC1I,CAAC;YACD,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAC1F,CAAC;QAED,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5B,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,wCAAwC,CAAC,CAAC;YACjG,CAAC;YACD,yEAAyE;YACzE,kEAAkE;YAClE,0EAA0E;YAC1E,2EAA2E;YAC3E,4EAA4E;YAC5E,2EAA2E;YAC3E,2EAA2E;YAC3E,sEAAsE;YACtE,4EAA4E;YAC5E,+CAA+C;YAC/C,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,iGAAiG,CAAC,CAAC;YAC1J,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,uFAAuF,CAAC,CAAC;YAChJ,CAAC;YACD,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,wCAAwC,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,8CAA8C,CAAC,CAAC;QACvG,CAAC;QAED,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5B,yEAAyE;YACzE,wEAAwE;YACxE,uEAAuE;YACvE,yEAAyE;YACzE,+DAA+D;YAC/D,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE,0DAA0D,CAAC,CAAC;YAC1H,CAAC;YACD,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,qCAAqC,CAAC,CAAC;YAC9F,CAAC;YACD,2EAA2E;YAC3E,qEAAqE;YACrE,gDAAgD;YAChD,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,EAAE,qDAAqD,CAAC,CAAC;YAC5G,CAAC;YACD,wEAAwE;YACxE,sEAAsE;YACtE,4EAA4E;YAC5E,0DAA0D;YAC1D,6EAA6E;YAC7E,yEAAyE;YACzE,wEAAwE;YACxE,0EAA0E;YAC1E,0EAA0E;YAC1E,sEAAsE;YACtE,0EAA0E;YAC1E,2EAA2E;YAC3E,4EAA4E;YAC5E,6CAA6C;YAC7C,IAAI,WAAW,EAAE,OAAO,KAAK,YAAY,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,UAAU,CAAC,KAAK,cAAc,EAAE,CAAC;gBAC5G,MAAM,GAAG,GAAG,WAAW,CAAC,eAAe,KAAK,cAAc;oBACxD,CAAC,CAAC,kHAAkH;oBACpH,CAAC,CAAC,oHAAoH,CAAC;gBACzH,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACnE,CAAC;YACD,yEAAyE;YACzE,2EAA2E;YAC3E,sEAAsE;YACtE,4EAA4E;YAC5E,4EAA4E;YAC5E,2EAA2E;YAC3E,iFAAiF;YACjF,2EAA2E;YAC3E,IAAI,WAAW,EAAE,YAAY,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,EAAE,wCAAwC,CAAC,CAAC;YAC/F,CAAC;YACD,IAAI,WAAW,EAAE,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;gBACnE,sEAAsE;gBACtE,sEAAsE;gBACtE,wEAAwE;gBACxE,wEAAwE;gBACxE,uEAAuE;gBACvE,uEAAuE;gBACvE,kEAAkE;gBAClE,qEAAqE;gBACrE,WAAW;gBACX,IAAI,WAAW,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oBACpC,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE,iGAAiG,CAAC,CAAC;gBACjK,CAAC;gBACD,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,EAAE,wDAAwD,CAAC,CAAC;YAC/G,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,sDAAsD,CAAC,CAAC;QAC/G,CAAC;QAED,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;YACnC,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,mDAAmD,CAAC,CAAC;YAC5G,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,gEAAgE,CAAC,CAAC;QACzH,CAAC;QAED,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5B,8DAA8D;YAC9D,qEAAqE;YACrE,0EAA0E;YAC1E,gEAAgE;YAChE,2EAA2E;YAC3E,oDAAoD;YACpD,0EAA0E;YAC1E,yEAAyE;YACzE,uEAAuE;YACvE,2EAA2E;YAC3E,EAAE;YACF,2EAA2E;YAC3E,yEAAyE;YACzE,4EAA4E;YAC5E,qEAAqE;YACrE,wEAAwE;YACxE,4EAA4E;YAC5E,wEAAwE;YACxE,8EAA8E;YAC9E,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1C,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,+GAA+G,CAAC,CAAC;YACxK,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,EAAE,2FAA2F,CAAC,CAAC;QACpJ,CAAC;QAED,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1B,0EAA0E;YAC1E,0EAA0E;YAC1E,6EAA6E;YAC7E,4EAA4E;YAC5E,2EAA2E;YAC3E,6EAA6E;YAC7E,0EAA0E;YAC1E,0EAA0E;YAC1E,iEAAiE;YACjE,IACE,WAAW,EAAE,OAAO,KAAK,YAAY;gBACrC,WAAW,CAAC,eAAe,KAAK,UAAU;gBAC1C,YAAY,EACZ,CAAC;gBACD,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE,kFAAkF,CAAC,CAAC;YAClJ,CAAC;YACD,2EAA2E;YAC3E,qEAAqE;YACrE,wEAAwE;YACxE,4EAA4E;YAC5E,yEAAyE;YACzE,6EAA6E;YAC7E,2EAA2E;YAC3E,mEAAmE;YACnE,qEAAqE;YACrE,mCAAmC;YACnC,IAAI,WAAW,EAAE,yBAAyB,IAAI,YAAY,EAAE,CAAC;gBAC3D,OAAO,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE,kGAAkG,CAAC,CAAC;YAClK,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,0BAA0B,CAAC,CAAC;QAC1E,CAAC;QAED,2EAA2E;QAC3E,2DAA2D;QAC3D;YACE,OAAO,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,aAAa,oCAAoC,CAAC,CAAC;IAC9G,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Recorded concerns: which of a focus's issues are review findings the review
3
+ * RECORDED as a `concern` (no not_met acceptance criterion names them), so the
4
+ * live delivery writers can tag them `deferrable` for the reconciler.
5
+ *
6
+ * A concern is not owed work: the armed run neither fixes it nor waits on it,
7
+ * and it reaches the human at focus completion untouched. The reconciler reads
8
+ * only BLOCKING open work at every stage (delivery-reconciler.ts
9
+ * hasBlockingOpenWork), so a delivery whose only open work is concerns walks
10
+ * coding -> verify instead of re-queuing.
11
+ *
12
+ * The rule is deliberately NARROWER than the review exit's (review-exit-evidence.ts
13
+ * deferrableIssueIds, which also defers an unrecorded P2/P3): here an issue is
14
+ * deferrable ONLY when it is in the focus's review-filed id set AND its recorded
15
+ * class is `concern`. No recorded fact, or a pre-existing (non-review-filed)
16
+ * issue, counts as open work exactly as before.
17
+ *
18
+ * Fail-closed: a facts read that fails logs a warn and yields the EMPTY set, so
19
+ * every issue counts as work (the pre-classification behaviour). Read once per
20
+ * focus per tick by the caller, never per delivery.
21
+ *
22
+ * @module delivery/recorded-concerns
23
+ */
24
+ import type { FocusReviewFindingFacts } from '../queries/focus-review/review-finding-facts.js';
25
+ import type { ReconcilerIssue } from './delivery-reconciler.js';
26
+ /** Read a focus's recorded concern ids. Never throws (fail-closed to empty). */
27
+ export type RecordedConcernReader = (focusId: string) => Promise<ReadonlySet<string>>;
28
+ /** No recorded concerns: every open issue counts as work. */
29
+ export declare const NO_RECORDED_CONCERNS: ReadonlySet<string>;
30
+ /**
31
+ * Bind the production reader over the focus review-finding-facts read
32
+ * (queries/focus-review/review-finding-facts.ts getFocusReviewFindingFacts),
33
+ * keeping the recorded concerns (that module's recordedConcernIds -- the same
34
+ * definition the team prompt's listing uses).
35
+ */
36
+ export declare function makeRecordedConcernReader(readFacts: (focusId: string) => Promise<FocusReviewFindingFacts>): RecordedConcernReader;
37
+ /**
38
+ * Pure: a delivery's open work issues, split into ALL open ones and the OWED
39
+ * ones (open and not a recorded concern -- the reconciler's hasBlockingOpenWork).
40
+ */
41
+ export declare function splitOpenWork<T extends {
42
+ id: string;
43
+ status: string;
44
+ }>(workIssues: ReadonlyArray<T>, concernIds: ReadonlySet<string>): {
45
+ open: T[];
46
+ owed: T[];
47
+ };
48
+ /**
49
+ * Pure: map a delivery's issues to the reconciler's shape, tagging a recorded
50
+ * concern `deferrable`. Unclassified issues carry no flag (blocking by default).
51
+ */
52
+ export declare function toReconcilerIssues(issues: ReadonlyArray<{
53
+ id: string;
54
+ status: string;
55
+ issueType: string;
56
+ }>, concernIds: ReadonlySet<string>): ReconcilerIssue[];
57
+ //# sourceMappingURL=recorded-concerns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorded-concerns.d.ts","sourceRoot":"","sources":["../../src/delivery/recorded-concerns.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAE/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAMhE,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtF,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAqB,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,GAC/D,qBAAqB,CAYvB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACpE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAC5B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,IAAI,EAAE,CAAC,EAAE,CAAA;CAAE,CAG1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,EACxE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,eAAe,EAAE,CAInB"}
@@ -0,0 +1,45 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/delivery/recorded-concerns.test.ts
3
+ // PINNED-BY-END
4
+ import { recordedConcernIds } from '../queries/focus-review/recorded-concern-ids.js';
5
+ import { OPEN_ISSUE_STATUSES } from '../types/issue-status.js';
6
+ import { createLogger } from '../log/daemon-log.js';
7
+ const log = createLogger({ module: 'recorded-concerns' });
8
+ /** No recorded concerns: every open issue counts as work. */
9
+ export const NO_RECORDED_CONCERNS = new Set();
10
+ /**
11
+ * Bind the production reader over the focus review-finding-facts read
12
+ * (queries/focus-review/review-finding-facts.ts getFocusReviewFindingFacts),
13
+ * keeping the recorded concerns (that module's recordedConcernIds -- the same
14
+ * definition the team prompt's listing uses).
15
+ */
16
+ export function makeRecordedConcernReader(readFacts) {
17
+ return async (focusId) => {
18
+ try {
19
+ return recordedConcernIds(await readFacts(focusId));
20
+ }
21
+ catch (err) {
22
+ log.warn(`[recorded-concerns] review finding facts unreadable for focus ${focusId} -- ` +
23
+ `every open issue counts as work this tick: ${err.message}`);
24
+ return NO_RECORDED_CONCERNS;
25
+ }
26
+ };
27
+ }
28
+ /**
29
+ * Pure: a delivery's open work issues, split into ALL open ones and the OWED
30
+ * ones (open and not a recorded concern -- the reconciler's hasBlockingOpenWork).
31
+ */
32
+ export function splitOpenWork(workIssues, concernIds) {
33
+ const open = workIssues.filter(i => OPEN_ISSUE_STATUSES.has(i.status));
34
+ return { open, owed: open.filter(i => !concernIds.has(i.id)) };
35
+ }
36
+ /**
37
+ * Pure: map a delivery's issues to the reconciler's shape, tagging a recorded
38
+ * concern `deferrable`. Unclassified issues carry no flag (blocking by default).
39
+ */
40
+ export function toReconcilerIssues(issues, concernIds) {
41
+ return issues.map((i) => (concernIds.has(i.id)
42
+ ? { status: i.status, issueType: i.issueType, deferrable: true }
43
+ : { status: i.status, issueType: i.issueType }));
44
+ }
45
+ //# sourceMappingURL=recorded-concerns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorded-concerns.js","sourceRoot":"","sources":["../../src/delivery/recorded-concerns.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oEAAoE;AACpE,gBAAgB;AA2BhB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAK1D,6DAA6D;AAC7D,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,EAAU,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAgE;IAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CACN,iEAAiE,OAAO,MAAM;gBAC9E,8CAA+C,GAAa,CAAC,OAAO,EAAE,CACvE,CAAC;YACF,OAAO,oBAAoB,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,UAA4B,EAC5B,UAA+B;IAE/B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAwE,EACxE,UAA+B;IAE/B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;QAChE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -153,6 +153,19 @@ export declare function clearPendingSpawnDirective(focusId: string): boolean;
153
153
  * a second review of the same commit. Returns whether one was dropped.
154
154
  */
155
155
  export declare function clearPendingReviewDirective(focusId: string): boolean;
156
+ /**
157
+ * Wrap a review-window close so it also ends the queued REVIEW directive the
158
+ * window justified. A review directive is queued for one window (the reviewing
159
+ * stage needs review_requested_at; the stranded re-fire needs it too), so once the
160
+ * window closes -- a review exit routing its deliveries, the release pass replaying
161
+ * a held exit, a stale-window clear -- that directive has nothing left to review:
162
+ * consumed, it judged the commit the closing review already judged, before any
163
+ * coding team ran (67 same-commit re-reviews after gaps_found, 2026-09-30). The
164
+ * directive is dropped only AFTER the clear lands: a failed clear leaves the window
165
+ * open, and the queued review is still owed. A coding directive stays queued.
166
+ * The composition root binds every window-closing seam through this.
167
+ */
168
+ export declare function closeReviewWindowWith(clearWindow: (focusId: string) => Promise<void>): (focusId: string) => Promise<void>;
156
169
  /**
157
170
  * Test-only helper: prime a pending spawn directive without going through
158
171
  * executeSpawnDirective. Tests use this to verify consume semantics with
@@ -1 +1 @@
1
- {"version":3,"file":"directive-queue.d.ts","sourceRoot":"","sources":["../../src/directive/directive-queue.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIvE;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;;OAMG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,UAAU,EAAE,iBAAiB,CAAC;IAC9B;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,oCAA2C,CAAC;AAE/E;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAMtE;AAED;sCACsC;AACtC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAMhD;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAM/F;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAIT;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,qBAAqB,GAC/B,IAAI,CAEN;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAE3F;AAED,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC7C,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAEV;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;CAClC,GAAG,OAAO,CAGV;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAKV;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM/D"}
1
+ {"version":3,"file":"directive-queue.d.ts","sourceRoot":"","sources":["../../src/directive/directive-queue.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: 41 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/directive/directive-queue.ts
2
+ // Pinned by: 44 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/directive/directive-queue.ts
3
3
  // PINNED-BY-END
4
4
  /**
5
5
  * Directive queue: the pending spawn-directive store + its identity/guard logic.
@@ -112,6 +112,24 @@ export function clearPendingSpawnDirective(focusId) {
112
112
  export function clearPendingReviewDirective(focusId) {
113
113
  return pendingSpawnDirectives.get(focusId)?.lineage === 'review' && pendingSpawnDirectives.delete(focusId);
114
114
  }
115
+ /**
116
+ * Wrap a review-window close so it also ends the queued REVIEW directive the
117
+ * window justified. A review directive is queued for one window (the reviewing
118
+ * stage needs review_requested_at; the stranded re-fire needs it too), so once the
119
+ * window closes -- a review exit routing its deliveries, the release pass replaying
120
+ * a held exit, a stale-window clear -- that directive has nothing left to review:
121
+ * consumed, it judged the commit the closing review already judged, before any
122
+ * coding team ran (67 same-commit re-reviews after gaps_found, 2026-09-30). The
123
+ * directive is dropped only AFTER the clear lands: a failed clear leaves the window
124
+ * open, and the queued review is still owed. A coding directive stays queued.
125
+ * The composition root binds every window-closing seam through this.
126
+ */
127
+ export function closeReviewWindowWith(clearWindow) {
128
+ return async (focusId) => {
129
+ await clearWindow(focusId);
130
+ clearPendingReviewDirective(focusId);
131
+ };
132
+ }
115
133
  /**
116
134
  * Test-only helper: prime a pending spawn directive without going through
117
135
  * executeSpawnDirective. Tests use this to verify consume semantics with
@@ -1 +1 @@
1
- {"version":3,"file":"directive-queue.js","sourceRoot":"","sources":["../../src/directive/directive-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"directive-queue.js","sourceRoot":"","sources":["../../src/directive/directive-queue.ts"],"names":[],"mappings":"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"}
@@ -97,6 +97,15 @@ export declare function resolveFocusStageName(input: {
97
97
  * the stale window, so this predicate reads false on the next poll -- no review of
98
98
  * the unchanged commit runs.
99
99
  *
100
+ * A window HELD FOR A GATE VERDICT is never stranded either: a review exit that
101
+ * found gaps (or would approve) while the gate judging its commit has no verdict
102
+ * leaves review_requested_at set on purpose, and the release pass
103
+ * (completion/review-exit-holds/commit-verdict-release.ts) replays that exit when
104
+ * the verdict lands. Re-firing there queued a review that ran on the unchanged
105
+ * commit after the release had already routed the work to coding (67 same-commit
106
+ * re-reviews measured 2026-09-30). The caller reads the hold
107
+ * (focus/stranded-review-reroute.ts strandedReviewAwaitsGateVerdict).
108
+ *
100
109
  * Pure and exported for unit testing.
101
110
  */
102
111
  export declare function shouldRefireStrandedReview(input: {
@@ -104,6 +113,7 @@ export declare function shouldRefireStrandedReview(input: {
104
113
  reviewRequestedAt: string | null;
105
114
  hasActiveTeam: boolean;
106
115
  operatorStopped?: boolean;
116
+ awaitingGateVerdict?: boolean;
107
117
  }): boolean;
108
118
  /**
109
119
  * Synchronize `product_focuses.current_workflow_stage_id` with the focus's
@@ -1 +1 @@
1
- {"version":3,"file":"phase-sync.d.ts","sourceRoot":"","sources":["../../src/directive/phase-sync.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAEvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAOtF,uEAAuE;AACvE,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,iCAAiC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,iCAAiC,EAAE,OAAO,iCAAiC,CAAC;IAC5E,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;IACpD,8BAA8B,EAAE,OAAO,8BAA8B,CAAC;IACtE,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAgDf;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,KAAK,CAAC;QAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,MAAM,CAMT;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAMV;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCzB"}
1
+ {"version":3,"file":"phase-sync.d.ts","sourceRoot":"","sources":["../../src/directive/phase-sync.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAEvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAOtF,uEAAuE;AACvE,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,iCAAiC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,iCAAiC,EAAE,OAAO,iCAAiC,CAAC;IAC5E,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;IACpD,8BAA8B,EAAE,OAAO,8BAA8B,CAAC;IACtE,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAgDf;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,KAAK,CAAC;QAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,MAAM,CAMT;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,OAAO,CAOV;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCzB"}
@@ -158,6 +158,15 @@ const REVIEW_STAGE_NAMES = new Set(['reviewing', 'review']);
158
158
  * the stale window, so this predicate reads false on the next poll -- no review of
159
159
  * the unchanged commit runs.
160
160
  *
161
+ * A window HELD FOR A GATE VERDICT is never stranded either: a review exit that
162
+ * found gaps (or would approve) while the gate judging its commit has no verdict
163
+ * leaves review_requested_at set on purpose, and the release pass
164
+ * (completion/review-exit-holds/commit-verdict-release.ts) replays that exit when
165
+ * the verdict lands. Re-firing there queued a review that ran on the unchanged
166
+ * commit after the release had already routed the work to coding (67 same-commit
167
+ * re-reviews measured 2026-09-30). The caller reads the hold
168
+ * (focus/stranded-review-reroute.ts strandedReviewAwaitsGateVerdict).
169
+ *
161
170
  * Pure and exported for unit testing.
162
171
  */
163
172
  export function shouldRefireStrandedReview(input) {
@@ -169,6 +178,8 @@ export function shouldRefireStrandedReview(input) {
169
178
  return false;
170
179
  if (input.operatorStopped)
171
180
  return false;
181
+ if (input.awaitingGateVerdict)
182
+ return false;
172
183
  return true;
173
184
  }
174
185
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"phase-sync.js","sourceRoot":"","sources":["../../src/directive/phase-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phase-sync.js","sourceRoot":"","sources":["../../src/directive/phase-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The window read of the ready-focus pass: the focus's review_requested_at, or
3
+ * 'absent' when the focus is not in the active set read. Throws when the read fails.
4
+ */
5
+ export type ReadReviewWindow = (organizationId: string, focus: {
6
+ focus_id: string;
7
+ product_id: string | null;
8
+ }) => Promise<string | null | 'absent'>;
9
+ /** Drop a queued review directive whose window the row shows closed; true when dropped. */
10
+ export declare function dropReviewDirectiveOfClosedWindow(focus: {
11
+ focus_id: string;
12
+ focus_name: string;
13
+ review_requested_at: string | null;
14
+ }): boolean;
15
+ /**
16
+ * The ready-focus pass's window guard, read before its spawn consumes a queued
17
+ * directive. 'spawn': no review directive is queued, its window is open, or it
18
+ * was just discarded (the spawn then runs the focus's coding work). 'withhold':
19
+ * the window could not be read, so this tick does not spawn and the directive stays.
20
+ */
21
+ export declare function gateReadyReviewDirectiveOnWindow(organizationId: string, focus: {
22
+ focus_id: string;
23
+ focus_name: string;
24
+ product_id: string | null;
25
+ }, readReviewWindow: ReadReviewWindow): Promise<'spawn' | 'withhold'>;
26
+ //# sourceMappingURL=closed-review-window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closed-review-window.d.ts","sourceRoot":"","sources":["../../src/focus/closed-review-window.ts"],"names":[],"mappings":"AA+BA;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,KACnD,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC;AAEvC,2FAA2F;AAC3F,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClF,OAAO,CAQT;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC1E,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC,CAkB/B"}