import type { WorldSnapshot } from './snapshotTypes'; import type { AnalysisResult, Finding } from './analyze'; export interface BaselineEntry { rule: string; /** World-space anchor: the subject's AABB center (run summaries: the members' centroid). */ anchor: [number, number, number]; /** Children count for run-summary findings — a run that grows/shrinks materially is news. */ children?: number | undefined; /** The detail at acceptance time — context for the human, never used for matching. */ note?: string | undefined; } export interface WorldBaseline { baselineVersion: 1; /** ISO date of the last write — provenance, not matched. */ written: string; entries: BaselineEntry[]; } export interface BaselineResult { /** Findings not covered by the baseline — the news. */ fresh: Finding[]; /** Findings matched by an accepted entry — hidden from the default report. */ accepted: Finding[]; /** Accepted entries that matched nothing this run — the world moved on; prune on next write. */ resolved: BaselineEntry[]; } export declare const BASELINE_FILENAME = "inspect.baseline.json"; /** The subject's world-space anchor: AABB center, else children centroid (run summaries), else position. */ export declare function anchorOf(finding: Finding, snapshot: WorldSnapshot): [number, number, number] | null; /** Split findings into fresh vs accepted; each entry consumes at most one finding (nearest wins). */ export declare function applyBaseline(analysis: AnalysisResult, snapshot: WorldSnapshot, baseline: WorldBaseline): BaselineResult; /** Accept the current findings wholesale — the one-time adjudication becoming durable. */ export declare function buildBaseline(analysis: AnalysisResult, snapshot: WorldSnapshot, writtenIso: string): WorldBaseline; export declare function parseBaseline(raw: string): WorldBaseline;