Under the hood
Plugin hook-refusal error messages now come from one shared helper function
What
When a plugin operation is refused because no matching hooks module is loaded, or because a loaded hooks module doesn't call that particular hook, both refusal messages now come from a single new shared helper function instead of being handled separately. The code path that runs the operation also now passes along the relevant scan information to the function that picks the runtime handler.
Why
This is an internal cleanup that consolidates duplicate refusal logic; it should not change what message you see when a plugin operation is refused, just how that message gets produced internally.