Files
brain-of-reese/.agent/phases/complete/61_stale_ui_copy/00_phase.md
T

6.9 KiB
Raw Blame History

Phase 61 — Stale UI Copy (retire the homelab-era text)

Source: TODO.md L4 — "Clean up the UI, there's text that references old features or talks about the way BOR used to work. For example the page-sub text in knowledge base references !/Homelab and ~/Deployments but those aren't the only sources and sometimes aren't included." Story: n/a (TODO-derived — owner roadmap confirmation 2026-09-01) Context: Verified copy inventory (audited 2026-09-01, all line numbers as of this writing):

  • frontend/index.html L6 — meta description "Ask Brain of Reese anything about the homelab and deployments."; L199–201 — empty-state sub "I've read through the homelab and deployment notes — ask me anything, and I'll point you at the exact doc. You've got this."; L231 — composer placeholder="Ask me about the homelab…".
  • app/config.py L265–270 — the DEFAULT suggestion chips: 3 of 4 are owner-corpus-specific ("How is my Kubernetes cluster set up?", "What's my backup strategy?", "How do I deploy a new service?", "What's currently running in the homelab?"). Rendered as empty-state chips by app.js from GET /api/suggestions.
  • frontend/sources.html L110–114 — the KB page-sub cited in the TODO: "Every *.md file indexed from ~/Homelab and ~/Deployments. Press Sync sources to clone the repos and re-import." Stale on three counts: sources are now git repos + local directories + uploaded archives (phases 28/38/49); import extensions are configurable, not only *.md (phase 56); Sync pulls the configured git repos and imports local dirs — it does not clone "the repos" in general.
  • frontend/git-sources.html L175 — form example placeholder="https://github.com/you/homelab.git".
  • ALL 9 pages — footer <span>Powered by Reese's self-hosted models</span> (index.html L245, sources.html L186, tuning.html L148, document.html L150, git-sources.html L243, history.html L173, login.html L131, shared.html L147, doc-edit.html L118).
  • OUT OF SCOPE (owner-locked A3): code/HTML comments mentioning "homelab" (frontend/assets/app.js L180/L1398/L1419, frontend/assets/history.js L39/L244, frontend/index.html L176) — not user-visible; left untouched to keep the diff minimal.
  • The phase-39 brand layer (frontend/assets/brand.js) already rewrites every occurrence of the literal "Brain of Reese" (titles, .brand-text, text nodes, aria/placeholder/meta attributes) — so strings that embed the BRAND name (e.g. the visually-hidden label "Ask Brain of Reese a question", index.html ~L227) stay as-is: the layer keeps them in sync when BOR_APP_NAME is set.
  • No existing test pins the exact default chip text (tests/integration/test_api.py L75–81 asserts only shape: a list, len >= 3, non-empty strings).
  • .agent/ is UNTRACKED (owner instruction, commit 281f355) — the phase commit stages frontend/ tests/ app/ only.
  • The E2E shared conftest server boots with the default env — this phase's E2E asserts the NEW neutral copy against that shared server.

Objective

Every user-visible string in the app describes how BOR works TODAY (any configured sources — git, local directories, uploads — with configurable extensions) instead of the owner's original ~/Homelab + ~/Deployments deployment: accurate, neutral defaults on all pages, with the exact replacement copy locked below.

Dependencies

  • 60_sticky_navbar (complete, preceding — no functional dependency; ordering by number)

Tasks

  1. 01_chat_page_copy.md — neutralize the chat page (index.html meta description, empty-state sub, composer placeholder) + the default suggestion chips in app/config.py.
  2. 02_sources_pages_copy.md — rewrite the KB page-sub + review the remaining page-subs and the git-sources example URL against current behavior.
  3. 03_footer_defaults.md — all 9 footers → neutral default text, tagged class="footer-text" (the hook phase 62's env var drives).
  4. 04_tests_and_commit.md — unit text pins, dedicated E2E tests/e2e/test_stale_ui_copy.py, regression suites, one atomic commit.

Testing & Quality

  • Unit pins (house style, tests/unit/test_frontend_brand.py pattern — read the HTML/config.py as text): the old literals are GONE, the locked replacements are present, all 9 pages carry .footer-text.
  • E2E (mandatory, house rule): tests/e2e/test_stale_ui_copy.py, run in isolation against the shared conftest server — no visible page text contains "homelab"/"deployment" (case-insensitive), placeholder/meta/footer/chips match the locked copy.
  • Coverage: >90% on app/ (validate.sh gate — this phase changes one Settings default, so the gate is meaningful, not ceremonial).

Completion Criteria

  • No user-visible "homelab"/"deployment(s)" text on any of the 9 pages (case-insensitive; code comments excepted per A3) — proven by the E2E body-text scan on chat + sources pages and the DOM assertions.
  • KB page-sub describes the CURRENT source model (git repos + local directories + uploaded archives; Sync pulls/imports).
  • All 9 footers read the locked neutral default inside <span class="footer-text">.
  • uv run pytest green; coverage TOTAL >90%; uv run ruff check . && uv run pyright clean.
  • uv run pytest tests/e2e/test_stale_ui_copy.py -v --no-cov green in isolation (DB up).
  • Regression E2E suites green in isolation: test_smoke.py, test_configurable_brand.py, test_header_consistency.py, test_dark_tech_theme.py.
  • One --no-gpg-sign commit; phase dir moved to .agent/phases/complete/ (.agent/ stays untracked).

Locked decisions

  • Owner-locked (2026-09-01, roadmap confirmation, A1): exact replacement copy —

    • meta description (index.html L6): Ask anything about your indexed documents — every answer cites the exact doc.
    • empty-state sub (index.html L199–201): I've read through your documents — ask me anything, and I'll point you at the exact doc. You've got this.
    • composer placeholder (index.html L231): Ask me anything…
    • KB page-sub (sources.html L110–114): Every file indexed from your configured sources — git repositories, local directories, and uploaded archives. Press <strong>Sync sources</strong> to pull the latest and re-import.
    • footer (all 9 pages): Powered by self-hosted models
  • Owner-locked (2026-09-01, roadmap confirmation, A2): the four default suggestion chips become —

    1. What documents are in the knowledge base?
    2. Which source does each answer come from?
    3. How do I add a new source?
    4. Summarize the most recent document.

    (operators keep BOR_SUGGESTIONS for their own corpus).

  • Owner-locked (2026-09-01, roadmap confirmation, A3): the git-sources example becomes https://github.com/you/your-repo.git; code/HTML comments mentioning "homelab" are left untouched (not user-visible).

Commit

git add frontend/ tests/ app/ && git commit --no-gpg-sign -m "fix(web): retire the stale homelab-era copy — neutral, accurate defaults on every page"