import { type FitOptions, type ImpactTrust } from '@opensip-cli/contracts'; export interface ChangedSetOk { readonly ok: true; readonly files: ReadonlySet; readonly basis: string; readonly trust: ImpactTrust; readonly warning?: string; } export interface ChangedSetFail { readonly ok: false; readonly warning: string; } export type ChangedSetResult = ChangedSetOk | ChangedSetFail; /** * Resolve the changed file set (absolute paths) for a `--changed` fit run. */ export declare function resolveChangedSet(args: Pick): ChangedSetResult; /** * Intersect each per-file check's scope-resolved target file list with the changed * set. `fullScopeKeys` (the `analyzeAll` checks) are exempt — they keep their FULL * file list. * * Two invariants: * 1. A per-file (`analyze`) check with NO changed files keeps an EMPTY entry — it * is NOT dropped. Dropping it would leave `checkTargetFiles.get(checkId)` undefined, * and the check's `matchFiles()` then falls back to the whole-repo fileCache * (which honors only `globalExcludes`, not the target-level `*.test.ts` / * `__tests__` excludes) — so a `--changed` run would silently scan the ENTIRE * repo, including test files. The empty entry pins the check to "scan nothing". * 2. An `analyzeAll` (cross-file / whole-repo invariant) check keeps its FULL file * list — narrowing it to the changed subset would make an unchanged target read * as absent (a false "missing" violation), so its result must not depend on what * changed. Full scope is target-resolved (globalExcludes + `*.test.ts` excludes * already applied), so it stays clean and matches the full run. */ export declare function restrictFileMapToChanged(scopeMap: Map, changedAbs: ReadonlySet, fullScopeKeys: ReadonlySet): Map; //# sourceMappingURL=changed-targeting.d.ts.map