Why
PermissionRequest exit 2 produces blocked, but Permission service reads only permissionDecision and continues waiting for user approval.
Scope
Consume blocking and continuation decisions consistently, preserve rejection feedback and clean up pending requests and events.
Approach
Turn the audit reproduction into a repository regression, fix the runtime boundary, and verify callers and adjacent hooks tests using Bun 1.3.14. Keep the user's existing working-tree edits outside this delivery.
Acceptance
Both explicit deny and exit 2 reject promptly; no pending permission UI request or deferred remains; allow/ask retain correct behavior.
Why
PermissionRequest exit 2 produces blocked, but Permission service reads only permissionDecision and continues waiting for user approval.
Scope
Consume blocking and continuation decisions consistently, preserve rejection feedback and clean up pending requests and events.
Approach
Turn the audit reproduction into a repository regression, fix the runtime boundary, and verify callers and adjacent hooks tests using Bun 1.3.14. Keep the user's existing working-tree edits outside this delivery.
Acceptance
Both explicit deny and exit 2 reject promptly; no pending permission UI request or deferred remains; allow/ask retain correct behavior.