@telora/daemon 0.21.165 → 0.21.178

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 (103) hide show
  1. package/build-info.json +6 -3
  2. package/dist/completion/completion-decision.d.ts +16 -0
  3. package/dist/completion/completion-decision.d.ts.map +1 -1
  4. package/dist/completion/completion-decision.js +15 -0
  5. package/dist/completion/completion-decision.js.map +1 -1
  6. package/dist/completion/event-escalations.d.ts +26 -0
  7. package/dist/completion/event-escalations.d.ts.map +1 -1
  8. package/dist/completion/event-escalations.js +77 -19
  9. package/dist/completion/event-escalations.js.map +1 -1
  10. package/dist/completion/event-phases.d.ts +7 -0
  11. package/dist/completion/event-phases.d.ts.map +1 -1
  12. package/dist/completion/event-phases.js +19 -0
  13. package/dist/completion/event-phases.js.map +1 -1
  14. package/dist/completion/event.d.ts.map +1 -1
  15. package/dist/completion/event.js +1 -0
  16. package/dist/completion/event.js.map +1 -1
  17. package/dist/completion/human-only-act.d.ts +43 -0
  18. package/dist/completion/human-only-act.d.ts.map +1 -0
  19. package/dist/completion/human-only-act.js +75 -0
  20. package/dist/completion/human-only-act.js.map +1 -0
  21. package/dist/completion/machine-remediable-demotion.d.ts +14 -0
  22. package/dist/completion/machine-remediable-demotion.d.ts.map +1 -1
  23. package/dist/completion/machine-remediable-demotion.js +24 -1
  24. package/dist/completion/machine-remediable-demotion.js.map +1 -1
  25. package/dist/completion/review-defect-detector.d.ts +9 -0
  26. package/dist/completion/review-defect-detector.d.ts.map +1 -1
  27. package/dist/completion/review-defect-detector.js +11 -0
  28. package/dist/completion/review-defect-detector.js.map +1 -1
  29. package/dist/completion/review-exit-deps.d.ts +51 -0
  30. package/dist/completion/review-exit-deps.d.ts.map +1 -0
  31. package/dist/completion/review-exit-deps.js +46 -0
  32. package/dist/completion/review-exit-deps.js.map +1 -0
  33. package/dist/completion/review-exit-escalations.d.ts +28 -0
  34. package/dist/completion/review-exit-escalations.d.ts.map +1 -1
  35. package/dist/completion/review-exit-escalations.js +36 -10
  36. package/dist/completion/review-exit-escalations.js.map +1 -1
  37. package/dist/completion/review-exit-phase.d.ts +2 -38
  38. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  39. package/dist/completion/review-exit-phase.js +70 -45
  40. package/dist/completion/review-exit-phase.js.map +1 -1
  41. package/dist/completion/review-exit-progress.d.ts +5 -1
  42. package/dist/completion/review-exit-progress.d.ts.map +1 -1
  43. package/dist/completion/review-exit-progress.js +5 -1
  44. package/dist/completion/review-exit-progress.js.map +1 -1
  45. package/dist/completion/state-cascade.d.ts +11 -0
  46. package/dist/completion/state-cascade.d.ts.map +1 -1
  47. package/dist/completion/state-cascade.js +18 -0
  48. package/dist/completion/state-cascade.js.map +1 -1
  49. package/dist/delivery/delivery-reconciler.d.ts +15 -0
  50. package/dist/delivery/delivery-reconciler.d.ts.map +1 -1
  51. package/dist/delivery/delivery-reconciler.js +13 -0
  52. package/dist/delivery/delivery-reconciler.js.map +1 -1
  53. package/dist/focus/focus-loop-registry.d.ts.map +1 -1
  54. package/dist/focus/focus-loop-registry.js +12 -0
  55. package/dist/focus/focus-loop-registry.js.map +1 -1
  56. package/dist/focus/listener-auto-advance.d.ts.map +1 -1
  57. package/dist/focus/listener-auto-advance.js +40 -25
  58. package/dist/focus/listener-auto-advance.js.map +1 -1
  59. package/dist/queries/agent-resolvable-aging.d.ts +88 -0
  60. package/dist/queries/agent-resolvable-aging.d.ts.map +1 -0
  61. package/dist/queries/agent-resolvable-aging.js +145 -0
  62. package/dist/queries/agent-resolvable-aging.js.map +1 -0
  63. package/dist/queries/agent-resolvable-promotion.d.ts +37 -8
  64. package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -1
  65. package/dist/queries/agent-resolvable-promotion.js +77 -18
  66. package/dist/queries/agent-resolvable-promotion.js.map +1 -1
  67. package/dist/queries/escalation-consumption.d.ts +14 -0
  68. package/dist/queries/escalation-consumption.d.ts.map +1 -1
  69. package/dist/queries/escalation-consumption.js +15 -0
  70. package/dist/queries/escalation-consumption.js.map +1 -1
  71. package/dist/queries/focuses.d.ts +8 -0
  72. package/dist/queries/focuses.d.ts.map +1 -1
  73. package/dist/queries/focuses.js +19 -1
  74. package/dist/queries/focuses.js.map +1 -1
  75. package/dist/queries/routing-measurement.d.ts +65 -0
  76. package/dist/queries/routing-measurement.d.ts.map +1 -0
  77. package/dist/queries/routing-measurement.js +109 -0
  78. package/dist/queries/routing-measurement.js.map +1 -0
  79. package/dist/queries/routing-quality.d.ts +70 -0
  80. package/dist/queries/routing-quality.d.ts.map +1 -0
  81. package/dist/queries/routing-quality.js +66 -0
  82. package/dist/queries/routing-quality.js.map +1 -0
  83. package/dist/queries/schemas.d.ts +6 -0
  84. package/dist/queries/schemas.d.ts.map +1 -1
  85. package/dist/queries/schemas.js +6 -0
  86. package/dist/queries/schemas.js.map +1 -1
  87. package/dist/queries/sessions.d.ts +10 -0
  88. package/dist/queries/sessions.d.ts.map +1 -1
  89. package/dist/queries/sessions.js +14 -1
  90. package/dist/queries/sessions.js.map +1 -1
  91. package/dist/queries/source-reliability.d.ts +60 -0
  92. package/dist/queries/source-reliability.d.ts.map +1 -0
  93. package/dist/queries/source-reliability.js +70 -0
  94. package/dist/queries/source-reliability.js.map +1 -0
  95. package/dist/shell/control-state.d.ts +23 -7
  96. package/dist/shell/control-state.d.ts.map +1 -1
  97. package/dist/shell/control-state.js +41 -16
  98. package/dist/shell/control-state.js.map +1 -1
  99. package/dist/templates/claude-md.d.ts +1 -1
  100. package/dist/templates/claude-md.d.ts.map +1 -1
  101. package/dist/templates/claude-md.js +9 -0
  102. package/dist/templates/claude-md.js.map +1 -1
  103. package/package.json +3 -3
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Filing-boundary classifier: does an escalation's stated content name an act
3
+ * only a HUMAN can perform?
4
+ *
5
+ * A filing may claim a human-owning disposition (needs_operator, external_wait)
6
+ * only when it names what a human uniquely supplies -- one of four categories:
7
+ *
8
+ * 1. AUTHORITY the machine lacks (an approval / sign-off / credential a human
9
+ * alone holds).
10
+ * 2. INFORMATION not in the system (a decision or answer only the human has,
11
+ * not recoverable from the repo or the DB).
12
+ * 3. A JUDGMENT about intent (scope / priority / direction / what to build) --
13
+ * the historical `statedCauseNeedsIntent` case, now one facet of four.
14
+ * 4. A PHYSICAL act (hardware, on-site, an external console no execution
15
+ * surface reaches).
16
+ *
17
+ * A filing whose description alone lets a human resolve it by pasting it into an
18
+ * agent session names NONE of these -- the human would act as a message bus, not
19
+ * a regulator. Such a filing must not claim a human-owning disposition.
20
+ *
21
+ * The predicate is intentionally conservative on the POSITIVE side: it fires
22
+ * only on explicit evidence of a human-only act, mirroring `statedCauseNeedsIntent`
23
+ * (absent evidence -> machine ownership). Routing a genuinely human-owned filing
24
+ * to the machine lane once -- where a capable resolver either clears it or the
25
+ * agent-resolvable promotion path re-surfaces it on attempt evidence -- is a
26
+ * recoverable miss; admitting paste-resolvable junk into the human inbox on a
27
+ * vague match is the failure this focus exists to stop.
28
+ */
29
+ /**
30
+ * Category 3: a JUDGMENT about WHAT gets built (scope / intent / priority /
31
+ * product or design direction). This is the exact predicate that used to live
32
+ * inline as `statedCauseNeedsIntent`; it is preserved verbatim so the demotion
33
+ * classifier's behavior does not shift.
34
+ */
35
+ export function namesIntentJudgment(text) {
36
+ if (!text)
37
+ return false;
38
+ return /\b(re-?scope|rescoping|requirement|intent|priorit|product decision|design decision|what to build|change (?:what|the scope)|which .{0,40}?(?:should|to build))\b/i.test(text);
39
+ }
40
+ /** Category 1: authority / permission / a credential only a human holds. */
41
+ const AUTHORITY_RE = /\b(approv\w*|sign-?off|authoriz\w*|permission|grant\s+\w*\s*access|credential|access\s+token|password|passphrase|secret\b|budget\s+approv\w*|legal\s+review|compliance\s+(?:review|sign))\b/i;
42
+ /** Category 4: a PHYSICAL act / on-site / an external console no agent can reach. */
43
+ const PHYSICAL_RE = /\b(physical\w*|on-?site|hardware|data\s?cent\w*|power\s?cycle|unplug|re-?plug|reboot\s+the\s+\w+|rack\b|cabl\w*|press\s+the\s+\w+\s+button|swap\s+the\s+\w+\s+(?:drive|disk|card|module))\b/i;
44
+ /** External third party the system cannot act on directly (pairs with external_wait). */
45
+ const EXTERNAL_PARTY_RE = /\b(third[-\s]?party|vendor\b|provider['’]?s?\s+(?:support|console|side)|support\s+ticket|reach\s+out\s+to|contact\s+(?:the\s+)?\w+\s+(?:team|support|provider)|escalate\s+to\s+\w+\s+support)\b/i;
46
+ /** Category 2: information/decision only the human holds (not in repo or DB). */
47
+ const HUMAN_INFO_RE = /\b(only\s+(?:you|a\s+human)\s+\w+|human\s+(?:decision|judg(?:e)?ment|input)|business\s+decision|stakeholder\s+\w+|needs?\s+(?:a\s+)?(?:human\s+)?decision)\b/i;
48
+ /**
49
+ * Category 5 (operator authority over the running system): operation of the live
50
+ * daemon, its verify gate, or a delivery's workflow wiring -- state a sandboxed
51
+ * worktree agent cannot reach. This is what the DAEMON's own structural filings
52
+ * name (a gate-stuck delivery's gate_state, a daemon-loop that reports success
53
+ * without advancing status, a delivery with no workflow stage). It is a facet of
54
+ * "authority the machine lacks", scoped to the operator's control plane, so those
55
+ * genuinely operator-owned filings pass the human-only-act test rather than being
56
+ * mis-downgraded into a machine lane that cannot operate the daemon.
57
+ */
58
+ const OPERATOR_DOMAIN_RE = /\b(gate[_\s-]?state|verify\s+gate|gate-?stuck|daemon[-\s]?loop|workflow\s+stage|execution_status)\b/i;
59
+ /**
60
+ * Whether the given text names an act ONLY a human/operator can perform -- the
61
+ * union of the five categories above. Callers at the filing boundary combine the
62
+ * escalation's description + helpNeeded and pass the result: a human-owning
63
+ * disposition is admissible only when this returns true.
64
+ */
65
+ export function namesHumanOnlyAct(text) {
66
+ if (!text)
67
+ return false;
68
+ return (namesIntentJudgment(text) ||
69
+ AUTHORITY_RE.test(text) ||
70
+ PHYSICAL_RE.test(text) ||
71
+ EXTERNAL_PARTY_RE.test(text) ||
72
+ HUMAN_INFO_RE.test(text) ||
73
+ OPERATOR_DOMAIN_RE.test(text));
74
+ }
75
+ //# sourceMappingURL=human-only-act.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-only-act.js","sourceRoot":"","sources":["../../src/completion/human-only-act.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAwB;IAC1D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,kKAAkK,CAAC,IAAI,CAC5K,IAAI,CACL,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,YAAY,GAChB,8LAA8L,CAAC;AAEjM,qFAAqF;AACrF,MAAM,WAAW,GACf,8LAA8L,CAAC;AAEjM,yFAAyF;AACzF,MAAM,iBAAiB,GACrB,kMAAkM,CAAC;AAErM,iFAAiF;AACjF,MAAM,aAAa,GACjB,+JAA+J,CAAC;AAElK;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GACtB,sGAAsG,CAAC;AAEzG;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,CACL,mBAAmB,CAAC,IAAI,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACtB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9B,CAAC;AACJ,CAAC"}
@@ -25,6 +25,7 @@
25
25
  */
26
26
  import { type DemotableTeamFailureItem } from '../queries/escalation-consumption.js';
27
27
  import { type FileEscalationIdempotentParams, type FileEscalationIdempotentResult } from '../queries/escalation-suppression.js';
28
+ import { type MachineLaneMisRoute } from '../queries/routing-quality.js';
28
29
  /** escalation_kind preserved on a demoted (formerly needs_intent) team_failure. */
29
30
  export declare const MACHINE_REMEDIABLE_DEMOTED_KIND = "team_failure";
30
31
  /** The cause key that makes a demotion refile idempotent (one per source filing). */
@@ -53,12 +54,25 @@ export declare function buildDemotionRefileParams(item: DemotableTeamFailureItem
53
54
  export interface MachineRemediableDemotionCounts {
54
55
  scanned: number;
55
56
  demoted: number;
57
+ /**
58
+ * Machine-remediable filings that were NOT demoted this cycle because the
59
+ * measured machine-lane mis-route rate was over the ceiling (the lane is not
60
+ * clearing what it is handed, so more was withheld from it). Zero in the normal
61
+ * case; > 0 is the feedback firing.
62
+ */
63
+ held: number;
56
64
  }
57
65
  /** Injected IO for the demotion sweep (real defaults; tests inject stubs). */
58
66
  export interface MachineRemediableDemotionDeps {
59
67
  listOpenDemotable: () => Promise<DemotableTeamFailureItem[]>;
60
68
  markResolved: (id: string, notes?: string) => Promise<void>;
61
69
  file: (params: FileEscalationIdempotentParams) => Promise<FileEscalationIdempotentResult>;
70
+ /** Live machine-lane mis-route measurement -- the routing-quality feedback signal. */
71
+ measureMisRoute: () => Promise<MachineLaneMisRoute>;
72
+ /** Ceiling above which demotion holds (the lane is mis-routing). */
73
+ misRouteCeiling: number;
74
+ /** Minimum judged rows before the rate is trusted to hold. */
75
+ minSample: number;
62
76
  }
63
77
  /**
64
78
  * Sweep the org's OPEN needs_intent team_failures and return ownership to the
@@ -1 +1 @@
1
- {"version":3,"file":"machine-remediable-demotion.d.ts","sourceRoot":"","sources":["../../src/completion/machine-remediable-demotion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAAkE,KAAK,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACrJ,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,sCAAsC,CAAC;AAO9C,mFAAmF;AACnF,eAAO,MAAM,+BAA+B,iBAAiB,CAAC;AAE9D,qFAAqF;AACrF,wBAAgB,iCAAiC,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,wBAAwB,EAAE,GACzC;IAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IAAC,MAAM,EAAE,wBAAwB,EAAE,CAAA;CAAE,CAW1E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,8BAA8B,CAiChC;AAED,iEAAiE;AACjE,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8EAA8E;AAC9E,MAAM,WAAW,6BAA6B;IAC5C,iBAAiB,EAAE,MAAM,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC7D,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;CAC3F;AAUD;;;;;;;;;GASG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,GAAE,OAAO,CAAC,6BAA6B,CAAM,GAChD,OAAO,CAAC,+BAA+B,CAAC,CA4C1C"}
1
+ {"version":3,"file":"machine-remediable-demotion.d.ts","sourceRoot":"","sources":["../../src/completion/machine-remediable-demotion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAAkE,KAAK,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACrJ,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AAMvC,mFAAmF;AACnF,eAAO,MAAM,+BAA+B,iBAAiB,CAAC;AAE9D,qFAAqF;AACrF,wBAAgB,iCAAiC,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,wBAAwB,EAAE,GACzC;IAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IAAC,MAAM,EAAE,wBAAwB,EAAE,CAAA;CAAE,CAW1E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,8BAA8B,CAiChC;AAED,iEAAiE;AACjE,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,6BAA6B;IAC5C,iBAAiB,EAAE,MAAM,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC7D,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,sFAAsF;IACtF,eAAe,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpD,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD;;;;;;;;;GASG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,GAAE,OAAO,CAAC,6BAA6B,CAAM,GAChD,OAAO,CAAC,+BAA+B,CAAC,CAiE1C"}
@@ -28,6 +28,7 @@ import { markEscalationResolved as defaultMarkEscalationResolved } from '../quer
28
28
  import { listOpenDemotableTeamFailureForOrg as defaultListOpenDemotable } from '../queries/escalation-consumption.js';
29
29
  import { fileEscalationIdempotent as defaultFileEscalationIdempotent, } from '../queries/escalation-suppression.js';
30
30
  import { computeCauseKey } from '../queries/cause-key.js';
31
+ import { measureMachineLaneMisRoute as defaultMeasureMisRoute, shouldHoldDemotionForMisRoute, DEFAULT_MACHINE_LANE_MISROUTE_CEILING, DEFAULT_MIN_ROUTING_SAMPLE, } from '../queries/routing-quality.js';
31
32
  import { statedCauseNeedsIntent } from './event-escalations.js';
32
33
  import { createLogger } from '../shell/log.js';
33
34
  const log = createLogger({ module: 'escalations' });
@@ -97,6 +98,9 @@ function defaultDeps() {
97
98
  listOpenDemotable: defaultListOpenDemotable,
98
99
  markResolved: defaultMarkEscalationResolved,
99
100
  file: defaultFileEscalationIdempotent,
101
+ measureMisRoute: () => defaultMeasureMisRoute(),
102
+ misRouteCeiling: DEFAULT_MACHINE_LANE_MISROUTE_CEILING,
103
+ minSample: DEFAULT_MIN_ROUTING_SAMPLE,
100
104
  };
101
105
  }
102
106
  /**
@@ -113,6 +117,25 @@ export async function sweepMachineRemediableDemotions(deps = {}) {
113
117
  const d = { ...defaultDeps(), ...deps };
114
118
  const open = await d.listOpenDemotable();
115
119
  const { demote } = partitionDemotable(open);
120
+ // Routing-quality feedback: measure the machine lane's live mis-route rate and,
121
+ // if it is over the ceiling on sufficient evidence, HOLD -- do not return more
122
+ // filings to a lane that is not clearing what it already holds. The measured
123
+ // rate thereby feeds back into how these filings are classified (kept with the
124
+ // human vs demoted to the machine). Best-effort: a measurement failure never
125
+ // blocks the sweep -- it proceeds as if unmeasured.
126
+ let misRoute = { judged: 0, misRouted: 0, rate: 0 };
127
+ try {
128
+ misRoute = await d.measureMisRoute();
129
+ }
130
+ catch (err) {
131
+ log.warn(`[escalations] demotion mis-route measure failed (proceeding unmeasured): ${err.message}`);
132
+ }
133
+ if (demote.length > 0 && shouldHoldDemotionForMisRoute(misRoute, { ceiling: d.misRouteCeiling, minSample: d.minSample })) {
134
+ log.info(`[machine-remediable-demotion] HOLDING ${demote.length} demotion(s): machine-lane mis-route ` +
135
+ `rate ${misRoute.rate.toFixed(2)} > ceiling ${d.misRouteCeiling} over ${misRoute.judged} judged ` +
136
+ `rows -- the machine lane is not clearing what it holds, so more is withheld from it this cycle`);
137
+ return { scanned: open.length, demoted: 0, held: demote.length };
138
+ }
116
139
  let demoted = 0;
117
140
  for (const item of demote) {
118
141
  if (!item.organizationId) {
@@ -143,6 +166,6 @@ export async function sweepMachineRemediableDemotions(deps = {}) {
143
166
  // Left open; the next sweep retries.
144
167
  }
145
168
  }
146
- return { scanned: open.length, demoted };
169
+ return { scanned: open.length, demoted, held: 0 };
147
170
  }
148
171
  //# sourceMappingURL=machine-remediable-demotion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-remediable-demotion.js","sourceRoot":"","sources":["../../src/completion/machine-remediable-demotion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"machine-remediable-demotion.js","sourceRoot":"","sources":["../../src/completion/machine-remediable-demotion.ts"],"names":[],"mappings":"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"}
@@ -90,6 +90,15 @@ export declare function isReviewFiledComplete(issue: Pick<FocusIssueInfo, 'id' |
90
90
  export declare function reviewFiledIssueExistsComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null): boolean;
91
91
  /** Complete-set counterpart of blockingReviewFiledIssueExists. */
92
92
  export declare function blockingReviewFiledIssueExistsComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null): boolean;
93
+ /**
94
+ * Complete-set counterpart of blockingReviewFiledIssueExists returning the LIST
95
+ * (not just existence): the OPEN, BLOCKING review-filed issues on the focus. Used
96
+ * by the hand-off breaker to ENUMERATE the outstanding findings in its escalation
97
+ * -- so an operator can tell whether the focus carries outstanding review
98
+ * findings without opening the daemon log, rather than reading the breaker's old
99
+ * untested "there was no work left to route" assertion.
100
+ */
101
+ export declare function filterBlockingReviewFiledComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null): FocusIssueInfo[];
93
102
  /** Complete-set counterpart of filterDeferrableReviewNotes. */
94
103
  export declare function filterDeferrableReviewNotesComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null): FocusIssueInfo[];
95
104
  //# sourceMappingURL=review-defect-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"review-defect-detector.d.ts","sourceRoot":"","sources":["../../src/completion/review-defect-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,MACU,CAAC;AAYlD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wCAAwC;AACxC,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAID;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,GAAG,WAAW,GAAG,QAAQ,CAAC,EACvE,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,cAAc,EAAE,CAElB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAUT;AAcD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAG1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC,EACpF,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,cAAc,EAAE,CAElB;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAIT;AAmBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,QAAQ,CAAC,EAC5C,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,OAAO,CAET;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,iBAAiB,GAAG,WAAW,GAAG,QAAQ,CAAC,EAC9E,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAET;AAED,0DAA0D;AAC1D,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,EAAE,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAET;AAED,kEAAkE;AAClE,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,cAAc,EAAE,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAIT;AAED,+DAA+D;AAC/D,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,cAAc,EAAE,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,cAAc,EAAE,CAIlB"}
1
+ {"version":3,"file":"review-defect-detector.d.ts","sourceRoot":"","sources":["../../src/completion/review-defect-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,MACU,CAAC;AAYlD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wCAAwC;AACxC,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAID;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,GAAG,WAAW,GAAG,QAAQ,CAAC,EACvE,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,cAAc,EAAE,CAElB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAUT;AAcD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAG1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC,EACpF,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,cAAc,EAAE,CAElB;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAIT;AAmBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,QAAQ,CAAC,EAC5C,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,OAAO,CAET;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,iBAAiB,GAAG,WAAW,GAAG,QAAQ,CAAC,EAC9E,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAET;AAED,0DAA0D;AAC1D,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,EAAE,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAET;AAED,kEAAkE;AAClE,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,cAAc,EAAE,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAIT;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,cAAc,EAAE,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,cAAc,EAAE,CAIlB;AAED,+DAA+D;AAC/D,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,cAAc,EAAE,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,cAAc,EAAE,CAIlB"}
@@ -180,6 +180,17 @@ export function reviewFiledIssueExistsComplete(issues, reviewFiledIds, reviewReq
180
180
  export function blockingReviewFiledIssueExistsComplete(issues, reviewFiledIds, reviewRequestedAt) {
181
181
  return issues.some(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && !isLowPriority(i.priority));
182
182
  }
183
+ /**
184
+ * Complete-set counterpart of blockingReviewFiledIssueExists returning the LIST
185
+ * (not just existence): the OPEN, BLOCKING review-filed issues on the focus. Used
186
+ * by the hand-off breaker to ENUMERATE the outstanding findings in its escalation
187
+ * -- so an operator can tell whether the focus carries outstanding review
188
+ * findings without opening the daemon log, rather than reading the breaker's old
189
+ * untested "there was no work left to route" assertion.
190
+ */
191
+ export function filterBlockingReviewFiledComplete(issues, reviewFiledIds, reviewRequestedAt) {
192
+ return issues.filter(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && !isLowPriority(i.priority));
193
+ }
183
194
  /** Complete-set counterpart of filterDeferrableReviewNotes. */
184
195
  export function filterDeferrableReviewNotesComplete(issues, reviewFiledIds, reviewRequestedAt) {
185
196
  return issues.filter(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && isLowPriority(i.priority));
@@ -1 +1 @@
1
- {"version":3,"file":"review-defect-detector.js","sourceRoot":"","sources":["../../src/completion/review-defect-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-defect-detector.js","sourceRoot":"","sources":["../../src/completion/review-defect-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Dependency contract + default wiring for the review-exit phase.
3
+ *
4
+ * Split out of review-exit-phase.ts: that module carried both the review-exit
5
+ * routing decision tree and the long concrete-import list that binds
6
+ * ReviewExitDeps to the real query/directive/loop implementations. The contract
7
+ * and its production wiring live here; the phase module imports both and
8
+ * re-exports the type for existing importers. Dependency direction is one-way
9
+ * (phase -> deps), so the completion family stays acyclic under
10
+ * import-x/no-cycle. Bodies verbatim.
11
+ */
12
+ import { fetchEffectiveWorkflow } from '../queries/workflows.js';
13
+ import { updateDeliveryStatus, markDeliveryAutoApproved } from '../queries/deliveries.js';
14
+ import { getActiveFocuses } from '../queries/focus-discovery.js';
15
+ import { hasPendingSpawnDirective } from '../directive/directive-queue.js';
16
+ import { emitLoopTrigger } from '../loops/index.js';
17
+ import { getFocusDeliveries, getFocusIssues, clearReviewRequestedAt, setReviewedThroughSha, setReviewCycleCount, setReviewHandoffCount, getFocusReviewReportForSession, getFocusReviewFiledIssueIds } from '../queries/focuses.js';
18
+ import { resolveReviewCycleCap, resolveReviewHandoffCap } from '../verify/stall-detector-config.js';
19
+ import { getDeliveryIssues } from '../queries/issues.js';
20
+ import { createEscalation, hasOpenFocusEscalation } from '../queries/escalations.js';
21
+ import { findOpenOperatorHoldForDelivery } from '../queries/holds.js';
22
+ import { listOpenShortfallProposalIds } from '../queries/reality-tree.js';
23
+ /**
24
+ * Dependencies for runReviewExitHandler. Defaults to real implementations;
25
+ * overridable in tests via the optional `deps` argument.
26
+ */
27
+ export interface ReviewExitDeps {
28
+ getActiveFocuses: typeof getActiveFocuses;
29
+ getFocusDeliveries: typeof getFocusDeliveries;
30
+ getFocusIssues: typeof getFocusIssues;
31
+ getDeliveryIssues: typeof getDeliveryIssues;
32
+ fetchEffectiveWorkflow: typeof fetchEffectiveWorkflow;
33
+ updateDeliveryStatus: typeof updateDeliveryStatus;
34
+ markDeliveryAutoApproved: typeof markDeliveryAutoApproved;
35
+ clearReviewRequestedAt: typeof clearReviewRequestedAt;
36
+ setReviewedThroughSha: typeof setReviewedThroughSha;
37
+ setReviewCycleCount?: typeof setReviewCycleCount;
38
+ resolveReviewCycleCap?: typeof resolveReviewCycleCap;
39
+ setReviewHandoffCount?: typeof setReviewHandoffCount;
40
+ resolveReviewHandoffCap?: typeof resolveReviewHandoffCap;
41
+ hasOpenFocusEscalation?: typeof hasOpenFocusEscalation;
42
+ listOpenShortfallProposalIds?: typeof listOpenShortfallProposalIds;
43
+ findOpenOperatorHoldForDelivery?: typeof findOpenOperatorHoldForDelivery;
44
+ hasPendingSpawnDirective: typeof hasPendingSpawnDirective;
45
+ emitLoopTrigger: typeof emitLoopTrigger;
46
+ getFocusReviewReportForSession: typeof getFocusReviewReportForSession;
47
+ getFocusReviewFiledIssueIds?: typeof getFocusReviewFiledIssueIds;
48
+ createEscalation: typeof createEscalation;
49
+ }
50
+ export declare const defaultReviewExitDeps: ReviewExitDeps;
51
+ //# sourceMappingURL=review-exit-deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-exit-deps.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAE1E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IACtD,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;IAClD,wBAAwB,EAAE,OAAO,wBAAwB,CAAC;IAC1D,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IACtD,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;IAGpD,mBAAmB,CAAC,EAAE,OAAO,mBAAmB,CAAC;IACjD,qBAAqB,CAAC,EAAE,OAAO,qBAAqB,CAAC;IAKrD,qBAAqB,CAAC,EAAE,OAAO,qBAAqB,CAAC;IACrD,uBAAuB,CAAC,EAAE,OAAO,uBAAuB,CAAC;IAGzD,sBAAsB,CAAC,EAAE,OAAO,sBAAsB,CAAC;IAKvD,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;IAMnE,+BAA+B,CAAC,EAAE,OAAO,+BAA+B,CAAC;IACzE,wBAAwB,EAAE,OAAO,wBAAwB,CAAC;IAC1D,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,8BAA8B,EAAE,OAAO,8BAA8B,CAAC;IAMtE,2BAA2B,CAAC,EAAE,OAAO,2BAA2B,CAAC;IACjE,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;CAC3C;AAED,eAAO,MAAM,qBAAqB,EAAE,cAsBnC,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Dependency contract + default wiring for the review-exit phase.
3
+ *
4
+ * Split out of review-exit-phase.ts: that module carried both the review-exit
5
+ * routing decision tree and the long concrete-import list that binds
6
+ * ReviewExitDeps to the real query/directive/loop implementations. The contract
7
+ * and its production wiring live here; the phase module imports both and
8
+ * re-exports the type for existing importers. Dependency direction is one-way
9
+ * (phase -> deps), so the completion family stays acyclic under
10
+ * import-x/no-cycle. Bodies verbatim.
11
+ */
12
+ import { fetchEffectiveWorkflow } from '../queries/workflows.js';
13
+ import { updateDeliveryStatus, markDeliveryAutoApproved } from '../queries/deliveries.js';
14
+ import { getActiveFocuses } from '../queries/focus-discovery.js';
15
+ import { hasPendingSpawnDirective } from '../directive/directive-queue.js';
16
+ import { emitLoopTrigger } from '../loops/index.js';
17
+ import { getFocusDeliveries, getFocusIssues, clearReviewRequestedAt, setReviewedThroughSha, setReviewCycleCount, setReviewHandoffCount, getFocusReviewReportForSession, getFocusReviewFiledIssueIds, } from '../queries/focuses.js';
18
+ import { resolveReviewCycleCap, resolveReviewHandoffCap } from '../verify/stall-detector-config.js';
19
+ import { getDeliveryIssues } from '../queries/issues.js';
20
+ import { createEscalation, hasOpenFocusEscalation } from '../queries/escalations.js';
21
+ import { findOpenOperatorHoldForDelivery } from '../queries/holds.js';
22
+ import { listOpenShortfallProposalIds } from '../queries/reality-tree.js';
23
+ export const defaultReviewExitDeps = {
24
+ getActiveFocuses,
25
+ getFocusDeliveries,
26
+ getFocusIssues,
27
+ getDeliveryIssues,
28
+ fetchEffectiveWorkflow,
29
+ updateDeliveryStatus,
30
+ markDeliveryAutoApproved,
31
+ clearReviewRequestedAt,
32
+ setReviewedThroughSha,
33
+ setReviewCycleCount,
34
+ resolveReviewCycleCap,
35
+ setReviewHandoffCount,
36
+ resolveReviewHandoffCap,
37
+ hasOpenFocusEscalation,
38
+ listOpenShortfallProposalIds,
39
+ findOpenOperatorHoldForDelivery,
40
+ hasPendingSpawnDirective,
41
+ emitLoopTrigger,
42
+ getFocusReviewReportForSession,
43
+ getFocusReviewFiledIssueIds,
44
+ createEscalation,
45
+ };
46
+ //# sourceMappingURL=review-exit-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-exit-deps.js","sourceRoot":"","sources":["../../src/completion/review-exit-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAoD1E,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,sBAAsB;IACtB,oBAAoB;IACpB,wBAAwB;IACxB,sBAAsB;IACtB,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;IACrB,qBAAqB;IACrB,uBAAuB;IACvB,sBAAsB;IACtB,4BAA4B;IAC5B,+BAA+B;IAC/B,wBAAwB;IACxB,eAAe;IACf,8BAA8B;IAC9B,2BAA2B;IAC3B,gBAAgB;CACjB,CAAC"}
@@ -33,6 +33,16 @@ export interface ReviewExitEscalationContext {
33
33
  focusName: string;
34
34
  sessionId: string;
35
35
  }
36
+ /**
37
+ * A compact summary of one open, blocking, review-filed finding on a focus,
38
+ * enumerated in the hand-off-exhausted escalation so an operator can see the
39
+ * outstanding findings without opening the daemon log.
40
+ */
41
+ export interface ReviewFiledFindingSummary {
42
+ key: string;
43
+ title: string;
44
+ deliveryId: string | null;
45
+ }
36
46
  /**
37
47
  * Focus-level review-cycle churn METER (NOT a breaker), plus the one escalation
38
48
  * it arms.
@@ -101,6 +111,23 @@ export declare function recordHandoffAndMaybeTerminate(deps: HandoffBoundDeps, c
101
111
  * (the empty verify->verify_failed round trip).
102
112
  */
103
113
  trigger?: 'pending_spawn_handoff' | 'no_delta_cycle';
114
+ /**
115
+ * The EXITING session's type. The hand-off breaker measures ONLY review-pass
116
+ * exits: a coding pass cannot approve a review, so its routes-nothing exit
117
+ * was never a routing candidate and must not advance the cap (2026-08-27:
118
+ * two CODING exits exhausted the cap without one review exit having failed,
119
+ * then the breaker filed an escalation asserting the focus was done while a
120
+ * P1 finding was open). When present and NOT 'review', this is a no-op --
121
+ * the counter does not advance and no escalation is filed. Absent preserves
122
+ * the legacy count-any-exit behavior for callers/tests that predate the gate.
123
+ */
124
+ sessionType?: 'coding' | 'review';
125
+ /**
126
+ * Open, blocking, review-filed findings on the focus, resolved by the
127
+ * handler. Enumerated in the exhausted escalation (and its metadata) so the
128
+ * escalation states what it MEASURED instead of asserting "nothing to route".
129
+ */
130
+ openBlockingFindings?: ReviewFiledFindingSummary[];
104
131
  }): Promise<void>;
105
132
  /**
106
133
  * The review hand-off has terminated. The review-exit hand-off branch re-asserts
@@ -114,6 +141,7 @@ export declare function fileHandoffExhaustedEscalation(deps: ReviewExitEscalatio
114
141
  handoffCount: number;
115
142
  cap: number;
116
143
  trigger?: 'pending_spawn_handoff' | 'no_delta_cycle';
144
+ openBlockingFindings?: ReviewFiledFindingSummary[];
117
145
  }): Promise<void>;
118
146
  /**
119
147
  * The routing inconsistency the review-exit gate exists to catch: the review
@@ -1 +1 @@
1
- {"version":3,"file":"review-exit-escalations.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-escalations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAK7E,sFAAsF;AACtF,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAG1C,sBAAsB,CAAC,EAAE,OAAO,sBAAsB,CAAC;IAGvD,mBAAmB,CAAC,EAAE,OAAO,mBAAmB,CAAC;IACjD,qBAAqB,CAAC,EAAE,OAAO,qBAAqB,CAAC;CACtD;AAED,mEAAmE;AACnE,MAAM,WAAW,2BAA2B;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAsDD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE,2BAA2B,EAChC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE,2BAA2B,EAChC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnF,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wGAAwG;AACxG,MAAM,WAAW,gBAAiB,SAAQ,wBAAwB;IAChE,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IACtD,qBAAqB,CAAC,EAAE,OAAO,qBAAqB,CAAC;IACrD,uBAAuB,CAAC,EAAE,OAAO,uBAAuB,CAAC;CAC1D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,2BAA2B,EAChC,mBAAmB,EAAE,MAAM,EAC3B,IAAI,CAAC,EAAE;IACL;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAAC;CACtD,GACA,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE,2BAA2B,EAChC,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAAA;CAAE,GAChG,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;;;;;;;;GASG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAwBf"}
1
+ {"version":3,"file":"review-exit-escalations.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-escalations.ts"],"names":[],"mappings":"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"}
@@ -166,6 +166,13 @@ export async function fileCoverageIncompleteEscalation(deps, ctx, args) {
166
166
  */
167
167
  export async function recordHandoffAndMaybeTerminate(deps, ctx, currentHandoffCount, opts) {
168
168
  const trigger = opts?.trigger ?? 'pending_spawn_handoff';
169
+ // MEASURE, don't assume: the breaker counts only review-pass exits. A
170
+ // non-review exit that routed nothing was never a review routing candidate.
171
+ if (opts?.sessionType && opts.sessionType !== 'review') {
172
+ log.info(`[focus-executor] "${ctx.focusName}" ${opts.sessionType} session exit routed nothing ` +
173
+ `(trigger=${trigger}) -- not a review pass; hand-off counter not advanced.`);
174
+ return;
175
+ }
169
176
  const handoffCap = (deps.resolveReviewHandoffCap ?? resolveReviewHandoffCap)();
170
177
  const nextHandoffCount = currentHandoffCount + 1;
171
178
  const persist = async () => {
@@ -183,7 +190,12 @@ export async function recordHandoffAndMaybeTerminate(deps, ctx, currentHandoffCo
183
190
  // window, and file one operator escalation (deduped one-open-per-focus).
184
191
  await persist();
185
192
  await deps.clearReviewRequestedAt(ctx.focusId);
186
- await fileHandoffExhaustedEscalation(deps, ctx, { handoffCount: nextHandoffCount, cap: handoffCap, trigger });
193
+ await fileHandoffExhaustedEscalation(deps, ctx, {
194
+ handoffCount: nextHandoffCount,
195
+ cap: handoffCap,
196
+ trigger,
197
+ openBlockingFindings: opts?.openBlockingFindings ?? [],
198
+ });
187
199
  log.warn(`[focus-executor] "${ctx.focusName}" review no-progress bound EXHAUSTED (${nextHandoffCount} >= cap ${handoffCap}, ` +
188
200
  `trigger=${trigger}) -- review_requested_at cleared and review_handoff_exhausted escalation filed; no re-assertion.`);
189
201
  }
@@ -209,25 +221,39 @@ export async function recordHandoffAndMaybeTerminate(deps, ctx, currentHandoffCo
209
221
  * branch) and files THIS escalation instead. One open row per focus.
210
222
  */
211
223
  export async function fileHandoffExhaustedEscalation(deps, ctx, args) {
224
+ // ENUMERATE what the breaker measured. The old text asserted "there was no
225
+ // work left to route" and asked the operator to confirm the focus is done --
226
+ // untested, and false in the 2026-08-27 incident (a P1 finding was open the
227
+ // whole time). State the measured open blocking review-filed findings instead,
228
+ // or say there are none as a measured result.
229
+ const findings = args.openBlockingFindings ?? [];
230
+ const findingsBlock = findings.length > 0
231
+ ? `\n\nMEASURED: ${findings.length} open blocking review-filed finding(s) remain on this focus ` +
232
+ `-- the focus is NOT clean:\n` +
233
+ findings
234
+ .map(f => ` - ${f.key}: ${f.title}${f.deliveryId ? ` (delivery ${f.deliveryId})` : ''}`)
235
+ .join('\n') +
236
+ `\n\nRoute or descope these findings; do not close the focus while they are open.`
237
+ : `\n\nMEASURED: 0 open blocking review-filed findings on this focus at exit. If the focus is ` +
238
+ `genuinely done, close/descope it; otherwise resolve why the review window kept re-opening ` +
239
+ `with no work to route.`;
212
240
  await fileDedupedFocusEscalation(deps, ctx, {
213
241
  escalationKind: 'review_handoff_exhausted',
214
242
  label: 'handoff-exhausted',
215
243
  reasonType: ESCALATION_REASONS.BLOCKED_BY_EXTERNAL,
216
- description: `Review of "${ctx.focusName}" handed off to an incoming team ${args.handoffCount} time(s) ` +
217
- `(cap ${args.cap}) without any team routing a delivery. Each hand-off left ` +
218
- `review_requested_at set on the assumption the incoming team would do the routing, but ` +
219
- `there was no work left to route, so the incoming team re-made the same empty hand-off. ` +
220
- `The daemon has CLOSED the review window (cleared review_requested_at) and stopped ` +
221
- `re-asserting the hand-off, so the self-perpetuating loop cannot re-create its own ` +
222
- `precondition.\n\n` +
223
- `An operator should confirm the focus is genuinely done (nothing left to review) and ` +
224
- `close/descope it, or resolve why the review window kept re-opening with no work to route.`,
244
+ description: `Review of "${ctx.focusName}" handed off to an incoming review team ${args.handoffCount} time(s) ` +
245
+ `(cap ${args.cap}) without any review session routing a delivery. The daemon has CLOSED the ` +
246
+ `review window (cleared review_requested_at) and stopped re-asserting the hand-off, so the ` +
247
+ `self-perpetuating loop cannot re-create its own precondition.` +
248
+ findingsBlock,
225
249
  metadata: {
226
250
  session_id: ctx.sessionId,
227
251
  handoff_count: args.handoffCount,
228
252
  cap: args.cap,
229
253
  routed_via: 'handoff_exhausted',
230
254
  trigger: args.trigger ?? 'pending_spawn_handoff',
255
+ open_blocking_review_filed_count: findings.length,
256
+ open_blocking_review_filed_findings: findings.map(f => f.key),
231
257
  },
232
258
  onFiled: () => {
233
259
  log.warn(`[focus-executor] review_handoff_exhausted escalation filed for "${ctx.focusName}" ` +
@@ -1 +1 @@
1
- {"version":3,"file":"review-exit-escalations.js","sourceRoot":"","sources":["../../src/completion/review-exit-escalations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-exit-escalations.js","sourceRoot":"","sources":["../../src/completion/review-exit-escalations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAIlF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAiCvD;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,0BAA0B,CACvC,IAA8B,EAC9B,GAAgC,EAChC,IAOC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;IAC9D,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,KAAK,iBAAiB,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;IACD,IAAI,WAAW;QAAE,OAAO;IACxB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,gBAAgB,CAAC;YAC1B,cAAc;YACd,SAAS;YACT,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,kBAAkB,CAAC,eAAe;YACjE,WAAW,EAAE,uBAAuB,CAAC,cAAc;YACnD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;YAC9B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,KAAK,iBAAiB,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,IAA8B,EAC9B,GAAgC,EAChC,eAAuB;IAEvB,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,qBAAqB;QAAE,OAAO;IACrE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;IAE9D,MAAM,aAAa,GAAG,eAAe,GAAG,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,oDAAoD,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACpD,IAAI,CAAC,CAAC,eAAe,GAAG,cAAc,IAAI,aAAa,IAAI,cAAc,CAAC;QAAE,OAAO;IAEnF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,gBAAgB,CAAC;YAC1B,cAAc;YACd,SAAS;YACT,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,kBAAkB,CAAC,eAAe;YAC9C,WAAW,EAAE,uBAAuB,CAAC,cAAc;YACnD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;YAC9B,WAAW,EACT,UAAU,SAAS,mBAAmB,aAAa,mBAAmB;gBACtE,SAAS,cAAc,iDAAiD;gBACxE,wEAAwE;gBACxE,uEAAuE;gBACvE,8CAA8C;YAChD,cAAc,EAAE,2BAA2B;YAC3C,QAAQ,EAAE,EAAE,kBAAkB,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE;SACrE,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CACN,kEAAkE;YAClE,IAAI,SAAS,aAAa,aAAa,SAAS,cAAc,IAAI,CACnE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,oEAAoE,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAC5G,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,IAA8B,EAC9B,GAAgC,EAChC,IAAoF;IAEpF,MAAM,0BAA0B,CAAC,IAAI,EAAE,GAAG,EAAE;QAC1C,cAAc,EAAE,4BAA4B;QAC5C,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,UAAU,GAAG,CAAC,SAAS,yDAAyD;YAChF,qDAAqD,IAAI,CAAC,MAAM,kBAAkB;YAClF,8EAA8E;YAC9E,iFAAiF;YACjF,0DAA0D;QAC5D,QAAQ,EAAE;YACR,WAAW,EAAE,IAAI,CAAC,UAAU;YAC5B,WAAW,EAAE,IAAI,CAAC,gBAAgB;YAClC,YAAY,EAAE,IAAI,CAAC,MAAM;SAC1B;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,GAAG,CAAC,IAAI,CACN,qEAAqE,GAAG,CAAC,SAAS,mBAAmB,IAAI,CAAC,MAAM,IAAI,CACrH,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AASD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,IAAsB,EACtB,GAAgC,EAChC,mBAA2B,EAC3B,IA2BC;IAED,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,uBAAuB,CAAC;IACzD,sEAAsE;IACtE,4EAA4E;IAC5E,IAAI,IAAI,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACvD,GAAG,CAAC,IAAI,CACN,qBAAqB,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,+BAA+B;YACtF,YAAY,OAAO,wDAAwD,CAC5E,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,uBAAuB,CAAC,EAAE,CAAC;IAC/E,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACxC,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAAE,OAAO;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CACN,sDAAsD,GAAG,CAAC,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAClG,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,IAAI,CAAC,qBAAqB,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAAC;QACjE,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,8BAA8B,CAAC,IAAI,EAAE,GAAG,EAAE;YAC9C,YAAY,EAAE,gBAAgB;YAC9B,GAAG,EAAE,UAAU;YACf,OAAO;YACP,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,IAAI,EAAE;SACvD,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CACN,qBAAqB,GAAG,CAAC,SAAS,yCAAyC,gBAAgB,WAAW,UAAU,IAAI;YACpH,WAAW,OAAO,kGAAkG,CACrH,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,8EAA8E;QAC9E,4EAA4E;QAC5E,8EAA8E;QAC9E,gCAAgC;QAChC,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,OAAO,KAAK,gBAAgB;YACzC,CAAC,CAAC,iEAAiE;YACnE,CAAC,CAAC,0GAA0G,CAAC;QAC/G,GAAG,CAAC,IAAI,CACN,qBAAqB,GAAG,CAAC,SAAS,iBAAiB,MAAM,GAAG;YAC5D,gBAAgB,gBAAgB,IAAI,UAAU,IAAI,CACnD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,IAA8B,EAC9B,GAAgC,EAChC,IAKC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,4EAA4E;IAC5E,+EAA+E;IAC/E,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;QACvC,CAAC,CAAC,iBAAiB,QAAQ,CAAC,MAAM,8DAA8D;YAC9F,8BAA8B;YAC9B,QAAQ;iBACL,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;iBACxF,IAAI,CAAC,IAAI,CAAC;YACb,kFAAkF;QACpF,CAAC,CAAC,6FAA6F;YAC7F,4FAA4F;YAC5F,wBAAwB,CAAC;IAE7B,MAAM,0BAA0B,CAAC,IAAI,EAAE,GAAG,EAAE;QAC1C,cAAc,EAAE,0BAA0B;QAC1C,KAAK,EAAE,mBAAmB;QAC1B,UAAU,EAAE,kBAAkB,CAAC,mBAAmB;QAClD,WAAW,EACT,cAAc,GAAG,CAAC,SAAS,2CAA2C,IAAI,CAAC,YAAY,WAAW;YAClG,QAAQ,IAAI,CAAC,GAAG,6EAA6E;YAC7F,4FAA4F;YAC5F,+DAA+D;YAC/D,aAAa;QACf,QAAQ,EAAE;YACR,UAAU,EAAE,GAAG,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,mBAAmB;YAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,uBAAuB;YAChD,gCAAgC,EAAE,QAAQ,CAAC,MAAM;YACjD,mCAAmC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;SAC9D;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,GAAG,CAAC,IAAI,CACN,mEAAmE,GAAG,CAAC,SAAS,IAAI;gBACpF,cAAc,IAAI,CAAC,YAAY,SAAS,IAAI,CAAC,GAAG,0BAA0B,CAC3E,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,IAA8B,EAC9B,GAAgC;IAEhC,MAAM,0BAA0B,CAAC,IAAI,EAAE,GAAG,EAAE;QAC1C,cAAc,EAAE,2BAA2B;QAC3C,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,cAAc,GAAG,CAAC,SAAS,4CAA4C;YACvE,qEAAqE;YACrE,wEAAwE;YACxE,qEAAqE;YACrE,uEAAuE;YACvE,sEAAsE;YACtE,qBAAqB;QACvB,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE;QAChG,OAAO,EAAE,GAAG,EAAE;YACZ,GAAG,CAAC,IAAI,CACN,oEAAoE,GAAG,CAAC,SAAS,IAAI;gBACrF,0CAA0C,CAC3C,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAA8B,EAC9B,GAAgC;IAEhC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,gBAAgB,CAAC;YAC1B,cAAc;YACd,SAAS;YACT,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,kBAAkB,CAAC,mBAAmB;YAClD,2EAA2E;YAC3E,WAAW,EAAE,uBAAuB,CAAC,cAAc;YACnD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;YAC9B,WAAW,EACT,sEAAsE;gBACtE,qEAAqE;gBACrE,qEAAqE;YACvE,cAAc,EAAE,uBAAuB;YACvC,sEAAsE;YACtE,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE;SAClE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,yEAAyE,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CACjH,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -9,44 +9,8 @@
9
9
  * from completion/event.ts on a review pass completion. Extracted from
10
10
  * completion/team-completion.ts; bodies verbatim.
11
11
  */
12
- import { fetchEffectiveWorkflow } from '../queries/workflows.js';
13
- import { updateDeliveryStatus, markDeliveryAutoApproved } from '../queries/deliveries.js';
14
- import { getActiveFocuses } from '../queries/focus-discovery.js';
15
- import { hasPendingSpawnDirective } from '../directive/directive-queue.js';
16
- import { emitLoopTrigger } from '../loops/index.js';
17
- import { getFocusDeliveries, getFocusIssues, clearReviewRequestedAt, setReviewedThroughSha, setReviewCycleCount, setReviewHandoffCount, getFocusReviewReportForSession, getFocusReviewFiledIssueIds } from '../queries/focuses.js';
18
- import { resolveReviewCycleCap, resolveReviewHandoffCap } from '../verify/stall-detector-config.js';
19
- import { getDeliveryIssues } from '../queries/issues.js';
20
- import { createEscalation, hasOpenFocusEscalation } from '../queries/escalations.js';
21
- import { findOpenOperatorHoldForDelivery } from '../queries/holds.js';
22
- import { listOpenShortfallProposalIds } from '../queries/reality-tree.js';
23
- /**
24
- * Dependencies for runReviewExitHandler. Defaults to real implementations;
25
- * overridable in tests via the optional `deps` argument.
26
- */
27
- export interface ReviewExitDeps {
28
- getActiveFocuses: typeof getActiveFocuses;
29
- getFocusDeliveries: typeof getFocusDeliveries;
30
- getFocusIssues: typeof getFocusIssues;
31
- getDeliveryIssues: typeof getDeliveryIssues;
32
- fetchEffectiveWorkflow: typeof fetchEffectiveWorkflow;
33
- updateDeliveryStatus: typeof updateDeliveryStatus;
34
- markDeliveryAutoApproved: typeof markDeliveryAutoApproved;
35
- clearReviewRequestedAt: typeof clearReviewRequestedAt;
36
- setReviewedThroughSha: typeof setReviewedThroughSha;
37
- setReviewCycleCount?: typeof setReviewCycleCount;
38
- resolveReviewCycleCap?: typeof resolveReviewCycleCap;
39
- setReviewHandoffCount?: typeof setReviewHandoffCount;
40
- resolveReviewHandoffCap?: typeof resolveReviewHandoffCap;
41
- hasOpenFocusEscalation?: typeof hasOpenFocusEscalation;
42
- listOpenShortfallProposalIds?: typeof listOpenShortfallProposalIds;
43
- findOpenOperatorHoldForDelivery?: typeof findOpenOperatorHoldForDelivery;
44
- hasPendingSpawnDirective: typeof hasPendingSpawnDirective;
45
- emitLoopTrigger: typeof emitLoopTrigger;
46
- getFocusReviewReportForSession: typeof getFocusReviewReportForSession;
47
- getFocusReviewFiledIssueIds?: typeof getFocusReviewFiledIssueIds;
48
- createEscalation: typeof createEscalation;
49
- }
12
+ export type { ReviewExitDeps } from './review-exit-deps.js';
13
+ import type { ReviewExitDeps } from './review-exit-deps.js';
50
14
  export interface ReviewExitParams {
51
15
  focusId: string;
52
16
  focusName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"review-exit-phase.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-phase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-exit-phase.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoCH,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,gGAAgG;AAChG,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE,cAAsC,GAC3C,OAAO,CAAC,IAAI,CAAC,CA6mBf"}