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:
+12
@@ -0,0 +1,12 @@
|
||||
All green. Final report:
|
||||
|
||||
**Phase 46 · Task 01 — hamburger markup (six pages) + mobile dropdown CSS: complete**
|
||||
|
||||
- **Markup:** identical `#nav-toggle` button (`aria-expanded="false"`, `aria-controls="app-nav"`, `aria-label="Menu"`, aria-hidden 3-line SVG) inserted before the nav + `id="app-nav"` on all six pages (index, sources, document, git-sources, login, tuning); links untouched (no duplication).
|
||||
- **CSS:** global `.nav-toggle { display: none }` (desktop byte-identical); ≤640px block: 44px toggle + hover + 20px icon, `.app-nav` edge-to-edge absolute dropdown (z-index 21 = header 20+1, `var(--shadow-lg)`), closed state invisible/non-interactive, `.is-open` state, 180ms slide+fade pair, 1rem/0.75rem menu rows; superseded 0.72rem/0.05rem squeeze rules deleted; 900px tablet block, action pills, 58px height untouched; dedicated reduced-motion block stills the transition.
|
||||
- **New unit suite** `tests/unit/test_hamburger_nav.py` (10 tests): six-page toggle/nav pins, desktop-hidden pin, dropdown/is-open/180ms/menu-row pins, reduced-motion override, supersede + untouched-block checks.
|
||||
- **Results:** `uv run pytest --cov=app --cov-report=term` → 766 passed, TOTAL 99% (>90%, unchanged — frontend-only); `uv run ruff check .` clean; `uv run pyright` → 0 errors.
|
||||
- **Regression E2E (in isolation, per A16):** test_nav_consistency 6 ✓, test_header_consistency 3 ✓, test_shared_header 6 ✓, test_responsive_polish 7 ✓ (incl. 360/375px no-overflow), test_tuning_nav_link 4 ✓.
|
||||
- **Defect fixed:** `test_shared_header.py::test_mobile_bar_fits_and_heights_held` pinned pre-phase-46 behavior (inline nav visible at 375px) — adapted `assert_shared_bar` with a `mobile=` branch (hamburger visible, `#app-nav` closed/hidden) with the phase-46 owner permission recorded in comments, per repo convention.
|
||||
- **Notable:** added `.nav-toggle svg` 20px sizing (unsized inline SVG defaults to 300px and would break the 360px no-overflow criterion — required addition beyond the task's exact rule list). No commit — the atomic phase-46 commit belongs to task 03.
|
||||
- **Next pending task:** `02_toggle_behavior.md` (phase 46).
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
........................................................................ [ 9%]
|
||||
........................................................................ [ 18%]
|
||||
........................................................................ [ 28%]
|
||||
........................................................................ [ 37%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 56%]
|
||||
........................................................................ [ 65%]
|
||||
........................................................................ [ 75%]
|
||||
........................................................................ [ 84%]
|
||||
........................................................................ [ 93%]
|
||||
.............................................. [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
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
Task 02 complete — all green.
|
||||
|
||||
**Implemented**
|
||||
- `frontend/assets/header.js`: module-owned hamburger binding (same import-time pattern as sign-out) — `setNavMenu` syncs `.is-open` + `aria-expanded`; click toggle, delegated `a`-click close, Esc close with focus return to the toggle, `matchMedia("(max-width: 640px)")` change-close with `addListener` fallback; `navToggle && appNav` null-safe no-op guard; module docstring gained the phase-46 bullet. Binding toggles only the container — whoami `hidden` links untouched.
|
||||
- `tests/unit/test_hamburger_nav.py`: +7 JS pins (null-safe lookups/guard, dual class+aria sync, click toggle off current state, delegated link close, Esc+refocus, resize-close, container-only contract).
|
||||
|
||||
**Results**
|
||||
- `uv run pytest` → 773 passed; `uv run pytest --cov=app` → TOTAL **99%** (unchanged, >90%)
|
||||
- `uv run ruff check .` → All checks passed; `uv run pyright` → 0 errors
|
||||
- `node --check frontend/assets/header.js` → OK
|
||||
- Regression E2E at checkpoint (DB up): `test_shared_header.py` 6/6; `test_nav_consistency` + `test_header_consistency` + `test_responsive_polish` + `test_tuning_nav_link` → 20 passed, all in isolation
|
||||
|
||||
**Decisions**: no commit made — task 03 owns the phase's atomic commit; working tree keeps task 01+02 changes for it. One comment in the task's code block was corrected for accuracy (the sync failure modal also owns a document-level Esc that acts only while open).
|
||||
|
||||
**Next pending task**: `46_mobile_hamburger_nav/03_hamburger_e2e_and_commit.md`
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
........................................................................ [ 9%]
|
||||
........................................................................ [ 18%]
|
||||
........................................................................ [ 27%]
|
||||
........................................................................ [ 37%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 55%]
|
||||
........................................................................ [ 65%]
|
||||
........................................................................ [ 74%]
|
||||
........................................................................ [ 83%]
|
||||
........................................................................ [ 93%]
|
||||
..................................................... [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
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
**Phase 46 task 03 complete** — commit `6be692d feat(header): hamburger dropdown nav on mobile (owner permission)` (15 files, `--no-gpg-sign`, includes the todo/→complete/ move).
|
||||
|
||||
- New `tests/e2e/test_mobile_hamburger_nav.py` — 7 story tests (375×812 via the `browser` fixture): ≥44px toggle + closed menu + no overflow; anonymous menu = exactly "Chat"; admin menu = all four links; link click navigates + arrival page closed; Esc closes + refocuses toggle (outside click pinned as *staying open* — accepted, locked close set is Esc/link/resize); 180ms opacity/transform pair + `reducedMotion:"reduce"` stills **both** states; 1280×800 desktop regression.
|
||||
- Defect fixed from task 01: the reduced-motion override only named `.app-nav`, so `.is-open` (higher specificity) still animated on open under the preference — verified live in Chromium, fixed with `.app-nav, .app-nav.is-open { transition: none; }` and the unit pin tightened to require the `.is-open` state.
|
||||
- Tests: `uv run pytest tests/e2e/test_mobile_hamburger_nav.py -v --no-cov` → 7 passed in isolation; regressions in isolation: `test_nav_consistency` 6, `test_header_consistency` 3, `test_shared_header` 6, `test_responsive_polish` 7, `test_tuning_nav_link` 4 — all passed.
|
||||
- `uv run pytest --cov=app --cov-report=term-missing` → 773 passed, TOTAL 99% (unchanged, frontend-only).
|
||||
- `uv run ruff check . && uv run pyright` → clean (typed the viewports as `ViewportSize` for pyright).
|
||||
- Deviations: none — outside-click stays open per the task's accepted-behavior branch, documented in the test docstring; `NOTES.md` (owner's notes) left untracked.
|
||||
- Next pending task: `.agents/phases/todo/47_quadlet_jinja_import/01_config_formats.md`.
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
........................................................................ [ 9%]
|
||||
........................................................................ [ 18%]
|
||||
........................................................................ [ 27%]
|
||||
........................................................................ [ 37%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 55%]
|
||||
........................................................................ [ 65%]
|
||||
........................................................................ [ 74%]
|
||||
........................................................................ [ 83%]
|
||||
........................................................................ [ 93%]
|
||||
..................................................... [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
|
||||
Reference in New Issue
Block a user