@urateam/core 0.1.56 → 0.1.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/__tests__/audit-immutability.test.js +8 -0
  2. package/dist/__tests__/audit-immutability.test.js.map +1 -1
  3. package/dist/__tests__/auth-check.test.js +130 -16
  4. package/dist/__tests__/auth-check.test.js.map +1 -1
  5. package/dist/__tests__/auth-monitor.test.js +127 -103
  6. package/dist/__tests__/auth-monitor.test.js.map +1 -1
  7. package/dist/__tests__/circuit-breaker-config.test.d.ts +2 -0
  8. package/dist/__tests__/circuit-breaker-config.test.d.ts.map +1 -0
  9. package/dist/__tests__/circuit-breaker-config.test.js +32 -0
  10. package/dist/__tests__/circuit-breaker-config.test.js.map +1 -0
  11. package/dist/__tests__/circuit-breaker-events.test.d.ts +2 -0
  12. package/dist/__tests__/circuit-breaker-events.test.d.ts.map +1 -0
  13. package/dist/__tests__/circuit-breaker-events.test.js +53 -0
  14. package/dist/__tests__/circuit-breaker-events.test.js.map +1 -0
  15. package/dist/__tests__/circuit-breaker-integration.test.d.ts +2 -0
  16. package/dist/__tests__/circuit-breaker-integration.test.d.ts.map +1 -0
  17. package/dist/__tests__/circuit-breaker-integration.test.js +192 -0
  18. package/dist/__tests__/circuit-breaker-integration.test.js.map +1 -0
  19. package/dist/__tests__/circuit-breaker-probe.test.d.ts +2 -0
  20. package/dist/__tests__/circuit-breaker-probe.test.d.ts.map +1 -0
  21. package/dist/__tests__/circuit-breaker-probe.test.js +124 -0
  22. package/dist/__tests__/circuit-breaker-probe.test.js.map +1 -0
  23. package/dist/__tests__/circuit-breaker-recover.test.d.ts +2 -0
  24. package/dist/__tests__/circuit-breaker-recover.test.d.ts.map +1 -0
  25. package/dist/__tests__/circuit-breaker-recover.test.js +52 -0
  26. package/dist/__tests__/circuit-breaker-recover.test.js.map +1 -0
  27. package/dist/__tests__/circuit-breaker-sweep.test.d.ts +2 -0
  28. package/dist/__tests__/circuit-breaker-sweep.test.d.ts.map +1 -0
  29. package/dist/__tests__/circuit-breaker-sweep.test.js +118 -0
  30. package/dist/__tests__/circuit-breaker-sweep.test.js.map +1 -0
  31. package/dist/__tests__/execute-stage-session-opts.test.js +1 -1
  32. package/dist/__tests__/execute-stage-session-opts.test.js.map +1 -1
  33. package/dist/__tests__/executor-issue-id.test.js +1 -1
  34. package/dist/__tests__/executor-issue-id.test.js.map +1 -1
  35. package/dist/__tests__/pm-audit-retention-step.test.js +3 -0
  36. package/dist/__tests__/pm-audit-retention-step.test.js.map +1 -1
  37. package/dist/__tests__/pm-budget-alerts.test.d.ts +14 -0
  38. package/dist/__tests__/pm-budget-alerts.test.d.ts.map +1 -1
  39. package/dist/__tests__/pm-budget-alerts.test.js +90 -18
  40. package/dist/__tests__/pm-budget-alerts.test.js.map +1 -1
  41. package/dist/__tests__/pm-budget-refused-event.test.js +2 -0
  42. package/dist/__tests__/pm-budget-refused-event.test.js.map +1 -1
  43. package/dist/__tests__/pm-budget-utc-boundary.test.d.ts +2 -0
  44. package/dist/__tests__/pm-budget-utc-boundary.test.d.ts.map +1 -0
  45. package/dist/__tests__/pm-budget-utc-boundary.test.js +128 -0
  46. package/dist/__tests__/pm-budget-utc-boundary.test.js.map +1 -0
  47. package/dist/__tests__/pm-cost-rollup-step.test.js +2 -0
  48. package/dist/__tests__/pm-cost-rollup-step.test.js.map +1 -1
  49. package/dist/__tests__/pm-promote.test.js +111 -0
  50. package/dist/__tests__/pm-promote.test.js.map +1 -1
  51. package/dist/__tests__/pm-scheduler.test.js +1 -0
  52. package/dist/__tests__/pm-scheduler.test.js.map +1 -1
  53. package/dist/__tests__/pm-sso-prune-step.test.js +2 -0
  54. package/dist/__tests__/pm-sso-prune-step.test.js.map +1 -1
  55. package/dist/__tests__/release-manager-slack-handler.test.js +66 -0
  56. package/dist/__tests__/release-manager-slack-handler.test.js.map +1 -1
  57. package/dist/__tests__/reproduce-bec113-pagination-warning.test.js +1 -0
  58. package/dist/__tests__/reproduce-bec113-pagination-warning.test.js.map +1 -1
  59. package/dist/__tests__/reproduce-bec62.test.js +1 -0
  60. package/dist/__tests__/reproduce-bec62.test.js.map +1 -1
  61. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js +2 -0
  62. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js.map +1 -1
  63. package/dist/__tests__/resolve-claude-auth.test.js +10 -8
  64. package/dist/__tests__/resolve-claude-auth.test.js.map +1 -1
  65. package/dist/__tests__/session-lazy-creation.test.js +1 -1
  66. package/dist/__tests__/session-lazy-creation.test.js.map +1 -1
  67. package/dist/__tests__/session-resume-fallback.test.js +1 -1
  68. package/dist/__tests__/session-resume-fallback.test.js.map +1 -1
  69. package/dist/__tests__/stage-models.test.js +2 -2
  70. package/dist/__tests__/stage-models.test.js.map +1 -1
  71. package/dist/__tests__/start-todo.test.js +29 -0
  72. package/dist/__tests__/start-todo.test.js.map +1 -1
  73. package/dist/__tests__/triage-preserve-acs.test.d.ts +2 -0
  74. package/dist/__tests__/triage-preserve-acs.test.d.ts.map +1 -0
  75. package/dist/__tests__/triage-preserve-acs.test.js +240 -0
  76. package/dist/__tests__/triage-preserve-acs.test.js.map +1 -0
  77. package/dist/audit/events.d.ts +29 -0
  78. package/dist/audit/events.d.ts.map +1 -1
  79. package/dist/audit/events.js +44 -0
  80. package/dist/audit/events.js.map +1 -1
  81. package/dist/db/client.d.ts.map +1 -1
  82. package/dist/db/client.js +10 -0
  83. package/dist/db/client.js.map +1 -1
  84. package/dist/db/index.d.ts +1 -1
  85. package/dist/db/index.d.ts.map +1 -1
  86. package/dist/db/index.js +1 -1
  87. package/dist/db/index.js.map +1 -1
  88. package/dist/db/schema.d.ts +88 -0
  89. package/dist/db/schema.d.ts.map +1 -1
  90. package/dist/db/schema.js +15 -0
  91. package/dist/db/schema.js.map +1 -1
  92. package/dist/executor/auth-check.d.ts +30 -7
  93. package/dist/executor/auth-check.d.ts.map +1 -1
  94. package/dist/executor/auth-check.js +66 -16
  95. package/dist/executor/auth-check.js.map +1 -1
  96. package/dist/executor/auth-monitor.d.ts.map +1 -1
  97. package/dist/executor/auth-monitor.js +12 -12
  98. package/dist/executor/auth-monitor.js.map +1 -1
  99. package/dist/executor/executor.js +1 -1
  100. package/dist/executor/executor.js.map +1 -1
  101. package/dist/index.d.ts +2 -1
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +2 -1
  104. package/dist/index.js.map +1 -1
  105. package/dist/pm/actions/circuit-breaker-config.d.ts +13 -0
  106. package/dist/pm/actions/circuit-breaker-config.d.ts.map +1 -0
  107. package/dist/pm/actions/circuit-breaker-config.js +23 -0
  108. package/dist/pm/actions/circuit-breaker-config.js.map +1 -0
  109. package/dist/pm/actions/db-queries.d.ts +18 -0
  110. package/dist/pm/actions/db-queries.d.ts.map +1 -1
  111. package/dist/pm/actions/db-queries.js +75 -2
  112. package/dist/pm/actions/db-queries.js.map +1 -1
  113. package/dist/pm/actions/promote.d.ts +7 -0
  114. package/dist/pm/actions/promote.d.ts.map +1 -1
  115. package/dist/pm/actions/promote.js +17 -1
  116. package/dist/pm/actions/promote.js.map +1 -1
  117. package/dist/pm/actions/recover-circuit-breaker.d.ts +21 -0
  118. package/dist/pm/actions/recover-circuit-breaker.d.ts.map +1 -0
  119. package/dist/pm/actions/recover-circuit-breaker.js +47 -0
  120. package/dist/pm/actions/recover-circuit-breaker.js.map +1 -0
  121. package/dist/pm/actions/select-probe-candidates.d.ts +21 -0
  122. package/dist/pm/actions/select-probe-candidates.d.ts.map +1 -0
  123. package/dist/pm/actions/select-probe-candidates.js +81 -0
  124. package/dist/pm/actions/select-probe-candidates.js.map +1 -0
  125. package/dist/pm/actions/start-todo.d.ts +7 -0
  126. package/dist/pm/actions/start-todo.d.ts.map +1 -1
  127. package/dist/pm/actions/start-todo.js +2 -1
  128. package/dist/pm/actions/start-todo.js.map +1 -1
  129. package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts +28 -0
  130. package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts.map +1 -0
  131. package/dist/pm/actions/sweep-recovered-circuit-breakers.js +47 -0
  132. package/dist/pm/actions/sweep-recovered-circuit-breakers.js.map +1 -0
  133. package/dist/pm/actions/triage-prompt.d.ts +14 -0
  134. package/dist/pm/actions/triage-prompt.d.ts.map +1 -1
  135. package/dist/pm/actions/triage-prompt.js +52 -9
  136. package/dist/pm/actions/triage-prompt.js.map +1 -1
  137. package/dist/pm/actions/triage.d.ts.map +1 -1
  138. package/dist/pm/actions/triage.js +37 -24
  139. package/dist/pm/actions/triage.js.map +1 -1
  140. package/dist/pm/scheduler.d.ts +3 -0
  141. package/dist/pm/scheduler.d.ts.map +1 -1
  142. package/dist/pm/scheduler.js +40 -1
  143. package/dist/pm/scheduler.js.map +1 -1
  144. package/dist/release-manager/slack-handler.d.ts +6 -0
  145. package/dist/release-manager/slack-handler.d.ts.map +1 -1
  146. package/dist/release-manager/slack-handler.js +76 -1
  147. package/dist/release-manager/slack-handler.js.map +1 -1
  148. package/dist/types.d.ts +6 -0
  149. package/dist/types.d.ts.map +1 -1
  150. package/dist/types.js +15 -0
  151. package/dist/types.js.map +1 -1
  152. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"start-todo.js","sourceRoot":"","sources":["../../../src/pm/actions/start-todo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start-todo.js","sourceRoot":"","sources":["../../../src/pm/actions/start-todo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { LinearClient } from "@linear/sdk";
2
+ import type { AnyDb } from "../../db/client.js";
3
+ export interface SweepRecoveredOptions {
4
+ /**
5
+ * Threshold the breaker uses. Issues whose consecutive-failure count has
6
+ * dropped below this are recoverable.
7
+ */
8
+ maxConsecutiveFailures: number;
9
+ }
10
+ /**
11
+ * BEC-236 — PM tick sweep that completes circuit-breaker recovery.
12
+ *
13
+ * The runner can't drive recovery itself because it has no `linearClient` in
14
+ * scope (it talks to Linear only through the notifier, which doesn't expose
15
+ * label edits). Instead, every PM tick scans `circuit_breaker_state` for
16
+ * rows whose corresponding issue now has `batchCountConsecutiveFailures` <
17
+ * threshold — i.e. a `completed` run has landed since the last failure
18
+ * streak. Those rows are handed to `recoverCircuitBreaker`, which deletes
19
+ * the row and strips the Tier-5-added `needs-design` label.
20
+ *
21
+ * Lag relative to run completion is at most one PM tick (~30 min). That's
22
+ * fine for the recovery use case — the row stays visible to `ura circuit
23
+ * list` until cleared, but nothing functional depends on instant cleanup.
24
+ */
25
+ export declare function sweepRecoveredCircuitBreakers(db: AnyDb, linearClient: LinearClient, opts: SweepRecoveredOptions): Promise<{
26
+ recovered: string[];
27
+ }>;
28
+ //# sourceMappingURL=sweep-recovered-circuit-breakers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweep-recovered-circuit-breakers.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/sweep-recovered-circuit-breakers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOhD,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,KAAK,EACT,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA2BlC"}
@@ -0,0 +1,47 @@
1
+ import { circuitBreakerState } from "../../db/schema.js";
2
+ import { batchCountConsecutiveFailures } from "./db-queries.js";
3
+ import { recoverCircuitBreaker } from "./recover-circuit-breaker.js";
4
+ import { createLogger } from "../../logger.js";
5
+ const log = createLogger({ component: "PmAgent:sweep-recovery" });
6
+ /**
7
+ * BEC-236 — PM tick sweep that completes circuit-breaker recovery.
8
+ *
9
+ * The runner can't drive recovery itself because it has no `linearClient` in
10
+ * scope (it talks to Linear only through the notifier, which doesn't expose
11
+ * label edits). Instead, every PM tick scans `circuit_breaker_state` for
12
+ * rows whose corresponding issue now has `batchCountConsecutiveFailures` <
13
+ * threshold — i.e. a `completed` run has landed since the last failure
14
+ * streak. Those rows are handed to `recoverCircuitBreaker`, which deletes
15
+ * the row and strips the Tier-5-added `needs-design` label.
16
+ *
17
+ * Lag relative to run completion is at most one PM tick (~30 min). That's
18
+ * fine for the recovery use case — the row stays visible to `ura circuit
19
+ * list` until cleared, but nothing functional depends on instant cleanup.
20
+ */
21
+ export async function sweepRecoveredCircuitBreakers(db, linearClient, opts) {
22
+ const rows = (await db
23
+ .select({ issueId: circuitBreakerState.issueId })
24
+ .from(circuitBreakerState));
25
+ if (rows.length === 0)
26
+ return { recovered: [] };
27
+ const issueIds = rows.map((r) => r.issueId);
28
+ const counts = await batchCountConsecutiveFailures(db, issueIds);
29
+ const recoverable = issueIds.filter((id) => (counts.get(id) ?? 0) < opts.maxConsecutiveFailures);
30
+ if (recoverable.length === 0)
31
+ return { recovered: [] };
32
+ const recovered = [];
33
+ for (const id of recoverable) {
34
+ try {
35
+ await recoverCircuitBreaker({ db, issueId: id, linearClient });
36
+ recovered.push(id);
37
+ }
38
+ catch (err) {
39
+ log.warn({ err, issueId: id }, "sweepRecoveredCircuitBreakers: recovery failed for issue");
40
+ }
41
+ }
42
+ if (recovered.length > 0) {
43
+ log.info({ recovered }, "circuit-breaker recovery sweep cleared issues");
44
+ }
45
+ return { recovered };
46
+ }
47
+ //# sourceMappingURL=sweep-recovered-circuit-breakers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweep-recovered-circuit-breakers.js","sourceRoot":"","sources":["../../../src/pm/actions/sweep-recovered-circuit-breakers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAUlE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,EAAS,EACT,YAA0B,EAC1B,IAA2B;IAE3B,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;SACnB,MAAM,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,CAAC;SAChD,IAAI,CAAC,mBAAmB,CAAC,CAA+B,CAAC;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEjE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CACjC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC5D,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAEvD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;YAC/D,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,0DAA0D,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,+CAA+C,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
@@ -20,7 +20,21 @@ export interface TriagePromptInput {
20
20
  identifier: string;
21
21
  title: string;
22
22
  description: string | null | undefined;
23
+ /** When true, the description already contains a parsed **Acceptance Criteria:** section; prompt builders omit AC generation to avoid divergent regeneration. */
24
+ hasPreSuppliedACs?: boolean;
23
25
  }
26
+ /**
27
+ * Parse hand-written acceptance criteria from a Linear issue description.
28
+ *
29
+ * Scans for the canonical `**Acceptance Criteria:**` marker and extracts
30
+ * following bullet items (`- [ ] text`, `- [x] text`, or `- text`).
31
+ * Stops at the first non-bullet, non-empty line (i.e. a new section or prose).
32
+ * Returns an empty array when the marker is absent or no items follow it.
33
+ *
34
+ * Only parses from the canonical marker — NOT from arbitrary free-text —
35
+ * so generic prose that mentions "criteria" is never accidentally harvested.
36
+ */
37
+ export declare function parseHandWrittenACs(description: string | null | undefined): string[];
24
38
  /**
25
39
  * Returns true iff the env explicitly disables Triage v2. Strict equality
26
40
  * on the string `"true"` — mirrors `URATEAM_DISABLE_*_GATE` conventions.
@@ -1 +1 @@
1
- {"version":3,"file":"triage-prompt.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/triage-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACxC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACjC,MAAM,CAmBR;AA0ED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACjC,MAAM,CAgER"}
1
+ {"version":3,"file":"triage-prompt.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/triage-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,iKAAiK;IACjK,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAoBpF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACjC,MAAM,CAyBR;AA0ED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACjC,MAAM,CAiER"}
@@ -16,6 +16,42 @@
16
16
  * See `specs/001-triage-v2/research.md` for the rationale behind each
17
17
  * prompt-engineering primitive.
18
18
  */
19
+ /**
20
+ * Parse hand-written acceptance criteria from a Linear issue description.
21
+ *
22
+ * Scans for the canonical `**Acceptance Criteria:**` marker and extracts
23
+ * following bullet items (`- [ ] text`, `- [x] text`, or `- text`).
24
+ * Stops at the first non-bullet, non-empty line (i.e. a new section or prose).
25
+ * Returns an empty array when the marker is absent or no items follow it.
26
+ *
27
+ * Only parses from the canonical marker — NOT from arbitrary free-text —
28
+ * so generic prose that mentions "criteria" is never accidentally harvested.
29
+ */
30
+ export function parseHandWrittenACs(description) {
31
+ if (!description)
32
+ return [];
33
+ const marker = "**Acceptance Criteria:**";
34
+ const idx = description.indexOf(marker);
35
+ if (idx === -1)
36
+ return [];
37
+ const afterMarker = description.slice(idx + marker.length);
38
+ const items = [];
39
+ for (const line of afterMarker.split("\n")) {
40
+ const trimmed = line.trim();
41
+ if (trimmed === "")
42
+ continue; // blank lines between items are fine
43
+ const match = trimmed.match(/^-\s+(?:\[.?\]\s+)?(.+)$/);
44
+ if (match) {
45
+ const text = match[1].trim();
46
+ if (text.length > 0)
47
+ items.push(text);
48
+ }
49
+ else {
50
+ break; // non-bullet non-empty line → end of AC section
51
+ }
52
+ }
53
+ return items;
54
+ }
19
55
  /**
20
56
  * Returns true iff the env explicitly disables Triage v2. Strict equality
21
57
  * on the string `"true"` — mirrors `URATEAM_DISABLE_*_GATE` conventions.
@@ -33,21 +69,27 @@ export function isV2Disabled(env = process.env) {
33
69
  */
34
70
  export function buildTriageV1Prompt(issue, sanitize) {
35
71
  const sanitizedDesc = sanitize(issue.description ?? "");
36
- return (`Classify this software issue, generate acceptance criteria, and produce a design doc. Respond with ONLY a JSON object, no other text.\n\n` +
72
+ const acBlock = issue.hasPreSuppliedACs
73
+ ? ""
74
+ : `IMPORTANT rules for generating acceptance criteria:\n` +
75
+ `1. INTEGRATION: Every new function, module, or utility MUST have a criterion that specifies where it is called from in existing code (e.g. "runner.ts calls checkFoo() after the test stage completes"). Code that is exported but never imported outside its own test file is incomplete.\n` +
76
+ `2. DOCUMENTATION: If the change adds new configuration, public API, CLI flags, or changes behavior, include a criterion requiring updates to relevant documentation (CLAUDE.md, README.md, deploy/README.md, or inline JSDoc).\n` +
77
+ `3. TESTING: Include a criterion for tests that exercise the integration path, not just the utility in isolation.\n` +
78
+ `4. Each criterion must be concrete and verifiable by reading the code — avoid vague criteria like "works correctly" or "is implemented".\n\n`;
79
+ const jsonSchema = issue.hasPreSuppliedACs
80
+ ? `{"priority": <1-4 where 1=urgent>, "labels": [<"bug"|"feature"|"backend"|"frontend"|"infra"|"docs">], "complexity": <"trivial"|"small"|"medium"|"large">, "rationale": "<one sentence>", "approachSummary": "<3-5 lines>", "openQuestions": [], "antiAcceptanceCriteria": ["<not-this>", ...]}`
81
+ : `{"priority": <1-4 where 1=urgent>, "labels": [<"bug"|"feature"|"backend"|"frontend"|"infra"|"docs">], "complexity": <"trivial"|"small"|"medium"|"large">, "rationale": "<one sentence>", "approachSummary": "<3-5 lines>", "openQuestions": [], "antiAcceptanceCriteria": ["<not-this>", ...], "acceptanceCriteria": ["<integration criterion — specifies call site in existing code>", "<behavior criterion — testable outcome>", "<documentation criterion — if applicable>", ...]}`;
82
+ return (`Classify this software issue${issue.hasPreSuppliedACs ? "" : ", generate acceptance criteria,"} and produce a design doc. Respond with ONLY a JSON object, no other text.\n\n` +
37
83
  `Issue: ${issue.identifier}\n` +
38
84
  `Title: ${sanitize(issue.title)}\n` +
39
85
  `Description: ${sanitizedDesc}\n\n` +
40
- `IMPORTANT rules for generating acceptance criteria:\n` +
41
- `1. INTEGRATION: Every new function, module, or utility MUST have a criterion that specifies where it is called from in existing code (e.g. "runner.ts calls checkFoo() after the test stage completes"). Code that is exported but never imported outside its own test file is incomplete.\n` +
42
- `2. DOCUMENTATION: If the change adds new configuration, public API, CLI flags, or changes behavior, include a criterion requiring updates to relevant documentation (CLAUDE.md, README.md, deploy/README.md, or inline JSDoc).\n` +
43
- `3. TESTING: Include a criterion for tests that exercise the integration path, not just the utility in isolation.\n` +
44
- `4. Each criterion must be concrete and verifiable by reading the code — avoid vague criteria like "works correctly" or "is implemented".\n\n` +
86
+ acBlock +
45
87
  `Tier 4 — DESIGN DOC fields:\n` +
46
88
  `- approachSummary: 3-5 lines describing what the implementation will do at a level the operator can sanity-check before spending implement-stage tokens. Concrete enough that someone reading it could predict the diff shape.\n` +
47
89
  `- openQuestions: list of unknowns that the operator must answer before implement is safe — ambiguous requirements, missing API contracts, undecided trade-offs. EMPTY when the issue is clearly specified. NON-EMPTY forces routing to "needs-design" so a human answers before any implement-stage tokens are spent.\n` +
48
90
  `- antiAcceptanceCriteria: list of "things this should NOT do" — explicit out-of-scope items so the agent doesn't drift (e.g. "must NOT change other pipelines' configs", "must NOT add new dependencies"). Helps the agent stay narrow.\n\n` +
49
91
  `Respond with exactly this JSON format (no markdown, no explanation, just the JSON). The canonical form for openQuestions is the EMPTY array \`[]\` — only populate it when the issue is genuinely ambiguous and you cannot proceed without operator input. Do not invent questions for clear specs.\n` +
50
- `{"priority": <1-4 where 1=urgent>, "labels": [<"bug"|"feature"|"backend"|"frontend"|"infra"|"docs">], "complexity": <"trivial"|"small"|"medium"|"large">, "rationale": "<one sentence>", "approachSummary": "<3-5 lines>", "openQuestions": [], "antiAcceptanceCriteria": ["<not-this>", ...], "acceptanceCriteria": ["<integration criterion — specifies call site in existing code>", "<behavior criterion — testable outcome>", "<documentation criterion — if applicable>", ...]}`);
92
+ jsonSchema);
51
93
  }
52
94
  // ---------------------------------------------------------------------------
53
95
  // Tier 6a — Triage v2 prompt (Anthropic prompt-engineering best practices).
@@ -149,11 +191,12 @@ The schema (every field is required unless marked optional):
149
191
  "needs-design". Empty array (\`[]\`) is canonical
150
192
  when the issue is clearly specified.
151
193
  antiAcceptanceCriteria: array of strings — things the implementation must
152
- NOT do (out-of-scope items).
194
+ NOT do (out-of-scope items).${issue.hasPreSuppliedACs ? `
195
+ (acceptanceCriteria is PRE-SUPPLIED from the issue description — omit this field)` : `
153
196
  acceptanceCriteria: array of strings — concrete, testable behaviors.
154
197
  Each must specify either (a) a call-site in
155
198
  existing code, (b) a measurable outcome, or
156
- (c) a documentation update.
199
+ (c) a documentation update.`}
157
200
 
158
201
  (Tier 6b — all optional, drop when not applicable to the issue:)
159
202
  assumptions: array of strings (max 10) — what the agent will
@@ -1 +1 @@
1
- {"version":3,"file":"triage-prompt.js","sourceRoot":"","sources":["../../../src/pm/actions/triage-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC/D,OAAO,GAAG,CAAC,yBAAyB,KAAK,MAAM,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAwB,EACxB,QAAkC;IAElC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACxD,OAAO,CACL,2IAA2I;QAC3I,UAAU,KAAK,CAAC,UAAU,IAAI;QAC9B,UAAU,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;QACnC,gBAAgB,aAAa,MAAM;QACnC,uDAAuD;QACvD,8RAA8R;QAC9R,kOAAkO;QAClO,oHAAoH;QACpH,8IAA8I;QAC9I,+BAA+B;QAC/B,kOAAkO;QAClO,yTAAyT;QACzT,6OAA6O;QAC7O,uSAAuS;QACvS,udAAud,CACxd,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD1B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAwB,EACxB,QAAkC;IAElC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE7C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CP,kBAAkB,CAAC,IAAI,EAAE;;;;MAIrB,KAAK,CAAC,UAAU;SACb,cAAc;eACR,aAAa;;;;;;;;;;EAU1B,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,kEAAkE;AAClE,mBAAmB"}
1
+ {"version":3,"file":"triage-prompt.js","sourceRoot":"","sources":["../../../src/pm/actions/triage-prompt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAyChD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oGAAoG;IACpG,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,uFAAuF;IACvF,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAoBD,wBAAsB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAuPjF"}
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAkDhD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oGAAoG;IACpG,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,uFAAuF;IACvF,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAoBD,wBAAsB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAyPjF"}
@@ -5,7 +5,7 @@ import { resolveIssueRelations } from "../../util/linear.js";
5
5
  import { createLogger } from "../../logger.js";
6
6
  import { logAuditEventUnchecked, pmTriageClassifiedEvent } from "../../audit/index.js";
7
7
  import { upsertTriageResult } from "../triage-results-store.js";
8
- import { buildTriageV1Prompt, buildTriageV2Prompt, isV2Disabled, } from "./triage-prompt.js";
8
+ import { buildTriageV1Prompt, buildTriageV2Prompt, isV2Disabled, parseHandWrittenACs, } from "./triage-prompt.js";
9
9
  import { renderTriageComment, appendTriageSectionsToDescription, } from "./triage-render.js";
10
10
  const log = createLogger({ component: "PmAgent:triage" });
11
11
  const MAX_ISSUES_PER_TICK = 10;
@@ -27,9 +27,13 @@ const OBSERVER_BODY_MARKER = "<!-- urateam-qo-observer:";
27
27
  * diagnostic. See CLAUDE.md "Quality Observer" for the rationale.
28
28
  */
29
29
  const OBSERVER_PIPELINE_LABEL = "needs-design";
30
+ const BUG_LABEL = "bug";
30
31
  function isObserverOriginIssue(description) {
31
32
  return typeof description === "string" && description.includes(OBSERVER_BODY_MARKER);
32
33
  }
34
+ function warnMissingPipelineLabel(issueId, label, context) {
35
+ log.warn({ issueId, label }, `${context}: '${label}' label not found in Linear — issue will move to Backlog without pipeline label and won't be routed by promote`);
36
+ }
33
37
  /**
34
38
  * Process an array of items in batches of `size`, awaiting each batch before
35
39
  * starting the next. Returns a flat array of results (preserving order).
@@ -72,8 +76,7 @@ export async function triageNewIssues(input) {
72
76
  .map((l) => labelMap.get(l.toLowerCase()))
73
77
  .filter(Boolean);
74
78
  if (labelIds.length === 0) {
75
- log.warn({ issueId: issue.identifier, label: OBSERVER_PIPELINE_LABEL }, "observer-origin gate: '" + OBSERVER_PIPELINE_LABEL +
76
- "' label not found in Linear — issue will move to Backlog without pipeline label and won't be routed by promote");
79
+ warnMissingPipelineLabel(issue.identifier, OBSERVER_PIPELINE_LABEL, "observer-origin gate");
77
80
  }
78
81
  const rationale = "Observer-origin finding (body marker detected) — routed to needs-design so the await-approval stage gates a human before any implement-stage work runs.";
79
82
  const updatePayload = { priority: 3 };
@@ -81,13 +84,13 @@ export async function triageNewIssues(input) {
81
84
  updatePayload.labelIds = labelIds;
82
85
  if (backlogStateId)
83
86
  updatePayload.stateId = backlogStateId;
84
- await linearClient.updateIssue(issue.id, updatePayload);
85
- await linearClient.createComment({
86
- issueId: issue.id,
87
- body: `🤖 **PM Agent — Triaged (Quality Observer finding)**\n\n` +
88
- `**Pipeline:** ${OBSERVER_PIPELINE_LABEL}\n` +
89
- `**Rationale:** ${rationale}`,
90
- });
87
+ await Promise.all([
88
+ linearClient.updateIssue(issue.id, updatePayload),
89
+ linearClient.createComment({
90
+ issueId: issue.id,
91
+ body: `🤖 **PM Agent — Triaged (Quality Observer finding)**\n\n**Pipeline:** ${OBSERVER_PIPELINE_LABEL}\n**Rationale:** ${rationale}`,
92
+ }),
93
+ ]);
91
94
  const result = {
92
95
  issueId: issue.identifier,
93
96
  priority: 3,
@@ -106,6 +109,13 @@ export async function triageNewIssues(input) {
106
109
  log.info({ issueId: issue.identifier, pipelineLabel: OBSERVER_PIPELINE_LABEL }, "triaged observer-origin issue (skipped Claude classification)");
107
110
  return result;
108
111
  }
112
+ // Pre-parse hand-written ACs from the issue description. When the
113
+ // operator has already written a `**Acceptance Criteria:**` section,
114
+ // we use those items verbatim so the triage result stays in sync with
115
+ // the description text that the implement-stage prompt also sees.
116
+ // When no pre-written ACs are found, fall back to Haiku generation.
117
+ const preSuppliedACs = parseHandWrittenACs(issue.description);
118
+ const hasPreSuppliedACs = preSuppliedACs.length > 0;
109
119
  // Tier 6a — pick v2 prompt by default; fall back to v1 when the
110
120
  // operator has set URATEAM_DISABLE_TRIAGE_V2=true. Reads env at
111
121
  // call time so flipping the var takes effect on the next PM tick
@@ -115,6 +125,7 @@ export async function triageNewIssues(input) {
115
125
  identifier: issue.identifier,
116
126
  title: issue.title,
117
127
  description: issue.description ?? "",
128
+ hasPreSuppliedACs,
118
129
  };
119
130
  const prompt = useV2
120
131
  ? buildTriageV2Prompt(promptInput, sanitize)
@@ -158,9 +169,9 @@ export async function triageNewIssues(input) {
158
169
  // bug-severity gate). Treat the model's `pipelineLabel` as
159
170
  // telemetry only.
160
171
  const forceNeedsDesign = openQuestions.length > 0;
161
- const hasBug = labels.some((l) => l.toLowerCase() === "bug");
172
+ const hasBug = labels.some((l) => l.toLowerCase() === BUG_LABEL);
162
173
  const pipelineLabel = forceNeedsDesign
163
- ? OBSERVER_PIPELINE_LABEL // "needs-design" — same routing as observer-origin gate
174
+ ? OBSERVER_PIPELINE_LABEL // same routing as observer-origin gate
164
175
  : hasBug
165
176
  ? "bug"
166
177
  : complexity === "trivial"
@@ -175,8 +186,7 @@ export async function triageNewIssues(input) {
175
186
  // routing label is dropped silently. Surface this so operators can
176
187
  // diagnose why a ticket isn't being picked up by promote.
177
188
  if (!labelMap.get(OBSERVER_PIPELINE_LABEL.toLowerCase())) {
178
- log.warn({ issueId: issue.identifier, label: OBSERVER_PIPELINE_LABEL }, "Tier 4 routing: '" + OBSERVER_PIPELINE_LABEL +
179
- "' label not found in Linear — issue will move to Backlog without pipeline label and won't be routed by promote");
189
+ warnMissingPipelineLabel(issue.identifier, OBSERVER_PIPELINE_LABEL, "Tier 4 routing");
180
190
  }
181
191
  }
182
192
  const labelIds = issueLabels
@@ -187,9 +197,13 @@ export async function triageNewIssues(input) {
187
197
  const { team } = await resolveIssueRelations(issue);
188
198
  const teamId = team?.id;
189
199
  const backlogStateId = teamId ? stateMap.get(`${teamId}:Backlog`) : undefined;
190
- const acceptanceCriteria = Array.isArray(parsed.acceptanceCriteria)
191
- ? parsed.acceptanceCriteria.filter((c) => typeof c === "string" && c.length > 0)
192
- : [];
200
+ // Use pre-supplied ACs when the operator wrote them in the description;
201
+ // fall back to Haiku's generated list for fresh (no-AC) tickets.
202
+ const acceptanceCriteria = hasPreSuppliedACs
203
+ ? preSuppliedACs
204
+ : Array.isArray(parsed.acceptanceCriteria)
205
+ ? parsed.acceptanceCriteria.filter((c) => typeof c === "string" && c.length > 0)
206
+ : [];
193
207
  // Tier 6b — extract optional v2 fields when v2 is active. When v1
194
208
  // is forced (env var), skip the extraction so the result shape
195
209
  // stays bit-compatible with v1.
@@ -221,14 +235,13 @@ export async function triageNewIssues(input) {
221
235
  if (updatedDesc !== existingDesc) {
222
236
  updatePayload.description = updatedDesc;
223
237
  }
224
- await linearClient.updateIssue(issue.id, updatePayload);
225
- await linearClient.createComment({
226
- issueId: issue.id,
227
- body: renderTriageComment(result, {
228
- forceNeedsDesign,
229
- pipelineLabel,
238
+ await Promise.all([
239
+ linearClient.updateIssue(issue.id, updatePayload),
240
+ linearClient.createComment({
241
+ issueId: issue.id,
242
+ body: renderTriageComment(result, { forceNeedsDesign, pipelineLabel }),
230
243
  }),
231
- });
244
+ ]);
232
245
  if (input.db) {
233
246
  void logAuditEventUnchecked(input.db, pmTriageClassifiedEvent({
234
247
  issueId: issue.identifier,
@@ -1 +1 @@
1
- {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { type StuckIssueResult } from "./actions/recover-stuck.js";
10
10
  import { type StartTodoInput, type StartTodoResult } from "./actions/start-todo.js";
11
11
  import { getActiveFileMaps, predictConflict } from "./conflict.js";
12
12
  import type { Db, AnyDb } from "../db/client.js";
13
+ import { type AuthMonitor } from "../executor/auth-monitor.js";
13
14
  /**
14
15
  * BEC-184 / BEC-227: parse the PM_AGENT_STUCK_RUN_AGE_MIN env var (default 120 min).
15
16
  * Controls how long a 'running' run must be active before it's treated as a
@@ -40,6 +41,8 @@ export interface PmSchedulerDeps {
40
41
  pipelineConfigs?: Record<string, any>;
41
42
  repoConfigs?: Record<string, any>;
42
43
  actions?: Partial<PmSchedulerActions>;
44
+ /** Injectable auth monitor — defaults to the real createAuthMonitor. Used by tests to avoid slow real API calls. */
45
+ authMonitor?: AuthMonitor;
43
46
  }
44
47
  interface PmSchedulerActions {
45
48
  evaluateBudget: (input: {
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/pm/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/pm/scheduler.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,9 @@ import { resolveApprovals } from "./actions/resolve-approvals.js";
11
11
  import { recoverRetriableRuns } from "./actions/recover.js";
12
12
  import { recoverStuckInProgressIssues } from "./actions/recover-stuck.js";
13
13
  import { startTodoIssues } from "./actions/start-todo.js";
14
+ import { getCircuitBreakerProbeConfig } from "./actions/circuit-breaker-config.js";
15
+ import { selectProbeCandidates } from "./actions/select-probe-candidates.js";
16
+ import { sweepRecoveredCircuitBreakers } from "./actions/sweep-recovered-circuit-breakers.js";
14
17
  import { getActiveFileMaps, predictConflict } from "./conflict.js";
15
18
  import { fetchCircuitBrokenIssues, ACTIVE_STATUSES } from "./actions/db-queries.js";
16
19
  import { PmSlackNotifier } from "./slack.js";
@@ -57,7 +60,7 @@ export function createPmScheduler(deps) {
57
60
  // BEC-207: AuthMonitor — periodic Claude session health-check (every 6h).
58
61
  // Alerts to the PM agent's Slack channel when SLACK_ERROR_ALERTS=true.
59
62
  // No-ops when CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY is set.
60
- const authMonitor = createAuthMonitor({
63
+ const authMonitor = deps.authMonitor ?? createAuthMonitor({
61
64
  slackBotToken: deps.slackBotToken || undefined,
62
65
  slackErrorChannel: process.env.SLACK_ERROR_ALERTS === "true"
63
66
  ? deps.config.slackChannelId
@@ -264,6 +267,40 @@ export function createPmScheduler(deps) {
264
267
  }
265
268
  // Compute available slots once for both startTodo and promote
266
269
  const slotsAvailable = config.maxInFlight - (tick.budgetGuard.activeCount ?? 0);
270
+ // BEC-236 — half-open circuit-breaker probe. Picks at most `cap` issues
271
+ // per tick that the breaker would normally skip; promote + startTodo
272
+ // receive this Set as probeOverrideIds and bypass the skip for them.
273
+ const probeConfig = getCircuitBreakerProbeConfig();
274
+ const breakerThreshold = config.maxConsecutiveFailures > 0
275
+ ? config.maxConsecutiveFailures
276
+ : 3;
277
+ let probeOverrideIds = new Set();
278
+ if (db && !probeConfig.disabled) {
279
+ try {
280
+ probeOverrideIds = await selectProbeCandidates(db, {
281
+ cap: probeConfig.maxProbesPerTick,
282
+ cooldownMs: probeConfig.cooldownMs,
283
+ maxConsecutiveFailures: breakerThreshold,
284
+ now: Date.now(),
285
+ });
286
+ }
287
+ catch (err) {
288
+ captureTickError(tick, "probe", err, "selectProbeCandidates failed");
289
+ }
290
+ // BEC-236 — sweep recovered issues. The runner can't drive recovery
291
+ // itself (no `linearClient` in its scope), so each tick scans for
292
+ // state rows whose consecutive-failure count has dropped (= a
293
+ // `completed` run landed). Recovery deletes the state row and
294
+ // strips the Tier-5-added `needs-design` label.
295
+ try {
296
+ await sweepRecoveredCircuitBreakers(db, await getLinearClient(), {
297
+ maxConsecutiveFailures: breakerThreshold,
298
+ });
299
+ }
300
+ catch (err) {
301
+ captureTickError(tick, "sweepRecovered", err, "sweepRecoveredCircuitBreakers failed");
302
+ }
303
+ }
267
304
  // --- Start pipelines for orphaned Todo issues ---
268
305
  if (deps.runner?.start && deps.pipelineConfigs && deps.repoConfigs) {
269
306
  try {
@@ -285,6 +322,7 @@ export function createPmScheduler(deps) {
285
322
  // BEC-181: omit getFailureCount so startTodoIssues uses the batch
286
323
  // batchCountConsecutiveFailures path (single DB round-trip for all
287
324
  // candidates) instead of per-issue N+1 queries.
325
+ probeOverrideIds,
288
326
  });
289
327
  const started = todoResults.filter((r) => r.started);
290
328
  if (started.length > 0) {
@@ -391,6 +429,7 @@ export function createPmScheduler(deps) {
391
429
  // BEC-181: omit getFailureCount so promoteReadyIssues uses the batch
392
430
  // batchCountConsecutiveFailures path (single DB round-trip for all
393
431
  // candidates) instead of per-issue N+1 queries.
432
+ probeOverrideIds,
394
433
  });
395
434
  }
396
435
  }