Transfer hooks are resolved through a hook permission map published by the program. Wallets and routers read that account, expand it into the transfer instruction, and the token contract calls into Hatchery on every transfer of the mint.
The account list is fixed at initialization: the binding record, the coefficient store, the pool state, and the bin arrays adjacent to the active bin. Nothing is upgradable at runtime, and the hook cannot request accounts it was not declared with. If the list does not resolve, the transfer itself fails — the mint and the program cannot be separated.