ctrlrun.InterruptApprovalProvider — class, defined at src/ctrlrun/adapter.py:209
ApprovalProvider whose wait() routes through a framework’s own primitive.
That is the whole mechanism of SPEC-v0.5 §3: @protect(wait=True) raises ApprovalRequired,
catches it, calls wait(), and re-presents the same proposal under with_approval. The
reservation is taken only on that second pass, which is why an approval gate needs none of
Suspended’s machinery — a human deliberating for an hour pins nothing.
The operator constructs it, on the line where they choose the policy, the store and the
identity provider:
control = Control(policy, store,
approvals=InterruptApprovalProvider(store, MyInterrupt()),
identity=…, authority=…)
An adapter never constructs a Control (SPEC-v0.5 §2.3). Everything it must not choose —
the identity provider, the authority document, the clock, the environment, the mode — is
chosen there, by the person who deployed it.