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:
@@ -0,0 +1,11 @@
|
||||
All verification is green. Final state check complete — no code changes were needed; this pass was pure verification.
|
||||
|
||||
**Phase 65 — final verification pass (all tasks 01–05 already complete in `complete/`; commit `8a1f99c` landed)**
|
||||
|
||||
- Verified implementation in code: `.chat-bottom` is the last child of `.chat-shell` wrapping `.chat-actions` (New chat → Share, ids/aria-labels intact) + `#composer`; `.chat-bottom` is `position: sticky; bottom: env(safe-area-inset-bottom, 0)` with no z-index (A1); `justify-content: flex-end` right-edge alignment (A2); ≤640px full-width vertical stack; `#composer` sticky declaration retained
|
||||
- Dedicated suite: `uv run pytest tests/e2e/test_bottom_chat_actions.py -v --no-cov` → 4 passed (pin across sticky range, resting bottom, settled above footer, A2 + DOM order, mobile stack, 360px overflow, 44px targets, New chat/Share click-through)
|
||||
- Regression E2E, each in isolation: pinned_composer 4 ✓, save_share_ux 5 ✓, chat_persistence 4 ✓, share_chat 4 ✓, chat_history 5 ✓, smoke 3 ✓
|
||||
- Full gate: `.agents/validate.sh` exit 0 — `uv run pytest --cov=app` 1251 unit+integration tests passed, coverage TOTAL 99% (>90%); `uv run ruff check .` clean; `uv run pyright` 0 errors
|
||||
- Criteria 1–7: all met (see above). Criterion 8: single `--no-gpg-sign` commit `8a1f99c` exists staging exactly `.agents/ frontend/ tests/` (no gpgsig; `commit.gpgsign=false`); the `00_phase.md` move to `complete/` is the harness pipeline step — left in `todo/` per instructions
|
||||
|
||||
**Deviations / notes:** No defects found, zero code edits. `.agents/PLAN.md` is absent from the repo (referenced by AGENTS.md; pre-existing — the phase overview/task files served as the binding spec). Worktree carries only uncommitted `.agents/` bookkeeping (task-05 file move + reports) managed by the harness. Next pending phase: `66_history_auto_save_copy`.
|
||||
@@ -0,0 +1,72 @@
|
||||
........................................................................ [ 5%]
|
||||
........................................................................ [ 11%]
|
||||
........................................................................ [ 17%]
|
||||
........................................................................ [ 23%]
|
||||
........................................................................ [ 28%]
|
||||
........................................................................ [ 34%]
|
||||
........................................................................ [ 40%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 51%]
|
||||
........................................................................ [ 57%]
|
||||
........................................................................ [ 63%]
|
||||
........................................................................ [ 69%]
|
||||
........................................................................ [ 74%]
|
||||
........................................................................ [ 80%]
|
||||
........................................................................ [ 86%]
|
||||
........................................................................ [ 92%]
|
||||
........................................................................ [ 97%]
|
||||
........................... [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 131 0 100%
|
||||
app/api/chats.py 110 0 100%
|
||||
app/api/config.py 7 0 100%
|
||||
app/api/doc_drafts.py 93 0 100%
|
||||
app/api/docs.py 50 0 100%
|
||||
app/api/git_sources.py 181 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 101 0 100%
|
||||
app/config.py 112 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 0 100%
|
||||
app/core/caching.py 108 0 100%
|
||||
app/core/debugging.py 29 2 93%
|
||||
app/core/docs_push.py 39 0 100%
|
||||
app/core/logging.py 13 0 100%
|
||||
app/db.py 21 0 100%
|
||||
app/main.py 52 0 100%
|
||||
app/models.py 86 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/agent.py 78 0 100%
|
||||
app/rag/archive_upload.py 128 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/git_sources.py 14 0 100%
|
||||
app/rag/importer.py 180 3 98%
|
||||
app/rag/llm.py 189 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/sources_meta.py 16 0 100%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/rag/summarizer.py 24 0 100%
|
||||
app/schemas.py 201 0 100%
|
||||
-----------------------------------------------
|
||||
TOTAL 2529 12 99%
|
||||
coverage gate: app/ 99% (>90%) OK
|
||||
All checks passed!
|
||||
0 errors, 0 warnings, 0 informations
|
||||
validation OK
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
All gates green. The `.agents/phases/todo/64_*` deletions in git status are harness bookkeeping from phase 64's completion (not mine); the commit happens in task 05.
|
||||
|
||||
**Task 01 report — `65_bottom_chat_actions/01_move_chat_actions_to_bottom`**
|
||||
|
||||
- Moved the entire `.chat-actions` block (Phase 55/14/51 comment + row div) from between `#steering-announcer` and `#messages` to after the messages `</section>`, directly above the composer — buttons verified byte-identical (git diff line-set comparison: only the appended note differs); DOM order New chat (L179) → Share (L211); exactly one `class="chat-actions"` in `frontend/index.html`.
|
||||
- Appended the Phase 65 relocation note to the row's moved comment block (top of column now banner → steering → announcer → messages).
|
||||
- No CSS/JS changes; untouched `#kb-banner`, `#stale-banner`, `#steering-panel`, `#steering-announcer`, `#messages`, `#composer`.
|
||||
- Updated 3 position-pinning unit tests to the new contract: `test_chat_persistence.py::test_new_chat_button_lives_only_on_the_chat_page`, `test_save_chat_ui.py::test_share_button_ships_visible_beside_new_chat` + `test_chat_actions_wrapper_holds_both_pills_in_order` (now pin row below `#messages`, above composer, with nothing else between).
|
||||
|
||||
Results (all green):
|
||||
- `uv run pytest --cov=app --cov-report=term -q` → exit 0, TOTAL coverage **99%** (>90%)
|
||||
- `uv run ruff check . && uv run pyright` → clean (0 errors)
|
||||
- `uv run pytest tests/e2e/test_save_share_ux.py -v --no-cov` → **5 passed** (isolation, DB up)
|
||||
- `uv run pytest tests/e2e/test_pinned_composer.py --no-cov` → exit 0 (isolation); `uv run pytest tests/e2e/test_chat_persistence.py --no-cov` → exit 0 (isolation)
|
||||
|
||||
No deviations. Next pending task: `02_pin_bottom_cluster.md` (same phase).
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
........................................................................ [ 5%]
|
||||
........................................................................ [ 11%]
|
||||
........................................................................ [ 17%]
|
||||
........................................................................ [ 23%]
|
||||
........................................................................ [ 28%]
|
||||
........................................................................ [ 34%]
|
||||
........................................................................ [ 40%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 51%]
|
||||
........................................................................ [ 57%]
|
||||
........................................................................ [ 63%]
|
||||
........................................................................ [ 69%]
|
||||
........................................................................ [ 74%]
|
||||
........................................................................ [ 80%]
|
||||
........................................................................ [ 86%]
|
||||
........................................................................ [ 92%]
|
||||
........................................................................ [ 97%]
|
||||
........................... [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 131 0 100%
|
||||
app/api/chats.py 110 0 100%
|
||||
app/api/config.py 7 0 100%
|
||||
app/api/doc_drafts.py 93 0 100%
|
||||
app/api/docs.py 50 0 100%
|
||||
app/api/git_sources.py 181 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 101 0 100%
|
||||
app/config.py 112 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 0 100%
|
||||
app/core/caching.py 108 0 100%
|
||||
app/core/debugging.py 29 2 93%
|
||||
app/core/docs_push.py 39 0 100%
|
||||
app/core/logging.py 13 0 100%
|
||||
app/db.py 21 0 100%
|
||||
app/main.py 52 0 100%
|
||||
app/models.py 86 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/agent.py 78 0 100%
|
||||
app/rag/archive_upload.py 128 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/git_sources.py 14 0 100%
|
||||
app/rag/importer.py 180 3 98%
|
||||
app/rag/llm.py 189 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/sources_meta.py 16 0 100%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/rag/summarizer.py 24 0 100%
|
||||
app/schemas.py 201 0 100%
|
||||
-----------------------------------------------
|
||||
TOTAL 2529 12 99%
|
||||
coverage gate: app/ 99% (>90%) OK
|
||||
All checks passed!
|
||||
0 errors, 0 warnings, 0 informations
|
||||
validation OK
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
All gates green. Task 02 complete — no commit (that's task 05's job), task file untouched.
|
||||
|
||||
**Report**
|
||||
|
||||
- **Implemented (locked A1 pinned bottom cluster):**
|
||||
- `frontend/index.html`: wrapped the `.chat-actions` row + `#composer` form (with comments, re-indented) in one new `<div class="chat-bottom">` (no id) — the last child of `.chat-shell`, containing exactly `.chat-actions` then `#composer`; appended the Phase 65 A1 note to the row's comment.
|
||||
- `frontend/assets/styles.css`: new `.chat-bottom` rule directly above `.composer` — `display:flex; flex-direction:column; gap:0.5rem; position:sticky; bottom:env(safe-area-inset-bottom,0)`, no z-index; `#composer` rule body untouched, phase-52 comment gained a one-line Phase 65 note.
|
||||
- `tests/unit/test_pinned_composer.py`: re-pinned the structure test (renamed `test_chat_bottom_unit_is_last_child_of_the_chat_shell`) — wrapper is last shell child, no id, exactly row→form; updated module docstring (also removed a duplicated bullet block found there).
|
||||
- **Test/lint results:**
|
||||
- `uv run pytest --cov=app` → all pass, TOTAL 99% (>90%)
|
||||
- `uv run ruff check . && uv run pyright` → clean (0 errors)
|
||||
- `uv run pytest tests/e2e/test_pinned_composer.py -v --no-cov` → 4 passed (pin at every scroll position, empty-chat rest, mobile under header)
|
||||
- `uv run pytest tests/e2e/test_save_share_ux.py -v --no-cov` → 5 passed
|
||||
- Extra: `test_chat_persistence.py` (4), `test_smoke.py` (3) passed in isolation; `bash .agents/validate.sh` → validation OK
|
||||
- **Deviations:** none — wrapper per spec; only pre-existing stale unit assertion updated to the owner-locked A1 structure.
|
||||
- **Next pending task:** `03_align_button_clusters.md` (right-align the bottom row, verify five-pill geometry).
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
........................................................................ [ 5%]
|
||||
........................................................................ [ 11%]
|
||||
........................................................................ [ 17%]
|
||||
........................................................................ [ 23%]
|
||||
........................................................................ [ 28%]
|
||||
........................................................................ [ 34%]
|
||||
........................................................................ [ 40%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 51%]
|
||||
........................................................................ [ 57%]
|
||||
........................................................................ [ 63%]
|
||||
........................................................................ [ 69%]
|
||||
........................................................................ [ 74%]
|
||||
........................................................................ [ 80%]
|
||||
........................................................................ [ 86%]
|
||||
........................................................................ [ 92%]
|
||||
........................................................................ [ 97%]
|
||||
........................... [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 131 0 100%
|
||||
app/api/chats.py 110 0 100%
|
||||
app/api/config.py 7 0 100%
|
||||
app/api/doc_drafts.py 93 0 100%
|
||||
app/api/docs.py 50 0 100%
|
||||
app/api/git_sources.py 181 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 101 0 100%
|
||||
app/config.py 112 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 0 100%
|
||||
app/core/caching.py 108 0 100%
|
||||
app/core/debugging.py 29 2 93%
|
||||
app/core/docs_push.py 39 0 100%
|
||||
app/core/logging.py 13 0 100%
|
||||
app/db.py 21 0 100%
|
||||
app/main.py 52 0 100%
|
||||
app/models.py 86 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/agent.py 78 0 100%
|
||||
app/rag/archive_upload.py 128 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/git_sources.py 14 0 100%
|
||||
app/rag/importer.py 180 3 98%
|
||||
app/rag/llm.py 189 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/sources_meta.py 16 0 100%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/rag/summarizer.py 24 0 100%
|
||||
app/schemas.py 201 0 100%
|
||||
-----------------------------------------------
|
||||
TOTAL 2529 12 99%
|
||||
coverage gate: app/ 99% (>90%) OK
|
||||
All checks passed!
|
||||
0 errors, 0 warnings, 0 informations
|
||||
validation OK
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
Task 03 complete. All gates green.
|
||||
|
||||
**Implemented**
|
||||
- `frontend/assets/styles.css` — added the single `justify-content: flex-end;` declaration to `.chat-actions` (pills keep intrinsic widths; the row now hugs the column's right edge per owner-locked A2) + updated the rule's comment (top member of the pinned `.chat-bottom` cluster, A2 rationale, 0.5rem wrapper gap, ≤640px stack unchanged).
|
||||
- Five-pill geometry pass: no deviations found → no declaration changes (solid family: 44px/999px/16px icons; ghost family: 44px/999px/14px icons/0.82rem; global `:focus-visible` covers all five).
|
||||
- No HTML/JS/`.msg-meta` changes; ≤640px stack rule byte-identical.
|
||||
|
||||
**Verification**
|
||||
- Temporary Playwright measurement (file deleted after use): all five pills exactly 44.0px rendered at 1280/390/360; Share's right edge flush with the composer's at 1280 (A2); stacked full-width at 390; no horizontal overflow at 360/390. (Save-as-doc measured via a same-markup probe in the real `.msg-meta` — it's gated off in the e2e app since `BOR_DOCS_REPO` is forced empty; CSS under test is identical.)
|
||||
- `uv run pytest tests/e2e/test_save_share_ux.py -v --no-cov` → 5 passed (DB up, isolated)
|
||||
- `uv run pytest tests/e2e/test_pinned_composer.py -v --no-cov` → 4 passed (sanity, isolated)
|
||||
- `uv run pytest --cov=app --cov-report=term-missing` → 1251 passed, TOTAL **99%** (>90%)
|
||||
- `uv run ruff check . && uv run pyright` → All checks passed / 0 errors, 0 warnings
|
||||
|
||||
**Notes**
|
||||
- Repo carries uncommitted task 01/02 work — expected; the phase's single atomic commit is task 05's job (not committed here).
|
||||
- No defects found in prior work.
|
||||
|
||||
**Next pending task:** `.agents/phases/todo/65_bottom_chat_actions/04_e2e_bottom_chat_actions.md`
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
........................................................................ [ 5%]
|
||||
........................................................................ [ 11%]
|
||||
........................................................................ [ 17%]
|
||||
........................................................................ [ 23%]
|
||||
........................................................................ [ 28%]
|
||||
........................................................................ [ 34%]
|
||||
........................................................................ [ 40%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 51%]
|
||||
........................................................................ [ 57%]
|
||||
........................................................................ [ 63%]
|
||||
........................................................................ [ 69%]
|
||||
........................................................................ [ 74%]
|
||||
........................................................................ [ 80%]
|
||||
........................................................................ [ 86%]
|
||||
........................................................................ [ 92%]
|
||||
........................................................................ [ 97%]
|
||||
........................... [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 131 0 100%
|
||||
app/api/chats.py 110 0 100%
|
||||
app/api/config.py 7 0 100%
|
||||
app/api/doc_drafts.py 93 0 100%
|
||||
app/api/docs.py 50 0 100%
|
||||
app/api/git_sources.py 181 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 101 0 100%
|
||||
app/config.py 112 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 0 100%
|
||||
app/core/caching.py 108 0 100%
|
||||
app/core/debugging.py 29 2 93%
|
||||
app/core/docs_push.py 39 0 100%
|
||||
app/core/logging.py 13 0 100%
|
||||
app/db.py 21 0 100%
|
||||
app/main.py 52 0 100%
|
||||
app/models.py 86 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/agent.py 78 0 100%
|
||||
app/rag/archive_upload.py 128 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/git_sources.py 14 0 100%
|
||||
app/rag/importer.py 180 3 98%
|
||||
app/rag/llm.py 189 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/sources_meta.py 16 0 100%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/rag/summarizer.py 24 0 100%
|
||||
app/schemas.py 201 0 100%
|
||||
-----------------------------------------------
|
||||
TOTAL 2529 12 99%
|
||||
coverage gate: app/ 99% (>90%) OK
|
||||
All checks passed!
|
||||
0 errors, 0 warnings, 0 informations
|
||||
validation OK
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
All gates are green. Final report:
|
||||
|
||||
**Implemented**
|
||||
- `tests/e2e/test_bottom_chat_actions.py` (NEW, house patterns; no other file changes):
|
||||
- `test_empty_chat_row_rests_at_screen_bottom` — one `.chat-bottom` (row + composer), not scrollable, row rests ≥75% viewport height directly above composer, A2 right-edge alignment (row + Share flush ±2px vs column content edge), composer not clipped.
|
||||
- `test_bottom_cluster_pinned_at_every_scroll_position` — seeded KB, 6 grounded turns (overflow precondition), sticky range from `.chat-shell` document-bottom (pin_limit > 200, max_scroll > pin_limit); cluster fully in viewport + flush at 0/25/50/75%/pin_limit−1; at document bottom settles above `.app-footer`, composer unglued, row still above composer.
|
||||
- `test_row_geometry_and_alignment` — one `.chat-actions` in `.chat-bottom`, two pills, DOM order New→Share (compareDocumentPosition); desktop horizontal + intrinsic widths + A2 edge; 390×844 full-width stack (pills == `.chat-bottom` width ±2px); 360px `scrollWidth ≤ 360`; ≥44px targets at 1280 and 390 incl. `.retry-btn` after one seeded turn.
|
||||
- `test_buttons_still_work_from_the_bottom` — New chat click: `.msg` 0, `#empty-state`, `bor.chat.v1` null, "New chat started"; Share on empty chat: "Nothing to share yet.", no toast, URL unchanged.
|
||||
|
||||
**Results** (DB up)
|
||||
- Each test green in isolation; `uv run pytest tests/e2e/test_bottom_chat_actions.py -v --no-cov` → **4 passed** (13.5s).
|
||||
- Baseline `uv run pytest tests/e2e/test_pinned_composer.py -v --no-cov` → 4 passed (prior tasks 01–03 defect-free).
|
||||
- `.agents/validate.sh` → **validation OK**: unit+integration green, coverage TOTAL **99%** (>90%), `ruff check .` + `pyright` clean.
|
||||
|
||||
**Decisions** — A2 "shell right edge" measured against the column's *content* edge (`.chat-shell` is a `.container` with padding; computed live), with the rightmost pill asserted flush as the real A2 pin; `_reset_db` truncates all 5 tables per task spec.
|
||||
|
||||
**Next pending task:** `.agents/phases/todo/65_bottom_chat_actions/05_regressions_and_commit.md`
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
........................................................................ [ 5%]
|
||||
........................................................................ [ 11%]
|
||||
........................................................................ [ 17%]
|
||||
........................................................................ [ 23%]
|
||||
........................................................................ [ 28%]
|
||||
........................................................................ [ 34%]
|
||||
........................................................................ [ 40%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 51%]
|
||||
........................................................................ [ 57%]
|
||||
........................................................................ [ 63%]
|
||||
........................................................................ [ 69%]
|
||||
........................................................................ [ 74%]
|
||||
........................................................................ [ 80%]
|
||||
........................................................................ [ 86%]
|
||||
........................................................................ [ 92%]
|
||||
........................................................................ [ 97%]
|
||||
........................... [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 131 0 100%
|
||||
app/api/chats.py 110 0 100%
|
||||
app/api/config.py 7 0 100%
|
||||
app/api/doc_drafts.py 93 0 100%
|
||||
app/api/docs.py 50 0 100%
|
||||
app/api/git_sources.py 181 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 101 0 100%
|
||||
app/config.py 112 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 0 100%
|
||||
app/core/caching.py 108 0 100%
|
||||
app/core/debugging.py 29 2 93%
|
||||
app/core/docs_push.py 39 0 100%
|
||||
app/core/logging.py 13 0 100%
|
||||
app/db.py 21 0 100%
|
||||
app/main.py 52 0 100%
|
||||
app/models.py 86 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/agent.py 78 0 100%
|
||||
app/rag/archive_upload.py 128 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/git_sources.py 14 0 100%
|
||||
app/rag/importer.py 180 3 98%
|
||||
app/rag/llm.py 189 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/sources_meta.py 16 0 100%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/rag/summarizer.py 24 0 100%
|
||||
app/schemas.py 201 0 100%
|
||||
-----------------------------------------------
|
||||
TOTAL 2529 12 99%
|
||||
coverage gate: app/ 99% (>90%) OK
|
||||
All checks passed!
|
||||
0 errors, 0 warnings, 0 informations
|
||||
validation OK
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
Task 05 complete — all green.
|
||||
|
||||
**Report — Phase 65, Task 05 (regressions + commit)**
|
||||
- Regression E2E matrix, each green in isolation (DB up, in task order):
|
||||
- `uv run pytest tests/e2e/test_pinned_composer.py -v --no-cov` → 4 passed
|
||||
- `uv run pytest tests/e2e/test_save_share_ux.py -v --no-cov` → 5 passed
|
||||
- `uv run pytest tests/e2e/test_chat_persistence.py -v --no-cov` → 4 passed
|
||||
- `uv run pytest tests/e2e/test_share_chat.py -v --no-cov` → 4 passed
|
||||
- `uv run pytest tests/e2e/test_chat_history.py -v --no-cov` → 5 passed
|
||||
- `uv run pytest tests/e2e/test_smoke.py -v --no-cov` → 3 passed
|
||||
- Dedicated suite final run: `uv run pytest tests/e2e/test_bottom_chat_actions.py -v --no-cov` → 4 passed
|
||||
- Full gate: `bash .agents/validate.sh` → exit 0 (unit+integration pass, app/ coverage **99%** >90%, `ruff check .` clean, `pyright` 0 errors)
|
||||
- One atomic commit on `main`: `8a1f99c` `feat(web): move the chat action cluster to the pinned bottom and align the button sets` — `--no-gpg-sign`, staged exactly `.agents/ frontend/ tests/`, body has one line per task (01 move, 02 sticky `.chat-bottom` A1, 03 right-edge alignment A2, 04 dedicated suite, 05 regression outcome)
|
||||
- No defects found in prior tasks' work — tasks 01–04 changes committed as-is; working tree clean
|
||||
- Phase-dir move to `complete/` is the pipeline step (harness) per task rules — not done by me
|
||||
- Next pending task: `.agents/phases/todo/66_history_auto_save_copy/01_history_page_copy.md`
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
........................................................................ [ 5%]
|
||||
........................................................................ [ 11%]
|
||||
........................................................................ [ 17%]
|
||||
........................................................................ [ 23%]
|
||||
........................................................................ [ 28%]
|
||||
........................................................................ [ 34%]
|
||||
........................................................................ [ 40%]
|
||||
........................................................................ [ 46%]
|
||||
........................................................................ [ 51%]
|
||||
........................................................................ [ 57%]
|
||||
........................................................................ [ 63%]
|
||||
........................................................................ [ 69%]
|
||||
........................................................................ [ 74%]
|
||||
........................................................................ [ 80%]
|
||||
........................................................................ [ 86%]
|
||||
........................................................................ [ 92%]
|
||||
........................................................................ [ 97%]
|
||||
........................... [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 131 0 100%
|
||||
app/api/chats.py 110 0 100%
|
||||
app/api/config.py 7 0 100%
|
||||
app/api/doc_drafts.py 93 0 100%
|
||||
app/api/docs.py 50 0 100%
|
||||
app/api/git_sources.py 181 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 101 0 100%
|
||||
app/config.py 112 0 100%
|
||||
app/core/__init__.py 0 0 100%
|
||||
app/core/auth.py 20 0 100%
|
||||
app/core/caching.py 108 0 100%
|
||||
app/core/debugging.py 29 2 93%
|
||||
app/core/docs_push.py 39 0 100%
|
||||
app/core/logging.py 13 0 100%
|
||||
app/db.py 21 0 100%
|
||||
app/main.py 52 0 100%
|
||||
app/models.py 86 0 100%
|
||||
app/rag/__init__.py 0 0 100%
|
||||
app/rag/agent.py 78 0 100%
|
||||
app/rag/archive_upload.py 128 0 100%
|
||||
app/rag/chunker.py 206 4 98%
|
||||
app/rag/git_sources.py 14 0 100%
|
||||
app/rag/importer.py 180 3 98%
|
||||
app/rag/llm.py 189 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/sources_meta.py 16 0 100%
|
||||
app/rag/suggestions.py 27 0 100%
|
||||
app/rag/summarizer.py 24 0 100%
|
||||
app/schemas.py 201 0 100%
|
||||
-----------------------------------------------
|
||||
TOTAL 2529 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