/**
 * DOG.3 — verify_gates -> synthetic skill compilation.
 *
 * Each `VerifyGate` declared in a pack's manifest compiles into one
 * `TrackCheckRule` whose process is a single `verdict` primitive step
 * conditionally fired via `step.if = gate.check`. The compiled rules are
 * grouped under a synthetic skill named `<pack>/verify` with triggers
 * derived from each gate's `when` block.
 *
 * Why this shape:
 *   - `step.if` is evaluated by the existing process evaluator (see
 *     `src/runtime/evaluator.ts` — `evalCondition`) using the same 5-fn
 *     allow-list (`len`/`contains`/`startsWith`/`endsWith`/`match`).
 *   - The `verdict` primitive is the canonical way to emit a verdict from
 *     a rule (matches `packs/builtin/default-discipline/skills/git/skill.yaml`).
 *   - Load-time pre-parse of every `check` string via `parseExpression`
 *     fails loudly with the offending gate's name when grammar is wrong
 *     (no silent skipping).
 *
 * Pure: no I/O. Caller (loader.ts) appends the synthetic skill into
 * `pack.skills` alongside hand-authored skills.
 *
 * Audit trail: each compiled rule's `id` is `gate:<gate-name>` so a
 * drift-catalog grep can attribute the verdict to its source gate.
 */
import type { SkillType } from './schemas/index.js';
import type { VerifyGate } from './schemas/manifest.js';
export interface CompileSuccess {
    ok: true;
    skill: SkillType;
}
export interface CompileFailure {
    ok: false;
    errors: readonly {
        gateName: string;
        message: string;
    }[];
}
export type CompileResult = CompileSuccess | CompileFailure;
/**
 * Compile `gates` into a single synthetic skill. When `gates` is empty
 * the result is `{ok: true, skill}` with a default-trigger skill that
 * carries zero rules — callers SHOULD filter out empty-rule skills before
 * appending to the pack to keep dispatcher noise low.
 */
export declare function compileVerifyGates(packName: string, gates: readonly VerifyGate[]): CompileResult;
//# sourceMappingURL=verify_gates_compiler.d.ts.map