@urateam/core 0.1.56 → 0.1.58

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 +21 -0
  110. package/dist/pm/actions/db-queries.d.ts.map +1 -1
  111. package/dist/pm/actions/db-queries.js +84 -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
package/dist/index.d.ts CHANGED
@@ -8,7 +8,8 @@ export * from "./rbac/index.js";
8
8
  export { computeConfigFingerprint } from "./audit/config-fingerprint.js";
9
9
  export { rootLogger, createLogger, addLogStream } from "./logger.js";
10
10
  export { createDb, isPostgres, sqlDateGroup, sqlDaysAgoFilter, type Db, type AnyDb } from "./db/index.js";
11
- export { pipelineRuns, stageRuns, agentLogs, activeWork, pmApprovals } from "./db/index.js";
11
+ export { pipelineRuns, stageRuns, agentLogs, activeWork, pmApprovals, circuitBreakerState, pipelineRunDecisions, reviewModelRuns } from "./db/index.js";
12
+ export { batchCountConsecutiveFailures, deleteFailedRunsForIssue } from "./pm/actions/db-queries.js";
12
13
  export { createApp, type ServerConfig } from "./server.js";
13
14
  export { PipelineRunner, type PipelineRunnerConfig, type LinearIssue } from "./pipeline/index.js";
14
15
  export { type StopMode, requestRunStop, getStopSignal, clearStopSignal } from "./pipeline/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACxJ,OAAO,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,KAAK,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EACL,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3K,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,KAAK,mBAAmB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjI,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChI,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,EAC3B,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,IAAI,wBAAwB,EAC5C,aAAa,EACb,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,iBAAiB,IAAI,6BAA6B,GACxD,MAAM,sBAAsB,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -9,7 +9,8 @@ export * from "./rbac/index.js";
9
9
  export { computeConfigFingerprint } from "./audit/config-fingerprint.js";
10
10
  export { rootLogger, createLogger, addLogStream } from "./logger.js";
11
11
  export { createDb, isPostgres, sqlDateGroup, sqlDaysAgoFilter } from "./db/index.js";
12
- export { pipelineRuns, stageRuns, agentLogs, activeWork, pmApprovals } from "./db/index.js";
12
+ export { pipelineRuns, stageRuns, agentLogs, activeWork, pmApprovals, circuitBreakerState, pipelineRunDecisions, reviewModelRuns } from "./db/index.js";
13
+ export { batchCountConsecutiveFailures, deleteFailedRunsForIssue } from "./pm/actions/db-queries.js";
13
14
  export { createApp } from "./server.js";
14
15
  export { PipelineRunner } from "./pipeline/index.js";
15
16
  export { requestRunStop, getStopSignal, clearStopSignal } from "./pipeline/index.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * BEC-236 — parse the half-open circuit-breaker probe configuration from
3
+ * environment variables. Read at call time (not boot time) so flipping
4
+ * `PM_DISABLE_CIRCUIT_BREAKER_PROBE` takes effect on the next PM tick
5
+ * without a daemon restart, matching the BEC-218 / BEC-227 convention.
6
+ */
7
+ export interface CircuitBreakerProbeConfig {
8
+ disabled: boolean;
9
+ cooldownMs: number;
10
+ maxProbesPerTick: number;
11
+ }
12
+ export declare function getCircuitBreakerProbeConfig(env?: NodeJS.ProcessEnv | Record<string, string | undefined>): CircuitBreakerProbeConfig;
13
+ //# sourceMappingURL=circuit-breaker-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-config.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/circuit-breaker-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAYD,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACxE,yBAAyB,CAc3B"}
@@ -0,0 +1,23 @@
1
+ const DEFAULT_COOLDOWN_MIN = 120;
2
+ const DEFAULT_MAX_PROBES_PER_TICK = 2;
3
+ function parsePositiveInt(raw, fallback) {
4
+ if (raw === undefined)
5
+ return fallback;
6
+ const n = Number.parseInt(raw, 10);
7
+ if (!Number.isFinite(n) || n <= 0)
8
+ return fallback;
9
+ return n;
10
+ }
11
+ export function getCircuitBreakerProbeConfig(env = process.env) {
12
+ // Strict equality — matches the BEC-218 / BEC-227 convention for booleans
13
+ // ("1" / "yes" / "TRUE" must NOT match).
14
+ const disabled = env.PM_DISABLE_CIRCUIT_BREAKER_PROBE === "true";
15
+ const cooldownMin = parsePositiveInt(env.PM_CIRCUIT_BREAKER_PROBE_AGE_MIN, DEFAULT_COOLDOWN_MIN);
16
+ const maxProbesPerTick = parsePositiveInt(env.PM_CIRCUIT_BREAKER_MAX_PROBES_PER_TICK, DEFAULT_MAX_PROBES_PER_TICK);
17
+ return {
18
+ disabled,
19
+ cooldownMs: cooldownMin * 60 * 1000,
20
+ maxProbesPerTick,
21
+ };
22
+ }
23
+ //# sourceMappingURL=circuit-breaker-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-config.js","sourceRoot":"","sources":["../../../src/pm/actions/circuit-breaker-config.ts"],"names":[],"mappings":"AAYA,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,SAAS,gBAAgB,CAAC,GAAuB,EAAE,QAAgB;IACjE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAA8D,OAAO,CAAC,GAAG;IAEzE,0EAA0E;IAC1E,yCAAyC;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,gCAAgC,KAAK,MAAM,CAAC;IACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,gCAAgC,EAAE,oBAAoB,CAAC,CAAC;IACjG,MAAM,gBAAgB,GAAG,gBAAgB,CACvC,GAAG,CAAC,sCAAsC,EAC1C,2BAA2B,CAC5B,CAAC;IACF,OAAO;QACL,QAAQ;QACR,UAAU,EAAE,WAAW,GAAG,EAAE,GAAG,IAAI;QACnC,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
@@ -53,4 +53,25 @@ export declare function countConsecutiveFailures(db: AnyDb, issueId: string): Pr
53
53
  export declare function getLastFailureError(db: AnyDb, issueId: string): Promise<string | null>;
54
54
  export declare function batchCountConsecutiveFailures(db: AnyDb, issueIds: string[]): Promise<Map<string, number>>;
55
55
  export declare function fetchCircuitBrokenIssues(db: AnyDb, minConsecutiveFailures?: number, windowDays?: number): Promise<CircuitBrokenIssue[]>;
56
+ /**
57
+ * BEC-236 — `ura circuit reset` DB implementation.
58
+ *
59
+ * Inside a single transaction:
60
+ * 1. Identify all `status = 'failed'` pipeline_runs for the issue.
61
+ * 2. Cascade-delete in FK-respecting order:
62
+ * review_model_runs + agent_logs (children of stage_runs)
63
+ * → stage_runs + pipeline_run_decisions (children of pipeline_runs)
64
+ * → pipeline_runs (failed only).
65
+ * 3. Delete the circuit_breaker_state row (if present).
66
+ *
67
+ * Returns `{ hadStateRow, failedRunIds }` so the CLI layer can decide
68
+ * whether to strip the Linear `needs-design` label (only when the state
69
+ * row was present — avoids touching human-added labels).
70
+ *
71
+ * `completed` runs are NEVER deleted — only `status = 'failed'` rows.
72
+ */
73
+ export declare function deleteFailedRunsForIssue(db: AnyDb, issueId: string): Promise<{
74
+ hadStateRow: boolean;
75
+ failedRunCount: number;
76
+ }>;
56
77
  //# sourceMappingURL=db-queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-queries.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/db-queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD,iEAAiE;AACjE,eAAO,MAAM,eAAe,gCAAiC,CAAC;AAoB9D;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,KAAK,EACT,cAAc,SAAmB,EACjC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAuC1E;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;;;;;;GASG;AACH;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBxB;AAED,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkC9B;AAwBD,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,KAAK,EACT,sBAAsB,GAAE,MAAU,EAClC,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAgE/B"}
1
+ {"version":3,"file":"db-queries.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/db-queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYtD,iEAAiE;AACjE,eAAO,MAAM,eAAe,gCAAiC,CAAC;AAoB9D;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,KAAK,EACT,cAAc,SAAmB,EACjC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAuC1E;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;;;;;;GASG;AACH;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBxB;AAED,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkC9B;AAwBD,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,KAAK,EACT,sBAAsB,GAAE,MAAU,EAClC,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAgE/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAkE3D"}
@@ -1,5 +1,6 @@
1
- import { pipelineRuns } from "../../db/schema.js";
2
- import { and, desc, eq, gte, inArray, or } from "drizzle-orm";
1
+ import { agentLogs, circuitBreakerState, pipelineRunDecisions, pipelineRuns, reviewModelRuns, stageRuns, } from "../../db/schema.js";
2
+ import { and, desc, eq, gte, inArray, or, sql } from "drizzle-orm";
3
+ import { isPostgres } from "../../db/client.js";
3
4
  /** Statuses considered "active" (pipeline currently running). */
4
5
  export const ACTIVE_STATUSES = ["queued", "running"];
5
6
  /**
@@ -212,4 +213,85 @@ export async function fetchCircuitBrokenIssues(db, minConsecutiveFailures = 3, w
212
213
  results.sort((a, b) => b.failedAt.getTime() - a.failedAt.getTime());
213
214
  return results;
214
215
  }
216
+ /**
217
+ * BEC-236 — `ura circuit reset` DB implementation.
218
+ *
219
+ * Inside a single transaction:
220
+ * 1. Identify all `status = 'failed'` pipeline_runs for the issue.
221
+ * 2. Cascade-delete in FK-respecting order:
222
+ * review_model_runs + agent_logs (children of stage_runs)
223
+ * → stage_runs + pipeline_run_decisions (children of pipeline_runs)
224
+ * → pipeline_runs (failed only).
225
+ * 3. Delete the circuit_breaker_state row (if present).
226
+ *
227
+ * Returns `{ hadStateRow, failedRunIds }` so the CLI layer can decide
228
+ * whether to strip the Linear `needs-design` label (only when the state
229
+ * row was present — avoids touching human-added labels).
230
+ *
231
+ * `completed` runs are NEVER deleted — only `status = 'failed'` rows.
232
+ */
233
+ export async function deleteFailedRunsForIssue(db, issueId) {
234
+ // Snapshot state-row presence BEFORE the transaction deletes it.
235
+ const stateRows = (await db
236
+ .select({ issueId: circuitBreakerState.issueId })
237
+ .from(circuitBreakerState)
238
+ .where(eq(circuitBreakerState.issueId, issueId)));
239
+ const hadStateRow = stateRows.length > 0;
240
+ // Identify failed pipeline_run IDs for this issue.
241
+ const failedRunRows = (await db
242
+ .select({ id: pipelineRuns.id })
243
+ .from(pipelineRuns)
244
+ .where(and(eq(pipelineRuns.issueId, issueId), eq(pipelineRuns.status, "failed"))));
245
+ const failedRunIds = failedRunRows.map((r) => r.id);
246
+ // Cascade-delete inside a transaction.
247
+ // Note: better-sqlite3 (SQLite driver) does not support async transaction
248
+ // callbacks. Use the same BEGIN IMMEDIATE / COMMIT / ROLLBACK pattern as
249
+ // setUserRole in rbac/user-role-store.ts. Postgres uses the native drizzle
250
+ // async transaction API.
251
+ const txBody = async (handle) => {
252
+ if (failedRunIds.length > 0) {
253
+ // Pull stage_run IDs first so we can delete agent_logs by stage_run_id.
254
+ const stageRunRows = (await handle
255
+ .select({ id: stageRuns.id })
256
+ .from(stageRuns)
257
+ .where(inArray(stageRuns.pipelineRunId, failedRunIds)));
258
+ const stageRunIds = stageRunRows.map((r) => r.id);
259
+ if (stageRunIds.length > 0) {
260
+ // Children of stage_runs (review_model_runs + agent_logs) must go first.
261
+ await handle.delete(reviewModelRuns).where(inArray(reviewModelRuns.stageRunId, stageRunIds));
262
+ await handle.delete(agentLogs).where(inArray(agentLogs.stageRunId, stageRunIds));
263
+ await handle.delete(stageRuns).where(inArray(stageRuns.id, stageRunIds));
264
+ }
265
+ // pipeline_run_decisions is a child of pipeline_runs (BEC-227 Phase 4).
266
+ await handle
267
+ .delete(pipelineRunDecisions)
268
+ .where(inArray(pipelineRunDecisions.pipelineRunId, failedRunIds));
269
+ await handle.delete(pipelineRuns).where(inArray(pipelineRuns.id, failedRunIds));
270
+ }
271
+ await handle.delete(circuitBreakerState).where(eq(circuitBreakerState.issueId, issueId));
272
+ };
273
+ if (isPostgres(db)) {
274
+ await db.transaction(async (tx) => {
275
+ await txBody(tx);
276
+ });
277
+ }
278
+ else {
279
+ // SQLite path — manual transaction (BEGIN IMMEDIATE → COMMIT/ROLLBACK).
280
+ await db.run(sql `BEGIN IMMEDIATE`);
281
+ try {
282
+ await txBody(db);
283
+ await db.run(sql `COMMIT`);
284
+ }
285
+ catch (err) {
286
+ try {
287
+ await db.run(sql `ROLLBACK`);
288
+ }
289
+ catch {
290
+ // ignore rollback errors
291
+ }
292
+ throw err;
293
+ }
294
+ }
295
+ return { hadStateRow, failedRunCount: failedRunIds.length };
296
+ }
215
297
  //# sourceMappingURL=db-queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-queries.js","sourceRoot":"","sources":["../../../src/pm/actions/db-queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-queries.js","sourceRoot":"","sources":["../../../src/pm/actions/db-queries.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,13 @@ export interface PromoteInput {
28
28
  * Leave undefined to disable the breaker (default behavior).
29
29
  */
30
30
  maxConsecutiveFailures?: number;
31
+ /**
32
+ * BEC-236 — issue IDs the half-open probe selected this tick. Issues in
33
+ * this Set bypass the consecutive-failures circuit-breaker skip, allowing
34
+ * exactly one probe run per cooldown window. When undefined, breaker
35
+ * behavior is unchanged from BEC-161/181.
36
+ */
37
+ probeOverrideIds?: Set<string>;
31
38
  /**
32
39
  * BEC-161/BEC-181: returns the number of consecutive failed runs for an
33
40
  * issue. Tests inject a stub here (avoids real DB rows). Production omits
@@ -1 +1 @@
1
- {"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/promote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAsBhD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrE,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,kFAAkF;IAClF,EAAE,CAAC,EAAE,KAAK,CAAC;IACX;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACjD;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAuTtF"}
1
+ {"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/promote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAuBhD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrE,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,kFAAkF;IAClF,EAAE,CAAC,EAAE,KAAK,CAAC;IACX;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACjD;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA2UtF"}
@@ -5,6 +5,7 @@ import { createLogger } from "../../logger.js";
5
5
  import { truncateWithEllipsis } from "../../util/strings.js";
6
6
  import { logAuditEventUnchecked, pmPromotedEvent, pmSkippedCircuitBreakerEvent, pmEscalatedToNeedsDesignEvent, } from "../../audit/index.js";
7
7
  import { batchCountConsecutiveFailures, getLastFailureError, } from "./db-queries.js";
8
+ import { circuitBreakerState } from "../../db/schema.js";
8
9
  /**
9
10
  * Tier 5 — the pipeline label assigned to issues that have tripped the
10
11
  * consecutive-failures circuit breaker. Mirrors the observer-marker gate
@@ -86,7 +87,8 @@ export async function promoteReadyIssues(input) {
86
87
  const failureCount = input.getFailureCount
87
88
  ? await input.getFailureCount(candidate.identifier)
88
89
  : (prefetchedFailureCounts.get(candidate.identifier) ?? 0);
89
- if (failureCount >= input.maxConsecutiveFailures) {
90
+ if (failureCount >= input.maxConsecutiveFailures &&
91
+ !input.probeOverrideIds?.has(candidate.identifier)) {
90
92
  log.warn({ issueId: candidate.identifier, failureCount, threshold: input.maxConsecutiveFailures }, "skipped promote: circuit-breaker engaged (too many consecutive failures)");
91
93
  if (input.db) {
92
94
  void logAuditEventUnchecked(input.db, pmSkippedCircuitBreakerEvent({
@@ -182,6 +184,20 @@ export async function promoteReadyIssues(input) {
182
184
  log.warn({ issueId: candidate.identifier, err }, "Tier 5 escalation: Slack alert failed");
183
185
  }
184
186
  }
187
+ // BEC-236 — record the Tier-5 escalation so the half-open probe can
188
+ // distinguish our auto-added needs-design from a human's. Idempotent on
189
+ // issue_id PK so re-escalations of the same issue don't double-insert.
190
+ if (input.db) {
191
+ try {
192
+ await input.db
193
+ .insert(circuitBreakerState)
194
+ .values({ issueId: candidate.identifier, escalatedAt: new Date() })
195
+ .onConflictDoNothing();
196
+ }
197
+ catch (err) {
198
+ log.warn({ err, issueId: candidate.identifier }, "failed to insert circuit_breaker_state row (probe recovery will skip this issue)");
199
+ }
200
+ }
185
201
  if (input.db) {
186
202
  void logAuditEventUnchecked(input.db, pmEscalatedToNeedsDesignEvent({
187
203
  issueId: candidate.identifier,
@@ -1 +1 @@
1
- {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../../src/pm/actions/promote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../../src/pm/actions/promote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { LinearClient } from "@linear/sdk";
2
+ import type { AnyDb } from "../../db/client.js";
3
+ export interface RecoverCircuitBreakerInput {
4
+ db: AnyDb;
5
+ /** Linear issue identifier (e.g. "BEC-1") — the human-facing identifier, NOT the UUID. */
6
+ issueId: string;
7
+ linearClient: LinearClient | {
8
+ issue: (id: string) => any;
9
+ updateIssue: (id: string, payload: any) => any;
10
+ };
11
+ }
12
+ /**
13
+ * BEC-236 — invoked when a pipeline run reaches terminal `completed`
14
+ * status. If the issue has a circuit_breaker_state row (i.e. we
15
+ * Tier-5-escalated it earlier), drop the row and strip the
16
+ * `needs-design` label. Idempotent and safe to call for any completed
17
+ * run — early-returns when no state row exists, so human-added
18
+ * needs-design labels are preserved.
19
+ */
20
+ export declare function recoverCircuitBreaker(input: RecoverCircuitBreakerInput): Promise<void>;
21
+ //# sourceMappingURL=recover-circuit-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recover-circuit-breaker.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/recover-circuit-breaker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOhD,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,KAAK,CAAC;IACV,0FAA0F;IAC1F,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EACR,YAAY,GACZ;QACE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;QAC3B,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC;KAChD,CAAC;CACP;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -0,0 +1,47 @@
1
+ import { eq } from "drizzle-orm";
2
+ import { circuitBreakerState } from "../../db/schema.js";
3
+ import { createLogger } from "../../logger.js";
4
+ import { logAuditEventUnchecked } from "../../audit/writer.js";
5
+ import { pmCircuitBreakerRecoveredEvent } from "../../audit/events.js";
6
+ const log = createLogger({ component: "PmAgent:recover-breaker" });
7
+ /**
8
+ * BEC-236 — invoked when a pipeline run reaches terminal `completed`
9
+ * status. If the issue has a circuit_breaker_state row (i.e. we
10
+ * Tier-5-escalated it earlier), drop the row and strip the
11
+ * `needs-design` label. Idempotent and safe to call for any completed
12
+ * run — early-returns when no state row exists, so human-added
13
+ * needs-design labels are preserved.
14
+ */
15
+ export async function recoverCircuitBreaker(input) {
16
+ const { db, issueId, linearClient } = input;
17
+ const rows = (await db
18
+ .select({ probeAttempts: circuitBreakerState.probeAttempts })
19
+ .from(circuitBreakerState)
20
+ .where(eq(circuitBreakerState.issueId, issueId)));
21
+ if (rows.length === 0)
22
+ return; // not our escalation, leave label alone
23
+ const probeAttempts = rows[0].probeAttempts;
24
+ // Delete the state row first — if label removal fails, the next run will
25
+ // re-attempt the label removal but the breaker state is already cleared.
26
+ await db
27
+ .delete(circuitBreakerState)
28
+ .where(eq(circuitBreakerState.issueId, issueId));
29
+ try {
30
+ const issue = await linearClient.issue(issueId);
31
+ const labelConn = await issue.labels();
32
+ const surviving = labelConn.nodes
33
+ .filter((l) => l.name.toLowerCase() !== "needs-design")
34
+ .map((l) => l.id);
35
+ await linearClient.updateIssue(issue.id, { labelIds: surviving });
36
+ }
37
+ catch (err) {
38
+ log.warn({ err, issueId }, "recoverCircuitBreaker: failed to remove needs-design label");
39
+ }
40
+ try {
41
+ await logAuditEventUnchecked(db, pmCircuitBreakerRecoveredEvent({ issueId, probeAttempts }));
42
+ }
43
+ catch (err) {
44
+ log.warn({ err, issueId }, "recoverCircuitBreaker: failed to log audit event");
45
+ }
46
+ }
47
+ //# sourceMappingURL=recover-circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recover-circuit-breaker.js","sourceRoot":"","sources":["../../../src/pm/actions/recover-circuit-breaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,CAAC;AAcnE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAiC;IAEjC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAE5C,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;SACnB,MAAM,CAAC,EAAE,aAAa,EAAE,mBAAmB,CAAC,aAAa,EAAE,CAAC;SAC5D,IAAI,CAAC,mBAAmB,CAAC;SACzB,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAEhD,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,wCAAwC;IAEvE,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAE5C,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,EAAE;SACL,MAAM,CAAC,mBAAmB,CAAC;SAC3B,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAO,YAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK;aAC9B,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC;aACxE,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,MAAO,YAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,EAAE,GAAG,EAAE,OAAO,EAAE,EAChB,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,sBAAsB,CAC1B,EAAE,EACF,8BAA8B,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAC3D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,EAAE,GAAG,EAAE,OAAO,EAAE,EAChB,kDAAkD,CACnD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { AnyDb } from "../../db/client.js";
2
+ export interface SelectProbeCandidatesOptions {
3
+ cap: number;
4
+ cooldownMs: number;
5
+ maxConsecutiveFailures: number;
6
+ now: number;
7
+ /** Escape hatch from `getCircuitBreakerProbeConfig().disabled`. */
8
+ disabled?: boolean;
9
+ }
10
+ /**
11
+ * BEC-236 — pick at most `cap` circuit-broken issues whose cooldown
12
+ * window has elapsed, mark them probed (`last_probe_at = now`,
13
+ * `probe_attempts += 1`), and emit one `pm.circuit_breaker_probe` audit
14
+ * event per. Returns the issue IDs the caller should bypass the breaker
15
+ * skip for in this tick.
16
+ *
17
+ * Round-robin: candidates are ordered by oldest `last_probe_at` first
18
+ * (NULLs first) so no issue starves.
19
+ */
20
+ export declare function selectProbeCandidates(db: AnyDb, opts: SelectProbeCandidatesOptions): Promise<Set<string>>;
21
+ //# sourceMappingURL=select-probe-candidates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-probe-candidates.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/select-probe-candidates.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQhD,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CA8EtB"}
@@ -0,0 +1,81 @@
1
+ import { asc, inArray, isNull, lte, or, sql } from "drizzle-orm";
2
+ import { circuitBreakerState } from "../../db/schema.js";
3
+ import { batchCountConsecutiveFailures } from "./db-queries.js";
4
+ import { createLogger } from "../../logger.js";
5
+ import { logAuditEventUnchecked } from "../../audit/writer.js";
6
+ import { pmCircuitBreakerProbeEvent } from "../../audit/events.js";
7
+ const log = createLogger({ component: "PmAgent:probe" });
8
+ /**
9
+ * BEC-236 — pick at most `cap` circuit-broken issues whose cooldown
10
+ * window has elapsed, mark them probed (`last_probe_at = now`,
11
+ * `probe_attempts += 1`), and emit one `pm.circuit_breaker_probe` audit
12
+ * event per. Returns the issue IDs the caller should bypass the breaker
13
+ * skip for in this tick.
14
+ *
15
+ * Round-robin: candidates are ordered by oldest `last_probe_at` first
16
+ * (NULLs first) so no issue starves.
17
+ */
18
+ export async function selectProbeCandidates(db, opts) {
19
+ if (opts.disabled)
20
+ return new Set();
21
+ // Defensive: when maxConsecutiveFailures is 0 the breaker is effectively
22
+ // disabled (BEC-181 documents this), so there's nothing to probe — and the
23
+ // downstream filter `count >= 0` would elect every state-row issue,
24
+ // including already-recovered ones.
25
+ if (opts.maxConsecutiveFailures <= 0)
26
+ return new Set();
27
+ // Pull all eligible rows: cooldown elapsed OR never probed.
28
+ // Drizzle's lte() calls toDriver() on the Date, converting it to epoch-
29
+ // seconds for SQLite (matching how last_probe_at is stored).
30
+ const cooldownCutoff = new Date(opts.now - opts.cooldownMs);
31
+ const rows = (await db
32
+ .select({
33
+ issueId: circuitBreakerState.issueId,
34
+ lastProbeAt: circuitBreakerState.lastProbeAt,
35
+ probeAttempts: circuitBreakerState.probeAttempts,
36
+ })
37
+ .from(circuitBreakerState)
38
+ .where(or(isNull(circuitBreakerState.lastProbeAt), lte(circuitBreakerState.lastProbeAt, cooldownCutoff)))
39
+ .orderBy(
40
+ // NULLs first (never probed → most eligible), then oldest-first.
41
+ sql `CASE WHEN ${circuitBreakerState.lastProbeAt} IS NULL THEN 0 ELSE 1 END`, asc(circuitBreakerState.lastProbeAt)));
42
+ if (rows.length === 0)
43
+ return new Set();
44
+ // Filter out issues whose failure count has dropped (a `completed` run landed).
45
+ const failureCounts = await batchCountConsecutiveFailures(db, rows.map((r) => r.issueId));
46
+ const eligible = rows.filter((r) => (failureCounts.get(r.issueId) ?? 0) >= opts.maxConsecutiveFailures);
47
+ const picked = eligible.slice(0, opts.cap);
48
+ if (picked.length === 0)
49
+ return new Set();
50
+ const pickedIds = picked.map((r) => r.issueId);
51
+ // Atomically bump last_probe_at + probe_attempts for the picked set.
52
+ await db
53
+ .update(circuitBreakerState)
54
+ .set({
55
+ lastProbeAt: new Date(opts.now),
56
+ probeAttempts: sql `${circuitBreakerState.probeAttempts} + 1`,
57
+ })
58
+ .where(inArray(circuitBreakerState.issueId, pickedIds));
59
+ // Emit one audit event per probe. Best-effort — failures don't block the tick.
60
+ // The "age" we know cheaply here is age since the previous probe (or null
61
+ // for never-probed issues, surfaced as -1). Age since the last actual
62
+ // failure would require a separate query per issue — not worth the N+1.
63
+ for (const r of picked) {
64
+ const lastProbeAgeMin = r.lastProbeAt
65
+ ? Math.floor((opts.now - r.lastProbeAt.getTime()) / 60_000)
66
+ : -1;
67
+ try {
68
+ await logAuditEventUnchecked(db, pmCircuitBreakerProbeEvent({
69
+ issueId: r.issueId,
70
+ consecutiveFailures: failureCounts.get(r.issueId) ?? 0,
71
+ lastProbeAgeMin,
72
+ probeAttempts: r.probeAttempts + 1,
73
+ }));
74
+ }
75
+ catch (err) {
76
+ log.warn({ err, issueId: r.issueId }, "failed to log circuit-breaker probe audit event");
77
+ }
78
+ }
79
+ return new Set(pickedIds);
80
+ }
81
+ //# sourceMappingURL=select-probe-candidates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-probe-candidates.js","sourceRoot":"","sources":["../../../src/pm/actions/select-probe-candidates.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,13 @@ export interface StartTodoInput {
26
26
  * round-trip for all candidates via the required `db` field).
27
27
  */
28
28
  getFailureCount?: (issueId: string) => Promise<number>;
29
+ /**
30
+ * BEC-236 — issue IDs the half-open probe selected this tick. Issues in
31
+ * this Set bypass the consecutive-failures circuit-breaker skip, allowing
32
+ * exactly one probe run per cooldown window. When undefined, breaker
33
+ * behavior is unchanged from BEC-161/181.
34
+ */
35
+ probeOverrideIds?: Set<string>;
29
36
  }
30
37
  export interface StartTodoResult {
31
38
  identifier: string;
@@ -1 +1 @@
1
- {"version":3,"file":"start-todo.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/start-todo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,GAAG,CAAC;IAClB,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAgN5B"}
1
+ {"version":3,"file":"start-todo.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/start-todo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,GAAG,CAAC;IAClB,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAmN5B"}
@@ -78,7 +78,8 @@ export async function startTodoIssues(input) {
78
78
  const failureCount = input.getFailureCount
79
79
  ? await input.getFailureCount(issue.identifier)
80
80
  : (prefetchedFailureCounts.get(issue.identifier) ?? 0);
81
- if (failureCount >= input.maxConsecutiveFailures) {
81
+ if (failureCount >= input.maxConsecutiveFailures &&
82
+ !input.probeOverrideIds?.has(issue.identifier)) {
82
83
  log.warn({ identifier: issue.identifier, failureCount, threshold: input.maxConsecutiveFailures }, "circuit-breaker engaged — skipping start");
83
84
  void logAuditEventUnchecked(db, pmSkippedCircuitBreakerEvent({
84
85
  issueId: issue.identifier,