If a hook never fires, the action already ran
I run OpenCode on a machine I step away from. I used to treat the hook as the control. Then I watched a command start when the hook never showed up.
If the hook never fires, rv never sees it. The action already ran.
I keep that sentence. The rest is how I check it before I leave the room.
I used to test the policy
I'd add a deny. I never checked that OpenCode actually called out. Then I left.
You can have a clean local packs and still have no control. Policy only runs on actions that arrive.
What "the hook fired" means
OpenCode has a moment before a tool runs. The host is supposed to emit the command. Something on this side returns allow, ask, deny, or observe. The host is supposed to honor deny.
That is the whole contract. rv sits on that moment. The model can think whatever it wants. rv only sees the action the host chose to show.
What it does not see
A command that never went through the tool path.
A retry the host runs without asking again.
Writing more policy does not cover those.
Prove the hook is live
I do this in one OpenCode session. Ask it to do something you already deny.
I use this:
rm -rf /
You should see the deny. I recorded it once so I do not have to re-argue it.

If the command starts and there is no deny UI, the hook did not fire. Stop. Do not add rules. The wiring is wrong.
Five minutes before I leave the machine
curl -fsSL https://rykanv.com/install | sh
OpenCode
Trigger the same known deny. Wait until you see it. Then walk away.
If I cannot produce the deny on this machine, I only have a config file.
When the hook is silent
I do not assume it would have blocked. I fix the host path first. Until OpenCode shows me the action, rv has nothing to authorize.
Authorization only works on actions the host shows you. Make the hook fire once on your box. Watch the deny. Then leave.