Mode-Aware Deny Downgrade — decision board

ork ships 45 deny + 17 ask hook sites in 33 files; 28 files have no escape hatch, and all of them fire regardless of --dangerously-skip-permissions. The proposal: hooks read input.permissionMode (already in every payload — types.ts:67, guards.ts:315) and downgrade deny → ask in permissive modes, except a hard-deny never tier you choose below.

permission mode
33hook files
45deny sites
17ask sites
0hard denies in this mode
0downgraded to ask
hook filepathdenyask escape hatchbehavior in this modenever tier

Copy-out: never-tier config for lib/output.ts


    
  

Data verified 2026-07-23 against src/hooks/src at HEAD (static sweep of outputBlock/outputDeny/ask sites + process.env opt-outs). dangerous-command-blocker's pipe-to-shell deny was already narrowed on this branch (stdin-as-script vs stdin-as-data + network source). lib/output.ts and lib/common.ts are the shared funnel, not policy sites — the downgrade lands there once instead of as 28 per-hook edits.