SRD-081 — Structured navigation for the documentation site¶
| Field | Value |
|---|---|
| Status | Accepted |
| Date | 2026-08-05 |
| Owner | Ruslan Gabitov |
| Implements | — (follow-up tooling landing; revisits the navigation decision recorded in SRD-080 §4.3, which explicitly deferred a curated nav "until the auto sidebar proves inadequate in practice" — it has) |
§1 Background¶
SRD-080 shipped the site with a fully auto-derived sidebar. In practice the
result is unstructured: every top-level directory renders as a peer section
in alphabetical order, so design/ (61 files), srd/ (110+) and fix/
compete with the Developer Manual at the top level; the guides' parts sort
alphabetically (concepts before getting-started), contradicting the
reading order guides/index.md prescribes; and the 25 Russian ADR twins
interleave with their English originals, doubling the apparent length of the
design list. The owner has reviewed the live site and rejected the flat
tree.
A second, related cleanup rides along. The repo's twin convention is that only SAD/ADR documents carry Russian twins — SRDs and FIXes are one-shot landing records and do not. The tree contradicts the convention today:
docs/srd/*.ru.md— 32 files (early-era SRD twins);docs/fix/*.ru.md— 6 files;docs/design/*.ru.md— 25 ADR twins (no SAD twin exists), mixed into the English listing.
Inbound-link exposure is minimal (measured): no kept file links an SRD/FIX
ru twin except SRD-001.md, which links its own twin; README.ru.md links
none; the ADR twins link each other (same directory) and English docs via
../-relative paths.
§2 Requirements¶
Functional¶
- FR-1 — the sidebar is curated at the section level while page lists
stay derived (no 337-entry hand nav to rot). Mechanism:
mkdocs-awesome-nav==3.3.0(pinned) + per-directory.nav.ymlfiles. - FR-2 — top-level order and titles (
docs/.nav.yml): - Home (
index.md) - Developer Manual →
guides/ - Design documents →
design/ - BPMN 2.0 extract →
bpmn-spec/ - Landing records → section grouping
srd/+fix/ - Project → section grouping
analytics/,audit/,backlog.md - FR-3 —
guides/.nav.ymlorders the parts perguides/index.md: getting-started → concepts → data → events → gateways → tasks → subprocesses → iteration → operating → extending → foundation → reference, with the part titles the manual uses. - FR-4 —
design/.nav.yml:index.md, then SAD-001 pinned first, then the ADRs (derived, numeric order = alphabetical), then a Russian group →design/ru/. - FR-5 — the 25 ADR Russian twins move to
docs/design/ru/(gitmv, history preserved); their out-of-directory relative links gain one../level. English↔twin cross-links, if any, are retargeted. - FR-6 — the 32 SRD and 6 FIX Russian twins are deleted — the twin
convention grants twins to SAD/ADR only, and these are stale one-shot
translations nobody maintains. The single inbound link (
SRD-001.md§, frozen Accepted doc) gets the mechanical dead-link fix: the twin link becomes prose (same treatment as SRD-051's retargets in SRD-080 M1). - FR-7 — the convention becomes standard behaviour, recorded where
future work will hit it: the repo
CLAUDE.mddesign-docs section states "Russian twins: SAD/ADR only, living indocs/design/ru/; SRD/FIX never";docs/design/index.mdmentions theru/group; the account-level/sdd-fixskill's linked-docs step gains the same rule for its translated-twins sweep. -
FR-8 — toolchain parity: the plugin joins the workflow install line, the Makefile pin block (
MKDOCS_AWESOME_NAV_VERSION, enforced byrequire-mkdocs), and the Monday pin sweep (pypi:entry). -
FR-10 — Mermaid diagrams render on the site. They do not today because
```mermaidfences pass through as plain code blocks;mkdocs.ymlgains the Material-native integration —pymdownx.superfenceswith themermaidcustom fence (format: !!python/name:pymdownx.superfences.fence_code_format) — which Material bundles (no external CDN). - FR-9 — the READMEs' status line drops its hardcoded release number
(
README.md:11andREADME.ru.md:13sayv0.9.0;.versionisv0.11.0): the sentence keeps only the prose ("active development, not yet production-ready") — the GitHub Tag badge four lines above already reports the live version and cannot rot.
Non-functional¶
- NFR-1 —
mkdocs build --strict,make link-check, andmake ciall green after the moves/deletes; zero dead links introduced. - NFR-2 — deleted twins remain retrievable from git history; the commit message names the convention as the reason.
- NFR-3 — no Go code changes; diff-coverage gate trivially green.
§3 Models¶
docs/.nav.yml (top level):
nav:
- index.md
- Developer Manual: guides
- Design documents: design
- BPMN 2.0 extract: bpmn-spec
- Landing records:
- SRDs: srd
- FIXes: fix
- Project:
- analytics
- audit
- backlog.md
docs/design/.nav.yml:
nav:
- index.md
- SAD-001-vision-and-architecture.md
- "ADR-*.md"
- Russian: ru
docs/guides/.nav.yml lists the twelve part directories in reading order
(titles: "Getting started", "Architecture & runtime", …, matching
guides/index.md). mkdocs.yml adds plugins: [search, awesome-nav]
(listing search explicitly because declaring plugins: disables MkDocs'
defaults).
§4 Analysis¶
- awesome-nav over a hand
nav:— a full nav list over 300+ pages goes stale at the first added page andomitted_files: warn+--strictwould then fail the build for every new doc; awesome-nav keeps listings derived and curates only order/titles/grouping. Chosen. - awesome-nav over literate-nav — literate-nav wants a SUMMARY.md-style
file per scope and wildcard syntax inside prose files;
.nav.ymlis data-as-declaration next to the directory it orders (the house data-over-code preference) and is the maintained successor (mkdocs-awesome-pagesis deprecated in its favor). Chosen. design/ru/overdocs/ru/— the twins are design documents; a top-levelru/would imply the whole site has a Russian edition (it does not). The subdirectory keeps them one../from their originals and gives the nav group a natural anchor. Chosen.- Deleting vs archiving SRD/FIX twins — moving them to an
attic/keeps dead weight in the published site and in linkcheck's scope; git history already archives them perfectly (NFR-2). Deletion chosen.
§5 API¶
User-facing surface: the restructured sidebar at
https://dr-dobermann.github.io/gobpm/; .nav.yml as the knob future
sections are ordered with; unchanged make docs-build / docs-serve.
§6 Tests / Verification¶
| # | Check | How |
|---|---|---|
| V-1 | Strict build green with the plugin | make docs-build exit 0 |
| V-2 | Nav structure as specified | built site/index.html nav: section titles/order match FR-2; guides parts in FR-3 order; SAD first and По-русски group present (FR-4) |
| V-3 | No orphan ru twins | ls docs/srd/*.ru.md docs/fix/*.ru.md → none; ls docs/design/*.ru.md → none (all under design/ru/) |
| V-4 | No dead links | make link-check green; --strict green (covers moved-twin link depth) |
| V-5 | Repo gate | make ci green |
| V-6 | Deploy | post-merge: site redeploys, sidebar shows the new tree (owner confirms) |
§7 Milestones¶
- M1 — twin cleanup: delete SRD/FIX ru twins,
git mvADR twins todesign/ru/+ link-depth fixes,SRD-001.mdprose fix; linkcheck green. - M2 — structured nav + mermaid: plugin pin (workflow, Makefile,
sweep),
mkdocs.ymlplugins block + the mermaid custom fence (FR-10 — 84 pages carry```mermaidblocks today, all rendering as plain code), the three.nav.ymlfiles; V-1…V-5. - M3 — convention record + README hygiene:
CLAUDE.mdtwin rule,design/index.mdnote,/sdd-fixskill update, README en/ru status-line version drop (FR-9), CHANGELOG entry, linked-docs sweep.
§8 Cross-doc references¶
None pinned: no ADR/SAD contract is touched (SRD-080 is an Accepted one-shot and stays frozen; its §4.3 explicitly anticipated this follow-up).
§9 Definition of Done¶
- [ ] V-1…V-5 green; V-6 confirmed after merge.
- [ ] Zero
.ru.mdoutsidedocs/design/ru/. - [ ] Convention recorded in all three FR-7 locations.
- [ ] §10 filled with commit SHAs.
§10 Implementation summary¶
Landed on feat/docs-site-nav in three milestones:
- M1
a537cf7— twin cleanup (−10,387 lines): 32 SRD + 6 FIX Russian twins deleted; 25 ADR twinsgit mv-ed todocs/design/ru/with the out-of-group link depths bumped (../bpmn-spec/→../../…, same-dir English ADR/SAD targets →../…);SRD-001.md's link to its own deleted twin became prose (mechanical dead-link fix in a frozen doc). - M2
adfe9e2— structured sidebar + mermaid:mkdocs-awesome-nav==3.3.0pinned (workflow, MakefileMKDOCS_AWESOME_NAV_VERSIONunder the extendedrequire-mkdocsguard, pin sweep); the three.nav.ymlfiles (FR-2/3/4);plugins: [search, awesome-nav]; thepymdownx.superfencesmermaid custom fence (FR-10) rendering the 84 diagram-bearing pages. - M3
bf99f01— convention + hygiene: the twin rule inCLAUDE.mdanddesign/index.md(and, outside the repo, the/sdd-fixskill's linked-docs step); README en/ru status lines version-free (FR-9); CHANGELOG entry.
Verification: nav order checked positionally in the built HTML for all
three .nav.yml scopes; <pre class="mermaid"> present in built pages;
make link-check, mkdocs build --strict, and make ci all green. The
/check-srd audit passed with a clean tally (no red, no yellow findings).
Post-merge tail (V-6): the first redeploy shows the restructured sidebar,
the Russian group, and rendered diagrams — owner confirms on the live site.
Open questions¶
None — resolved with the owner (2026-08-05): the 6 FIX ru twins are deleted alongside the SRD twins (a FIX is a one-shot landing record); the nav group is titled Russian.