diff --git a/.agent/reports/18_follow_bottom_scroll/18_follow_bottom_scroll__03_docs_plan_commit.a1.md b/.agent/reports/18_follow_bottom_scroll/18_follow_bottom_scroll__03_docs_plan_commit.a1.md deleted file mode 100644 index d175dea..0000000 --- a/.agent/reports/18_follow_bottom_scroll/18_follow_bottom_scroll__03_docs_plan_commit.a1.md +++ /dev/null @@ -1,11 +0,0 @@ -All green (pytest exit 0; summary matches the earlier full run of 295 passed). Phase 18 is complete. - -**Task 03 report — `18_follow_bottom_scroll` (docs, PLAN, validation, commit)** - -- Created `.agent/user_stories/follow-bottom-scroll.md` (header, narrative, 6 acceptance criteria, UI visualization, verbatim 5-scenario Playwright Mapping Rule — matches sibling format) -- `.agent/PLAN.md`: header revisions line + §7.4 "Scroll (follow-the-bottom, phase 18)" row + §12 row 18, each noting the owner choice (2026-08-23, option 1 — no pill); no anchor text altered; README untouched (per task) -- Gates: `uv run pytest --cov=app --cov-report=term-missing` → 295 passed, **99%** coverage; `uv run pytest tests/e2e/test_follow_bottom_scroll.py -v --no-cov` → 5/5 in isolation; regressions in isolation: thinking_display 5✓, chat_persistence 4✓, loading_feedback 5✓, chat_rag 3✓, suggestion_chips 4✓; `uv run ruff check . && uv run pyright` clean; `rg -c "scrollIntoView" frontend/assets/app.js` → 1 -- Commit `bc0158f` `feat(ui): chat auto-scrolls only while pinned to the bottom — …` (conventional, `--no-gpg-sign`); phase dir now under `.agent/phases/complete/` -- Deviations: (1) task's `git add -A .agent/` errors on the ignored pathspec in this git — staged via `git add -f .agent/PLAN.md` (the AGENTS.md rule-8 mechanism); (2) `mv` of the todo dir failed because the harness had already moved tasks 01/02 into `complete/18` — merged remaining `00`/`03` files in and removed the todo dir; (3) header line carries "(Phase 18, owner choice 2026-08-23)" so the owner-choice wording sits on every note, per the phase-17 precedent - -Next pending task: `.agent/phases/todo/19_shared_header/` (first task in that phase). diff --git a/.agent/reports/19_shared_header/19_shared_header__01_shared_header_module.a1.validate b/.agent/reports/19_shared_header/19_shared_header__01_shared_header_module.a1.validate deleted file mode 100644 index ec1a419..0000000 --- a/.agent/reports/19_shared_header/19_shared_header__01_shared_header_module.a1.validate +++ /dev/null @@ -1 +0,0 @@ -bash: .agent/validate.sh: No such file or directory diff --git a/.agent/phases/complete/01_infrastructure/00_phase.md b/.agents/phases/complete/01_infrastructure/00_phase.md similarity index 98% rename from .agent/phases/complete/01_infrastructure/00_phase.md rename to .agents/phases/complete/01_infrastructure/00_phase.md index 7efb6c5..120e220 100644 Binary files a/.agent/phases/complete/01_infrastructure/00_phase.md and b/.agents/phases/complete/01_infrastructure/00_phase.md differ diff --git a/.agent/phases/complete/02_story_import_documents/00_phase.md b/.agents/phases/complete/02_story_import_documents/00_phase.md similarity index 96% rename from .agent/phases/complete/02_story_import_documents/00_phase.md rename to .agents/phases/complete/02_story_import_documents/00_phase.md index 8c6ef1f..a9746f0 100644 --- a/.agent/phases/complete/02_story_import_documents/00_phase.md +++ b/.agents/phases/complete/02_story_import_documents/00_phase.md @@ -1,7 +1,7 @@ # Phase 02 — Story: Import Documents -**Story:** `.agent/user_stories/import-documents.md` -**Context:** `.agent/PLAN.md` §5 (data model), §9 (logging), §11 (import workflow) +**Story:** `.agents/user_stories/import-documents.md` +**Context:** `.agents/PLAN.md` §5 (data model), §9 (logging), §11 (import workflow) ## Goal The importer (`scripts/import_docs.py`) + `GET /api/docs` + the Sources page diff --git a/.agent/phases/complete/03_story_chat_rag/00_phase.md b/.agents/phases/complete/03_story_chat_rag/00_phase.md similarity index 95% rename from .agent/phases/complete/03_story_chat_rag/00_phase.md rename to .agents/phases/complete/03_story_chat_rag/00_phase.md index 1d9bb80..1a3405d 100644 --- a/.agent/phases/complete/03_story_chat_rag/00_phase.md +++ b/.agents/phases/complete/03_story_chat_rag/00_phase.md @@ -1,7 +1,7 @@ # Phase 03 — Story: Chat RAG Answer (happy path) -**Story:** `.agent/user_stories/chat-rag-answer.md` -**Context:** `.agent/PLAN.md` §3 (data flow), §4 (SSE contract), §6 (persona), §9 (logging) +**Story:** `.agents/user_stories/chat-rag-answer.md` +**Context:** `.agents/PLAN.md` §3 (data flow), §4 (SSE contract), §6 (persona), §9 (logging) ## Goal The core product loop: question → embed → cosine top-4 → full top-2 diff --git a/.agent/phases/complete/04_story_honest_deflection/00_phase.md b/.agents/phases/complete/04_story_honest_deflection/00_phase.md similarity index 96% rename from .agent/phases/complete/04_story_honest_deflection/00_phase.md rename to .agents/phases/complete/04_story_honest_deflection/00_phase.md index 2162edd..ca8b96c 100644 --- a/.agent/phases/complete/04_story_honest_deflection/00_phase.md +++ b/.agents/phases/complete/04_story_honest_deflection/00_phase.md @@ -1,7 +1,7 @@ # Phase 04 — Story: Honest Deflection -**Story:** `.agent/user_stories/honest-deflection.md` -**Context:** `.agent/PLAN.md` §4, §6 (honesty gate), §9 +**Story:** `.agents/user_stories/honest-deflection.md` +**Context:** `.agents/PLAN.md` §4, §6 (honesty gate), §9 ## Goal When retrieval finds nothing relevant, Brain says so — plainly, chippily — diff --git a/.agent/phases/complete/05_story_suggestion_chips/00_phase.md b/.agents/phases/complete/05_story_suggestion_chips/00_phase.md similarity index 95% rename from .agent/phases/complete/05_story_suggestion_chips/00_phase.md rename to .agents/phases/complete/05_story_suggestion_chips/00_phase.md index cc8a05d..1ffcd0b 100644 --- a/.agent/phases/complete/05_story_suggestion_chips/00_phase.md +++ b/.agents/phases/complete/05_story_suggestion_chips/00_phase.md @@ -1,7 +1,7 @@ # Phase 05 — Story: Suggestion Chips -**Story:** `.agent/user_stories/suggestion-chips.md` -**Context:** `.agent/PLAN.md` §7 (UI/UX), story file for chip spec +**Story:** `.agents/user_stories/suggestion-chips.md` +**Context:** `.agents/PLAN.md` §7 (UI/UX), story file for chip spec ## Goal Zero-friction onboarding: 3–4 real example questions on first load, diff --git a/.agent/phases/complete/06_story_loading_feedback/00_phase.md b/.agents/phases/complete/06_story_loading_feedback/00_phase.md similarity index 95% rename from .agent/phases/complete/06_story_loading_feedback/00_phase.md rename to .agents/phases/complete/06_story_loading_feedback/00_phase.md index 722f480..fe43b94 100644 --- a/.agent/phases/complete/06_story_loading_feedback/00_phase.md +++ b/.agents/phases/complete/06_story_loading_feedback/00_phase.md @@ -1,7 +1,7 @@ # Phase 06 — Story: Loading Feedback & Progress -**Story:** `.agent/user_stories/loading-feedback.md` -**Context:** `.agent/PLAN.md` §7.4 ("never stale" contract), §9 +**Story:** `.agents/user_stories/loading-feedback.md` +**Context:** `.agents/PLAN.md` §7.4 ("never stale" contract), §9 ## Goal An unambiguous state machine — `idle → thinking → streaming → done | diff --git a/.agent/phases/complete/07_story_responsive_polish/00_phase.md b/.agents/phases/complete/07_story_responsive_polish/00_phase.md similarity index 95% rename from .agent/phases/complete/07_story_responsive_polish/00_phase.md rename to .agents/phases/complete/07_story_responsive_polish/00_phase.md index f2535bf..b882346 100644 --- a/.agent/phases/complete/07_story_responsive_polish/00_phase.md +++ b/.agents/phases/complete/07_story_responsive_polish/00_phase.md @@ -1,7 +1,7 @@ # Phase 07 — Story: Responsive, Polished, Accessible UI -**Story:** `.agent/user_stories/responsive-polish.md` -**Context:** `.agent/PLAN.md` §7 (the whole UI/UX strategy) +**Story:** `.agents/user_stories/responsive-polish.md` +**Context:** `.agents/PLAN.md` §7 (the whole UI/UX strategy) ## Goal The final visual + accessibility audit pass across chat and Sources. No diff --git a/.agent/phases/complete/08_story_dark_tech_theme/00_phase.md b/.agents/phases/complete/08_story_dark_tech_theme/00_phase.md similarity index 95% rename from .agent/phases/complete/08_story_dark_tech_theme/00_phase.md rename to .agents/phases/complete/08_story_dark_tech_theme/00_phase.md index 6960ca9..f257ea3 100644 --- a/.agent/phases/complete/08_story_dark_tech_theme/00_phase.md +++ b/.agents/phases/complete/08_story_dark_tech_theme/00_phase.md @@ -1,7 +1,7 @@ # Phase 08 — Story: Dark Tech Theme -**Story:** `.agent/user_stories/dark-tech-theme.md` -**Context:** `.agent/PLAN.md` §7 (UI/UX strategy), §10 (testing) +**Story:** `.agents/user_stories/dark-tech-theme.md` +**Context:** `.agents/PLAN.md` §7 (UI/UX strategy), §10 (testing) ## Goal Re-skin the whole UI to a dark, techy, emoji-free look with a subtly @@ -126,11 +126,11 @@ animate; reduced-motion context → `animation-name: none`; on-topic smoke - [ ] layout metrics + chat behavior unchanged (smoke E2E) - [ ] existing story E2E suites still green in isolation - [ ] unit + integration green, coverage >90%, ruff + pyright green -- [ ] committed (force-add `.agent/PLAN.md` + this phase record — rule 8) +- [ ] committed (force-add `.agents/PLAN.md` + this phase record — rule 8) ## Commit ```bash git add -A -git add -f .agent/PLAN.md .agent/phases/todo/08_story_dark_tech_theme.md +git add -f .agents/PLAN.md .agents/phases/todo/08_story_dark_tech_theme.md git commit --no-gpg-sign -m "feat(ui): dark tech theme — emoji-free chrome, subtle animated CSS background, WCAG AA dark palette" ``` diff --git a/.agent/phases/complete/09_story_retrieval_quality/00_phase.md b/.agents/phases/complete/09_story_retrieval_quality/00_phase.md similarity index 98% rename from .agent/phases/complete/09_story_retrieval_quality/00_phase.md rename to .agents/phases/complete/09_story_retrieval_quality/00_phase.md index 1631ada..414caea 100644 --- a/.agent/phases/complete/09_story_retrieval_quality/00_phase.md +++ b/.agents/phases/complete/09_story_retrieval_quality/00_phase.md @@ -1,7 +1,7 @@ # Phase 09 — Story: Retrieval Quality — Multi-Format Ingestion + Hybrid Search -**Story:** `.agent/user_stories/retrieval-quality.md` -**Context:** `.agent/PLAN.md` §3 (data flow), §5 (data model), §6 (retrieval), §11 (import) +**Story:** `.agents/user_stories/retrieval-quality.md` +**Context:** `.agents/PLAN.md` §3 (data flow), §5 (data model), §6 (retrieval), §11 (import) ## Goal Fix "RAG retrieval is terrible": ingest the full text-format set (not diff --git a/.agent/phases/complete/10_story_document_viewer/00_phase.md b/.agents/phases/complete/10_story_document_viewer/00_phase.md similarity index 97% rename from .agent/phases/complete/10_story_document_viewer/00_phase.md rename to .agents/phases/complete/10_story_document_viewer/00_phase.md index d87df7e..caca209 100644 --- a/.agent/phases/complete/10_story_document_viewer/00_phase.md +++ b/.agents/phases/complete/10_story_document_viewer/00_phase.md @@ -1,7 +1,7 @@ # Phase 10 — Story: Clickable Document Viewer -**Story:** `.agent/user_stories/document-viewer.md` -**Context:** `.agent/PLAN.md` §4 (API), §7 (UI/UX) +**Story:** `.agents/user_stories/document-viewer.md` +**Context:** `.agents/PLAN.md` §4 (API), §7 (UI/UX) ## Goal Every document Brain cites — and every row in the Sources table — opens diff --git a/.agent/phases/complete/11_long_answers/00_phase.md b/.agents/phases/complete/11_long_answers/00_phase.md similarity index 90% rename from .agent/phases/complete/11_long_answers/00_phase.md rename to .agents/phases/complete/11_long_answers/00_phase.md index b38af3f..df059a2 100644 --- a/.agent/phases/complete/11_long_answers/00_phase.md +++ b/.agents/phases/complete/11_long_answers/00_phase.md @@ -1,6 +1,6 @@ # Phase 11 — Long Answers (No Truncation) -**Story:** `.agent/user_stories/long-answers.md` +**Story:** `.agents/user_stories/long-answers.md` **Context:** owner report 2026-08-22 — "responses keep getting cut off. It should be allowed to respond up to 32768 tokens." @@ -48,5 +48,5 @@ cap per owner instruction. ## Commit ```bash -git add -A .agent/ app/ tests/ .env.example && git commit --no-gpg-sign -m "fix(rag): lift chat output cap to 32768 tokens — long answers no longer cut off" +git add -A .agents/ app/ tests/ .env.example && git commit --no-gpg-sign -m "fix(rag): lift chat output cap to 32768 tokens — long answers no longer cut off" ``` diff --git a/.agent/phases/complete/12_header_consistency/00_phase.md b/.agents/phases/complete/12_header_consistency/00_phase.md similarity index 88% rename from .agent/phases/complete/12_header_consistency/00_phase.md rename to .agents/phases/complete/12_header_consistency/00_phase.md index f01e3fa..2fbfa21 100644 --- a/.agent/phases/complete/12_header_consistency/00_phase.md +++ b/.agents/phases/complete/12_header_consistency/00_phase.md @@ -1,6 +1,6 @@ # Phase 12 — One Header, Same Size Everywhere -**Story:** `.agent/user_stories/header-consistency.md` +**Story:** `.agents/user_stories/header-consistency.md` **Context:** owner report 2026-08-22 — "the header changes size between sources and chat." @@ -43,5 +43,5 @@ None. A11/Phase-08 tokens untouched (same colors, same hairline). ## Commit ```bash -git add -A .agent/ frontend/assets/styles.css tests/e2e/test_header_consistency.py && git commit --no-gpg-sign -m "fix(ui): uniform header bar height on chat, sources, and the document viewer" +git add -A .agents/ frontend/assets/styles.css tests/e2e/test_header_consistency.py && git commit --no-gpg-sign -m "fix(ui): uniform header bar height on chat, sources, and the document viewer" ``` diff --git a/.agent/phases/complete/13_document_back_navigation/00_phase.md b/.agents/phases/complete/13_document_back_navigation/00_phase.md similarity index 90% rename from .agent/phases/complete/13_document_back_navigation/00_phase.md rename to .agents/phases/complete/13_document_back_navigation/00_phase.md index a44c3ec..bf52970 100644 --- a/.agent/phases/complete/13_document_back_navigation/00_phase.md +++ b/.agents/phases/complete/13_document_back_navigation/00_phase.md @@ -1,6 +1,6 @@ # Phase 13 — Document Back Button Returns to Where You Came From -**Story:** `.agent/user_stories/document-back-navigation.md` +**Story:** `.agents/user_stories/document-back-navigation.md` **Context:** owner report 2026-08-22 — "clicking a document from the chat tab pulls up the document correct, but the back button goes back to sources, not the chat." @@ -47,5 +47,5 @@ None. A10/A11 untouched (no new endpoint, no new asset). ## Commit ```bash -git add -A .agent/ frontend/ tests/e2e/ && git commit --no-gpg-sign -m "fix(ui): document viewer back button returns to the page you came from (chat or sources)" +git add -A .agents/ frontend/ tests/e2e/ && git commit --no-gpg-sign -m "fix(ui): document viewer back button returns to the page you came from (chat or sources)" ``` diff --git a/.agent/phases/complete/14_chat_persistence/00_phase.md b/.agents/phases/complete/14_chat_persistence/00_phase.md similarity index 90% rename from .agent/phases/complete/14_chat_persistence/00_phase.md rename to .agents/phases/complete/14_chat_persistence/00_phase.md index fb243e0..c464bb8 100644 --- a/.agent/phases/complete/14_chat_persistence/00_phase.md +++ b/.agents/phases/complete/14_chat_persistence/00_phase.md @@ -1,6 +1,6 @@ # Phase 14 — Chat Survives a Refresh (localStorage) -**Story:** `.agent/user_stories/chat-persistence.md` +**Story:** `.agents/user_stories/chat-persistence.md` **Context:** owner report 2026-08-22 — "the chat disappears as soon as the browser refreshes. It should use local storage to track previous sessions." @@ -56,5 +56,5 @@ A11 untouched (no library — raw `localStorage` JSON). ## Commit ```bash -git add -A .agent/ frontend/ tests/e2e/test_chat_persistence.py && git commit --no-gpg-sign -m "feat(ui): persist the chat conversation in localStorage — survives refresh and navigation, with a New chat reset" +git add -A .agents/ frontend/ tests/e2e/test_chat_persistence.py && git commit --no-gpg-sign -m "feat(ui): persist the chat conversation in localStorage — survives refresh and navigation, with a New chat reset" ``` diff --git a/.agent/phases/complete/15_steering_notes/00_phase.md b/.agents/phases/complete/15_steering_notes/00_phase.md similarity index 94% rename from .agent/phases/complete/15_steering_notes/00_phase.md rename to .agents/phases/complete/15_steering_notes/00_phase.md index 33274c2..f3a325f 100644 --- a/.agent/phases/complete/15_steering_notes/00_phase.md +++ b/.agents/phases/complete/15_steering_notes/00_phase.md @@ -1,6 +1,6 @@ # Phase 15 — Tune How Brain Answers (Steering Notes) -**Story:** `.agent/user_stories/steering-notes.md` +**Story:** `.agents/user_stories/steering-notes.md` **Context:** owner report 2026-08-22 — "the answers are off. Add a feature that lets me 'tune' the output if I think an answer isn't quite right. This tuning should be added to the database and read in with the @@ -77,5 +77,5 @@ suite), A11 (no library). New table + new setting only. ## Commit ```bash -git add -A .agent/ alembic/ app/ frontend/ tests/ README.md && git commit --no-gpg-sign -m "feat(rag): steering notes — tune how Brain answers, stored in Postgres and injected into every system prompt" +git add -A .agents/ alembic/ app/ frontend/ tests/ README.md && git commit --no-gpg-sign -m "feat(rag): steering notes — tune how Brain answers, stored in Postgres and injected into every system prompt" ``` diff --git a/.agent/phases/complete/16_admin_auth/00_phase.md b/.agents/phases/complete/16_admin_auth/00_phase.md similarity index 96% rename from .agent/phases/complete/16_admin_auth/00_phase.md rename to .agents/phases/complete/16_admin_auth/00_phase.md index 4b7ffad..f9e7a76 100644 --- a/.agent/phases/complete/16_admin_auth/00_phase.md +++ b/.agents/phases/complete/16_admin_auth/00_phase.md @@ -1,6 +1,6 @@ # Phase 16 — Admin Sign-In (Single-Admin Auth) -**Story:** `.agent/user_stories/admin-auth.md` +**Story:** `.agents/user_stories/admin-auth.md` **Context:** owner request 2026-08-22 — "add authentication. Only the admin user (there will be only one admin user, me) should be able to tune the outputs and view the entire sources page. Anonymous users should only be @@ -179,10 +179,10 @@ is the only session state. - [ ] UI Structure Check (AGENTS.md rule 5): login page — landmarks, labeled control, contrast ≥4.5:1, focus-visible, `role=alert` error, centered card in the standard frame, no CDN tags. -- [ ] One `--no-gpg-sign` commit (below); `.agent/phases/todo/16_admin_auth.md` - moved to `.agent/phases/complete/`. +- [ ] One `--no-gpg-sign` commit (below); `.agents/phases/todo/16_admin_auth.md` + moved to `.agents/phases/complete/`. ## Commit ```bash -git add -A .agent/ app/ frontend/ tests/ README.md .env.example && git commit --no-gpg-sign -m "feat(auth): single-admin password login (signed cookie) — gate tuning + Sources catalog, keep chat and document viewer public" +git add -A .agents/ app/ frontend/ tests/ README.md .env.example && git commit --no-gpg-sign -m "feat(auth): single-admin password login (signed cookie) — gate tuning + Sources catalog, keep chat and document viewer public" ``` diff --git a/.agent/phases/complete/17_thinking_display/00_phase.md b/.agents/phases/complete/17_thinking_display/00_phase.md similarity index 96% rename from .agent/phases/complete/17_thinking_display/00_phase.md rename to .agents/phases/complete/17_thinking_display/00_phase.md index c00c946..bade9f9 100644 --- a/.agent/phases/complete/17_thinking_display/00_phase.md +++ b/.agents/phases/complete/17_thinking_display/00_phase.md @@ -1,6 +1,6 @@ # Phase 17 — Model "Thinking" in the Chat UI -**Story:** `.agent/user_stories/thinking-display.md` (created by task 04) +**Story:** `.agents/user_stories/thinking-display.md` (created by task 04) **Context:** PLAN §3/§4 (SSE chat transport, A15), §6 (locked prompt), §7.4/§7.5 (feedback contract + component inventory), §9 (per-turn log line); `app/rag/llm.py` (streaming client), `app/api/chat.py` (SSE mapping), @@ -219,14 +219,14 @@ Models/turns that emit no reasoning render exactly as before. all text contrast ≥4.5:1, summary is a real focusable control with ≥44px target, `prefers-reduced-motion` respected, no CDN tags, chat column still 46rem. -- [ ] `.agent/user_stories/thinking-display.md` exists; PLAN §2/§4/§7.4/ +- [ ] `.agents/user_stories/thinking-display.md` exists; PLAN §2/§4/§7.4/ §7.5/§9/§12 carry the revision notes (owner permission 2026-08-23). - [ ] One `--no-gpg-sign` commit (below); - `.agent/phases/todo/17_thinking_display/` moved to - `.agent/phases/complete/`. + `.agents/phases/todo/17_thinking_display/` moved to + `.agents/phases/complete/`. ## Commit ```bash -git add -A .agent/ app/ frontend/ tests/ README.md .env.example && git commit --no-gpg-sign -m "feat(chat): stream model thinking over SSE and show it in a collapsible block" +git add -A .agents/ app/ frontend/ tests/ README.md .env.example && git commit --no-gpg-sign -m "feat(chat): stream model thinking over SSE and show it in a collapsible block" ``` diff --git a/.agent/phases/complete/17_thinking_display/01_backend_thinking_stream.md b/.agents/phases/complete/17_thinking_display/01_backend_thinking_stream.md similarity index 98% rename from .agent/phases/complete/17_thinking_display/01_backend_thinking_stream.md rename to .agents/phases/complete/17_thinking_display/01_backend_thinking_stream.md index af140c4..8987b6e 100644 --- a/.agent/phases/complete/17_thinking_display/01_backend_thinking_stream.md +++ b/.agents/phases/complete/17_thinking_display/01_backend_thinking_stream.md @@ -1,6 +1,6 @@ # Task 01 — Backend: stream thinking pieces end-to-end -**Phase:** `17_thinking_display` · **Story:** `.agent/user_stories/thinking-display.md` +**Phase:** `17_thinking_display` · **Story:** `.agents/user_stories/thinking-display.md` ## Objective The chat pipeline carries the model's reasoning: `LLMClient.chat_stream` diff --git a/.agent/phases/complete/17_thinking_display/02_frontend_thinking_block.md b/.agents/phases/complete/17_thinking_display/02_frontend_thinking_block.md similarity index 98% rename from .agent/phases/complete/17_thinking_display/02_frontend_thinking_block.md rename to .agents/phases/complete/17_thinking_display/02_frontend_thinking_block.md index cadeb8f..ad6906b 100644 --- a/.agent/phases/complete/17_thinking_display/02_frontend_thinking_block.md +++ b/.agents/phases/complete/17_thinking_display/02_frontend_thinking_block.md @@ -1,6 +1,6 @@ # Task 02 — Frontend: the collapsible Thinking block -**Phase:** `17_thinking_display` · **Story:** `.agent/user_stories/thinking-display.md` +**Phase:** `17_thinking_display` · **Story:** `.agents/user_stories/thinking-display.md` ## Objective `index.html` chat shows the model's thinking: a `
` diff --git a/.agent/phases/complete/17_thinking_display/03_e2e_mock_and_story_suite.md b/.agents/phases/complete/17_thinking_display/03_e2e_mock_and_story_suite.md similarity index 98% rename from .agent/phases/complete/17_thinking_display/03_e2e_mock_and_story_suite.md rename to .agents/phases/complete/17_thinking_display/03_e2e_mock_and_story_suite.md index 466b406..a75a234 100644 --- a/.agent/phases/complete/17_thinking_display/03_e2e_mock_and_story_suite.md +++ b/.agents/phases/complete/17_thinking_display/03_e2e_mock_and_story_suite.md @@ -1,6 +1,6 @@ # Task 03 — E2E: mock thinking trigger + the story suite -**Phase:** `17_thinking_display` · **Story:** `.agent/user_stories/thinking-display.md` +**Phase:** `17_thinking_display` · **Story:** `.agents/user_stories/thinking-display.md` ## Objective Deterministic E2E coverage of the thinking display: the mock LLM gains a diff --git a/.agent/phases/complete/17_thinking_display/04_story_docs_plan_commit.md b/.agents/phases/complete/17_thinking_display/04_story_docs_plan_commit.md similarity index 90% rename from .agent/phases/complete/17_thinking_display/04_story_docs_plan_commit.md rename to .agents/phases/complete/17_thinking_display/04_story_docs_plan_commit.md index 8590e97..9cbd8b9 100644 --- a/.agent/phases/complete/17_thinking_display/04_story_docs_plan_commit.md +++ b/.agents/phases/complete/17_thinking_display/04_story_docs_plan_commit.md @@ -1,6 +1,6 @@ # Task 04 — Story file, docs, PLAN revisions, the phase commit -**Phase:** `17_thinking_display` · **Story:** `.agent/user_stories/thinking-display.md` +**Phase:** `17_thinking_display` · **Story:** `.agents/user_stories/thinking-display.md` ## Objective Record the feature where it belongs: the user story file (AGENTS.md rule @@ -10,7 +10,7 @@ precedent of phase 16), and the single atomic `--no-gpg-sign` commit with the phase moved to `complete/`. ## Work -1. `.agent/user_stories/thinking-display.md` (new — match the format of +1. `.agents/user_stories/thinking-display.md` (new — match the format of the sibling stories, e.g. `loading-feedback.md`): - Header: `**Phase:** 17_thinking_display · **E2E:** tests/e2e/test_thinking_display.py`. @@ -54,7 +54,7 @@ the phase moved to `complete/`. `BOR_STREAM_THINKING=0` kill-switch. No CDN rule, no other edits. 3. `.env.example` — verify the task-01 line (`BOR_STREAM_THINKING=1`) is present with its comment; add nothing new. -4. `.agent/PLAN.md` revisions — **record owner permission +4. `.agents/PLAN.md` revisions — **record owner permission (2026-08-23) in each note**, exactly the style phase 16 used for the A10 revision: - Header revisions line: append @@ -92,9 +92,9 @@ the phase moved to `complete/`. change). 6. Commit + phase move (last step, only when all gates are green): ```bash - git add -A .agent/ app/ frontend/ tests/ README.md .env.example + git add -A .agents/ app/ frontend/ tests/ README.md .env.example git commit --no-gpg-sign -m "feat(chat): stream model thinking over SSE and show it in a collapsible block" - mv .agent/phases/todo/17_thinking_display .agent/phases/complete/ + mv .agents/phases/todo/17_thinking_display .agents/phases/complete/ ``` ## Testing & Quality @@ -104,15 +104,15 @@ the phase moved to `complete/`. tests, and only then commit. ## Completion Criteria -- [ ] `.agent/user_stories/thinking-display.md` exists with all five +- [ ] `.agents/user_stories/thinking-display.md` exists with all five sections (header, narrative, acceptance, UI visualization, Playwright Mapping Rule). - [ ] README "Thinking" section + `.env.example` line present; - `.agent/PLAN.md` carries the §2-revision/§4/§7.4/§7.5/§9/§12 notes + `.agents/PLAN.md` carries the §2-revision/§4/§7.4/§7.5/§9/§12 notes with the 2026-08-23 owner-permission wording; no anchor text altered. - [ ] All gates green (coverage > 90%, story E2E + 4 regressions in isolation, ruff + pyright clean). - [ ] Exactly one new commit, conventional, `--no-gpg-sign`; - `.agent/phases/todo/17_thinking_display/` is now under - `.agent/phases/complete/`. + `.agents/phases/todo/17_thinking_display/` is now under + `.agents/phases/complete/`. diff --git a/.agent/phases/complete/18_follow_bottom_scroll/00_phase.md b/.agents/phases/complete/18_follow_bottom_scroll/00_phase.md similarity index 94% rename from .agent/phases/complete/18_follow_bottom_scroll/00_phase.md rename to .agents/phases/complete/18_follow_bottom_scroll/00_phase.md index a847638..4379c30 100644 --- a/.agent/phases/complete/18_follow_bottom_scroll/00_phase.md +++ b/.agents/phases/complete/18_follow_bottom_scroll/00_phase.md @@ -1,6 +1,6 @@ # Phase 18 — Scroll Control: Follow the Bottom (No Yank While Reading) -**Story:** `.agent/user_stories/follow-bottom-scroll.md` (created by task 03) +**Story:** `.agents/user_stories/follow-bottom-scroll.md` (created by task 03) **Context:** `frontend/assets/app.js` — every `scrollIntoView` call site (`addMessage`, `addTyping`, the streaming `delta` branch, and the phase-17 `thinking` branch), the `SCROLL`/`reducedMotion` constants, and @@ -149,12 +149,12 @@ conversation still lands on the latest message. `prefers-reduced-motion` still respected (the `SCROLL` constant is untouched). - [ ] PLAN carries the revisions with the 2026-08-23 owner-choice - wording; `.agent/user_stories/follow-bottom-scroll.md` exists. + wording; `.agents/user_stories/follow-bottom-scroll.md` exists. - [ ] One `--no-gpg-sign` commit (below); - `.agent/phases/todo/18_follow_bottom_scroll/` moved to - `.agent/phases/complete/`. + `.agents/phases/todo/18_follow_bottom_scroll/` moved to + `.agents/phases/complete/`. ## Commit ```bash -git add -A .agent/ frontend/ tests/ && git commit --no-gpg-sign -m "feat(ui): chat auto-scrolls only while pinned to the bottom — submitting reveals your message, scrolling up holds the viewport" +git add -A .agents/ frontend/ tests/ && git commit --no-gpg-sign -m "feat(ui): chat auto-scrolls only while pinned to the bottom — submitting reveals your message, scrolling up holds the viewport" ``` diff --git a/.agent/phases/complete/18_follow_bottom_scroll/01_follow_bottom_scroll.md b/.agents/phases/complete/18_follow_bottom_scroll/01_follow_bottom_scroll.md similarity index 98% rename from .agent/phases/complete/18_follow_bottom_scroll/01_follow_bottom_scroll.md rename to .agents/phases/complete/18_follow_bottom_scroll/01_follow_bottom_scroll.md index 3553ac5..040029b 100644 --- a/.agent/phases/complete/18_follow_bottom_scroll/01_follow_bottom_scroll.md +++ b/.agents/phases/complete/18_follow_bottom_scroll/01_follow_bottom_scroll.md @@ -1,6 +1,6 @@ # Task 01 — app.js: single scroll gate (follow-the-bottom) -**Phase:** `18_follow_bottom_scroll` · **Story:** `.agent/user_stories/follow-bottom-scroll.md` +**Phase:** `18_follow_bottom_scroll` · **Story:** `.agents/user_stories/follow-bottom-scroll.md` ## Objective All chat-page scrolling goes through one gate — `scrollReveal` — which diff --git a/.agent/phases/complete/18_follow_bottom_scroll/02_e2e_story_suite.md b/.agents/phases/complete/18_follow_bottom_scroll/02_e2e_story_suite.md similarity index 98% rename from .agent/phases/complete/18_follow_bottom_scroll/02_e2e_story_suite.md rename to .agents/phases/complete/18_follow_bottom_scroll/02_e2e_story_suite.md index d2402a5..e85e520 100644 --- a/.agent/phases/complete/18_follow_bottom_scroll/02_e2e_story_suite.md +++ b/.agents/phases/complete/18_follow_bottom_scroll/02_e2e_story_suite.md @@ -1,6 +1,6 @@ # Task 02 — E2E: the follow-the-bottom story suite -**Phase:** `18_follow_bottom_scroll` · **Story:** `.agent/user_stories/follow-bottom-scroll.md` +**Phase:** `18_follow_bottom_scroll` · **Story:** `.agents/user_stories/follow-bottom-scroll.md` ## Objective Dedicated Playwright gate for the scroll contract (A16 — one story, one diff --git a/.agent/phases/complete/18_follow_bottom_scroll/03_docs_plan_commit.md b/.agents/phases/complete/18_follow_bottom_scroll/03_docs_plan_commit.md similarity index 88% rename from .agent/phases/complete/18_follow_bottom_scroll/03_docs_plan_commit.md rename to .agents/phases/complete/18_follow_bottom_scroll/03_docs_plan_commit.md index 3494ae5..89d2530 100644 --- a/.agent/phases/complete/18_follow_bottom_scroll/03_docs_plan_commit.md +++ b/.agents/phases/complete/18_follow_bottom_scroll/03_docs_plan_commit.md @@ -1,6 +1,6 @@ # Task 03 — Story file, PLAN revisions, the phase commit -**Phase:** `18_follow_bottom_scroll` · **Story:** `.agent/user_stories/follow-bottom-scroll.md` +**Phase:** `18_follow_bottom_scroll` · **Story:** `.agents/user_stories/follow-bottom-scroll.md` ## Objective Record the change: the user story file (AGENTS.md rule 4), the PLAN @@ -8,7 +8,7 @@ revisions with the owner-choice noted, and the single atomic `--no-gpg-sign` commit with the phase moved to `complete/`. ## Work -1. `.agent/user_stories/follow-bottom-scroll.md` (new — match the +1. `.agents/user_stories/follow-bottom-scroll.md` (new — match the format of the sibling stories, e.g. `loading-feedback.md`): - Header: `**Phase:** 18_follow_bottom_scroll · **E2E:** tests/e2e/test_follow_bottom_scroll.py`. @@ -39,7 +39,7 @@ revisions with the owner-choice noted, and the single atomic unchanged. - Playwright Mapping Rule: the five scenarios of `tests/e2e/test_follow_bottom_scroll.py` verbatim from task 02. -2. `.agent/PLAN.md` revisions — **record the owner choice +2. `.agents/PLAN.md` revisions — **record the owner choice (2026-08-23, "option 1: follow-the-bottom, no pill")** in each note, style per the phase-16 A10-revision precedent: - Header revisions line: append @@ -67,9 +67,9 @@ revisions with the owner-choice noted, and the single atomic - `rg -c "scrollIntoView" frontend/assets/app.js` → 1. 5. Commit + phase move (last step, only when all gates are green): ```bash - git add -A .agent/ frontend/ tests/ + git add -A .agents/ frontend/ tests/ git commit --no-gpg-sign -m "feat(ui): chat auto-scrolls only while pinned to the bottom — submitting reveals your message, scrolling up holds the viewport" - mv .agent/phases/todo/18_follow_bottom_scroll .agent/phases/complete/ + mv .agents/phases/todo/18_follow_bottom_scroll .agents/phases/complete/ ``` ## Testing & Quality @@ -78,13 +78,13 @@ revisions with the owner-choice noted, and the single atomic the owning task's files, re-run that task's tests, then commit. ## Completion Criteria -- [ ] `.agent/user_stories/follow-bottom-scroll.md` exists with all +- [ ] `.agents/user_stories/follow-bottom-scroll.md` exists with all five sections (header, narrative, acceptance, UI visualization, Playwright Mapping Rule). -- [ ] `.agent/PLAN.md` carries the header-revision/§7.4/§12 notes with +- [ ] `.agents/PLAN.md` carries the header-revision/§7.4/§12 notes with the 2026-08-23 owner-choice wording; no anchor text altered. - [ ] All gates green (coverage, story E2E + 5 regressions in isolation, ruff + pyright, single `scrollIntoView`). - [ ] Exactly one new commit, conventional, `--no-gpg-sign`; - `.agent/phases/todo/18_follow_bottom_scroll/` is now under - `.agent/phases/complete/`. + `.agents/phases/todo/18_follow_bottom_scroll/` is now under + `.agents/phases/complete/`. diff --git a/.agent/phases/complete/19_shared_header/00_phase.md b/.agents/phases/complete/19_shared_header/00_phase.md similarity index 96% rename from .agent/phases/complete/19_shared_header/00_phase.md rename to .agents/phases/complete/19_shared_header/00_phase.md index 366f4eb..20a3dc9 100644 --- a/.agent/phases/complete/19_shared_header/00_phase.md +++ b/.agents/phases/complete/19_shared_header/00_phase.md @@ -1,6 +1,6 @@ # Phase 19 — Shared Header: auth + New Chat on every page, Sources link admin-only -**Story:** `.agent/user_stories/shared-header.md` (created by task 03) +**Story:** `.agents/user_stories/shared-header.md` (created by task 03) **Context:** the four page headers (`frontend/index.html`, `sources.html`, `document.html`, `login.html` — each hand-rolled, which is exactly why the controls "disappear" between pages), `frontend/assets/ @@ -176,12 +176,12 @@ of the A10 revision are untouched). focus-visible, no CDN tags, one header bar per page, heights unchanged. - [ ] PLAN carries the revisions with the 2026-08-23 owner-permission - wording; `.agent/user_stories/shared-header.md` exists. + wording; `.agents/user_stories/shared-header.md` exists. - [ ] One `--no-gpg-sign` commit (below); - `.agent/phases/todo/19_shared_header/` moved to - `.agent/phases/complete/`. + `.agents/phases/todo/19_shared_header/` moved to + `.agents/phases/complete/`. ## Commit ```bash -git add -A .agent/ frontend/ tests/ && git commit --no-gpg-sign -m "feat(ui): shared header — Sign in/Sign out and New Chat on every page; hide the Sources nav link from anonymous users" +git add -A .agents/ frontend/ tests/ && git commit --no-gpg-sign -m "feat(ui): shared header — Sign in/Sign out and New Chat on every page; hide the Sources nav link from anonymous users" ``` diff --git a/.agent/phases/complete/19_shared_header/01_shared_header_module.md b/.agents/phases/complete/19_shared_header/01_shared_header_module.md similarity index 98% rename from .agent/phases/complete/19_shared_header/01_shared_header_module.md rename to .agents/phases/complete/19_shared_header/01_shared_header_module.md index 298c20c..c415a69 100644 --- a/.agent/phases/complete/19_shared_header/01_shared_header_module.md +++ b/.agents/phases/complete/19_shared_header/01_shared_header_module.md @@ -1,6 +1,6 @@ # Task 01 — header.js shared module + page wiring -**Phase:** `19_shared_header` · **Story:** `.agent/user_stories/shared-header.md` +**Phase:** `19_shared_header` · **Story:** `.agents/user_stories/shared-header.md` ## Objective One shared header module drives the auth controls and the Sources nav diff --git a/.agent/phases/complete/19_shared_header/02_e2e_story_suite.md b/.agents/phases/complete/19_shared_header/02_e2e_story_suite.md similarity index 98% rename from .agent/phases/complete/19_shared_header/02_e2e_story_suite.md rename to .agents/phases/complete/19_shared_header/02_e2e_story_suite.md index fac7e06..7b13d58 100644 --- a/.agent/phases/complete/19_shared_header/02_e2e_story_suite.md +++ b/.agents/phases/complete/19_shared_header/02_e2e_story_suite.md @@ -1,6 +1,6 @@ # Task 02 — E2E: the shared-header story suite -**Phase:** `19_shared_header` · **Story:** `.agent/user_stories/shared-header.md` +**Phase:** `19_shared_header` · **Story:** `.agents/user_stories/shared-header.md` ## Objective Dedicated Playwright gate (A16 — one story, one file, isolated): the diff --git a/.agent/phases/complete/19_shared_header/03_docs_plan_commit.md b/.agents/phases/complete/19_shared_header/03_docs_plan_commit.md similarity index 89% rename from .agent/phases/complete/19_shared_header/03_docs_plan_commit.md rename to .agents/phases/complete/19_shared_header/03_docs_plan_commit.md index a393750..69cfd8d 100644 --- a/.agent/phases/complete/19_shared_header/03_docs_plan_commit.md +++ b/.agents/phases/complete/19_shared_header/03_docs_plan_commit.md @@ -1,6 +1,6 @@ # Task 03 — Story file, PLAN revisions, the phase commit -**Phase:** `19_shared_header` · **Story:** `.agent/user_stories/shared-header.md` +**Phase:** `19_shared_header` · **Story:** `.agents/user_stories/shared-header.md` ## Objective Record the change: the user story file (AGENTS.md rule 4), the PLAN @@ -9,7 +9,7 @@ choice — say so explicitly), and the single atomic `--no-gpg-sign` commit with the phase moved to `complete/`. ## Work -1. `.agent/user_stories/shared-header.md` (new — match the sibling +1. `.agents/user_stories/shared-header.md` (new — match the sibling story format): - Header: `**Phase:** 19_shared_header · **E2E:** tests/e2e/test_shared_header.py`. @@ -45,7 +45,7 @@ commit with the phase moved to `complete/`. `.auth-link` mobile icon-only rules; login page boundary. - Playwright Mapping Rule: the six scenarios of `tests/e2e/test_shared_header.py` verbatim from task 02. -2. `.agent/PLAN.md` revisions — **owner permission 2026-08-23 (this +2. `.agents/PLAN.md` revisions — **owner permission 2026-08-23 (this request)** in each note, phase-16-revision style: - Header revisions line: append `; shared header (Phase 19)`. @@ -74,9 +74,9 @@ commit with the phase moved to `complete/`. - `uv run ruff check . && uv run pyright`. 5. Commit + phase move (last step, only when all gates are green): ```bash - git add -A .agent/ frontend/ tests/ + git add -A .agents/ frontend/ tests/ git commit --no-gpg-sign -m "feat(ui): shared header — Sign in/Sign out and New Chat on every page; hide the Sources nav link from anonymous users" - mv .agent/phases/todo/19_shared_header .agent/phases/complete/ + mv .agents/phases/todo/19_shared_header .agents/phases/complete/ ``` ## Testing & Quality @@ -85,14 +85,14 @@ commit with the phase moved to `complete/`. task's files, re-run that task's tests, then commit. ## Completion Criteria -- [ ] `.agent/user_stories/shared-header.md` exists with all five +- [ ] `.agents/user_stories/shared-header.md` exists with all five sections (header, narrative, acceptance, UI visualization, Playwright Mapping Rule). -- [ ] `.agent/PLAN.md` carries the header-revision/§2-A10-note/§7.1/ +- [ ] `.agents/PLAN.md` carries the header-revision/§2-A10-note/§7.1/ §7.5/§12 notes with the 2026-08-23 owner-permission wording; the A10 decision text itself is unaltered. - [ ] All gates green (coverage, story E2E + 5 regressions in isolation, ruff + pyright). - [ ] Exactly one new commit, conventional, `--no-gpg-sign`; - `.agent/phases/todo/19_shared_header/` is now under - `.agent/phases/complete/`. + `.agents/phases/todo/19_shared_header/` is now under + `.agents/phases/complete/`. diff --git a/.agent/phases/complete/20_sources_midstream_bug/00_phase.md b/.agents/phases/complete/20_sources_midstream_bug/00_phase.md similarity index 93% rename from .agent/phases/complete/20_sources_midstream_bug/00_phase.md rename to .agents/phases/complete/20_sources_midstream_bug/00_phase.md index 06287da..5d9effd 100644 --- a/.agent/phases/complete/20_sources_midstream_bug/00_phase.md +++ b/.agents/phases/complete/20_sources_midstream_bug/00_phase.md @@ -2,7 +2,7 @@ **Source:** `TODO.md` L3 — *"Clicking "sources" while chat is generating clears chat and result will never show up"* -**Story:** `.agent/user_stories/sources-midstream.md` (created by task 02) +**Story:** `.agents/user_stories/sources-midstream.md` (created by task 02) **Context:** `frontend/assets/app.js` — the phase-14 persistence block (`STORAGE_KEY = "bor.chat.v1"`, `conversation`, `saveConversation`, `rememberBrainTurn`), the turn state machine (`UI_STATE.thinking` / @@ -111,12 +111,12 @@ restored if any). - [ ] UI Structure Check (AGENTS.md rule 5): no new UI surface — the restored partial renders through the existing bubble/thinking contract. -- [ ] `.agent/user_stories/sources-midstream.md` exists. +- [ ] `.agents/user_stories/sources-midstream.md` exists. - [ ] One `--no-gpg-sign` commit (below); - `.agent/phases/todo/20_sources_midstream_bug/` moved to - `.agent/phases/complete/`. + `.agents/phases/todo/20_sources_midstream_bug/` moved to + `.agents/phases/complete/`. ## Commit ```bash -git add -A .agent/ frontend/ tests/ && git commit --no-gpg-sign -m "fix(chat): keep the in-flight answer when navigating away mid-turn — partial answer restored on return" +git add -A .agents/ frontend/ tests/ && git commit --no-gpg-sign -m "fix(chat): keep the in-flight answer when navigating away mid-turn — partial answer restored on return" ``` diff --git a/.agent/phases/complete/20_sources_midstream_bug/01_persist_inflight_turn.md b/.agents/phases/complete/20_sources_midstream_bug/01_persist_inflight_turn.md similarity index 100% rename from .agent/phases/complete/20_sources_midstream_bug/01_persist_inflight_turn.md rename to .agents/phases/complete/20_sources_midstream_bug/01_persist_inflight_turn.md diff --git a/.agent/phases/complete/20_sources_midstream_bug/02_e2e_story_suite_commit.md b/.agents/phases/complete/20_sources_midstream_bug/02_e2e_story_suite_commit.md similarity index 94% rename from .agent/phases/complete/20_sources_midstream_bug/02_e2e_story_suite_commit.md rename to .agents/phases/complete/20_sources_midstream_bug/02_e2e_story_suite_commit.md index 28933f1..9217796 100644 --- a/.agent/phases/complete/20_sources_midstream_bug/02_e2e_story_suite_commit.md +++ b/.agents/phases/complete/20_sources_midstream_bug/02_e2e_story_suite_commit.md @@ -38,7 +38,7 @@ validation, and the single atomic commit. 4. `test_new_chat_still_clears_conversation` — regression: completed turn → `/sources.html` → click the sources-page New Chat button → lands on `/` with the empty state and `bor.chat.v1` removed. -2. `.agent/user_stories/sources-midstream.md` (new) — the short story +2. `.agents/user_stories/sources-midstream.md` (new) — the short story file matching the repo's story format (goal, the bug report verbatim from `TODO.md` L3, the owner-confirmed A1 decisions from `00_phase.md`, the E2E mapping table test-name → scenario). @@ -55,13 +55,13 @@ validation, and the single atomic commit. renders through the existing bubble/thinking contract — no new surface, no new ids, focus/contrast unchanged. 7. Write the phase report - (`.agent/reports/20_sources_midstream_bug/` — what changed, E2E + (`.agents/reports/20_sources_midstream_bug/` — what changed, E2E results, the manual-smoke note from task 01). 8. Commit (one atomic commit) and move the phase: ```bash - git add -A .agent/ frontend/ tests/ + git add -A .agents/ frontend/ tests/ git commit --no-gpg-sign -m "fix(chat): keep the in-flight answer when navigating away mid-turn — partial answer restored on return" - mv .agent/phases/todo/20_sources_midstream_bug .agent/phases/complete/ + mv .agents/phases/todo/20_sources_midstream_bug .agents/phases/complete/ ``` ## Testing & Quality diff --git a/.agent/phases/complete/21_thinking_no_scroll/00_phase.md b/.agents/phases/complete/21_thinking_no_scroll/00_phase.md similarity index 92% rename from .agent/phases/complete/21_thinking_no_scroll/00_phase.md rename to .agents/phases/complete/21_thinking_no_scroll/00_phase.md index 51a4a47..9d33b11 100644 --- a/.agent/phases/complete/21_thinking_no_scroll/00_phase.md +++ b/.agents/phases/complete/21_thinking_no_scroll/00_phase.md @@ -2,7 +2,7 @@ **Source:** `TODO.md` L4 — *"Disable scroll in the thinking window. Users don't need to scroll back through thinking, just see it live."* -**Story:** `.agent/user_stories/thinking-no-scroll.md` (created by task 02) +**Story:** `.agents/user_stories/thinking-no-scroll.md` (created by task 02) **Context:** `frontend/assets/styles.css` — `details.thinking .thinking-text` (today: `max-height: 320px; overflow-y: auto;`, i.e. a user-scrollable 320px window, ~line 444); @@ -93,12 +93,12 @@ bottom as chunks arrive. - [ ] UI Structure Check (AGENTS.md rule 5): no new surface; the block keeps its focus-visible summary, aria contract, and reduced-motion behavior. -- [ ] `.agent/user_stories/thinking-no-scroll.md` exists. +- [ ] `.agents/user_stories/thinking-no-scroll.md` exists. - [ ] One `--no-gpg-sign` commit (below); - `.agent/phases/todo/21_thinking_no_scroll/` moved to - `.agent/phases/complete/`. + `.agents/phases/todo/21_thinking_no_scroll/` moved to + `.agents/phases/complete/`. ## Commit ```bash -git add -A .agent/ frontend/ tests/ && git commit --no-gpg-sign -m "fix(ui): thinking window no longer scrolls — live 320px view pinned to the stream tail" +git add -A .agents/ frontend/ tests/ && git commit --no-gpg-sign -m "fix(ui): thinking window no longer scrolls — live 320px view pinned to the stream tail" ``` diff --git a/.agent/phases/complete/21_thinking_no_scroll/01_disable_thinking_scroll.md b/.agents/phases/complete/21_thinking_no_scroll/01_disable_thinking_scroll.md similarity index 100% rename from .agent/phases/complete/21_thinking_no_scroll/01_disable_thinking_scroll.md rename to .agents/phases/complete/21_thinking_no_scroll/01_disable_thinking_scroll.md diff --git a/.agent/phases/complete/22_background_animation/00_phase.md b/.agents/phases/complete/22_background_animation/00_phase.md similarity index 91% rename from .agent/phases/complete/22_background_animation/00_phase.md rename to .agents/phases/complete/22_background_animation/00_phase.md index a9007b9..b8065ed 100644 --- a/.agent/phases/complete/22_background_animation/00_phase.md +++ b/.agents/phases/complete/22_background_animation/00_phase.md @@ -2,7 +2,7 @@ **Source:** `TODO.md` L5 — *"Fix background animation not working, just blinking"* -**Story:** `.agent/user_stories/background-animation.md` (created by task 02) +**Story:** `.agents/user_stories/background-animation.md` (created by task 02) **Context:** `frontend/assets/styles.css` — the phase-08 animated background block (~lines 60–100): `body::before` (44px drifting grid, 1px lines at ~35% `--line` alpha, radial mask @@ -52,7 +52,7 @@ Chromium window (dev server, full page, ~15s of observation): contract. 5. **Apply the fix in `styles.css`** — document the found root cause in the phase report (screenshot before/after in - `.agent/screenshots/22_background_animation/`). + `.agents/screenshots/22_background_animation/`). ## Dependencies - `08_story_dark_tech_theme` (complete) — owns the layers, the palette, @@ -93,7 +93,7 @@ Chromium window (dev server, full page, ~15s of observation): - [ ] In a real Chromium viewport, the background visibly and smoothly animates (grid drift + glow breathe) — screenshot before/after in the phase report; owner's "just blinking" perception gone. -- [ ] Root cause documented in `.agent/reports/22_background_animation/`. +- [ ] Root cause documented in `.agents/reports/22_background_animation/`. - [ ] `uv run pytest` green; `uv run pytest --cov=app --cov-report=term-missing` ≥ today's number. - [ ] `uv run pytest tests/e2e/test_background_animation.py -v --no-cov` @@ -103,12 +103,12 @@ Chromium window (dev server, full page, ~15s of observation): - [ ] UI Structure Check (AGENTS.md rule 5): layers stay behind content (`z-index: -1`, `pointer-events: none`), no text/contrast impact, no 360px overflow. -- [ ] `.agent/user_stories/background-animation.md` exists. +- [ ] `.agents/user_stories/background-animation.md` exists. - [ ] One `--no-gpg-sign` commit (below); - `.agent/phases/todo/22_background_animation/` moved to - `.agent/phases/complete/`. + `.agents/phases/todo/22_background_animation/` moved to + `.agents/phases/complete/`. ## Commit ```bash -git add -A .agent/ frontend/ tests/ && git commit --no-gpg-sign -m "fix(ui): animated background actually animates — grid drift and glow breathe per the phase-08 design" +git add -A .agents/ frontend/ tests/ && git commit --no-gpg-sign -m "fix(ui): animated background actually animates — grid drift and glow breathe per the phase-08 design" ``` diff --git a/.agent/phases/complete/22_background_animation/02_e2e_story_suite_commit.md b/.agents/phases/complete/22_background_animation/02_e2e_story_suite_commit.md similarity index 92% rename from .agent/phases/complete/22_background_animation/02_e2e_story_suite_commit.md rename to .agents/phases/complete/22_background_animation/02_e2e_story_suite_commit.md index 8124519..706fb6e 100644 --- a/.agent/phases/complete/22_background_animation/02_e2e_story_suite_commit.md +++ b/.agents/phases/complete/22_background_animation/02_e2e_story_suite_commit.md @@ -32,7 +32,7 @@ commit. 5. `test_no_horizontal_overflow_with_layers` (regression, 360px) — viewport 360px: `document.documentElement.scrollWidth <= clientWidth` (the phase-07 pin, replicated locally). -2. `.agent/user_stories/background-animation.md` (new) — story file per +2. `.agents/user_stories/background-animation.md` (new) — story file per the repo format: goal, the bug report verbatim from `TODO.md` L5, the owner-confirmed A3 decisions + the found root cause (from task 01's report), E2E mapping table. @@ -46,13 +46,13 @@ commit. `uv run ruff check . && uv run pyright` clean. 6. **UI Structure Check** (AGENTS.md rule 5): layers stay behind content, no text/contrast impact, no overflow at 360px. -7. Finish the phase report (`.agent/reports/22_background_animation/` — +7. Finish the phase report (`.agents/reports/22_background_animation/` — E2E results + the task-01 screenshots). 8. Commit (one atomic commit) and move the phase: ```bash - git add -A .agent/ frontend/ tests/ + git add -A .agents/ frontend/ tests/ git commit --no-gpg-sign -m "fix(ui): animated background actually animates — grid drift and glow breathe per the phase-08 design" - mv .agent/phases/todo/22_background_animation .agent/phases/complete/ + mv .agents/phases/todo/22_background_animation .agents/phases/complete/ ``` ## Testing & Quality diff --git a/.agent/phases/complete/25_background_no_motion/00_phase.md b/.agents/phases/complete/25_background_no_motion/00_phase.md similarity index 93% rename from .agent/phases/complete/25_background_no_motion/00_phase.md rename to .agents/phases/complete/25_background_no_motion/00_phase.md index 4bbbb75..774b76e 100644 --- a/.agent/phases/complete/25_background_no_motion/00_phase.md +++ b/.agents/phases/complete/25_background_no_motion/00_phase.md @@ -4,7 +4,7 @@ and to the right every second and it slowly blinks brighter and darker. It should be smooth, fluxuating, dimming and brightening, but not moving. Different bright spots should slowly fade in and out." -**Story:** `.agent/user_stories/background-no-motion.md` (created by task 02) +**Story:** `.agents/user_stories/background-no-motion.md` (created by task 02) **Context:** `frontend/assets/styles.css` — the background block: `body::before` (44px grid, 1px lines at 60% `--line` alpha, widened radial mask, `animation: bg-grid-drift 60s linear infinite` → `0 0` → @@ -149,9 +149,9 @@ the block's perf note). pointer-events: none`; `` keeps the `var(--bg)` canvas and `` stays transparent (no occlusion); `prefers-reduced-motion` stills all four; no horizontal overflow at 360px (E2E tests 6–8). -- [ ] `.agent/reports/25_background_no_motion/` documents the two root +- [ ] `.agents/reports/25_background_no_motion/` documents the two root causes with before/after screenshot pairs - (`.agent/screenshots/25_background_no_motion/`). + (`.agents/screenshots/25_background_no_motion/`). - [ ] `uv run pytest` green; `uv run pytest --cov=app --cov-report=term-missing` TOTAL ≥ pre-change number (gate >90%). - [ ] `uv run pytest tests/e2e/test_background_no_motion.py -v --no-cov` @@ -161,20 +161,20 @@ the block's perf note). - [ ] `uv run ruff check . && uv run pyright` clean. - [ ] UI Structure Check (AGENTS.md rule 5): layers stay behind content, no text/contrast impact, no 360px overflow. -- [ ] `.agent/user_stories/background-no-motion.md` exists; the old +- [ ] `.agents/user_stories/background-no-motion.md` exists; the old `background-animation.md` story carries a supersession note. - [ ] One `--no-gpg-sign` commit staging **only this phase's files** (the unrelated dirty `TODO.md` must NOT be staged); - `.agent/phases/todo/25_background_no_motion/` moved to - `.agent/phases/complete/`. + `.agents/phases/todo/25_background_no_motion/` moved to + `.agents/phases/complete/`. ## Commit ```bash -git add -f .agent/phases/complete/25_background_no_motion \ - .agent/user_stories/background-no-motion.md \ - .agent/user_stories/background-animation.md \ - .agent/reports/25_background_no_motion \ - .agent/screenshots/25_background_no_motion +git add -f .agents/phases/complete/25_background_no_motion \ + .agents/user_stories/background-no-motion.md \ + .agents/user_stories/background-animation.md \ + .agents/reports/25_background_no_motion \ + .agents/screenshots/25_background_no_motion git add frontend/assets/styles.css tests/unit tests/e2e git commit --no-gpg-sign -m "fix(ui): background no longer moves — static grid, three glow spots fading in and out on their own slow cycles (owner 2026-08-25)" ``` diff --git a/.agent/phases/complete/25_background_no_motion/02_e2e_story_suite_commit.md b/.agents/phases/complete/25_background_no_motion/02_e2e_story_suite_commit.md similarity index 90% rename from .agent/phases/complete/25_background_no_motion/02_e2e_story_suite_commit.md rename to .agents/phases/complete/25_background_no_motion/02_e2e_story_suite_commit.md index 801d1e5..685429e 100644 --- a/.agent/phases/complete/25_background_no_motion/02_e2e_story_suite_commit.md +++ b/.agents/phases/complete/25_background_no_motion/02_e2e_story_suite_commit.md @@ -1,6 +1,6 @@ # Task 02 — Story E2E Suite, Regression Adaptations, Story File, Commit -**Phase:** `25_background_no_motion` · **Story:** `.agent/user_stories/background-no-motion.md` +**Phase:** `25_background_no_motion` · **Story:** `.agents/user_stories/background-no-motion.md` ## Objective Prove the new behavior in a real Chromium viewport (no movement, @@ -79,7 +79,7 @@ commit. - `test_reduced_motion_honored` — assert **all four** pseudo-layers (body `::before`/`::after` + documentElement `::before`/`::after`) report `animationName` `"none"` and keep their images. -4. **`.agent/user_stories/background-no-motion.md`** — the story file, in +4. **`.agents/user_stories/background-no-motion.md`** — the story file, in the repo's story format (model it on `background-animation.md`): verbatim owner report (2026-08-25); Given/When/Then narrative; root causes (sub-pixel 0.73px/s grid drift = once-per-second down-right @@ -90,11 +90,11 @@ commit. Visualization & Structure (the four layers, stacking/no-occlusion, opacity-only motion, reduced-motion); Playwright Mapping Rule (test → `tests/e2e/test_background_no_motion.py`). -5. **`.agent/user_stories/background-animation.md`** — add a short +5. **`.agents/user_stories/background-animation.md`** — add a short supersession note at the top (the motion design is superseded by the owner direction 2026-08-25 — see `background-no-motion.md`); do not rewrite the phase-22 history. -6. **`.agent/reports/25_background_no_motion/`** — short report: the two +6. **`.agents/reports/25_background_no_motion/`** — short report: the two root causes (with the phase-22 measurements as context), the design change, and the screenshot pairs: the task-01 `before.png`/ `before_4s.png` (jitter + uniform pulse) plus a new `after.png`/ @@ -115,17 +115,17 @@ commit. 8. **One atomic commit** — stage **only this phase's files**; the unrelated dirty `TODO.md` in the worktree must NOT be staged: ```bash - mv .agent/phases/todo/25_background_no_motion .agent/phases/complete/25_background_no_motion - git add -f .agent/phases/complete/25_background_no_motion \ - .agent/user_stories/background-no-motion.md \ - .agent/user_stories/background-animation.md \ - .agent/reports/25_background_no_motion \ - .agent/screenshots/25_background_no_motion + mv .agents/phases/todo/25_background_no_motion .agents/phases/complete/25_background_no_motion + git add -f .agents/phases/complete/25_background_no_motion \ + .agents/user_stories/background-no-motion.md \ + .agents/user_stories/background-animation.md \ + .agents/reports/25_background_no_motion \ + .agents/screenshots/25_background_no_motion git add frontend/assets/styles.css tests/unit tests/e2e git commit --no-gpg-sign -m "fix(ui): background no longer moves — static grid, three glow spots fading in and out on their own slow cycles (owner 2026-08-25)" ``` (Move the directory first so the committed copy lives in `complete/`; - `.agent/` is gitignored by design, hence `git add -f`.) + `.agents/` is gitignored by design, hence `git add -f`.) ## Testing & Quality - The new E2E suite is the story gate (A16): green **in isolation**; @@ -146,4 +146,4 @@ commit. the report + four screenshots exist. - [ ] Exactly one `--no-gpg-sign` commit, staging only this phase's files (`git status` shows no staged `TODO.md`); the phase - directory now lives in `.agent/phases/complete/`. + directory now lives in `.agents/phases/complete/`. diff --git a/.agent/phases/complete/27_global_tuning/00_phase.md b/.agents/phases/complete/27_global_tuning/00_phase.md similarity index 95% rename from .agent/phases/complete/27_global_tuning/00_phase.md rename to .agents/phases/complete/27_global_tuning/00_phase.md index 3320ffa..40b74e1 100644 --- a/.agent/phases/complete/27_global_tuning/00_phase.md +++ b/.agents/phases/complete/27_global_tuning/00_phase.md @@ -1,7 +1,7 @@ # Phase 27 — Global Tuning Manager **Source:** `TODO.md L3 — "Add a way to add 'global tuning' without having a chat to reply to. Also previous tunes should be editable."` -**Story:** `.agent/user_stories/global-tuning.md` +**Story:** `.agents/user_stories/global-tuning.md` **Context:** Phase 15 added steering notes (owner instructions injected into every system prompt as the `` section); phase 16 gated the whole `/api/steering` router behind `require_admin`. The current UI only lets the admin **create** a note by pressing "Tune" under a completed chat bubble, and the header "Tuning" panel lists notes newest-first with **delete-only** per note. There is no way to add a note without a chat, and no way to edit an existing one. ## Objective @@ -33,8 +33,8 @@ Give the admin a **Global Tuning** page (`/tuning.html`) where notes can be crea - [ ] `uv run pytest tests/e2e/test_global_tuning.py -v --no-cov` green in isolation. - [ ] `uv run ruff check . && uv run pyright` clean. - [ ] UI Structure Check (AGENTS.md rule 5): tuning page — landmarks, labeled controls, contrast ≥4.5:1, focus-visible, ≥44px targets, centered column, no CDN. -- [ ] `.agent/user_stories/global-tuning.md` exists. -- [ ] One `--no-gpg-sign` commit staging only this phase's files; `.agent/phases/todo/27_global_tuning/` moved to `.agent/phases/complete/`. +- [ ] `.agents/user_stories/global-tuning.md` exists. +- [ ] One `--no-gpg-sign` commit staging only this phase's files; `.agents/phases/todo/27_global_tuning/` moved to `.agents/phases/complete/`. ## Locked decisions - **A10 untouched** — `PUT /api/steering/{note_id}` is a new stateless route under `/api`; the API stays stateless, admin-only via `require_admin` (the existing gate). diff --git a/.agent/phases/complete/28_git_based_sources/00_phase.md b/.agents/phases/complete/28_git_based_sources/00_phase.md similarity index 95% rename from .agent/phases/complete/28_git_based_sources/00_phase.md rename to .agents/phases/complete/28_git_based_sources/00_phase.md index 31e03d4..f3e50b6 100644 --- a/.agent/phases/complete/28_git_based_sources/00_phase.md +++ b/.agents/phases/complete/28_git_based_sources/00_phase.md @@ -1,7 +1,7 @@ # Phase 28 — Git-Based Sources **Source:** `TODO.md L5 — "We shouldn't be hard-coding Homelab and Deployments. Instead, a list of git links should be specified. import_docs should clone or pull to a dedicated repository location and then index all the specified repository code."` -**Story:** `.agent/user_stories/git-sources.md` +**Story:** `.agents/user_stories/git-sources.md` **Context:** Phase 11 / the README document the import workflow. `scripts/import_docs.py` currently defaults to the hardcoded `DEFAULT_SOURCES = [Path("~/Homelab"), Path("~/Deployments")]` (repeatable via `--source`). The importer (`app/rag/importer.py::import_sources`) already walks any list of local directories — it needs no change to the walking logic, only to receive the resolved local paths. ## Objective @@ -29,8 +29,8 @@ Replace the hardcoded `~/Homelab` + `~/Deployments` default with a **list of git - [ ] `.env.example` documents `BOR_GIT_SOURCES` + `BOR_SOURCES_DIR`; README import section rewritten. - [ ] `uv run pytest` green; `uv run pytest --cov=app --cov-report=term-missing` TOTAL ≥ pre-change number. - [ ] `uv run ruff check . && uv run pyright` clean. -- [ ] `.agent/user_stories/git-sources.md` exists. -- [ ] One `--no-gpg-sign` commit staging only this phase's files; `.agent/phases/todo/28_git_based_sources/` moved to `.agent/phases/complete/`. +- [ ] `.agents/user_stories/git-sources.md` exists. +- [ ] One `--no-gpg-sign` commit staging only this phase's files; `.agents/phases/todo/28_git_based_sources/` moved to `.agents/phases/complete/`. ## Locked decisions - **A13 untouched** — no DB migration; the importer's `documents`/`chunks` schema is unchanged (source/path are stored as before, keyed by the repo-relative path). diff --git a/.agent/phases/complete/34_consistent_navbar/00_phase.md b/.agents/phases/complete/34_consistent_navbar/00_phase.md similarity index 97% rename from .agent/phases/complete/34_consistent_navbar/00_phase.md rename to .agents/phases/complete/34_consistent_navbar/00_phase.md index db07de5..d8a4eb7 100644 --- a/.agent/phases/complete/34_consistent_navbar/00_phase.md +++ b/.agents/phases/complete/34_consistent_navbar/00_phase.md @@ -1,7 +1,7 @@ # Phase 34 — One Navbar on Every Page **Source:** `TODO.md` L3 — "I want the navbar to be consistent between every page. I don't want buttons to pop in and out of existance. Just keep all those buttons active across all tabs." -**Story:** `.agent/user_stories/nav-consistency.md` +**Story:** `.agents/user_stories/nav-consistency.md` **Context:** The shared header (phase 19, `frontend/assets/header.js`) + the Tuning nav link (phase 29) already standardize nav + auth on chat / sources / tuning — but `document.html` still uses the separate `.doc-header` variant (back + title + actions, **no nav at all**), `login.html` misses the Tuning link, and two functional controls remain page-scoped: the Tuning steering toggle + panel (chat only, logic in `app.js`) and the Sync sources button (Sources only, logic in `sources.js`). Owner confirmation (2026-08-26): the bar must be identical on **all** pages — nav, Tuning toggle, Sync, New chat, and the auth pair all present everywhere; the locked A10 UI revision stays (admin-only controls hidden for anonymous, active for the admin on every tab). ## Objective @@ -36,7 +36,7 @@ Make the header bar **identical on all five pages** (chat, sources, document vie - [ ] Regressions green in isolation: `test_header_consistency.py`, `test_shared_header.py`, `test_document_back_navigation.py`, `test_document_viewer.py`, `test_steering.py`, `test_global_tuning.py`, `test_sync_button.py`, `test_tuning_nav_link.py`, `test_smoke.py`, `test_chat_rag.py`, `test_admin_auth.py`. - [ ] `uv run ruff check . && uv run pyright` clean (no Python change, but run the gate). - [ ] UI Structure Check (AGENTS.md rule 5): landmarks / labels / contrast ≥4.5:1 / focus-visible preserved; no CDN (rule 6). -- [ ] One `--no-gpg-sign` commit staging only this phase's files; `.agent/phases/todo/34_consistent_navbar/` moved to `.agent/phases/complete/`. +- [ ] One `--no-gpg-sign` commit staging only this phase's files; `.agents/phases/todo/34_consistent_navbar/` moved to `.agents/phases/complete/`. ## Locked decisions - **A10 UI revision preserved** — admin-only controls (Sources / Tuning nav links, Sync button) ship hidden and are revealed only for the signed-in admin; anonymous visitors get the reduced bar, identically on every page (owner confirmation 2026-08-26 — "hidden for anon, visible for admin"). diff --git a/.agent/phases/complete/34_consistent_navbar/01_steering_moves_to_module.md b/.agents/phases/complete/34_consistent_navbar/01_steering_moves_to_module.md similarity index 98% rename from .agent/phases/complete/34_consistent_navbar/01_steering_moves_to_module.md rename to .agents/phases/complete/34_consistent_navbar/01_steering_moves_to_module.md index 7dfaa8c..2116f2d 100644 --- a/.agent/phases/complete/34_consistent_navbar/01_steering_moves_to_module.md +++ b/.agents/phases/complete/34_consistent_navbar/01_steering_moves_to_module.md @@ -1,7 +1,7 @@ # Task 01 — Steering toggle + panel move into header.js **Phase:** `34_consistent_navbar` · **Source:** `TODO.md:3 — "I want the navbar to be consistent between every page. I don't want buttons to pop in and out of existance. Just keep all those buttons active across all tabs."` -**Story:** `.agent/user_stories/nav-consistency.md` +**Story:** `.agents/user_stories/nav-consistency.md` ## Objective Make `frontend/assets/header.js` the owner of the steering toggle + panel behavior (today in `frontend/assets/app.js`), so the toggle can sit in every page's header (task 03) with zero page-script duplication. The chat page's behavior — panel open/close, list, count badge, per-note delete, per-bubble Tune form — must be byte-for-byte the same from the user's perspective. diff --git a/.agent/phases/complete/34_consistent_navbar/02_sync_and_chat_moves_to_module.md b/.agents/phases/complete/34_consistent_navbar/02_sync_and_chat_moves_to_module.md similarity index 99% rename from .agent/phases/complete/34_consistent_navbar/02_sync_and_chat_moves_to_module.md rename to .agents/phases/complete/34_consistent_navbar/02_sync_and_chat_moves_to_module.md index 0021f27..6a97077 100644 --- a/.agent/phases/complete/34_consistent_navbar/02_sync_and_chat_moves_to_module.md +++ b/.agents/phases/complete/34_consistent_navbar/02_sync_and_chat_moves_to_module.md @@ -1,7 +1,7 @@ # Task 02 — Sync state machine + New chat + sign-in next move into header.js **Phase:** `34_consistent_navbar` · **Source:** `TODO.md:3 — "I want the navbar to be consistent between every page. I don't want buttons to pop in and out of existance. Just keep all those buttons active across all tabs."` -**Story:** `.agent/user_stories/nav-consistency.md` +**Story:** `.agents/user_stories/nav-consistency.md` ## Objective Make `header.js` the owner of the Sync button state machine (today in `sources.js`), the single New chat binding (today duplicated across `app.js` / `sources.js` / `tuning.js` / `document.js`), and the sign-in `?next=` derivation — so the same markup on any page (task 03) behaves identically. diff --git a/.agent/phases/complete/34_consistent_navbar/03_full_header_all_pages.md b/.agents/phases/complete/34_consistent_navbar/03_full_header_all_pages.md similarity index 98% rename from .agent/phases/complete/34_consistent_navbar/03_full_header_all_pages.md rename to .agents/phases/complete/34_consistent_navbar/03_full_header_all_pages.md index 36d4b95..d50c584 100644 --- a/.agent/phases/complete/34_consistent_navbar/03_full_header_all_pages.md +++ b/.agents/phases/complete/34_consistent_navbar/03_full_header_all_pages.md @@ -1,7 +1,7 @@ # Task 03 — The identical full header on all five pages **Phase:** `34_consistent_navbar` · **Source:** `TODO.md:3 — "I want the navbar to be consistent between every page. I don't want buttons to pop in and out of existance. Just keep all those buttons active across all tabs."` -**Story:** `.agent/user_stories/nav-consistency.md` +**Story:** `.agents/user_stories/nav-consistency.md` ## Objective Ship the **identical header block** on all five pages — brand, nav [Chat, Sources, Tuning], Tuning toggle, Sync sources, New chat, Sign in / Sign out — and the `#steering-panel` section on every page; the document viewer keeps back + title in a second titlebar row; the login page finally carries the full header. diff --git a/.agent/phases/complete/34_consistent_navbar/04_viewer_titlebar_styles.md b/.agents/phases/complete/34_consistent_navbar/04_viewer_titlebar_styles.md similarity index 98% rename from .agent/phases/complete/34_consistent_navbar/04_viewer_titlebar_styles.md rename to .agents/phases/complete/34_consistent_navbar/04_viewer_titlebar_styles.md index 19f1776..73b47f0 100644 --- a/.agent/phases/complete/34_consistent_navbar/04_viewer_titlebar_styles.md +++ b/.agents/phases/complete/34_consistent_navbar/04_viewer_titlebar_styles.md @@ -1,7 +1,7 @@ # Task 04 — Two-row viewer header styles + sync failed state **Phase:** `34_consistent_navbar` · **Source:** `TODO.md:3 — "I want the navbar to be consistent between every page. I don't want buttons to pop in and out of existance. Just keep all those buttons active across all tabs."` -**Story:** `.agent/user_stories/nav-consistency.md` +**Story:** `.agents/user_stories/nav-consistency.md` ## Objective Style the document viewer's new two-row header (standard row + titlebar row) so row 1 is visually indistinguishable from the other pages' bars, and give the Sync button a visible failed state on pages that have no error banner (every page except Sources). diff --git a/.agent/phases/complete/34_consistent_navbar/05_e2e_and_contract_update.md b/.agents/phases/complete/34_consistent_navbar/05_e2e_and_contract_update.md similarity index 96% rename from .agent/phases/complete/34_consistent_navbar/05_e2e_and_contract_update.md rename to .agents/phases/complete/34_consistent_navbar/05_e2e_and_contract_update.md index ccd3856..d077353 100644 --- a/.agent/phases/complete/34_consistent_navbar/05_e2e_and_contract_update.md +++ b/.agents/phases/complete/34_consistent_navbar/05_e2e_and_contract_update.md @@ -1,7 +1,7 @@ # Task 05 — Story E2E + contract-suite updates + regression pass **Phase:** `34_consistent_navbar` · **Source:** `TODO.md:3 — "I want the navbar to be consistent between every page. I don't want buttons to pop in and out of existance. Just keep all those buttons active across all tabs."` -**Story:** `.agent/user_stories/nav-consistency.md` +**Story:** `.agents/user_stories/nav-consistency.md` ## Objective Prove the contract with the story's dedicated Playwright suite — identical visible header control inventory on all five pages for each role — update the two pre-existing contract suites that encoded the old viewer bar, and run the full regression list. @@ -18,7 +18,7 @@ Prove the contract with the story's dedicated Playwright suite — identical vis 4. **Regression pass — each in isolation** (`uv run pytest tests/e2e/.py -v --no-cov`): `test_header_consistency.py`, `test_shared_header.py`, `test_document_back_navigation.py`, `test_document_viewer.py`, `test_steering.py`, `test_global_tuning.py`, `test_sync_button.py`, `test_tuning_nav_link.py`, `test_smoke.py`, `test_chat_rag.py`, `test_admin_auth.py`. Fix fallout in the suites above where the old contract is encoded; fix app code where behavior genuinely changed. 5. Full gate: `uv run pytest` (unit + integration), `uv run pytest --cov=app --cov-report=term-missing` (TOTAL unchanged, >90%), `uv run ruff check . && uv run pyright`. 6. **UI Structure Check** (AGENTS.md rule 5) on the five headers + the new titlebar: landmarks (`
`, `