/**
 * T-PACK-FSM-STANDARDIZATION slice B — `guards` -> synthetic skill compilation.
 *
 * A Guard is the GENERAL form of the detect→verdict skeleton that ~23/24 skills
 * hand-respell (e.g. `default-discipline/skills/git/skill.yaml`'s two rules).
 * Each guard compiles into one `TrackCheckRule` whose process is `[detect?,
 * verdict]`, grouped under the synthetic skill `<pack>/guards`:
 *
 *   - `detect` (optional) — a generic primitive call bound via `as`. Omitted
 *     for a check-only guard (the `verify_gate` shape).
 *   - `verdict` — fired conditionally via `step.if = guard.when`, the same
 *     `if:` expression engine + 5-fn allow-list the hand-written rules use.
 *
 * This is the reusable gate TEMPLATE: the skeleton lives HERE (in the
 * compiler), so authors declare only the shape's parameters. The output is the
 * EXACT `ProcessStep[]` an author would hand-write, so the runtime interpreter
 * is unchanged (proven byte-identical in `guards_compiler.test.ts`).
 *
 * `verify_gates_compiler.ts` is the detect-less special case of this; the two
 * stay separate while `verify_gates` keeps its own schema (a later slice may
 * fold verify_gates into guards once the template surface settles).
 *
 * Pure: no I/O. Caller (`loader.ts`) appends the synthetic skill into
 * `pack.skills` alongside hand-authored skills and the `<pack>/verify` skill.
 *
 * Audit trail: each compiled rule's `id` is `guard:<name>` so a drift-catalog
 * grep can attribute the verdict to its source guard.
 */
import type { SkillType } from './schemas/index.js';
import type { Guard } from './schemas/manifest.js';
export interface GuardsCompileSuccess {
    ok: true;
    skill: SkillType;
}
export interface GuardsCompileFailure {
    ok: false;
    errors: readonly {
        guardName: string;
        message: string;
    }[];
}
export type GuardsCompileResult = GuardsCompileSuccess | GuardsCompileFailure;
/**
 * Compile `guards` into a single synthetic skill `<pack>/guards`. When `guards`
 * is empty the result is `{ok: true, skill}` with a zero-rule skill — callers
 * SHOULD filter out empty-rule skills before appending (matches
 * `compileVerifyGates`). A `when` expression that fails to parse is collected
 * (with its guard name) and surfaced as `{ok: false, errors}` — no silent skip.
 */
export declare function compileGuards(packName: string, guards: readonly Guard[]): GuardsCompileResult;
//# sourceMappingURL=guards_compiler.d.ts.map