6.9 KiB
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.htmlL6 — 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 — composerplaceholder="Ask me about the homelab…".app/config.pyL265–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 byapp.jsfromGET /api/suggestions.frontend/sources.htmlL110–114 — the KB page-sub cited in the TODO: "Every*.mdfile indexed from~/Homelaband~/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.htmlL175 — form exampleplaceholder="https://github.com/you/homelab.git".- ALL 9 pages — footer
<span>Powered by Reese's self-hosted models</span>(index.htmlL245,sources.htmlL186,tuning.htmlL148,document.htmlL150,git-sources.htmlL243,history.htmlL173,login.htmlL131,shared.htmlL147,doc-edit.htmlL118). - OUT OF SCOPE (owner-locked A3): code/HTML comments mentioning "homelab" (
frontend/assets/app.jsL180/L1398/L1419,frontend/assets/history.jsL39/L244,frontend/index.htmlL176) — 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 whenBOR_APP_NAMEis set. - No existing test pins the exact default chip text (
tests/integration/test_api.pyL75–81 asserts only shape: a list,len >= 3, non-empty strings). .agent/is UNTRACKED (owner instruction, commit281f355) — the phase commit stagesfrontend/ 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
01_chat_page_copy.md— neutralize the chat page (index.htmlmeta description, empty-state sub, composer placeholder) + the default suggestion chips inapp/config.py.02_sources_pages_copy.md— rewrite the KB page-sub + review the remaining page-subs and the git-sources example URL against current behavior.03_footer_defaults.md— all 9 footers → neutral default text, taggedclass="footer-text"(the hook phase 62's env var drives).04_tests_and_commit.md— unit text pins, dedicated E2Etests/e2e/test_stale_ui_copy.py, regression suites, one atomic commit.
Testing & Quality
- Unit pins (house style,
tests/unit/test_frontend_brand.pypattern — read the HTML/config.pyas 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 pytestgreen; coverage TOTAL >90%;uv run ruff check . && uv run pyrightclean.uv run pytest tests/e2e/test_stale_ui_copy.py -v --no-covgreen 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-signcommit; 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.htmlL6):Ask anything about your indexed documents — every answer cites the exact doc. - empty-state sub (
index.htmlL199–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.htmlL231):Ask me anything… - KB page-sub (
sources.htmlL110–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
- meta description (
-
Owner-locked (2026-09-01, roadmap confirmation, A2): the four default suggestion chips become —
What documents are in the knowledge base?Which source does each answer come from?How do I add a new source?Summarize the most recent document.
(operators keep
BOR_SUGGESTIONSfor 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"