docs/ is the source of truth (CLAUDE.md §12), but only pages listed in mkdocs.yml's nav
are published — and mkdocs' own validation.nav.omitted_files: warn keeps the build green
while dropping the rest. So the site had quietly stopped at ADR-0010 and runbooks/ci.md: 31 pages, including every ADR from 0011 to 0034, six of the seven
runbooks, and synthetic-data.md, existed in the repo and nowhere else.
infra/check-docs-nav.py fails when a page under docs/ is not in the nav. It runs in make lint, so the existing CI job gates it — python3 only, no new tooling, and no
mkdocs install needed to check it.
The nav now lists all 34 ADRs, all 7 runbooks and synthetic-data.md.
ADR-0033's Slice: header said "none yet"; #25 closed it.
The landing page gained a pointer to the Talos runbook.
Failing test committed before the fix — the red commit lists all 31 missing pages.
Implementation makes the test pass.
Conventional Commits referencing the issue (refs #169).
CI green — awaiting the run on this PR (python3 infra/check-docs-nav.py passes locally; make lint also needs the .NET SDK, which CI has).
docker compose up unaffected — docs and mkdocs.yml only, plus one make lint line.
Docs updated — that is the change.
No ADR needed: no dependency, no boundary, no §8 rule touched.
Not user-visible, so no demo note.
Notes for reviewers
The check is a substring test, not a YAML parse (there's a ponytail: note in the
script): a page's path either appears in mkdocs.yml or it doesn't. That keeps it
dependency-free — mkdocs.yml can't be read by yaml.safe_load anyway, it carries a !!python/name: tag for the mermaid fence. It does not check that an entry points at a
file that exists; mkdocs' not_found: warn covers that direction.
ADR labels in the nav are shortened by hand ("ADR-0013: Behandel-portal wiring"), since
several H1s are a full sentence.
Known gap, not fixed here: CLAUDE.md §12 says the site is "published via a Gitea Actions
workflow to Gitea Pages", and no such workflow exists — mkdocs build is never run, by CI or
by any make target. Gitea has no built-in Pages, so publishing needs a decision (a gitea-pages server, an artifact, or a static host) rather than a patch. Worth its own issue
if the published site is actually wanted; until then this PR makes the nav correct for whoever
runs mkdocs serve.
## What & why
`docs/` is the source of truth (CLAUDE.md §12), but only pages listed in `mkdocs.yml`'s nav
are published — and mkdocs' own `validation.nav.omitted_files: warn` keeps the build green
while dropping the rest. So the site had quietly stopped at **ADR-0010** and
**`runbooks/ci.md`**: 31 pages, including every ADR from 0011 to 0034, six of the seven
runbooks, and `synthetic-data.md`, existed in the repo and nowhere else.
- `infra/check-docs-nav.py` fails when a page under `docs/` is not in the nav. It runs in
`make lint`, so the existing CI job gates it — python3 only, no new tooling, and no
mkdocs install needed to check it.
- The nav now lists all 34 ADRs, all 7 runbooks and `synthetic-data.md`.
- ADR-0033's `Slice:` header said "none yet"; #25 closed it.
- The landing page gained a pointer to the Talos runbook.
Closes #169
## Definition of Done
- [x] Linked Gitea issue (above).
- [x] Failing test committed before the fix — the red commit lists all 31 missing pages.
- [x] Implementation makes the test pass.
- [x] Conventional Commits referencing the issue (`refs #169`).
- [x] CI green — awaiting the run on this PR (`python3 infra/check-docs-nav.py` passes locally;
`make lint` also needs the .NET SDK, which CI has).
- [x] `docker compose up` unaffected — docs and `mkdocs.yml` only, plus one `make lint` line.
- [x] Docs updated — that is the change.
- [x] No ADR needed: no dependency, no boundary, no §8 rule touched.
- [x] Not user-visible, so no demo note.
## Notes for reviewers
- The check is a **substring test**, not a YAML parse (there's a `ponytail:` note in the
script): a page's path either appears in `mkdocs.yml` or it doesn't. That keeps it
dependency-free — `mkdocs.yml` can't be read by `yaml.safe_load` anyway, it carries a
`!!python/name:` tag for the mermaid fence. It does not check that an entry *points at a
file that exists*; mkdocs' `not_found: warn` covers that direction.
- ADR labels in the nav are shortened by hand (`"ADR-0013: Behandel-portal wiring"`), since
several H1s are a full sentence.
**Known gap, not fixed here:** CLAUDE.md §12 says the site is "published via a Gitea Actions
workflow to Gitea Pages", and no such workflow exists — `mkdocs build` is never run, by CI or
by any make target. Gitea has no built-in Pages, so publishing needs a decision (a
`gitea-pages` server, an artifact, or a static host) rather than a patch. Worth its own issue
if the published site is actually wanted; until then this PR makes the nav correct for whoever
runs `mkdocs serve`.
not
added this to the Iteration 6 — Production Posture milestone 2026-09-10 09:04:10 +00:00
Only the pages listed in mkdocs.yml's nav are published, and mkdocs' own
`omitted_files: warn` keeps the build green while dropping the rest — so nothing
ever said that the site had quietly stopped at ADR-0010 and runbooks/ci.md.
Runs in `make lint` (python3 only, no new tooling), so it gates every PR through
the existing job.
Red: 31 pages are missing — ADR-0011 through ADR-0034, six of the seven runbooks,
and synthetic-data.md.
ADR-0011 through ADR-0034, six of the seven runbooks (OpenZaak, Open Notificaties,
Keycloak, Flowable, Kubernetes-on-Talos, Gitea Actions gotchas) and synthetic-data.md
are now in mkdocs.yml's nav, which makes `make lint` green again.
Also fills in ADR-0033's `Slice:` header, which said "none yet" — #25 closed it.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What & why
docs/is the source of truth (CLAUDE.md §12), but only pages listed inmkdocs.yml's navare published — and mkdocs' own
validation.nav.omitted_files: warnkeeps the build greenwhile dropping the rest. So the site had quietly stopped at ADR-0010 and
runbooks/ci.md: 31 pages, including every ADR from 0011 to 0034, six of the sevenrunbooks, and
synthetic-data.md, existed in the repo and nowhere else.infra/check-docs-nav.pyfails when a page underdocs/is not in the nav. It runs inmake lint, so the existing CI job gates it — python3 only, no new tooling, and nomkdocs install needed to check it.
synthetic-data.md.Slice:header said "none yet"; #25 closed it.Closes #169
Definition of Done
refs #169).python3 infra/check-docs-nav.pypasses locally;make lintalso needs the .NET SDK, which CI has).docker compose upunaffected — docs andmkdocs.ymlonly, plus onemake lintline.Notes for reviewers
ponytail:note in thescript): a page's path either appears in
mkdocs.ymlor it doesn't. That keeps itdependency-free —
mkdocs.ymlcan't be read byyaml.safe_loadanyway, it carries a!!python/name:tag for the mermaid fence. It does not check that an entry points at afile that exists; mkdocs'
not_found: warncovers that direction."ADR-0013: Behandel-portal wiring"), sinceseveral H1s are a full sentence.
Known gap, not fixed here: CLAUDE.md §12 says the site is "published via a Gitea Actions
workflow to Gitea Pages", and no such workflow exists —
mkdocs buildis never run, by CI orby any make target. Gitea has no built-in Pages, so publishing needs a decision (a
gitea-pagesserver, an artifact, or a static host) rather than a patch. Worth its own issueif the published site is actually wanted; until then this PR makes the nav correct for whoever
runs
mkdocs serve.