/**
 * Spec Transitive-Import Protection
 *
 * A protected spec is only as trustworthy as its oracle material: helpers
 * that build expectations, fixtures/data files holding expected output, and
 * mocks shaping the environment. If those live OUTSIDE test directories the
 * applier's test-file protection misses them, and a model can satisfy the
 * spec by rewriting what it asserts against.
 *
 * This module walks each spec's import graph and protects what specs import
 * as oracle material:
 *
 *  - relative imports resolving into fixture/helper/mock-conventional
 *    locations (directory segments or basename markers)
 *  - data files (.json/.yaml/.txt/.csv/.snap/…) — referenced via imports OR
 *    quoted string literals (readFileSync paths), since a data file imported
 *    by a spec is expected-output material, never the unit under test
 *  - the transitive imports of anything protected above (helper chains)
 *
 * Deliberately NOT protected: plain code the spec imports (../src/duration)
 * — that is the unit under test, the very thing the model must write.
 * Distinguishing "helper" from "implementation" beyond naming conventions is
 * undecidable here; the conventional set keeps brownfield delivery possible
 * while closing the fixture/helper channel. All analysis is fail-soft.
 */
export interface ProtectionSnapshot {
    /** Lower-cased relative paths for the applier membership check */
    protectedFiles: Set<string>;
    /** Original-case paths for prompts/diagnostics */
    display: string[];
}
/** True when `rel` ('/'-separated) is oracle material by location or name. */
export declare function isOraclePath(rel: string): boolean;
/** Resolve a './' or '../' import specifier. See resolveFromBase. */
export declare function resolveRelativeImport(fromFileAbs: string, specifier: string, projectRootAbs: string): string[];
export interface TsconfigAliases {
    /** Absolute baseUrl dir — null when the project never declared one */
    baseUrlAbs: string | null;
    /** paths patterns; baseAbs is where this entry's targets resolve from
     * (the effective baseUrl, else the declaring config's directory per
     * TS 4.1+ semantics) */
    paths: Array<{
        pattern: string;
        targets: string[];
        baseAbs: string;
    }>;
}
/**
 * JSONC → JSON with a string-aware scanner: comments and trailing commas are
 * stripped only OUTSIDE string literals, so wildcard targets like
 * `packages/{star}/src` survive — a naive regex would treat the star-slash
 * inside the string as a comment terminator and splice the config.
 */
export declare function jsoncToJson(text: string): string;
/**
 * Load baseUrl/paths from <projectRoot>/tsconfig.json, following relative
 * `extends` chains (child wins). Returns null when there is no usable
 * tsconfig — alias resolution is then skipped entirely.
 */
export declare function loadTsconfigAliases(projectRoot: string): TsconfigAliases | null;
/**
 * Resolve a non-relative specifier through tsconfig paths/baseUrl. Returns
 * every existing root-relative candidate (protection over-approximates).
 */
export declare function resolveAliasImport(specifier: string, aliases: TsconfigAliases, projectRootAbs: string): string[];
/**
 * Expand a set of spec files (original-case, root-relative) to the oracle
 * material they transitively reference. Returns original-case paths,
 * EXCLUDING the seeds themselves. Bounded and fail-soft.
 */
export declare function expandSpecImports(projectRoot: string, specFiles: string[]): string[];
/**
 * Full gate-integrity snapshot: pre-existing test files plus the oracle
 * material their import graphs reference. The membership set is lower-cased
 * (case-insensitive matching); `display` keeps original casing for prompts.
 */
export declare function snapshotProtection(projectRoot: string): ProtectionSnapshot;
//# sourceMappingURL=spec-imports.d.ts.map