@telora/daemon 0.20.60 → 0.20.89

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 (163) hide show
  1. package/build-info.json +4 -3
  2. package/dist/ai-inspection-context.d.ts.map +1 -1
  3. package/dist/ai-inspection-context.js +4 -2
  4. package/dist/ai-inspection-context.js.map +1 -1
  5. package/dist/audit-phase.d.ts +12 -18
  6. package/dist/audit-phase.d.ts.map +1 -1
  7. package/dist/audit-phase.js +17 -60
  8. package/dist/audit-phase.js.map +1 -1
  9. package/dist/audit-prompt.d.ts +44 -0
  10. package/dist/audit-prompt.d.ts.map +1 -0
  11. package/dist/audit-prompt.js +198 -0
  12. package/dist/audit-prompt.js.map +1 -0
  13. package/dist/ci-sensor-loop.d.ts +38 -1
  14. package/dist/ci-sensor-loop.d.ts.map +1 -1
  15. package/dist/ci-sensor-loop.js +49 -5
  16. package/dist/ci-sensor-loop.js.map +1 -1
  17. package/dist/completion/completion-decision.d.ts +3 -29
  18. package/dist/completion/completion-decision.d.ts.map +1 -1
  19. package/dist/completion/completion-decision.js +3 -15
  20. package/dist/completion/completion-decision.js.map +1 -1
  21. package/dist/completion/event-phases.d.ts +0 -8
  22. package/dist/completion/event-phases.d.ts.map +1 -1
  23. package/dist/completion/event-phases.js +4 -52
  24. package/dist/completion/event-phases.js.map +1 -1
  25. package/dist/completion/event.d.ts +1 -11
  26. package/dist/completion/event.d.ts.map +1 -1
  27. package/dist/completion/event.js +1 -3
  28. package/dist/completion/event.js.map +1 -1
  29. package/dist/delivery-artifacts.d.ts.map +1 -1
  30. package/dist/delivery-artifacts.js +9 -8
  31. package/dist/delivery-artifacts.js.map +1 -1
  32. package/dist/delivery-reconciler.d.ts +3 -0
  33. package/dist/delivery-reconciler.d.ts.map +1 -1
  34. package/dist/delivery-reconciler.js +16 -0
  35. package/dist/delivery-reconciler.js.map +1 -1
  36. package/dist/focus-engine.d.ts.map +1 -1
  37. package/dist/focus-engine.js +12 -1
  38. package/dist/focus-engine.js.map +1 -1
  39. package/dist/focus-executor.d.ts.map +1 -1
  40. package/dist/focus-executor.js +4 -1
  41. package/dist/focus-executor.js.map +1 -1
  42. package/dist/focus-merge.d.ts.map +1 -1
  43. package/dist/focus-merge.js +37 -3
  44. package/dist/focus-merge.js.map +1 -1
  45. package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
  46. package/dist/focus-stage-lifecycle/wedge-watchdog.js +9 -1
  47. package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
  48. package/dist/listener-auto-advance.d.ts.map +1 -1
  49. package/dist/listener-auto-advance.js +58 -10
  50. package/dist/listener-auto-advance.js.map +1 -1
  51. package/dist/merge-back-loop.d.ts +8 -2
  52. package/dist/merge-back-loop.d.ts.map +1 -1
  53. package/dist/merge-back-loop.js +17 -11
  54. package/dist/merge-back-loop.js.map +1 -1
  55. package/dist/merge-failure-classify.d.ts +39 -0
  56. package/dist/merge-failure-classify.d.ts.map +1 -0
  57. package/dist/merge-failure-classify.js +58 -0
  58. package/dist/merge-failure-classify.js.map +1 -0
  59. package/dist/prompt-sections/execution-sections.d.ts +20 -14
  60. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  61. package/dist/prompt-sections/execution-sections.js +97 -141
  62. package/dist/prompt-sections/execution-sections.js.map +1 -1
  63. package/dist/prompt-sections/scoping-sections.d.ts +30 -0
  64. package/dist/prompt-sections/scoping-sections.d.ts.map +1 -0
  65. package/dist/prompt-sections/scoping-sections.js +187 -0
  66. package/dist/prompt-sections/scoping-sections.js.map +1 -0
  67. package/dist/prompt-sections/shared.d.ts +7 -0
  68. package/dist/prompt-sections/shared.d.ts.map +1 -1
  69. package/dist/prompt-sections/shared.js.map +1 -1
  70. package/dist/queries/agent-resolvable-promotion.d.ts +87 -0
  71. package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -0
  72. package/dist/queries/agent-resolvable-promotion.js +152 -0
  73. package/dist/queries/agent-resolvable-promotion.js.map +1 -0
  74. package/dist/queries/cause-key.d.ts +64 -0
  75. package/dist/queries/cause-key.d.ts.map +1 -0
  76. package/dist/queries/cause-key.js +79 -0
  77. package/dist/queries/cause-key.js.map +1 -0
  78. package/dist/queries/deliveries.d.ts +20 -153
  79. package/dist/queries/deliveries.d.ts.map +1 -1
  80. package/dist/queries/deliveries.js +26 -0
  81. package/dist/queries/deliveries.js.map +1 -1
  82. package/dist/queries/delivery-gate-state.d.ts +192 -0
  83. package/dist/queries/delivery-gate-state.d.ts.map +1 -0
  84. package/dist/queries/delivery-gate-state.js +23 -0
  85. package/dist/queries/delivery-gate-state.js.map +1 -0
  86. package/dist/queries/escalation-suppression.d.ts +89 -0
  87. package/dist/queries/escalation-suppression.d.ts.map +1 -0
  88. package/dist/queries/escalation-suppression.js +98 -0
  89. package/dist/queries/escalation-suppression.js.map +1 -0
  90. package/dist/queries/holds.d.ts +52 -59
  91. package/dist/queries/holds.d.ts.map +1 -1
  92. package/dist/queries/holds.js +60 -68
  93. package/dist/queries/holds.js.map +1 -1
  94. package/dist/queries/issues.d.ts +40 -2
  95. package/dist/queries/issues.d.ts.map +1 -1
  96. package/dist/queries/issues.js +55 -2
  97. package/dist/queries/issues.js.map +1 -1
  98. package/dist/queries/verification.d.ts +11 -0
  99. package/dist/queries/verification.d.ts.map +1 -1
  100. package/dist/queries/verification.js.map +1 -1
  101. package/dist/reality-pole.d.ts +5 -3
  102. package/dist/reality-pole.d.ts.map +1 -1
  103. package/dist/reality-pole.js +13 -4
  104. package/dist/reality-pole.js.map +1 -1
  105. package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
  106. package/dist/resolvers/git-diff-against-base.js +12 -5
  107. package/dist/resolvers/git-diff-against-base.js.map +1 -1
  108. package/dist/resolvers/index.d.ts +1 -1
  109. package/dist/resolvers/index.d.ts.map +1 -1
  110. package/dist/resolvers/index.js +1 -1
  111. package/dist/resolvers/index.js.map +1 -1
  112. package/dist/resolvers/shared/git-diff.d.ts +152 -10
  113. package/dist/resolvers/shared/git-diff.d.ts.map +1 -1
  114. package/dist/resolvers/shared/git-diff.js +292 -14
  115. package/dist/resolvers/shared/git-diff.js.map +1 -1
  116. package/dist/spawn/prompt-assembly.d.ts +3 -0
  117. package/dist/spawn/prompt-assembly.d.ts.map +1 -1
  118. package/dist/spawn/prompt-assembly.js +2 -1
  119. package/dist/spawn/prompt-assembly.js.map +1 -1
  120. package/dist/spawn/worktree-session.d.ts +2 -0
  121. package/dist/spawn/worktree-session.d.ts.map +1 -1
  122. package/dist/spawn/worktree-session.js +20 -1
  123. package/dist/spawn/worktree-session.js.map +1 -1
  124. package/dist/staleness-sensor.d.ts +24 -1
  125. package/dist/staleness-sensor.d.ts.map +1 -1
  126. package/dist/staleness-sensor.js +31 -4
  127. package/dist/staleness-sensor.js.map +1 -1
  128. package/dist/stall-detectors.d.ts +13 -9
  129. package/dist/stall-detectors.d.ts.map +1 -1
  130. package/dist/stall-detectors.js +14 -13
  131. package/dist/stall-detectors.js.map +1 -1
  132. package/dist/team-prompt-base.d.ts +1 -1
  133. package/dist/team-prompt-base.d.ts.map +1 -1
  134. package/dist/team-prompt-base.js +4 -2
  135. package/dist/team-prompt-base.js.map +1 -1
  136. package/dist/templates/claude-md.d.ts +1 -1
  137. package/dist/templates/claude-md.d.ts.map +1 -1
  138. package/dist/templates/claude-md.js +20 -0
  139. package/dist/templates/claude-md.js.map +1 -1
  140. package/dist/verification-default-on.d.ts.map +1 -1
  141. package/dist/verification-default-on.js +5 -0
  142. package/dist/verification-default-on.js.map +1 -1
  143. package/dist/verification-deps.d.ts +151 -0
  144. package/dist/verification-deps.d.ts.map +1 -0
  145. package/dist/verification-deps.js +19 -0
  146. package/dist/verification-deps.js.map +1 -0
  147. package/dist/verification-engine.d.ts +18 -112
  148. package/dist/verification-engine.d.ts.map +1 -1
  149. package/dist/verification-engine.js +90 -103
  150. package/dist/verification-engine.js.map +1 -1
  151. package/dist/verification-evidence.d.ts +106 -0
  152. package/dist/verification-evidence.d.ts.map +1 -0
  153. package/dist/verification-evidence.js +158 -0
  154. package/dist/verification-evidence.js.map +1 -0
  155. package/dist/verification-feedback.d.ts +31 -26
  156. package/dist/verification-feedback.d.ts.map +1 -1
  157. package/dist/verification-feedback.js +77 -76
  158. package/dist/verification-feedback.js.map +1 -1
  159. package/dist/verify-restatement.d.ts +12 -9
  160. package/dist/verify-restatement.d.ts.map +1 -1
  161. package/dist/verify-restatement.js +11 -9
  162. package/dist/verify-restatement.js.map +1 -1
  163. package/package.json +3 -3
@@ -0,0 +1,87 @@
1
+ /**
2
+ * agent_resolvable promotion safety net (delivery "agent_resolvable never
3
+ * reaches the human inbox", TEL-3).
4
+ *
5
+ * agent_resolvable filings are machine-owned: hidden from the operator inbox
6
+ * (TEL-1) and ridden into the focus's next coding spawn to be resolved (TEL-2).
7
+ * That is only safe if a filing the machine CANNOT actually clear eventually
8
+ * surfaces to a human -- otherwise it lingers forever, invisible. This module is
9
+ * that backstop: an agent_resolvable filing that has stayed open past a bound
10
+ * (it rode into many spawn cycles and none resolved it -- "bounded failures") is
11
+ * PROMOTED to a human by resolving the machine-routed row and refiling the same
12
+ * content as a needs_operator escalation, which the operator inbox DOES show.
13
+ *
14
+ * Why age, not a per-row attempt counter: escalation_update accepts only
15
+ * status/notes/answer (no disposition or metadata writes without a separate edge
16
+ * deploy), and there is no per-focus "sessions since T" query. Open-age is the
17
+ * deploy-safe, restart-safe, count-free proxy for "it survived N spawn cycles
18
+ * unresolved" -- every spawn that rode it in and exited without clearing it is a
19
+ * failed attempt, and those accumulate as elapsed open time.
20
+ *
21
+ * Promotion is idempotent: the needs_operator refile rides the shared cause-keyed
22
+ * gate keyed on the original escalation id, and the source row is resolved in the
23
+ * same step, so a filing is promoted at most once.
24
+ */
25
+ import { type AgentResolvableItem } from './issues.js';
26
+ import { type FileEscalationIdempotentParams, type FileEscalationIdempotentResult } from './escalation-suppression.js';
27
+ /** Default hours an agent_resolvable filing may stay open before promotion. */
28
+ export declare const DEFAULT_AGENT_RESOLVABLE_PROMOTE_HOURS = 24;
29
+ /**
30
+ * Resolve the promotion threshold (hours -> ms) from the typed, Zod-validated
31
+ * env-config -- the single declaration site for every operational knob
32
+ * (packages/daemon-core/src/env-config.ts). An unset value yields the schema
33
+ * default (DEFAULT_AGENT_RESOLVABLE_PROMOTE_HOURS); an invalid one fails loudly
34
+ * at startup rather than silently degrading to a default here.
35
+ *
36
+ * Same shape as resolveStuckBranchThresholdMs in merge-back-loop.ts.
37
+ */
38
+ export declare function resolveAgentResolvablePromoteMs(env?: NodeJS.ProcessEnv): number;
39
+ /**
40
+ * Pure: split the open agent_resolvable filings into the ones that should still
41
+ * RIDE into this spawn and the ones that are past the age bound and should be
42
+ * PROMOTED to a human. A filing with an unparseable/absent createdAt is treated
43
+ * as fresh (ride) -- promotion must never fire on a missing timestamp.
44
+ */
45
+ export declare function partitionAgentResolvableByAge(items: readonly AgentResolvableItem[], nowMs: number, thresholdMs: number): {
46
+ ride: AgentResolvableItem[];
47
+ promote: AgentResolvableItem[];
48
+ };
49
+ /** The cause key that makes a promotion refile idempotent (one per original filing). */
50
+ export declare function agentResolvablePromotionCauseKey(originalEscalationId: string): string;
51
+ /** escalation_kind for a promoted (formerly agent_resolvable) filing. */
52
+ export declare const AGENT_RESOLVABLE_PROMOTED_KIND = "agent_resolvable_promoted";
53
+ /**
54
+ * Pure: build the needs_operator refile params for a filing the machine could
55
+ * not resolve autonomously. Carries the original description + kind so the
56
+ * operator sees what was tried and why it now needs them; anchored to the focus.
57
+ */
58
+ export declare function buildAgentResolvablePromotionParams(item: AgentResolvableItem, ctx: {
59
+ organizationId: string;
60
+ focusId: string;
61
+ productId?: string;
62
+ }, ageHours: number): FileEscalationIdempotentParams;
63
+ /** Injected IO for the promotion reconcile (real defaults; tests inject stubs). */
64
+ export interface AgentResolvablePromotionDeps {
65
+ listOpen: (focusId: string) => Promise<AgentResolvableItem[]>;
66
+ markResolved: (id: string, notes?: string) => Promise<void>;
67
+ file: (params: FileEscalationIdempotentParams) => Promise<FileEscalationIdempotentResult>;
68
+ now: () => number;
69
+ thresholdMs: number;
70
+ }
71
+ /**
72
+ * Reconcile a focus's open agent_resolvable filings and return the ones that
73
+ * should ride into THIS spawn. Over-age filings are promoted (needs_operator
74
+ * refile + resolve the source) so they leave the machine lane and reach the
75
+ * human inbox; the rest are returned to ride in as before.
76
+ *
77
+ * Best-effort per filing: a promotion failure is logged and the filing is left
78
+ * to ride (it will be retried next spawn), never thrown -- reconciling must never
79
+ * block a spawn. This is the single entry point the spawn path calls instead of
80
+ * listOpenAgentResolvableForFocus.
81
+ */
82
+ export declare function reconcileAgentResolvableForFocus(ctx: {
83
+ organizationId: string;
84
+ focusId: string;
85
+ productId?: string;
86
+ }, deps?: Partial<AgentResolvablePromotionDeps>): Promise<AgentResolvableItem[]>;
87
+ //# sourceMappingURL=agent-resolvable-promotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-resolvable-promotion.d.ts","sourceRoot":"","sources":["../../src/queries/agent-resolvable-promotion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,6BAA6B,CAAC;AAMrC,+EAA+E;AAC/E,eAAO,MAAM,sCAAsC,KAAK,CAAC;AAEzD;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE5F;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,SAAS,mBAAmB,EAAE,EACrC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB;IAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAAC,OAAO,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAYjE;AAED,wFAAwF;AACxF,wBAAgB,gCAAgC,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,yEAAyE;AACzE,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EACpE,QAAQ,EAAE,MAAM,GACf,8BAA8B,CAiChC;AAED,mFAAmF;AACnF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9D,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,MAAM,EAAE,8BAA8B,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC1F,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAYD;;;;;;;;;;GAUG;AACH,wBAAsB,gCAAgC,CACpD,GAAG,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EACpE,IAAI,GAAE,OAAO,CAAC,4BAA4B,CAAM,GAC/C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA2BhC"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * agent_resolvable promotion safety net (delivery "agent_resolvable never
3
+ * reaches the human inbox", TEL-3).
4
+ *
5
+ * agent_resolvable filings are machine-owned: hidden from the operator inbox
6
+ * (TEL-1) and ridden into the focus's next coding spawn to be resolved (TEL-2).
7
+ * That is only safe if a filing the machine CANNOT actually clear eventually
8
+ * surfaces to a human -- otherwise it lingers forever, invisible. This module is
9
+ * that backstop: an agent_resolvable filing that has stayed open past a bound
10
+ * (it rode into many spawn cycles and none resolved it -- "bounded failures") is
11
+ * PROMOTED to a human by resolving the machine-routed row and refiling the same
12
+ * content as a needs_operator escalation, which the operator inbox DOES show.
13
+ *
14
+ * Why age, not a per-row attempt counter: escalation_update accepts only
15
+ * status/notes/answer (no disposition or metadata writes without a separate edge
16
+ * deploy), and there is no per-focus "sessions since T" query. Open-age is the
17
+ * deploy-safe, restart-safe, count-free proxy for "it survived N spawn cycles
18
+ * unresolved" -- every spawn that rode it in and exited without clearing it is a
19
+ * failed attempt, and those accumulate as elapsed open time.
20
+ *
21
+ * Promotion is idempotent: the needs_operator refile rides the shared cause-keyed
22
+ * gate keyed on the original escalation id, and the source row is resolved in the
23
+ * same step, so a filing is promoted at most once.
24
+ */
25
+ import { ESCALATION_REASONS, ESCALATION_DISPOSITIONS, loadEnvConfig, } from '@telora/daemon-core';
26
+ import { markEscalationResolved as defaultMarkEscalationResolved, listOpenAgentResolvableForFocus as defaultListOpenAgentResolvableForFocus, } from './issues.js';
27
+ import { fileEscalationIdempotent as defaultFileEscalationIdempotent, } from './escalation-suppression.js';
28
+ import { computeCauseKey } from './cause-key.js';
29
+ import { createLogger } from '../log.js';
30
+ const log = createLogger({ module: 'escalations' });
31
+ /** Default hours an agent_resolvable filing may stay open before promotion. */
32
+ export const DEFAULT_AGENT_RESOLVABLE_PROMOTE_HOURS = 24;
33
+ /**
34
+ * Resolve the promotion threshold (hours -> ms) from the typed, Zod-validated
35
+ * env-config -- the single declaration site for every operational knob
36
+ * (packages/daemon-core/src/env-config.ts). An unset value yields the schema
37
+ * default (DEFAULT_AGENT_RESOLVABLE_PROMOTE_HOURS); an invalid one fails loudly
38
+ * at startup rather than silently degrading to a default here.
39
+ *
40
+ * Same shape as resolveStuckBranchThresholdMs in merge-back-loop.ts.
41
+ */
42
+ export function resolveAgentResolvablePromoteMs(env = process.env) {
43
+ return loadEnvConfig(env).TELORA_AGENT_RESOLVABLE_PROMOTE_HOURS * 3_600_000;
44
+ }
45
+ /**
46
+ * Pure: split the open agent_resolvable filings into the ones that should still
47
+ * RIDE into this spawn and the ones that are past the age bound and should be
48
+ * PROMOTED to a human. A filing with an unparseable/absent createdAt is treated
49
+ * as fresh (ride) -- promotion must never fire on a missing timestamp.
50
+ */
51
+ export function partitionAgentResolvableByAge(items, nowMs, thresholdMs) {
52
+ const ride = [];
53
+ const promote = [];
54
+ for (const item of items) {
55
+ const createdMs = Date.parse(item.createdAt);
56
+ if (Number.isNaN(createdMs) || nowMs - createdMs <= thresholdMs) {
57
+ ride.push(item);
58
+ }
59
+ else {
60
+ promote.push(item);
61
+ }
62
+ }
63
+ return { ride, promote };
64
+ }
65
+ /** The cause key that makes a promotion refile idempotent (one per original filing). */
66
+ export function agentResolvablePromotionCauseKey(originalEscalationId) {
67
+ return computeCauseKey('agent_resolvable_promoted', { escalationId: originalEscalationId });
68
+ }
69
+ /** escalation_kind for a promoted (formerly agent_resolvable) filing. */
70
+ export const AGENT_RESOLVABLE_PROMOTED_KIND = 'agent_resolvable_promoted';
71
+ /**
72
+ * Pure: build the needs_operator refile params for a filing the machine could
73
+ * not resolve autonomously. Carries the original description + kind so the
74
+ * operator sees what was tried and why it now needs them; anchored to the focus.
75
+ */
76
+ export function buildAgentResolvablePromotionParams(item, ctx, ageHours) {
77
+ const originalKind = item.escalationKind ?? 'agent_resolvable';
78
+ return {
79
+ causeKey: agentResolvablePromotionCauseKey(item.id),
80
+ organizationId: ctx.organizationId,
81
+ issueId: null,
82
+ reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
83
+ // It was machine-routable, but the machine had ~ageHours of spawn cycles to
84
+ // clear it and did not -- a human must now take it.
85
+ disposition: ESCALATION_DISPOSITIONS.NEEDS_OPERATOR,
86
+ anchor: { focusId: ctx.focusId },
87
+ ...(ctx.productId ? { productId: ctx.productId } : {}),
88
+ escalationKind: AGENT_RESOLVABLE_PROMOTED_KIND,
89
+ description: `A machine-routable (agent_resolvable) filing has stayed open ~${ageHours}h ` +
90
+ `without the daemon's spawns clearing it, so it is promoted to you.\n\n` +
91
+ `**Original kind:** ${originalKind}\n` +
92
+ `**Original filing:** ${item.id}\n\n` +
93
+ `${item.description}`,
94
+ whatWasTried: `The filing rode into the focus's coding spawns for ~${ageHours}h ` +
95
+ `(disposition agent_resolvable) but was never resolved, so the machine has ` +
96
+ `exhausted its autonomous attempts.`,
97
+ helpNeeded: `Resolve the underlying condition manually, or re-file with clearer intent if ` +
98
+ `the machine cannot act on it.`,
99
+ metadata: {
100
+ cause: AGENT_RESOLVABLE_PROMOTED_KIND,
101
+ originalEscalationId: item.id,
102
+ originalKind,
103
+ ageHours,
104
+ },
105
+ };
106
+ }
107
+ function defaultDeps() {
108
+ return {
109
+ listOpen: defaultListOpenAgentResolvableForFocus,
110
+ markResolved: defaultMarkEscalationResolved,
111
+ file: defaultFileEscalationIdempotent,
112
+ now: () => Date.now(),
113
+ thresholdMs: resolveAgentResolvablePromoteMs(),
114
+ };
115
+ }
116
+ /**
117
+ * Reconcile a focus's open agent_resolvable filings and return the ones that
118
+ * should ride into THIS spawn. Over-age filings are promoted (needs_operator
119
+ * refile + resolve the source) so they leave the machine lane and reach the
120
+ * human inbox; the rest are returned to ride in as before.
121
+ *
122
+ * Best-effort per filing: a promotion failure is logged and the filing is left
123
+ * to ride (it will be retried next spawn), never thrown -- reconciling must never
124
+ * block a spawn. This is the single entry point the spawn path calls instead of
125
+ * listOpenAgentResolvableForFocus.
126
+ */
127
+ export async function reconcileAgentResolvableForFocus(ctx, deps = {}) {
128
+ const d = { ...defaultDeps(), ...deps };
129
+ const open = await d.listOpen(ctx.focusId);
130
+ const { ride, promote } = partitionAgentResolvableByAge(open, d.now(), d.thresholdMs);
131
+ for (const item of promote) {
132
+ const ageHours = Math.max(1, Math.floor((d.now() - Date.parse(item.createdAt)) / 3_600_000));
133
+ try {
134
+ const result = await d.file(buildAgentResolvablePromotionParams(item, ctx, ageHours));
135
+ // Only retire the machine-routed row once the human-facing refile is in
136
+ // place (filed OR already suppressed by a prior promotion) -- never resolve
137
+ // the source without a landing spot, which would drop the signal entirely.
138
+ if (result.filed || result.suppressed) {
139
+ await d.markResolved(item.id, `Promoted to a needs_operator escalation after ~${ageHours}h open without ` +
140
+ `autonomous resolution (agent_resolvable -> needs_operator).`);
141
+ log.info(`[escalations] Promoted agent_resolvable ${item.id} to needs_operator (focus ${ctx.focusId}, ~${ageHours}h)`);
142
+ }
143
+ }
144
+ catch (err) {
145
+ log.warn(`[escalations] Failed to promote agent_resolvable ${item.id} for focus ${ctx.focusId}: ${err.message}`);
146
+ // Leave it to ride this spawn; next reconcile retries the promotion.
147
+ ride.push(item);
148
+ }
149
+ }
150
+ return ride;
151
+ }
152
+ //# sourceMappingURL=agent-resolvable-promotion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-resolvable-promotion.js","sourceRoot":"","sources":["../../src/queries/agent-resolvable-promotion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Deterministic escalation cause keys (PURE, no I/O).
3
+ *
4
+ * An escalation's CAUSE KEY identifies the underlying cause a detector observed,
5
+ * derived from the escalation's kind plus its identifying SUBJECT. Two filings
6
+ * with the same cause key are about the same underlying fact; the idempotent
7
+ * filing gate (queries/escalation-suppression.ts) uses the key so one cause
8
+ * appears in the inbox at most once while unresolved, and a dismissed cause stays
9
+ * silent until its subject state actually changes.
10
+ *
11
+ * The key encodes the subject, so "the subject state changed" is expressed
12
+ * simply: a new subject (a new sha going red) yields a DIFFERENT key and re-files
13
+ * naturally, while the same subject (the same sha re-observed) yields the SAME
14
+ * key and is suppressed. This is what makes dismissal-memory fall out of a plain
15
+ * string comparison instead of a bespoke diff.
16
+ *
17
+ * Recipes (from the focus "An escalation is a verdict, not a log line"):
18
+ * - ci_run_red -> sha + branch
19
+ * - verify_gate_unclearable / verify_evidence_unavailable -> deliveryId + guard
20
+ * - stuck_focus_branch / wedged_focus (stuck/wedged detectors) -> focusId + blockage kind
21
+ * - team_failure (team-exit filings) -> focusId + session-exit marker
22
+ */
23
+ /** A subject is a flat bag of identifying strings (nullable/undefined dropped). */
24
+ export type CauseKeySubject = Record<string, string | null | undefined>;
25
+ /**
26
+ * Compute a deterministic cause key from a kind + subject bag.
27
+ *
28
+ * Deterministic and order-insensitive: the subject entries are sorted by key, so
29
+ * `{sha, branch}` and `{branch, sha}` yield the same key. Null/undefined values
30
+ * are dropped (an absent subject field never changes the key vs. omitting it).
31
+ * Same (kind, subject) -> same key; any changed subject value -> different key.
32
+ */
33
+ export declare function computeCauseKey(kind: string, subject: CauseKeySubject): string;
34
+ /** ci_run_red: keyed on the sha + branch the red CI run belongs to. */
35
+ export declare function ciRunRedCauseKey(sha: string, branch: string): string;
36
+ /**
37
+ * verify_gate_unclearable / verify_evidence_unavailable and any other
38
+ * delivery+guard detector: keyed on the delivery and (optionally) the blocking
39
+ * guard. Omit `guard` for a strictly PER-DELIVERY key: both stall detectors file
40
+ * at most one open row per delivery regardless of which guard is blocking, so
41
+ * they key on the delivery alone (a per-guard key would let a guard-name change
42
+ * re-file). Detectors that genuinely differ by guard pass it through.
43
+ */
44
+ export declare function deliveryGuardCauseKey(kind: string, deliveryId: string, guard?: string): string;
45
+ /**
46
+ * stuck/wedged focus detectors (stuck_focus_branch, wedged_focus, ...): keyed on
47
+ * the focus and the kind of blockage observed.
48
+ */
49
+ export declare function focusBlockageCauseKey(kind: string, focusId: string, blockage: string): string;
50
+ /**
51
+ * team-exit filings (team_failure): keyed on the focus and a session-exit marker
52
+ * so one blocked team exit collapses to a single cause key regardless of how many
53
+ * partial filings a team attempts (the burst pattern).
54
+ */
55
+ export declare function teamExitCauseKey(focusId: string, sessionExit: string): string;
56
+ /**
57
+ * daemon-staleness handover (propagation_stale): keyed on the specific version
58
+ * gap (running + newest). A per-daemon singleton signal -- one running version --
59
+ * so it needs no product/focus in the key. A dismissal silences THIS exact gap;
60
+ * when `newest` advances (a different gap) it re-files, and a catch-up simply
61
+ * stops the signal (auto-resolved).
62
+ */
63
+ export declare function daemonStalenessCauseKey(running: string, newest: string): string;
64
+ //# sourceMappingURL=cause-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cause-key.d.ts","sourceRoot":"","sources":["../../src/queries/cause-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,mFAAmF;AACnF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAExE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAM9E;AAID,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/E"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Deterministic escalation cause keys (PURE, no I/O).
3
+ *
4
+ * An escalation's CAUSE KEY identifies the underlying cause a detector observed,
5
+ * derived from the escalation's kind plus its identifying SUBJECT. Two filings
6
+ * with the same cause key are about the same underlying fact; the idempotent
7
+ * filing gate (queries/escalation-suppression.ts) uses the key so one cause
8
+ * appears in the inbox at most once while unresolved, and a dismissed cause stays
9
+ * silent until its subject state actually changes.
10
+ *
11
+ * The key encodes the subject, so "the subject state changed" is expressed
12
+ * simply: a new subject (a new sha going red) yields a DIFFERENT key and re-files
13
+ * naturally, while the same subject (the same sha re-observed) yields the SAME
14
+ * key and is suppressed. This is what makes dismissal-memory fall out of a plain
15
+ * string comparison instead of a bespoke diff.
16
+ *
17
+ * Recipes (from the focus "An escalation is a verdict, not a log line"):
18
+ * - ci_run_red -> sha + branch
19
+ * - verify_gate_unclearable / verify_evidence_unavailable -> deliveryId + guard
20
+ * - stuck_focus_branch / wedged_focus (stuck/wedged detectors) -> focusId + blockage kind
21
+ * - team_failure (team-exit filings) -> focusId + session-exit marker
22
+ */
23
+ /**
24
+ * Compute a deterministic cause key from a kind + subject bag.
25
+ *
26
+ * Deterministic and order-insensitive: the subject entries are sorted by key, so
27
+ * `{sha, branch}` and `{branch, sha}` yield the same key. Null/undefined values
28
+ * are dropped (an absent subject field never changes the key vs. omitting it).
29
+ * Same (kind, subject) -> same key; any changed subject value -> different key.
30
+ */
31
+ export function computeCauseKey(kind, subject) {
32
+ const parts = Object.entries(subject)
33
+ .filter(([, v]) => v !== null && v !== undefined && v !== '')
34
+ .map(([k, v]) => `${k}=${v}`)
35
+ .sort();
36
+ return `${kind}::${parts.join('|')}`;
37
+ }
38
+ // ── Named recipes (one per detector family) ──────────────────────────
39
+ /** ci_run_red: keyed on the sha + branch the red CI run belongs to. */
40
+ export function ciRunRedCauseKey(sha, branch) {
41
+ return computeCauseKey('ci_run_red', { sha, branch });
42
+ }
43
+ /**
44
+ * verify_gate_unclearable / verify_evidence_unavailable and any other
45
+ * delivery+guard detector: keyed on the delivery and (optionally) the blocking
46
+ * guard. Omit `guard` for a strictly PER-DELIVERY key: both stall detectors file
47
+ * at most one open row per delivery regardless of which guard is blocking, so
48
+ * they key on the delivery alone (a per-guard key would let a guard-name change
49
+ * re-file). Detectors that genuinely differ by guard pass it through.
50
+ */
51
+ export function deliveryGuardCauseKey(kind, deliveryId, guard) {
52
+ return computeCauseKey(kind, { deliveryId, guard });
53
+ }
54
+ /**
55
+ * stuck/wedged focus detectors (stuck_focus_branch, wedged_focus, ...): keyed on
56
+ * the focus and the kind of blockage observed.
57
+ */
58
+ export function focusBlockageCauseKey(kind, focusId, blockage) {
59
+ return computeCauseKey(kind, { focusId, blockage });
60
+ }
61
+ /**
62
+ * team-exit filings (team_failure): keyed on the focus and a session-exit marker
63
+ * so one blocked team exit collapses to a single cause key regardless of how many
64
+ * partial filings a team attempts (the burst pattern).
65
+ */
66
+ export function teamExitCauseKey(focusId, sessionExit) {
67
+ return computeCauseKey('team_failure', { focusId, sessionExit });
68
+ }
69
+ /**
70
+ * daemon-staleness handover (propagation_stale): keyed on the specific version
71
+ * gap (running + newest). A per-daemon singleton signal -- one running version --
72
+ * so it needs no product/focus in the key. A dismissal silences THIS exact gap;
73
+ * when `newest` advances (a different gap) it re-files, and a catch-up simply
74
+ * stops the signal (auto-resolved).
75
+ */
76
+ export function daemonStalenessCauseKey(running, newest) {
77
+ return computeCauseKey('propagation_stale', { running, newest });
78
+ }
79
+ //# sourceMappingURL=cause-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cause-key.js","sourceRoot":"","sources":["../../src/queries/cause-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,OAAwB;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;SAC5D,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,EAAE,CAAC;IACV,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,CAAC;AAED,wEAAwE;AAExE,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAc;IAC1D,OAAO,eAAe,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,UAAkB,EAAE,KAAc;IACpF,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAe,EAAE,QAAgB;IACnF,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,WAAmB;IACnE,OAAO,eAAe,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,MAAc;IACrE,OAAO,eAAe,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACnE,CAAC"}
@@ -23,160 +23,12 @@ export declare function getReadyDeliveries(_organizationId: string, productId?:
23
23
  */
24
24
  export declare function getDeliveryContext(deliveryId: string): Promise<DeliveryContext | null>;
25
25
  /**
26
- * Detail attached to gate_state when a daemon-side deterministic verification
27
- * run fails. Carries the failing-test names (parsed from the run output) and a
28
- * pointer to the persistent full-log file so the feedback loop -- dashboard
29
- * "Waiting on", live-session inject, and the requeue/respawn prompt -- can
30
- * surface WHAT failed and WHERE to read it, without a cold re-run.
26
+ * The gate_state vocabulary -- DeliveryGateState and its per-origin detail
27
+ * records -- lives in queries/delivery-gate-state.ts. Re-exported here so the
28
+ * many modules that reach these through queries/deliveries.js keep resolving.
31
29
  */
32
- export interface VerificationFailureDetail {
33
- /**
34
- * Failing-test ids that GATE this delivery. When baseline-diff attribution ran,
35
- * these are the NEW failures the focus introduced; otherwise all parsed failures.
36
- */
37
- failingTests: string[];
38
- /**
39
- * Failing tests that pre-exist on the focus base -- recorded, non-blocking
40
- * (they do not gate the focus). Absent when attribution did not run.
41
- */
42
- preExisting?: string[];
43
- /** Absolute path to the persistent full-log file, or null when none was written. */
44
- logPath: string | null;
45
- /** Process exit code of the failed run, or null. */
46
- exitCode: number | null;
47
- /** ISO timestamp of the failing run. */
48
- failedAt: string;
49
- }
50
- /**
51
- * Detail attached to gate_state when the verify-shortfall RECONCILIATION (not a
52
- * deterministic shell run) holds the flip: the achieved outcome fell short of
53
- * the declared desired effect for one or more targeted nodes. Distinct from
54
- * VerificationFailureDetail on purpose -- a shortfall hold has no exitCode /
55
- * failingTests (the deterministic check may well have passed), it has a
56
- * declared-vs-achieved gap. Keeping it under its own key prevents a reader from
57
- * seeing a passed:false deterministic_verification whose exitCode is 0.
58
- */
59
- export interface ShortfallReconciliationDetail {
60
- /** ISO timestamp of the reconciliation that held the gate. */
61
- heldAt: string;
62
- /** The per-target declared/achieved/reason gaps that withheld the flip. */
63
- shortfalls: Array<{
64
- nodeId: string;
65
- declared: string;
66
- achieved: string;
67
- reason: string;
68
- /** The diff evidence grounding the shortfall, when the judge cited one. */
69
- diffCitation?: string;
70
- }>;
71
- }
72
- /**
73
- * Detail attached to gate_state when the verify path was handed NO evidence it
74
- * could judge the work against (no diff, no changed-files, no inspection
75
- * finding) -- an INSTRUMENT FAULT, not a verdict about the work. Distinct from
76
- * VerificationFailureDetail (a shell command failed) and from
77
- * ShortfallReconciliationDetail (the work fell short of intent): here the
78
- * reconciliation is BLIND, so it must not render any verdict. The delivery is
79
- * held in `verify` (never routed to verify_failed, so no iteration is
80
- * consumed) and a first-occurrence escalation names the missing evidence.
81
- */
82
- export interface EvidenceUnavailableDetail {
83
- /** ISO timestamp the instrument-fault hold was recorded. */
84
- heldAt: string;
85
- /** Which evidence slots were empty (named, so the hold describes the fault, not the work). */
86
- missing: string[];
87
- /**
88
- * Commits the delivery branch is ahead of the integration base. 0 => the
89
- * branch already merged / did no work; > 0 => a broken diff MEASUREMENT
90
- * (commits present but the diff resolved empty). Carried for operator triage.
91
- */
92
- commitsAhead: number;
93
- }
94
- /**
95
- * Shape written into product_deliveries.gate_state when guard evaluation
96
- * blocks a stage transition. Cleared (set to null) when guards pass.
97
- *
98
- * `verification` is populated when the block is a daemon-side deterministic
99
- * verification failure (Harness-Owned Delivery Verification), carrying the
100
- * failing tests + log path for the feedback loop; absent for guard-only gates.
101
- *
102
- * `shortfallReconciliation` is populated when the block is a verify-shortfall
103
- * reconciliation hold (declared-vs-achieved gap), NOT a deterministic run; the
104
- * two are mutually exclusive origins and never share the deterministic guard.
105
- */
106
- export interface DeliveryGateState {
107
- blocking: Array<{
108
- guardName: string;
109
- passed: boolean;
110
- }>;
111
- warnings: Array<{
112
- guardName: string;
113
- passed: boolean;
114
- }>;
115
- evaluatedAt: string;
116
- verification?: VerificationFailureDetail;
117
- shortfallReconciliation?: ShortfallReconciliationDetail;
118
- /**
119
- * Populated when the verify path was handed no evidence it could judge the
120
- * work against (an instrument fault). Kept under its own key -- never
121
- * conflated with `verification` (a shell failure) or `shortfallReconciliation`
122
- * (a work shortfall) -- so a reader can tell "the gate was blind" from "the
123
- * work fell short". The blocking guard is `verify_evidence_unavailable`.
124
- */
125
- evidenceUnavailable?: EvidenceUnavailableDetail;
126
- /**
127
- * Undisposed shortfall drift proposal ids holding this delivery in verify.
128
- *
129
- * Kept OUT of `blocking` on purpose: that array is guard-verdict data
130
- * (guardName + passed), and a shortfall hold is not a guard. Synthesizing a
131
- * fake guardName to smuggle the ids through would make `blocking` lie about
132
- * what a guard is. `formatGateBlockers` is the single place that merges the
133
- * two for display.
134
- *
135
- * Absent for guard-only gates. Written by the review-exit shortfall hold and
136
- * cleared, like the rest of gate_state, when the delivery finally routes.
137
- */
138
- shortfallProposalIds?: string[];
139
- /**
140
- * The open operator-blocked escalation (disposition needs_operator /
141
- * external_wait, any kind) holding this delivery in verify. Written by the
142
- * operator-hold gate (operator-hold.ts) so the board can name what the
143
- * delivery is waiting on without a second escalation being filed; cleared,
144
- * like the rest of gate_state, when the delivery finally routes. When the hold
145
- * read itself failed (fail-closed), escalationId is null and readFailed is
146
- * true -- the delivery is still held, just without a specific escalation to
147
- * name. Like shortfallProposalIds, kept OUT of `blocking` (a hold is not a
148
- * guard verdict).
149
- */
150
- operatorHold?: {
151
- escalationId: string | null;
152
- escalationKind: string | null;
153
- disposition: string | null;
154
- readFailed?: boolean;
155
- };
156
- /**
157
- * An irreducibly-external dependency holding this delivery in verify, carried
158
- * as durable STATE rather than an agent_escalations row (external-hold.ts).
159
- * The blocking condition and what would clear it live here, attached to the
160
- * delivery they block; the hold clears by re-evaluating that condition (a
161
- * re-read of reality), not by a human resolving an inbox item. Kept OUT of
162
- * `blocking` for the same reason as operatorHold/shortfallProposalIds: a hold
163
- * is not a guard verdict. Cleared, like the rest of gate_state, when the
164
- * delivery finally routes.
165
- */
166
- externalHold?: ExternalHoldState;
167
- }
168
- /**
169
- * The durable external-hold state on a delivery's gate_state. Distinct from an
170
- * agent_escalations row: an external dependency is state, not an inbox event.
171
- */
172
- export interface ExternalHoldState {
173
- /** What is blocking -- the irreducibly-external dependency. */
174
- condition: string;
175
- /** The condition that, when re-read as true, clears the hold. */
176
- clearsWhen: string;
177
- /** ISO timestamp the hold was declared. */
178
- declaredAt: string;
179
- }
30
+ export type { VerificationFailureDetail, ShortfallReconciliationDetail, EvidenceUnavailableDetail, DeliveryGateState, ExternalHoldState, } from './delivery-gate-state.js';
31
+ import type { DeliveryGateState } from './delivery-gate-state.js';
180
32
  /**
181
33
  * Optional metadata that lets updateDeliveryStatus append a delivery_transitions
182
34
  * row alongside the status change. The daemon is the single owner of delivery
@@ -425,6 +277,21 @@ export declare function recordFocusMerge(params: {
425
277
  commitShas: string[];
426
278
  branchName: string;
427
279
  }): Promise<void>;
280
+ /**
281
+ * Fetch the RECORDED constituent commit shas for a delivery's merge, keyed by
282
+ * the merge_commit_sha the delivery row carries.
283
+ *
284
+ * Reads focus_merges (via focus_merge_list) -- the durable record the daemon
285
+ * wrote at merge time (extractConstituentCommits -> recordFocusMerge) -- and
286
+ * returns the commit_shas of the row whose merge_commit_sha matches. This is the
287
+ * exact attribution, immune to the fast-forward + rebase failures that corrupt a
288
+ * range re-derived from live branch topology at verify time.
289
+ *
290
+ * Returns [] when the focus/merge is unknown or the API action is unavailable
291
+ * (best-effort): the verify diff resolver then falls through to its
292
+ * live-topology sources rather than blocking.
293
+ */
294
+ export declare function getRecordedCommitShasForMerge(focusId: string, mergeCommitSha: string): Promise<string[]>;
428
295
  /**
429
296
  * Report a git lifecycle state transition for a delivery.
430
297
  *
@@ -1 +1 @@
1
- {"version":3,"file":"deliveries.d.ts","sourceRoot":"","sources":["../../src/queries/deliveries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deliveries.d.ts","sourceRoot":"","sources":["../../src/queries/deliveries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAY,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAiChE;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IACnG,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC,CAeF;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAkB5F;AAED;;;;GAIG;AACH,YAAY,EACV,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,EACtC,SAAS,CAAC,EAAE,iBAAiB,GAAG,IAAI,EACpC,mBAAmB,CAAC,EAAE,kBAAkB,GAAG,IAAI,EAC/C,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAClG,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;CACxC,CAAC,CAAC,CAcF;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,iFAAiF;IACjF,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACtD;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3D,8EAA8E;IAC9E,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C,CAAC,CAAC,CA0BF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IACjG,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;;OAOG;IACH,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;;OAMG;IACH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,8BAA8B,EAAE,MAAM,CAAC;IACvC;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,iFAAiF;IACjF,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACtD;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3D,8EAA8E;IAC9E,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC,CAAC,CA+BF;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB;AASD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAC3G,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;CACxC,CAAC,CAAC,CAcF;AAGD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CAY1F"}