Compile-time checks for the reactive block — everything verifiable against
the node's OWN resource fails at defmodule, not at drain time. (Checks that
need the OVER node's resource — named read actions, attribute existence —
run at graph assembly instead: that is the earliest point cross-node facts
are known.)