/**
 * Proof Types — Visual evidence artifacts for verification
 *
 * Inspired by the proof-of-work pattern: structured evidence manifests
 * with embedded screenshots, terminal output, and multi-model verdicts.
 */
import type { ScoredQASignoff } from './qa-scoring';
/** A single piece of captured evidence */
export interface ProofEntry {
    /** Unique ID for this evidence entry */
    id: string;
    /** What was being verified */
    featureId: string;
    /** Human-readable label */
    label: string;
    /** Type of evidence captured */
    type: 'screenshot' | 'terminal' | 'log' | 'assertion';
    /** When this evidence was captured */
    timestamp: string;
    /** Verification step this corresponds to */
    step?: number;
    /** Result of this verification step */
    result: 'pass' | 'fail' | 'skip' | 'error';
    /** Description of what was checked */
    description: string;
    /** For screenshots: base64-encoded image data */
    imageData?: string;
    /** For terminal: captured stdout/stderr output */
    terminalOutput?: string;
    /** For assertions: the assertion expression and result */
    assertion?: {
        expression: string;
        expected: string;
        actual: string;
    };
    /** Duration in milliseconds */
    duration?: number;
}
/** Evidence captured for a single feature */
export interface ProofFeature {
    /** Feature ID from testable_features.json */
    featureId: string;
    /** Feature name */
    name: string;
    /** Overall result for this feature */
    result: 'pass' | 'fail' | 'partial' | 'skip';
    /** Individual evidence entries */
    entries: ProofEntry[];
    /** Which MCP server was used (if any) */
    mcpServer?: 'puppeteer' | 'electron' | null;
    /** Route/URL that was verified */
    route?: string;
}
/** Verdict from a single verification model */
export interface ModelVerdict {
    /** Which model produced this verdict */
    model: string;
    /** Provider — extensible for future AI CLIs */
    provider: string;
    /** What this model verified */
    role: 'code-analysis' | 'video-review' | 'second-opinion';
    /** Overall verdict */
    verdict: 'pass' | 'fail' | 'partial';
    /** Confidence level */
    confidence: number;
    /** Summary of findings */
    summary: string;
    /** Specific findings */
    findings: string[];
    /** Duration in milliseconds */
    duration?: number;
}
/** The complete proof manifest */
export interface ProofManifest {
    /** Manifest version */
    version: 1;
    /** Project/task name */
    appName: string;
    /** When verification started */
    startedAt: string;
    /** When verification completed */
    completedAt: string;
    /** Unique run identifier */
    runId: string;
    /** QA signoff from standard verification */
    qaSignoff: ScoredQASignoff;
    /** Evidence grouped by feature */
    features: ProofFeature[];
    /** Automated check results */
    checks: {
        tests: {
            status: 'pass' | 'fail';
            output: string;
            count: number;
            failures: string[];
        };
        typecheck: {
            status: 'pass' | 'fail';
            output: string;
            errors: string[];
        };
        lint: {
            status: 'pass' | 'fail';
            output: string;
            warnings: number;
        };
    };
    /** Multi-model verdicts (when available) */
    verdicts: ModelVerdict[];
    /** Overall quorum result */
    quorum?: {
        modelsUsed: string[];
        unanimous: boolean;
        finalVerdict: 'pass' | 'fail' | 'partial';
    };
}
/** Options for generating the HTML proof report */
export interface ProofReportOptions {
    /** Output directory for all proof artifacts */
    proofDir: string;
    /** Report formats to generate */
    formats: Array<'md' | 'html' | 'archive'>;
    /** Whether to open in browser after generation */
    openInBrowser: boolean;
    /** Title for the report */
    title?: string;
}
/** Output structure mirrors the date-based directory layout */
export interface ProofOutputPaths {
    /** Root proof directory: .proof/{appName}/{YYYYMMDD}/{runId}/ */
    dir: string;
    /** proof.json manifest */
    manifest: string;
    /** report.html */
    html: string;
    /** report.md */
    markdown: string;
    /** archive.html (self-contained with embedded manifest) */
    archive: string;
    /** screenshots/ directory */
    screenshots: string;
}
//# sourceMappingURL=proof.d.ts.map