@telora/daemon 0.20.4 → 0.20.19

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 (627) hide show
  1. package/build-info.json +13 -3
  2. package/dist/ai-inspection-context.d.ts.map +1 -1
  3. package/dist/ai-inspection-context.js +5 -3
  4. package/dist/ai-inspection-context.js.map +1 -1
  5. package/dist/assembly-engine.d.ts.map +1 -1
  6. package/dist/assembly-engine.js +4 -2
  7. package/dist/assembly-engine.js.map +1 -1
  8. package/dist/audit-hooks.d.ts.map +1 -1
  9. package/dist/audit-hooks.js +3 -1
  10. package/dist/audit-hooks.js.map +1 -1
  11. package/dist/auth-liveness.d.ts.map +1 -1
  12. package/dist/auth-liveness.js +4 -2
  13. package/dist/auth-liveness.js.map +1 -1
  14. package/dist/auto-update.d.ts.map +1 -1
  15. package/dist/auto-update.js +14 -12
  16. package/dist/auto-update.js.map +1 -1
  17. package/dist/backends/codex/codex-backend.d.ts.map +1 -1
  18. package/dist/backends/codex/codex-backend.js +4 -2
  19. package/dist/backends/codex/codex-backend.js.map +1 -1
  20. package/dist/backends/codex/codex-mcp-proxy.d.ts.map +1 -1
  21. package/dist/backends/codex/codex-mcp-proxy.js +3 -1
  22. package/dist/backends/codex/codex-mcp-proxy.js.map +1 -1
  23. package/dist/backends/lacuna/lifecycle.d.ts.map +1 -1
  24. package/dist/backends/lacuna/lifecycle.js +4 -2
  25. package/dist/backends/lacuna/lifecycle.js.map +1 -1
  26. package/dist/backends/resolve.d.ts.map +1 -1
  27. package/dist/backends/resolve.js +3 -1
  28. package/dist/backends/resolve.js.map +1 -1
  29. package/dist/cascade-restatement.d.ts.map +1 -1
  30. package/dist/cascade-restatement.js +15 -13
  31. package/dist/cascade-restatement.js.map +1 -1
  32. package/dist/ci-escalation.d.ts.map +1 -1
  33. package/dist/ci-escalation.js +4 -2
  34. package/dist/ci-escalation.js.map +1 -1
  35. package/dist/ci-sensor-loop.d.ts.map +1 -1
  36. package/dist/ci-sensor-loop.js +6 -4
  37. package/dist/ci-sensor-loop.js.map +1 -1
  38. package/dist/ci-status-git.d.ts +5 -6
  39. package/dist/ci-status-git.d.ts.map +1 -1
  40. package/dist/ci-status-git.js +7 -7
  41. package/dist/ci-status-git.js.map +1 -1
  42. package/dist/cli/connect.d.ts.map +1 -1
  43. package/dist/cli/connect.js +9 -2
  44. package/dist/cli/connect.js.map +1 -1
  45. package/dist/cli/open.d.ts.map +1 -1
  46. package/dist/cli/open.js +9 -2
  47. package/dist/cli/open.js.map +1 -1
  48. package/dist/cli/session-state.d.ts.map +1 -1
  49. package/dist/cli/session-state.js +2 -0
  50. package/dist/cli/session-state.js.map +1 -1
  51. package/dist/cli/verify-setup.d.ts.map +1 -1
  52. package/dist/cli/verify-setup.js +9 -4
  53. package/dist/cli/verify-setup.js.map +1 -1
  54. package/dist/close-loop-dispatcher.d.ts.map +1 -1
  55. package/dist/close-loop-dispatcher.js +6 -4
  56. package/dist/close-loop-dispatcher.js.map +1 -1
  57. package/dist/completion/advanceability.d.ts.map +1 -1
  58. package/dist/completion/advanceability.js +3 -1
  59. package/dist/completion/advanceability.js.map +1 -1
  60. package/dist/completion/agent-completion.d.ts.map +1 -1
  61. package/dist/completion/agent-completion.js +11 -9
  62. package/dist/completion/agent-completion.js.map +1 -1
  63. package/dist/completion/event-escalations.d.ts.map +1 -1
  64. package/dist/completion/event-escalations.js +10 -8
  65. package/dist/completion/event-escalations.js.map +1 -1
  66. package/dist/completion/event-phases.d.ts +104 -0
  67. package/dist/completion/event-phases.d.ts.map +1 -0
  68. package/dist/completion/event-phases.js +572 -0
  69. package/dist/completion/event-phases.js.map +1 -0
  70. package/dist/completion/event.d.ts +1 -1
  71. package/dist/completion/event.d.ts.map +1 -1
  72. package/dist/completion/event.js +36 -592
  73. package/dist/completion/event.js.map +1 -1
  74. package/dist/completion/merge-phase.d.ts.map +1 -1
  75. package/dist/completion/merge-phase.js +14 -12
  76. package/dist/completion/merge-phase.js.map +1 -1
  77. package/dist/completion/read-only-pristine.d.ts.map +1 -1
  78. package/dist/completion/read-only-pristine.js +6 -4
  79. package/dist/completion/read-only-pristine.js.map +1 -1
  80. package/dist/completion/review-exit-phase.d.ts +2 -0
  81. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  82. package/dist/completion/review-exit-phase.js +86 -30
  83. package/dist/completion/review-exit-phase.js.map +1 -1
  84. package/dist/completion/review-exit-shortfall.d.ts +62 -0
  85. package/dist/completion/review-exit-shortfall.d.ts.map +1 -0
  86. package/dist/completion/review-exit-shortfall.js +84 -0
  87. package/dist/completion/review-exit-shortfall.js.map +1 -0
  88. package/dist/completion/status-advance-phase.d.ts.map +1 -1
  89. package/dist/completion/status-advance-phase.js +16 -14
  90. package/dist/completion/status-advance-phase.js.map +1 -1
  91. package/dist/completion/team-completion.d.ts.map +1 -1
  92. package/dist/completion/team-completion.js +16 -14
  93. package/dist/completion/team-completion.js.map +1 -1
  94. package/dist/completion/team-lifecycle.d.ts.map +1 -1
  95. package/dist/completion/team-lifecycle.js +32 -33
  96. package/dist/completion/team-lifecycle.js.map +1 -1
  97. package/dist/completion/terminated-work-reconcile.d.ts.map +1 -1
  98. package/dist/completion/terminated-work-reconcile.js +11 -9
  99. package/dist/completion/terminated-work-reconcile.js.map +1 -1
  100. package/dist/condition-evaluators.d.ts.map +1 -1
  101. package/dist/condition-evaluators.js +3 -1
  102. package/dist/condition-evaluators.js.map +1 -1
  103. package/dist/config-reconcile.d.ts.map +1 -1
  104. package/dist/config-reconcile.js +3 -1
  105. package/dist/config-reconcile.js.map +1 -1
  106. package/dist/config.d.ts +4 -4
  107. package/dist/config.d.ts.map +1 -1
  108. package/dist/config.js +39 -37
  109. package/dist/config.js.map +1 -1
  110. package/dist/control-state.d.ts.map +1 -1
  111. package/dist/control-state.js +26 -24
  112. package/dist/control-state.js.map +1 -1
  113. package/dist/crash-recovery.d.ts.map +1 -1
  114. package/dist/crash-recovery.js +43 -41
  115. package/dist/crash-recovery.js.map +1 -1
  116. package/dist/daemon-logs.d.ts.map +1 -1
  117. package/dist/daemon-logs.js +21 -3
  118. package/dist/daemon-logs.js.map +1 -1
  119. package/dist/daemon-process.d.ts +0 -1
  120. package/dist/daemon-process.d.ts.map +1 -1
  121. package/dist/daemon-process.js +15 -10
  122. package/dist/daemon-process.js.map +1 -1
  123. package/dist/delivery-advance-block.d.ts +4 -4
  124. package/dist/delivery-advance-block.d.ts.map +1 -1
  125. package/dist/delivery-advance-block.js +25 -18
  126. package/dist/delivery-advance-block.js.map +1 -1
  127. package/dist/delivery-guards.d.ts.map +1 -1
  128. package/dist/delivery-guards.js +11 -9
  129. package/dist/delivery-guards.js.map +1 -1
  130. package/dist/delivery-lifecycle.d.ts.map +1 -1
  131. package/dist/delivery-lifecycle.js +23 -21
  132. package/dist/delivery-lifecycle.js.map +1 -1
  133. package/dist/delivery-merge.d.ts.map +1 -1
  134. package/dist/delivery-merge.js +10 -8
  135. package/dist/delivery-merge.js.map +1 -1
  136. package/dist/delivery-reconciler-apply.d.ts.map +1 -1
  137. package/dist/delivery-reconciler-apply.js +5 -8
  138. package/dist/delivery-reconciler-apply.js.map +1 -1
  139. package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
  140. package/dist/delivery-reconciler-shadow.js +5 -6
  141. package/dist/delivery-reconciler-shadow.js.map +1 -1
  142. package/dist/directive/close-loop-stage.d.ts.map +1 -1
  143. package/dist/directive/close-loop-stage.js +9 -7
  144. package/dist/directive/close-loop-stage.js.map +1 -1
  145. package/dist/directive/directive-assembly.d.ts.map +1 -1
  146. package/dist/directive/directive-assembly.js +3 -1
  147. package/dist/directive/directive-assembly.js.map +1 -1
  148. package/dist/directive/directive-dispatch.d.ts.map +1 -1
  149. package/dist/directive/directive-dispatch.js +16 -14
  150. package/dist/directive/directive-dispatch.js.map +1 -1
  151. package/dist/directive/directive-queue.d.ts +27 -0
  152. package/dist/directive/directive-queue.d.ts.map +1 -1
  153. package/dist/directive/directive-queue.js +28 -0
  154. package/dist/directive/directive-queue.js.map +1 -1
  155. package/dist/directive/phase-sync.d.ts.map +1 -1
  156. package/dist/directive/phase-sync.js +8 -6
  157. package/dist/directive/phase-sync.js.map +1 -1
  158. package/dist/directive-executor.d.ts +1 -1
  159. package/dist/directive-executor.d.ts.map +1 -1
  160. package/dist/directive-executor.js +12 -10
  161. package/dist/directive-executor.js.map +1 -1
  162. package/dist/discovery-poll.d.ts.map +1 -1
  163. package/dist/discovery-poll.js +8 -6
  164. package/dist/discovery-poll.js.map +1 -1
  165. package/dist/drain-teardown.d.ts.map +1 -1
  166. package/dist/drain-teardown.js +6 -19
  167. package/dist/drain-teardown.js.map +1 -1
  168. package/dist/drift-eval-loop.d.ts.map +1 -1
  169. package/dist/drift-eval-loop.js +10 -8
  170. package/dist/drift-eval-loop.js.map +1 -1
  171. package/dist/drift-ratify-loop.d.ts +68 -0
  172. package/dist/drift-ratify-loop.d.ts.map +1 -0
  173. package/dist/drift-ratify-loop.js +161 -0
  174. package/dist/drift-ratify-loop.js.map +1 -0
  175. package/dist/drift-ratify-policy.d.ts +101 -0
  176. package/dist/drift-ratify-policy.d.ts.map +1 -0
  177. package/dist/drift-ratify-policy.js +178 -0
  178. package/dist/drift-ratify-policy.js.map +1 -0
  179. package/dist/escalation-provenance.d.ts.map +1 -1
  180. package/dist/escalation-provenance.js +8 -3
  181. package/dist/escalation-provenance.js.map +1 -1
  182. package/dist/focus-engine.d.ts.map +1 -1
  183. package/dist/focus-engine.js +36 -34
  184. package/dist/focus-engine.js.map +1 -1
  185. package/dist/focus-executor.d.ts +1 -0
  186. package/dist/focus-executor.d.ts.map +1 -1
  187. package/dist/focus-executor.js +16 -14
  188. package/dist/focus-executor.js.map +1 -1
  189. package/dist/focus-lifecycle.d.ts.map +1 -1
  190. package/dist/focus-lifecycle.js +56 -44
  191. package/dist/focus-lifecycle.js.map +1 -1
  192. package/dist/focus-loop-registry.d.ts.map +1 -1
  193. package/dist/focus-loop-registry.js +87 -36
  194. package/dist/focus-loop-registry.js.map +1 -1
  195. package/dist/focus-merge.d.ts.map +1 -1
  196. package/dist/focus-merge.js +40 -34
  197. package/dist/focus-merge.js.map +1 -1
  198. package/dist/focus-provisioning.d.ts.map +1 -1
  199. package/dist/focus-provisioning.js +15 -13
  200. package/dist/focus-provisioning.js.map +1 -1
  201. package/dist/focus-respawn-guard.d.ts.map +1 -1
  202. package/dist/focus-respawn-guard.js +4 -2
  203. package/dist/focus-respawn-guard.js.map +1 -1
  204. package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -1
  205. package/dist/focus-stage-lifecycle/planning-release.js +10 -8
  206. package/dist/focus-stage-lifecycle/planning-release.js.map +1 -1
  207. package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -1
  208. package/dist/focus-stage-lifecycle/review-convergence.js +11 -9
  209. package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -1
  210. package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
  211. package/dist/focus-stage-lifecycle/wedge-watchdog.js +7 -5
  212. package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
  213. package/dist/focus-stage-lifecycle.d.ts.map +1 -1
  214. package/dist/focus-stage-lifecycle.js +7 -5
  215. package/dist/focus-stage-lifecycle.js.map +1 -1
  216. package/dist/focus-team-state.d.ts +18 -9
  217. package/dist/focus-team-state.d.ts.map +1 -1
  218. package/dist/focus-team-state.js +37 -18
  219. package/dist/focus-team-state.js.map +1 -1
  220. package/dist/focus-worktree-state.d.ts.map +1 -1
  221. package/dist/focus-worktree-state.js +6 -4
  222. package/dist/focus-worktree-state.js.map +1 -1
  223. package/dist/git/branch.d.ts.map +1 -1
  224. package/dist/git/branch.js +7 -5
  225. package/dist/git/branch.js.map +1 -1
  226. package/dist/git/genesis.d.ts.map +1 -1
  227. package/dist/git/genesis.js +3 -1
  228. package/dist/git/genesis.js.map +1 -1
  229. package/dist/git/integration.d.ts.map +1 -1
  230. package/dist/git/integration.js +4 -2
  231. package/dist/git/integration.js.map +1 -1
  232. package/dist/git/merge-helpers.d.ts.map +1 -1
  233. package/dist/git/merge-helpers.js +6 -4
  234. package/dist/git/merge-helpers.js.map +1 -1
  235. package/dist/git/merge-lock.d.ts +0 -7
  236. package/dist/git/merge-lock.d.ts.map +1 -1
  237. package/dist/git/merge-lock.js +5 -3
  238. package/dist/git/merge-lock.js.map +1 -1
  239. package/dist/git/merge.d.ts.map +1 -1
  240. package/dist/git/merge.js +10 -8
  241. package/dist/git/merge.js.map +1 -1
  242. package/dist/git/state-detector.d.ts.map +1 -1
  243. package/dist/git/state-detector.js +9 -7
  244. package/dist/git/state-detector.js.map +1 -1
  245. package/dist/git/utils.d.ts.map +1 -1
  246. package/dist/git/utils.js +6 -4
  247. package/dist/git/utils.js.map +1 -1
  248. package/dist/git.d.ts.map +1 -1
  249. package/dist/git.js +16 -14
  250. package/dist/git.js.map +1 -1
  251. package/dist/guard-evaluator.d.ts.map +1 -1
  252. package/dist/guard-evaluator.js +3 -1
  253. package/dist/guard-evaluator.js.map +1 -1
  254. package/dist/heartbeat.d.ts.map +1 -1
  255. package/dist/heartbeat.js +14 -11
  256. package/dist/heartbeat.js.map +1 -1
  257. package/dist/host-control/catalog.d.ts.map +1 -1
  258. package/dist/host-control/catalog.js +4 -2
  259. package/dist/host-control/catalog.js.map +1 -1
  260. package/dist/host-control/client.d.ts.map +1 -1
  261. package/dist/host-control/client.js +3 -1
  262. package/dist/host-control/client.js.map +1 -1
  263. package/dist/host-control/sizing.d.ts.map +1 -1
  264. package/dist/host-control/sizing.js +4 -1
  265. package/dist/host-control/sizing.js.map +1 -1
  266. package/dist/index.js +110 -127
  267. package/dist/index.js.map +1 -1
  268. package/dist/install-probe-tick.d.ts.map +1 -1
  269. package/dist/install-probe-tick.js +6 -4
  270. package/dist/install-probe-tick.js.map +1 -1
  271. package/dist/intake-control.d.ts +0 -16
  272. package/dist/intake-control.d.ts.map +1 -1
  273. package/dist/intake-control.js +4 -2
  274. package/dist/intake-control.js.map +1 -1
  275. package/dist/listener-auto-advance.d.ts.map +1 -1
  276. package/dist/listener-auto-advance.js +26 -24
  277. package/dist/listener-auto-advance.js.map +1 -1
  278. package/dist/listener.d.ts.map +1 -1
  279. package/dist/listener.js +59 -39
  280. package/dist/listener.js.map +1 -1
  281. package/dist/log.d.ts +84 -0
  282. package/dist/log.d.ts.map +1 -0
  283. package/dist/log.js +182 -0
  284. package/dist/log.js.map +1 -0
  285. package/dist/loops/context-audit-pass.d.ts.map +1 -1
  286. package/dist/loops/context-audit-pass.js +8 -5
  287. package/dist/loops/context-audit-pass.js.map +1 -1
  288. package/dist/loops/engine.d.ts.map +1 -1
  289. package/dist/loops/engine.js +26 -24
  290. package/dist/loops/engine.js.map +1 -1
  291. package/dist/loops/llm-client.d.ts.map +1 -1
  292. package/dist/loops/llm-client.js +4 -2
  293. package/dist/loops/llm-client.js.map +1 -1
  294. package/dist/loops/llm-flag.d.ts +4 -28
  295. package/dist/loops/llm-flag.d.ts.map +1 -1
  296. package/dist/loops/llm-flag.js +11 -30
  297. package/dist/loops/llm-flag.js.map +1 -1
  298. package/dist/loops/prompt-builder.d.ts.map +1 -1
  299. package/dist/loops/prompt-builder.js +3 -1
  300. package/dist/loops/prompt-builder.js.map +1 -1
  301. package/dist/merge-back-loop.d.ts.map +1 -1
  302. package/dist/merge-back-loop.js +20 -18
  303. package/dist/merge-back-loop.js.map +1 -1
  304. package/dist/merge-detector.d.ts.map +1 -1
  305. package/dist/merge-detector.js +7 -5
  306. package/dist/merge-detector.js.map +1 -1
  307. package/dist/nexus/endpoint-clearance.d.ts.map +1 -1
  308. package/dist/nexus/endpoint-clearance.js +3 -1
  309. package/dist/nexus/endpoint-clearance.js.map +1 -1
  310. package/dist/nexus/escalation-bridge.d.ts.map +1 -1
  311. package/dist/nexus/escalation-bridge.js +3 -1
  312. package/dist/nexus/escalation-bridge.js.map +1 -1
  313. package/dist/nexus/incoming.d.ts.map +1 -1
  314. package/dist/nexus/incoming.js +3 -1
  315. package/dist/nexus/incoming.js.map +1 -1
  316. package/dist/nexus/intake-spawn.d.ts.map +1 -1
  317. package/dist/nexus/intake-spawn.js +6 -4
  318. package/dist/nexus/intake-spawn.js.map +1 -1
  319. package/dist/nexus/intake.d.ts.map +1 -1
  320. package/dist/nexus/intake.js +3 -1
  321. package/dist/nexus/intake.js.map +1 -1
  322. package/dist/nexus/return.d.ts.map +1 -1
  323. package/dist/nexus/return.js +3 -1
  324. package/dist/nexus/return.js.map +1 -1
  325. package/dist/non-interactive-init.d.ts.map +1 -1
  326. package/dist/non-interactive-init.js +0 -0
  327. package/dist/non-interactive-init.js.map +1 -1
  328. package/dist/otlp/port-manager.d.ts.map +1 -1
  329. package/dist/otlp/port-manager.js +7 -5
  330. package/dist/otlp/port-manager.js.map +1 -1
  331. package/dist/otlp/receiver.d.ts.map +1 -1
  332. package/dist/otlp/receiver.js +14 -12
  333. package/dist/otlp/receiver.js.map +1 -1
  334. package/dist/output-monitor.d.ts.map +1 -1
  335. package/dist/output-monitor.js +6 -4
  336. package/dist/output-monitor.js.map +1 -1
  337. package/dist/prd/controller.d.ts.map +1 -1
  338. package/dist/prd/controller.js +7 -5
  339. package/dist/prd/controller.js.map +1 -1
  340. package/dist/prd/focus-pushdown.d.ts.map +1 -1
  341. package/dist/prd/focus-pushdown.js +3 -1
  342. package/dist/prd/focus-pushdown.js.map +1 -1
  343. package/dist/product-scaffold.d.ts.map +1 -1
  344. package/dist/product-scaffold.js +8 -6
  345. package/dist/product-scaffold.js.map +1 -1
  346. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  347. package/dist/prompt-sections/persona-sections.js +41 -4
  348. package/dist/prompt-sections/persona-sections.js.map +1 -1
  349. package/dist/queries/context-assembly.d.ts.map +1 -1
  350. package/dist/queries/context-assembly.js +3 -1
  351. package/dist/queries/context-assembly.js.map +1 -1
  352. package/dist/queries/deliveries.d.ts +22 -0
  353. package/dist/queries/deliveries.d.ts.map +1 -1
  354. package/dist/queries/deliveries.js +13 -5
  355. package/dist/queries/deliveries.js.map +1 -1
  356. package/dist/queries/focuses.d.ts +9 -0
  357. package/dist/queries/focuses.d.ts.map +1 -1
  358. package/dist/queries/focuses.js +17 -1
  359. package/dist/queries/focuses.js.map +1 -1
  360. package/dist/queries/guards.d.ts.map +1 -1
  361. package/dist/queries/guards.js +3 -1
  362. package/dist/queries/guards.js.map +1 -1
  363. package/dist/queries/issues.d.ts.map +1 -1
  364. package/dist/queries/issues.js +3 -1
  365. package/dist/queries/issues.js.map +1 -1
  366. package/dist/queries/reality-tree.d.ts +22 -0
  367. package/dist/queries/reality-tree.d.ts.map +1 -1
  368. package/dist/queries/reality-tree.js +32 -0
  369. package/dist/queries/reality-tree.js.map +1 -1
  370. package/dist/queries/schemas.d.ts +2 -0
  371. package/dist/queries/schemas.d.ts.map +1 -1
  372. package/dist/queries/schemas.js +5 -0
  373. package/dist/queries/schemas.js.map +1 -1
  374. package/dist/queries/system-session.d.ts.map +1 -1
  375. package/dist/queries/system-session.js +5 -3
  376. package/dist/queries/system-session.js.map +1 -1
  377. package/dist/queries/verification.d.ts.map +1 -1
  378. package/dist/queries/verification.js +6 -4
  379. package/dist/queries/verification.js.map +1 -1
  380. package/dist/reality-pole-capture.d.ts.map +1 -1
  381. package/dist/reality-pole-capture.js +7 -4
  382. package/dist/reality-pole-capture.js.map +1 -1
  383. package/dist/reality-pole.d.ts.map +1 -1
  384. package/dist/reality-pole.js +4 -2
  385. package/dist/reality-pole.js.map +1 -1
  386. package/dist/resolvers/agent-escalations.d.ts.map +1 -1
  387. package/dist/resolvers/agent-escalations.js +3 -1
  388. package/dist/resolvers/agent-escalations.js.map +1 -1
  389. package/dist/resolvers/agent-session-summaries.d.ts.map +1 -1
  390. package/dist/resolvers/agent-session-summaries.js +3 -1
  391. package/dist/resolvers/agent-session-summaries.js.map +1 -1
  392. package/dist/resolvers/deployment-profile.d.ts.map +1 -1
  393. package/dist/resolvers/deployment-profile.js +3 -1
  394. package/dist/resolvers/deployment-profile.js.map +1 -1
  395. package/dist/resolvers/drift-shortfall-proposals.d.ts +27 -0
  396. package/dist/resolvers/drift-shortfall-proposals.d.ts.map +1 -0
  397. package/dist/resolvers/drift-shortfall-proposals.js +90 -0
  398. package/dist/resolvers/drift-shortfall-proposals.js.map +1 -0
  399. package/dist/resolvers/escalation-answers.d.ts.map +1 -1
  400. package/dist/resolvers/escalation-answers.js +4 -2
  401. package/dist/resolvers/escalation-answers.js.map +1 -1
  402. package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
  403. package/dist/resolvers/focus-anchoring-injections.js +3 -1
  404. package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
  405. package/dist/resolvers/focus-injections.d.ts.map +1 -1
  406. package/dist/resolvers/focus-injections.js +3 -1
  407. package/dist/resolvers/focus-injections.js.map +1 -1
  408. package/dist/resolvers/focus-last-review-report.d.ts.map +1 -1
  409. package/dist/resolvers/focus-last-review-report.js +3 -1
  410. package/dist/resolvers/focus-last-review-report.js.map +1 -1
  411. package/dist/resolvers/focus-reality-tree.d.ts.map +1 -1
  412. package/dist/resolvers/focus-reality-tree.js +3 -1
  413. package/dist/resolvers/focus-reality-tree.js.map +1 -1
  414. package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
  415. package/dist/resolvers/git-diff-against-base.js +3 -1
  416. package/dist/resolvers/git-diff-against-base.js.map +1 -1
  417. package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -1
  418. package/dist/resolvers/guards-evaluation-results.js +3 -1
  419. package/dist/resolvers/guards-evaluation-results.js.map +1 -1
  420. package/dist/resolvers/index.d.ts.map +1 -1
  421. package/dist/resolvers/index.js +2 -0
  422. package/dist/resolvers/index.js.map +1 -1
  423. package/dist/resolvers/loop-context.d.ts.map +1 -1
  424. package/dist/resolvers/loop-context.js +6 -2
  425. package/dist/resolvers/loop-context.js.map +1 -1
  426. package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
  427. package/dist/resolvers/loop-delivery-index.js +3 -1
  428. package/dist/resolvers/loop-delivery-index.js.map +1 -1
  429. package/dist/resolvers/loop-documents.d.ts.map +1 -1
  430. package/dist/resolvers/loop-documents.js +3 -1
  431. package/dist/resolvers/loop-documents.js.map +1 -1
  432. package/dist/resolvers/loop-expected-effects.d.ts.map +1 -1
  433. package/dist/resolvers/loop-expected-effects.js +3 -1
  434. package/dist/resolvers/loop-expected-effects.js.map +1 -1
  435. package/dist/resolvers/loop-frt-statement.d.ts.map +1 -1
  436. package/dist/resolvers/loop-frt-statement.js +3 -1
  437. package/dist/resolvers/loop-frt-statement.js.map +1 -1
  438. package/dist/resolvers/loop-injection.d.ts.map +1 -1
  439. package/dist/resolvers/loop-injection.js +3 -1
  440. package/dist/resolvers/loop-injection.js.map +1 -1
  441. package/dist/resolvers/loop-persona.d.ts.map +1 -1
  442. package/dist/resolvers/loop-persona.js +3 -1
  443. package/dist/resolvers/loop-persona.js.map +1 -1
  444. package/dist/resolvers/loop-questions.d.ts.map +1 -1
  445. package/dist/resolvers/loop-questions.js +3 -1
  446. package/dist/resolvers/loop-questions.js.map +1 -1
  447. package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -1
  448. package/dist/resolvers/loop-upstream-udes.js +3 -1
  449. package/dist/resolvers/loop-upstream-udes.js.map +1 -1
  450. package/dist/resolvers/prd-context.d.ts.map +1 -1
  451. package/dist/resolvers/prd-context.js +3 -1
  452. package/dist/resolvers/prd-context.js.map +1 -1
  453. package/dist/resolvers/reality-metrics.d.ts.map +1 -1
  454. package/dist/resolvers/reality-metrics.js +3 -1
  455. package/dist/resolvers/reality-metrics.js.map +1 -1
  456. package/dist/resolvers/reality-projections.d.ts.map +1 -1
  457. package/dist/resolvers/reality-projections.js +3 -1
  458. package/dist/resolvers/reality-projections.js.map +1 -1
  459. package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -1
  460. package/dist/resolvers/reality-tree-snapshot.js +3 -1
  461. package/dist/resolvers/reality-tree-snapshot.js.map +1 -1
  462. package/dist/resolvers/retired-injections.d.ts.map +1 -1
  463. package/dist/resolvers/retired-injections.js +3 -1
  464. package/dist/resolvers/retired-injections.js.map +1 -1
  465. package/dist/resolvers/review-outcomes.d.ts.map +1 -1
  466. package/dist/resolvers/review-outcomes.js +3 -1
  467. package/dist/resolvers/review-outcomes.js.map +1 -1
  468. package/dist/resolvers/security-advisory.d.ts.map +1 -1
  469. package/dist/resolvers/security-advisory.js +3 -1
  470. package/dist/resolvers/security-advisory.js.map +1 -1
  471. package/dist/resolvers/shared/wiki.d.ts.map +1 -1
  472. package/dist/resolvers/shared/wiki.js +5 -3
  473. package/dist/resolvers/shared/wiki.js.map +1 -1
  474. package/dist/resolvers/wiki-topic.d.ts.map +1 -1
  475. package/dist/resolvers/wiki-topic.js +3 -1
  476. package/dist/resolvers/wiki-topic.js.map +1 -1
  477. package/dist/resolvers/workflow-stages.d.ts.map +1 -1
  478. package/dist/resolvers/workflow-stages.js +3 -1
  479. package/dist/resolvers/workflow-stages.js.map +1 -1
  480. package/dist/schema-version-gate.d.ts.map +1 -1
  481. package/dist/schema-version-gate.js +16 -18
  482. package/dist/schema-version-gate.js.map +1 -1
  483. package/dist/security-finding-gate.d.ts.map +1 -1
  484. package/dist/security-finding-gate.js +3 -1
  485. package/dist/security-finding-gate.js.map +1 -1
  486. package/dist/security-rescan-resolution.d.ts.map +1 -1
  487. package/dist/security-rescan-resolution.js +4 -2
  488. package/dist/security-rescan-resolution.js.map +1 -1
  489. package/dist/security-scan-engine.d.ts.map +1 -1
  490. package/dist/security-scan-engine.js +9 -6
  491. package/dist/security-scan-engine.js.map +1 -1
  492. package/dist/self-update.d.ts.map +1 -1
  493. package/dist/self-update.js +48 -39
  494. package/dist/self-update.js.map +1 -1
  495. package/dist/sensor-sweep.d.ts.map +1 -1
  496. package/dist/sensor-sweep.js +5 -2
  497. package/dist/sensor-sweep.js.map +1 -1
  498. package/dist/session-stamp.d.ts.map +1 -1
  499. package/dist/session-stamp.js +4 -2
  500. package/dist/session-stamp.js.map +1 -1
  501. package/dist/shortfall-disposition-config.d.ts +34 -0
  502. package/dist/shortfall-disposition-config.d.ts.map +1 -0
  503. package/dist/shortfall-disposition-config.js +46 -0
  504. package/dist/shortfall-disposition-config.js.map +1 -0
  505. package/dist/shortfall-disposition-loop.d.ts +86 -0
  506. package/dist/shortfall-disposition-loop.d.ts.map +1 -0
  507. package/dist/shortfall-disposition-loop.js +309 -0
  508. package/dist/shortfall-disposition-loop.js.map +1 -0
  509. package/dist/spawn/model-routing.d.ts.map +1 -1
  510. package/dist/spawn/model-routing.js +19 -16
  511. package/dist/spawn/model-routing.js.map +1 -1
  512. package/dist/spawn/process-spawn.d.ts.map +1 -1
  513. package/dist/spawn/process-spawn.js +29 -22
  514. package/dist/spawn/process-spawn.js.map +1 -1
  515. package/dist/spawn/prompt-assembly.d.ts.map +1 -1
  516. package/dist/spawn/prompt-assembly.js +6 -4
  517. package/dist/spawn/prompt-assembly.js.map +1 -1
  518. package/dist/spawn/spawn-decision.d.ts.map +1 -1
  519. package/dist/spawn/spawn-decision.js +16 -14
  520. package/dist/spawn/spawn-decision.js.map +1 -1
  521. package/dist/spawn/worktree-session.d.ts.map +1 -1
  522. package/dist/spawn/worktree-session.js +13 -11
  523. package/dist/spawn/worktree-session.js.map +1 -1
  524. package/dist/spawn-cooldown.d.ts +0 -7
  525. package/dist/spawn-cooldown.d.ts.map +1 -1
  526. package/dist/spawn-cooldown.js +3 -1
  527. package/dist/spawn-cooldown.js.map +1 -1
  528. package/dist/spawn-environment.d.ts.map +1 -1
  529. package/dist/spawn-environment.js +4 -1
  530. package/dist/spawn-environment.js.map +1 -1
  531. package/dist/spawner/helpers.d.ts.map +1 -1
  532. package/dist/spawner/helpers.js +19 -17
  533. package/dist/spawner/helpers.js.map +1 -1
  534. package/dist/spawner/lifecycle.d.ts.map +1 -1
  535. package/dist/spawner/lifecycle.js +17 -13
  536. package/dist/spawner/lifecycle.js.map +1 -1
  537. package/dist/spawner/liveness.d.ts.map +1 -1
  538. package/dist/spawner/liveness.js +7 -5
  539. package/dist/spawner/liveness.js.map +1 -1
  540. package/dist/spawner/resolution.d.ts.map +1 -1
  541. package/dist/spawner/resolution.js +7 -5
  542. package/dist/spawner/resolution.js.map +1 -1
  543. package/dist/spawner/stream-handlers.d.ts +6 -55
  544. package/dist/spawner/stream-handlers.d.ts.map +1 -1
  545. package/dist/spawner/stream-handlers.js +10 -172
  546. package/dist/spawner/stream-handlers.js.map +1 -1
  547. package/dist/spawner/timeout.d.ts.map +1 -1
  548. package/dist/spawner/timeout.js +11 -9
  549. package/dist/spawner/timeout.js.map +1 -1
  550. package/dist/staleness.d.ts.map +1 -1
  551. package/dist/staleness.js +4 -1
  552. package/dist/staleness.js.map +1 -1
  553. package/dist/stall-detector-config.d.ts +6 -17
  554. package/dist/stall-detector-config.d.ts.map +1 -1
  555. package/dist/stall-detector-config.js +10 -36
  556. package/dist/stall-detector-config.js.map +1 -1
  557. package/dist/stall-detectors.d.ts.map +1 -1
  558. package/dist/stall-detectors.js +6 -4
  559. package/dist/stall-detectors.js.map +1 -1
  560. package/dist/state-cascade.d.ts.map +1 -1
  561. package/dist/state-cascade.js +9 -7
  562. package/dist/state-cascade.js.map +1 -1
  563. package/dist/stop-request.d.ts.map +1 -1
  564. package/dist/stop-request.js +6 -2
  565. package/dist/stop-request.js.map +1 -1
  566. package/dist/supabase.d.ts.map +1 -1
  567. package/dist/supabase.js +3 -1
  568. package/dist/supabase.js.map +1 -1
  569. package/dist/telemetry-writer.d.ts.map +1 -1
  570. package/dist/telemetry-writer.js +11 -9
  571. package/dist/telemetry-writer.js.map +1 -1
  572. package/dist/trigger-executor.d.ts.map +1 -1
  573. package/dist/trigger-executor.js +28 -26
  574. package/dist/trigger-executor.js.map +1 -1
  575. package/dist/unified-engine-lifecycle.d.ts +19 -11
  576. package/dist/unified-engine-lifecycle.d.ts.map +1 -1
  577. package/dist/unified-engine-lifecycle.js +71 -70
  578. package/dist/unified-engine-lifecycle.js.map +1 -1
  579. package/dist/unified-init.d.ts.map +1 -1
  580. package/dist/unified-init.js +41 -36
  581. package/dist/unified-init.js.map +1 -1
  582. package/dist/unified-shell-config.d.ts +8 -1
  583. package/dist/unified-shell-config.d.ts.map +1 -1
  584. package/dist/unified-shell-config.js +57 -34
  585. package/dist/unified-shell-config.js.map +1 -1
  586. package/dist/unified-shell-status.d.ts.map +1 -1
  587. package/dist/unified-shell-status.js +39 -37
  588. package/dist/unified-shell-status.js.map +1 -1
  589. package/dist/unified-shell.d.ts.map +1 -1
  590. package/dist/unified-shell.js +37 -41
  591. package/dist/unified-shell.js.map +1 -1
  592. package/dist/verification-baseline.d.ts.map +1 -1
  593. package/dist/verification-baseline.js +7 -4
  594. package/dist/verification-baseline.js.map +1 -1
  595. package/dist/verification-config.d.ts +3 -3
  596. package/dist/verification-config.d.ts.map +1 -1
  597. package/dist/verification-config.js +8 -19
  598. package/dist/verification-config.js.map +1 -1
  599. package/dist/verification-default-on.d.ts +6 -6
  600. package/dist/verification-default-on.d.ts.map +1 -1
  601. package/dist/verification-default-on.js +9 -7
  602. package/dist/verification-default-on.js.map +1 -1
  603. package/dist/verification-deterministic.d.ts.map +1 -1
  604. package/dist/verification-deterministic.js +6 -3
  605. package/dist/verification-deterministic.js.map +1 -1
  606. package/dist/verification-engine.d.ts.map +1 -1
  607. package/dist/verification-engine.js +20 -16
  608. package/dist/verification-engine.js.map +1 -1
  609. package/dist/verification-feedback.d.ts.map +1 -1
  610. package/dist/verification-feedback.js +4 -2
  611. package/dist/verification-feedback.js.map +1 -1
  612. package/dist/version-check.d.ts.map +1 -1
  613. package/dist/version-check.js +5 -3
  614. package/dist/version-check.js.map +1 -1
  615. package/dist/worker-pidfile.d.ts.map +1 -1
  616. package/dist/worker-pidfile.js +8 -3
  617. package/dist/worker-pidfile.js.map +1 -1
  618. package/dist/worktree/focus.d.ts.map +1 -1
  619. package/dist/worktree/focus.js +15 -13
  620. package/dist/worktree/focus.js.map +1 -1
  621. package/dist/worktree/safety.d.ts.map +1 -1
  622. package/dist/worktree/safety.js +13 -11
  623. package/dist/worktree/safety.js.map +1 -1
  624. package/dist/worktree.d.ts.map +1 -1
  625. package/dist/worktree.js +41 -39
  626. package/dist/worktree.js.map +1 -1
  627. package/package.json +3 -3
@@ -22,10 +22,14 @@ import { runCascadeProseTick, runNegativeBranchTick } from './cascade-restatemen
22
22
  import { runPrdControllerTickAll } from './prd/index.js';
23
23
  import { runMergeBackTick } from './merge-back-loop.js';
24
24
  import { runDriftEvalTick, runPendingDriftEvalRequestsTick } from './drift-eval-loop.js';
25
+ import { runDriftRatifyTick } from './drift-ratify-loop.js';
26
+ import { runShortfallDispositionTick } from './shortfall-disposition-loop.js';
25
27
  import { runSensorSweepTick } from './sensor-sweep.js';
26
28
  import { runCiSensorTick } from './ci-sensor-loop.js';
27
29
  import { reconcileDaemonProducts, buildReconcileDeps } from './config-reconcile.js';
28
30
  import { buildDefaultSecurityScanDeps, runSecurityScanTick, } from './security-scan-engine.js';
31
+ import { createLogger } from './log.js';
32
+ const log = createLogger({ module: 'prd-controller' });
29
33
  export const LOOP_REGISTRY = [
30
34
  // 1. Stuck-team watchdog (60s). Defense-in-depth for the session-slot
31
35
  // pipeline: a team wedged in `shutting_down` pins its governor slot
@@ -43,10 +47,10 @@ export const LOOP_REGISTRY = [
43
47
  thresholdMs: stuckShutdownTimeoutMs,
44
48
  });
45
49
  if (result.reaped > 0) {
46
- console.warn(`[stuck-shutdown-watchdog] reaped ${result.reaped} team(s) stuck in ` +
50
+ log.warn(`[stuck-shutdown-watchdog] reaped ${result.reaped} team(s) stuck in ` +
47
51
  `shutting_down past ${stuckShutdownTimeoutMs}ms: ${result.reapedFocusIds.join(', ')}`);
48
52
  }
49
- }, 60_000, 'stuck-shutdown-watchdog'));
53
+ }, 60_000, 'stuck-shutdown-watchdog', { skipIfRunning: true }));
50
54
  },
51
55
  },
52
56
  // 2. Differential Focus Spec: cybernetic loop tick (60s).
@@ -59,7 +63,7 @@ export const LOOP_REGISTRY = [
59
63
  register(engine, config) {
60
64
  engine.intervals.push(safeInterval(async () => {
61
65
  await engine.tickFocusLoop(config);
62
- }, 60_000, 'focus-loop'));
66
+ }, 60_000, 'focus-loop', { skipIfRunning: true }));
63
67
  },
64
68
  },
65
69
  // 3. Differential Focus Spec: pluggable delivery verification tick (60s).
@@ -74,13 +78,13 @@ export const LOOP_REGISTRY = [
74
78
  try {
75
79
  const counts = await runVerificationTick(config);
76
80
  if (counts.checked > 0) {
77
- console.log(`[verification] tick: checked=${counts.checked} passed=${counts.passed} failed=${counts.failed} pending=${counts.pending} escalated=${counts.escalated}`);
81
+ log.info(`[verification] tick: checked=${counts.checked} passed=${counts.passed} failed=${counts.failed} pending=${counts.pending} escalated=${counts.escalated}`);
78
82
  }
79
83
  }
80
84
  catch (err) {
81
- console.warn('[verification] tick failed:', err.message);
85
+ log.warn('[verification] tick failed:', err.message);
82
86
  }
83
- }, 60_000, 'verification-loop'));
87
+ }, 60_000, 'verification-loop', { skipIfRunning: true }));
84
88
  },
85
89
  },
86
90
  // 4. FRT-rethink-on-flip: eager cascade-prose reconciliation tick (60s).
@@ -95,13 +99,13 @@ export const LOOP_REGISTRY = [
95
99
  try {
96
100
  const counts = await runCascadeProseTick(config);
97
101
  if (counts.authored > 0) {
98
- console.log(`[frt-prose] tick: treesScanned=${counts.treesScanned} authored=${counts.authored}`);
102
+ log.info(`[frt-prose] tick: treesScanned=${counts.treesScanned} authored=${counts.authored}`);
99
103
  }
100
104
  }
101
105
  catch (err) {
102
- console.warn('[frt-prose] tick failed:', err.message);
106
+ log.warn('[frt-prose] tick failed:', err.message);
103
107
  }
104
- }, 60_000, 'frt-prose-loop'));
108
+ }, 60_000, 'frt-prose-loop', { skipIfRunning: true }));
105
109
  },
106
110
  },
107
111
  // 5. Negative-branch reservation tick (5 minutes). Shares the
@@ -114,13 +118,13 @@ export const LOOP_REGISTRY = [
114
118
  try {
115
119
  const counts = await runNegativeBranchTick(config);
116
120
  if (counts.proposed > 0) {
117
- console.log(`[negative-branch] tick: treesScanned=${counts.treesScanned} proposed=${counts.proposed}`);
121
+ log.info(`[negative-branch] tick: treesScanned=${counts.treesScanned} proposed=${counts.proposed}`);
118
122
  }
119
123
  }
120
124
  catch (err) {
121
- console.warn('[negative-branch] tick failed:', err.message);
125
+ log.warn('[negative-branch] tick failed:', err.message);
122
126
  }
123
- }, 300_000, 'negative-branch-loop'));
127
+ }, 300_000, 'negative-branch-loop', { skipIfRunning: true }));
124
128
  },
125
129
  },
126
130
  // 6. Staged Assembly PRD layer: PRD-lifecycle controller tick (60s).
@@ -138,7 +142,7 @@ export const LOOP_REGISTRY = [
138
142
  counts.armed > 0 ||
139
143
  counts.obstaclesCleared > 0 ||
140
144
  counts.prdsDone > 0) {
141
- console.log(`[prd-controller] tick: obstaclesEvaluated=${counts.obstaclesEvaluated} ` +
145
+ log.info(`[prd-controller] tick: obstaclesEvaluated=${counts.obstaclesEvaluated} ` +
142
146
  `obstaclesCleared=${counts.obstaclesCleared} materialized=${counts.materialized} ` +
143
147
  `armed=${counts.armed} skippedNoRole=${counts.skippedNoRole} prdsDone=${counts.prdsDone}`);
144
148
  }
@@ -147,16 +151,16 @@ export const LOOP_REGISTRY = [
147
151
  // (no materialize/arm/clear/done happened). Warn loudly and name the
148
152
  // fix so an operator who is not filing-escalation-watching still sees it.
149
153
  if (counts.skippedNoRole > 0) {
150
- console.warn(`[prd-controller] ${counts.skippedNoRole} frontier focus/foci could NOT be armed: ` +
154
+ log.warn(`[prd-controller] ${counts.skippedNoRole} frontier focus/foci could NOT be armed: ` +
151
155
  'No arm role is set on the PRD (prds.assigned_agent_role_id is null -- PRD is not Played). ' +
152
156
  'Play the PRD: telora_prd update prdId=<uuid> assignedAgentRoleId=<agent_roles uuid>. ' +
153
157
  `(prdsBlockedNoRole=${counts.prdsBlockedNoRole})`);
154
158
  }
155
159
  }
156
160
  catch (err) {
157
- console.warn('[prd-controller] tick failed:', err.message);
161
+ log.warn('tick failed:', err.message);
158
162
  }
159
- }, 60_000, 'prd-controller'));
163
+ }, 60_000, 'prd-controller', { skipIfRunning: true }));
160
164
  },
161
165
  },
162
166
  // 7. Continuous merge-back loop (60s).
@@ -172,9 +176,9 @@ export const LOOP_REGISTRY = [
172
176
  await runMergeBackTick(config);
173
177
  }
174
178
  catch (err) {
175
- console.warn('[merge-back-loop] tick failed:', err.message);
179
+ log.warn('[merge-back-loop] tick failed:', err.message);
176
180
  }
177
- }, 60_000, 'merge-back-loop'));
181
+ }, 60_000, 'merge-back-loop', { skipIfRunning: true }));
178
182
  },
179
183
  },
180
184
  // 8. Differential Surface: drift-evaluation loop (10 minutes) + on-demand
@@ -191,9 +195,9 @@ export const LOOP_REGISTRY = [
191
195
  await runDriftEvalTick(config);
192
196
  }
193
197
  catch (err) {
194
- console.warn('[drift-eval-loop] tick failed:', err.message);
198
+ log.warn('[drift-eval-loop] tick failed:', err.message);
195
199
  }
196
- }, 600_000, 'drift-eval-loop'));
200
+ }, 600_000, 'drift-eval-loop', { skipIfRunning: true }));
197
201
  // On-demand requests poll (30 seconds). Drains
198
202
  // product_focuses.drift_eval_requested_at signals emitted by the
199
203
  // Re-evaluate button so the user sees results within seconds rather
@@ -203,9 +207,56 @@ export const LOOP_REGISTRY = [
203
207
  await runPendingDriftEvalRequestsTick(config);
204
208
  }
205
209
  catch (err) {
206
- console.warn('[drift-eval-loop] request tick failed:', err.message);
210
+ log.warn('[drift-eval-loop] request tick failed:', err.message);
207
211
  }
208
- }, 30_000, 'drift-eval-requests'));
212
+ }, 30_000, 'drift-eval-requests', { skipIfRunning: true }));
213
+ },
214
+ },
215
+ // 8b. Drift auto-ratification loop (60 seconds). Ratifies the safe majority
216
+ // of the drift stream (per drift-ratify-policy.ts) with a system actor so
217
+ // the tree tracks observed reality at machine speed instead of pooling in
218
+ // `proposed`. Inward shortfalls and anything unclassifiable are left
219
+ // untouched. Cadence is tight because the whole point is that the queue
220
+ // never pools beyond the current tick; the work per tick is one list plus
221
+ // one ratify per safe proposal.
222
+ {
223
+ guard: 'TELORA_DRIFT_RATIFY_LOOP',
224
+ announce: {
225
+ enabled: 'Drift auto-ratify loop tick: enabled (set TELORA_DRIFT_RATIFY_LOOP=0 to disable)',
226
+ disabled: 'Drift auto-ratify loop tick: disabled (TELORA_DRIFT_RATIFY_LOOP=0)',
227
+ },
228
+ register(engine, config) {
229
+ engine.intervals.push(safeInterval(async () => {
230
+ try {
231
+ await runDriftRatifyTick(config);
232
+ }
233
+ catch (err) {
234
+ log.warn('[drift-ratify-loop] tick failed:', err.message);
235
+ }
236
+ }, 60_000, 'drift-ratify-loop', { skipIfRunning: true }));
237
+ },
238
+ },
239
+ // 8c. Scoped shortfall-disposition pass (5 minutes). A focus carrying an
240
+ // undisposed shortfall cannot converge -- the completion gate withholds
241
+ // done. This arms a one-shot pass whose only mandate is disposing them, so
242
+ // the hold self-heals instead of wedging. Slower cadence than the ratify
243
+ // tick: arming spawns a team, so this is expensive work, and a held focus
244
+ // is not urgent by the second.
245
+ {
246
+ guard: 'TELORA_SHORTFALL_DISPOSITION_LOOP',
247
+ announce: {
248
+ enabled: 'Shortfall-disposition loop tick: enabled (set TELORA_SHORTFALL_DISPOSITION_LOOP=0 to disable)',
249
+ disabled: 'Shortfall-disposition loop tick: disabled (TELORA_SHORTFALL_DISPOSITION_LOOP=0)',
250
+ },
251
+ register(engine, config) {
252
+ engine.intervals.push(safeInterval(async () => {
253
+ try {
254
+ await runShortfallDispositionTick(config);
255
+ }
256
+ catch (err) {
257
+ log.warn('[shortfall-disposition] tick failed:', err.message);
258
+ }
259
+ }, 300_000, 'shortfall-disposition-loop', { skipIfRunning: true }));
209
260
  },
210
261
  },
211
262
  // 9. Artifact-health sensor sweep (30 minutes).
@@ -220,14 +271,14 @@ export const LOOP_REGISTRY = [
220
271
  try {
221
272
  const counts = await runSensorSweepTick(config);
222
273
  if (counts.snapshotsWritten > 0) {
223
- console.log(`[sensor-sweep] tick: productsScanned=${counts.productsScanned} ` +
274
+ log.info(`[sensor-sweep] tick: productsScanned=${counts.productsScanned} ` +
224
275
  `snapshotsWritten=${counts.snapshotsWritten} skippedUnchanged=${counts.skippedUnchanged}`);
225
276
  }
226
277
  }
227
278
  catch (err) {
228
- console.warn('[sensor-sweep] tick failed:', err.message);
279
+ log.warn('[sensor-sweep] tick failed:', err.message);
229
280
  }
230
- }, 1_800_000, 'sensor-sweep-loop'));
281
+ }, 1_800_000, 'sensor-sweep-loop', { skipIfRunning: true }));
231
282
  },
232
283
  },
233
284
  // 9b. CI-result sensor (5 minutes). Reads the integration tip's git-native CI
@@ -244,14 +295,14 @@ export const LOOP_REGISTRY = [
244
295
  try {
245
296
  const counts = await runCiSensorTick(config);
246
297
  if (counts.escalationsFiled > 0 || counts.escalationsResolved > 0) {
247
- console.log(`[ci-sensor] tick: productsChecked=${counts.productsChecked} ` +
298
+ log.info(`[ci-sensor] tick: productsChecked=${counts.productsChecked} ` +
248
299
  `filed=${counts.escalationsFiled} resolved=${counts.escalationsResolved}`);
249
300
  }
250
301
  }
251
302
  catch (err) {
252
- console.warn('[ci-sensor] tick failed:', err.message);
303
+ log.warn('[ci-sensor] tick failed:', err.message);
253
304
  }
254
- }, 300_000, 'ci-sensor-loop'));
305
+ }, 300_000, 'ci-sensor-loop', { skipIfRunning: true }));
255
306
  },
256
307
  },
257
308
  // 10. Security scan loop (per-product cron cadence inside) + on-demand
@@ -266,7 +317,7 @@ export const LOOP_REGISTRY = [
266
317
  register(engine, config) {
267
318
  const intervalHours = loadEnvConfig().TELORA_SECURITY_SCAN_INTERVAL_HOURS;
268
319
  const intervalMs = Math.round(intervalHours * 3_600_000);
269
- console.log(`Security scan loop tick: enabled, every ${intervalHours}h ` +
320
+ log.info(`Security scan loop tick: enabled, every ${intervalHours}h ` +
270
321
  '(set TELORA_SECURITY_SCAN_LOOP=0 to disable, ' +
271
322
  'TELORA_SECURITY_SCAN_INTERVAL_HOURS=<hours> to retune) ' +
272
323
  '-- priming on startup so cron is honored across daemon restarts');
@@ -282,9 +333,9 @@ export const LOOP_REGISTRY = [
282
333
  await runSecurityScanTick(securityScanDeps);
283
334
  }
284
335
  catch (err) {
285
- console.warn('[security-scan-loop] tick failed:', err.message);
336
+ log.warn('[security-scan-loop] tick failed:', err.message);
286
337
  }
287
- }, intervalMs, 'security-scan-loop', { immediate: true }));
338
+ }, intervalMs, 'security-scan-loop', { immediate: true, skipIfRunning: true }));
288
339
  // On-demand requests poll (30 seconds). Drains
289
340
  // security_scan_configs.manual_run_requested_at signals emitted by
290
341
  // the "Run scan now" button so the user sees the scan start within
@@ -296,9 +347,9 @@ export const LOOP_REGISTRY = [
296
347
  await runSecurityScanTick(securityScanDeps, { manualOnly: true });
297
348
  }
298
349
  catch (err) {
299
- console.warn('[security-scan-requests] tick failed:', err.message);
350
+ log.warn('[security-scan-requests] tick failed:', err.message);
300
351
  }
301
- }, 30_000, 'security-scan-requests'));
352
+ }, 30_000, 'security-scan-requests', { skipIfRunning: true }));
302
353
  },
303
354
  },
304
355
  // 11. Config self-heal: prune products deleted from the backend (60s).
@@ -314,14 +365,14 @@ export const LOOP_REGISTRY = [
314
365
  try {
315
366
  const result = await reconcileDaemonProducts(config, reconcileDeps);
316
367
  if (result.pruned.length > 0) {
317
- console.log(`[config-reconcile] tick: checked=${result.checked} pruned=${result.pruned.length} ` +
368
+ log.info(`[config-reconcile] tick: checked=${result.checked} pruned=${result.pruned.length} ` +
318
369
  `(${result.pruned.join(', ')}) kept=${result.kept}`);
319
370
  }
320
371
  }
321
372
  catch (err) {
322
- console.warn('[config-reconcile] tick failed:', err.message);
373
+ log.warn('[config-reconcile] tick failed:', err.message);
323
374
  }
324
- }, 60_000, 'config-reconcile'));
375
+ }, 60_000, 'config-reconcile', { skipIfRunning: true }));
325
376
  },
326
377
  },
327
378
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"focus-loop-registry.js","sourceRoot":"","sources":["../src/focus-loop-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"focus-loop-registry.js","sourceRoot":"","sources":["../src/focus-loop-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"focus-merge.d.ts","sourceRoot":"","sources":["../src/focus-merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEd,6BAA6B,EAC9B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAA0B,cAAc,EAA8B,MAAM,eAAe,CAAC;AAInG,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAI/B,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEpE;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,6BAA6B,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACrE,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3C,8BAA8B,CAAC,EAAE,OAAO,8BAA8B,CAAC;CACxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE;IACN,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,EACD,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAkE/B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3C,8BAA8B,CAAC,EAAE,OAAO,8BAA8B,CAAC;IACvE,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;CACxC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,mBAAmB,EAC3B,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Df;AAiCD;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiHf;AAUD;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,cAAc,EACzB,aAAa,EAAE,MAAM,EAAE,EACvB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,MAA6C,GACvD,OAAO,CAAC,6BAA6B,CAAC,CA4DxC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,CAAC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAqL1D"}
1
+ {"version":3,"file":"focus-merge.d.ts","sourceRoot":"","sources":["../src/focus-merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEd,6BAA6B,EAC9B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAA0B,cAAc,EAA8B,MAAM,eAAe,CAAC;AAInG,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAI/B,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAMpE;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,6BAA6B,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACrE,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3C,8BAA8B,CAAC,EAAE,OAAO,8BAA8B,CAAC;CACxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE;IACN,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,EACD,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAkE/B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3C,8BAA8B,CAAC,EAAE,OAAO,8BAA8B,CAAC;IACvE,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;CACxC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,mBAAmB,EAC3B,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Df;AAiCD;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiHf;AAUD;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,cAAc,EACzB,aAAa,EAAE,MAAM,EAAE,EACvB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,MAA6C,GACvD,OAAO,CAAC,6BAA6B,CAAC,CA4DxC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,CAAC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAyL1D"}
@@ -15,6 +15,8 @@ import { withRetry, sendMessage, ESCALATION_REASONS, ESCALATION_DISPOSITIONS } f
15
15
  import { spawnResolutionAgent } from './spawner/index.js';
16
16
  import { getFocusWorktree } from './focus-worktree-state.js';
17
17
  import { worktreeHasUncommittedChanges } from './worktree/index.js';
18
+ import { createLogger } from './log.js';
19
+ const log = createLogger({ module: 'focus-merge' });
18
20
  /**
19
21
  * Refuse a focus-branch merge when the worktree still has uncommitted changes.
20
22
  *
@@ -37,7 +39,7 @@ export async function refuseMergeIfWorktreeDirty(params, deps = {}) {
37
39
  if (!worktreePath || !hasUncommitted(worktreePath)) {
38
40
  return { refused: false };
39
41
  }
40
- console.warn(`[focus-merge] REFUSING merge of "${deliveryName}" (${branchName} -> ${integrationBranch}): ` +
42
+ log.warn(`[focus-merge] REFUSING merge of "${deliveryName}" (${branchName} -> ${integrationBranch}): ` +
41
43
  `worktree ${worktreePath} has uncommitted changes.`);
42
44
  // Durable, focus-grain dedup: at most one open worktree-dirty escalation per
43
45
  // FOCUS, collapsed across the sibling classes (advance_blocked /
@@ -51,7 +53,7 @@ export async function refuseMergeIfWorktreeDirty(params, deps = {}) {
51
53
  alreadyOpen = await hasOpenEsc(focusId);
52
54
  }
53
55
  catch (err) {
54
- console.warn(`[focus-merge] Open worktree-dirty escalation lookup failed for "${deliveryName}", proceeding to file: ${err.message}`);
56
+ log.warn(`[focus-merge] Open worktree-dirty escalation lookup failed for "${deliveryName}", proceeding to file: ${err.message}`);
55
57
  }
56
58
  if (alreadyOpen) {
57
59
  return { refused: true };
@@ -76,10 +78,10 @@ export async function refuseMergeIfWorktreeDirty(params, deps = {}) {
76
78
  whatWasTried: `Daemon was about to merge ${branchName} into ${integrationBranch} but \`git status --porcelain\` reported uncommitted changes in ${worktreePath}.`,
77
79
  helpNeeded: `Inspect ${worktreePath}; commit or discard the uncommitted changes (for a read-only audit, discard them), then the merge can be retried.`,
78
80
  }), { maxAttempts: 3, label: `escalation-dirty-worktree-merge-${deliveryId}` });
79
- console.log(`[focus-merge] Filed dirty-worktree merge-refusal escalation for "${deliveryName}"`);
81
+ log.info(`Filed dirty-worktree merge-refusal escalation for "${deliveryName}"`);
80
82
  }
81
83
  catch (err) {
82
- console.error(`[focus-merge] Failed to file dirty-worktree merge-refusal escalation for "${deliveryName}": ${err.message}`);
84
+ log.error(`[focus-merge] Failed to file dirty-worktree merge-refusal escalation for "${deliveryName}": ${err.message}`);
83
85
  }
84
86
  return { refused: true };
85
87
  }
@@ -93,7 +95,7 @@ export async function reportMergeConflictState(deliveryId, branchName) {
93
95
  await reportGitState(deliveryId, 'merge_conflict', branchName);
94
96
  }
95
97
  catch (err) {
96
- console.warn(`[focus-merge] reportGitState merge_conflict failed for ${deliveryId}:`, err.message);
98
+ log.warn(`[focus-merge] reportGitState merge_conflict failed for ${deliveryId}:`, err.message);
97
99
  }
98
100
  }
99
101
  /**
@@ -119,7 +121,7 @@ export async function escalateMergeConflict(params, deps = {}) {
119
121
  await reportState(deliveryId, 'merge_conflict', branchName);
120
122
  }
121
123
  catch (err) {
122
- console.warn(`[focus-merge] reportGitState merge_conflict failed for ${deliveryId}:`, err.message);
124
+ log.warn(`[focus-merge] reportGitState merge_conflict failed for ${deliveryId}:`, err.message);
123
125
  }
124
126
  // Durable, focus-grain dedup across the sibling classes. Fail open: if the
125
127
  // lookup errors we proceed to file rather than swallow a genuine first
@@ -129,10 +131,10 @@ export async function escalateMergeConflict(params, deps = {}) {
129
131
  alreadyOpen = await hasOpenEsc(focusId);
130
132
  }
131
133
  catch (err) {
132
- console.warn(`[focus-merge] Open worktree-dirty escalation lookup failed for "${deliveryName}", proceeding to file: ${err.message}`);
134
+ log.warn(`[focus-merge] Open worktree-dirty escalation lookup failed for "${deliveryName}", proceeding to file: ${err.message}`);
133
135
  }
134
136
  if (alreadyOpen) {
135
- console.log(`[focus-merge] Worktree-dirty escalation already open for focus ${focusId}, skipping duplicate merge-conflict row`);
137
+ log.info(`Worktree-dirty escalation already open for focus ${focusId}, skipping duplicate merge-conflict row`);
136
138
  return;
137
139
  }
138
140
  try {
@@ -153,10 +155,10 @@ export async function escalateMergeConflict(params, deps = {}) {
153
155
  whatWasTried: `Attempted automatic merge of ${branchName} into ${integrationBranch}.`,
154
156
  helpNeeded: `Resolve the merge conflicts between ${branchName} and ${integrationBranch}, then mark this escalation as resolved.`,
155
157
  }), { maxAttempts: 3, label: `escalation-focus-merge-conflict-${deliveryId}` });
156
- console.log(`[focus-merge] Created merge conflict escalation for delivery "${deliveryName}"`);
158
+ log.info(`Created merge conflict escalation for delivery "${deliveryName}"`);
157
159
  }
158
160
  catch (err) {
159
- console.error(`[focus-merge] Failed to create merge conflict escalation for "${deliveryName}": ${err.message}`);
161
+ log.error(`[focus-merge] Failed to create merge conflict escalation for "${deliveryName}": ${err.message}`);
160
162
  }
161
163
  }
162
164
  /**
@@ -173,10 +175,10 @@ function resolveMergeConflictEscalations(deliveries) {
173
175
  resolveOpenWorktreeDirtyEscalations(focusId, [MERGE_CONFLICT_ESCALATION_KIND])
174
176
  .then((n) => {
175
177
  if (n > 0) {
176
- console.log(`[focus-merge] Merge resolved for focus ${focusId}; auto-resolved ${n} merge-conflict escalation(s).`);
178
+ log.info(`[focus-merge] Merge resolved for focus ${focusId}; auto-resolved ${n} merge-conflict escalation(s).`);
177
179
  }
178
180
  })
179
- .catch((err) => console.warn(`[focus-merge] Auto-resolve of merge-conflict escalation failed for focus ${focusId}: ${err.message}`));
181
+ .catch((err) => log.warn(`[focus-merge] Auto-resolve of merge-conflict escalation failed for focus ${focusId}: ${err.message}`));
180
182
  }
181
183
  }
182
184
  /**
@@ -196,7 +198,7 @@ export async function checkResolvedMergeConflicts(config) {
196
198
  conflictDeliveries = await getMergeConflictDeliveries(config.organizationId, config.productId);
197
199
  }
198
200
  catch (err) {
199
- console.warn(`[focus-merge] Failed to fetch merge conflict deliveries:`, err.message);
201
+ log.warn(`[focus-merge] Failed to fetch merge conflict deliveries:`, err.message);
200
202
  return;
201
203
  }
202
204
  if (conflictDeliveries.length === 0)
@@ -212,7 +214,7 @@ export async function checkResolvedMergeConflicts(config) {
212
214
  }
213
215
  for (const [branchName, deliveries] of byBranch) {
214
216
  const representative = deliveries[0];
215
- console.log(`[focus-merge] Retrying merge for branch ${branchName} ` +
217
+ log.info(`[focus-merge] Retrying merge for branch ${branchName} ` +
216
218
  `(${deliveries.length} delivery/ies in merge_conflict state)`);
217
219
  const mergeResult = await mergeToIntegration({
218
220
  config,
@@ -221,23 +223,23 @@ export async function checkResolvedMergeConflicts(config) {
221
223
  deliveryId: representative.delivery_id,
222
224
  });
223
225
  if (mergeResult.success) {
224
- console.log(`[focus-merge] Merge retry succeeded for branch ${branchName}`);
226
+ log.info(`[focus-merge] Merge retry succeeded for branch ${branchName}`);
225
227
  // Update all deliveries in this branch group. Dedup is durable now (an
226
228
  // open escalation suppresses re-filing); now that the merge succeeded we
227
229
  // also auto-resolve the open merge_conflict escalation(s) for the focus so
228
230
  // a resolved-in-fact conflict stops sitting in the human inbox.
229
231
  for (const d of deliveries) {
230
- reportGitState(d.delivery_id, 'merged_to_integration').catch((err) => console.warn(`[focus-merge] reportGitState merged_to_integration failed for ${d.delivery_id}:`, err.message));
232
+ reportGitState(d.delivery_id, 'merged_to_integration').catch((err) => log.warn(`[focus-merge] reportGitState merged_to_integration failed for ${d.delivery_id}:`, err.message));
231
233
  }
232
234
  resolveMergeConflictEscalations(deliveries);
233
235
  }
234
236
  else {
235
- console.log(`[focus-merge] Merge retry still failing for branch ${branchName}: ${mergeResult.error ?? 'unknown'}`);
237
+ log.info(`[focus-merge] Merge retry still failing for branch ${branchName}: ${mergeResult.error ?? 'unknown'}`);
236
238
  // Attempt fallback resolution agent if a worktree exists for this focus
237
239
  if (representative.focus_id) {
238
240
  const worktreeInfo = getFocusWorktree(representative.focus_id);
239
241
  if (worktreeInfo) {
240
- console.log(`[focus-merge] Spawning fallback resolution agent for branch ${branchName}`);
242
+ log.info(`[focus-merge] Spawning fallback resolution agent for branch ${branchName}`);
241
243
  // Merge integration back into the focus worktree to surface conflicts
242
244
  const mergeBackResult = await mergeBackFromIntegration({
243
245
  worktreePath: worktreeInfo.worktreePath,
@@ -263,9 +265,9 @@ export async function checkResolvedMergeConflicts(config) {
263
265
  deliveryId: representative.delivery_id,
264
266
  });
265
267
  if (retryResult.success) {
266
- console.log(`[focus-merge] Merge succeeded after fallback resolution for branch ${branchName}`);
268
+ log.info(`Merge succeeded after fallback resolution for branch ${branchName}`);
267
269
  for (const d of deliveries) {
268
- reportGitState(d.delivery_id, 'merged_to_integration').catch((err) => console.warn(`[focus-merge] reportGitState failed for ${d.delivery_id}:`, err.message));
270
+ reportGitState(d.delivery_id, 'merged_to_integration').catch((err) => log.warn(`reportGitState failed for ${d.delivery_id}:`, err.message));
269
271
  }
270
272
  resolveMergeConflictEscalations(deliveries);
271
273
  }
@@ -312,7 +314,7 @@ export async function requestTeamLeadResolution(teamState, conflictFiles, branch
312
314
  `5. If typecheck or the targeted tests fail, fix the issues, commit, and re-run\n\n` +
313
315
  `Do NOT run git merge --abort. Your goal is to produce a clean merge commit that passes typecheck and the targeted tests.`;
314
316
  sendMessage(leadStdin, message);
315
- console.log(`[focus-merge] Sent merge conflict resolution request to team lead for "${focusName}"`);
317
+ log.info(`Sent merge conflict resolution request to team lead for "${focusName}"`);
316
318
  // Poll git state to detect resolution
317
319
  const deadline = Date.now() + timeoutMs;
318
320
  const preResolutionHead = runGitSync(['rev-parse', 'HEAD'], worktreePath).output;
@@ -327,13 +329,13 @@ export async function requestTeamLeadResolution(teamState, conflictFiles, branch
327
329
  // No unmerged files -- check if HEAD advanced (merge commit created)
328
330
  const currentHead = runGitSync(['rev-parse', 'HEAD'], worktreePath).output;
329
331
  if (currentHead !== preResolutionHead) {
330
- console.log(`[focus-merge] Team lead resolved merge conflicts for "${focusName}"`);
332
+ log.info(`Team lead resolved merge conflicts for "${focusName}"`);
331
333
  return { resolved: true };
332
334
  }
333
335
  }
334
336
  }
335
337
  // Timeout expired
336
- console.warn(`[focus-merge] Team lead did not resolve merge conflicts within ${timeoutMs / 1000}s for "${focusName}"`);
338
+ log.warn(`[focus-merge] Team lead did not resolve merge conflicts within ${timeoutMs / 1000}s for "${focusName}"`);
337
339
  return { resolved: false, reason: `Resolution timeout (${timeoutMs / 1000}s)` };
338
340
  }
339
341
  finally {
@@ -356,6 +358,10 @@ export async function requestTeamLeadResolution(teamState, conflictFiles, branch
356
358
  * `shouldAttemptMerge`, not here.
357
359
  */
358
360
  export async function mergeFocusBranch(config, teamState, sessionId, branchName, workedDeliveryIds) {
361
+ log.info(`Merging focus branch ${branchName} for "${teamState.focusName}"`, {
362
+ focusId: teamState.focusId,
363
+ sessionId,
364
+ });
359
365
  // Pick a representative delivery for merge operations (workflow lookup,
360
366
  // escalation references, mergeDeliveryBranch). Prefer a worked delivery;
361
367
  // fall back to any known delivery on the focus. Only return early if the
@@ -389,7 +395,7 @@ export async function mergeFocusBranch(config, teamState, sessionId, branchName,
389
395
  workflow = await fetchEffectiveWorkflow(representativeDeliveryId);
390
396
  }
391
397
  catch (err) {
392
- console.warn(`[focus-executor] Failed to fetch workflow for merge, using fallback:`, err.message);
398
+ log.warn(`[focus-executor] Failed to fetch workflow for merge, using fallback:`, err.message);
393
399
  workflow = { id: 'fallback', stages: [] };
394
400
  }
395
401
  // ── Merge-back: sync integration into focus branch before merging out ──
@@ -402,14 +408,14 @@ export async function mergeFocusBranch(config, teamState, sessionId, branchName,
402
408
  });
403
409
  if (mergeBackResult.status === 'conflict') {
404
410
  const conflictFiles = mergeBackResult.conflictFiles ?? [];
405
- console.log(`[focus-merge] Merge-back produced conflicts for "${teamState.focusName}": ` +
411
+ log.info(`[focus-merge] Merge-back produced conflicts for "${teamState.focusName}": ` +
406
412
  `${conflictFiles.join(', ') || 'unknown files'}`);
407
413
  // If team lead is alive, delegate resolution to them
408
414
  if (teamState.leadStdin && teamState.phase === 'executing') {
409
415
  const resolution = await requestTeamLeadResolution(teamState, conflictFiles, branchName, config.integrationBranch);
410
416
  if (resolution.resolved) {
411
417
  // Agent committed the merge resolution, proceed to integration merge
412
- console.log(`[focus-merge] Conflict resolved by team lead for "${teamState.focusName}", proceeding`);
418
+ log.info(`Conflict resolved by team lead for "${teamState.focusName}", proceeding`);
413
419
  }
414
420
  else {
415
421
  // Team lead could not resolve -- escalate
@@ -428,11 +434,11 @@ export async function mergeFocusBranch(config, teamState, sessionId, branchName,
428
434
  }
429
435
  else {
430
436
  // No active team lead -- spawn a short-lived resolution agent
431
- console.log(`[focus-merge] No active team lead for "${teamState.focusName}", spawning fallback resolution agent`);
437
+ log.info(`No active team lead for "${teamState.focusName}", spawning fallback resolution agent`);
432
438
  // Report resolving_conflict state for all unmerged deliveries
433
439
  for (const deliveryId of teamState.knownDeliveryIds) {
434
440
  if (!teamState.mergedDeliveryIds.has(deliveryId)) {
435
- reportGitState(deliveryId, 'resolving_conflict').catch(err => console.warn(`[focus-merge] reportGitState resolving_conflict failed for ${deliveryId}:`, err.message));
441
+ reportGitState(deliveryId, 'resolving_conflict').catch(err => log.warn(`reportGitState resolving_conflict failed for ${deliveryId}:`, err.message));
436
442
  }
437
443
  }
438
444
  const fallbackResult = await spawnResolutionAgent({
@@ -446,7 +452,7 @@ export async function mergeFocusBranch(config, teamState, sessionId, branchName,
446
452
  focusId: teamState.focusId,
447
453
  });
448
454
  if (fallbackResult.success) {
449
- console.log(`[focus-merge] Fallback resolution agent resolved conflicts for "${teamState.focusName}", proceeding`);
455
+ log.info(`Fallback resolution agent resolved conflicts for "${teamState.focusName}", proceeding`);
450
456
  }
451
457
  else {
452
458
  await escalateMergeConflict({
@@ -464,11 +470,11 @@ export async function mergeFocusBranch(config, teamState, sessionId, branchName,
464
470
  }
465
471
  }
466
472
  if (mergeBackResult.status === 'error') {
467
- console.error(`[focus-merge] Merge-back error for "${teamState.focusName}": ${mergeBackResult.message}`);
473
+ log.error(`[focus-merge] Merge-back error for "${teamState.focusName}": ${mergeBackResult.message}`);
468
474
  return { mergeSucceeded: false, exitReason: mergeBackResult.message };
469
475
  }
470
476
  // status === 'clean' -- proceed to merge to integration
471
- console.log(`[focus-merge] Merge-back clean for "${teamState.focusName}", proceeding to integration merge`);
477
+ log.info(`Merge-back clean for "${teamState.focusName}", proceeding to integration merge`);
472
478
  }
473
479
  const mergeOutcome = await mergeDeliveryBranch({
474
480
  config,
@@ -486,11 +492,11 @@ export async function mergeFocusBranch(config, teamState, sessionId, branchName,
486
492
  if (mergeOutcome.mergeSucceeded) {
487
493
  for (const deliveryId of deliveryIdsForGitState) {
488
494
  if (!teamState.mergedDeliveryIds.has(deliveryId)) {
489
- reportGitState(deliveryId, 'merged_to_integration').catch(err => console.warn(`[focus-executor] reportGitState merged_to_integration failed for ${deliveryId}:`, err.message));
495
+ reportGitState(deliveryId, 'merged_to_integration').catch(err => log.warn(`[focus-executor] reportGitState merged_to_integration failed for ${deliveryId}:`, err.message));
490
496
  // Propagate the merge commit SHA to all deliveries so the git state
491
497
  // detector can track their containment in main/remote independently.
492
498
  if (mergeOutcome.commitSha) {
493
- updateDeliveryMergeCommitSha(deliveryId, mergeOutcome.commitSha).catch(err => console.warn(`[focus-merge] updateDeliveryMergeCommitSha failed for ${deliveryId}:`, err.message));
499
+ updateDeliveryMergeCommitSha(deliveryId, mergeOutcome.commitSha).catch(err => log.warn(`updateDeliveryMergeCommitSha failed for ${deliveryId}:`, err.message));
494
500
  }
495
501
  }
496
502
  }
@@ -499,7 +505,7 @@ export async function mergeFocusBranch(config, teamState, sessionId, branchName,
499
505
  // Report merge_conflict state for worked deliveries only
500
506
  for (const deliveryId of deliveryIdsForGitState) {
501
507
  if (!teamState.mergedDeliveryIds.has(deliveryId)) {
502
- reportMergeConflictState(deliveryId, branchName).catch(err => console.warn(`[focus-merge] reportMergeConflictState failed for ${deliveryId}:`, err.message));
508
+ reportMergeConflictState(deliveryId, branchName).catch(err => log.warn(`reportMergeConflictState failed for ${deliveryId}:`, err.message));
503
509
  }
504
510
  }
505
511
  }