/**
 * PermissionDecisionLedger — observe-only, append-only record of every permission
 * verdict (allow / clarify / refuse / step-up) with the verified principal + basis.
 *
 * Purpose: measure the gate's decisions (and false-positive rate) against real
 * traffic BEFORE enforcement is ever switched on. Writing here never blocks or
 * mutates the message path — a ledger failure is swallowed.
 *
 * State category: `slack-permission-decisions` (state-coherence-registry.json).
 * Design: docs/specs/SLACK-ORG-INTEGRATION-SPEC.md §6.10, §11.
 */
import type { PermissionVerdict } from './types.js';
export interface PermissionLedgerEntry {
    ts: string;
    decision: string;
    basis: string;
    action: string;
    tier: number;
    floorAction?: string;
    slackUserId?: string;
    userId: string | null;
    role: string;
    registered: boolean;
    directed: boolean;
    confidence: number;
    anomalyScore?: number;
    channel?: string;
    /** Observe-only marker: would this verdict have been ENFORCED (vs just logged)? */
    enforced: boolean;
}
export declare class PermissionDecisionLedger {
    private readonly file;
    constructor(stateDir: string);
    get path(): string;
    record(verdict: PermissionVerdict, ctx?: {
        channel?: string;
        enforced?: boolean;
    }): void;
    /** Most-recent entries (for the read route + FP-rate measurement). */
    readRecent(limit?: number): PermissionLedgerEntry[];
}
//# sourceMappingURL=PermissionDecisionLedger.d.ts.map