@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.
- package/dist/__tests__/audit-immutability.test.js +8 -0
- package/dist/__tests__/audit-immutability.test.js.map +1 -1
- package/dist/__tests__/auth-check.test.js +130 -16
- package/dist/__tests__/auth-check.test.js.map +1 -1
- package/dist/__tests__/auth-monitor.test.js +127 -103
- package/dist/__tests__/auth-monitor.test.js.map +1 -1
- package/dist/__tests__/circuit-breaker-config.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-config.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-config.test.js +32 -0
- package/dist/__tests__/circuit-breaker-config.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-events.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-events.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-events.test.js +53 -0
- package/dist/__tests__/circuit-breaker-events.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-integration.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-integration.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-integration.test.js +192 -0
- package/dist/__tests__/circuit-breaker-integration.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-probe.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-probe.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-probe.test.js +124 -0
- package/dist/__tests__/circuit-breaker-probe.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-recover.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-recover.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-recover.test.js +52 -0
- package/dist/__tests__/circuit-breaker-recover.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-sweep.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-sweep.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-sweep.test.js +118 -0
- package/dist/__tests__/circuit-breaker-sweep.test.js.map +1 -0
- package/dist/__tests__/execute-stage-session-opts.test.js +1 -1
- package/dist/__tests__/execute-stage-session-opts.test.js.map +1 -1
- package/dist/__tests__/executor-issue-id.test.js +1 -1
- package/dist/__tests__/executor-issue-id.test.js.map +1 -1
- package/dist/__tests__/pm-audit-retention-step.test.js +3 -0
- package/dist/__tests__/pm-audit-retention-step.test.js.map +1 -1
- package/dist/__tests__/pm-budget-alerts.test.d.ts +14 -0
- package/dist/__tests__/pm-budget-alerts.test.d.ts.map +1 -1
- package/dist/__tests__/pm-budget-alerts.test.js +90 -18
- package/dist/__tests__/pm-budget-alerts.test.js.map +1 -1
- package/dist/__tests__/pm-budget-refused-event.test.js +2 -0
- package/dist/__tests__/pm-budget-refused-event.test.js.map +1 -1
- package/dist/__tests__/pm-budget-utc-boundary.test.d.ts +2 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.d.ts.map +1 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.js +128 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.js.map +1 -0
- package/dist/__tests__/pm-cost-rollup-step.test.js +2 -0
- package/dist/__tests__/pm-cost-rollup-step.test.js.map +1 -1
- package/dist/__tests__/pm-promote.test.js +111 -0
- package/dist/__tests__/pm-promote.test.js.map +1 -1
- package/dist/__tests__/pm-scheduler.test.js +1 -0
- package/dist/__tests__/pm-scheduler.test.js.map +1 -1
- package/dist/__tests__/pm-sso-prune-step.test.js +2 -0
- package/dist/__tests__/pm-sso-prune-step.test.js.map +1 -1
- package/dist/__tests__/release-manager-slack-handler.test.js +66 -0
- package/dist/__tests__/release-manager-slack-handler.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.js +1 -0
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec62.test.js +1 -0
- package/dist/__tests__/reproduce-bec62.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js +2 -0
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js.map +1 -1
- package/dist/__tests__/resolve-claude-auth.test.js +10 -8
- package/dist/__tests__/resolve-claude-auth.test.js.map +1 -1
- package/dist/__tests__/session-lazy-creation.test.js +1 -1
- package/dist/__tests__/session-lazy-creation.test.js.map +1 -1
- package/dist/__tests__/session-resume-fallback.test.js +1 -1
- package/dist/__tests__/session-resume-fallback.test.js.map +1 -1
- package/dist/__tests__/stage-models.test.js +2 -2
- package/dist/__tests__/stage-models.test.js.map +1 -1
- package/dist/__tests__/start-todo.test.js +29 -0
- package/dist/__tests__/start-todo.test.js.map +1 -1
- package/dist/__tests__/triage-preserve-acs.test.d.ts +2 -0
- package/dist/__tests__/triage-preserve-acs.test.d.ts.map +1 -0
- package/dist/__tests__/triage-preserve-acs.test.js +240 -0
- package/dist/__tests__/triage-preserve-acs.test.js.map +1 -0
- package/dist/audit/events.d.ts +29 -0
- package/dist/audit/events.d.ts.map +1 -1
- package/dist/audit/events.js +44 -0
- package/dist/audit/events.js.map +1 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +10 -0
- package/dist/db/client.js.map +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema.d.ts +88 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +15 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/executor/auth-check.d.ts +30 -7
- package/dist/executor/auth-check.d.ts.map +1 -1
- package/dist/executor/auth-check.js +66 -16
- package/dist/executor/auth-check.js.map +1 -1
- package/dist/executor/auth-monitor.d.ts.map +1 -1
- package/dist/executor/auth-monitor.js +12 -12
- package/dist/executor/auth-monitor.js.map +1 -1
- package/dist/executor/executor.js +1 -1
- package/dist/executor/executor.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/pm/actions/circuit-breaker-config.d.ts +13 -0
- package/dist/pm/actions/circuit-breaker-config.d.ts.map +1 -0
- package/dist/pm/actions/circuit-breaker-config.js +23 -0
- package/dist/pm/actions/circuit-breaker-config.js.map +1 -0
- package/dist/pm/actions/db-queries.d.ts +18 -0
- package/dist/pm/actions/db-queries.d.ts.map +1 -1
- package/dist/pm/actions/db-queries.js +75 -2
- package/dist/pm/actions/db-queries.js.map +1 -1
- package/dist/pm/actions/promote.d.ts +7 -0
- package/dist/pm/actions/promote.d.ts.map +1 -1
- package/dist/pm/actions/promote.js +17 -1
- package/dist/pm/actions/promote.js.map +1 -1
- package/dist/pm/actions/recover-circuit-breaker.d.ts +21 -0
- package/dist/pm/actions/recover-circuit-breaker.d.ts.map +1 -0
- package/dist/pm/actions/recover-circuit-breaker.js +47 -0
- package/dist/pm/actions/recover-circuit-breaker.js.map +1 -0
- package/dist/pm/actions/select-probe-candidates.d.ts +21 -0
- package/dist/pm/actions/select-probe-candidates.d.ts.map +1 -0
- package/dist/pm/actions/select-probe-candidates.js +81 -0
- package/dist/pm/actions/select-probe-candidates.js.map +1 -0
- package/dist/pm/actions/start-todo.d.ts +7 -0
- package/dist/pm/actions/start-todo.d.ts.map +1 -1
- package/dist/pm/actions/start-todo.js +2 -1
- package/dist/pm/actions/start-todo.js.map +1 -1
- package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts +28 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts.map +1 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.js +47 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.js.map +1 -0
- package/dist/pm/actions/triage-prompt.d.ts +14 -0
- package/dist/pm/actions/triage-prompt.d.ts.map +1 -1
- package/dist/pm/actions/triage-prompt.js +52 -9
- package/dist/pm/actions/triage-prompt.js.map +1 -1
- package/dist/pm/actions/triage.d.ts.map +1 -1
- package/dist/pm/actions/triage.js +37 -24
- package/dist/pm/actions/triage.js.map +1 -1
- package/dist/pm/scheduler.d.ts +3 -0
- package/dist/pm/scheduler.d.ts.map +1 -1
- package/dist/pm/scheduler.js +40 -1
- package/dist/pm/scheduler.js.map +1 -1
- package/dist/release-manager/slack-handler.d.ts +6 -0
- package/dist/release-manager/slack-handler.d.ts.map +1 -1
- package/dist/release-manager/slack-handler.js +76 -1
- package/dist/release-manager/slack-handler.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -1
- 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 } 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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
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 } 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":"AAAA,oCAAoC;AACpC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,GAErB,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,EAAuB,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
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,22 @@ 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: agent_logs → stage_runs → pipeline_runs (failed only).
|
|
62
|
+
* 3. Delete the circuit_breaker_state row (if present).
|
|
63
|
+
*
|
|
64
|
+
* Returns `{ hadStateRow, failedRunIds }` so the CLI layer can decide
|
|
65
|
+
* whether to strip the Linear `needs-design` label (only when the state
|
|
66
|
+
* row was present — avoids touching human-added labels).
|
|
67
|
+
*
|
|
68
|
+
* `completed` runs are NEVER deleted — only `status = 'failed'` rows.
|
|
69
|
+
*/
|
|
70
|
+
export declare function deleteFailedRunsForIssue(db: AnyDb, issueId: string): Promise<{
|
|
71
|
+
hadStateRow: boolean;
|
|
72
|
+
failedRunCount: number;
|
|
73
|
+
}>;
|
|
56
74
|
//# 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;
|
|
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;AAKtD,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;;;;;;;;;;;;;GAaG;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,CA4D3D"}
|
|
@@ -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, pipelineRuns, 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,76 @@ 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: agent_logs → stage_runs → pipeline_runs (failed only).
|
|
222
|
+
* 3. Delete the circuit_breaker_state row (if present).
|
|
223
|
+
*
|
|
224
|
+
* Returns `{ hadStateRow, failedRunIds }` so the CLI layer can decide
|
|
225
|
+
* whether to strip the Linear `needs-design` label (only when the state
|
|
226
|
+
* row was present — avoids touching human-added labels).
|
|
227
|
+
*
|
|
228
|
+
* `completed` runs are NEVER deleted — only `status = 'failed'` rows.
|
|
229
|
+
*/
|
|
230
|
+
export async function deleteFailedRunsForIssue(db, issueId) {
|
|
231
|
+
// Snapshot state-row presence BEFORE the transaction deletes it.
|
|
232
|
+
const stateRows = (await db
|
|
233
|
+
.select({ issueId: circuitBreakerState.issueId })
|
|
234
|
+
.from(circuitBreakerState)
|
|
235
|
+
.where(eq(circuitBreakerState.issueId, issueId)));
|
|
236
|
+
const hadStateRow = stateRows.length > 0;
|
|
237
|
+
// Identify failed pipeline_run IDs for this issue.
|
|
238
|
+
const failedRunRows = (await db
|
|
239
|
+
.select({ id: pipelineRuns.id })
|
|
240
|
+
.from(pipelineRuns)
|
|
241
|
+
.where(and(eq(pipelineRuns.issueId, issueId), eq(pipelineRuns.status, "failed"))));
|
|
242
|
+
const failedRunIds = failedRunRows.map((r) => r.id);
|
|
243
|
+
// Cascade-delete inside a transaction.
|
|
244
|
+
// Note: better-sqlite3 (SQLite driver) does not support async transaction
|
|
245
|
+
// callbacks. Use the same BEGIN IMMEDIATE / COMMIT / ROLLBACK pattern as
|
|
246
|
+
// setUserRole in rbac/user-role-store.ts. Postgres uses the native drizzle
|
|
247
|
+
// async transaction API.
|
|
248
|
+
const txBody = async (handle) => {
|
|
249
|
+
if (failedRunIds.length > 0) {
|
|
250
|
+
// Pull stage_run IDs first so we can delete agent_logs by stage_run_id.
|
|
251
|
+
const stageRunRows = (await handle
|
|
252
|
+
.select({ id: stageRuns.id })
|
|
253
|
+
.from(stageRuns)
|
|
254
|
+
.where(inArray(stageRuns.pipelineRunId, failedRunIds)));
|
|
255
|
+
const stageRunIds = stageRunRows.map((r) => r.id);
|
|
256
|
+
if (stageRunIds.length > 0) {
|
|
257
|
+
await handle.delete(agentLogs).where(inArray(agentLogs.stageRunId, stageRunIds));
|
|
258
|
+
await handle.delete(stageRuns).where(inArray(stageRuns.id, stageRunIds));
|
|
259
|
+
}
|
|
260
|
+
await handle.delete(pipelineRuns).where(inArray(pipelineRuns.id, failedRunIds));
|
|
261
|
+
}
|
|
262
|
+
await handle.delete(circuitBreakerState).where(eq(circuitBreakerState.issueId, issueId));
|
|
263
|
+
};
|
|
264
|
+
if (isPostgres(db)) {
|
|
265
|
+
await db.transaction(async (tx) => {
|
|
266
|
+
await txBody(tx);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
// SQLite path — manual transaction (BEGIN IMMEDIATE → COMMIT/ROLLBACK).
|
|
271
|
+
await db.run(sql `BEGIN IMMEDIATE`);
|
|
272
|
+
try {
|
|
273
|
+
await txBody(db);
|
|
274
|
+
await db.run(sql `COMMIT`);
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
try {
|
|
278
|
+
await db.run(sql `ROLLBACK`);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// ignore rollback errors
|
|
282
|
+
}
|
|
283
|
+
throw err;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return { hadStateRow, failedRunCount: failedRunIds.length };
|
|
287
|
+
}
|
|
215
288
|
//# sourceMappingURL=db-queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-queries.js","sourceRoot":"","sources":["../../../src/pm/actions/db-queries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
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;
|
|
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":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;
|
|
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":"AAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;AAWzD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAS,EACT,IAAkC;IAElC,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAEpC,yEAAyE;IACzE,2EAA2E;IAC3E,oEAAoE;IACpE,oCAAoC;IACpC,IAAI,IAAI,CAAC,sBAAsB,IAAI,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAEvD,4DAA4D;IAC5D,wEAAwE;IACxE,6DAA6D;IAC7D,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;SACnB,MAAM,CAAC;QACN,OAAO,EAAE,mBAAmB,CAAC,OAAO;QACpC,WAAW,EAAE,mBAAmB,CAAC,WAAW;QAC5C,aAAa,EAAE,mBAAmB,CAAC,aAAa;KACjD,CAAC;SACD,IAAI,CAAC,mBAAmB,CAAC;SACzB,KAAK,CACJ,EAAE,CACA,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,EACvC,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC,CACrD,CACF;SACA,OAAO;IACN,iEAAiE;IACjE,GAAG,CAAA,aAAa,mBAAmB,CAAC,WAAW,4BAA4B,EAC3E,GAAG,CAAC,mBAAmB,CAAC,WAAW,CAAC,CACrC,CAAgF,CAAC;IAEpF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAExC,gFAAgF;IAChF,MAAM,aAAa,GAAG,MAAM,6BAA6B,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAC1E,CAAC;IAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAE1C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE/C,qEAAqE;IACrE,MAAM,EAAE;SACL,MAAM,CAAC,mBAAmB,CAAC;SAC3B,GAAG,CAAC;QACH,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,aAAa,EAAE,GAAG,CAAA,GAAG,mBAAmB,CAAC,aAAa,MAAM;KAC7D,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1D,+EAA+E;IAC/E,0EAA0E;IAC1E,sEAAsE;IACtE,wEAAwE;IACxE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW;YACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;YAC3D,CAAC,CAAC,CAAC,CAAC,CAAC;QACP,IAAI,CAAC;YACH,MAAM,sBAAsB,CAC1B,EAAE,EACF,0BAA0B,CAAC;gBACzB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,mBAAmB,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBACtD,eAAe;gBACf,aAAa,EAAE,CAAC,CAAC,aAAa,GAAG,CAAC;aACnC,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,iDAAiD,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -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;
|
|
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,
|