0004: Serve every read from the local index =========================================== :Status: Accepted :Date: 2026-10-19 Context ------- The legacy viewer scraped its source on every request to ``/adr/``, which made reads slow and coupled the catalog's availability to the source's. Decision -------- Normal browse, search, filter, detail, diff and sources requests read only from PostgreSQL. Source adapters are constructed only by the polling service. The old ``/adr/`` route is gone; JSON lives under ``/api/v1`` and the SPA renders it. ``/healthz`` keeps its path. Consequences ------------ * A source outage never breaks browsing; the UI shows freshness and a stale or failed banner instead of claiming the index is current. * Published content is only as fresh as the last successful poll. * ``tests/routers/test_no_adapter_calls.py`` patches every adapter constructor to raise and exercises every read route.