A two-node bed pins it: the firewall gap (broker's 5671 not in listens) is fixed in mesh-catalog; the real bug is modules.go:294/build.go:231 building the broker URL with the genesis public MESH_BROKER_ADDRESS, which a joined node cannot reach. https://claude.ai/code/session_01D6qtiYU3P9jk3pnAXyAFyx