import type { Finding } from '../findings/Finding.js'; import { type LinddunCategory, type StrideCategory } from './types.js'; export type ThreatRowStatus = 'findings' | 'no-findings' | 'not-assessed-in-run' | 'not-covered'; export interface ThreatRow { category: C; name: string; /** Active findings in this category: not passed, inconclusive, not assessed or waived. */ findings: Finding[]; /** Checks in this run whose map entry names the category. */ coveringChecks: number; /** Of those, the checks that gathered evidence. */ assessedChecks: number; status: ThreatRowStatus; } export interface ThreatView { stride: ThreatRow[]; /** Present only when a privacy-tagged check ran. */ linddun?: ThreatRow[]; /** Findings that are a repudiation gap and also log personal data once fixed (RULE-103). */ dualReadings: Finding[]; } export declare const PRIVACY_COST_OF_LOGGING = "The logging this fix adds records personal data: decide what it captures, how long it is kept and who can read it."; /** The threat view (RULE-104): coverage per category, never a pass. */ export declare function buildThreatView(findings: readonly Finding[]): ThreatView; /** How a row reads in every output. Never "pass", "compliant" or "no threats". */ export declare function threatRowStatusText(row: ThreatRow): string; //# sourceMappingURL=view.d.ts.map