import type { Migration, MigrationContext, MigrationResult } from "./migration.interface.js";
/**
 * Migration: backfill missing include/exclude in existing tsconfig.local.json files.
 *
 * Before PR #373, include/exclude lived in tsconfig.json. After they moved to
 * tsconfig.local.json (create-only), existing projects kept their include-less local
 * tsconfig and typecheck began compiling tests, worktrees, etc. This migration injects
 * the canonical defaults for any key that is missing without touching existing values.
 *
 * Additionally, this migration preserves a project's narrower include/exclude from
 * the pre-strategy tsconfig.json when the stack template's include/exclude would
 * widen tsc scope. Evidence: acmeorgd-backend's tsconfig.json pinned `include: ["src/**\/*"]`
 * but after Lisa overwrote tsconfig.json the stack template's include was used,
 * pulling `vitest.*.ts` into typecheck scope.
 */
export declare class EnsureTsconfigLocalIncludesMigration implements Migration {
    readonly name = "ensure-tsconfig-local-includes";
    readonly description = "Backfill include/exclude in tsconfig.local.json for projects upgraded past PR #373";
    private snapshotInclude;
    private snapshotExclude;
    /**
     * Snapshot the project's pre-strategy tsconfig.json include/exclude so we can
     * preserve narrower scopes when the copy-overwrite strategy replaces tsconfig.json.
     * @param ctx - Migration context
     */
    beforeStrategies(ctx: MigrationContext): Promise<void>;
    /**
     * Check whether this migration should run on the project
     * @param ctx - Migration context
     * @returns True when tsconfig.local.json exists but is missing include or exclude
     */
    applies(ctx: MigrationContext): Promise<boolean>;
    /**
     * Apply the migration, injecting any missing include/exclude keys
     * @param ctx - Migration context
     * @returns Result describing the action taken
     */
    apply(ctx: MigrationContext): Promise<MigrationResult>;
    /**
     * Prefer the project's pre-strategy tsconfig.json include when it is narrower
     * than the stack template's include. "Narrower" means the snapshot is a strict
     * subset of the template or differs in content at all — we preserve project intent.
     * Falls back to the stack template include when no snapshot exists.
     * @param templateInclude - Stack template include to fall back to
     * @returns The preserved or template include
     */
    private chooseInclude;
    /**
     * Prefer the project's pre-strategy tsconfig.json exclude when one existed.
     * Falls back to the stack template exclude when no snapshot exists.
     * @param templateExclude - Stack template exclude to fall back to
     * @returns The preserved or template exclude
     */
    private chooseExclude;
}
//# sourceMappingURL=ensure-tsconfig-local-includes.d.ts.map