@telora/daemon 0.20.57 → 0.20.60

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "commitSha": "96805df9b",
3
- "builtAt": "2026-07-26T17:35:25.517Z",
2
+ "commitSha": "a3e485707",
3
+ "builtAt": "2026-07-26T20:34:14.153Z",
4
4
  "expectedMigrations": [
5
5
  "20250829113330_create_org_nodes_table.sql",
6
6
  "20250829113402_fix_function_security_search_path.sql",
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Delivery hold-lookup queries.
3
+ *
4
+ * "Is something holding this delivery out of done, and what?" -- the escalation
5
+ * side of that question. Two disposition-keyed families live here:
6
+ *
7
+ * - OPERATOR holds (needs_operator / external_wait): a human or an external
8
+ * party must act before the declared work counts as real. Fails CLOSED at
9
+ * its call site.
10
+ * - DIRECTED holds (needs_intent / needs_clarification): an unanswered
11
+ * question the daemon reads back to the asking agent. Fails OPEN at its
12
+ * call site.
13
+ *
14
+ * Plus SELF_REPORT_STALL_HOLD_KINDS: the kinds that are machine-filed alarms
15
+ * ABOUT a delivery's own cycling, excluded from the operator predicate so an
16
+ * alarm cannot constitute the condition it reports.
17
+ *
18
+ * Extracted from queries/issues.ts to keep that file under the daemon
19
+ * file-size limit -- the self-referential-alarm fix pushed it to 844. Bodies
20
+ * verbatim; issues.ts re-exports this surface so existing importers are
21
+ * unaffected.
22
+ *
23
+ * @module queries/holds
24
+ */
25
+ /** Escalation statuses that count as OPEN for every hold lookup here. */
26
+ export declare const OPEN_ESCALATION_STATUSES: ReadonlySet<string>;
27
+ /**
28
+ * The escalation dispositions that mean "a human operator or an external party
29
+ * must act before this delivery's declared work can be considered real":
30
+ * needs_operator (operator/infra/security action) and external_wait (blocked on
31
+ * a third party). Distinct from needs_intent / needs_clarification (a steering
32
+ * question, not a blocked-on-reality signal) and agent_resolvable (no human at
33
+ * all). Keyed on the DISPOSITION axis so ANY escalation kind carrying one of
34
+ * these holds its delivery -- the gate must not enumerate kinds.
35
+ *
36
+ * Declared as daemon-local string literals (not imported from @telora/daemon-core's
37
+ * ESCALATION_DISPOSITIONS) on purpose, mirroring MERGE_CONFLICT_ESCALATION_KIND
38
+ * below: a bare `@telora/*` VALUE import in a query module pulled into a mocked
39
+ * node:test fails to resolve under the module-mock loader (the daemon-local-copy
40
+ * rule). The canonical enum lives in packages/daemon-core/src/disposition.ts and
41
+ * the DB CHECK on agent_escalations.disposition is the real constraint; these
42
+ * strings must stay in sync with it.
43
+ */
44
+ export declare const OPERATOR_HOLD_DISPOSITIONS: readonly string[];
45
+ /**
46
+ * escalation_kind discriminators that are SELF-REFERENTIAL stall alarms: a
47
+ * machine-filed escalation ABOUT a delivery's own cycling, which must NOT be
48
+ * allowed to satisfy the operator-hold predicate that holds that same delivery.
49
+ *
50
+ * The fixpoint this removes (observed 2026-07-26, delivery 50131436, escalations
51
+ * 96262dfa -> 43c4dade): the verify_failed cap detector files
52
+ * verify_gate_unclearable (disposition needs_operator, anchored to the delivery)
53
+ * when iteration_count exceeds the cap. findOpenOperatorHoldForDelivery matched
54
+ * on disposition ONLY, so that alarm satisfied the very hold predicate it was
55
+ * raised about; the delivery was held out of `done`; `done` is the only
56
+ * non-cancelled terminal that makes exceedsVerifyFailedCap stop firing; and
57
+ * iteration_count is monotonic -- so the alarm blocked the only exit that would
58
+ * silence it, and resolving one let the detector file the next on the following
59
+ * tick.
60
+ *
61
+ * ENUMERATION -- every machine-filed, delivery-anchored needs_operator kind, and
62
+ * whether it is a genuine hold or a self-referential stall alarm. The exclusion
63
+ * criterion is narrow and precise: exclude a kind IFF (a) it re-arms while the
64
+ * delivery is non-terminal AND (b) its ONLY silencing is the delivery reaching
65
+ * the terminal state the hold blocks. A kind that describes external reality an
66
+ * operator must change, or that is filed once and silenced by operator
67
+ * resolution, is a GENUINE hold and stays.
68
+ *
69
+ * verify_gate_unclearable (stall-detectors.ts) -- SELF-REFERENTIAL. Trigger
70
+ * (iteration_count) is monotonic and re-arms every tick while non-terminal;
71
+ * silenced only by done/cancelled, which the hold blocks. EXCLUDE.
72
+ * verify_evidence_unavailable (verification-feedback.ts) -- self-REPORT of an
73
+ * instrument fault, but filed ONCE per delivery (idempotent, never re-armed)
74
+ * and silenced by operator resolution, not by `done`. It also already holds
75
+ * the delivery via its OWN gate_state.blocking guard, so it does not lean on
76
+ * this predicate. Not a fixpoint -> KEEP as a hold.
77
+ * schema_drift_blocked (listener-auto-advance.ts) -- operator must apply a
78
+ * migration (external reality). KEEP.
79
+ * advance_blocked (delivery-advance-block.ts) -- dirty worktree / lockfile
80
+ * state an operator or agent must resolve. KEEP.
81
+ * cd_push_failed (ci-escalation.ts) / ci_run_red (ci-sensor-loop.ts) --
82
+ * external CI/CD state. KEEP.
83
+ * propagation_stale (staleness-sensor.ts) -- external propagation state. KEEP.
84
+ *
85
+ * (Focus-anchored kinds -- merge_conflict, merge_refused_dirty,
86
+ * review_window_stalled, stuck_focus_branch -- are never matched by
87
+ * findOpenOperatorHoldForDelivery, which keys on deliveryId, so they need no
88
+ * exclusion here.)
89
+ *
90
+ * Daemon-local literal for the same reason as OPERATOR_HOLD_DISPOSITIONS above:
91
+ * a bare `@telora/*` value import mis-resolves under the node:test module-mock
92
+ * loader, and importing stall-detectors.VERIFY_GATE_UNCLEARABLE_KIND would also
93
+ * form an import cycle (stall-detectors imports from this module). Keep in sync
94
+ * with stall-detectors.VERIFY_GATE_UNCLEARABLE_KIND and the DB CHECK.
95
+ */
96
+ export declare const SELF_REPORT_STALL_HOLD_KINDS: readonly string[];
97
+ /** The open operator-hold escalation a delivery is blocked on (for gate_state). */
98
+ export interface OperatorHoldEscalation {
99
+ id: string;
100
+ escalationKind: string | null;
101
+ disposition: string;
102
+ }
103
+ /**
104
+ * Returns the OPEN (pending|in_review) operator-hold escalation anchored to the
105
+ * given delivery, or null when none is open.
106
+ *
107
+ * DISPOSITION-keyed sibling of hasOpenEscalationForDelivery (which is KIND-keyed):
108
+ * it matches ANY escalation_kind whose disposition is in OPERATOR_HOLD_DISPOSITIONS
109
+ * (needs_operator / external_wait). This is the vocabulary the verify->done gate
110
+ * previously lacked -- an operator blocked ON a delivery (e.g. "the host restore
111
+ * was NOT executed") could not hold that delivery out of done, so a clean review
112
+ * auto-approved it. Returning the matching row (id + kind + disposition), not a
113
+ * bare boolean, lets the gate write the block into the delivery's gate_state.
114
+ *
115
+ * Matches on the typed delivery_id + disposition COLUMNS in preference to the
116
+ * metadata bag, with a metadata fallback (metadata.deliveryId / metadata.disposition)
117
+ * for rows already open at deploy time. The status is re-checked client-side as
118
+ * defense-in-depth against a deploy-lagged edge fn returning resolved rows.
119
+ *
120
+ * escalation_list has NO server-side delivery_id filter, so the delivery match is
121
+ * applied client-side over the org's open rows. Pass `focusId` to narrow the page
122
+ * server-side (the same busy-org paging concern hasOpenWorktreeDirtyEscalation
123
+ * addresses); omit it and the lookup reads the newest 500 open org rows.
124
+ *
125
+ * FAIL-CLOSED is the CALLER's responsibility. This function reports what it finds
126
+ * and THROWS on a hard API error. The verify->done gate that consumes it exists
127
+ * precisely to fail closed, so it must treat a lookup error as "held" -- the
128
+ * opposite of the other escalation lookups (dedup/auto-close), which fail OPEN
129
+ * because a spurious park is worse than a missed dedup. Here a missed hold lets an
130
+ * operator-blocked delivery reach done, which is the failure this gate prevents.
131
+ */
132
+ export declare function findOpenOperatorHoldForDelivery(deliveryId: string, focusId?: string): Promise<OperatorHoldEscalation | null>;
133
+ /**
134
+ * Boolean convenience over findOpenOperatorHoldForDelivery for call sites that
135
+ * only need to know whether the hold exists (not which escalation it is).
136
+ */
137
+ export declare function hasOpenOperatorHoldForDelivery(deliveryId: string, focusId?: string): Promise<boolean>;
138
+ /**
139
+ * The escalation dispositions that mean "a human must STEER before this team's
140
+ * work can proceed": needs_intent (scope/direction/priority) and
141
+ * needs_clarification (ambiguity to resolve). These are exactly the two the
142
+ * escalation tool documents as answerable via the `answer` field -- a DIRECTED
143
+ * question the daemon reads back to the asking agent, distinct from the
144
+ * operator-hold dispositions (needs_operator / external_wait, a blocked-on-reality
145
+ * signal) and agent_resolvable (no human at all).
146
+ *
147
+ * Daemon-local literals for the same reason as OPERATOR_HOLD_DISPOSITIONS above:
148
+ * a bare `@telora/*` value import in a query module pulled into a mocked
149
+ * node:test fails to resolve under the module-mock loader. The canonical enum is
150
+ * packages/daemon-core/src/disposition.ts and the DB CHECK on
151
+ * agent_escalations.disposition is the real constraint; these strings must stay
152
+ * in sync with it.
153
+ */
154
+ export declare const DIRECTED_HOLD_DISPOSITIONS: readonly string[];
155
+ /**
156
+ * Returns the OPEN (pending|in_review) DIRECTED-hold escalation anchored to the
157
+ * given delivery, or null when none is open. Disposition-keyed sibling of
158
+ * findOpenOperatorHoldForDelivery, keyed on DIRECTED_HOLD_DISPOSITIONS
159
+ * (needs_intent / needs_clarification) instead of the operator-hold set.
160
+ *
161
+ * This is the vocabulary the completion-event no-progress guard previously
162
+ * lacked: a team parked on its own unanswered directed question could not be
163
+ * told apart from a team that has stalled, so the scope-coverage guard counted
164
+ * the wait as no-progress, re-engaged the team (real model spend), and
165
+ * eventually filed a team_failure ON TOP of the question.
166
+ *
167
+ * FAIL DIRECTION IS THE OPPOSITE of findOpenOperatorHoldForDelivery. The
168
+ * operator-hold gate's CALLER fails CLOSED (a lookup error => held) because a
169
+ * missed hold lets an operator-blocked delivery reach done. HERE the consuming
170
+ * guard must fail OPEN: a lookup error must NOT suppress a genuine stall
171
+ * escalation, so the caller treats an error as "not blocked". This function
172
+ * still reports what it finds and THROWS on a hard API error; the fail-open
173
+ * decision lives at the call site (completion/event-phases.computeCompletionFacts),
174
+ * which catches and defaults to not-blocked.
175
+ */
176
+ export declare function findOpenDirectedHoldForDelivery(deliveryId: string, focusId?: string): Promise<OperatorHoldEscalation | null>;
177
+ //# sourceMappingURL=holds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holds.d.ts","sourceRoot":"","sources":["../../src/queries/holds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAqC,CAAC;AAE/F;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAGvD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAEzD,CAAC;AAEF,mFAAmF;AACnF,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,+BAA+B,CACnD,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CASxC;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAGvD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,+BAA+B,CACnD,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAExC"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Delivery hold-lookup queries.
3
+ *
4
+ * "Is something holding this delivery out of done, and what?" -- the escalation
5
+ * side of that question. Two disposition-keyed families live here:
6
+ *
7
+ * - OPERATOR holds (needs_operator / external_wait): a human or an external
8
+ * party must act before the declared work counts as real. Fails CLOSED at
9
+ * its call site.
10
+ * - DIRECTED holds (needs_intent / needs_clarification): an unanswered
11
+ * question the daemon reads back to the asking agent. Fails OPEN at its
12
+ * call site.
13
+ *
14
+ * Plus SELF_REPORT_STALL_HOLD_KINDS: the kinds that are machine-filed alarms
15
+ * ABOUT a delivery's own cycling, excluded from the operator predicate so an
16
+ * alarm cannot constitute the condition it reports.
17
+ *
18
+ * Extracted from queries/issues.ts to keep that file under the daemon
19
+ * file-size limit -- the self-referential-alarm fix pushed it to 844. Bodies
20
+ * verbatim; issues.ts re-exports this surface so existing importers are
21
+ * unaffected.
22
+ *
23
+ * @module queries/holds
24
+ */
25
+ import { callApi } from './shared.js';
26
+ /** Escalation statuses that count as OPEN for every hold lookup here. */
27
+ export const OPEN_ESCALATION_STATUSES = new Set(['pending', 'in_review']);
28
+ /**
29
+ * The escalation dispositions that mean "a human operator or an external party
30
+ * must act before this delivery's declared work can be considered real":
31
+ * needs_operator (operator/infra/security action) and external_wait (blocked on
32
+ * a third party). Distinct from needs_intent / needs_clarification (a steering
33
+ * question, not a blocked-on-reality signal) and agent_resolvable (no human at
34
+ * all). Keyed on the DISPOSITION axis so ANY escalation kind carrying one of
35
+ * these holds its delivery -- the gate must not enumerate kinds.
36
+ *
37
+ * Declared as daemon-local string literals (not imported from @telora/daemon-core's
38
+ * ESCALATION_DISPOSITIONS) on purpose, mirroring MERGE_CONFLICT_ESCALATION_KIND
39
+ * below: a bare `@telora/*` VALUE import in a query module pulled into a mocked
40
+ * node:test fails to resolve under the module-mock loader (the daemon-local-copy
41
+ * rule). The canonical enum lives in packages/daemon-core/src/disposition.ts and
42
+ * the DB CHECK on agent_escalations.disposition is the real constraint; these
43
+ * strings must stay in sync with it.
44
+ */
45
+ export const OPERATOR_HOLD_DISPOSITIONS = [
46
+ 'needs_operator',
47
+ 'external_wait',
48
+ ];
49
+ /**
50
+ * escalation_kind discriminators that are SELF-REFERENTIAL stall alarms: a
51
+ * machine-filed escalation ABOUT a delivery's own cycling, which must NOT be
52
+ * allowed to satisfy the operator-hold predicate that holds that same delivery.
53
+ *
54
+ * The fixpoint this removes (observed 2026-07-26, delivery 50131436, escalations
55
+ * 96262dfa -> 43c4dade): the verify_failed cap detector files
56
+ * verify_gate_unclearable (disposition needs_operator, anchored to the delivery)
57
+ * when iteration_count exceeds the cap. findOpenOperatorHoldForDelivery matched
58
+ * on disposition ONLY, so that alarm satisfied the very hold predicate it was
59
+ * raised about; the delivery was held out of `done`; `done` is the only
60
+ * non-cancelled terminal that makes exceedsVerifyFailedCap stop firing; and
61
+ * iteration_count is monotonic -- so the alarm blocked the only exit that would
62
+ * silence it, and resolving one let the detector file the next on the following
63
+ * tick.
64
+ *
65
+ * ENUMERATION -- every machine-filed, delivery-anchored needs_operator kind, and
66
+ * whether it is a genuine hold or a self-referential stall alarm. The exclusion
67
+ * criterion is narrow and precise: exclude a kind IFF (a) it re-arms while the
68
+ * delivery is non-terminal AND (b) its ONLY silencing is the delivery reaching
69
+ * the terminal state the hold blocks. A kind that describes external reality an
70
+ * operator must change, or that is filed once and silenced by operator
71
+ * resolution, is a GENUINE hold and stays.
72
+ *
73
+ * verify_gate_unclearable (stall-detectors.ts) -- SELF-REFERENTIAL. Trigger
74
+ * (iteration_count) is monotonic and re-arms every tick while non-terminal;
75
+ * silenced only by done/cancelled, which the hold blocks. EXCLUDE.
76
+ * verify_evidence_unavailable (verification-feedback.ts) -- self-REPORT of an
77
+ * instrument fault, but filed ONCE per delivery (idempotent, never re-armed)
78
+ * and silenced by operator resolution, not by `done`. It also already holds
79
+ * the delivery via its OWN gate_state.blocking guard, so it does not lean on
80
+ * this predicate. Not a fixpoint -> KEEP as a hold.
81
+ * schema_drift_blocked (listener-auto-advance.ts) -- operator must apply a
82
+ * migration (external reality). KEEP.
83
+ * advance_blocked (delivery-advance-block.ts) -- dirty worktree / lockfile
84
+ * state an operator or agent must resolve. KEEP.
85
+ * cd_push_failed (ci-escalation.ts) / ci_run_red (ci-sensor-loop.ts) --
86
+ * external CI/CD state. KEEP.
87
+ * propagation_stale (staleness-sensor.ts) -- external propagation state. KEEP.
88
+ *
89
+ * (Focus-anchored kinds -- merge_conflict, merge_refused_dirty,
90
+ * review_window_stalled, stuck_focus_branch -- are never matched by
91
+ * findOpenOperatorHoldForDelivery, which keys on deliveryId, so they need no
92
+ * exclusion here.)
93
+ *
94
+ * Daemon-local literal for the same reason as OPERATOR_HOLD_DISPOSITIONS above:
95
+ * a bare `@telora/*` value import mis-resolves under the node:test module-mock
96
+ * loader, and importing stall-detectors.VERIFY_GATE_UNCLEARABLE_KIND would also
97
+ * form an import cycle (stall-detectors imports from this module). Keep in sync
98
+ * with stall-detectors.VERIFY_GATE_UNCLEARABLE_KIND and the DB CHECK.
99
+ */
100
+ export const SELF_REPORT_STALL_HOLD_KINDS = [
101
+ 'verify_gate_unclearable',
102
+ ];
103
+ /**
104
+ * Returns the OPEN (pending|in_review) operator-hold escalation anchored to the
105
+ * given delivery, or null when none is open.
106
+ *
107
+ * DISPOSITION-keyed sibling of hasOpenEscalationForDelivery (which is KIND-keyed):
108
+ * it matches ANY escalation_kind whose disposition is in OPERATOR_HOLD_DISPOSITIONS
109
+ * (needs_operator / external_wait). This is the vocabulary the verify->done gate
110
+ * previously lacked -- an operator blocked ON a delivery (e.g. "the host restore
111
+ * was NOT executed") could not hold that delivery out of done, so a clean review
112
+ * auto-approved it. Returning the matching row (id + kind + disposition), not a
113
+ * bare boolean, lets the gate write the block into the delivery's gate_state.
114
+ *
115
+ * Matches on the typed delivery_id + disposition COLUMNS in preference to the
116
+ * metadata bag, with a metadata fallback (metadata.deliveryId / metadata.disposition)
117
+ * for rows already open at deploy time. The status is re-checked client-side as
118
+ * defense-in-depth against a deploy-lagged edge fn returning resolved rows.
119
+ *
120
+ * escalation_list has NO server-side delivery_id filter, so the delivery match is
121
+ * applied client-side over the org's open rows. Pass `focusId` to narrow the page
122
+ * server-side (the same busy-org paging concern hasOpenWorktreeDirtyEscalation
123
+ * addresses); omit it and the lookup reads the newest 500 open org rows.
124
+ *
125
+ * FAIL-CLOSED is the CALLER's responsibility. This function reports what it finds
126
+ * and THROWS on a hard API error. The verify->done gate that consumes it exists
127
+ * precisely to fail closed, so it must treat a lookup error as "held" -- the
128
+ * opposite of the other escalation lookups (dedup/auto-close), which fail OPEN
129
+ * because a spurious park is worse than a missed dedup. Here a missed hold lets an
130
+ * operator-blocked delivery reach done, which is the failure this gate prevents.
131
+ */
132
+ export async function findOpenOperatorHoldForDelivery(deliveryId, focusId) {
133
+ return findOpenHoldForDelivery(deliveryId, OPERATOR_HOLD_DISPOSITIONS, focusId,
134
+ // A machine-filed alarm ABOUT this delivery's own cycling must not satisfy
135
+ // the predicate that holds it -- see SELF_REPORT_STALL_HOLD_KINDS.
136
+ new Set(SELF_REPORT_STALL_HOLD_KINDS));
137
+ }
138
+ /**
139
+ * Boolean convenience over findOpenOperatorHoldForDelivery for call sites that
140
+ * only need to know whether the hold exists (not which escalation it is).
141
+ */
142
+ export async function hasOpenOperatorHoldForDelivery(deliveryId, focusId) {
143
+ return (await findOpenOperatorHoldForDelivery(deliveryId, focusId)) !== null;
144
+ }
145
+ /**
146
+ * The escalation dispositions that mean "a human must STEER before this team's
147
+ * work can proceed": needs_intent (scope/direction/priority) and
148
+ * needs_clarification (ambiguity to resolve). These are exactly the two the
149
+ * escalation tool documents as answerable via the `answer` field -- a DIRECTED
150
+ * question the daemon reads back to the asking agent, distinct from the
151
+ * operator-hold dispositions (needs_operator / external_wait, a blocked-on-reality
152
+ * signal) and agent_resolvable (no human at all).
153
+ *
154
+ * Daemon-local literals for the same reason as OPERATOR_HOLD_DISPOSITIONS above:
155
+ * a bare `@telora/*` value import in a query module pulled into a mocked
156
+ * node:test fails to resolve under the module-mock loader. The canonical enum is
157
+ * packages/daemon-core/src/disposition.ts and the DB CHECK on
158
+ * agent_escalations.disposition is the real constraint; these strings must stay
159
+ * in sync with it.
160
+ */
161
+ export const DIRECTED_HOLD_DISPOSITIONS = [
162
+ 'needs_intent',
163
+ 'needs_clarification',
164
+ ];
165
+ /**
166
+ * Returns the OPEN (pending|in_review) DIRECTED-hold escalation anchored to the
167
+ * given delivery, or null when none is open. Disposition-keyed sibling of
168
+ * findOpenOperatorHoldForDelivery, keyed on DIRECTED_HOLD_DISPOSITIONS
169
+ * (needs_intent / needs_clarification) instead of the operator-hold set.
170
+ *
171
+ * This is the vocabulary the completion-event no-progress guard previously
172
+ * lacked: a team parked on its own unanswered directed question could not be
173
+ * told apart from a team that has stalled, so the scope-coverage guard counted
174
+ * the wait as no-progress, re-engaged the team (real model spend), and
175
+ * eventually filed a team_failure ON TOP of the question.
176
+ *
177
+ * FAIL DIRECTION IS THE OPPOSITE of findOpenOperatorHoldForDelivery. The
178
+ * operator-hold gate's CALLER fails CLOSED (a lookup error => held) because a
179
+ * missed hold lets an operator-blocked delivery reach done. HERE the consuming
180
+ * guard must fail OPEN: a lookup error must NOT suppress a genuine stall
181
+ * escalation, so the caller treats an error as "not blocked". This function
182
+ * still reports what it finds and THROWS on a hard API error; the fail-open
183
+ * decision lives at the call site (completion/event-phases.computeCompletionFacts),
184
+ * which catches and defaults to not-blocked.
185
+ */
186
+ export async function findOpenDirectedHoldForDelivery(deliveryId, focusId) {
187
+ return findOpenHoldForDelivery(deliveryId, DIRECTED_HOLD_DISPOSITIONS, focusId);
188
+ }
189
+ /**
190
+ * Shared body for the disposition-keyed open-hold lookups
191
+ * (findOpenOperatorHoldForDelivery / findOpenDirectedHoldForDelivery). Reads the
192
+ * newest 500 open (pending|in_review) escalations -- narrowed server-side by
193
+ * focusId when supplied, the same busy-org paging concern the sibling lookups
194
+ * address -- and returns the first whose delivery matches (typed delivery_id
195
+ * COLUMN preferred, metadata.deliveryId fallback for rows open at deploy time)
196
+ * AND whose disposition (typed column preferred, metadata fallback) is in the
197
+ * given set. Status is re-checked client-side as defense-in-depth against a
198
+ * deploy-lagged edge fn returning resolved rows. THROWS on a hard API error;
199
+ * fail-open/closed is the CALLER's choice.
200
+ *
201
+ * `excludeKinds` (optional) drops any otherwise-matching escalation whose
202
+ * escalation_kind is in the set BEFORE it is returned -- used by the operator-hold
203
+ * lookup to skip self-referential stall alarms (SELF_REPORT_STALL_HOLD_KINDS) so an
204
+ * alarm about a delivery's own cycling cannot hold that delivery. The kind is read
205
+ * from the typed column with a metadata.kind fallback (parity with the disposition
206
+ * fallback), so an excluded kind is dropped regardless of column promotion.
207
+ */
208
+ async function findOpenHoldForDelivery(deliveryId, dispositions, focusId, excludeKinds) {
209
+ const holdSet = new Set(dispositions);
210
+ const fields = { statuses: ['pending', 'in_review'] };
211
+ if (focusId)
212
+ fields.focusId = focusId;
213
+ const result = await callApi('escalation_list', { fields, limit: 500 });
214
+ for (const e of result.escalations ?? []) {
215
+ if (e.status && !OPEN_ESCALATION_STATUSES.has(e.status))
216
+ continue;
217
+ const meta = e.metadata ?? null;
218
+ const disposition = (typeof e.disposition === 'string' ? e.disposition : null) ??
219
+ (typeof meta?.disposition === 'string' ? meta.disposition : null);
220
+ const matchedDelivery = e.deliveryId === deliveryId || meta?.deliveryId === deliveryId;
221
+ if (matchedDelivery && disposition !== null && holdSet.has(disposition)) {
222
+ const kind = (typeof e.escalationKind === 'string' ? e.escalationKind : null) ??
223
+ (typeof meta?.kind === 'string' ? meta.kind : null);
224
+ // A self-referential stall alarm about this delivery must not hold it.
225
+ if (excludeKinds && kind !== null && excludeKinds.has(kind))
226
+ continue;
227
+ return { id: e.id, escalationKind: e.escalationKind ?? null, disposition };
228
+ }
229
+ }
230
+ return null;
231
+ }
232
+ //# sourceMappingURL=holds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holds.js","sourceRoot":"","sources":["../../src/queries/holds.ts"],"names":[],"mappings":"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"}
@@ -147,104 +147,9 @@ export declare function hasOpenTeamFailureEscalation(focusId: string): Promise<b
147
147
  * polls files exactly one open escalation instead of one per tick.
148
148
  */
149
149
  export declare function hasOpenEscalationForDelivery(deliveryId: string, escalationKind: string): Promise<boolean>;
150
- /**
151
- * The escalation dispositions that mean "a human operator or an external party
152
- * must act before this delivery's declared work can be considered real":
153
- * needs_operator (operator/infra/security action) and external_wait (blocked on
154
- * a third party). Distinct from needs_intent / needs_clarification (a steering
155
- * question, not a blocked-on-reality signal) and agent_resolvable (no human at
156
- * all). Keyed on the DISPOSITION axis so ANY escalation kind carrying one of
157
- * these holds its delivery -- the gate must not enumerate kinds.
158
- *
159
- * Declared as daemon-local string literals (not imported from @telora/daemon-core's
160
- * ESCALATION_DISPOSITIONS) on purpose, mirroring MERGE_CONFLICT_ESCALATION_KIND
161
- * below: a bare `@telora/*` VALUE import in a query module pulled into a mocked
162
- * node:test fails to resolve under the module-mock loader (the daemon-local-copy
163
- * rule). The canonical enum lives in packages/daemon-core/src/disposition.ts and
164
- * the DB CHECK on agent_escalations.disposition is the real constraint; these
165
- * strings must stay in sync with it.
166
- */
167
- export declare const OPERATOR_HOLD_DISPOSITIONS: readonly string[];
168
- /** The open operator-hold escalation a delivery is blocked on (for gate_state). */
169
- export interface OperatorHoldEscalation {
170
- id: string;
171
- escalationKind: string | null;
172
- disposition: string;
173
- }
174
- /**
175
- * Returns the OPEN (pending|in_review) operator-hold escalation anchored to the
176
- * given delivery, or null when none is open.
177
- *
178
- * DISPOSITION-keyed sibling of hasOpenEscalationForDelivery (which is KIND-keyed):
179
- * it matches ANY escalation_kind whose disposition is in OPERATOR_HOLD_DISPOSITIONS
180
- * (needs_operator / external_wait). This is the vocabulary the verify->done gate
181
- * previously lacked -- an operator blocked ON a delivery (e.g. "the host restore
182
- * was NOT executed") could not hold that delivery out of done, so a clean review
183
- * auto-approved it. Returning the matching row (id + kind + disposition), not a
184
- * bare boolean, lets the gate write the block into the delivery's gate_state.
185
- *
186
- * Matches on the typed delivery_id + disposition COLUMNS in preference to the
187
- * metadata bag, with a metadata fallback (metadata.deliveryId / metadata.disposition)
188
- * for rows already open at deploy time. The status is re-checked client-side as
189
- * defense-in-depth against a deploy-lagged edge fn returning resolved rows.
190
- *
191
- * escalation_list has NO server-side delivery_id filter, so the delivery match is
192
- * applied client-side over the org's open rows. Pass `focusId` to narrow the page
193
- * server-side (the same busy-org paging concern hasOpenWorktreeDirtyEscalation
194
- * addresses); omit it and the lookup reads the newest 500 open org rows.
195
- *
196
- * FAIL-CLOSED is the CALLER's responsibility. This function reports what it finds
197
- * and THROWS on a hard API error. The verify->done gate that consumes it exists
198
- * precisely to fail closed, so it must treat a lookup error as "held" -- the
199
- * opposite of the other escalation lookups (dedup/auto-close), which fail OPEN
200
- * because a spurious park is worse than a missed dedup. Here a missed hold lets an
201
- * operator-blocked delivery reach done, which is the failure this gate prevents.
202
- */
203
- export declare function findOpenOperatorHoldForDelivery(deliveryId: string, focusId?: string): Promise<OperatorHoldEscalation | null>;
204
- /**
205
- * Boolean convenience over findOpenOperatorHoldForDelivery for call sites that
206
- * only need to know whether the hold exists (not which escalation it is).
207
- */
208
- export declare function hasOpenOperatorHoldForDelivery(deliveryId: string, focusId?: string): Promise<boolean>;
209
- /**
210
- * The escalation dispositions that mean "a human must STEER before this team's
211
- * work can proceed": needs_intent (scope/direction/priority) and
212
- * needs_clarification (ambiguity to resolve). These are exactly the two the
213
- * escalation tool documents as answerable via the `answer` field -- a DIRECTED
214
- * question the daemon reads back to the asking agent, distinct from the
215
- * operator-hold dispositions (needs_operator / external_wait, a blocked-on-reality
216
- * signal) and agent_resolvable (no human at all).
217
- *
218
- * Daemon-local literals for the same reason as OPERATOR_HOLD_DISPOSITIONS above:
219
- * a bare `@telora/*` value import in a query module pulled into a mocked
220
- * node:test fails to resolve under the module-mock loader. The canonical enum is
221
- * packages/daemon-core/src/disposition.ts and the DB CHECK on
222
- * agent_escalations.disposition is the real constraint; these strings must stay
223
- * in sync with it.
224
- */
225
- export declare const DIRECTED_HOLD_DISPOSITIONS: readonly string[];
226
- /**
227
- * Returns the OPEN (pending|in_review) DIRECTED-hold escalation anchored to the
228
- * given delivery, or null when none is open. Disposition-keyed sibling of
229
- * findOpenOperatorHoldForDelivery, keyed on DIRECTED_HOLD_DISPOSITIONS
230
- * (needs_intent / needs_clarification) instead of the operator-hold set.
231
- *
232
- * This is the vocabulary the completion-event no-progress guard previously
233
- * lacked: a team parked on its own unanswered directed question could not be
234
- * told apart from a team that has stalled, so the scope-coverage guard counted
235
- * the wait as no-progress, re-engaged the team (real model spend), and
236
- * eventually filed a team_failure ON TOP of the question.
237
- *
238
- * FAIL DIRECTION IS THE OPPOSITE of findOpenOperatorHoldForDelivery. The
239
- * operator-hold gate's CALLER fails CLOSED (a lookup error => held) because a
240
- * missed hold lets an operator-blocked delivery reach done. HERE the consuming
241
- * guard must fail OPEN: a lookup error must NOT suppress a genuine stall
242
- * escalation, so the caller treats an error as "not blocked". This function
243
- * still reports what it finds and THROWS on a hard API error; the fail-open
244
- * decision lives at the call site (completion/event-phases.computeCompletionFacts),
245
- * which catches and defaults to not-blocked.
246
- */
247
- export declare function findOpenDirectedHoldForDelivery(deliveryId: string, focusId?: string): Promise<OperatorHoldEscalation | null>;
150
+ import { OPERATOR_HOLD_DISPOSITIONS, SELF_REPORT_STALL_HOLD_KINDS, DIRECTED_HOLD_DISPOSITIONS, findOpenOperatorHoldForDelivery, hasOpenOperatorHoldForDelivery, findOpenDirectedHoldForDelivery, type OperatorHoldEscalation } from './holds.js';
151
+ export { OPERATOR_HOLD_DISPOSITIONS, SELF_REPORT_STALL_HOLD_KINDS, DIRECTED_HOLD_DISPOSITIONS, findOpenOperatorHoldForDelivery, hasOpenOperatorHoldForDelivery, findOpenDirectedHoldForDelivery, };
152
+ export type { OperatorHoldEscalation };
248
153
  /**
249
154
  * escalation_kind discriminators for the two focus-merge worktree-dirty
250
155
  * classes. Declared as daemon-local string constants (not imported from
@@ -382,5 +287,4 @@ export declare function markEscalationResolved(escalationId: string, resolutionN
382
287
  * Create an issue on a delivery (for create_issue trigger action).
383
288
  */
384
289
  export declare function createIssue(deliveryId: string, title: string, description: string | null, issueType: string, priority: string | null): Promise<string>;
385
- export {};
386
290
  //# sourceMappingURL=issues.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/queries/issues.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/queries/issues.ts"],"names":[],"mappings":"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"}
@@ -156,141 +156,10 @@ export async function hasOpenEscalationForDelivery(deliveryId, escalationKind) {
156
156
  return meta?.kind === escalationKind && meta?.deliveryId === deliveryId;
157
157
  });
158
158
  }
159
- /**
160
- * The escalation dispositions that mean "a human operator or an external party
161
- * must act before this delivery's declared work can be considered real":
162
- * needs_operator (operator/infra/security action) and external_wait (blocked on
163
- * a third party). Distinct from needs_intent / needs_clarification (a steering
164
- * question, not a blocked-on-reality signal) and agent_resolvable (no human at
165
- * all). Keyed on the DISPOSITION axis so ANY escalation kind carrying one of
166
- * these holds its delivery -- the gate must not enumerate kinds.
167
- *
168
- * Declared as daemon-local string literals (not imported from @telora/daemon-core's
169
- * ESCALATION_DISPOSITIONS) on purpose, mirroring MERGE_CONFLICT_ESCALATION_KIND
170
- * below: a bare `@telora/*` VALUE import in a query module pulled into a mocked
171
- * node:test fails to resolve under the module-mock loader (the daemon-local-copy
172
- * rule). The canonical enum lives in packages/daemon-core/src/disposition.ts and
173
- * the DB CHECK on agent_escalations.disposition is the real constraint; these
174
- * strings must stay in sync with it.
175
- */
176
- export const OPERATOR_HOLD_DISPOSITIONS = [
177
- 'needs_operator',
178
- 'external_wait',
179
- ];
180
- /**
181
- * Returns the OPEN (pending|in_review) operator-hold escalation anchored to the
182
- * given delivery, or null when none is open.
183
- *
184
- * DISPOSITION-keyed sibling of hasOpenEscalationForDelivery (which is KIND-keyed):
185
- * it matches ANY escalation_kind whose disposition is in OPERATOR_HOLD_DISPOSITIONS
186
- * (needs_operator / external_wait). This is the vocabulary the verify->done gate
187
- * previously lacked -- an operator blocked ON a delivery (e.g. "the host restore
188
- * was NOT executed") could not hold that delivery out of done, so a clean review
189
- * auto-approved it. Returning the matching row (id + kind + disposition), not a
190
- * bare boolean, lets the gate write the block into the delivery's gate_state.
191
- *
192
- * Matches on the typed delivery_id + disposition COLUMNS in preference to the
193
- * metadata bag, with a metadata fallback (metadata.deliveryId / metadata.disposition)
194
- * for rows already open at deploy time. The status is re-checked client-side as
195
- * defense-in-depth against a deploy-lagged edge fn returning resolved rows.
196
- *
197
- * escalation_list has NO server-side delivery_id filter, so the delivery match is
198
- * applied client-side over the org's open rows. Pass `focusId` to narrow the page
199
- * server-side (the same busy-org paging concern hasOpenWorktreeDirtyEscalation
200
- * addresses); omit it and the lookup reads the newest 500 open org rows.
201
- *
202
- * FAIL-CLOSED is the CALLER's responsibility. This function reports what it finds
203
- * and THROWS on a hard API error. The verify->done gate that consumes it exists
204
- * precisely to fail closed, so it must treat a lookup error as "held" -- the
205
- * opposite of the other escalation lookups (dedup/auto-close), which fail OPEN
206
- * because a spurious park is worse than a missed dedup. Here a missed hold lets an
207
- * operator-blocked delivery reach done, which is the failure this gate prevents.
208
- */
209
- export async function findOpenOperatorHoldForDelivery(deliveryId, focusId) {
210
- return findOpenHoldForDelivery(deliveryId, OPERATOR_HOLD_DISPOSITIONS, focusId);
211
- }
212
- /**
213
- * Boolean convenience over findOpenOperatorHoldForDelivery for call sites that
214
- * only need to know whether the hold exists (not which escalation it is).
215
- */
216
- export async function hasOpenOperatorHoldForDelivery(deliveryId, focusId) {
217
- return (await findOpenOperatorHoldForDelivery(deliveryId, focusId)) !== null;
218
- }
219
- /**
220
- * The escalation dispositions that mean "a human must STEER before this team's
221
- * work can proceed": needs_intent (scope/direction/priority) and
222
- * needs_clarification (ambiguity to resolve). These are exactly the two the
223
- * escalation tool documents as answerable via the `answer` field -- a DIRECTED
224
- * question the daemon reads back to the asking agent, distinct from the
225
- * operator-hold dispositions (needs_operator / external_wait, a blocked-on-reality
226
- * signal) and agent_resolvable (no human at all).
227
- *
228
- * Daemon-local literals for the same reason as OPERATOR_HOLD_DISPOSITIONS above:
229
- * a bare `@telora/*` value import in a query module pulled into a mocked
230
- * node:test fails to resolve under the module-mock loader. The canonical enum is
231
- * packages/daemon-core/src/disposition.ts and the DB CHECK on
232
- * agent_escalations.disposition is the real constraint; these strings must stay
233
- * in sync with it.
234
- */
235
- export const DIRECTED_HOLD_DISPOSITIONS = [
236
- 'needs_intent',
237
- 'needs_clarification',
238
- ];
239
- /**
240
- * Returns the OPEN (pending|in_review) DIRECTED-hold escalation anchored to the
241
- * given delivery, or null when none is open. Disposition-keyed sibling of
242
- * findOpenOperatorHoldForDelivery, keyed on DIRECTED_HOLD_DISPOSITIONS
243
- * (needs_intent / needs_clarification) instead of the operator-hold set.
244
- *
245
- * This is the vocabulary the completion-event no-progress guard previously
246
- * lacked: a team parked on its own unanswered directed question could not be
247
- * told apart from a team that has stalled, so the scope-coverage guard counted
248
- * the wait as no-progress, re-engaged the team (real model spend), and
249
- * eventually filed a team_failure ON TOP of the question.
250
- *
251
- * FAIL DIRECTION IS THE OPPOSITE of findOpenOperatorHoldForDelivery. The
252
- * operator-hold gate's CALLER fails CLOSED (a lookup error => held) because a
253
- * missed hold lets an operator-blocked delivery reach done. HERE the consuming
254
- * guard must fail OPEN: a lookup error must NOT suppress a genuine stall
255
- * escalation, so the caller treats an error as "not blocked". This function
256
- * still reports what it finds and THROWS on a hard API error; the fail-open
257
- * decision lives at the call site (completion/event-phases.computeCompletionFacts),
258
- * which catches and defaults to not-blocked.
259
- */
260
- export async function findOpenDirectedHoldForDelivery(deliveryId, focusId) {
261
- return findOpenHoldForDelivery(deliveryId, DIRECTED_HOLD_DISPOSITIONS, focusId);
262
- }
263
- /**
264
- * Shared body for the disposition-keyed open-hold lookups
265
- * (findOpenOperatorHoldForDelivery / findOpenDirectedHoldForDelivery). Reads the
266
- * newest 500 open (pending|in_review) escalations -- narrowed server-side by
267
- * focusId when supplied, the same busy-org paging concern the sibling lookups
268
- * address -- and returns the first whose delivery matches (typed delivery_id
269
- * COLUMN preferred, metadata.deliveryId fallback for rows open at deploy time)
270
- * AND whose disposition (typed column preferred, metadata fallback) is in the
271
- * given set. Status is re-checked client-side as defense-in-depth against a
272
- * deploy-lagged edge fn returning resolved rows. THROWS on a hard API error;
273
- * fail-open/closed is the CALLER's choice.
274
- */
275
- async function findOpenHoldForDelivery(deliveryId, dispositions, focusId) {
276
- const holdSet = new Set(dispositions);
277
- const fields = { statuses: ['pending', 'in_review'] };
278
- if (focusId)
279
- fields.focusId = focusId;
280
- const result = await callApi('escalation_list', { fields, limit: 500 });
281
- for (const e of result.escalations ?? []) {
282
- if (e.status && !OPEN_ESCALATION_STATUSES.has(e.status))
283
- continue;
284
- const meta = e.metadata ?? null;
285
- const disposition = (typeof e.disposition === 'string' ? e.disposition : null) ??
286
- (typeof meta?.disposition === 'string' ? meta.disposition : null);
287
- const matchedDelivery = e.deliveryId === deliveryId || meta?.deliveryId === deliveryId;
288
- if (matchedDelivery && disposition !== null && holdSet.has(disposition)) {
289
- return { id: e.id, escalationKind: e.escalationKind ?? null, disposition };
290
- }
291
- }
292
- return null;
293
- }
159
+ import { OPEN_ESCALATION_STATUSES, OPERATOR_HOLD_DISPOSITIONS, SELF_REPORT_STALL_HOLD_KINDS, DIRECTED_HOLD_DISPOSITIONS, findOpenOperatorHoldForDelivery, hasOpenOperatorHoldForDelivery, findOpenDirectedHoldForDelivery, } from './holds.js';
160
+ // The delivery hold-lookup family moved to queries/holds.ts (file-size limit).
161
+ // Re-exported here so every existing importer of queries/issues.js keeps working.
162
+ export { OPERATOR_HOLD_DISPOSITIONS, SELF_REPORT_STALL_HOLD_KINDS, DIRECTED_HOLD_DISPOSITIONS, findOpenOperatorHoldForDelivery, hasOpenOperatorHoldForDelivery, findOpenDirectedHoldForDelivery, };
294
163
  /**
295
164
  * escalation_kind discriminators for the two focus-merge worktree-dirty
296
165
  * classes. Declared as daemon-local string constants (not imported from
@@ -320,8 +189,6 @@ export const WORKTREE_DIRTY_ESCALATION_KINDS = [
320
189
  MERGE_CONFLICT_ESCALATION_KIND,
321
190
  MERGE_REFUSED_DIRTY_ESCALATION_KIND,
322
191
  ];
323
- /** Open escalation statuses (anything not yet resolved/dismissed). */
324
- const OPEN_ESCALATION_STATUSES = new Set(['pending', 'in_review']);
325
192
  /**
326
193
  * True when `e` is an OPEN worktree-dirty-class escalation for `focusId` whose
327
194
  * kind is in `kindSet`. Shared by hasOpenWorktreeDirtyEscalation (dedup) and
@@ -1 +1 @@
1
- {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/queries/issues.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/queries/issues.ts"],"names":[],"mappings":"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"}
@@ -63,11 +63,40 @@ export interface VerifyFailedCapDeps {
63
63
  cap?: number;
64
64
  }
65
65
  /**
66
- * Pure decision: does this delivery exceed the verify_failed re-code cap?
67
- * A terminal delivery (done/cancelled) is never escalated -- it has stopped
68
- * cycling. Exported for direct unit testing.
66
+ * True when `gateState.blocking` carries at least one guard verdict -- i.e. a
67
+ * guard is ACTUALLY rejecting the work right now.
68
+ *
69
+ * Only the `blocking` array counts. operatorHold / externalHold / shortfallProposalIds
70
+ * are carried OUTSIDE `blocking` (queries/deliveries.ts DeliveryGateState) because a
71
+ * hold is not a guard verdict. Treating operatorHold as a block here would
72
+ * reintroduce the very fixpoint the sibling operator-hold exclusion removes: the
73
+ * verify_gate_unclearable alarm writes gate_state with `blocking: []` + a populated
74
+ * operatorHold, and if that counted as "still blocking" the detector would keep
75
+ * re-firing on its own alarm. So the guard-verdict array is the sole live-block
76
+ * signal. (verify_evidence_unavailable DOES populate `blocking` with its own guard,
77
+ * but it consumes no iteration_count, so it can never by itself push over the cap.)
78
+ *
79
+ * Defensive over the `unknown` gate_state shape (FocusDeliveryInfo.gateState). Pure
80
+ * -- exported for direct unit testing.
81
+ */
82
+ export declare function hasLiveBlockingGuard(gateState: unknown): boolean;
83
+ /**
84
+ * Pure decision: does this delivery exceed the verify_failed re-code cap AND is a
85
+ * guard still actively rejecting it?
86
+ *
87
+ * iteration_count is a MONOTONIC proxy for "the gate keeps rejecting this work",
88
+ * but the condition it proxies is NOT monotonic: the counter never decreases while
89
+ * the gate can go clear. Keying only on the counter let the detector assert "the
90
+ * gate keeps rejecting the work" at a moment when gate_state.blocking was empty and
91
+ * the gate was rejecting nothing (observed 2026-07-26). So the counter remains the
92
+ * TRIGGER (it is the right bounded-loop signal -- a delivery that has re-coded N
93
+ * times is the thing worth escalating), but the LIVE gate must also show a blocking
94
+ * guard for the claim to be true by construction. A terminal delivery
95
+ * (done/cancelled) is never escalated -- it has stopped cycling.
96
+ *
97
+ * Exported for direct unit testing.
69
98
  */
70
- export declare function exceedsVerifyFailedCap(delivery: Pick<FocusDeliveryInfo, 'executionStatus' | 'iterationCount'>, cap: number): boolean;
99
+ export declare function exceedsVerifyFailedCap(delivery: Pick<FocusDeliveryInfo, 'executionStatus' | 'iterationCount' | 'gateState'>, cap: number): boolean;
71
100
  /**
72
101
  * Check ONE focus's ALREADY-FETCHED deliveries for any whose iteration_count
73
102
  * exceeds the verify_failed re-code cap, filing a verify_gate_unclearable
@@ -1 +1 @@
1
- {"version":3,"file":"stall-detectors.d.ts","sourceRoot":"","sources":["../src/stall-detectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAC;AAS7B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AACtE,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAcD,MAAM,WAAW,mBAAmB;IAClC,4BAA4B,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/F,gBAAgB,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACtG,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,EACvE,GAAG,EAAE,MAAM,GACV,OAAO,CAGT;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,iBAAiB,EAAE,EAC/B,IAAI,GAAE,mBAAgD,GACrD,OAAO,CAAC,IAAI,CAAC,CA0Df;AAID,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,gBAAgB,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACtG,mFAAmF;IACnF,oBAAoB,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,oEAAoE;IACpE,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,IAAI,GAAG,CAAC,MAAM,CAAC,CAMlD;AASD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,eAAe,EAAE,OAAO,EACxB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAMT;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,iBAAiB,EACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,gBAA0C,GAC/C,OAAO,CAAC,IAAI,CAAC,CA8Df"}
1
+ {"version":3,"file":"stall-detectors.d.ts","sourceRoot":"","sources":["../src/stall-detectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAC;AAS7B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AACtE,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgCD,MAAM,WAAW,mBAAmB;IAClC,4BAA4B,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/F,gBAAgB,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACtG,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAOD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAIhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,WAAW,CAAC,EACrF,GAAG,EAAE,MAAM,GACV,OAAO,CAIT;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,iBAAiB,EAAE,EAC/B,IAAI,GAAE,mBAAgD,GACrD,OAAO,CAAC,IAAI,CAAC,CAgEf;AAID,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,gBAAgB,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACtG,mFAAmF;IACnF,oBAAoB,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,oEAAoE;IACpE,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,IAAI,GAAG,CAAC,MAAM,CAAC,CAMlD;AASD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,eAAe,EAAE,OAAO,EACxB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAMT;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,iBAAiB,EACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,gBAA0C,GAC/C,OAAO,CAAC,IAAI,CAAC,CA8Df"}
@@ -64,19 +64,72 @@ function formatGateState(gateState) {
64
64
  return '(unserializable)';
65
65
  }
66
66
  }
67
+ /**
68
+ * The names of the guards currently in `gate_state.blocking`. Empty when the gate
69
+ * carries no live guard verdict. Used to make the escalation body assert only what
70
+ * the gate actually says (the detector only fires when this is non-empty).
71
+ */
72
+ function blockingGuardNames(gateState) {
73
+ if (gateState == null || typeof gateState !== 'object')
74
+ return [];
75
+ const blocking = gateState.blocking;
76
+ if (!Array.isArray(blocking))
77
+ return [];
78
+ return blocking
79
+ .map((b) => b && typeof b === 'object' && typeof b.guardName === 'string'
80
+ ? b.guardName
81
+ : null)
82
+ .filter((n) => n !== null);
83
+ }
67
84
  const defaultVerifyFailedCapDeps = {
68
85
  hasOpenEscalationForDelivery: defaultHasOpenEscalationForDelivery,
69
86
  createEscalation: defaultCreateEscalation,
70
87
  };
71
88
  /**
72
- * Pure decision: does this delivery exceed the verify_failed re-code cap?
73
- * A terminal delivery (done/cancelled) is never escalated -- it has stopped
74
- * cycling. Exported for direct unit testing.
89
+ * True when `gateState.blocking` carries at least one guard verdict -- i.e. a
90
+ * guard is ACTUALLY rejecting the work right now.
91
+ *
92
+ * Only the `blocking` array counts. operatorHold / externalHold / shortfallProposalIds
93
+ * are carried OUTSIDE `blocking` (queries/deliveries.ts DeliveryGateState) because a
94
+ * hold is not a guard verdict. Treating operatorHold as a block here would
95
+ * reintroduce the very fixpoint the sibling operator-hold exclusion removes: the
96
+ * verify_gate_unclearable alarm writes gate_state with `blocking: []` + a populated
97
+ * operatorHold, and if that counted as "still blocking" the detector would keep
98
+ * re-firing on its own alarm. So the guard-verdict array is the sole live-block
99
+ * signal. (verify_evidence_unavailable DOES populate `blocking` with its own guard,
100
+ * but it consumes no iteration_count, so it can never by itself push over the cap.)
101
+ *
102
+ * Defensive over the `unknown` gate_state shape (FocusDeliveryInfo.gateState). Pure
103
+ * -- exported for direct unit testing.
104
+ */
105
+ export function hasLiveBlockingGuard(gateState) {
106
+ if (gateState == null || typeof gateState !== 'object')
107
+ return false;
108
+ const blocking = gateState.blocking;
109
+ return Array.isArray(blocking) && blocking.length > 0;
110
+ }
111
+ /**
112
+ * Pure decision: does this delivery exceed the verify_failed re-code cap AND is a
113
+ * guard still actively rejecting it?
114
+ *
115
+ * iteration_count is a MONOTONIC proxy for "the gate keeps rejecting this work",
116
+ * but the condition it proxies is NOT monotonic: the counter never decreases while
117
+ * the gate can go clear. Keying only on the counter let the detector assert "the
118
+ * gate keeps rejecting the work" at a moment when gate_state.blocking was empty and
119
+ * the gate was rejecting nothing (observed 2026-07-26). So the counter remains the
120
+ * TRIGGER (it is the right bounded-loop signal -- a delivery that has re-coded N
121
+ * times is the thing worth escalating), but the LIVE gate must also show a blocking
122
+ * guard for the claim to be true by construction. A terminal delivery
123
+ * (done/cancelled) is never escalated -- it has stopped cycling.
124
+ *
125
+ * Exported for direct unit testing.
75
126
  */
76
127
  export function exceedsVerifyFailedCap(delivery, cap) {
77
128
  if (isStatusTerminal(delivery.executionStatus ?? ''))
78
129
  return false;
79
- return (delivery.iterationCount ?? 0) > cap;
130
+ if ((delivery.iterationCount ?? 0) <= cap)
131
+ return false;
132
+ return hasLiveBlockingGuard(delivery.gateState);
80
133
  }
81
134
  /**
82
135
  * Check ONE focus's ALREADY-FETCHED deliveries for any whose iteration_count
@@ -90,6 +143,12 @@ export async function checkVerifyFailedCapForFocus(ctx, deliveries, deps = defau
90
143
  for (const delivery of deliveries) {
91
144
  if (!exceedsVerifyFailedCap(delivery, cap))
92
145
  continue;
146
+ // Guaranteed non-empty by exceedsVerifyFailedCap -- the escalation asserts only
147
+ // what the live gate says (AC3), never an unconditional "gate keeps rejecting".
148
+ const guards = blockingGuardNames(delivery.gateState);
149
+ const guardClause = guards.length
150
+ ? `The verify gate is currently blocking on: ${guards.join(', ')}.`
151
+ : `The verify gate is currently blocking (see gate_state).`;
93
152
  try {
94
153
  if (await deps.hasOpenEscalationForDelivery(delivery.id, VERIFY_GATE_UNCLEARABLE_KIND)) {
95
154
  continue;
@@ -105,7 +164,7 @@ export async function checkVerifyFailedCapForFocus(ctx, deliveries, deps = defau
105
164
  escalationKind: VERIFY_GATE_UNCLEARABLE_KIND,
106
165
  description: `Delivery "${delivery.name}" has been through ${delivery.iterationCount ?? 0} ` +
107
166
  `verify_failed re-code cycles (cap ${cap}) without clearing the verify gate. ` +
108
- `The gate keeps rejecting the work -- the loop will not converge on its own.\n\n` +
167
+ `${guardClause} The loop will not converge on its own.\n\n` +
109
168
  `**Focus:** ${ctx.focusName}\n` +
110
169
  `**Focus ID:** ${ctx.focusId}\n` +
111
170
  `**Delivery:** "${delivery.name}" (${delivery.id})\n` +
@@ -1 +1 @@
1
- {"version":3,"file":"stall-detectors.js","sourceRoot":"","sources":["../src/stall-detectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stall-detectors.js","sourceRoot":"","sources":["../src/stall-detectors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telora/daemon",
3
- "version": "0.20.57",
3
+ "version": "0.20.60",
4
4
  "description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
5
5
  "type": "module",
6
6
  "bin": {
@@ -38,7 +38,7 @@
38
38
  "//testRunner": "Uses Node.js built-in test runner (node:test) via tsx for TypeScript support. The root package uses Vitest; this is a deliberate choice for the daemon package to avoid framework dependencies. See src/__tests__/ for test files.",
39
39
  "dependencies": {
40
40
  "@telora/daemon-core": "^0.2.73",
41
- "@telora/mcp-products": "^0.22.104",
41
+ "@telora/mcp-products": "^0.22.105",
42
42
  "commander": "^14.0.3",
43
43
  "yaml": "^2.4.0",
44
44
  "zod": "^4.3.6"