Files
brain-of-reese/.agent/phases/complete/48_nav_rename_sources/00_phase.md
T
ducoterra 872a07cee7 feat(ui): rename nav items — "Sources" becomes "RAG", "Git sources" becomes "Sources"
Owner request (2026-08-28): the two admin-only nav items read like the
same thing, so they are relabeled — the document-catalog link
(#nav-sources, /sources.html) becomes "RAG" and the source-manager link
(#nav-git-sources, /git-sources.html) becomes "Sources".

Phase 48 (48_nav_rename_sources), label-only per the locked decision:
- all six pages (index, sources, git-sources, tuning, document, login):
  the two <a> texts swap; ids, hrefs, hidden defaults, is-active /
  aria-current placement, and nav order (Chat, RAG, Sources, Tuning)
  are byte-unchanged otherwise.
- header.js: comment/docstring label mentions only — the reveal-by-id
  logic is untouched (ship-hidden/reveal contract intact).
- test_git_sources_admin.py / test_mobile_hamburger_nav.py: the two
  suites that asserted the old label text are updated; comment-only
  label fixes in test_shared_header.py / test_nav_consistency.py.
- tests/e2e/test_nav_rename_sources.py: the story E2E (green in
  isolation) — renamed labels + unchanged hrefs/order/markers on all
  six pages, click navigation with the active marker, the anonymous
  ship-hidden contract, and regression guards for the untouched
  controls (#sync-label "Sync sources", viewer #doc-back "Sources").
- All eight surrounding header/nav suites stay green in isolation;
  unit+integration green, app/ coverage 99% (frontend-only change),
  ruff + pyright clean.

Note: per this phase file-level staging, the six page files and
header.js also carry the same-day in-flight owner rework that was
already in the working tree when phase 48 ran (mobile sign-in dropdown
copy, sync button ship-hidden on the Sources page); the label rename
itself is the two-text swap on each page.
2026-08-28 12:33:18 -04:00

4.7 KiB

Phase 48 — Nav rename: "Sources" → "RAG", "Git sources" → "Sources"

Source: owner request (chat, 2026-08-28) — "The 'Git sources' navbar item should be renamed to 'Sources' and the 'Sources' navbar item should be renamed to 'RAG'." Story: .agent/user_stories/nav-sources-rag-rename.md Context: the shared header (phase 19, frontend/assets/header.js) ships ONE nav on all six pages — [Chat, #nav-sources "Sources" → /sources.html, #nav-git-sources "Git sources" → /git-sources.html, #nav-tuning "Tuning"] — with the two admin-only links ship-hidden and revealed by id once /api/whoami says admin (phase 16 contract, phase 34 same-header-everywhere, phase 46 mobile hamburger). Both labels are plain <a> text in the six page files; header.js toggles only the hidden attribute and never reads the label, so the rename is markup-only.

Objective

Relabel the two admin-only nav items across all six pages — the document-catalog link (#nav-sources) becomes "RAG" and the source-manager link (#nav-git-sources) becomes "Sources" — with ids, hrefs, order, the ship-hidden/reveal contract, and every other page control (viewer back button, Sync button, page titles/h1s) unchanged.

Dependencies

  • 34_consistent_navbar / 19_shared_header (complete) — the same full header block on all six pages and the header.js reveal-by-id contract this phase preserves.
  • 35_git_sources_admin (complete) — the #nav-git-sources link (and the /git-sources.html page) it labels.
  • 46_mobile_hamburger_nav (complete) — the LINK_TEXTS assertion in test_mobile_hamburger_nav.py that this phase updates.

Tasks

  1. 01_nav_label_swap.md — swap the two label texts in all six page files + the label mentions in header.js's docstring/comments (no logic).
  2. 02_existing_test_labels.md — update the two test suites that assert the old label text; leave every other assertion (viewer back button, sync label, h1/title markers) untouched.
  3. 03_story_e2e_regression_commit.md — the story E2E (test_nav_rename_sources.py), the regression suites in isolation, ruff + pyright, the one --no-gpg-sign commit, and the phase-dir move.

Testing & Quality

  • Unit/integration: no new backend logic (frontend markup only). The existing no-CDN integration test (tests/integration/test_api.py::test_html_pages_served_locally_no_cdn) must still pass — the swap touches no tags or origins (the /git-sources.html "Git sources" marker keeps matching the page's unchanged <h1>).
  • Coverage: frontend-only; the app/ >90% gate is unaffected (unchanged).
  • E2E (mandatory, A16): tests/e2e/test_nav_rename_sources.py — the story gate, run in isolation.

Completion Criteria

  • All six pages show "RAG" on #nav-sources (href /sources.html) and "Sources" on #nav-git-sources (href /git-sources.html); nav order and is-active/aria-current placement unchanged; no id/href/hidden change.
  • Anonymous still sees neither link; the admin sees both (contract preserved, proven by the story E2E + test_shared_header.py).
  • uv run pytest green (the two updated suites included); uv run pytest --cov=app --cov-report=term-missing TOTAL unchanged (no backend change).
  • Regression E2E suites green in isolation: test_nav_consistency.py, test_shared_header.py, test_mobile_hamburger_nav.py, test_git_sources_admin.py, test_header_consistency.py, test_sources_midstream_bug.py, test_smoke.py.
  • uv run pytest tests/e2e/test_nav_rename_sources.py -v --no-cov green in isolation.
  • uv run ruff check . && uv run pyright clean (no Python behavior change, but run the gate).
  • UI Structure Check (AGENTS.md rule 5): labeled links, landmarks/contrast/focus unchanged; no CDN (rule 6).
  • One --no-gpg-sign commit staging only this phase's files; .agent/phases/todo/48_nav_rename_sources/ moved to .agent/phases/complete/.

Locked decisions

  • Label-only rename (owner request 2026-08-28) — exactly the two nav item texts change. Element ids (#nav-sources, #nav-git-sources), hrefs, nav order, the ship-hidden/reveal contract, header.js behavior, and every other label (the document viewer's "Sources" back button, the "Sync sources" button, page <title>/<h1> — incl. "Knowledge base" and "Git sources") are OUT of scope. If the owner later wants the page titles/h1s to follow the nav labels, that is a follow-up phase, not this one.
  • A11 untouched — vanilla HTML only, no CDN, no new packages, no new tags.
  • A10 untouched — no endpoint, auth, or header.js logic change; the rename rides the existing reveal-by-id path.
  • No schema / migration — purely a markup + test-label change.
  • A16 / A17 honoured — one new story E2E suite + one atomic --no-gpg-sign commit.