Skip to content

Navigation: six tabs, sentence-case labels that match page titles, moved pages redirected #723

Closed

Description

@0x054

Parent

#698

What to build

The nav becomes six tabs: Get started (Why Ferro, installation, quickstart), Guide, How-to, Concepts, Reference (Python API, CLI, configuration, exceptions, migrations reference, RLS reference), Project (FAQ, roadmap, upgrading between versions, changelog, contributing). Labels are sentence case and equal their page's H1; same-named pages get distinct names ("Testing with Ferro", "Testing migrations"); the adopting how-to moves under Schema management; the upgrade guide moves to Project; the pages created by the split tickets (#714, #715) are wired in; the Next steps page is deleted. Every moved page gets a redirect_maps entry and every internal link is updated. Pages get front matter with a description, and status: new where the page is new in this epic.

Acceptance criteria

  • The nav has exactly the six tabs above, and every page in docs/pages (except includes) is in it.
  • Every nav label equals its page's H1.
  • Every moved or deleted page's old URL redirects.
  • Every page has a front-matter description.

Files owned

  • Modify: zensical.toml, docs/pages/** (front matter, links, moved files)
  • Delete: docs/pages/getting-started/next-steps.md
  • Test: tests/test_docs_migrations.py

Interfaces

Test scenarios

  • Happy path: the strict build passes with every page in the nav.
  • Integration: the old URLs of the moved pages resolve to redirects in the built site.

Verify

uv run --no-sync zensical build --clean --strict
uv run --no-sync pytest tests/test_docs_site.py -q --no-cov -p no:cacheprovider
uv run --no-sync pytest tests/test_docs_migrations.py -q --no-cov -p no:cacheprovider -n 8
uv run --no-sync pytest tests/test_docs_examples.py -q --no-cov -p no:cacheprovider -n 8

Blocked by

Audit findings

Rows from the docs audit this ticket covers (file, line, rule, fix)

Top-level nav (zensical.toml)

Judged against rule 6 (map navigation to the product) and rule 24 (titles say what the page gives). With navigation.tabs on, every top-level entry is a tab: Home, Why Ferro, Getting Started, Guide, How-To, Concepts, Reference, API Reference, Community: nine tabs, two of them single pages.

Sev Rule Finding Suggested fix
M 6 "Reference" (CLI, Configuration) and "API Reference" (Model, Fields...) are two tabs for one kind. A reader looking for ferro migrate up or FerroSettings has to guess which. One "Reference" tab with sections: Python API, CLI, Configuration, Exceptions.
M 6 "Home" and "Why Ferro" are each a whole tab for one page. Fold Why Ferro into "Get started" (Why Ferro, Installation, Quickstart).
M 6, 24 Same label means different pages: "Migrations" (guide/schema/migrations.md and api/migrations.md), "Testing" (howto/testing.md and guide/schema/testing.md), "Queries", "Relationships", "Transactions", "Raw SQL" in both Guide and API Reference. In search results and breadcrumbs they are indistinguishable. Name by what the page gives: "Testing with Ferro" vs "Testing migrations"; API pages by object ("Model", "Query", "ferro.migrations").
M 1, 6 "Guide" mixes how-to-ish pages with "Using with Postgres RLS", and "How-To" holds "Upgrade Guide" (a version-boundary reference) and "Adopting Migrations..." (which belongs beside Schema Management). Move Upgrade Guide to Community/Project (next to Changelog); move Adopting Migrations under Schema Management; title RLS "Row-level security".
L 24 Vague labels: "Overview" (of what), "Alembic" (bridge? migration from?), "Performance", "Next Steps", "Upgrade Guide". "Schema management overview", "Alembic bridge", "Upgrading between versions".
L 5, 22 Labels are Title Case ("Models & Fields", "Connections & Databases", "Data Steps and Backfills") while the rule asks sentence case; nav labels and page H1s disagree ("Quickstart Tutorial" vs "Quickstart", "Why Ferro" vs "Why Ferro?", "CLI"). Sentence case; make nav label = H1.
L 6 guide/migrations.md is not in nav; it is a deliberate "has moved" redirect page with a JS redirect. Fine, but it is still indexed by search. Add search: exclude: true front matter, or use a redirects plugin.
L 6 "Community" holds Roadmap and Changelog, which are about the product, not the community. "Project": FAQ, Roadmap, Changelog, Upgrading, Contributing.

Suggested top level: Get started (Why Ferro, Installation, Quickstart) · Guide (by product area, as now, with Schema management including Adopting) · How-to · Concepts · Reference (Python API, CLI, Configuration, Exceptions) · Project (FAQ, Roadmap, Upgrading, Changelog, Contributing).


docs/pages/getting-started/next-steps.md

  • Kind (rule 1): navigation page (link list); not one of the four kinds.
  • Running example (rule 3): none.
  • Verdict: A second copy of the nav, organised by persona, with Testing listed three times and Pagination twice. It adds little over the nav and the quickstart's own "What's Next". Fold the three persona paths into the quickstart's last section, or keep this page but cut the duplicate lists. C
Sev Line Rule Finding Suggested fix
M 15, 32, 38; 14, 39; 31, 42 rule 1, 6 Testing appears 3 times, Pagination 2, Multiple Databases 2; "Common Patterns" and "Reference Material" restate the nav. Keep the three use-case paths; replace the rest with one link each to How-To and API Reference.
M 29-32 gap "Production Deployment" omits Installation of the cli extra, ferro migrate, and the CLI/Configuration reference, which are what shipping needs. Add CLI reference and Configuration.
L 11-47 humanizer 19 Every item is a bold link plus em dash. Plain link + short clause.
L 54 rule 24 "star the repo to follow releases" as the description of a GitHub link. "Releases on GitHub".
L 56 humanizer 2 Closing line "Build something real and reach for the guides above as questions come up." restates nothing new. Cut.
L 5 rule 5 "Learn by Use Case" Title Case. "Paths by use case".

Activity

  1. added
    documentationImprovements or additions to documentation
    ready-for-agentUnblocked and fully specified; an agent may claim it
    size:MNeeds a plan; one or two local workers
    on Oct 19, 2026
  2. added theissue type on Oct 19, 2026
  3. 3 remaining items

  4. self-assigned this
    on Oct 19, 2026
  5. 0x054 commented on Oct 19, 2026

    @0x054
    ContributorAuthor

    Status: verify-passed
    Worker: worker-723 (reviewed by reviewer-723)
    Branch: sdd/723-navigation
    PR: #749
    Verify: passed d1a7219

    Review: Spec PASS, Quality PASS (two Minor findings: the repeated "Schema management" label, and the llmstxt "Start here" section name). Fresh Verify on d1a7219 green; trial merge not run (base unchanged). All four declared deviations accepted. Ready for the orchestrator to merge into feat/docs-rewrite.

  6. 0x054 commented on Oct 19, 2026

    @0x054
    ContributorAuthor

    Merged in #749 into feat/docs-rewrite

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationready-for-agentUnblocked and fully specified; an agent may claim itsize:MNeeds a plan; one or two local workers

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions