/**
 * Compile-time smoke gate for compiled rules (ADR-087).
 *
 * Runs a freshly built `CompiledRule` against its own `badExample` snippet
 * using the same engine entry points that the runtime uses (`matchAstGrepPattern`
 * for ast-grep, `new RegExp` for regex). If the rule cannot match its own
 * bad example, something structurally wrong happened between the LLM output
 * and the persisted rule shape — either the pattern does not compile against
 * the snippet, or the snippet does not exercise the pattern the prompt
 * promised. Either way, the rule has no business in compiled-rules.json.
 *
 * The gate is intentionally a thin wrapper: its entire purpose is to
 * guarantee that a rule passing here will also fire at runtime on identical
 * input. Any divergence between "smoke gate happy" and "runtime happy" is a
 * bug in this module, not a rule authoring problem.
 *
 * Not wired to Pipeline 1 (manual) rules in mmnto/totem#1408 - a dry-run
 * sweep lands in a follow-up ticket before the Pipeline 1 gate flips on.
 */
import type { CompiledRule } from './compiler-schema.js';
export interface SmokeGateResult {
    /** True when the rule produced at least one match against the snippet. */
    matched: boolean;
    /** Number of matches the engine reported. Zero when `matched` is false. */
    matchCount: number;
    /**
     * When matched is false and the engine refused to execute (invalid regex,
     * ast-grep runtime throw, missing engine fields), this carries the first
     * line of the error so the caller can build a human-readable rejectReason.
     * Absent when matched is true, and absent when matched is false due to the
     * snippet simply not containing anything the pattern would match.
     */
    reason?: string;
}
/**
 * Run the smoke gate for a compiled rule against an arbitrary snippet.
 * Callers interpret `matched === true` based on the snippet's role:
 *   - badExample check: under-matching when matched is false → reject
 *   - goodExample check (mmnto-ai/totem#1580): over-matching when matched
 *     is true → reject
 *
 * This function is intentionally role-agnostic and only reports what the
 * engine says; the accept/reject decision belongs to the caller.
 */
export declare function runSmokeGate(rule: CompiledRule, snippet: string): SmokeGateResult;
//# sourceMappingURL=compile-smoke-gate.d.ts.map