@telora/daemon 0.18.40 → 0.18.49

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 (70) hide show
  1. package/build-info.json +4 -3
  2. package/dist/completion/advanceability.d.ts +66 -0
  3. package/dist/completion/advanceability.d.ts.map +1 -0
  4. package/dist/completion/advanceability.js +112 -0
  5. package/dist/completion/advanceability.js.map +1 -0
  6. package/dist/completion/event.d.ts +28 -52
  7. package/dist/completion/event.d.ts.map +1 -1
  8. package/dist/completion/event.js +79 -99
  9. package/dist/completion/event.js.map +1 -1
  10. package/dist/completion/progress-snapshot.d.ts +15 -4
  11. package/dist/completion/progress-snapshot.d.ts.map +1 -1
  12. package/dist/completion/progress-snapshot.js +20 -4
  13. package/dist/completion/progress-snapshot.js.map +1 -1
  14. package/dist/crash-recovery.d.ts +48 -0
  15. package/dist/crash-recovery.d.ts.map +1 -1
  16. package/dist/crash-recovery.js +166 -30
  17. package/dist/crash-recovery.js.map +1 -1
  18. package/dist/delivery-advance-block.d.ts +17 -1
  19. package/dist/delivery-advance-block.d.ts.map +1 -1
  20. package/dist/delivery-advance-block.js +31 -8
  21. package/dist/delivery-advance-block.js.map +1 -1
  22. package/dist/escalation-provenance.d.ts +5 -1
  23. package/dist/escalation-provenance.d.ts.map +1 -1
  24. package/dist/escalation-provenance.js +46 -4
  25. package/dist/escalation-provenance.js.map +1 -1
  26. package/dist/focus-executor.d.ts.map +1 -1
  27. package/dist/focus-executor.js +1 -0
  28. package/dist/focus-executor.js.map +1 -1
  29. package/dist/git-activity.d.ts +15 -0
  30. package/dist/git-activity.d.ts.map +1 -1
  31. package/dist/git-activity.js +24 -0
  32. package/dist/git-activity.js.map +1 -1
  33. package/dist/loop-engine-types.d.ts +40 -0
  34. package/dist/loop-engine-types.d.ts.map +1 -0
  35. package/dist/loop-engine-types.js +11 -0
  36. package/dist/loop-engine-types.js.map +1 -0
  37. package/dist/loop-engine.d.ts +52 -0
  38. package/dist/loop-engine.d.ts.map +1 -1
  39. package/dist/loop-engine.js +91 -10
  40. package/dist/loop-engine.js.map +1 -1
  41. package/dist/loop-llm-flag.d.ts +32 -0
  42. package/dist/loop-llm-flag.d.ts.map +1 -0
  43. package/dist/loop-llm-flag.js +35 -0
  44. package/dist/loop-llm-flag.js.map +1 -0
  45. package/dist/loop-operational-block.d.ts +44 -0
  46. package/dist/loop-operational-block.d.ts.map +1 -0
  47. package/dist/loop-operational-block.js +47 -0
  48. package/dist/loop-operational-block.js.map +1 -0
  49. package/dist/merge-back-loop.d.ts.map +1 -1
  50. package/dist/merge-back-loop.js +1 -0
  51. package/dist/merge-back-loop.js.map +1 -1
  52. package/dist/nexus-intake.d.ts +26 -3
  53. package/dist/nexus-intake.d.ts.map +1 -1
  54. package/dist/nexus-intake.js +62 -10
  55. package/dist/nexus-intake.js.map +1 -1
  56. package/dist/types/focus.d.ts +24 -0
  57. package/dist/types/focus.d.ts.map +1 -1
  58. package/package.json +2 -2
  59. package/dist/crash-recovery-cleanup.d.ts +0 -21
  60. package/dist/crash-recovery-cleanup.d.ts.map +0 -1
  61. package/dist/crash-recovery-cleanup.js +0 -205
  62. package/dist/crash-recovery-cleanup.js.map +0 -1
  63. package/dist/crash-recovery-scan.d.ts +0 -19
  64. package/dist/crash-recovery-scan.d.ts.map +0 -1
  65. package/dist/crash-recovery-scan.js +0 -145
  66. package/dist/crash-recovery-scan.js.map +0 -1
  67. package/dist/crash-recovery-types.d.ts +0 -49
  68. package/dist/crash-recovery-types.d.ts.map +0 -1
  69. package/dist/crash-recovery-types.js +0 -13
  70. package/dist/crash-recovery-types.js.map +0 -1
package/build-info.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "commitSha": "10f4d490",
3
- "builtAt": "2026-06-22T02:07:07.677Z",
2
+ "commitSha": "3cdad951",
3
+ "builtAt": "2026-06-22T20:38:05.353Z",
4
4
  "expectedMigrations": [
5
5
  "20250829113330_create_org_nodes_table.sql",
6
6
  "20250829113402_fix_function_security_search_path.sql",
@@ -668,6 +668,7 @@
668
668
  "20260620210359_strengthen_service_definitions_rls.sql",
669
669
  "20260621021153_increment_delivery_iteration_count_on_verify_failed.sql",
670
670
  "20260621022145_agent_escalations_kind_stall_detectors.sql",
671
- "20260621155052_nexus_intake_pending_and_inbox_decompose.sql"
671
+ "20260621155052_nexus_intake_pending_and_inbox_decompose.sql",
672
+ "20260622113621_add_products_nexus_intake_role_id.sql"
672
673
  ]
673
674
  }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Review-window + non-advanceability predicates for the team-completion
3
+ * watchdog.
4
+ *
5
+ * Extracted from completion/event.ts (which re-exports the surface below to
6
+ * preserve the existing import paths) to keep that file under the structural
7
+ * size lint -- the same reason progress-snapshot.ts was split out. These are
8
+ * the PURE decision predicates the watchdog consults: is the focus in a review
9
+ * window (so a teardown branch would SIGTERM a live review team), and is a
10
+ * remaining delivery a genuine dead end (so the daemon must escalate rather
11
+ * than churn a respawn loop). They hold no module state.
12
+ */
13
+ import type { FocusDeliveryInfo, Workflow } from '../types.js';
14
+ /**
15
+ * The review window is open when a review has been requested AND at least one
16
+ * delivery still sits in `verify`. During this window the focus's deliveries
17
+ * are all cascadable (verify counts as terminal-for-the-team), so the
18
+ * all-terminal / no-actionable-work teardown branches in handleCompletionEvent
19
+ * would SIGTERM a freshly-spawned REVIEW team before it can complete the
20
+ * review -- the teardown race that strands the focus in `reviewing`. Pure and
21
+ * exported for direct unit testing.
22
+ */
23
+ export declare function isInReviewWindow(reviewRequestedAt: string | null, deliveries: FocusDeliveryInfo[]): boolean;
24
+ /**
25
+ * A delivery is *non-advanceable* when neither the team nor the daemon can move
26
+ * it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
27
+ * not an idealized transition-graph model:
28
+ *
29
+ * (a) Its resolved current_workflow_stage_id is NULL. advanceDeliveryStatuses
30
+ * bails with "no workflow stage ID, skipping advance" -- the delivery can
31
+ * never advance through the workflow. A dead end for ANY status.
32
+ * (b) Agent-actionable statuses (queued / coding / verify_failed) with a
33
+ * resolved stage are NEVER dead ends. The daemon advances them by
34
+ * NAME-based stage stepping -- advanceDeliveryStatuses (focus-completion.ts)
35
+ * and the listener's checkDeliveryAutoAdvance both step
36
+ * queued|verify_failed -> coding -> verify by stage NAME once work issues
37
+ * are Done, independent of the transition graph. (The earlier is_automatic
38
+ * edge test here produced FALSE dead ends for the built-in verify_failed /
39
+ * queued stages, which carry no automatic edge by design: a verify_failed
40
+ * delivery the listener advanced seconds later was escalated as
41
+ * "non-advanceable", and the resulting team_failure escalation wedged the
42
+ * focus's review respawn.)
43
+ * (c) Any other non-terminal stage (a daemon/review-managed stage reached with
44
+ * a populated stage id) is a dead end only when its effective workflow has
45
+ * no is_automatic transition out of it -- name-based stepping does not
46
+ * apply to non-actionable statuses, so the daemon has no edge to follow.
47
+ *
48
+ * Pure and synchronous: the caller resolves the delivery's effective workflow
49
+ * (via fetchEffectiveWorkflow, transitions included) and passes both in. The
50
+ * caller is responsible for having already classified the delivery as
51
+ * non-terminal -- this function does not re-check that.
52
+ *
53
+ * Exported so tests and sister deliveries can verify the contract directly.
54
+ */
55
+ export declare function isDeliveryNonAdvanceable(delivery: Pick<FocusDeliveryInfo, 'currentWorkflowStageId' | 'executionStatus'>, workflow: Workflow): boolean;
56
+ /**
57
+ * Find the first remaining non-terminal delivery that is non-advanceable.
58
+ * Resolves each delivery's effective workflow lazily and returns as soon as a
59
+ * dead-end delivery is found (short-circuit). Returns null when every remaining
60
+ * non-terminal delivery has a live forward path.
61
+ *
62
+ * Exported with the workflow fetch injected so tests can drive it without live
63
+ * Supabase/MCP.
64
+ */
65
+ export declare function findNonAdvanceableDelivery(nonTerminal: FocusDeliveryInfo[], fetchEffectiveWorkflow: (deliveryId: string) => Promise<Workflow>): Promise<FocusDeliveryInfo | null>;
66
+ //# sourceMappingURL=advanceability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanceability.d.ts","sourceRoot":"","sources":["../../src/completion/advanceability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG/D;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,GAC9B,OAAO,CAGT;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,GAAG,iBAAiB,CAAC,EAC/E,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAqBT;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,iBAAiB,EAAE,EAChC,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,GAChE,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAuBnC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Review-window + non-advanceability predicates for the team-completion
3
+ * watchdog.
4
+ *
5
+ * Extracted from completion/event.ts (which re-exports the surface below to
6
+ * preserve the existing import paths) to keep that file under the structural
7
+ * size lint -- the same reason progress-snapshot.ts was split out. These are
8
+ * the PURE decision predicates the watchdog consults: is the focus in a review
9
+ * window (so a teardown branch would SIGTERM a live review team), and is a
10
+ * remaining delivery a genuine dead end (so the daemon must escalate rather
11
+ * than churn a respawn loop). They hold no module state.
12
+ */
13
+ import { DELIVERY_STATUS } from '@telora/daemon-core';
14
+ import { isStatusAgentActionable } from '../stage-classifier.js';
15
+ /**
16
+ * The review window is open when a review has been requested AND at least one
17
+ * delivery still sits in `verify`. During this window the focus's deliveries
18
+ * are all cascadable (verify counts as terminal-for-the-team), so the
19
+ * all-terminal / no-actionable-work teardown branches in handleCompletionEvent
20
+ * would SIGTERM a freshly-spawned REVIEW team before it can complete the
21
+ * review -- the teardown race that strands the focus in `reviewing`. Pure and
22
+ * exported for direct unit testing.
23
+ */
24
+ export function isInReviewWindow(reviewRequestedAt, deliveries) {
25
+ if (!reviewRequestedAt)
26
+ return false;
27
+ return deliveries.some(d => d.executionStatus === DELIVERY_STATUS.VERIFY);
28
+ }
29
+ // ── Non-advanceability check ──────────────────────────────────────────────
30
+ /**
31
+ * A delivery is *non-advanceable* when neither the team nor the daemon can move
32
+ * it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
33
+ * not an idealized transition-graph model:
34
+ *
35
+ * (a) Its resolved current_workflow_stage_id is NULL. advanceDeliveryStatuses
36
+ * bails with "no workflow stage ID, skipping advance" -- the delivery can
37
+ * never advance through the workflow. A dead end for ANY status.
38
+ * (b) Agent-actionable statuses (queued / coding / verify_failed) with a
39
+ * resolved stage are NEVER dead ends. The daemon advances them by
40
+ * NAME-based stage stepping -- advanceDeliveryStatuses (focus-completion.ts)
41
+ * and the listener's checkDeliveryAutoAdvance both step
42
+ * queued|verify_failed -> coding -> verify by stage NAME once work issues
43
+ * are Done, independent of the transition graph. (The earlier is_automatic
44
+ * edge test here produced FALSE dead ends for the built-in verify_failed /
45
+ * queued stages, which carry no automatic edge by design: a verify_failed
46
+ * delivery the listener advanced seconds later was escalated as
47
+ * "non-advanceable", and the resulting team_failure escalation wedged the
48
+ * focus's review respawn.)
49
+ * (c) Any other non-terminal stage (a daemon/review-managed stage reached with
50
+ * a populated stage id) is a dead end only when its effective workflow has
51
+ * no is_automatic transition out of it -- name-based stepping does not
52
+ * apply to non-actionable statuses, so the daemon has no edge to follow.
53
+ *
54
+ * Pure and synchronous: the caller resolves the delivery's effective workflow
55
+ * (via fetchEffectiveWorkflow, transitions included) and passes both in. The
56
+ * caller is responsible for having already classified the delivery as
57
+ * non-terminal -- this function does not re-check that.
58
+ *
59
+ * Exported so tests and sister deliveries can verify the contract directly.
60
+ */
61
+ export function isDeliveryNonAdvanceable(delivery, workflow) {
62
+ // (a) No resolved stage -> advanceDeliveryStatuses skips it.
63
+ const stageId = delivery.currentWorkflowStageId;
64
+ if (!stageId)
65
+ return true;
66
+ // (b) Agent-actionable + resolved stage -> the daemon advances it by
67
+ // name-based stepping (queued|verify_failed -> coding -> verify), so it is
68
+ // never a dead end regardless of the transition graph.
69
+ if (isStatusAgentActionable(delivery.executionStatus ?? '', workflow)) {
70
+ return false;
71
+ }
72
+ // (c) Non-actionable, non-terminal stage. The daemon only auto-advances such
73
+ // a stage over an automatic transition. A workflow that carries no
74
+ // transitions at all (e.g. a built-in default resolved without the transition
75
+ // set) is likewise a dead end for this stage.
76
+ const transitions = workflow.transitions ?? [];
77
+ const hasAutomaticExit = transitions.some(t => t.from_stage_id === stageId && t.is_automatic === true);
78
+ return !hasAutomaticExit;
79
+ }
80
+ /**
81
+ * Find the first remaining non-terminal delivery that is non-advanceable.
82
+ * Resolves each delivery's effective workflow lazily and returns as soon as a
83
+ * dead-end delivery is found (short-circuit). Returns null when every remaining
84
+ * non-terminal delivery has a live forward path.
85
+ *
86
+ * Exported with the workflow fetch injected so tests can drive it without live
87
+ * Supabase/MCP.
88
+ */
89
+ export async function findNonAdvanceableDelivery(nonTerminal, fetchEffectiveWorkflow) {
90
+ for (const delivery of nonTerminal) {
91
+ // Fast path: a NULL stage is non-advanceable without needing the workflow.
92
+ if (!delivery.currentWorkflowStageId) {
93
+ return delivery;
94
+ }
95
+ try {
96
+ const workflow = await fetchEffectiveWorkflow(delivery.id);
97
+ if (isDeliveryNonAdvanceable(delivery, workflow)) {
98
+ return delivery;
99
+ }
100
+ }
101
+ catch (err) {
102
+ // Fail safe: if we cannot resolve the workflow we cannot prove the
103
+ // delivery is non-advanceable, so we do NOT escalate on it. Treat the
104
+ // lookup failure as "advanceable" and let the normal clean-termination
105
+ // path run -- a spurious escalation that parks a healthy focus is worse
106
+ // than one missed dead-end detection (the next tick retries).
107
+ console.warn(`[focus-executor] Non-advanceability workflow lookup failed for delivery ${delivery.id}: ${err.message}`);
108
+ }
109
+ }
110
+ return null;
111
+ }
112
+ //# sourceMappingURL=advanceability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanceability.js","sourceRoot":"","sources":["../../src/completion/advanceability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,iBAAgC,EAChC,UAA+B;IAE/B,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,6EAA6E;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA+E,EAC/E,QAAkB;IAElB,6DAA6D;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,sBAAsB,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,qEAAqE;IACrE,2EAA2E;IAC3E,uDAAuD;IACvD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6EAA6E;IAC7E,mEAAmE;IACnE,8EAA8E;IAC9E,8CAA8C;IAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/C,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAC5D,CAAC;IACF,OAAO,CAAC,gBAAgB,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,WAAgC,EAChC,sBAAiE;IAEjE,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,2EAA2E;QAC3E,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACjD,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,sEAAsE;YACtE,uEAAuE;YACvE,wEAAwE;YACxE,8DAA8D;YAC9D,OAAO,CAAC,IAAI,CACV,2EAA2E,QAAQ,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CACpH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -10,6 +10,8 @@ import type { DaemonConfig, FocusTeamState, FocusDeliveryInfo, FocusIssueInfo, W
10
10
  import { CompletionDetector, type CompletionInfo } from './detector.js';
11
11
  import { type CreateEscalationParams } from '../queries/issues.js';
12
12
  import { takeProgressSnapshot, snapshotsEqual } from './progress-snapshot.js';
13
+ import { isInReviewWindow, isDeliveryNonAdvanceable, findNonAdvanceableDelivery } from './advanceability.js';
14
+ export { isInReviewWindow, isDeliveryNonAdvanceable, findNonAdvanceableDelivery };
13
15
  export { PLANNING_NO_DELIVERIES_REASON, NO_PROGRESS_ESCALATION_REASON, NON_ADVANCEABLE_ESCALATION_REASON, NON_ADVANCEABLE_CAUSE, type EscalationDeps, escalatePlanningFailure, escalateNoProgress, escalateNonAdvanceable, } from './event-escalations.js';
14
16
  /**
15
17
  * Maximum consecutive re-engagement cycles with no measurable progress before
@@ -76,59 +78,33 @@ export interface CompletionEventDeps {
76
78
  sessionType: 'coding' | 'review';
77
79
  succeeded: boolean;
78
80
  }) => Promise<void>;
81
+ /**
82
+ * Resolve the focus's persistent worktree (path) so the no-progress guard can
83
+ * read its git state. Backs BOTH the git-activity dimension on the progress
84
+ * snapshot (a fresh commit on the focus branch resets the no-progress counter)
85
+ * AND the dirty re-wake-before-terminate guard. Optional: present in
86
+ * defaultDeps; a test that omits it (or one that returns undefined) simply
87
+ * gets focusHeadSha=null and no dirty re-wake -- identical to a focus with no
88
+ * registered worktree.
89
+ */
90
+ getFocusWorktree?: (focusId: string) => {
91
+ worktreePath: string;
92
+ } | undefined;
93
+ /**
94
+ * True when the focus worktree has uncommitted changes. Backs the dirty
95
+ * re-wake guard: a team that PRODUCED code (dirty tree) is kept alive and
96
+ * nudged to commit rather than terminated for "no progress". Optional/injected
97
+ * so tests drive the git path without a real worktree.
98
+ */
99
+ worktreeHasUncommittedChanges?: (worktreePath: string) => boolean;
100
+ /**
101
+ * Read the focus worktree's HEAD sha for the snapshot's git-activity
102
+ * dimension. Returns null when the worktree path does not exist or git fails.
103
+ * Optional/injected so tests can simulate a fresh commit (a different sha than
104
+ * the prior snapshot's) without a real git repo.
105
+ */
106
+ readWorktreeHeadSha?: (worktreePath: string) => string | null;
79
107
  }
80
- /**
81
- * The review window is open when a review has been requested AND at least one
82
- * delivery still sits in `verify`. During this window the focus's deliveries
83
- * are all cascadable (verify counts as terminal-for-the-team), so the
84
- * all-terminal / no-actionable-work teardown branches in handleCompletionEvent
85
- * would SIGTERM a freshly-spawned REVIEW team before it can complete the
86
- * review -- the teardown race that strands the focus in `reviewing`. Pure and
87
- * exported for direct unit testing.
88
- */
89
- export declare function isInReviewWindow(reviewRequestedAt: string | null, deliveries: FocusDeliveryInfo[]): boolean;
90
- /**
91
- * A delivery is *non-advanceable* when neither the team nor the daemon can move
92
- * it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
93
- * not an idealized transition-graph model:
94
- *
95
- * (a) Its resolved current_workflow_stage_id is NULL. advanceDeliveryStatuses
96
- * bails with "no workflow stage ID, skipping advance" -- the delivery can
97
- * never advance through the workflow. A dead end for ANY status.
98
- * (b) Agent-actionable statuses (queued / coding / verify_failed) with a
99
- * resolved stage are NEVER dead ends. The daemon advances them by
100
- * NAME-based stage stepping -- advanceDeliveryStatuses (focus-completion.ts)
101
- * and the listener's checkDeliveryAutoAdvance both step
102
- * queued|verify_failed -> coding -> verify by stage NAME once work issues
103
- * are Done, independent of the transition graph. (The earlier is_automatic
104
- * edge test here produced FALSE dead ends for the built-in verify_failed /
105
- * queued stages, which carry no automatic edge by design: a verify_failed
106
- * delivery the listener advanced seconds later was escalated as
107
- * "non-advanceable", and the resulting team_failure escalation wedged the
108
- * focus's review respawn.)
109
- * (c) Any other non-terminal stage (a daemon/review-managed stage reached with
110
- * a populated stage id) is a dead end only when its effective workflow has
111
- * no is_automatic transition out of it -- name-based stepping does not
112
- * apply to non-actionable statuses, so the daemon has no edge to follow.
113
- *
114
- * Pure and synchronous: the caller resolves the delivery's effective workflow
115
- * (via fetchEffectiveWorkflow, transitions included) and passes both in. The
116
- * caller is responsible for having already classified the delivery as
117
- * non-terminal -- this function does not re-check that.
118
- *
119
- * Exported so tests and sister deliveries can verify the contract directly.
120
- */
121
- export declare function isDeliveryNonAdvanceable(delivery: Pick<FocusDeliveryInfo, 'currentWorkflowStageId' | 'executionStatus'>, workflow: Workflow): boolean;
122
- /**
123
- * Find the first remaining non-terminal delivery that is non-advanceable.
124
- * Resolves each delivery's effective workflow lazily and returns as soon as a
125
- * dead-end delivery is found (short-circuit). Returns null when every remaining
126
- * non-terminal delivery has a live forward path.
127
- *
128
- * Exported with the workflow fetch injected so tests can drive it without live
129
- * Supabase/MCP.
130
- */
131
- export declare function findNonAdvanceableDelivery(nonTerminal: FocusDeliveryInfo[], fetchEffectiveWorkflow: (deliveryId: string) => Promise<Workflow>): Promise<FocusDeliveryInfo | null>;
132
108
  /**
133
109
  * Handle a 'complete' event from the CompletionDetector.
134
110
  *
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,16 @@ import { advanceDeliveryStatuses as defaultAdvanceDeliveryStatuses, runReviewExi
17
17
  import { fetchEffectiveWorkflowWithTransitions as defaultFetchEffectiveWorkflowWithTransitions } from '../queries/workflows.js';
18
18
  import { decideCompletionAction, shouldCheckNonAdvanceable } from './completion-decision.js';
19
19
  import { takeProgressSnapshot, snapshotsEqual } from './progress-snapshot.js';
20
+ // Review-window + non-advanceability predicates extracted to ./advanceability.ts
21
+ // (keeps this file under the structural size lint). Imported for use below and
22
+ // re-exported so existing importers (../completion/index.js + test suites) are
23
+ // unaffected.
24
+ import { isInReviewWindow, isDeliveryNonAdvanceable, findNonAdvanceableDelivery, } from './advanceability.js';
25
+ export { isInReviewWindow, isDeliveryNonAdvanceable, findNonAdvanceableDelivery };
26
+ import { getFocusWorktree as defaultGetFocusWorktree } from '../focus-worktree-state.js';
27
+ import { worktreeHasUncommittedChanges as defaultWorktreeHasUncommittedChanges } from '../worktree-safety.js';
28
+ import { readWorktreeHeadSha as defaultReadWorktreeHeadSha } from '../git-activity.js';
29
+ import { resolveAutoRemediationBudget } from '../delivery-advance-block.js';
20
30
  // Escalation builders + their reason-string constants live in
21
31
  // event-escalations.ts; re-exported here so existing importers are unaffected.
22
32
  import { escalatePlanningFailure, escalateNoProgress, escalateNonAdvanceable, } from './event-escalations.js';
@@ -41,104 +51,10 @@ const defaultDeps = {
41
51
  hasOpenTeamFailureEscalation: defaultHasOpenTeamFailureEscalation,
42
52
  getReviewRequestedAt: defaultGetReviewRequestedAt,
43
53
  runReviewExitHandler: defaultRunReviewExitHandler,
54
+ getFocusWorktree: defaultGetFocusWorktree,
55
+ worktreeHasUncommittedChanges: defaultWorktreeHasUncommittedChanges,
56
+ readWorktreeHeadSha: defaultReadWorktreeHeadSha,
44
57
  };
45
- /**
46
- * The review window is open when a review has been requested AND at least one
47
- * delivery still sits in `verify`. During this window the focus's deliveries
48
- * are all cascadable (verify counts as terminal-for-the-team), so the
49
- * all-terminal / no-actionable-work teardown branches in handleCompletionEvent
50
- * would SIGTERM a freshly-spawned REVIEW team before it can complete the
51
- * review -- the teardown race that strands the focus in `reviewing`. Pure and
52
- * exported for direct unit testing.
53
- */
54
- export function isInReviewWindow(reviewRequestedAt, deliveries) {
55
- if (!reviewRequestedAt)
56
- return false;
57
- return deliveries.some(d => d.executionStatus === DELIVERY_STATUS.VERIFY);
58
- }
59
- // ── Non-advanceability check ──────────────────────────────────────────────
60
- /**
61
- * A delivery is *non-advanceable* when neither the team nor the daemon can move
62
- * it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
63
- * not an idealized transition-graph model:
64
- *
65
- * (a) Its resolved current_workflow_stage_id is NULL. advanceDeliveryStatuses
66
- * bails with "no workflow stage ID, skipping advance" -- the delivery can
67
- * never advance through the workflow. A dead end for ANY status.
68
- * (b) Agent-actionable statuses (queued / coding / verify_failed) with a
69
- * resolved stage are NEVER dead ends. The daemon advances them by
70
- * NAME-based stage stepping -- advanceDeliveryStatuses (focus-completion.ts)
71
- * and the listener's checkDeliveryAutoAdvance both step
72
- * queued|verify_failed -> coding -> verify by stage NAME once work issues
73
- * are Done, independent of the transition graph. (The earlier is_automatic
74
- * edge test here produced FALSE dead ends for the built-in verify_failed /
75
- * queued stages, which carry no automatic edge by design: a verify_failed
76
- * delivery the listener advanced seconds later was escalated as
77
- * "non-advanceable", and the resulting team_failure escalation wedged the
78
- * focus's review respawn.)
79
- * (c) Any other non-terminal stage (a daemon/review-managed stage reached with
80
- * a populated stage id) is a dead end only when its effective workflow has
81
- * no is_automatic transition out of it -- name-based stepping does not
82
- * apply to non-actionable statuses, so the daemon has no edge to follow.
83
- *
84
- * Pure and synchronous: the caller resolves the delivery's effective workflow
85
- * (via fetchEffectiveWorkflow, transitions included) and passes both in. The
86
- * caller is responsible for having already classified the delivery as
87
- * non-terminal -- this function does not re-check that.
88
- *
89
- * Exported so tests and sister deliveries can verify the contract directly.
90
- */
91
- export function isDeliveryNonAdvanceable(delivery, workflow) {
92
- // (a) No resolved stage -> advanceDeliveryStatuses skips it.
93
- const stageId = delivery.currentWorkflowStageId;
94
- if (!stageId)
95
- return true;
96
- // (b) Agent-actionable + resolved stage -> the daemon advances it by
97
- // name-based stepping (queued|verify_failed -> coding -> verify), so it is
98
- // never a dead end regardless of the transition graph.
99
- if (isStatusAgentActionable(delivery.executionStatus ?? '', workflow)) {
100
- return false;
101
- }
102
- // (c) Non-actionable, non-terminal stage. The daemon only auto-advances such
103
- // a stage over an automatic transition. A workflow that carries no
104
- // transitions at all (e.g. a built-in default resolved without the transition
105
- // set) is likewise a dead end for this stage.
106
- const transitions = workflow.transitions ?? [];
107
- const hasAutomaticExit = transitions.some(t => t.from_stage_id === stageId && t.is_automatic === true);
108
- return !hasAutomaticExit;
109
- }
110
- /**
111
- * Find the first remaining non-terminal delivery that is non-advanceable.
112
- * Resolves each delivery's effective workflow lazily and returns as soon as a
113
- * dead-end delivery is found (short-circuit). Returns null when every remaining
114
- * non-terminal delivery has a live forward path.
115
- *
116
- * Exported with the workflow fetch injected so tests can drive it without live
117
- * Supabase/MCP.
118
- */
119
- export async function findNonAdvanceableDelivery(nonTerminal, fetchEffectiveWorkflow) {
120
- for (const delivery of nonTerminal) {
121
- // Fast path: a NULL stage is non-advanceable without needing the workflow.
122
- if (!delivery.currentWorkflowStageId) {
123
- return delivery;
124
- }
125
- try {
126
- const workflow = await fetchEffectiveWorkflow(delivery.id);
127
- if (isDeliveryNonAdvanceable(delivery, workflow)) {
128
- return delivery;
129
- }
130
- }
131
- catch (err) {
132
- // Fail safe: if we cannot resolve the workflow we cannot prove the
133
- // delivery is non-advanceable, so we do NOT escalate on it. Treat the
134
- // lookup failure as "advanceable" and let the normal clean-termination
135
- // path run -- a spurious escalation that parks a healthy focus is worse
136
- // than one missed dead-end detection (the next tick retries).
137
- console.warn(`[focus-executor] Non-advanceability workflow lookup failed for delivery ${delivery.id}: ${err.message}`);
138
- }
139
- }
140
- return null;
141
- }
142
58
  // ── Handler ─────────────────────────────────────────────────────────────
143
59
  /**
144
60
  * Handle a 'complete' event from the CompletionDetector.
@@ -310,6 +226,18 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
310
226
  const postHasActionableOpen = currentIssues.some(i => postActionableIds.has(i.deliveryId) && OPEN_ISSUE_STATUSES.has(i.status));
311
227
  const hasPlanning = effectiveDeliveries.some(d => (d.executionStatus ?? '') === 'planning');
312
228
  const teamHasActionableWork = hasPlanning || postHasActionableOpen;
229
+ // Resolve the focus worktree once for BOTH the git-activity snapshot
230
+ // dimension and the dirty re-wake guard below. A team that wrote AND committed
231
+ // code this cycle moved the focus branch HEAD even when no DB state moved;
232
+ // feeding that sha into the snapshot makes the commit reset the no-progress
233
+ // counter through the EXISTING madeProgress/snapshotsEqual machinery (no
234
+ // change to the madeProgress logic is needed). null when no worktree is
235
+ // registered or git could not be read -- the watchdog then behaves exactly as
236
+ // before on the git axis.
237
+ const resolveWorktree = deps.getFocusWorktree ?? defaultGetFocusWorktree;
238
+ const readHeadSha = deps.readWorktreeHeadSha ?? defaultReadWorktreeHeadSha;
239
+ const focusWorktreePath = resolveWorktree(focusId)?.worktreePath ?? null;
240
+ const focusHeadSha = focusWorktreePath !== null ? readHeadSha(focusWorktreePath) : null;
313
241
  // Capture the (post-advance) snapshot for progress detection. Treat both null
314
242
  // and undefined as "no prior snapshot" -- legacy test fixtures may not set
315
243
  // the field, and a fresh team has lastProgressSnapshot=null. Snapshotting the
@@ -319,7 +247,7 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
319
247
  // Computed BEFORE the no-actionable-work branch so the non-advanceable guard
320
248
  // below can gate on "no progress this cycle" -- the branch returns early, so
321
249
  // the original (post-branch) snapshot location was never reached on this path.
322
- const snapshot = takeProgressSnapshot(effectiveDeliveries, currentIssues);
250
+ const snapshot = takeProgressSnapshot(effectiveDeliveries, currentIssues, focusHeadSha);
323
251
  const priorSnapshot = teamState.lastProgressSnapshot ?? null;
324
252
  // NB: a GENUINE review window is already handled ABOVE by the isInReviewWindow
325
253
  // early-return (review_requested_at set AND a delivery still in `verify` ->
@@ -409,6 +337,14 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
409
337
  // no-actionable-work terminations deliberately do not touch the counter
410
338
  // (matching the pre-decision-extraction behavior).
411
339
  const updatedNoProgressCycles = madeProgress ? 0 : (teamState.noProgressCycles ?? 0) + 1;
340
+ // Measurable progress this cycle (any axis moved, including a fresh commit on
341
+ // the focus branch) means the prior dirty episode -- if any -- is no longer
342
+ // stalled, so the commit-nudge budget resets alongside the no-progress
343
+ // counter. Committed to teamState on the same branches that commit the
344
+ // no-progress counter (the actionable-work paths), keeping the two in lockstep.
345
+ if (madeProgress) {
346
+ teamState.commitNudgeAttempts = 0;
347
+ }
412
348
  const action = decideCompletionAction({
413
349
  teamHasActionableWork,
414
350
  advancedThisCycle,
@@ -475,6 +411,48 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
475
411
  return;
476
412
  }
477
413
  case 'escalate_no_progress_and_terminate': {
414
+ // ── Git-aware re-wake-before-terminate ────────────────────────────────
415
+ // This is the path that was KILLING PRODUCERS: a coding team that wrote
416
+ // all its code but did not commit it sees no delivery/issue STATE move, so
417
+ // it crosses the no-progress threshold and -- without this guard -- is
418
+ // escalated + terminated. Once it is dead the commit-gate has no live team
419
+ // to re-wake, so the uncommitted work is stranded until a human commits.
420
+ //
421
+ // Before escalating, check whether the team actually PRODUCED work: a
422
+ // dirty focus worktree (uncommitted changes) means there is real work to
423
+ // preserve. If so AND a live lead is still reachable AND the commit-nudge
424
+ // budget is not exhausted, nudge the lead to commit instead of killing it.
425
+ // The team stays alive, commits its own work, and the delivery advances
426
+ // out of coding through the normal commit-gate -- no manual commit, no
427
+ // escalation. A genuinely idle team (clean tree, OR no live lead, OR
428
+ // budget exhausted) falls through to the unchanged escalate+terminate
429
+ // behavior below, so a team that will never commit still escalates.
430
+ const worktreeIsDirty = focusWorktreePath !== null &&
431
+ (deps.worktreeHasUncommittedChanges ?? defaultWorktreeHasUncommittedChanges)(focusWorktreePath);
432
+ const liveLead = teamState.leadStdin;
433
+ // Budget mirrors the advance-block auto-remediation budget so the two
434
+ // re-wake paths (this one and delivery-advance-block's) bound retries the
435
+ // same way; resolveAutoRemediationBudget reads TELORA_AUTO_REMEDIATION_BUDGET.
436
+ const commitNudgeBudget = resolveAutoRemediationBudget();
437
+ const nudgesSpent = teamState.commitNudgeAttempts ?? 0;
438
+ if (worktreeIsDirty && liveLead && nudgesSpent < commitNudgeBudget) {
439
+ // Keep the producing team alive: nudge it to commit, record the
440
+ // snapshot + bump the per-episode nudge counter, reset the completion
441
+ // detector so the next 'complete' event is a fresh cycle, and RETURN
442
+ // WITHOUT terminating or escalating.
443
+ teamState.commitNudgeAttempts = nudgesSpent + 1;
444
+ teamState.lastProgressSnapshot = snapshot;
445
+ console.warn(`[focus-executor] No-progress threshold reached for "${focusName}", but the ` +
446
+ `focus worktree has uncommitted changes and a live lead is reachable -- ` +
447
+ `re-waking the team to commit instead of terminating ` +
448
+ `(commit-nudge attempt ${teamState.commitNudgeAttempts}/${commitNudgeBudget}).`);
449
+ sendMessage(liveLead, `Your focus worktree has uncommitted changes, so the daemon cannot advance ` +
450
+ `the delivery and will not terminate the team yet. Please commit your work in ` +
451
+ `${focusWorktreePath}; the daemon advances automatically once the worktree is ` +
452
+ `clean. (commit-nudge attempt ${teamState.commitNudgeAttempts}/${commitNudgeBudget})`);
453
+ completionDetector.reset();
454
+ return;
455
+ }
478
456
  // Crossed the no-progress threshold: escalate and shut the team down so
479
457
  // a human can intervene. Reached only when the team HAS actionable work
480
458
  // it owns -- a planning delivery to scope, or a coding delivery whose
@@ -482,7 +460,9 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
482
460
  // no-actionable-work cases (verify_failed-with-all-Done, in_review,
483
461
  // paused) terminate cleanly above and never reach here, so this
484
462
  // escalation now means a genuinely stuck team, not a daemon-managed
485
- // transition.
463
+ // transition. The worktree is clean here (or no lead / budget spent), so
464
+ // the dirty episode -- if there was one -- is over: reset the nudge counter.
465
+ teamState.commitNudgeAttempts = 0;
486
466
  teamState.noProgressCycles = updatedNoProgressCycles;
487
467
  teamState.lastProgressSnapshot = snapshot;
488
468
  console.warn(`[focus-executor] Scope-coverage guard tripped for "${focusName}" -- ` +
@@ -1 +1 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"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"}