@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.
- package/build-info.json +4 -3
- package/dist/completion/detector.d.ts +37 -0
- package/dist/completion/detector.d.ts.map +1 -1
- package/dist/completion/detector.js +92 -5
- package/dist/completion/detector.js.map +1 -1
- package/dist/completion/event-phases.d.ts +6 -3
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +20 -8
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts +69 -9
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +108 -22
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/index.js +1 -1
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +5 -4
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/state-cascade.d.ts +7 -1
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +70 -8
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/stdin-turn-tracker.d.ts +7 -0
- package/dist/completion/stdin-turn-tracker.d.ts.map +1 -1
- package/dist/completion/stdin-turn-tracker.js +32 -4
- package/dist/completion/stdin-turn-tracker.js.map +1 -1
- package/dist/completion/supervision-firing-record.d.ts +64 -12
- package/dist/completion/supervision-firing-record.d.ts.map +1 -1
- package/dist/completion/supervision-firing-record.js +75 -15
- package/dist/completion/supervision-firing-record.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +34 -18
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/completion/team-liveness-log.d.ts +21 -0
- package/dist/completion/team-liveness-log.d.ts.map +1 -1
- package/dist/completion/team-liveness-log.js +22 -0
- package/dist/completion/team-liveness-log.js.map +1 -1
- package/dist/delivery/delivery-reconciler.d.ts.map +1 -1
- package/dist/delivery/delivery-reconciler.js +4 -2
- package/dist/delivery/delivery-reconciler.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +55 -52
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-executor.d.ts +0 -9
- package/dist/directive/directive-executor.d.ts.map +1 -1
- package/dist/directive/directive-executor.js +47 -32
- package/dist/directive/directive-executor.js.map +1 -1
- package/dist/directive/directive-verify-hold-gate.d.ts +13 -0
- package/dist/directive/directive-verify-hold-gate.d.ts.map +1 -1
- package/dist/directive/directive-verify-hold-gate.js +10 -0
- package/dist/directive/directive-verify-hold-gate.js.map +1 -1
- package/dist/directive/phase-sync.d.ts +11 -0
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +12 -0
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/focus/focus-executor.js +1 -1
- package/dist/focus/focus-team-state.d.ts.map +1 -1
- package/dist/focus/focus-team-state.js +1 -0
- package/dist/focus/focus-team-state.js.map +1 -1
- package/dist/focus/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus/focus-worktree-state.js +2 -1
- package/dist/focus/focus-worktree-state.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts +4 -2
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +24 -5
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +33 -14
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/session-health.d.ts +25 -3
- package/dist/focus/session-health.d.ts.map +1 -1
- package/dist/focus/session-health.js +32 -1
- package/dist/focus/session-health.js.map +1 -1
- package/dist/focus/team-actionable-work.d.ts +19 -2
- package/dist/focus/team-actionable-work.d.ts.map +1 -1
- package/dist/focus/team-actionable-work.js +10 -3
- package/dist/focus/team-actionable-work.js.map +1 -1
- package/dist/merge/focus-merge.d.ts +12 -1
- package/dist/merge/focus-merge.d.ts.map +1 -1
- package/dist/merge/focus-merge.js +33 -2
- package/dist/merge/focus-merge.js.map +1 -1
- package/dist/nexus/return.d.ts +45 -0
- package/dist/nexus/return.d.ts.map +1 -1
- package/dist/nexus/return.js +159 -45
- package/dist/nexus/return.js.map +1 -1
- package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
- package/dist/prompt/focus-prompt-builder.js +1 -0
- package/dist/prompt/focus-prompt-builder.js.map +1 -1
- package/dist/prompt/prompt-contradictions.d.ts.map +1 -1
- package/dist/prompt/prompt-contradictions.js +2 -1
- package/dist/prompt/prompt-contradictions.js.map +1 -1
- package/dist/prompt/team-prompt-base.d.ts.map +1 -1
- package/dist/prompt/team-prompt-base.js +1 -0
- package/dist/prompt/team-prompt-base.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts +4 -9
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +4 -74
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/session-constraints-section.d.ts +21 -0
- package/dist/prompt-sections/session-constraints-section.d.ts.map +1 -0
- package/dist/prompt-sections/session-constraints-section.js +108 -0
- package/dist/prompt-sections/session-constraints-section.js.map +1 -0
- package/dist/queries/focuses.d.ts +13 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +15 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/schemas.d.ts +12 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +7 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/sessions.d.ts.map +1 -1
- package/dist/queries/sessions.js +1 -0
- package/dist/queries/sessions.js.map +1 -1
- package/dist/queries/verification.d.ts +9 -1
- package/dist/queries/verification.d.ts.map +1 -1
- package/dist/queries/verification.js +14 -2
- package/dist/queries/verification.js.map +1 -1
- package/dist/shell/heartbeat-metadata.d.ts +11 -0
- package/dist/shell/heartbeat-metadata.d.ts.map +1 -1
- package/dist/shell/heartbeat-metadata.js +3 -0
- package/dist/shell/heartbeat-metadata.js.map +1 -1
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +72 -52
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/idle-work-stamp.d.ts +53 -0
- package/dist/spawn/idle-work-stamp.d.ts.map +1 -0
- package/dist/spawn/idle-work-stamp.js +47 -0
- package/dist/spawn/idle-work-stamp.js.map +1 -0
- package/dist/spawn/lead-continuation.d.ts +58 -0
- package/dist/spawn/lead-continuation.d.ts.map +1 -0
- package/dist/spawn/lead-continuation.js +127 -0
- package/dist/spawn/lead-continuation.js.map +1 -0
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +27 -13
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/types/focus.d.ts +54 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/session.d.ts +11 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/verify/stall-detector-config.d.ts +36 -0
- package/dist/verify/stall-detector-config.d.ts.map +1 -1
- package/dist/verify/stall-detector-config.js +44 -0
- package/dist/verify/stall-detector-config.js.map +1 -1
- package/dist/verify/stall-detectors.d.ts +40 -0
- package/dist/verify/stall-detectors.d.ts.map +1 -1
- package/dist/verify/stall-detectors.js +60 -6
- package/dist/verify/stall-detectors.js.map +1 -1
- package/dist/verify/stalled-team-backstop.d.ts +43 -0
- package/dist/verify/stalled-team-backstop.d.ts.map +1 -0
- package/dist/verify/stalled-team-backstop.js +131 -0
- package/dist/verify/stalled-team-backstop.js.map +1 -0
- package/dist/verify/verification-deps.d.ts +6 -1
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-engine.d.ts.map +1 -1
- package/dist/verify/verification-engine.js +4 -3
- package/dist/verify/verification-engine.js.map +1 -1
- package/dist/verify/verification-evidence.d.ts +18 -0
- package/dist/verify/verification-evidence.d.ts.map +1 -1
- package/dist/verify/verification-evidence.js +53 -1
- package/dist/verify/verification-evidence.js.map +1 -1
- package/dist/verify/verify-reconciliation.d.ts.map +1 -1
- package/dist/verify/verify-reconciliation.js +2 -1
- package/dist/verify/verify-reconciliation.js.map +1 -1
- package/dist/worktree/verify-interlock.d.ts.map +1 -1
- package/dist/worktree/verify-interlock.js +2 -1
- package/dist/worktree/verify-interlock.js.map +1 -1
- 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":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAM3D,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,sCAAsC,CAAC;
|
|
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
|
-
|
|
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.
|
|
263
|
-
//
|
|
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
|
|
271
|
-
`(review_requested_at ~${ageHours}h old
|
|
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
|
-
|
|
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":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC3F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,EAAE,kBAAkB,GAAG,UAAU,GAAG,aAAa,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;QAC9F,QAAQ,EAAE,MAAM,CAAC;QACjB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,eAAe,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
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":"
|
|
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) {
|