export interface BlockerVerdict { gate: string; fired: boolean; scanned: number; rule?: string; reason?: string; detail?: string; error?: string; skipped?: string; steerOnly?: boolean; } export interface Blocker { name: string; run: (input: Record, ctx?: Record) => BlockerVerdict; failSafe: "block" | "allow"; switch: string; criticality: "high" | "medium" | "low"; bypassable: boolean; mode: "block" | "steer"; } export const BLOCKERS: Blocker[]; export function evaluateBlockers( toolName: string, input: Record, opts?: { ctx?: Record; enabled?: Record }, ): { block: boolean; reason?: string; rule?: string; ruleText?: string | null; refusalStage?: number; fingerprint?: string; park?: { reason: string; question: string; item?: string }; verdicts: BlockerVerdict[]; steers?: Array<{ gate: string; reason: string }>; }; /** Re-run the fail-safe-block rules from the raw input alone, when the gate itself could not run. */ export function failSafeBlock(input: Record): { block: true; reason: string } | undefined; export function blockSecretWrite(input: Record, ctx?: Record): BlockerVerdict; export function blockTestSubset(input: Record, ctx?: Record): BlockerVerdict; export function blockPushWithoutGreen(input: Record, ctx?: Record): BlockerVerdict; export function blockDestructiveGitDirty(input: Record, ctx?: Record): BlockerVerdict;