refactor(agents): migrate .agent/ planning tree to .agents/

Standardize on the .agents/ directory (shared with project skills):
phases/, user_stories/, reports/, screenshots/, validate.sh, and
phase-sessions/ + pipeline.log all move to .agents/ (git mv preserves
history; runtime artifacts move alongside).

Updates every reference in AGENTS.md, README.md, .gitignore, app
docstrings, and test story headers. Historical KB content in data/
and the runtime pipeline.log transcript are left untouched.
This commit is contained in:
2026-09-05 10:57:07 -04:00
parent 766702c750
commit dbf2af26c6
1118 changed files with 664 additions and 664 deletions
@@ -0,0 +1,10 @@
All done. Final report:
**Task 01 complete — nav label swap + pre-existing defect remediation**
- **Swap as specced**: all six pages now render `#nav-sources` → "RAG", `#nav-git-sources` → "Sources"; ids/hrefs/`hidden`/`is-active` byte-identical; `header.js` changed in two comment blocks only.
- **Gates**: 794 unit+integration passed; ruff clean; pyright 0 errors; `app/` coverage 99%.
- **All 42 E2E suites run in isolation**: green except 3 label-text assertions (`test_mobile_hamburger_nav` LINK_TEXTS ×2, `test_git_sources_admin` ×1) — exactly task 02's scope, left untouched.
- **Deviation (rule 8)**: the owner's ad-hoc commit `03bead0` (sync button → Sources page, New chat → chat page only, dark-red rebrand, steering-toggle removal) left 36 unit + ~20 E2E failures. Fixed one real bug: `sources.js` fed `fmtSyncResult(status)` instead of `status.detail` (all counts read 0).
- **Stale-test updates beyond markup-only scope**: 5 unit files pinned to the new documented architecture; 15 E2E suites updated (rebrand palette pins `#0f0a0a`/`#1a0f0f`/`#2d0a0a`/`#fca5a5`, sync-trigger helpers navigate to `/sources.html`, New-chat presence asserts → chat-page-only, viewport-independent admin probe via `#nav-sources` reveal instead of bar sign-out visibility).
- **Not done**: no commit (task 03 commits), `.agents/` untouched, task 02 not started.
@@ -0,0 +1,61 @@
........................................................................ [ 9%]
........................................................................ [ 18%]
........................................................................ [ 27%]
........................................................................ [ 36%]
........................................................................ [ 45%]
........................................................................ [ 54%]
........................................................................ [ 63%]
........................................................................ [ 72%]
........................................................................ [ 81%]
........................................................................ [ 90%]
........................................................................ [ 99%]
.. [100%]
=============================== warnings summary ===============================
.venv/lib/python3.13/site-packages/fastapi/testclient.py:1
/var/home/ducoterra/Projects/Personal/brain_of_reese/.venv/lib/python3.13/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
from starlette.testclient import TestClient as TestClient # noqa
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================ tests coverage ================================
_______________ coverage: platform linux, python 3.13.13-final-0 _______________
Name Stmts Miss Cover
--------------------------------------------
app/__init__.py 1 0 100%
app/api/__init__.py 0 0 100%
app/api/auth.py 22 0 100%
app/api/chat.py 122 0 100%
app/api/config.py 7 0 100%
app/api/docs.py 23 0 100%
app/api/git_sources.py 66 0 100%
app/api/health.py 10 0 100%
app/api/steering.py 42 0 100%
app/api/suggestions.py 8 0 100%
app/api/sync.py 81 0 100%
app/config.py 71 0 100%
app/core/__init__.py 0 0 100%
app/core/auth.py 20 0 100%
app/core/caching.py 92 0 100%
app/core/debugging.py 29 2 93%
app/core/logging.py 13 0 100%
app/db.py 21 0 100%
app/main.py 44 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 72 0 100%
app/rag/chunker.py 206 4 98%
app/rag/git_sources.py 14 0 100%
app/rag/importer.py 173 3 98%
app/rag/llm.py 186 0 100%
app/rag/overview.py 71 0 100%
app/rag/prompts.py 65 0 100%
app/rag/retriever.py 94 3 97%
app/rag/suggestions.py 27 0 100%
app/rag/summarizer.py 24 0 100%
app/schemas.py 99 0 100%
--------------------------------------------
TOTAL 1763 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK
@@ -0,0 +1,19 @@
All gates green. Task 02 complete.
**Report — Phase 48, Task 02 (existing test labels)**
Implemented:
- `test_git_sources_admin.py`: `to_have_text("Git sources")` → `"Sources"` + 2 label comments updated
- `test_mobile_hamburger_nav.py`: `LINK_TEXTS` → `("Chat", "RAG", "Sources", "Tuning")` + 2 comment updates
- Comments-only drift fixes: `test_shared_header.py` (docstring + section header → "RAG"), `test_nav_consistency.py` (2 comments, phase-35 history kept), `tests/unit/test_shared_header.py` (docstring)
- Defect fixes in prior work (pre-existing failures): stale `querySelector("#sign-in-link")` unit assertion → `.sign-in-link` class-based toggle; stale viewport-dependent sign-in *visibility* probes in `test_mobile_hamburger_nav.py::_wait_settled_anonymous` and `test_shared_header.py::assert_shared_bar` → attribute-based `wait_for_function` (mirrors the existing admin probe; phase-46 CSS hides the bar copy at ≤640px)
Results (all green):
- `uv run pytest tests/unit tests/integration -q` → 794 passed; `uv run pytest --cov=app` → TOTAL 99%
- `uv run ruff check . && uv run pyright` → clean, 0 errors
- Isolated E2E: `test_git_sources_admin.py` 6 passed, `test_mobile_hamburger_nav.py` 7 passed, `test_shared_header.py` 6, `test_nav_consistency.py` 6, `test_header_consistency.py` 3, `test_sources_midstream_bug.py` 4, `test_smoke.py` 3
- Grep criterion: only phase-history comments quote "Git sources" ("then"/"shipped as") — none as the current label
Decisions: two comment-only fixes beyond the enumerated list (unit docstring; hamburger docstring line "clicking 'RAG'") — same drift class as work item 3. No commits/moves made (task 03 owns those).
Next pending task: `.agents/phases/todo/48_nav_rename_sources/03_story_e2e_regression_commit.md`
@@ -0,0 +1,61 @@
........................................................................ [ 9%]
........................................................................ [ 18%]
........................................................................ [ 27%]
........................................................................ [ 36%]
........................................................................ [ 45%]
........................................................................ [ 54%]
........................................................................ [ 63%]
........................................................................ [ 72%]
........................................................................ [ 81%]
........................................................................ [ 90%]
........................................................................ [ 99%]
.. [100%]
=============================== warnings summary ===============================
.venv/lib/python3.13/site-packages/fastapi/testclient.py:1
/var/home/ducoterra/Projects/Personal/brain_of_reese/.venv/lib/python3.13/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
from starlette.testclient import TestClient as TestClient # noqa
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================ tests coverage ================================
_______________ coverage: platform linux, python 3.13.13-final-0 _______________
Name Stmts Miss Cover
--------------------------------------------
app/__init__.py 1 0 100%
app/api/__init__.py 0 0 100%
app/api/auth.py 22 0 100%
app/api/chat.py 122 0 100%
app/api/config.py 7 0 100%
app/api/docs.py 23 0 100%
app/api/git_sources.py 66 0 100%
app/api/health.py 10 0 100%
app/api/steering.py 42 0 100%
app/api/suggestions.py 8 0 100%
app/api/sync.py 81 0 100%
app/config.py 71 0 100%
app/core/__init__.py 0 0 100%
app/core/auth.py 20 0 100%
app/core/caching.py 92 0 100%
app/core/debugging.py 29 2 93%
app/core/logging.py 13 0 100%
app/db.py 21 0 100%
app/main.py 44 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 72 0 100%
app/rag/chunker.py 206 4 98%
app/rag/git_sources.py 14 0 100%
app/rag/importer.py 173 3 98%
app/rag/llm.py 186 0 100%
app/rag/overview.py 71 0 100%
app/rag/prompts.py 65 0 100%
app/rag/retriever.py 94 3 97%
app/rag/suggestions.py 27 0 100%
app/rag/summarizer.py 24 0 100%
app/schemas.py 99 0 100%
--------------------------------------------
TOTAL 1763 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK
@@ -0,0 +1,10 @@
**Phase 48 task 03 complete — all gates green, committed as `872a07c`.**
- Implemented `tests/e2e/test_nav_rename_sources.py` (4 tests: admin labels/order/markers on all six pages incl. login redirect-suppression + seeded viewer, click-navigation with `is-active`, anonymous ship-hidden contract, untouched `#sync-label`/`#doc-back` guards)
- Story E2E in isolation: `uv run pytest tests/e2e/test_nav_rename_sources.py -v --no-cov` → **4 passed**
- All 8 regression suites green in isolation: nav_consistency 6, shared_header 6, mobile_hamburger_nav 7, git_sources_admin 6, header_consistency 3, sources_midstream_bug 4, smoke 3, tuning_nav_link 4 — none needed further label fixes
- `uv run pytest --cov=app --cov-report=term-missing` → **794 passed, TOTAL 99%** (>90%, unchanged — frontend-only); `uv run ruff check .` clean; `uv run pyright` → 0 errors
- UI Structure Check: labeled `<a>`s in `<nav aria-label="Primary">` on all six pages, labels-only change, no CDN (no-CDN integration test green)
- Decision: staged whole phase files per task; commit body notes the six pages + header.js also carry the owner's same-day in-flight header rework (mobile sign-in copy, sync ship-hidden) already in the tree
- Committed 17 files (`--no-gpg-sign`): 6 HTML + header.js + 5 test files + story + moved `complete/48_nav_rename_sources`; `todo/` no longer lists 48
- Next pending: phase **49_archive_upload_sources** (`.agents/phases/todo/`)
@@ -0,0 +1,61 @@
........................................................................ [ 9%]
........................................................................ [ 18%]
........................................................................ [ 27%]
........................................................................ [ 36%]
........................................................................ [ 45%]
........................................................................ [ 54%]
........................................................................ [ 63%]
........................................................................ [ 72%]
........................................................................ [ 81%]
........................................................................ [ 90%]
........................................................................ [ 99%]
.. [100%]
=============================== warnings summary ===============================
.venv/lib/python3.13/site-packages/fastapi/testclient.py:1
/var/home/ducoterra/Projects/Personal/brain_of_reese/.venv/lib/python3.13/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
from starlette.testclient import TestClient as TestClient # noqa
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================ tests coverage ================================
_______________ coverage: platform linux, python 3.13.13-final-0 _______________
Name Stmts Miss Cover
--------------------------------------------
app/__init__.py 1 0 100%
app/api/__init__.py 0 0 100%
app/api/auth.py 22 0 100%
app/api/chat.py 122 0 100%
app/api/config.py 7 0 100%
app/api/docs.py 23 0 100%
app/api/git_sources.py 66 0 100%
app/api/health.py 10 0 100%
app/api/steering.py 42 0 100%
app/api/suggestions.py 8 0 100%
app/api/sync.py 81 0 100%
app/config.py 71 0 100%
app/core/__init__.py 0 0 100%
app/core/auth.py 20 0 100%
app/core/caching.py 92 0 100%
app/core/debugging.py 29 2 93%
app/core/logging.py 13 0 100%
app/db.py 21 0 100%
app/main.py 44 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 72 0 100%
app/rag/chunker.py 206 4 98%
app/rag/git_sources.py 14 0 100%
app/rag/importer.py 173 3 98%
app/rag/llm.py 186 0 100%
app/rag/overview.py 71 0 100%
app/rag/prompts.py 65 0 100%
app/rag/retriever.py 94 3 97%
app/rag/suggestions.py 27 0 100%
app/rag/summarizer.py 24 0 100%
app/schemas.py 99 0 100%
--------------------------------------------
TOTAL 1763 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK