Top-level dashboard contract (#163). Schema-versioned; consumers (CI dashboards, spreadsheets, blog posts) read this JSON and render.

interface DriftReport {
    catalogueVersion: string;
    findings: readonly DriftFinding[];
    generatedAt: string;
    schema: 2;
    stats: {
        byCategory: Readonly<Partial<Record<DriftCategory, number>>>;
        byRuleId: Readonly<Partial<Record<RuleId, number>>>;
        bySeverity: Readonly<Record<Severity, number>>;
        filesScanned: number;
        findings: number;
    };
}

Properties

catalogueVersion: string

Rule-catalogue schema version (CATALOGUE_VERSION). Distinct from schema because new rules can be added without breaking the wire format.

findings: readonly DriftFinding[]
generatedAt: string
schema: 2

Wire-format version. Bumped on any breaking change to this interface or DriftFinding.

stats: {
    byCategory: Readonly<Partial<Record<DriftCategory, number>>>;
    byRuleId: Readonly<Partial<Record<RuleId, number>>>;
    bySeverity: Readonly<Record<Severity, number>>;
    filesScanned: number;
    findings: number;
}