import type { Migration, MigrationContext, MigrationResult } from "./migration.interface.js";
/**
 * Migration: relocate project-specific exclusions from `audit.ignore.config.json`
 * (Lisa-owned, copy-overwrite) into `audit.ignore.local.json` (project-owned,
 * create-only) so they survive future Lisa postinstall runs.
 *
 * Without this migration, projects that add transient-dependency exclusions to
 * the Lisa-owned config see them silently stripped every install, producing
 * noisy diffs and tempting users to commit the regression.
 *
 * Mirrors the shape of `EnsureTsconfigLocalIncludesMigration`:
 *   - `beforeStrategies` snapshots the project's pre-strategy exclusions that
 *     are not in the Lisa template (i.e., project-specific additions).
 *   - `apply` (post-strategy) writes any snapshotted exclusions missing from
 *     `audit.ignore.local.json` into that file.
 */
export declare class EnsureAuditIgnoreLocalExclusionsMigration implements Migration {
    readonly name = "ensure-audit-ignore-local-exclusions";
    readonly description = "Relocate project-specific audit exclusions from audit.ignore.config.json into audit.ignore.local.json";
    private snapshot;
    /**
     * Snapshot project-specific exclusions that would otherwise be stripped by
     * the copy-overwrite strategy. An exclusion is "project-specific" when its
     * `id` is present in the project's audit.ignore.config.json but absent from
     * the Lisa template for the same project type.
     *
     * When no valid Lisa template can be found for the detected project type the
     * method returns without snapshotting anything. This is intentionally
     * conservative: without a template we cannot distinguish Lisa-owned from
     * project-specific exclusions, so migrating could copy Lisa-owned entries
     * into audit.ignore.local.json.
     * @param ctx - Migration context
     */
    beforeStrategies(ctx: MigrationContext): Promise<void>;
    /**
     * The migration applies when at least one snapshotted project-specific
     * exclusion is missing from `audit.ignore.local.json`.
     * @param ctx - Migration context
     * @returns True when there is work to do
     */
    applies(ctx: MigrationContext): Promise<boolean>;
    /**
     * Merge snapshotted project-specific exclusions into audit.ignore.local.json,
     * skipping any whose id is already present. Deduplicates within the snapshot
     * itself so that duplicate source entries are only written once.
     * @param ctx - Migration context
     * @returns Result describing the action taken
     */
    apply(ctx: MigrationContext): Promise<MigrationResult>;
}
//# sourceMappingURL=ensure-audit-ignore-local-exclusions.d.ts.map