Add Config.ShutdownTimeout (SERVER_SHUTDOWN_TIMEOUT, default 10s) so callers can
configure the graceful-shutdown deadline without code changes. Previously hardcoded
to 10 seconds. Bump launcher and logz from v0.9.0 to v1.0.1, update go directive
from 1.25 to 1.26. API committed as stable.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Previously ListenAndServe ran entirely in a goroutine, so a port-in-use
error was only logged and the launcher received nil from OnStart — leaving
the application running without an HTTP server.
Replace with net.Listen (synchronous) + srv.Serve(ln) (goroutine). A bind
failure now returns an error from OnStart, which the launcher treats as
fatal and triggers a clean shutdown immediately.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
If a component earlier in the launcher sequence fails during OnInit or OnStart,
the launcher calls OnStop on every already-registered component for cleanup.
httpserver.OnStop previously called s.srv.Shutdown(ctx) unconditionally; because
s.srv is only assigned inside OnStart, any shutdown triggered before OnStart ran
caused a nil pointer panic.
Add an early return in OnStop: `if s.srv == nil { return nil }`.