The lifecycle example computed an exit code that never reached os.Exit,
installed its own SIGINT/SIGTERM handler beside the one fx's Run()
installs, and exited from a goroutine when Sentry failed to start, so
no stop hook ran. Now only fx handles those signals; a listen error
asks fx to shut down with exit code 1 through fx.Shutdowner; Sentry's
error is returned from the server's start hook; and the server's stop
hook shuts the HTTP server down within 5 seconds and fails when
requests are still running. A new paragraph says who owns signals and
the exit code. SIGPIPE is still ignored, now in main.
Model: opus-5-5