/** * Whether a failed CI check tested the code at all (ci-infra-failure-reads-as-code-failure). * * A check in bucket `fail` or `cancel` used to count as a failed build. On 2026-10-10 two * of them never ran a test — one queued 5h24m with no runner, one lost its runner during * `pnpm build` — and autopilot spent both items' CI tries and parked one. The rule here * is the one fact those jobs share and a real failure never does: no step concluded * `failure` (design D1). * * Pure: the driver does the reading, this only decides. * * @module */ export interface FailedCheck { name: string; link?: string; } export interface JobRef { run: string; job: number; } export interface RunJobs { /** `run_attempt`: 1 until the run is re-run, by autopilot or by a person (design D2). */ attempt: number; /** Job id → whether one of its steps concluded `failure`. */ jobs: Map; } export type Verdict = /** At least one failing check tested the code, or could not be read: handle as before. */ { kind: 'tested'; } /** No failing check tested the code. `fresh` lists the runs still on their first attempt. */ | { kind: 'untested'; checks: string[]; fresh: string[]; }; /** The run and job a check's link names; null for a link that is not an Actions job (AC-9). */ export declare function jobRef(link: string | undefined): JobRef | null; /** * The body of `gh api repos/{owner}/{repo}/actions/runs//jobs`, or null when it is * not that shape — read as tested by `classify`, so a misread can only keep today's * handling (AC-9, design D3). */ export declare function parseRunJobs(stdout: string): RunJobs | null; /** * `runs` holds what was read for every run a failing check names; null where the read * failed. One check that tested the code, or that cannot be placed, makes the whole set * `tested` (AC-8, AC-9). */ export declare function classify(failing: FailedCheck[], runs: Map): Verdict; //# sourceMappingURL=ci-jobs.d.ts.map