Documentation tells users to scrape /metrics (the Prometheus convention) but the route only existed at /api/v1/metrics/prometheus. The root-level /metrics returned the SPA HTML fallback via Caddy. - Add GET /metrics to app.js (same output as /api/v1/metrics/prometheus) - Add /metrics to PUBLIC_ROUTES in middleware.js (no auth required) - Add /metrics to rate-limiter skip list - Add 5 tests in metrics-root-endpoint.test.js - Add Caddy route for /metrics on test server - All 1775 tests pass Codex grade: B (no blocking issues)