The assumptions need high visibility because if your URDF does not meet them, you can't use the controller. It's not a hidden implementation detail that users are unaffected by. In that spirit, the init function should validate those assumptions whenever possible, which currently does not.