Docs home must resolve for every served KB (synthesize an overview when there is no root index)
task-docs-home-synthesize-overview-when-no-root-index
Docs home must resolve for every served KB
The docs home (/knowledge/) must resolve for any client KB — including one with no root index.md is a field-verified finding (confidence: verified): a freshly-ingested client KB with no root index.md — the default output of the ingest→extract pipeline — makes the app's primary Docs nav land on a 404, because hasRootIndex() is false ⇒ no /knowledge/ page is generated while SiteHeader/SiteFooter hardcode the link there. The gap was invisible because Dossier's own KB ships knowledge/index.md; it only surfaced when a real client KB (First live FirecrawlConnector run against a real client source — field evidence for the reserved web seam RBA tenant) was served.
This task owns the durable platform fix the decision deliberately left unpicked. DEC-0058 frames the call:
- Option 2 — synthesize at render time (the FDE's lean): the
@dossier/okf-view/ docs renderer detects "no root index" and synthesizes a faithful overview page (e.g. grouped-by-type concept listing) on the fly. Sovereignty-clean — no file is written into the client's git (Adopt OKF as Dossier's canonical knowledge format); the KB stays exactly as ingested. - Option 3 — emit at provision time: the ingest / client-new / generate-landing flow writes a root
index.mdinto the tenant repo. Simpler renderer, but it writes a sovereign file the client didn't author — a sovereignty trade-off the owner must weigh.
The owner (Astro Starlight Engineer) picks and records the choice. Until then, DEC-0058's per-tenant stopgap keeps the RBA reference tenant whole. The promotion gate (DEC-0058 invariant asserted → verified) is exactly this task's acceptance: a no-root-index KB serves /knowledge/ as a 200 with a faithful overview, and the Docs link is never dead.
Why this exists now
pnpm kb:check (Fast deterministic KB integrity check (kb:check) — make SSOT cheap to uphold) flagged that DEC-0058 references this task id four times but the atom was never filed — a dangling wiki-link. Filing the real stub closes the link rot and gives the invariant an owned, trackable home (rather than four pointers into the void). Routed, not buried — the discipline working as designed under Defer the heavy curation pass off the hot path — terse log stub + kb:check now, pnpm log:audit later.