@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-todo.js","sourceRoot":"","sources":["../../../src/pm/actions/start-todo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAI1E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"start-todo.js","sourceRoot":"","sources":["../../../src/pm/actions/start-todo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { LinearClient } from "@linear/sdk";
|
|
2
|
+
import type { AnyDb } from "../../db/client.js";
|
|
3
|
+
export interface SweepRecoveredOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Threshold the breaker uses. Issues whose consecutive-failure count has
|
|
6
|
+
* dropped below this are recoverable.
|
|
7
|
+
*/
|
|
8
|
+
maxConsecutiveFailures: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* BEC-236 — PM tick sweep that completes circuit-breaker recovery.
|
|
12
|
+
*
|
|
13
|
+
* The runner can't drive recovery itself because it has no `linearClient` in
|
|
14
|
+
* scope (it talks to Linear only through the notifier, which doesn't expose
|
|
15
|
+
* label edits). Instead, every PM tick scans `circuit_breaker_state` for
|
|
16
|
+
* rows whose corresponding issue now has `batchCountConsecutiveFailures` <
|
|
17
|
+
* threshold — i.e. a `completed` run has landed since the last failure
|
|
18
|
+
* streak. Those rows are handed to `recoverCircuitBreaker`, which deletes
|
|
19
|
+
* the row and strips the Tier-5-added `needs-design` label.
|
|
20
|
+
*
|
|
21
|
+
* Lag relative to run completion is at most one PM tick (~30 min). That's
|
|
22
|
+
* fine for the recovery use case — the row stays visible to `ura circuit
|
|
23
|
+
* list` until cleared, but nothing functional depends on instant cleanup.
|
|
24
|
+
*/
|
|
25
|
+
export declare function sweepRecoveredCircuitBreakers(db: AnyDb, linearClient: LinearClient, opts: SweepRecoveredOptions): Promise<{
|
|
26
|
+
recovered: string[];
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=sweep-recovered-circuit-breakers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sweep-recovered-circuit-breakers.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/sweep-recovered-circuit-breakers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOhD,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,KAAK,EACT,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA2BlC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { circuitBreakerState } from "../../db/schema.js";
|
|
2
|
+
import { batchCountConsecutiveFailures } from "./db-queries.js";
|
|
3
|
+
import { recoverCircuitBreaker } from "./recover-circuit-breaker.js";
|
|
4
|
+
import { createLogger } from "../../logger.js";
|
|
5
|
+
const log = createLogger({ component: "PmAgent:sweep-recovery" });
|
|
6
|
+
/**
|
|
7
|
+
* BEC-236 — PM tick sweep that completes circuit-breaker recovery.
|
|
8
|
+
*
|
|
9
|
+
* The runner can't drive recovery itself because it has no `linearClient` in
|
|
10
|
+
* scope (it talks to Linear only through the notifier, which doesn't expose
|
|
11
|
+
* label edits). Instead, every PM tick scans `circuit_breaker_state` for
|
|
12
|
+
* rows whose corresponding issue now has `batchCountConsecutiveFailures` <
|
|
13
|
+
* threshold — i.e. a `completed` run has landed since the last failure
|
|
14
|
+
* streak. Those rows are handed to `recoverCircuitBreaker`, which deletes
|
|
15
|
+
* the row and strips the Tier-5-added `needs-design` label.
|
|
16
|
+
*
|
|
17
|
+
* Lag relative to run completion is at most one PM tick (~30 min). That's
|
|
18
|
+
* fine for the recovery use case — the row stays visible to `ura circuit
|
|
19
|
+
* list` until cleared, but nothing functional depends on instant cleanup.
|
|
20
|
+
*/
|
|
21
|
+
export async function sweepRecoveredCircuitBreakers(db, linearClient, opts) {
|
|
22
|
+
const rows = (await db
|
|
23
|
+
.select({ issueId: circuitBreakerState.issueId })
|
|
24
|
+
.from(circuitBreakerState));
|
|
25
|
+
if (rows.length === 0)
|
|
26
|
+
return { recovered: [] };
|
|
27
|
+
const issueIds = rows.map((r) => r.issueId);
|
|
28
|
+
const counts = await batchCountConsecutiveFailures(db, issueIds);
|
|
29
|
+
const recoverable = issueIds.filter((id) => (counts.get(id) ?? 0) < opts.maxConsecutiveFailures);
|
|
30
|
+
if (recoverable.length === 0)
|
|
31
|
+
return { recovered: [] };
|
|
32
|
+
const recovered = [];
|
|
33
|
+
for (const id of recoverable) {
|
|
34
|
+
try {
|
|
35
|
+
await recoverCircuitBreaker({ db, issueId: id, linearClient });
|
|
36
|
+
recovered.push(id);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
log.warn({ err, issueId: id }, "sweepRecoveredCircuitBreakers: recovery failed for issue");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (recovered.length > 0) {
|
|
43
|
+
log.info({ recovered }, "circuit-breaker recovery sweep cleared issues");
|
|
44
|
+
}
|
|
45
|
+
return { recovered };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=sweep-recovered-circuit-breakers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sweep-recovered-circuit-breakers.js","sourceRoot":"","sources":["../../../src/pm/actions/sweep-recovered-circuit-breakers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAUlE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,EAAS,EACT,YAA0B,EAC1B,IAA2B;IAE3B,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;SACnB,MAAM,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,CAAC;SAChD,IAAI,CAAC,mBAAmB,CAAC,CAA+B,CAAC;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEjE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CACjC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC5D,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAEvD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;YAC/D,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,0DAA0D,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,+CAA+C,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -20,7 +20,21 @@ export interface TriagePromptInput {
|
|
|
20
20
|
identifier: string;
|
|
21
21
|
title: string;
|
|
22
22
|
description: string | null | undefined;
|
|
23
|
+
/** When true, the description already contains a parsed **Acceptance Criteria:** section; prompt builders omit AC generation to avoid divergent regeneration. */
|
|
24
|
+
hasPreSuppliedACs?: boolean;
|
|
23
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse hand-written acceptance criteria from a Linear issue description.
|
|
28
|
+
*
|
|
29
|
+
* Scans for the canonical `**Acceptance Criteria:**` marker and extracts
|
|
30
|
+
* following bullet items (`- [ ] text`, `- [x] text`, or `- text`).
|
|
31
|
+
* Stops at the first non-bullet, non-empty line (i.e. a new section or prose).
|
|
32
|
+
* Returns an empty array when the marker is absent or no items follow it.
|
|
33
|
+
*
|
|
34
|
+
* Only parses from the canonical marker — NOT from arbitrary free-text —
|
|
35
|
+
* so generic prose that mentions "criteria" is never accidentally harvested.
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseHandWrittenACs(description: string | null | undefined): string[];
|
|
24
38
|
/**
|
|
25
39
|
* Returns true iff the env explicitly disables Triage v2. Strict equality
|
|
26
40
|
* on the string `"true"` — mirrors `URATEAM_DISABLE_*_GATE` conventions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage-prompt.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/triage-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"triage-prompt.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/triage-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,iKAAiK;IACjK,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAoBpF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACjC,MAAM,CAyBR;AA0ED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACjC,MAAM,CAiER"}
|
|
@@ -16,6 +16,42 @@
|
|
|
16
16
|
* See `specs/001-triage-v2/research.md` for the rationale behind each
|
|
17
17
|
* prompt-engineering primitive.
|
|
18
18
|
*/
|
|
19
|
+
/**
|
|
20
|
+
* Parse hand-written acceptance criteria from a Linear issue description.
|
|
21
|
+
*
|
|
22
|
+
* Scans for the canonical `**Acceptance Criteria:**` marker and extracts
|
|
23
|
+
* following bullet items (`- [ ] text`, `- [x] text`, or `- text`).
|
|
24
|
+
* Stops at the first non-bullet, non-empty line (i.e. a new section or prose).
|
|
25
|
+
* Returns an empty array when the marker is absent or no items follow it.
|
|
26
|
+
*
|
|
27
|
+
* Only parses from the canonical marker — NOT from arbitrary free-text —
|
|
28
|
+
* so generic prose that mentions "criteria" is never accidentally harvested.
|
|
29
|
+
*/
|
|
30
|
+
export function parseHandWrittenACs(description) {
|
|
31
|
+
if (!description)
|
|
32
|
+
return [];
|
|
33
|
+
const marker = "**Acceptance Criteria:**";
|
|
34
|
+
const idx = description.indexOf(marker);
|
|
35
|
+
if (idx === -1)
|
|
36
|
+
return [];
|
|
37
|
+
const afterMarker = description.slice(idx + marker.length);
|
|
38
|
+
const items = [];
|
|
39
|
+
for (const line of afterMarker.split("\n")) {
|
|
40
|
+
const trimmed = line.trim();
|
|
41
|
+
if (trimmed === "")
|
|
42
|
+
continue; // blank lines between items are fine
|
|
43
|
+
const match = trimmed.match(/^-\s+(?:\[.?\]\s+)?(.+)$/);
|
|
44
|
+
if (match) {
|
|
45
|
+
const text = match[1].trim();
|
|
46
|
+
if (text.length > 0)
|
|
47
|
+
items.push(text);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
break; // non-bullet non-empty line → end of AC section
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return items;
|
|
54
|
+
}
|
|
19
55
|
/**
|
|
20
56
|
* Returns true iff the env explicitly disables Triage v2. Strict equality
|
|
21
57
|
* on the string `"true"` — mirrors `URATEAM_DISABLE_*_GATE` conventions.
|
|
@@ -33,21 +69,27 @@ export function isV2Disabled(env = process.env) {
|
|
|
33
69
|
*/
|
|
34
70
|
export function buildTriageV1Prompt(issue, sanitize) {
|
|
35
71
|
const sanitizedDesc = sanitize(issue.description ?? "");
|
|
36
|
-
|
|
72
|
+
const acBlock = issue.hasPreSuppliedACs
|
|
73
|
+
? ""
|
|
74
|
+
: `IMPORTANT rules for generating acceptance criteria:\n` +
|
|
75
|
+
`1. INTEGRATION: Every new function, module, or utility MUST have a criterion that specifies where it is called from in existing code (e.g. "runner.ts calls checkFoo() after the test stage completes"). Code that is exported but never imported outside its own test file is incomplete.\n` +
|
|
76
|
+
`2. DOCUMENTATION: If the change adds new configuration, public API, CLI flags, or changes behavior, include a criterion requiring updates to relevant documentation (CLAUDE.md, README.md, deploy/README.md, or inline JSDoc).\n` +
|
|
77
|
+
`3. TESTING: Include a criterion for tests that exercise the integration path, not just the utility in isolation.\n` +
|
|
78
|
+
`4. Each criterion must be concrete and verifiable by reading the code — avoid vague criteria like "works correctly" or "is implemented".\n\n`;
|
|
79
|
+
const jsonSchema = issue.hasPreSuppliedACs
|
|
80
|
+
? `{"priority": <1-4 where 1=urgent>, "labels": [<"bug"|"feature"|"backend"|"frontend"|"infra"|"docs">], "complexity": <"trivial"|"small"|"medium"|"large">, "rationale": "<one sentence>", "approachSummary": "<3-5 lines>", "openQuestions": [], "antiAcceptanceCriteria": ["<not-this>", ...]}`
|
|
81
|
+
: `{"priority": <1-4 where 1=urgent>, "labels": [<"bug"|"feature"|"backend"|"frontend"|"infra"|"docs">], "complexity": <"trivial"|"small"|"medium"|"large">, "rationale": "<one sentence>", "approachSummary": "<3-5 lines>", "openQuestions": [], "antiAcceptanceCriteria": ["<not-this>", ...], "acceptanceCriteria": ["<integration criterion — specifies call site in existing code>", "<behavior criterion — testable outcome>", "<documentation criterion — if applicable>", ...]}`;
|
|
82
|
+
return (`Classify this software issue${issue.hasPreSuppliedACs ? "" : ", generate acceptance criteria,"} and produce a design doc. Respond with ONLY a JSON object, no other text.\n\n` +
|
|
37
83
|
`Issue: ${issue.identifier}\n` +
|
|
38
84
|
`Title: ${sanitize(issue.title)}\n` +
|
|
39
85
|
`Description: ${sanitizedDesc}\n\n` +
|
|
40
|
-
|
|
41
|
-
`1. INTEGRATION: Every new function, module, or utility MUST have a criterion that specifies where it is called from in existing code (e.g. "runner.ts calls checkFoo() after the test stage completes"). Code that is exported but never imported outside its own test file is incomplete.\n` +
|
|
42
|
-
`2. DOCUMENTATION: If the change adds new configuration, public API, CLI flags, or changes behavior, include a criterion requiring updates to relevant documentation (CLAUDE.md, README.md, deploy/README.md, or inline JSDoc).\n` +
|
|
43
|
-
`3. TESTING: Include a criterion for tests that exercise the integration path, not just the utility in isolation.\n` +
|
|
44
|
-
`4. Each criterion must be concrete and verifiable by reading the code — avoid vague criteria like "works correctly" or "is implemented".\n\n` +
|
|
86
|
+
acBlock +
|
|
45
87
|
`Tier 4 — DESIGN DOC fields:\n` +
|
|
46
88
|
`- approachSummary: 3-5 lines describing what the implementation will do at a level the operator can sanity-check before spending implement-stage tokens. Concrete enough that someone reading it could predict the diff shape.\n` +
|
|
47
89
|
`- openQuestions: list of unknowns that the operator must answer before implement is safe — ambiguous requirements, missing API contracts, undecided trade-offs. EMPTY when the issue is clearly specified. NON-EMPTY forces routing to "needs-design" so a human answers before any implement-stage tokens are spent.\n` +
|
|
48
90
|
`- antiAcceptanceCriteria: list of "things this should NOT do" — explicit out-of-scope items so the agent doesn't drift (e.g. "must NOT change other pipelines' configs", "must NOT add new dependencies"). Helps the agent stay narrow.\n\n` +
|
|
49
91
|
`Respond with exactly this JSON format (no markdown, no explanation, just the JSON). The canonical form for openQuestions is the EMPTY array \`[]\` — only populate it when the issue is genuinely ambiguous and you cannot proceed without operator input. Do not invent questions for clear specs.\n` +
|
|
50
|
-
|
|
92
|
+
jsonSchema);
|
|
51
93
|
}
|
|
52
94
|
// ---------------------------------------------------------------------------
|
|
53
95
|
// Tier 6a — Triage v2 prompt (Anthropic prompt-engineering best practices).
|
|
@@ -149,11 +191,12 @@ The schema (every field is required unless marked optional):
|
|
|
149
191
|
"needs-design". Empty array (\`[]\`) is canonical
|
|
150
192
|
when the issue is clearly specified.
|
|
151
193
|
antiAcceptanceCriteria: array of strings — things the implementation must
|
|
152
|
-
NOT do (out-of-scope items).
|
|
194
|
+
NOT do (out-of-scope items).${issue.hasPreSuppliedACs ? `
|
|
195
|
+
(acceptanceCriteria is PRE-SUPPLIED from the issue description — omit this field)` : `
|
|
153
196
|
acceptanceCriteria: array of strings — concrete, testable behaviors.
|
|
154
197
|
Each must specify either (a) a call-site in
|
|
155
198
|
existing code, (b) a measurable outcome, or
|
|
156
|
-
(c) a documentation update
|
|
199
|
+
(c) a documentation update.`}
|
|
157
200
|
|
|
158
201
|
(Tier 6b — all optional, drop when not applicable to the issue:)
|
|
159
202
|
assumptions: array of strings (max 10) — what the agent will
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage-prompt.js","sourceRoot":"","sources":["../../../src/pm/actions/triage-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"triage-prompt.js","sourceRoot":"","sources":["../../../src/pm/actions/triage-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAkDhD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oGAAoG;IACpG,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,uFAAuF;IACvF,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAoBD,wBAAsB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAyPjF"}
|
|
@@ -5,7 +5,7 @@ import { resolveIssueRelations } from "../../util/linear.js";
|
|
|
5
5
|
import { createLogger } from "../../logger.js";
|
|
6
6
|
import { logAuditEventUnchecked, pmTriageClassifiedEvent } from "../../audit/index.js";
|
|
7
7
|
import { upsertTriageResult } from "../triage-results-store.js";
|
|
8
|
-
import { buildTriageV1Prompt, buildTriageV2Prompt, isV2Disabled, } from "./triage-prompt.js";
|
|
8
|
+
import { buildTriageV1Prompt, buildTriageV2Prompt, isV2Disabled, parseHandWrittenACs, } from "./triage-prompt.js";
|
|
9
9
|
import { renderTriageComment, appendTriageSectionsToDescription, } from "./triage-render.js";
|
|
10
10
|
const log = createLogger({ component: "PmAgent:triage" });
|
|
11
11
|
const MAX_ISSUES_PER_TICK = 10;
|
|
@@ -27,9 +27,13 @@ const OBSERVER_BODY_MARKER = "<!-- urateam-qo-observer:";
|
|
|
27
27
|
* diagnostic. See CLAUDE.md "Quality Observer" for the rationale.
|
|
28
28
|
*/
|
|
29
29
|
const OBSERVER_PIPELINE_LABEL = "needs-design";
|
|
30
|
+
const BUG_LABEL = "bug";
|
|
30
31
|
function isObserverOriginIssue(description) {
|
|
31
32
|
return typeof description === "string" && description.includes(OBSERVER_BODY_MARKER);
|
|
32
33
|
}
|
|
34
|
+
function warnMissingPipelineLabel(issueId, label, context) {
|
|
35
|
+
log.warn({ issueId, label }, `${context}: '${label}' label not found in Linear — issue will move to Backlog without pipeline label and won't be routed by promote`);
|
|
36
|
+
}
|
|
33
37
|
/**
|
|
34
38
|
* Process an array of items in batches of `size`, awaiting each batch before
|
|
35
39
|
* starting the next. Returns a flat array of results (preserving order).
|
|
@@ -72,8 +76,7 @@ export async function triageNewIssues(input) {
|
|
|
72
76
|
.map((l) => labelMap.get(l.toLowerCase()))
|
|
73
77
|
.filter(Boolean);
|
|
74
78
|
if (labelIds.length === 0) {
|
|
75
|
-
|
|
76
|
-
"' label not found in Linear — issue will move to Backlog without pipeline label and won't be routed by promote");
|
|
79
|
+
warnMissingPipelineLabel(issue.identifier, OBSERVER_PIPELINE_LABEL, "observer-origin gate");
|
|
77
80
|
}
|
|
78
81
|
const rationale = "Observer-origin finding (body marker detected) — routed to needs-design so the await-approval stage gates a human before any implement-stage work runs.";
|
|
79
82
|
const updatePayload = { priority: 3 };
|
|
@@ -81,13 +84,13 @@ export async function triageNewIssues(input) {
|
|
|
81
84
|
updatePayload.labelIds = labelIds;
|
|
82
85
|
if (backlogStateId)
|
|
83
86
|
updatePayload.stateId = backlogStateId;
|
|
84
|
-
await
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
await Promise.all([
|
|
88
|
+
linearClient.updateIssue(issue.id, updatePayload),
|
|
89
|
+
linearClient.createComment({
|
|
90
|
+
issueId: issue.id,
|
|
91
|
+
body: `🤖 **PM Agent — Triaged (Quality Observer finding)**\n\n**Pipeline:** ${OBSERVER_PIPELINE_LABEL}\n**Rationale:** ${rationale}`,
|
|
92
|
+
}),
|
|
93
|
+
]);
|
|
91
94
|
const result = {
|
|
92
95
|
issueId: issue.identifier,
|
|
93
96
|
priority: 3,
|
|
@@ -106,6 +109,13 @@ export async function triageNewIssues(input) {
|
|
|
106
109
|
log.info({ issueId: issue.identifier, pipelineLabel: OBSERVER_PIPELINE_LABEL }, "triaged observer-origin issue (skipped Claude classification)");
|
|
107
110
|
return result;
|
|
108
111
|
}
|
|
112
|
+
// Pre-parse hand-written ACs from the issue description. When the
|
|
113
|
+
// operator has already written a `**Acceptance Criteria:**` section,
|
|
114
|
+
// we use those items verbatim so the triage result stays in sync with
|
|
115
|
+
// the description text that the implement-stage prompt also sees.
|
|
116
|
+
// When no pre-written ACs are found, fall back to Haiku generation.
|
|
117
|
+
const preSuppliedACs = parseHandWrittenACs(issue.description);
|
|
118
|
+
const hasPreSuppliedACs = preSuppliedACs.length > 0;
|
|
109
119
|
// Tier 6a — pick v2 prompt by default; fall back to v1 when the
|
|
110
120
|
// operator has set URATEAM_DISABLE_TRIAGE_V2=true. Reads env at
|
|
111
121
|
// call time so flipping the var takes effect on the next PM tick
|
|
@@ -115,6 +125,7 @@ export async function triageNewIssues(input) {
|
|
|
115
125
|
identifier: issue.identifier,
|
|
116
126
|
title: issue.title,
|
|
117
127
|
description: issue.description ?? "",
|
|
128
|
+
hasPreSuppliedACs,
|
|
118
129
|
};
|
|
119
130
|
const prompt = useV2
|
|
120
131
|
? buildTriageV2Prompt(promptInput, sanitize)
|
|
@@ -158,9 +169,9 @@ export async function triageNewIssues(input) {
|
|
|
158
169
|
// bug-severity gate). Treat the model's `pipelineLabel` as
|
|
159
170
|
// telemetry only.
|
|
160
171
|
const forceNeedsDesign = openQuestions.length > 0;
|
|
161
|
-
const hasBug = labels.some((l) => l.toLowerCase() ===
|
|
172
|
+
const hasBug = labels.some((l) => l.toLowerCase() === BUG_LABEL);
|
|
162
173
|
const pipelineLabel = forceNeedsDesign
|
|
163
|
-
? OBSERVER_PIPELINE_LABEL //
|
|
174
|
+
? OBSERVER_PIPELINE_LABEL // same routing as observer-origin gate
|
|
164
175
|
: hasBug
|
|
165
176
|
? "bug"
|
|
166
177
|
: complexity === "trivial"
|
|
@@ -175,8 +186,7 @@ export async function triageNewIssues(input) {
|
|
|
175
186
|
// routing label is dropped silently. Surface this so operators can
|
|
176
187
|
// diagnose why a ticket isn't being picked up by promote.
|
|
177
188
|
if (!labelMap.get(OBSERVER_PIPELINE_LABEL.toLowerCase())) {
|
|
178
|
-
|
|
179
|
-
"' label not found in Linear — issue will move to Backlog without pipeline label and won't be routed by promote");
|
|
189
|
+
warnMissingPipelineLabel(issue.identifier, OBSERVER_PIPELINE_LABEL, "Tier 4 routing");
|
|
180
190
|
}
|
|
181
191
|
}
|
|
182
192
|
const labelIds = issueLabels
|
|
@@ -187,9 +197,13 @@ export async function triageNewIssues(input) {
|
|
|
187
197
|
const { team } = await resolveIssueRelations(issue);
|
|
188
198
|
const teamId = team?.id;
|
|
189
199
|
const backlogStateId = teamId ? stateMap.get(`${teamId}:Backlog`) : undefined;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
200
|
+
// Use pre-supplied ACs when the operator wrote them in the description;
|
|
201
|
+
// fall back to Haiku's generated list for fresh (no-AC) tickets.
|
|
202
|
+
const acceptanceCriteria = hasPreSuppliedACs
|
|
203
|
+
? preSuppliedACs
|
|
204
|
+
: Array.isArray(parsed.acceptanceCriteria)
|
|
205
|
+
? parsed.acceptanceCriteria.filter((c) => typeof c === "string" && c.length > 0)
|
|
206
|
+
: [];
|
|
193
207
|
// Tier 6b — extract optional v2 fields when v2 is active. When v1
|
|
194
208
|
// is forced (env var), skip the extraction so the result shape
|
|
195
209
|
// stays bit-compatible with v1.
|
|
@@ -221,14 +235,13 @@ export async function triageNewIssues(input) {
|
|
|
221
235
|
if (updatedDesc !== existingDesc) {
|
|
222
236
|
updatePayload.description = updatedDesc;
|
|
223
237
|
}
|
|
224
|
-
await
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
forceNeedsDesign,
|
|
229
|
-
pipelineLabel,
|
|
238
|
+
await Promise.all([
|
|
239
|
+
linearClient.updateIssue(issue.id, updatePayload),
|
|
240
|
+
linearClient.createComment({
|
|
241
|
+
issueId: issue.id,
|
|
242
|
+
body: renderTriageComment(result, { forceNeedsDesign, pipelineLabel }),
|
|
230
243
|
}),
|
|
231
|
-
|
|
244
|
+
]);
|
|
232
245
|
if (input.db) {
|
|
233
246
|
void logAuditEventUnchecked(input.db, pmTriageClassifiedEvent({
|
|
234
247
|
issueId: issue.identifier,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,
|
|
1
|
+
{"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,iCAAiC,GAClC,MAAM,oBAAoB,CAAC;AAE5B,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE1D,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B;;;;;;;;GAQG;AACH,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAC/C,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,SAAS,qBAAqB,CAAC,WAAsC;IACnE,OAAO,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe,EAAE,KAAa,EAAE,OAAe;IAC/E,GAAG,CAAC,IAAI,CACN,EAAE,OAAO,EAAE,KAAK,EAAE,EAClB,GAAG,OAAO,MAAM,KAAK,gHAAgH,CACtI,CAAC;AACJ,CAAC;AAeD;;;GAGG;AACH,KAAK,UAAU,YAAY,CACzB,KAAU,EACV,IAAY,EACZ,EAA2B;IAE3B,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAkB;IACtD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,GAAG,kBAAkB,EAAE,GAAG,KAAK,CAAC;IAC9F,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAEtF,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC;QAC/C,MAAM,EAAE;YACN,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;YAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;SAClC;QACD,KAAK,EAAE,mBAAmB;KAC3B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QAC1C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,YAAY,CACjC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,EACpC,SAAS,EACT,KAAK,EAAE,KAAY,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,IAAI,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC;gBACxB,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAE9E,MAAM,WAAW,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,WAAW;qBACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;qBACzC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,wBAAwB,CAAC,KAAK,CAAC,UAAU,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,CAAC;gBAC9F,CAAC;gBAED,MAAM,SAAS,GACb,yJAAyJ,CAAC;gBAE5J,MAAM,aAAa,GAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBAC3C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAAE,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC3D,IAAI,cAAc;oBAAE,aAAa,CAAC,OAAO,GAAG,cAAc,CAAC;gBAE3D,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChB,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC;oBACjD,YAAY,CAAC,aAAa,CAAC;wBACzB,OAAO,EAAE,KAAK,CAAC,EAAE;wBACjB,IAAI,EAAE,yEAAyE,uBAAuB,oBAAoB,SAAS,EAAE;qBACtI,CAAC;iBACH,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAiB;oBAC3B,OAAO,EAAE,KAAK,CAAC,UAAU;oBACzB,QAAQ,EAAE,CAAC;oBACX,MAAM,EAAE,WAAW;oBACnB,UAAU,EAAE,QAAQ;oBACpB,SAAS;oBACT,kBAAkB,EAAE,EAAE;iBACvB,CAAC;gBACF,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;oBACb,KAAK,sBAAsB,CAAC,KAAK,CAAC,EAAE,EAAE,uBAAuB,CAAC;wBAC5D,OAAO,EAAE,KAAK,CAAC,UAAU;wBACzB,KAAK,EAAE,uBAAuB;wBAC9B,SAAS;qBACV,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,GAAG,CAAC,IAAI,CACN,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,EACrE,+DAA+D,CAChE,CAAC;gBACF,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,kEAAkE;YAClE,qEAAqE;YACrE,sEAAsE;YACtE,kEAAkE;YAClE,oEAAoE;YACpE,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9D,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAEpD,gEAAgE;YAChE,gEAAgE;YAChE,iEAAiE;YACjE,4BAA4B;YAC5B,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG;gBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;gBACpC,iBAAiB;aAClB,CAAC;YACF,MAAM,MAAM,GAAG,KAAK;gBAClB,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC;gBAC5C,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,sCAAsC,CAAC,CAAC;gBACzH,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;YAC3D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,sCAAsC,CAAC,CAAC;gBACxF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,4DAA4D;YAC5D,kEAAkE;YAClE,gEAAgE;YAChE,mEAAmE;YACnE,kEAAkE;YAClE,iCAAiC;YACjC,MAAM,aAAa,GAAa,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;gBACjE,CAAC,CAAC,MAAM,CAAC,aAAa;qBACjB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;qBAChE,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,sBAAsB,GAAa,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC;gBACnF,CAAC,CAAC,MAAM,CAAC,sBAAsB;qBAC1B,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;qBAChE,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,eAAe,GACnB,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ;gBACxC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE;gBAC/B,CAAC,CAAC,EAAE,CAAC;YAET,6DAA6D;YAC7D,+DAA+D;YAC/D,+DAA+D;YAC/D,gEAAgE;YAChE,gEAAgE;YAChE,gEAAgE;YAChE,2DAA2D;YAC3D,kBAAkB;YAClB,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC;YACzE,MAAM,aAAa,GAAG,gBAAgB;gBACpC,CAAC,CAAC,uBAAuB,CAAC,uCAAuC;gBACjE,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,UAAU,KAAK,SAAS;wBAC1B,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,gBAAgB,CAAC;YACrB,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;YAE7D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CACN,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,kBAAkB,EAAE,aAAa,CAAC,MAAM,EAAE,EACvE,oGAAoG,CACrG,CAAC;gBACF,sEAAsE;gBACtE,qEAAqE;gBACrE,iEAAiE;gBACjE,mEAAmE;gBACnE,0DAA0D;gBAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACzD,wBAAwB,CAAC,KAAK,CAAC,UAAU,EAAE,uBAAuB,EAAE,gBAAgB,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW;iBACzB,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;iBACjD,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnB,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC;YACxB,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9E,wEAAwE;YACxE,iEAAiE;YACjE,MAAM,kBAAkB,GAAa,iBAAiB;gBACpD,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC;oBAC1C,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBACrF,CAAC,CAAC,EAAE,CAAC;YAEP,kEAAkE;YAClE,+DAA+D;YAC/D,gCAAgC;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE9D,+DAA+D;YAC/D,6DAA6D;YAC7D,MAAM,MAAM,GAAiB;gBAC3B,OAAO,EAAE,KAAK,CAAC,UAAU;gBACzB,QAAQ;gBACR,MAAM,EAAE,WAAW;gBACnB,UAAU;gBACV,SAAS;gBACT,kBAAkB;gBAClB,GAAG,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,CAAC;gBAC3C,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;gBAClD,GAAG,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,sBAAsB,EAAE,CAAC;gBACpE,GAAG,QAAQ;aACZ,CAAC;YAEF,MAAM,aAAa,GAAQ,EAAE,QAAQ,EAAE,CAAC;YACxC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC3D,IAAI,cAAc;gBAAE,aAAa,CAAC,OAAO,GAAG,cAAc,CAAC;YAE3D,gEAAgE;YAChE,gEAAgE;YAChE,4DAA4D;YAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,iCAAiC,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC5E,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC;YAC1C,CAAC;YAED,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC;gBACjD,YAAY,CAAC,aAAa,CAAC;oBACzB,OAAO,EAAE,KAAK,CAAC,EAAE;oBACjB,IAAI,EAAE,mBAAmB,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC;iBACvE,CAAC;aACH,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;gBACb,KAAK,sBAAsB,CAAC,KAAK,CAAC,EAAE,EAAE,uBAAuB,CAAC;oBAC5D,OAAO,EAAE,KAAK,CAAC,UAAU;oBACzB,KAAK,EAAE,aAAa;oBACpB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;iBAC7B,CAAC,CAAC,CAAC;gBACJ,iEAAiE;gBACjE,mEAAmE;gBACnE,kEAAkE;gBAClE,+DAA+D;gBAC/D,iEAAiE;gBACjE,gCAAgC;gBAChC,KAAK,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAChE,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC;YACnH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CACF,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAEhD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/pm/scheduler.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { type StuckIssueResult } from "./actions/recover-stuck.js";
|
|
|
10
10
|
import { type StartTodoInput, type StartTodoResult } from "./actions/start-todo.js";
|
|
11
11
|
import { getActiveFileMaps, predictConflict } from "./conflict.js";
|
|
12
12
|
import type { Db, AnyDb } from "../db/client.js";
|
|
13
|
+
import { type AuthMonitor } from "../executor/auth-monitor.js";
|
|
13
14
|
/**
|
|
14
15
|
* BEC-184 / BEC-227: parse the PM_AGENT_STUCK_RUN_AGE_MIN env var (default 120 min).
|
|
15
16
|
* Controls how long a 'running' run must be active before it's treated as a
|
|
@@ -40,6 +41,8 @@ export interface PmSchedulerDeps {
|
|
|
40
41
|
pipelineConfigs?: Record<string, any>;
|
|
41
42
|
repoConfigs?: Record<string, any>;
|
|
42
43
|
actions?: Partial<PmSchedulerActions>;
|
|
44
|
+
/** Injectable auth monitor — defaults to the real createAuthMonitor. Used by tests to avoid slow real API calls. */
|
|
45
|
+
authMonitor?: AuthMonitor;
|
|
43
46
|
}
|
|
44
47
|
interface PmSchedulerActions {
|
|
45
48
|
evaluateBudget: (input: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/pm/scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9E,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAoB,KAAK,qBAAqB,EAAE,KAAK,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC3H,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/pm/scheduler.ts"],"names":[],"mappings":"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"}
|
package/dist/pm/scheduler.js
CHANGED
|
@@ -11,6 +11,9 @@ import { resolveApprovals } from "./actions/resolve-approvals.js";
|
|
|
11
11
|
import { recoverRetriableRuns } from "./actions/recover.js";
|
|
12
12
|
import { recoverStuckInProgressIssues } from "./actions/recover-stuck.js";
|
|
13
13
|
import { startTodoIssues } from "./actions/start-todo.js";
|
|
14
|
+
import { getCircuitBreakerProbeConfig } from "./actions/circuit-breaker-config.js";
|
|
15
|
+
import { selectProbeCandidates } from "./actions/select-probe-candidates.js";
|
|
16
|
+
import { sweepRecoveredCircuitBreakers } from "./actions/sweep-recovered-circuit-breakers.js";
|
|
14
17
|
import { getActiveFileMaps, predictConflict } from "./conflict.js";
|
|
15
18
|
import { fetchCircuitBrokenIssues, ACTIVE_STATUSES } from "./actions/db-queries.js";
|
|
16
19
|
import { PmSlackNotifier } from "./slack.js";
|
|
@@ -57,7 +60,7 @@ export function createPmScheduler(deps) {
|
|
|
57
60
|
// BEC-207: AuthMonitor — periodic Claude session health-check (every 6h).
|
|
58
61
|
// Alerts to the PM agent's Slack channel when SLACK_ERROR_ALERTS=true.
|
|
59
62
|
// No-ops when CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY is set.
|
|
60
|
-
const authMonitor = createAuthMonitor({
|
|
63
|
+
const authMonitor = deps.authMonitor ?? createAuthMonitor({
|
|
61
64
|
slackBotToken: deps.slackBotToken || undefined,
|
|
62
65
|
slackErrorChannel: process.env.SLACK_ERROR_ALERTS === "true"
|
|
63
66
|
? deps.config.slackChannelId
|
|
@@ -264,6 +267,40 @@ export function createPmScheduler(deps) {
|
|
|
264
267
|
}
|
|
265
268
|
// Compute available slots once for both startTodo and promote
|
|
266
269
|
const slotsAvailable = config.maxInFlight - (tick.budgetGuard.activeCount ?? 0);
|
|
270
|
+
// BEC-236 — half-open circuit-breaker probe. Picks at most `cap` issues
|
|
271
|
+
// per tick that the breaker would normally skip; promote + startTodo
|
|
272
|
+
// receive this Set as probeOverrideIds and bypass the skip for them.
|
|
273
|
+
const probeConfig = getCircuitBreakerProbeConfig();
|
|
274
|
+
const breakerThreshold = config.maxConsecutiveFailures > 0
|
|
275
|
+
? config.maxConsecutiveFailures
|
|
276
|
+
: 3;
|
|
277
|
+
let probeOverrideIds = new Set();
|
|
278
|
+
if (db && !probeConfig.disabled) {
|
|
279
|
+
try {
|
|
280
|
+
probeOverrideIds = await selectProbeCandidates(db, {
|
|
281
|
+
cap: probeConfig.maxProbesPerTick,
|
|
282
|
+
cooldownMs: probeConfig.cooldownMs,
|
|
283
|
+
maxConsecutiveFailures: breakerThreshold,
|
|
284
|
+
now: Date.now(),
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
catch (err) {
|
|
288
|
+
captureTickError(tick, "probe", err, "selectProbeCandidates failed");
|
|
289
|
+
}
|
|
290
|
+
// BEC-236 — sweep recovered issues. The runner can't drive recovery
|
|
291
|
+
// itself (no `linearClient` in its scope), so each tick scans for
|
|
292
|
+
// state rows whose consecutive-failure count has dropped (= a
|
|
293
|
+
// `completed` run landed). Recovery deletes the state row and
|
|
294
|
+
// strips the Tier-5-added `needs-design` label.
|
|
295
|
+
try {
|
|
296
|
+
await sweepRecoveredCircuitBreakers(db, await getLinearClient(), {
|
|
297
|
+
maxConsecutiveFailures: breakerThreshold,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
captureTickError(tick, "sweepRecovered", err, "sweepRecoveredCircuitBreakers failed");
|
|
302
|
+
}
|
|
303
|
+
}
|
|
267
304
|
// --- Start pipelines for orphaned Todo issues ---
|
|
268
305
|
if (deps.runner?.start && deps.pipelineConfigs && deps.repoConfigs) {
|
|
269
306
|
try {
|
|
@@ -285,6 +322,7 @@ export function createPmScheduler(deps) {
|
|
|
285
322
|
// BEC-181: omit getFailureCount so startTodoIssues uses the batch
|
|
286
323
|
// batchCountConsecutiveFailures path (single DB round-trip for all
|
|
287
324
|
// candidates) instead of per-issue N+1 queries.
|
|
325
|
+
probeOverrideIds,
|
|
288
326
|
});
|
|
289
327
|
const started = todoResults.filter((r) => r.started);
|
|
290
328
|
if (started.length > 0) {
|
|
@@ -391,6 +429,7 @@ export function createPmScheduler(deps) {
|
|
|
391
429
|
// BEC-181: omit getFailureCount so promoteReadyIssues uses the batch
|
|
392
430
|
// batchCountConsecutiveFailures path (single DB round-trip for all
|
|
393
431
|
// candidates) instead of per-issue N+1 queries.
|
|
432
|
+
probeOverrideIds,
|
|
394
433
|
});
|
|
395
434
|
}
|
|
396
435
|
}
|