Deleted the eight legacy top-level routes; 308s now guarded by a spec
Deleted the eight pre-Fardin-Docs top-level routes — about, work, blog, contact, uses, failures, for-ai, interview — 2,298 lines gone. The 308 redirects in next.config.ts cover every legacy URL, and a Playwright spec asserts they still land on the right /docs/* target.
The site used to have eight top-level HTML routes — /about, /work, /work/[slug], /blog, /blog/[slug], /contact, /uses, /failures, /for-ai, /interview — each a hand-built page with its own layout, TOC, and data wiring. Fardin Docs superseded all of them months ago; the URLs have been 308-ing to /docs/* since ADR-021 landed. The folders were dead weight sitting in src/app/, still building, still in my editor's fuzzy-finder, still tempting me to "just tweak the about page real quick" instead of editing the MDX that actually renders.
Deleted all seventeen files — 2,298 lines gone. The permanent: true redirects in next.config.ts keep every legacy URL alive indefinitely (Next issues a 308, which search engines and agents both honor). tests/e2e/legacy-redirects.spec.ts now walks every old URL and asserts it lands on the right /docs/* target, so the redirects can't silently rot. The .md AI surfaces (about.md, work.md, blog.md, contact.md) stay — only the HTML routes were superseded. The app router tree is finally honest about where content lives.
Graceful fallback on /api/chat when the Gateway is down
When the AI Gateway is down or the request is malformed, /api/chat now returns a 503 JSON envelope pointing agents to /llms-full.txt, /api/mcp, and /.well-known/mcp.json instead of a bare 500.
Turned the MDX-never-reads-data rule into a pre-commit failure
Added a pre-commit hook that fails the commit if any MDX file imports from @/data/*, imports @/lib/data-registry, or string-references a content/data/*.jsonl path. Closes F10 from the concept audit.