---
name: SX navigation single-source-of-truth
description: Navigation must be defined once in nav-data.sx — no fragment URLs, no duplicated case statements, use make-page-fn for convention-based routing
type: feedback
---

Never use fragment URLs (#anchors) in the SX docs nav system. Every navigable item must have its own Lisp URL.

**Why:** Fragment URLs don't work with the SX URL routing system — fragments are client-side only and never reach the server, so nav resolution can't identify the current page.

**How to apply:**
- `nav-data.sx` is the single source of truth for all navigation labels, hrefs, summaries, and hierarchy
- `page-functions.sx` uses `make-page-fn` (convention-based) or `slug->component` to derive component names from slugs — no hand-written case statements for simple pages
- Overview/index pages should generate link lists from nav-data variables (e.g. `reactive-examples-nav-items`) rather than hardcoding URLs
- To add a new simple page: add nav item to nav-data.sx, create the component file. That's it — the naming convention handles routing.
- Pages that need server-side data fetching (reference, spec, test, bootstrapper, isomorphism) still use custom functions with explicit case clauses
- Legacy Python nav lists in `content/pages.py` have been removed — nav-data.sx is canonical
