@telora/daemon 0.22.42 → 0.22.57

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 (168) hide show
  1. package/build-info.json +4 -3
  2. package/dist/completion/detector.d.ts +37 -0
  3. package/dist/completion/detector.d.ts.map +1 -1
  4. package/dist/completion/detector.js +92 -5
  5. package/dist/completion/detector.js.map +1 -1
  6. package/dist/completion/event-phases.d.ts +6 -3
  7. package/dist/completion/event-phases.d.ts.map +1 -1
  8. package/dist/completion/event-phases.js +20 -8
  9. package/dist/completion/event-phases.js.map +1 -1
  10. package/dist/completion/event.d.ts +69 -9
  11. package/dist/completion/event.d.ts.map +1 -1
  12. package/dist/completion/event.js +108 -22
  13. package/dist/completion/event.js.map +1 -1
  14. package/dist/completion/index.js +1 -1
  15. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  16. package/dist/completion/review-exit-phase.js +5 -4
  17. package/dist/completion/review-exit-phase.js.map +1 -1
  18. package/dist/completion/state-cascade.d.ts +7 -1
  19. package/dist/completion/state-cascade.d.ts.map +1 -1
  20. package/dist/completion/state-cascade.js +70 -8
  21. package/dist/completion/state-cascade.js.map +1 -1
  22. package/dist/completion/stdin-turn-tracker.d.ts +7 -0
  23. package/dist/completion/stdin-turn-tracker.d.ts.map +1 -1
  24. package/dist/completion/stdin-turn-tracker.js +32 -4
  25. package/dist/completion/stdin-turn-tracker.js.map +1 -1
  26. package/dist/completion/supervision-firing-record.d.ts +64 -12
  27. package/dist/completion/supervision-firing-record.d.ts.map +1 -1
  28. package/dist/completion/supervision-firing-record.js +75 -15
  29. package/dist/completion/supervision-firing-record.js.map +1 -1
  30. package/dist/completion/team-lifecycle.d.ts.map +1 -1
  31. package/dist/completion/team-lifecycle.js +34 -18
  32. package/dist/completion/team-lifecycle.js.map +1 -1
  33. package/dist/completion/team-liveness-log.d.ts +21 -0
  34. package/dist/completion/team-liveness-log.d.ts.map +1 -1
  35. package/dist/completion/team-liveness-log.js +22 -0
  36. package/dist/completion/team-liveness-log.js.map +1 -1
  37. package/dist/delivery/delivery-reconciler.d.ts.map +1 -1
  38. package/dist/delivery/delivery-reconciler.js +4 -2
  39. package/dist/delivery/delivery-reconciler.js.map +1 -1
  40. package/dist/directive/directive-dispatch.d.ts.map +1 -1
  41. package/dist/directive/directive-dispatch.js +55 -52
  42. package/dist/directive/directive-dispatch.js.map +1 -1
  43. package/dist/directive/directive-executor.d.ts +0 -9
  44. package/dist/directive/directive-executor.d.ts.map +1 -1
  45. package/dist/directive/directive-executor.js +47 -32
  46. package/dist/directive/directive-executor.js.map +1 -1
  47. package/dist/directive/directive-verify-hold-gate.d.ts +13 -0
  48. package/dist/directive/directive-verify-hold-gate.d.ts.map +1 -1
  49. package/dist/directive/directive-verify-hold-gate.js +10 -0
  50. package/dist/directive/directive-verify-hold-gate.js.map +1 -1
  51. package/dist/directive/phase-sync.d.ts +11 -0
  52. package/dist/directive/phase-sync.d.ts.map +1 -1
  53. package/dist/directive/phase-sync.js +12 -0
  54. package/dist/directive/phase-sync.js.map +1 -1
  55. package/dist/focus/focus-executor.js +1 -1
  56. package/dist/focus/focus-team-state.d.ts.map +1 -1
  57. package/dist/focus/focus-team-state.js +1 -0
  58. package/dist/focus/focus-team-state.js.map +1 -1
  59. package/dist/focus/focus-worktree-state.d.ts.map +1 -1
  60. package/dist/focus/focus-worktree-state.js +2 -1
  61. package/dist/focus/focus-worktree-state.js.map +1 -1
  62. package/dist/focus/listener-spawn.d.ts +4 -2
  63. package/dist/focus/listener-spawn.d.ts.map +1 -1
  64. package/dist/focus/listener-spawn.js +24 -5
  65. package/dist/focus/listener-spawn.js.map +1 -1
  66. package/dist/focus/listener.d.ts.map +1 -1
  67. package/dist/focus/listener.js +33 -14
  68. package/dist/focus/listener.js.map +1 -1
  69. package/dist/focus/session-health.d.ts +25 -3
  70. package/dist/focus/session-health.d.ts.map +1 -1
  71. package/dist/focus/session-health.js +32 -1
  72. package/dist/focus/session-health.js.map +1 -1
  73. package/dist/focus/team-actionable-work.d.ts +19 -2
  74. package/dist/focus/team-actionable-work.d.ts.map +1 -1
  75. package/dist/focus/team-actionable-work.js +10 -3
  76. package/dist/focus/team-actionable-work.js.map +1 -1
  77. package/dist/merge/focus-merge.d.ts +12 -1
  78. package/dist/merge/focus-merge.d.ts.map +1 -1
  79. package/dist/merge/focus-merge.js +33 -2
  80. package/dist/merge/focus-merge.js.map +1 -1
  81. package/dist/nexus/return.d.ts +45 -0
  82. package/dist/nexus/return.d.ts.map +1 -1
  83. package/dist/nexus/return.js +159 -45
  84. package/dist/nexus/return.js.map +1 -1
  85. package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
  86. package/dist/prompt/focus-prompt-builder.js +1 -0
  87. package/dist/prompt/focus-prompt-builder.js.map +1 -1
  88. package/dist/prompt/prompt-contradictions.d.ts.map +1 -1
  89. package/dist/prompt/prompt-contradictions.js +2 -1
  90. package/dist/prompt/prompt-contradictions.js.map +1 -1
  91. package/dist/prompt/team-prompt-base.d.ts.map +1 -1
  92. package/dist/prompt/team-prompt-base.js +1 -0
  93. package/dist/prompt/team-prompt-base.js.map +1 -1
  94. package/dist/prompt-sections/execution-sections.d.ts +4 -9
  95. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  96. package/dist/prompt-sections/execution-sections.js +4 -74
  97. package/dist/prompt-sections/execution-sections.js.map +1 -1
  98. package/dist/prompt-sections/session-constraints-section.d.ts +21 -0
  99. package/dist/prompt-sections/session-constraints-section.d.ts.map +1 -0
  100. package/dist/prompt-sections/session-constraints-section.js +108 -0
  101. package/dist/prompt-sections/session-constraints-section.js.map +1 -0
  102. package/dist/queries/focuses.d.ts +13 -0
  103. package/dist/queries/focuses.d.ts.map +1 -1
  104. package/dist/queries/focuses.js +15 -0
  105. package/dist/queries/focuses.js.map +1 -1
  106. package/dist/queries/schemas.d.ts +12 -0
  107. package/dist/queries/schemas.d.ts.map +1 -1
  108. package/dist/queries/schemas.js +7 -0
  109. package/dist/queries/schemas.js.map +1 -1
  110. package/dist/queries/sessions.d.ts.map +1 -1
  111. package/dist/queries/sessions.js +1 -0
  112. package/dist/queries/sessions.js.map +1 -1
  113. package/dist/queries/verification.d.ts +9 -1
  114. package/dist/queries/verification.d.ts.map +1 -1
  115. package/dist/queries/verification.js +14 -2
  116. package/dist/queries/verification.js.map +1 -1
  117. package/dist/shell/heartbeat-metadata.d.ts +11 -0
  118. package/dist/shell/heartbeat-metadata.d.ts.map +1 -1
  119. package/dist/shell/heartbeat-metadata.js +3 -0
  120. package/dist/shell/heartbeat-metadata.js.map +1 -1
  121. package/dist/spawn/helpers.d.ts.map +1 -1
  122. package/dist/spawn/helpers.js +72 -52
  123. package/dist/spawn/helpers.js.map +1 -1
  124. package/dist/spawn/idle-work-stamp.d.ts +53 -0
  125. package/dist/spawn/idle-work-stamp.d.ts.map +1 -0
  126. package/dist/spawn/idle-work-stamp.js +47 -0
  127. package/dist/spawn/idle-work-stamp.js.map +1 -0
  128. package/dist/spawn/lead-continuation.d.ts +58 -0
  129. package/dist/spawn/lead-continuation.d.ts.map +1 -0
  130. package/dist/spawn/lead-continuation.js +127 -0
  131. package/dist/spawn/lead-continuation.js.map +1 -0
  132. package/dist/spawn/process-spawn.d.ts.map +1 -1
  133. package/dist/spawn/process-spawn.js +27 -13
  134. package/dist/spawn/process-spawn.js.map +1 -1
  135. package/dist/testing/fixtures/index.js +1 -1
  136. package/dist/types/focus.d.ts +54 -0
  137. package/dist/types/focus.d.ts.map +1 -1
  138. package/dist/types/index.js +1 -1
  139. package/dist/types/session.d.ts +11 -0
  140. package/dist/types/session.d.ts.map +1 -1
  141. package/dist/verify/stall-detector-config.d.ts +36 -0
  142. package/dist/verify/stall-detector-config.d.ts.map +1 -1
  143. package/dist/verify/stall-detector-config.js +44 -0
  144. package/dist/verify/stall-detector-config.js.map +1 -1
  145. package/dist/verify/stall-detectors.d.ts +40 -0
  146. package/dist/verify/stall-detectors.d.ts.map +1 -1
  147. package/dist/verify/stall-detectors.js +60 -6
  148. package/dist/verify/stall-detectors.js.map +1 -1
  149. package/dist/verify/stalled-team-backstop.d.ts +43 -0
  150. package/dist/verify/stalled-team-backstop.d.ts.map +1 -0
  151. package/dist/verify/stalled-team-backstop.js +131 -0
  152. package/dist/verify/stalled-team-backstop.js.map +1 -0
  153. package/dist/verify/verification-deps.d.ts +6 -1
  154. package/dist/verify/verification-deps.d.ts.map +1 -1
  155. package/dist/verify/verification-engine.d.ts.map +1 -1
  156. package/dist/verify/verification-engine.js +4 -3
  157. package/dist/verify/verification-engine.js.map +1 -1
  158. package/dist/verify/verification-evidence.d.ts +18 -0
  159. package/dist/verify/verification-evidence.d.ts.map +1 -1
  160. package/dist/verify/verification-evidence.js +53 -1
  161. package/dist/verify/verification-evidence.js.map +1 -1
  162. package/dist/verify/verify-reconciliation.d.ts.map +1 -1
  163. package/dist/verify/verify-reconciliation.js +2 -1
  164. package/dist/verify/verify-reconciliation.js.map +1 -1
  165. package/dist/worktree/verify-interlock.d.ts.map +1 -1
  166. package/dist/worktree/verify-interlock.js +2 -1
  167. package/dist/worktree/verify-interlock.js.map +1 -1
  168. package/package.json +3 -3
@@ -10,8 +10,44 @@ export declare function resolveIdleTeamStallHours(): number;
10
10
  export declare function resolveReviewHandoffCap(): number;
11
11
  /** Resolve the review-liveness window in minutes (env override or default 15). */
12
12
  export declare function resolveReviewLivenessWindowMinutes(): number;
13
+ /**
14
+ * Resolve the reviewer-SILENCE deadline in minutes (env override or default 30).
15
+ * The short, reviewer-relative deadline after which a review window whose team
16
+ * went live then fell silent is closed by the daemon -- distinct from the absolute
17
+ * TELORA_REVIEW_WINDOW_STALE_HOURS backstop measured from review_requested_at.
18
+ */
19
+ export declare function resolveReviewSilenceDeadlineMinutes(): number;
20
+ /**
21
+ * Resolve the session-health silence threshold in minutes (env override or default
22
+ * 30). The window an ORPHANED session (live process, no in-memory team) may go
23
+ * without a durable activity signal before the health check reaps it as abandoned.
24
+ */
25
+ export declare function resolveSessionSilenceThresholdMinutes(): number;
13
26
  /** Resolve the respawn-cycle max total duration in hours (env override or default 2). */
14
27
  export declare function resolveRespawnCycleMaxHours(): number;
15
28
  /** Resolve the respawn-cycle max cumulative teardown count (env override or default 12). */
16
29
  export declare function resolveRespawnCycleMaxCount(): number;
30
+ /**
31
+ * Resolve the stalled-team backstop window in minutes (env override or default 30).
32
+ * The poll-loop reaper of a live `executing` team that has emitted no agent event
33
+ * for this long -- independent of the completion event, which can be suppressed
34
+ * (delivery be308b50), never fire, or be latched. Deliberately BETWEEN the two
35
+ * existing windows: well above the 5-min liveness-badge park band (so a legit
36
+ * multi-minute lead park has time to resume and be recorded as a false positive
37
+ * before this acts) and well below the 3h blind idle-stall timer (so the
38
+ * 2026-09-07 wedge -- a healthy idle lead holding a focus + slot -- is reaped in
39
+ * minutes, not hours). Its own false-positive rate is measured as a supervision
40
+ * firing (SUPERVISION_MECHANISM.STALLED_TEAM_REAP).
41
+ */
42
+ export declare function resolveStalledTeamBackstopMinutes(): number;
43
+ /**
44
+ * Resolve the continuation budget: the max consecutive no-progress continuation
45
+ * turns a parked lead may absorb before the daemon stops re-engaging it
46
+ * (spawn/lead-continuation.ts) and falls through to the stalled-team reap. Env
47
+ * override or default 3. Canonical Zod + ENV_VAR_METADATA declaration lives in
48
+ * packages/daemon-core/src/env-config.ts; read raw here until daemon-core is
49
+ * republished + pinned (see rawPositiveNumber note above), then switch to
50
+ * loadEnvConfig() and drop the env-reads allowlist entry.
51
+ */
52
+ export declare function resolveContinuationBudget(): number;
17
53
  //# sourceMappingURL=stall-detector-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stall-detector-config.d.ts","sourceRoot":"","sources":["../../src/verify/stall-detector-config.ts"],"names":[],"mappings":"AAmCA,uEAAuE;AACvE,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wFAAwF;AACxF,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AASD,wEAAwE;AACxE,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,kFAAkF;AAClF,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,4FAA4F;AAC5F,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD"}
1
+ {"version":3,"file":"stall-detector-config.d.ts","sourceRoot":"","sources":["../../src/verify/stall-detector-config.ts"],"names":[],"mappings":"AAmCA,uEAAuE;AACvE,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wFAAwF;AACxF,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AASD,wEAAwE;AACxE,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,kFAAkF;AAClF,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,IAAI,MAAM,CAE9D;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,4FAA4F;AAC5F,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,IAAI,MAAM,CAE1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD"}
@@ -60,6 +60,23 @@ export function resolveReviewHandoffCap() {
60
60
  export function resolveReviewLivenessWindowMinutes() {
61
61
  return parsePositive(process.env.TELORA_REVIEW_LIVENESS_WINDOW_MINUTES, 15);
62
62
  }
63
+ /**
64
+ * Resolve the reviewer-SILENCE deadline in minutes (env override or default 30).
65
+ * The short, reviewer-relative deadline after which a review window whose team
66
+ * went live then fell silent is closed by the daemon -- distinct from the absolute
67
+ * TELORA_REVIEW_WINDOW_STALE_HOURS backstop measured from review_requested_at.
68
+ */
69
+ export function resolveReviewSilenceDeadlineMinutes() {
70
+ return parsePositive(process.env.TELORA_REVIEW_SILENCE_DEADLINE_MINUTES, 30);
71
+ }
72
+ /**
73
+ * Resolve the session-health silence threshold in minutes (env override or default
74
+ * 30). The window an ORPHANED session (live process, no in-memory team) may go
75
+ * without a durable activity signal before the health check reaps it as abandoned.
76
+ */
77
+ export function resolveSessionSilenceThresholdMinutes() {
78
+ return parsePositive(process.env.TELORA_SESSION_SILENCE_THRESHOLD_MINUTES, 30);
79
+ }
63
80
  /** Resolve the respawn-cycle max total duration in hours (env override or default 2). */
64
81
  export function resolveRespawnCycleMaxHours() {
65
82
  return parsePositive(process.env.TELORA_RESPAWN_CYCLE_MAX_HOURS, 2);
@@ -68,4 +85,31 @@ export function resolveRespawnCycleMaxHours() {
68
85
  export function resolveRespawnCycleMaxCount() {
69
86
  return parsePositive(process.env.TELORA_RESPAWN_CYCLE_MAX_COUNT, 12);
70
87
  }
88
+ /**
89
+ * Resolve the stalled-team backstop window in minutes (env override or default 30).
90
+ * The poll-loop reaper of a live `executing` team that has emitted no agent event
91
+ * for this long -- independent of the completion event, which can be suppressed
92
+ * (delivery be308b50), never fire, or be latched. Deliberately BETWEEN the two
93
+ * existing windows: well above the 5-min liveness-badge park band (so a legit
94
+ * multi-minute lead park has time to resume and be recorded as a false positive
95
+ * before this acts) and well below the 3h blind idle-stall timer (so the
96
+ * 2026-09-07 wedge -- a healthy idle lead holding a focus + slot -- is reaped in
97
+ * minutes, not hours). Its own false-positive rate is measured as a supervision
98
+ * firing (SUPERVISION_MECHANISM.STALLED_TEAM_REAP).
99
+ */
100
+ export function resolveStalledTeamBackstopMinutes() {
101
+ return parsePositive(process.env.TELORA_STALLED_TEAM_BACKSTOP_MINUTES, 30);
102
+ }
103
+ /**
104
+ * Resolve the continuation budget: the max consecutive no-progress continuation
105
+ * turns a parked lead may absorb before the daemon stops re-engaging it
106
+ * (spawn/lead-continuation.ts) and falls through to the stalled-team reap. Env
107
+ * override or default 3. Canonical Zod + ENV_VAR_METADATA declaration lives in
108
+ * packages/daemon-core/src/env-config.ts; read raw here until daemon-core is
109
+ * republished + pinned (see rawPositiveNumber note above), then switch to
110
+ * loadEnvConfig() and drop the env-reads allowlist entry.
111
+ */
112
+ export function resolveContinuationBudget() {
113
+ return parsePositive(process.env.TELORA_CONTINUATION_BUDGET, 3);
114
+ }
71
115
  //# sourceMappingURL=stall-detector-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stall-detector-config.js","sourceRoot":"","sources":["../../src/verify/stall-detector-config.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oFAAoF;AACpF,gBAAgB;AAEhB;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,SAAS,aAAa,CAAC,GAAuB,EAAE,QAAgB;IAC9D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,EAAE,CAAC,kCAAkC,CAAC;AAC5D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,6BAA6B;IAC3C,OAAO,aAAa,EAAE,CAAC,gCAAgC,CAAC;AAC1D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB;IACnC,OAAO,aAAa,EAAE,CAAC,uBAAuB,CAAC;AACjD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,yBAAyB;IACvC,OAAO,aAAa,EAAE,CAAC,4BAA4B,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,2BAA2B;AAE3B,wEAAwE;AACxE,MAAM,UAAU,uBAAuB;IACrC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kCAAkC;IAChD,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,2BAA2B;IACzC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,2BAA2B;IACzC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"stall-detector-config.js","sourceRoot":"","sources":["../../src/verify/stall-detector-config.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oFAAoF;AACpF,gBAAgB;AAEhB;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,SAAS,aAAa,CAAC,GAAuB,EAAE,QAAgB;IAC9D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,EAAE,CAAC,kCAAkC,CAAC;AAC5D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,6BAA6B;IAC3C,OAAO,aAAa,EAAE,CAAC,gCAAgC,CAAC;AAC1D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB;IACnC,OAAO,aAAa,EAAE,CAAC,uBAAuB,CAAC;AACjD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,yBAAyB;IACvC,OAAO,aAAa,EAAE,CAAC,4BAA4B,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,2BAA2B;AAE3B,wEAAwE;AACxE,MAAM,UAAU,uBAAuB;IACrC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kCAAkC;IAChD,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mCAAmC;IACjD,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qCAAqC;IACnD,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,2BAA2B;IACzC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,2BAA2B;IACzC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iCAAiC;IAC/C,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -132,6 +132,8 @@ export interface ReviewWindowDeps {
132
132
  thresholdHours?: number;
133
133
  /** Override the review-liveness window (minutes) for tests; defaults to env-config. */
134
134
  livenessWindowMinutes?: number;
135
+ /** Override the reviewer-silence deadline (minutes) for tests; defaults to env-config. */
136
+ silenceDeadlineMinutes?: number;
135
137
  }
136
138
  /** Focus IDs that currently have an active REVIEW team (live default). */
137
139
  export declare function activeReviewFocusIds(): Set<string>;
@@ -165,6 +167,44 @@ export declare function isReviewGenuinelyActive(hasReviewTeam: boolean, lastRevi
165
167
  * direct unit testing.
166
168
  */
167
169
  export declare function isReviewWindowStale(reviewRequestedAt: string | null, reviewGenuinelyActive: boolean, nowMs: number, thresholdMs: number): boolean;
170
+ /**
171
+ * Pure decision: has the reviewer-SILENCE deadline expired? True when a review
172
+ * window is open, a review team WENT LIVE (produced at least one agent event, so
173
+ * `lastReviewActivityMs` is non-null), and that clock has since gone quiet for
174
+ * longer than `silenceDeadlineMs`.
175
+ *
176
+ * This is the short, reviewer-relative deadline that closes the exact wedge this
177
+ * focus exists to fix: a review session writes its verdicts and vanishes without
178
+ * calling review_complete. isReviewWindowStale only clears after the ABSOLUTE
179
+ * window age (TELORA_REVIEW_WINDOW_STALE_HOURS, default 6h) measured from
180
+ * review_requested_at, so a reviewer that dies at minute 8 still parks the focus
181
+ * for hours; this predicate keys the deadline off reviewer silence instead.
182
+ *
183
+ * A NULL clock is deliberately NOT stale here: it means the review team never
184
+ * produced an event (never spawned / no activity yet). Closing that window would
185
+ * cut off a reviewer that has not started -- that case stays owned by the review
186
+ * hand-off cap and the absolute staleness backstop. Requiring a non-null clock is
187
+ * the "went live then went silent" vs "never started" distinction. Exported for
188
+ * direct unit testing.
189
+ */
190
+ export declare function isReviewWindowSilenceExpired(reviewRequestedAt: string | null, lastReviewActivityMs: number | null, nowMs: number, silenceDeadlineMs: number): boolean;
191
+ export interface ReviewWindowCloseDecision {
192
+ close: boolean;
193
+ /** Which deadline fired, for the log line. '' when close is false. */
194
+ reason: string;
195
+ }
196
+ /**
197
+ * Pure decision combining the two daemon-owned deadlines that close a review
198
+ * window: the reviewer-SILENCE deadline (short, reviewer-relative -- a review that
199
+ * WENT LIVE then fell quiet) and the ABSOLUTE window-age staleness backstop
200
+ * (TELORA_REVIEW_WINDOW_STALE_HOURS from review_requested_at). Either closes the
201
+ * window; the reason names which, so the log records WHY it closed. The silence
202
+ * deadline is checked first so a reviewer that died mid-pass closes on the short
203
+ * horizon rather than waiting out the 6h backstop. A genuinely-active review is
204
+ * never closed (the explicit guard defends against a misconfigured silence
205
+ * deadline shorter than the liveness window). Exported for unit testing.
206
+ */
207
+ export declare function decideReviewWindowClose(reviewRequestedAt: string | null, reviewGenuinelyActive: boolean, lastReviewActivityMs: number | null, nowMs: number, thresholdMs: number, silenceDeadlineMs: number): ReviewWindowCloseDecision;
168
208
  /**
169
209
  * Check ONE focus for a stale review window and, when stale, CLEAR it -- the
170
210
  * daemon owns the clearing act (clearReviewRequestedAt), so it does not file a
@@ -1 +1 @@
1
- {"version":3,"file":"stall-detectors.d.ts","sourceRoot":"","sources":["../../src/verify/stall-detectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stall-detectors.d.ts","sourceRoot":"","sources":["../../src/verify/stall-detectors.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import { getTeamLastActivityAt, getTeamErrorResultAt, getTeamLeadPid } from '../
13
13
  import { isProcessAlive } from '../spawn/liveness.js';
14
14
  import { clearReviewRequestedAt } from '../queries/focuses.js';
15
15
  import { isStatusTerminal } from '../workflow/stage-classifier.js';
16
- import { resolveVerifyFailedCap, resolveReviewWindowStaleHours, resolveIdleTeamStallHours, resolveReviewLivenessWindowMinutes, } from './stall-detector-config.js';
16
+ import { resolveVerifyFailedCap, resolveReviewWindowStaleHours, resolveIdleTeamStallHours, resolveReviewLivenessWindowMinutes, resolveReviewSilenceDeadlineMinutes, } from './stall-detector-config.js';
17
17
  import { createLogger } from '../shell/log.js';
18
18
  const log = createLogger({ module: 'stall-detectors' });
19
19
  /**
@@ -229,6 +229,55 @@ export function isReviewWindowStale(reviewRequestedAt, reviewGenuinelyActive, no
229
229
  return false;
230
230
  return nowMs - requestedMs > thresholdMs;
231
231
  }
232
+ /**
233
+ * Pure decision: has the reviewer-SILENCE deadline expired? True when a review
234
+ * window is open, a review team WENT LIVE (produced at least one agent event, so
235
+ * `lastReviewActivityMs` is non-null), and that clock has since gone quiet for
236
+ * longer than `silenceDeadlineMs`.
237
+ *
238
+ * This is the short, reviewer-relative deadline that closes the exact wedge this
239
+ * focus exists to fix: a review session writes its verdicts and vanishes without
240
+ * calling review_complete. isReviewWindowStale only clears after the ABSOLUTE
241
+ * window age (TELORA_REVIEW_WINDOW_STALE_HOURS, default 6h) measured from
242
+ * review_requested_at, so a reviewer that dies at minute 8 still parks the focus
243
+ * for hours; this predicate keys the deadline off reviewer silence instead.
244
+ *
245
+ * A NULL clock is deliberately NOT stale here: it means the review team never
246
+ * produced an event (never spawned / no activity yet). Closing that window would
247
+ * cut off a reviewer that has not started -- that case stays owned by the review
248
+ * hand-off cap and the absolute staleness backstop. Requiring a non-null clock is
249
+ * the "went live then went silent" vs "never started" distinction. Exported for
250
+ * direct unit testing.
251
+ */
252
+ export function isReviewWindowSilenceExpired(reviewRequestedAt, lastReviewActivityMs, nowMs, silenceDeadlineMs) {
253
+ if (!reviewRequestedAt)
254
+ return false;
255
+ if (lastReviewActivityMs === null)
256
+ return false;
257
+ return nowMs - lastReviewActivityMs > silenceDeadlineMs;
258
+ }
259
+ /**
260
+ * Pure decision combining the two daemon-owned deadlines that close a review
261
+ * window: the reviewer-SILENCE deadline (short, reviewer-relative -- a review that
262
+ * WENT LIVE then fell quiet) and the ABSOLUTE window-age staleness backstop
263
+ * (TELORA_REVIEW_WINDOW_STALE_HOURS from review_requested_at). Either closes the
264
+ * window; the reason names which, so the log records WHY it closed. The silence
265
+ * deadline is checked first so a reviewer that died mid-pass closes on the short
266
+ * horizon rather than waiting out the 6h backstop. A genuinely-active review is
267
+ * never closed (the explicit guard defends against a misconfigured silence
268
+ * deadline shorter than the liveness window). Exported for unit testing.
269
+ */
270
+ export function decideReviewWindowClose(reviewRequestedAt, reviewGenuinelyActive, lastReviewActivityMs, nowMs, thresholdMs, silenceDeadlineMs) {
271
+ if (!reviewGenuinelyActive &&
272
+ isReviewWindowSilenceExpired(reviewRequestedAt, lastReviewActivityMs, nowMs, silenceDeadlineMs)) {
273
+ const quietMin = Math.floor((nowMs - lastReviewActivityMs) / 60_000);
274
+ return { close: true, reason: `reviewer silent ~${quietMin}m past silence deadline` };
275
+ }
276
+ if (isReviewWindowStale(reviewRequestedAt, reviewGenuinelyActive, nowMs, thresholdMs)) {
277
+ return { close: true, reason: 'window age past absolute staleness threshold' };
278
+ }
279
+ return { close: false, reason: '' };
280
+ }
232
281
  /**
233
282
  * Check ONE focus for a stale review window and, when stale, CLEAR it -- the
234
283
  * daemon owns the clearing act (clearReviewRequestedAt), so it does not file a
@@ -249,6 +298,7 @@ export async function checkReviewWindowStaleForFocus(ctx, reviewRequestedAt, dep
249
298
  const thresholdMs = thresholdHours * 3_600_000;
250
299
  const nowMs = (deps.now ?? Date.now)();
251
300
  const livenessWindowMs = (deps.livenessWindowMinutes ?? resolveReviewLivenessWindowMinutes()) * 60_000;
301
+ const silenceDeadlineMs = (deps.silenceDeadlineMinutes ?? resolveReviewSilenceDeadlineMinutes()) * 60_000;
252
302
  // Liveness, not presence: a review suppresses the staleness escalation only
253
303
  // when its team is present AND genuinely progressing (fresh activity clock).
254
304
  // A respawn loop's idle-exiting teams are present but frozen, so they no longer
@@ -256,19 +306,23 @@ export async function checkReviewWindowStaleForFocus(ctx, reviewRequestedAt, dep
256
306
  const hasReviewTeam = deps.activeReviewFocusIds().has(ctx.focusId);
257
307
  const lastReviewActivityMs = deps.getReviewTeamLastActivityAt(ctx.focusId);
258
308
  const reviewGenuinelyActive = isReviewGenuinelyActive(hasReviewTeam, lastReviewActivityMs, nowMs, livenessWindowMs);
259
- if (!isReviewWindowStale(reviewRequestedAt, reviewGenuinelyActive, nowMs, thresholdMs)) {
309
+ // Two daemon-owned deadlines close the window: the short reviewer-SILENCE
310
+ // deadline (a review that went live then fell quiet -- the wedge where a
311
+ // reviewer writes verdicts and vanishes) and the ABSOLUTE window-age backstop.
312
+ const decision = decideReviewWindowClose(reviewRequestedAt, reviewGenuinelyActive, lastReviewActivityMs, nowMs, thresholdMs, silenceDeadlineMs);
313
+ if (!decision.close) {
260
314
  return;
261
315
  }
262
- // Daemon-owned clear: perform the act the escalation used to merely name. A
263
- // stale window blocks the focus at 'reviewing' (focus-phase.ts) forever; the
316
+ // Daemon-owned clear: perform the act the escalation used to merely name. An
317
+ // open window blocks the focus at 'reviewing' (focus-phase.ts) forever; the
264
318
  // daemon clears review_requested_at itself so winding_down is reachable, with
265
319
  // no operator act. The detection is exactly the clearing condition -- only the
266
320
  // act was previously withheld.
267
321
  const ageHours = Math.floor((nowMs - Date.parse(reviewRequestedAt)) / 3_600_000);
268
322
  try {
269
323
  await withRetry(() => deps.clearReviewWindow(ctx.focusId), { maxAttempts: 3, label: `clear-stale-review-window-${ctx.focusId}` });
270
- log.info(`[stall-detectors] Cleared stale review window for focus "${ctx.focusName}" ` +
271
- `(review_requested_at ~${ageHours}h old > ${thresholdHours}h, no active review) -- ` +
324
+ log.info(`[stall-detectors] Cleared review window for focus "${ctx.focusName}" ` +
325
+ `(${decision.reason}; review_requested_at ~${ageHours}h old) -- ` +
272
326
  `daemon-owned clear, no operator act required`);
273
327
  }
274
328
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"stall-detectors.js","sourceRoot":"","sources":["../../src/verify/stall-detectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stall-detectors.js","sourceRoot":"","sources":["../../src/verify/stall-detectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type FileEscalationIdempotentParams, type FileEscalationIdempotentResult } from '../queries/escalation-suppression.js';
2
+ import { type FocusStallContext } from './stall-detectors.js';
3
+ /**
4
+ * Dependencies for the stalled-team backstop, injectable for tests. Defaults
5
+ * read the per-team last-activity clock + recoverability gate, recover via the
6
+ * same terminateTeam mechanism the other detectors use (so the normal close
7
+ * path's wip-preserve runs and the governor slot is released), gate the acting
8
+ * reap on the observe-only liveness badge NOT being demoted, and file the
9
+ * team_failure escalation through the same cause-keyed idempotent gate.
10
+ */
11
+ export interface StalledTeamBackstopDeps {
12
+ getLastActivityAt: (focusId: string) => number | null;
13
+ isTeamRecoverable: (focusId: string) => boolean;
14
+ getLeadSessionId: (focusId: string) => string | null;
15
+ recoverTeam: (focusId: string) => boolean;
16
+ /**
17
+ * Whether the acting (destructive) reap is currently ALLOWED. Default:
18
+ * !isMechanismDemoted(LIVENESS_BADGE) -- the observe-only liveness badge's
19
+ * false-positive reading governs whether this reaper may kill (block-to-observe
20
+ * by a reading, the focus's own thesis). When false the firing is still
21
+ * recorded but no team is terminated -- the 3h blind idle timer remains.
22
+ */
23
+ isActingAllowed: () => boolean;
24
+ fileEscalation: (params: FileEscalationIdempotentParams) => Promise<FileEscalationIdempotentResult>;
25
+ /** Current epoch ms; injectable for tests. Defaults to Date.now. */
26
+ now?: () => number;
27
+ /** Override the backstop window (minutes) for tests; defaults to env-config. */
28
+ windowMinutes?: number;
29
+ }
30
+ /**
31
+ * Pure decision: has this team's activity clock frozen past the BACKSTOP window
32
+ * (shorter than the 3h blind idle timer)? False when no activity has been
33
+ * recorded yet (a team still initializing has not stalled). Exported for direct
34
+ * unit testing.
35
+ */
36
+ export declare function isStalledTeamBackstopEligible(lastActivityMs: number | null, nowMs: number, windowMs: number): boolean;
37
+ /**
38
+ * Check ONE focus's team for a stall and REAP it WITHOUT depending on the
39
+ * completion event. A genuinely working team is never reaped: its clock keeps
40
+ * advancing, so its idle age stays under the window.
41
+ */
42
+ export declare function checkStalledTeamBackstopForFocus(ctx: FocusStallContext, deps?: StalledTeamBackstopDeps): Promise<void>;
43
+ //# sourceMappingURL=stalled-team-backstop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stalled-team-backstop.d.ts","sourceRoot":"","sources":["../../src/verify/stalled-team-backstop.ts"],"names":[],"mappings":"AAkCA,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,sCAAsC,CAAC;AAW9C,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAKjF;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACtD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrD,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C;;;;;;OAMG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,cAAc,EAAE,CAAC,MAAM,EAAE,8BAA8B,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACpG,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAYD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAGT;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,iBAAiB,EACtB,IAAI,GAAE,uBAAwD,GAC7D,OAAO,CAAC,IAAI,CAAC,CAoFf"}
@@ -0,0 +1,131 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/verify/stalled-team-backstop-detector.test.ts
3
+ // PINNED-BY-END
4
+ /**
5
+ * Stalled-team backstop -- a completion-event-INDEPENDENT reap.
6
+ *
7
+ * Every mechanism that ends a stalled team from the completion handler runs only
8
+ * when the detector's `complete` event fires. On 2026-09-07 a suppressed
9
+ * `complete` (a leaked stdin-turn count) left a HEALTHY, idle lead holding a
10
+ * focus and a governor slot for 43 minutes -- no stall escalation, no no-progress
11
+ * cycle, no teardown -- until a human restarted the daemon. This backstop reads
12
+ * liveness DIRECTLY (the per-team last-activity clock) so it holds whether the
13
+ * completion event is suppressed, never fires, or is latched: it does not share
14
+ * that event as a precondition.
15
+ *
16
+ * It fires between the two existing windows -- above the 5-min liveness-badge park
17
+ * band (a legit park has resumed and been recorded FP by observeLivenessBadge
18
+ * before this acts) and below the 3h blind idle-stall timer -- records a
19
+ * STALLED_TEAM_REAP supervision firing (so its own true/false-positive rate is
20
+ * readable, like the mechanisms it backstops), reaps via terminateTeam (whose
21
+ * normal close path gives the same uncommitted-work preservation a
22
+ * completion-handler teardown does), and files ONE idempotent team_failure so the
23
+ * wedge is visible. Extracted from stall-detectors.ts to keep that file under the
24
+ * file-size floor.
25
+ *
26
+ * @module verify/stalled-team-backstop
27
+ */
28
+ import { ESCALATION_REASONS, ESCALATION_DISPOSITIONS, withRetry, } from '@telora/daemon-core';
29
+ import { fileEscalationIdempotent as defaultFileEscalationIdempotent, } from '../queries/escalation-suppression.js';
30
+ import { focusBlockageCauseKey } from '../queries/cause-key.js';
31
+ import { recordFiring, isMechanismDemoted, markLatestFiringUnacted, SUPERVISION_MECHANISM, } from '../completion/supervision-firing-record.js';
32
+ import { getActiveTeams, terminateTeam } from '../focus/focus-executor.js';
33
+ import { getTeamLastActivityAt } from '../focus/focus-team-state.js';
34
+ import { resolveStalledTeamBackstopMinutes } from './stall-detector-config.js';
35
+ import { isTeamRecoverable } from './stall-detectors.js';
36
+ import { createLogger } from '../shell/log.js';
37
+ const log = createLogger({ module: 'stall-detectors' });
38
+ const defaultStalledTeamBackstopDeps = {
39
+ getLastActivityAt: getTeamLastActivityAt,
40
+ isTeamRecoverable,
41
+ getLeadSessionId: (focusId) => getActiveTeams().get(focusId)?.leadSessionId ?? null,
42
+ recoverTeam: (focusId) => terminateTeam(focusId, 'teardown'),
43
+ isActingAllowed: () => !isMechanismDemoted(SUPERVISION_MECHANISM.LIVENESS_BADGE),
44
+ fileEscalation: defaultFileEscalationIdempotent,
45
+ now: () => Date.now(),
46
+ };
47
+ /**
48
+ * Pure decision: has this team's activity clock frozen past the BACKSTOP window
49
+ * (shorter than the 3h blind idle timer)? False when no activity has been
50
+ * recorded yet (a team still initializing has not stalled). Exported for direct
51
+ * unit testing.
52
+ */
53
+ export function isStalledTeamBackstopEligible(lastActivityMs, nowMs, windowMs) {
54
+ if (lastActivityMs === null)
55
+ return false;
56
+ return nowMs - lastActivityMs > windowMs;
57
+ }
58
+ /**
59
+ * Check ONE focus's team for a stall and REAP it WITHOUT depending on the
60
+ * completion event. A genuinely working team is never reaped: its clock keeps
61
+ * advancing, so its idle age stays under the window.
62
+ */
63
+ export async function checkStalledTeamBackstopForFocus(ctx, deps = defaultStalledTeamBackstopDeps) {
64
+ if (!deps.isTeamRecoverable(ctx.focusId))
65
+ return;
66
+ const windowMinutes = deps.windowMinutes ?? resolveStalledTeamBackstopMinutes();
67
+ const windowMs = windowMinutes * 60_000;
68
+ const nowMs = (deps.now ?? Date.now)();
69
+ const lastActivityMs = deps.getLastActivityAt(ctx.focusId);
70
+ if (!isStalledTeamBackstopEligible(lastActivityMs, nowMs, windowMs))
71
+ return;
72
+ const idleMinutes = Math.floor((nowMs - lastActivityMs) / 60_000);
73
+ // Record the firing whether or not we act -- the rate must be readable even
74
+ // when the mechanism is demoted to observe-only.
75
+ recordFiring({
76
+ mechanism: SUPERVISION_MECHANISM.STALLED_TEAM_REAP,
77
+ focusId: ctx.focusId,
78
+ predicted: `team wedged: executing but no agent event for ~${idleMinutes}m ` +
79
+ `(> ${windowMinutes}m backstop), completion event not fired`,
80
+ now: nowMs,
81
+ });
82
+ // Block-to-observe by a reading: act only while the observe-only liveness badge
83
+ // has NOT been shown false-positive-heavy. When demoted, record and defer to
84
+ // the blind idle-stall timer -- and mark the firing UNACTED so the settle sweep
85
+ // cannot true-positive it by silence (which would launder the demotion).
86
+ if (!deps.isActingAllowed()) {
87
+ markLatestFiringUnacted(SUPERVISION_MECHANISM.STALLED_TEAM_REAP, ctx.focusId);
88
+ log.info(`[stall-detectors] stalled-team backstop OBSERVING focus "${ctx.focusName}" ` +
89
+ `(idle ~${idleMinutes}m > ${windowMinutes}m) -- liveness signal demoted to ` +
90
+ `observe-only; deferring to the blind idle-stall timer.`);
91
+ return;
92
+ }
93
+ const recovered = deps.recoverTeam(ctx.focusId);
94
+ if (!recovered) {
95
+ log.warn(`[stall-detectors] stalled-team backstop: focus "${ctx.focusName}" is idle past ` +
96
+ `the backstop window but terminateTeam found no live team to recover (already torn down?).`);
97
+ return;
98
+ }
99
+ log.warn(`[stall-detectors] Reaped stalled team for focus "${ctx.focusName}" (no agent event ` +
100
+ `for ~${idleMinutes}m > ${windowMinutes}m backstop) WITHOUT a completion event: ` +
101
+ `terminated so wip-preserve, slot release, and delivery re-gating resume; filing a ` +
102
+ `team_failure so the wedge is visible.`);
103
+ // File ONE team_failure escalation (idempotent by cause key -- at most one open
104
+ // row per focus). agent_resolvable so it does not block respawn and rides into
105
+ // the next spawn; the agent-resolvable promotion path escalates it to the
106
+ // operator only if it survives unresolved.
107
+ const causeKey = focusBlockageCauseKey('team_failure', ctx.focusId, 'stalled_team_reap');
108
+ try {
109
+ await withRetry(() => deps.fileEscalation({
110
+ causeKey,
111
+ organizationId: ctx.organizationId,
112
+ sessionId: deps.getLeadSessionId(ctx.focusId) ?? '',
113
+ issueId: null,
114
+ reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
115
+ disposition: ESCALATION_DISPOSITIONS.AGENT_RESOLVABLE,
116
+ anchor: { focusId: ctx.focusId },
117
+ escalationKind: 'team_failure',
118
+ description: `Team for focus "${ctx.focusName}" produced no agent event for ~${idleMinutes} ` +
119
+ `minutes (> ${windowMinutes}m backstop) while still holding the focus and a ` +
120
+ `governor slot, with no completion event. The daemon reaped it directly from the ` +
121
+ `poll loop (reading liveness, not the completion event), preserving its ` +
122
+ `uncommitted work and releasing its slot. If the underlying cause recurs the ` +
123
+ `incoming team will hit it again.`,
124
+ }), { maxAttempts: 3, label: `file-stalled-team-reap-${ctx.focusId}` });
125
+ }
126
+ catch (err) {
127
+ log.warn(`[stall-detectors] stalled-team backstop: failed to file team_failure for ` +
128
+ `"${ctx.focusName}":`, err.message);
129
+ }
130
+ }
131
+ //# sourceMappingURL=stalled-team-backstop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stalled-team-backstop.js","sourceRoot":"","sources":["../../src/verify/stalled-team-backstop.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,12 @@ export interface DriftProposalCreatePayload {
44
44
  export interface VerificationDeps {
45
45
  getPendingVerifications: typeof getPendingVerifications;
46
46
  recordOutcome: (deliveryId: string, outcome: VerificationOutcome) => Promise<void>;
47
- verifyInjection: (injectionNodeId: string, restatements?: TargetRestatement[]) => Promise<void>;
47
+ /**
48
+ * Retire the injection + promote its FRT overlay. `evidence` (when supplied)
49
+ * is stamped onto the injection node before the flip so a verification-retired
50
+ * injection cites the files/tests it was verified on -- never evidence=null.
51
+ */
52
+ verifyInjection: (injectionNodeId: string, restatements?: TargetRestatement[], evidence?: string) => Promise<void>;
48
53
  /**
49
54
  * Reconcile the declared desired effect against the achieved outcome (authored
50
55
  * from the supplied EVIDENCE -- diff/tests/inspection, NOT the UDE problem text)
@@ -1 +1 @@
1
- {"version":3,"file":"verification-deps.d.ts","sourceRoot":"","sources":["../../src/verify/verification-deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verification-deps.d.ts","sourceRoot":"","sources":["../../src/verify/verification-deps.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"verification-engine.d.ts","sourceRoot":"","sources":["../../src/verify/verification-engine.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,KAAK,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,4BAA4B,CAAC;AAQpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAYtD,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,gCAAgC,EAChC,qBAAqB,EACrB,qBAAqB,EACrB,kCAAkC,EAClC,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AAenC,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC,CAKrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,gBAAgB,EACtB,CAAC,EAAE,mBAAmB,GACrB,OAAO,CAAC,cAAc,GAAG;IAAE,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAmB7D;AAMD;;;;GAIG;AACH,YAAY,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAc/D;;;;;;GAMG;AACH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,4BAA4B,CAAC;AAWpC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,0BAA0B,CAC9C,CAAC,EAAE,mBAAmB,EACtB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,cAAc,CAAC,CAiczB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC/B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAwFlG"}
1
+ {"version":3,"file":"verification-engine.d.ts","sourceRoot":"","sources":["../../src/verify/verification-engine.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,KAAK,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,4BAA4B,CAAC;AAQpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAYtD,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,gCAAgC,EAChC,qBAAqB,EACrB,qBAAqB,EACrB,kCAAkC,EAClC,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AAenC,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC,CAKrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,gBAAgB,EACtB,CAAC,EAAE,mBAAmB,GACrB,OAAO,CAAC,cAAc,GAAG;IAAE,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAmB7D;AAMD;;;;GAIG;AACH,YAAY,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAc/D;;;;;;GAMG;AACH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,4BAA4B,CAAC;AAYpC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,0BAA0B,CAC9C,CAAC,EAAE,mBAAmB,EACtB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,cAAc,CAAC,CAiczB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC/B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAwFlG"}
@@ -3,7 +3,8 @@
3
3
  // packages/daemon/src/verify/verification-default-on.test.ts,
4
4
  // packages/daemon/src/verify/verification-engine-real-paths.test.ts,
5
5
  // packages/daemon/src/verify/verification-engine.test.ts,
6
- // packages/daemon/src/verify/verification-tick-product-scoping.test.ts
6
+ // packages/daemon/src/verify/verification-tick-product-scoping.test.ts,
7
+ // packages/daemon/src/verify/verify-injection-evidence.test.ts
7
8
  // PINNED-BY-END
8
9
  export { runDeterministicStrategy } from './verification-deterministic.js';
9
10
  import { diagnoseEmptyDiffSource } from '../resolvers/index.js';
@@ -73,7 +74,7 @@ const STRATEGIES = {
73
74
  * resolving.
74
75
  */
75
76
  export { MERGED_BACK_GIT_STATES, recordedMergeShaForVerify, } from './verification-evidence.js';
76
- import { buildVerifyEvidence, describeMissingJudgeEvidence, assessRecordedCoverage, resolveDiffCwd, recordedMergeShaForVerify as recordedMergeShaForVerifyImpl, } from './verification-evidence.js';
77
+ import { buildVerifyEvidence, summarizeEvidenceForInjection, describeMissingJudgeEvidence, assessRecordedCoverage, resolveDiffCwd, recordedMergeShaForVerify as recordedMergeShaForVerifyImpl, } from './verification-evidence.js';
77
78
  /**
78
79
  * Run verification for a single delivery.
79
80
  *
@@ -397,7 +398,7 @@ export async function runVerificationForDelivery(v, deps) {
397
398
  else {
398
399
  let flipped = false;
399
400
  try {
400
- await deps.verifyInjection(v.injectionNodeId, restatements);
401
+ await deps.verifyInjection(v.injectionNodeId, restatements, summarizeEvidenceForInjection(evidence));
401
402
  flipped = true;
402
403
  }
403
404
  catch (err) {