import type { Issue, IssueGroup } from '../../types/analysis.types'; /** * Stable fingerprint for a single finding so the same issue produces the * same id across runs. Used by --diff and the `baseline` command. * * Composition (in priority order): * 1. stackName - disambiguates resources with the same path across stacks * 2. cdkPath - the construct path is the most stable resource id * (logicalIds change when the construct tree changes; * paths only change when the user renames a construct) * 3. ruleId - exact rule identity when available (preferred) * 4. issueDigest - sha256 prefix of normalised issue text as a last * resort for findings without a ruleId. Normalised * means whitespace-collapsed and lowercased so trivial * copy edits don't churn fingerprints. * * The output is a colon-separated string so it's grep-friendly and stable * under JSON serialisation. */ export declare const computeFindingFingerprint: (stackName: string, group: Pick, issue: Pick) => string; /** * Fingerprints this finding would have produced under ids the rule was * previously published under (registry legacyRuleIds). Lets `--diff` keep * honouring baselines written before a rule was renamed or an umbrella rule * was split into granular ones - without this, every rename would resurface * long-accepted findings as "new". New baselines always store the current * fingerprint; legacy ones age out as baselines are rewritten. */ export declare const computeLegacyFindingFingerprints: (stackName: string, group: Pick, issue: Pick) => string[]; /** * Walks every issue in a recommendationMap and yields a fingerprint per issue * along with the issue + group it came from. Used by both the baseline writer * and the diff filter. */ export declare const iterateFindings: (stackName: string, recommendationMap: Record) => Generator<{ fingerprint: string; group: IssueGroup; issue: Issue; }>;