/** * False Negative (Miss) Feedback * * Captures vulnerabilities the platform MISSED — the entry point of the * human-in-the-loop self-improvement loop. The existing fp-feedback system * only handles findings we already produced (TP/FP); this records the gap * when a real vulnerability reached "certified" status undetected (e.g. the * VasperaTrade cross-tenant leak). * * A logged miss flows on to a regression fixture and a *proposed* detection * rule (parked, human-approved before it can affect certification). * * @module scanners/fn-feedback */ import type { Severity } from "../certification/types.js"; import type { VulnerabilityCategory } from "../eval/types.js"; /** Thrown at the fn-feedback module boundary (e.g. unknown miss id). */ export declare class FeedbackError extends Error { constructor(message: string); } /** Lifecycle of a logged miss as it moves through the loop. */ export type MissStatus = "logged" | "fixtured" | "rule-proposed" | "closed"; export interface MissEntry { /** Unique miss ID. */ id: string; /** File where the missed vulnerability lives. */ file: string; /** 1-based line of the load-bearing code. */ line: number; /** Vulnerability class (reuses the eval category union). */ vulnClass: VulnerabilityCategory; /** CWE id, if known. */ cweId?: string; /** Severity the miss should have been reported at. */ severity: Severity; /** Minimal repro snippet (the lines that make it vulnerable). */ snippet: string; /** Language of the snippet (for the generated fixture file). */ language: string; /** Human-readable description of the missed issue. */ description: string; /** Who/what confirmed the miss. */ discoveredBy?: string; /** ISO timestamp. */ reportedAt: string; /** Current lifecycle state. */ status: MissStatus; /** Set once a regression fixture is minted. */ fixtureId?: string; /** Set once a candidate rule is proposed. */ candidateRuleId?: string; } export interface MissDatabase { version: string; projectPath: string; entries: MissEntry[]; } export declare function loadMissDatabase(projectPath: string): Promise; export declare function saveMissDatabase(projectPath: string, db: MissDatabase): Promise; export interface ReportMissInput { file: string; line: number; vulnClass: VulnerabilityCategory; severity: Severity; snippet: string; description: string; language?: string; cweId?: string; discoveredBy?: string; } /** * Record a confirmed false negative. Pure logging — changes no detection * behavior. The human reporting it is asserting the platform missed it. */ export declare function reportMiss(projectPath: string, input: ReportMissInput): Promise; export declare function getMiss(projectPath: string, id: string): Promise; export declare function updateMissStatus(projectPath: string, id: string, patch: Partial>): Promise; //# sourceMappingURL=fn-feedback.d.ts.map