check / check (push) Waiting to run
The HTTP server ran ListenAndServe in a goroutine, so a failed bind was only logged and neoircd kept running without its HTTP API. The start hook now binds the listen address itself and returns the bind error, so fx stops startup and neoircd exits 1 with an error naming the address. The bound listener is then served in a goroutine; if serving ends with anything other than a normal shutdown, the server stops the app through fx.Shutdowner with exit code 1. A new test holds a port and checks that starting the app on it fails with an error naming the address. Model: opus-5-5