Access layer · verified root cause
/ask cold-start — fixed with a prebuilt indexorank scored NLWeb /ask + streaming as FAIL. It wasn't a scanner bug (I checked, and I was wrong to suspect one): a cold /ask loaded the entire Fumadocs source on init and cold-started at ~3.9s, timing out the probe. This fix removes that load.
searchDocs imported the compiled Fumadocs source (all 265 pages) at module init. Crosses orank's ~2.5–3.5s probe timeout.searchDocs reads a prebuilt {url,title,description} index (265 entries) — no heavy source in the /ask import graph at all./api/mcp at 2.4s cold PASSES orank → timeout sits ~2.5–3.5s.doc-search.ts imports only constants + the generated index.tsc + biome clean.scripts/gen-docs-search-index.js → lib/generated/docs-search-index.ts (wired into build-plugins.sh, regenerated on build)searchDocs (index-backed, no source) stays in doc-search.ts; getDocMarkdown (source-backed, full bodies) moves to doc-markdown.ts — used only by MCP full-content./api/mcp keeps source for full markdown (it passes at 2.4s).