chore(agent): track .agent/ planning tree in git
Remove the blanket .agent/ gitignore so the phase roadmap, user stories, reports, and PLAN.md are versioned with the code. Only runtime artifacts (.agent/phase-sessions/, .agent/pipeline.log) remain ignored. Update AGENTS.md git protocol rule to match.
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
Final verification pass complete — everything green, no defects found to fix.
|
||||
|
||||
## Phase 25 — Background: No Motion, Only Fading Light (final verification)
|
||||
|
||||
- All tasks (01, 02) already in `complete/`; verified the shipped implementation against the phase overview (CSS redesign, tests, report, story, commit) — no work remaining.
|
||||
- CSS verified: static grid (`bg-grid-drift` deleted, no `animation` on `body::before`); three opacity-only glow spots (`body::after` 26s / `html::before` 34s −12s / `html::after` 42s −23s); all four layers `fixed; inset:0; z-index:-1; pointer-events:none`; `<html>` keeps `var(--bg)`, `<body>` transparent; reduced-motion stills all four.
|
||||
- `uv run pytest` → 345 passed (exit 0)
|
||||
- `uv run pytest --cov=app --cov-report=term-missing` → TOTAL 99% (14/1099 missed) — above the >90% gate; frontend-only change, app/ untouched
|
||||
- `uv run pytest tests/e2e/test_background_no_motion.py -v --no-cov` → 8/8 passed in isolation (grid static; distinct fades + advancing timelines + measurable screenshot change; keyframe opacity-only audit via `document.styleSheets`; layer contracts; reduced-motion; 360px no overflow)
|
||||
- Regression E2E in isolation: `test_background_animation.py` 5/5, `test_dark_tech_theme.py` 6/6, `test_responsive_polish.py` 7/7
|
||||
- `uv run ruff check . && uv run pyright` → clean, 0 errors
|
||||
- Artifacts: `report.md` documents both root causes with before/after pairs (4 valid 1280×800 PNGs); new story exists; old `background-animation.md` carries the SUPERSEDED note
|
||||
- Commit `025f57b` is the single `--no-gpg-sign` commit with the exact specified message; stages only this phase's files; dirty `TODO.md` correctly excluded; `00_phase.md` left in `todo/` for the harness to move
|
||||
|
||||
Completion criteria: all 10 met. Next pending phase: none — `todo/` contains only this phase.
|
||||
@@ -0,0 +1,46 @@
|
||||
........................................................................ [ 20%]
|
||||
........................................................................ [ 41%]
|
||||
........................................................................ [ 62%]
|
||||
........................................................................ [ 83%]
|
||||
......................................................... [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 95 0 100%
|
||||
app/api/docs.py 23 0 100%
|
||||
app/api/health.py 10 0 100%
|
||||
app/api/steering.py 33 0 100%
|
||||
app/api/suggestions.py 8 0 100%
|
||||
app/config.py 55 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 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 36 0 100%
|
||||
app/models.py 46 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/importer.py 150 5 97%
|
||||
app/rag/llm.py 105 0 100%
|
||||
app/rag/prompts.py 44 0 100%
|
||||
app/rag/retriever.py 93 3 97%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/schemas.py 62 0 100%
|
||||
--------------------------------------------
|
||||
TOTAL 1099 14 99%
|
||||
coverage gate: app/ 99% (>90%) OK
|
||||
All checks passed!
|
||||
0 errors, 0 warnings, 0 informations
|
||||
validation OK
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
Task 01 complete — all gates green.
|
||||
|
||||
**Implemented**
|
||||
- `frontend/assets/styles.css`: grid (`body::before`) now static — removed `animation` + deleted `@keyframes bg-grid-drift` (the 0.73px/s down-right jitter); deleted `@keyframes bg-glow-breathe` (the 14s uniform blink); three independent opacity-only glow fades: `body::after` (phase-08 indigo, 26s), new `html::before` (phase-08 cyan, 34s, −12s), new `html::after` (third indigo, 42s, −23s); reduced-motion stills all four layers; section/layer comments document the owner's 2026-08-25 no-movement spec.
|
||||
- New `tests/unit/test_background_no_motion.py` (11 source pins: no grid animation, deleted keyframes, static texture, exactly 3 opacity-only `bg-*` keyframes, exact spot gradients, distinct slow durations ≥20s, 4-layer plumbing, no-occlusion, reduced motion, no filter/blur) — reuses the three helpers from the animation file per the task.
|
||||
- Adapted `tests/unit/test_background_animation.py` to the new contract (plumbing pins extended to 4 layers; no-blur/no-JS anchor kept; docstring → phase 25).
|
||||
- Captured pre-change evidence: `.agent/screenshots/25_background_no_motion/before.png` + `before_4s.png` (67k px changed over 4s — drift + pulse visible).
|
||||
|
||||
**Results**
|
||||
- `uv run pytest tests/unit` → 279 passed
|
||||
- `uv run pytest --cov=app --cov-report=term-missing` → 345 passed, TOTAL 1099/14 = **99%** (identical to pre-change baseline)
|
||||
- `uv run ruff check .` → clean; `uv run pyright` → 0 errors
|
||||
- Visual check in Chromium: static grid + visible spots, content un-occluded (html pseudo-layers paint below content as designed).
|
||||
|
||||
**Notes**
|
||||
- E2E regressions (`tests/e2e/test_background_animation.py`, `test_dark_tech_theme.py`) still pin the superseded 60s/14s drift/breathe — expected; adapting them is task 02, not touched here. No commit made (task 02 owns it); `TODO.md` left dirty as found.
|
||||
|
||||
**Next pending task:** `02_e2e_story_suite_commit.md` (E2E story suite, regression adaptations, story file, report + commit).
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
........................................................................ [ 20%]
|
||||
........................................................................ [ 41%]
|
||||
........................................................................ [ 62%]
|
||||
........................................................................ [ 83%]
|
||||
......................................................... [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 95 0 100%
|
||||
app/api/docs.py 23 0 100%
|
||||
app/api/health.py 10 0 100%
|
||||
app/api/steering.py 33 0 100%
|
||||
app/api/suggestions.py 8 0 100%
|
||||
app/config.py 55 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 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 36 0 100%
|
||||
app/models.py 46 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/importer.py 150 5 97%
|
||||
app/rag/llm.py 105 0 100%
|
||||
app/rag/prompts.py 44 0 100%
|
||||
app/rag/retriever.py 93 3 97%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/schemas.py 62 0 100%
|
||||
--------------------------------------------
|
||||
TOTAL 1099 14 99%
|
||||
coverage gate: app/ 99% (>90%) OK
|
||||
All checks passed!
|
||||
0 errors, 0 warnings, 0 informations
|
||||
validation OK
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
Task 02 complete. Final report:
|
||||
|
||||
**Implemented**
|
||||
- `tests/e2e/test_background_no_motion.py` — 8-test story gate (static grid, three distinct 26/34/42s opacity-only fades + running state, live `document.styleSheets` no-movement audit, advancing timelines, measurable opacity + clipped-screenshot light change, 4-layer contracts, reduced-motion ×4, 360px pin)
|
||||
- Adapted `test_background_animation.py` (grid static, `bg-glow-a` running, timelines advance, 4-layer contracts) and `test_dark_tech_theme.py` (static grid + 26/34/42s spots; reduced motion across all four layers)
|
||||
- Story `.agent/user_stories/background-no-motion.md`; supersession note on `background-animation.md`; report + 4 screenshots (before/after pairs, diff table: grid-only patch bit-identical after vs 2.98/765 before)
|
||||
|
||||
**Results (final state, DB up)**
|
||||
- `uv run pytest` → 345 passed; `uv run pytest --cov=app --cov-report=term-missing` → TOTAL 1099/14 = **99%** (≥ pre-change)
|
||||
- Isolated: `test_background_no_motion.py` 8/8 (run 3×), `test_background_animation.py` 5/5, `test_dark_tech_theme.py` 6/6, `test_responsive_polish.py` 7/7
|
||||
- `uv run ruff check . && uv run pyright` → clean (fixed one `FloatRect` typing error in the new suite)
|
||||
- One `--no-gpg-sign` commit `025f57b` (14 files); `TODO.md` left unstaged
|
||||
|
||||
**Deviations**
|
||||
- Did not `mv` the `todo/` phase dir: `complete/25_background_no_motion` already exists (task 01 moved by harness), and the harness moves task files on success; commit stages the `complete/` copy as it exists.
|
||||
|
||||
**Next pending task:** none in `25_background_no_motion` (this was the last task).
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
........................................................................ [ 20%]
|
||||
........................................................................ [ 41%]
|
||||
........................................................................ [ 62%]
|
||||
........................................................................ [ 83%]
|
||||
......................................................... [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 95 0 100%
|
||||
app/api/docs.py 23 0 100%
|
||||
app/api/health.py 10 0 100%
|
||||
app/api/steering.py 33 0 100%
|
||||
app/api/suggestions.py 8 0 100%
|
||||
app/config.py 55 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 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 36 0 100%
|
||||
app/models.py 46 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/importer.py 150 5 97%
|
||||
app/rag/llm.py 105 0 100%
|
||||
app/rag/prompts.py 44 0 100%
|
||||
app/rag/retriever.py 93 3 97%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/schemas.py 62 0 100%
|
||||
--------------------------------------------
|
||||
TOTAL 1099 14 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