ctrlrun.WebhookApprovalProvider — class, defined at src/ctrlrun/webhook.py:135
APPROVAL_REQUESTED, and let it answer (SPEC-v0.2 §7).
An ApprovalProvider (v0.1 §4.3): request() records the request and posts it, wait()
polls the store exactly as LocalApprovalProvider does — the answer arrives out of band,
whether from the gateway’s inbound endpoint or from ctrlrun approve.
An undelivered notification is not an approval. If every attempt fails the request
stays pending, ApprovalRequired is raised as usual with a real request_id that
ctrlrun approve can still answer, and the failure is logged. The action is refused
either way, which is the only outcome that is safe when nobody was told.