# PEP integration sequence `approval_engine.pep` implements the fail-closed ordering from `GH-DEC-2026-003` without becoming a PDP: 1. fetch a fresh approval claim; 2. pass that claim to the consumer's authorization decision function; 3. require ALLOW, decision id, and the exact canonical request digest; 4. CAS-consume the approval; 5. only after confirmed consumption invoke the protected callback. Claim or consume unavailability, invalid/consumed claims, DENY, digest mismatch, and consume conflicts all prevent the callback. A same-digest retry receives the engine's idempotent success. If the callback fails after consume, the approval stays spent; there is no unconsume. The module rereads the mounted bearer-token file on each HTTP request. Conflict, unavailability, unauthorized, missing, DENY, and digest-mismatch paths all prevent the callback. Same-digest consume retries are idempotent; a later full sequence against a spent approval fails at the claim. The consume response is rejected if it carries decision-shaped keys (`effect` / `allow` / `deny`). The live HTTP harness in `tests/test_pep.py` drives this sequence against the real WSGI surface without performing a protected action. secrets-engine owns the production OpenBao PEP (`src/secrets_engine/approval_consume.py`); that handler is implemented and proven in-repo for 409 / unreachable / missing binding. Live closure still needs this service deployed and a durable consume binding served (`SECRETS-WP-0007-T04` / `SECRETS-WP-0008-T02`).