@pwngh/economy-lab
    Preparing search index...

    Interface Attempt

    One recorded spending attempt. Idempotent on its key, so a genuine retry never double-counts.

    interface Attempt {
        amount: Amount;
        at: number;
        idempotencyKey: string;
        outcome: "committed" | "rejected";
    }
    Index
    amount: Amount
    at: number
    idempotencyKey: string
    outcome: "committed" | "rejected"

    How the operation resolved. Rejected attempts are recorded too and their amounts count toward the window's spent — a burst of denials is itself a fraud signal.