import type { RiskTier } from './types.js'; /** A step's risk: `informational` when it exercises no capability, else its tool's `RiskTier`. */ export type StepRiskClass = 'informational' | RiskTier; /** The obligations a risk class imposes BEFORE execution, over and above a valid mandate. */ export interface MinimumAuthority { /** Is a mandate required at all? False only for `informational`. */ mandate: boolean; /** Must the step carry an idempotency key (a retry of a mutation is not a re-read)? */ idempotencyKey: boolean; /** Obligation kinds the policy layer attaches. Names, not implementations — a `PolicyEvaluator` * turns them into concrete `Obligation`s with who may discharge them. */ obligations: ReadonlyArray<'second-party-approval' | 'quorum' | 'fresh-authorization'>; } /** * The DEFAULT ladder. A granting agent's own policy (an org's membership policy, a treasury's spend * policy) may add to it and never subtract from it — the evaluator composes, it does not override. * * informational read; no consequence → nothing * low reversible mutation → mandate * medium significant mutation → mandate + idempotency key * high financial / legal / external → + second-party approval * critical irreversible / high-impact → + quorum + fresh authorization */ export declare const MINIMUM_AUTHORITY: Readonly>; /** Derive a step's risk class from what its tool declares. No capability ⇒ informational, whatever the * planner said — a plan cannot lower a risk, and it cannot raise one into needing authority either. */ export declare function stepRiskClass(tool: { capability?: unknown; risk?: RiskTier; }): StepRiskClass; /** Is `a` at least as risky as `b`? For "an irreversible step imposes at least what a high one does". */ export declare function riskAtLeast(a: StepRiskClass, b: StepRiskClass): boolean; //# sourceMappingURL=step-risk.d.ts.map