@on-par/factory-core 0.9.7-next.2 → 0.9.7-next.20
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/checkers/index.d.ts +10 -1
- package/dist/checkers/index.d.ts.map +1 -1
- package/dist/checkers/index.js +14 -22
- package/dist/checkers/index.js.map +1 -1
- package/dist/checkers/probe.d.ts.map +1 -1
- package/dist/checkers/probe.js +5 -3
- package/dist/checkers/probe.js.map +1 -1
- package/dist/config/repo.js +1 -1
- package/dist/config/repo.js.map +1 -1
- package/dist/eval/baseline.d.ts.map +1 -1
- package/dist/eval/baseline.js +4 -4
- package/dist/eval/baseline.js.map +1 -1
- package/dist/eval/judge.d.ts.map +1 -1
- package/dist/eval/judge.js +9 -7
- package/dist/eval/judge.js.map +1 -1
- package/dist/eval/regression-report.js +1 -1
- package/dist/eval/regression-report.js.map +1 -1
- package/dist/harness/catalog.js +1 -1
- package/dist/harness/catalog.js.map +1 -1
- package/dist/harness/contract.js +4 -4
- package/dist/harness/contract.js.map +1 -1
- package/dist/hosted/store-contract.js +1 -1
- package/dist/hosted/store-contract.js.map +1 -1
- package/dist/internal.d.ts +2 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -1
- package/dist/kpis/human.d.ts.map +1 -1
- package/dist/kpis/human.js +4 -8
- package/dist/kpis/human.js.map +1 -1
- package/dist/logger/index.d.ts +2 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +1 -0
- package/dist/logger/index.js.map +1 -1
- package/dist/phases/build.d.ts +3 -0
- package/dist/phases/build.d.ts.map +1 -1
- package/dist/phases/build.js +39 -12
- package/dist/phases/build.js.map +1 -1
- package/dist/phases/check.d.ts +29 -0
- package/dist/phases/check.d.ts.map +1 -1
- package/dist/phases/check.js +2 -2
- package/dist/phases/check.js.map +1 -1
- package/dist/phases/plan-design-retry.d.ts +4 -0
- package/dist/phases/plan-design-retry.d.ts.map +1 -1
- package/dist/phases/plan-design-retry.js +8 -0
- package/dist/phases/plan-design-retry.js.map +1 -1
- package/dist/phases/plan.d.ts.map +1 -1
- package/dist/phases/plan.js +2 -2
- package/dist/phases/plan.js.map +1 -1
- package/dist/phases/ship-git.d.ts +52 -0
- package/dist/phases/ship-git.d.ts.map +1 -0
- package/dist/phases/ship-git.js +104 -0
- package/dist/phases/ship-git.js.map +1 -0
- package/dist/phases/ship-spec.d.ts +5 -0
- package/dist/phases/ship-spec.d.ts.map +1 -0
- package/dist/phases/ship-spec.js +26 -0
- package/dist/phases/ship-spec.js.map +1 -0
- package/dist/phases/ship.d.ts +11 -7
- package/dist/phases/ship.d.ts.map +1 -1
- package/dist/phases/ship.js +73 -144
- package/dist/phases/ship.js.map +1 -1
- package/dist/readiness/slice-plan.js +1 -1
- package/dist/readiness/slice-plan.js.map +1 -1
- package/dist/review/backtest.js +2 -2
- package/dist/review/backtest.js.map +1 -1
- package/dist/review/containment.js +1 -1
- package/dist/review/containment.js.map +1 -1
- package/dist/run/ci-rework-loop.d.ts +65 -0
- package/dist/run/ci-rework-loop.d.ts.map +1 -0
- package/dist/run/ci-rework-loop.js +169 -0
- package/dist/run/ci-rework-loop.js.map +1 -0
- package/dist/run/ci-rework.d.ts +25 -0
- package/dist/run/ci-rework.d.ts.map +1 -0
- package/dist/run/ci-rework.js +113 -0
- package/dist/run/ci-rework.js.map +1 -0
- package/dist/run/ci-suppression-guard.d.ts +11 -0
- package/dist/run/ci-suppression-guard.d.ts.map +1 -0
- package/dist/run/ci-suppression-guard.js +143 -0
- package/dist/run/ci-suppression-guard.js.map +1 -0
- package/dist/run/park-comment.d.ts +55 -0
- package/dist/run/park-comment.d.ts.map +1 -0
- package/dist/run/park-comment.js +157 -0
- package/dist/run/park-comment.js.map +1 -0
- package/dist/run/phase-snapshot.js +2 -2
- package/dist/run/phase-snapshot.js.map +1 -1
- package/dist/run/run-issue.d.ts +4 -2
- package/dist/run/run-issue.d.ts.map +1 -1
- package/dist/run/run-issue.js +31 -37
- package/dist/run/run-issue.js.map +1 -1
- package/dist/run/ship-park.d.ts +14 -0
- package/dist/run/ship-park.d.ts.map +1 -0
- package/dist/run/ship-park.js +21 -0
- package/dist/run/ship-park.js.map +1 -0
- package/dist/sandbox/index.js +1 -1
- package/dist/sandbox/index.js.map +1 -1
- package/dist/steward/detect.d.ts +5 -2
- package/dist/steward/detect.d.ts.map +1 -1
- package/dist/steward/detect.js +6 -3
- package/dist/steward/detect.js.map +1 -1
- package/dist/types/index.d.ts +55 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/ci-evidence.d.ts +21 -0
- package/dist/utils/ci-evidence.d.ts.map +1 -0
- package/dist/utils/ci-evidence.js +66 -0
- package/dist/utils/ci-evidence.js.map +1 -0
- package/dist/utils/ci-watch.d.ts +12 -0
- package/dist/utils/ci-watch.d.ts.map +1 -1
- package/dist/utils/ci-watch.js +1 -1
- package/dist/utils/ci-watch.js.map +1 -1
- package/dist/utils/command-runner.js +2 -2
- package/dist/utils/command-runner.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/worktree-gc.d.ts.map +1 -1
- package/dist/utils/worktree-gc.js +5 -5
- package/dist/utils/worktree-gc.js.map +1 -1
- package/dist/utils/worktree-location.d.ts +2 -2
- package/dist/utils/worktree-location.d.ts.map +1 -1
- package/dist/utils/worktree-location.js +16 -9
- package/dist/utils/worktree-location.js.map +1 -1
- package/dist/utils/worktree-name.d.ts +6 -0
- package/dist/utils/worktree-name.d.ts.map +1 -1
- package/dist/utils/worktree-name.js +16 -1
- package/dist/utils/worktree-name.js.map +1 -1
- package/package.json +5 -5
package/dist/review/backtest.js
CHANGED
|
@@ -5,7 +5,7 @@ import { isDefectWindowClosed } from '../kpis/defects.js';
|
|
|
5
5
|
import { classifyPrShadow } from './classifier.js';
|
|
6
6
|
import { computeReviewFloor } from './floor.js';
|
|
7
7
|
import { parseNumstat } from './routing.js';
|
|
8
|
-
const HAND_LABELS = ['defect', 'clean', 'gated'];
|
|
8
|
+
const HAND_LABELS = new Set(['defect', 'clean', 'gated']);
|
|
9
9
|
export function parseBacktestLabels(csv) {
|
|
10
10
|
const labels = new Map();
|
|
11
11
|
let first = true;
|
|
@@ -26,7 +26,7 @@ export function parseBacktestLabels(csv) {
|
|
|
26
26
|
if (!/^\d+$/.test(pr) || Number(pr) < 1)
|
|
27
27
|
throw new Error(`labels line ${n}: invalid PR number '${cells[0]}'`);
|
|
28
28
|
const cls = cells[1].toLowerCase();
|
|
29
|
-
if (!HAND_LABELS.
|
|
29
|
+
if (!HAND_LABELS.has(cls)) {
|
|
30
30
|
throw new Error(`labels line ${n}: invalid class '${cells[1]}' (expected defect|clean|gated)`);
|
|
31
31
|
}
|
|
32
32
|
labels.set(Number(pr), cls);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backtest.js","sourceRoot":"","sources":["../../src/review/backtest.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAE/G,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACL,uBAAuB,EACvB,aAAa,GAGd,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,OAAO,EAAE,gBAAgB,EAAwB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAwE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAyC5C,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"backtest.js","sourceRoot":"","sources":["../../src/review/backtest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containment.js","sourceRoot":"","sources":["../../src/review/containment.ts"],"names":[],"mappings":"AAAA,4MAA4M;AAI5M,sFAAsF;AACtF,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC;AAuBtD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GACrC,0HAA0H,CAAC;AAiB7H,MAAM,sBAAsB,GAAG,mDAAmD,CAAC;AACnF,MAAM,aAAa,GAAG,+CAA+C,CAAC;AAEtE,MAAM,UAAU,iBAAiB,CAAC,EAA0B;IAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EAA0B,EAAE,WAA+B;IAChG,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAuB;IACnD,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,
|
|
1
|
+
{"version":3,"file":"containment.js","sourceRoot":"","sources":["../../src/review/containment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type checkPhase as checkPhaseDefault, reworkWorker as reworkWorkerDefault } from '../phases/check.js';
|
|
2
|
+
import type { PlanResult } from '../phases/plan.js';
|
|
3
|
+
import type { shipPhase as shipPhaseDefault, ShipResult } from '../phases/ship.js';
|
|
4
|
+
import type { ReviewRouting } from '../review/routing.js';
|
|
5
|
+
import type { CiFailureEvidence, Constitution } from '../types/index.js';
|
|
6
|
+
import { listBaseFailingChecks as listBaseFailingChecksDefault, listPrChangedFiles as listPrChangedFilesDefault } from './ci-rework.js';
|
|
7
|
+
import { readReworkDiff as readReworkDiffDefault, readWorktreeHead as readWorktreeHeadDefault } from './ci-suppression-guard.js';
|
|
8
|
+
import type { BuildRoute, ParkReason } from './outcome.js';
|
|
9
|
+
import type { RunPorts, RunRequest } from './run-issue.js';
|
|
10
|
+
/** Injectable seams for the CI rework loop; RunPorts extends this. */
|
|
11
|
+
export interface CiReworkPorts {
|
|
12
|
+
/** BUILD rework worker used for CI rework rounds; defaults to check.ts's reworkWorker. */
|
|
13
|
+
reworkWorker?: typeof reworkWorkerDefault;
|
|
14
|
+
/** Lists a PR's changed files for CI alert attribution; defaults to the GitHub REST lister. */
|
|
15
|
+
listPrChangedFiles?: typeof listPrChangedFilesDefault;
|
|
16
|
+
/** Lists failing check names on the PR base branch's latest commit (#2817); defaults to the GitHub REST lister. */
|
|
17
|
+
listBaseFailingChecks?: typeof listBaseFailingChecksDefault;
|
|
18
|
+
/** Reads the worktree HEAD before a CI rework round (#2818); defaults to git rev-parse. */
|
|
19
|
+
readWorktreeHead?: typeof readWorktreeHeadDefault;
|
|
20
|
+
/** Reads the diff a CI rework round produced (#2818); defaults to git diff <before> HEAD. */
|
|
21
|
+
readReworkDiff?: typeof readReworkDiffDefault;
|
|
22
|
+
}
|
|
23
|
+
export interface CiReworkLoopContext {
|
|
24
|
+
request: RunRequest;
|
|
25
|
+
ports: RunPorts;
|
|
26
|
+
shipPhase: typeof shipPhaseDefault;
|
|
27
|
+
checkPhase: typeof checkPhaseDefault;
|
|
28
|
+
/** The options the first CHECK ran with; reused verbatim for each re-CHECK. */
|
|
29
|
+
checkOpts: Parameters<typeof checkPhaseDefault>[0];
|
|
30
|
+
check: Awaited<ReturnType<typeof checkPhaseDefault>>;
|
|
31
|
+
constitution: Constitution | null;
|
|
32
|
+
appPort: number | undefined;
|
|
33
|
+
appBaseUrl: string | undefined;
|
|
34
|
+
onPgid: (pgid: number) => void;
|
|
35
|
+
runId: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CiReworkShipInputs {
|
|
38
|
+
builtRoute: BuildRoute;
|
|
39
|
+
builtModel: string;
|
|
40
|
+
reviewRouting: ReviewRouting | undefined;
|
|
41
|
+
pinNote: string | undefined;
|
|
42
|
+
planSlice: PlanResult['slice'];
|
|
43
|
+
}
|
|
44
|
+
export interface ShipWithCiReworkResult {
|
|
45
|
+
ship: ShipResult;
|
|
46
|
+
/** Set when the run must park: a failed re-CHECK or a SHIP that did not succeed. */
|
|
47
|
+
parked?: {
|
|
48
|
+
reason: ParkReason;
|
|
49
|
+
message: string;
|
|
50
|
+
checkFailure?: {
|
|
51
|
+
failureSignature: string;
|
|
52
|
+
failingChecks: string[];
|
|
53
|
+
};
|
|
54
|
+
ciFailure?: CiFailureEvidence;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Runs SHIP. When the CI watch fails on CodeQL alerts in files the PR changed, feeds them to the
|
|
59
|
+
* BUILD rework worker, re-runs CHECK and re-enters SHIP on the same PR, up to
|
|
60
|
+
* resolveMaxCiReworkRounds() rounds — a counter separate from CHECK's own rework rounds.
|
|
61
|
+
* After each rework round the committed diff is scanned for suppression attempts (#2818); any hit,
|
|
62
|
+
* or an unreadable diff, parks ci-failed before the re-CHECK, push or re-watch.
|
|
63
|
+
*/
|
|
64
|
+
export declare function shipWithCiRework(ctx: CiReworkLoopContext, inputs: CiReworkShipInputs): Promise<ShipWithCiReworkResult>;
|
|
65
|
+
//# sourceMappingURL=ci-rework-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-rework-loop.d.ts","sourceRoot":"","sources":["../../src/run/ci-rework-loop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,IAAI,iBAAiB,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,IAAI,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAwB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAML,qBAAqB,IAAI,4BAA4B,EACrD,kBAAkB,IAAI,yBAAyB,EAGhD,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,cAAc,IAAI,qBAAqB,EACvC,gBAAgB,IAAI,uBAAuB,EAE5C,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG3D,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,0FAA0F;IAC1F,YAAY,CAAC,EAAE,OAAO,mBAAmB,CAAC;IAC1C,+FAA+F;IAC/F,kBAAkB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACtD,mHAAmH;IACnH,qBAAqB,CAAC,EAAE,OAAO,4BAA4B,CAAC;IAC5D,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,OAAO,uBAAuB,CAAC;IAClD,6FAA6F;IAC7F,cAAc,CAAC,EAAE,OAAO,qBAAqB,CAAC;CAC/C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,OAAO,gBAAgB,CAAC;IACnC,UAAU,EAAE,OAAO,iBAAiB,CAAC;IACrC,+EAA+E;IAC/E,SAAS,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;IACrD,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,oFAAoF;IACpF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,UAAU,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QACrE,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,CAAC;CACH;AAWD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,mBAAmB,EACxB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAkJjC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// packages/core/src/run/ci-rework-loop.ts — SHIP with a bounded CI rework loop (#2816)
|
|
2
|
+
import { reworkWorker as reworkWorkerDefault } from '../phases/check.js';
|
|
3
|
+
import { attributableCodeqlAlerts, attributeCiFailure, CI_REWORK_INSTRUCTIONS, ciReworkSummary, listBaseFailingChecks as listBaseFailingChecksDefault, listPrChangedFiles as listPrChangedFilesDefault, needsBaseChecks, resolveMaxCiReworkRounds, } from './ci-rework.js';
|
|
4
|
+
import { describeSuppression, readReworkDiff as readReworkDiffDefault, readWorktreeHead as readWorktreeHeadDefault, scanReworkDiff, } from './ci-suppression-guard.js';
|
|
5
|
+
import { shipParkReason } from './ship-park.js';
|
|
6
|
+
const errorMessage = (err) => (err instanceof Error ? err.message : String(err));
|
|
7
|
+
const guardError = (match) => ({
|
|
8
|
+
kind: 'path',
|
|
9
|
+
rule: 'guard-error',
|
|
10
|
+
file: '(unknown)',
|
|
11
|
+
match,
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Runs SHIP. When the CI watch fails on CodeQL alerts in files the PR changed, feeds them to the
|
|
15
|
+
* BUILD rework worker, re-runs CHECK and re-enters SHIP on the same PR, up to
|
|
16
|
+
* resolveMaxCiReworkRounds() rounds — a counter separate from CHECK's own rework rounds.
|
|
17
|
+
* After each rework round the committed diff is scanned for suppression attempts (#2818); any hit,
|
|
18
|
+
* or an unreadable diff, parks ci-failed before the re-CHECK, push or re-watch.
|
|
19
|
+
*/
|
|
20
|
+
export async function shipWithCiRework(ctx, inputs) {
|
|
21
|
+
const { request, ports, shipPhase, checkPhase, check } = ctx;
|
|
22
|
+
const rework = ports.reworkWorker ?? reworkWorkerDefault;
|
|
23
|
+
const listChanged = ports.listPrChangedFiles ?? listPrChangedFilesDefault;
|
|
24
|
+
const listBase = ports.listBaseFailingChecks ?? listBaseFailingChecksDefault;
|
|
25
|
+
const readHead = ports.readWorktreeHead ?? readWorktreeHeadDefault;
|
|
26
|
+
const readDiff = ports.readReworkDiff ?? readReworkDiffDefault;
|
|
27
|
+
const { builtRoute, builtModel, planSlice } = inputs;
|
|
28
|
+
const log = ports.events();
|
|
29
|
+
const shipOpts = {
|
|
30
|
+
issue: request.issue,
|
|
31
|
+
repo: request.repo,
|
|
32
|
+
worktree: ports.workspace.path,
|
|
33
|
+
branch: request.branch,
|
|
34
|
+
recordedRemoteSha: ports.workspace.remoteBranch?.sha,
|
|
35
|
+
octokit: ports.octokit,
|
|
36
|
+
watchCI: !request.skipCI,
|
|
37
|
+
log: ports.events('ship'),
|
|
38
|
+
approvalGate: request.options.interactive ? ports.createApprovalGate?.() : undefined,
|
|
39
|
+
specPath: request.specPath,
|
|
40
|
+
eventsFile: request.eventsFile,
|
|
41
|
+
startedAt: request.startedAt,
|
|
42
|
+
logsDir: request.logsDir,
|
|
43
|
+
work: request.work,
|
|
44
|
+
laneId: request.lane,
|
|
45
|
+
reviewRouting: inputs.reviewRouting,
|
|
46
|
+
...(inputs.pinNote ? { pinNotes: [inputs.pinNote] } : {}),
|
|
47
|
+
slice: planSlice ? { index: planSlice.index, count: planSlice.plan.slices.length } : undefined,
|
|
48
|
+
};
|
|
49
|
+
let ship = await shipPhase({ ...shipOpts, checkSummary: check.summary, reworkRounds: check.reworkRounds });
|
|
50
|
+
const [owner, repoName] = request.repo.split('/');
|
|
51
|
+
const maxRounds = resolveMaxCiReworkRounds();
|
|
52
|
+
let rounds = 0;
|
|
53
|
+
let lastCiFailure = ship.ciFailure;
|
|
54
|
+
let suffix = '';
|
|
55
|
+
while (!ship.ok && ship.ciOutcome === 'failure' && ship.prNumber !== undefined) {
|
|
56
|
+
lastCiFailure = ship.ciFailure ?? lastCiFailure;
|
|
57
|
+
let changed;
|
|
58
|
+
try {
|
|
59
|
+
changed = await listChanged(ports.octokit, owner, repoName, ship.prNumber);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
const msg = `could not list PR #${ship.prNumber} files for CI attribution: ${errorMessage(err)}`;
|
|
63
|
+
ports.events('ship')('ship', msg);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
let base;
|
|
67
|
+
if (needsBaseChecks(ship.ciFailure)) {
|
|
68
|
+
try {
|
|
69
|
+
base = await listBase(ports.octokit, owner, repoName, ship.prNumber);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
ports.events('ship')('ship', `could not read base checks for PR #${ship.prNumber}: ${errorMessage(err)}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const attribution = attributeCiFailure(ship.ciFailure, changed, base);
|
|
76
|
+
if (ship.ciFailure)
|
|
77
|
+
lastCiFailure = { ...ship.ciFailure, attribution };
|
|
78
|
+
if (attribution.baseline) {
|
|
79
|
+
const note = 'baseline: no CI failure is attributable to this PR';
|
|
80
|
+
suffix = ` — ${note}`;
|
|
81
|
+
ports.events('ship')('ship', `${note} (PR #${ship.prNumber})`);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
const attributable = attributableCodeqlAlerts(ship.ciFailure, changed);
|
|
85
|
+
if (attributable.length === 0)
|
|
86
|
+
break;
|
|
87
|
+
if (rounds >= maxRounds) {
|
|
88
|
+
suffix = ` — CI rework budget exhausted after ${rounds} round${rounds === 1 ? '' : 's'}`;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
rounds++;
|
|
92
|
+
const skipped = attribution.items.filter((i) => !i.attributable).map((i) => i.ref);
|
|
93
|
+
log('rework', `CI rework round ${rounds}/${maxRounds}: ${attributable.length} attributable CodeQL alert(s) on PR #${ship.prNumber}` +
|
|
94
|
+
(skipped.length > 0 ? `; non-attributable: ${skipped.join(', ')}` : ''), lastCiFailure ? { ciFailure: lastCiFailure } : undefined);
|
|
95
|
+
const suppressionPark = (findings) => {
|
|
96
|
+
const described = describeSuppression(findings);
|
|
97
|
+
ports.events('ship')('ship', `${described} after CI rework round ${rounds} (PR #${ship.prNumber})`);
|
|
98
|
+
const message = ship.reason
|
|
99
|
+
? `ship phase failed: ${ship.reason} — ${described}`
|
|
100
|
+
: `ship phase failed — ${described}`;
|
|
101
|
+
const base = lastCiFailure ?? { failingChecks: [], alerts: [], truncated: false };
|
|
102
|
+
return { ship, parked: { reason: 'ci-failed', message, ciFailure: { ...base, suppressionAttempt: findings } } };
|
|
103
|
+
};
|
|
104
|
+
let beforeSha;
|
|
105
|
+
try {
|
|
106
|
+
beforeSha = await readHead(ports.workspace.path);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
return suppressionPark([guardError(`could not read the worktree HEAD: ${errorMessage(err)}`)]);
|
|
110
|
+
}
|
|
111
|
+
const worked = await rework({
|
|
112
|
+
issue: request.issue,
|
|
113
|
+
worktree: ports.workspace.path,
|
|
114
|
+
specPath: request.specPath,
|
|
115
|
+
summary: ciReworkSummary(attributable),
|
|
116
|
+
constitution: ctx.constitution,
|
|
117
|
+
router: ports.router,
|
|
118
|
+
log: ports.events('build'),
|
|
119
|
+
buildTimeoutSeconds: request.timeouts.build,
|
|
120
|
+
sandbox: request.sandboxPolicy,
|
|
121
|
+
appPort: ctx.appPort,
|
|
122
|
+
appBaseUrl: ctx.appBaseUrl,
|
|
123
|
+
onPgid: ctx.onPgid,
|
|
124
|
+
reworkRoute: builtRoute,
|
|
125
|
+
reworkModel: builtModel,
|
|
126
|
+
runId: ctx.runId,
|
|
127
|
+
extraInstructions: CI_REWORK_INSTRUCTIONS,
|
|
128
|
+
});
|
|
129
|
+
if (!worked.modelCompleted) {
|
|
130
|
+
suffix = ' — CI rework worker never ran';
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
let findings;
|
|
134
|
+
try {
|
|
135
|
+
findings = scanReworkDiff(await readDiff(ports.workspace.path, beforeSha));
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
findings = [guardError(`could not read the CI rework diff: ${errorMessage(err)}`)];
|
|
139
|
+
}
|
|
140
|
+
if (findings.length > 0)
|
|
141
|
+
return suppressionPark(findings);
|
|
142
|
+
const recheck = await checkPhase(ctx.checkOpts);
|
|
143
|
+
if (!recheck.passed) {
|
|
144
|
+
const checkFailure = recheck.failureSignature !== undefined
|
|
145
|
+
? {
|
|
146
|
+
failureSignature: recheck.failureSignature,
|
|
147
|
+
failingChecks: recheck.summary.results.filter((r) => r.result === 'FAIL').map((r) => r.checker),
|
|
148
|
+
}
|
|
149
|
+
: undefined;
|
|
150
|
+
const message = `${recheck.summary.failures} check failures after CI rework round ${rounds}`;
|
|
151
|
+
return { ship, parked: { reason: 'fail', message, ...(checkFailure ? { checkFailure } : {}) } };
|
|
152
|
+
}
|
|
153
|
+
ship = await shipPhase({
|
|
154
|
+
...shipOpts,
|
|
155
|
+
checkSummary: recheck.summary,
|
|
156
|
+
reworkRounds: recheck.reworkRounds,
|
|
157
|
+
reentry: { prNumber: ship.prNumber, previousHeadSha: ship.headSha },
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
if (ship.ok)
|
|
161
|
+
return { ship };
|
|
162
|
+
const message = ship.denied
|
|
163
|
+
? `ship denied: ${ship.deniedReason}`
|
|
164
|
+
: ship.reason
|
|
165
|
+
? `ship phase failed: ${ship.reason}${suffix}`
|
|
166
|
+
: `ship phase failed${suffix}`;
|
|
167
|
+
return { ship, parked: { reason: shipParkReason(ship), message, ciFailure: lastCiFailure ?? ship.ciFailure } };
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=ci-rework-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-rework-loop.js","sourceRoot":"","sources":["../../src/run/ci-rework-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Octokit } from '@octokit/rest';
|
|
2
|
+
import type { CheckSummary, CiAttribution, CiCodeScanningAlert, CiFailureEvidence } from '../types/index.js';
|
|
3
|
+
export declare const MAX_CI_REWORK_ROUNDS = 2;
|
|
4
|
+
export declare const CI_REWORK_ENV = "FACTORY_MAX_CI_REWORK_ROUNDS";
|
|
5
|
+
export declare const CI_REWORK_INSTRUCTIONS: string;
|
|
6
|
+
/** Non-negative integer from FACTORY_MAX_CI_REWORK_ROUNDS (0 disables CI rework); anything else falls back to the default. */
|
|
7
|
+
export declare function resolveMaxCiReworkRounds(env?: NodeJS.ProcessEnv): number;
|
|
8
|
+
/** Alerts whose file is among the PR's changed files; the rest are pre-existing or baseline. */
|
|
9
|
+
export declare function attributableCodeqlAlerts(evidence: CiFailureEvidence | undefined, changedFiles: readonly string[]): CiCodeScanningAlert[];
|
|
10
|
+
/** Failing check names on the PR base branch's latest commit (#2817). */
|
|
11
|
+
export interface BaseFailingChecks {
|
|
12
|
+
baseRef: string;
|
|
13
|
+
baseSha: string;
|
|
14
|
+
failing: string[];
|
|
15
|
+
}
|
|
16
|
+
/** True when a failing check is attributed on its own (not through CodeQL alerts). */
|
|
17
|
+
export declare function needsBaseChecks(evidence: CiFailureEvidence | undefined): boolean;
|
|
18
|
+
/** Attributes each failing item to the PR: alerts by changed file, other checks by the base commit (#2817). */
|
|
19
|
+
export declare function attributeCiFailure(evidence: CiFailureEvidence | undefined, changedFiles: readonly string[], base: BaseFailingChecks | undefined): CiAttribution;
|
|
20
|
+
/** Failing check names on the latest commit of the PR's base branch. Errors propagate to the caller. */
|
|
21
|
+
export declare function listBaseFailingChecks(octokit: Octokit, owner: string, repo: string, prNumber: number): Promise<BaseFailingChecks>;
|
|
22
|
+
/** The same CheckSummary shape local CHECK rework consumes, with one FAIL `ci_codeql` result. */
|
|
23
|
+
export declare function ciReworkSummary(alerts: readonly CiCodeScanningAlert[]): CheckSummary;
|
|
24
|
+
export declare function listPrChangedFiles(octokit: Octokit, owner: string, repo: string, prNumber: number): Promise<string[]>;
|
|
25
|
+
//# sourceMappingURL=ci-rework.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-rework.d.ts","sourceRoot":"","sources":["../../src/run/ci-rework.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EAEb,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,aAAa,iCAAiC,CAAC;AAK5D,eAAO,MAAM,sBAAsB,QAGhB,CAAC;AAEpB,8HAA8H;AAC9H,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAGrF;AASD,gGAAgG;AAChG,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,mBAAmB,EAAE,CAOvB;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAEhF;AAED,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,IAAI,EAAE,iBAAiB,GAAG,SAAS,GAClC,aAAa,CA+Bf;AAED,wGAAwG;AACxG,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,CAAC,CAW5B;AAED,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,YAAY,CAUpF;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// packages/core/src/run/ci-rework.ts — attribution, budget and feedback for SHIP CI rework (#2816)
|
|
2
|
+
import { isPassingConclusion, listAllCheckRuns } from '../utils/ci-watch.js';
|
|
3
|
+
export const MAX_CI_REWORK_ROUNDS = 2;
|
|
4
|
+
export const CI_REWORK_ENV = 'FACTORY_MAX_CI_REWORK_ROUNDS';
|
|
5
|
+
const LIST_FILES_PAGE_SIZE = 100;
|
|
6
|
+
const LIST_FILES_MAX_PAGES = 30;
|
|
7
|
+
export const CI_REWORK_INSTRUCTIONS = 'CI (CodeQL) flagged the alerts above on files this PR changed. Fix the root cause in the code at the listed file:line. ' +
|
|
8
|
+
'Suppression is forbidden: do not add `// codeql[...]`, `lgtm`, `eslint-disable` or `@ts-ignore` comments, do not exclude queries or paths in any config, and do not dismiss alerts. ' +
|
|
9
|
+
'Commit the fix.';
|
|
10
|
+
/** Non-negative integer from FACTORY_MAX_CI_REWORK_ROUNDS (0 disables CI rework); anything else falls back to the default. */
|
|
11
|
+
export function resolveMaxCiReworkRounds(env = process.env) {
|
|
12
|
+
const value = (env[CI_REWORK_ENV] ?? '').trim();
|
|
13
|
+
return /^\d+$/.test(value) ? Number(value) : MAX_CI_REWORK_ROUNDS;
|
|
14
|
+
}
|
|
15
|
+
function alertPath(location) {
|
|
16
|
+
const trimmed = location.trim();
|
|
17
|
+
if (trimmed === '' || trimmed === '(unknown location)')
|
|
18
|
+
return undefined;
|
|
19
|
+
const path = trimmed.replace(/:\d+$/, '').replace(/^\.\//, '');
|
|
20
|
+
return path === '' ? undefined : path;
|
|
21
|
+
}
|
|
22
|
+
/** Alerts whose file is among the PR's changed files; the rest are pre-existing or baseline. */
|
|
23
|
+
export function attributableCodeqlAlerts(evidence, changedFiles) {
|
|
24
|
+
if (!evidence)
|
|
25
|
+
return [];
|
|
26
|
+
const changed = new Set(changedFiles);
|
|
27
|
+
return evidence.alerts.filter((alert) => {
|
|
28
|
+
const path = alertPath(alert.location);
|
|
29
|
+
return path !== undefined && changed.has(path);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** True when a failing check is attributed on its own (not through CodeQL alerts). */
|
|
33
|
+
export function needsBaseChecks(evidence) {
|
|
34
|
+
return !!evidence && evidence.failingChecks.some((c) => !(/codeql/i.test(c.name) && evidence.alerts.length > 0));
|
|
35
|
+
}
|
|
36
|
+
/** Attributes each failing item to the PR: alerts by changed file, other checks by the base commit (#2817). */
|
|
37
|
+
export function attributeCiFailure(evidence, changedFiles, base) {
|
|
38
|
+
if (!evidence)
|
|
39
|
+
return { baseline: false, items: [] };
|
|
40
|
+
const changed = new Set(changedFiles);
|
|
41
|
+
const items = [];
|
|
42
|
+
for (const alert of evidence.alerts) {
|
|
43
|
+
const path = alertPath(alert.location);
|
|
44
|
+
const attributable = path !== undefined && changed.has(path);
|
|
45
|
+
items.push({
|
|
46
|
+
kind: 'codeql-alert',
|
|
47
|
+
ref: `${alert.ruleId} at ${alert.location}`,
|
|
48
|
+
attributable,
|
|
49
|
+
reason: attributable ? 'file changed by this PR' : 'file not changed by this PR',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const baseLabel = base ? `${base.baseRef}@${base.baseSha.slice(0, 12)}` : '';
|
|
53
|
+
for (const check of evidence.failingChecks) {
|
|
54
|
+
if (/codeql/i.test(check.name) && evidence.alerts.length > 0)
|
|
55
|
+
continue;
|
|
56
|
+
if (!base) {
|
|
57
|
+
items.push({ kind: 'check', ref: check.name, attributable: true, reason: 'base checks unavailable' });
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const onBase = base.failing.includes(check.name);
|
|
61
|
+
items.push({
|
|
62
|
+
kind: 'check',
|
|
63
|
+
ref: check.name,
|
|
64
|
+
attributable: !onBase,
|
|
65
|
+
reason: onBase ? `also failing on base ${baseLabel}` : `not failing on base ${baseLabel}`,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const baseline = items.length > 0 && items.every((i) => !i.attributable) && !evidence.errors?.length;
|
|
69
|
+
return { baseline, ...(base ? { baseRef: base.baseRef, baseSha: base.baseSha } : {}), items };
|
|
70
|
+
}
|
|
71
|
+
/** Failing check names on the latest commit of the PR's base branch. Errors propagate to the caller. */
|
|
72
|
+
export async function listBaseFailingChecks(octokit, owner, repo, prNumber) {
|
|
73
|
+
const { data: pr } = await octokit.rest.pulls.get({ owner, repo, pull_number: prNumber });
|
|
74
|
+
const baseRef = pr.base.ref;
|
|
75
|
+
const { data: branch } = await octokit.rest.repos.getBranch({ owner, repo, branch: baseRef });
|
|
76
|
+
const baseSha = branch.commit.sha;
|
|
77
|
+
const runs = await listAllCheckRuns(octokit, owner, repo, baseSha, 100, 10);
|
|
78
|
+
const failing = new Set();
|
|
79
|
+
for (const run of runs) {
|
|
80
|
+
if (run.name && run.status === 'completed' && !isPassingConclusion(run.conclusion))
|
|
81
|
+
failing.add(run.name);
|
|
82
|
+
}
|
|
83
|
+
return { baseRef, baseSha, failing: [...failing] };
|
|
84
|
+
}
|
|
85
|
+
/** The same CheckSummary shape local CHECK rework consumes, with one FAIL `ci_codeql` result. */
|
|
86
|
+
export function ciReworkSummary(alerts) {
|
|
87
|
+
const lines = alerts.map((a) => `- ${a.ruleId} at ${a.location} — ${a.message}`);
|
|
88
|
+
const details = ['CodeQL alerts on files this PR changed:', ...lines].join('\n');
|
|
89
|
+
return {
|
|
90
|
+
failures: 1,
|
|
91
|
+
passes: 0,
|
|
92
|
+
skips: 0,
|
|
93
|
+
total: 1,
|
|
94
|
+
results: [{ checker: 'ci_codeql', result: 'FAIL', details }],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export async function listPrChangedFiles(octokit, owner, repo, prNumber) {
|
|
98
|
+
const files = [];
|
|
99
|
+
for (let page = 1; page <= LIST_FILES_MAX_PAGES; page++) {
|
|
100
|
+
const { data } = await octokit.rest.pulls.listFiles({
|
|
101
|
+
owner,
|
|
102
|
+
repo,
|
|
103
|
+
pull_number: prNumber,
|
|
104
|
+
per_page: LIST_FILES_PAGE_SIZE,
|
|
105
|
+
page,
|
|
106
|
+
});
|
|
107
|
+
files.push(...data.map((f) => f.filename));
|
|
108
|
+
if (data.length < LIST_FILES_PAGE_SIZE)
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
return files;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=ci-rework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-rework.js","sourceRoot":"","sources":["../../src/run/ci-rework.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CiSuppressionFinding } from '../types/index.js';
|
|
2
|
+
export declare const SUPPRESSION_ATTEMPT = "suppression-attempt";
|
|
3
|
+
/** Scans a unified git diff for suppression comments (added lines) and protected paths (any file header). */
|
|
4
|
+
export declare function scanReworkDiff(diff: string): CiSuppressionFinding[];
|
|
5
|
+
/** Reads the worktree's current HEAD SHA. */
|
|
6
|
+
export declare function readWorktreeHead(worktree: string): Promise<string>;
|
|
7
|
+
/** Reads the committed diff from `fromSha` to HEAD (SHIP re-entry pushes HEAD, not the working tree). */
|
|
8
|
+
export declare function readReworkDiff(worktree: string, fromSha: string): Promise<string>;
|
|
9
|
+
/** One-line summary of guard findings for park messages and logs. */
|
|
10
|
+
export declare function describeSuppression(findings: readonly CiSuppressionFinding[]): string;
|
|
11
|
+
//# sourceMappingURL=ci-suppression-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-suppression-guard.d.ts","sourceRoot":"","sources":["../../src/run/ci-suppression-guard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AA2CzD,6GAA6G;AAC7G,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAsEnE;AAED,6CAA6C;AAC7C,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKxE;AAED,yGAAyG;AACzG,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKvF;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,GAAG,MAAM,CAOrF"}
|