import type { QualificationManifest } from "./manifest.js"; export type QualificationSubassertionStatus = "not-run" | "passed" | "failed"; export type QualificationCaseStatus = "not-run" | "incomplete" | "passed" | "failed"; export interface QualificationSubassertion { id: string; status: QualificationSubassertionStatus; evidenceHash: string | null; } export interface QualificationCase { id: QualificationManifest["requiredCases"][number]; status: QualificationCaseStatus; subassertions: QualificationSubassertion[]; } /** * The aggregate follows the recorded assertions only. A failure dominates, because a group * that provably failed must not read as merely incomplete; a pass requires every assertion. */ export declare function qualificationGroupStatus(subassertions: Array<{ status: QualificationSubassertionStatus; }>): QualificationCaseStatus; /** * Record one result. A failure is sticky: once an assertion failed, a later pass cannot * overwrite it and its original evidence stays attached, so a run cannot green a group by * covering it again. Unknown ids are errors rather than silently dropped results. */ export declare function recordQualificationSubassertion(cases: QualificationCase[], groupId: string, assertionId: string, status: "passed" | "failed", evidenceHash: string): void; export declare function requiredQualificationCases(ids: QualificationManifest["requiredCases"]): QualificationCase[]; //# sourceMappingURL=qualification_cases.d.ts.map