Before any action touches the chain or the treasury, it passes through the Escalation Engine. The engine reads the constitution and the action context, then returns either NotRequired (proceed) or Required (block).

Interface

pub enum EscalationResult {
    NotRequired,
    Required {
        reason: String,
        contact: EscalationContact,
    },
}

pub fn check(
    constitution: &Constitution,
    action: &Action,
) -> Result<EscalationResult, EscalationError>;

When escalation fires

Statutory floors (always)

  • Dissolution — always requires a human, regardless of constitution
  • Registered agent change — statutory requirement
  • Amendment of dissolution_threshold below 0.51 — prohibited

Constitutional gates

  • Spend above require_human_above_usd
  • Any action by a suspended or observer member
  • Amendment proposals (uses amendment_threshold, not voting_threshold)
  • Member removal for cause

Example — spend escalation

let result = escalation::check(
    &constitution,
    &Action::Spend { amount_usd: 75_000, recipient: "..." },
)?;

match result {
    EscalationResult::NotRequired => {
        // Route to normal voting lifecycle
    }
    EscalationResult::Required { reason, contact } => {
        // Block until contact signs off
        notify_human(contact, reason);
        proposal.state = ProposalState::Escalated;
    }
}

Human approval flow

When Required:
  1. Proposal state becomes escalated
  2. Named human(s) in constitution.escalation.contacts receive notification
  3. Each required human signs with their DID
  4. Once all required signatures collected, proposal transitions to voting
  5. If any named human rejects, proposal transitions to rejected
Multiple humans can be required for different action classes:
escalation:
  contacts:
    - did: did:oas:human:hr-01-a4f2
      purposes: [dissolution, amendment]
    - did: did:oas:human:finance-02
      purposes: [statutory]

You cannot bypass the engine

The engine runs for every action, including those initiated by admin roles. This is deliberate. An admin permission grants the ability to manage membership, not the ability to override the constitution.

Audit

Every escalation check writes an audit entry, including the result and the constitutional provision invoked:
{
  "event": "escalation.check",
  "action": "spend",
  "amount_usd": 75000,
  "result": "required",
  "provision": "treasury.require_human_above_usd",
  "threshold": 50000,
  "contacts_notified": ["did:oas:human:hr-01-a4f2"]
}