import type { EventEntry } from "./types.js"; export type QaAutomationStyle = "browser" | "cli" | "shell" | "api" | "integration" | "generated_artifact" | "workflow" | "mobile" | "desktop" | "data" | "mixed" | "not_applicable"; export type QaCriterionCoverageStatus = "covered" | "weak" | "missing" | "deferred" | "blocked"; export interface QaEvidenceReference { eventId: string; type: string; owner: string; summary: string; surface?: string; assertions?: string; externalValidation?: string; deferredOwner?: string; deferredRationale?: string; observableOutcome: boolean; deferredExternalValidation: boolean; gaps: string[]; status: "usable" | "weak" | "wrong_surface" | "generic" | "deferred"; } export interface QaCriterionCoverage { id: string; index: number; criterion: string; style: QaAutomationStyle; status: QaCriterionCoverageStatus; evidence: string[]; actualEvidence: QaEvidenceReference[]; plannedCommands: string[]; requiredSetup: string; requiredAssertions: string[]; expectedObservableResult: string; recommendation: string; } export interface QaAutomationCoverageReport { taskId: string; style: QaAutomationStyle; changedSurfaces: QaAutomationStyle[]; commands: string[]; pageObjects: string[]; criteria: QaCriterionCoverage[]; gaps: string[]; missingCriteria: string[]; weakCriteria: string[]; deferredCriteria: string[]; blockedCriteria: string[]; summary: Record; } export type QaEvidenceMatcher = (events: EventEntry[], criterion: string, expectedStyle: QaAutomationStyle) => QaEvidenceReference[];