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,14 @@
All checks pass — no defects found, nothing to fix. Final verification summary:
**Phase 38 — Local directory sources: final verification pass (all 5 tasks already complete)**
- Verified migration 0007 on live DB: `kind TEXT NOT NULL DEFAULT 'git'` + `ck_git_sources_kind` (`git`|`local`) + nullable unique `path` (`uq_git_sources_path`); `alembic current` = 0007 (head)
- Verified API (201/422-naming-path/409/403-anonymous), combined sync + `import_docs` resolution (git clone/pull + local walk, missing-dir fails loudly pre-import, union prune), admin page (Local form, Git/Local badges, updated hint, anonymous gate)
- UI Structure Check passed: skip-link/landmarks, labeled inputs, `role=alert/note/status`, global `:focus-visible`; badge contrast 10.6:1 / 6.9:1; no CDN tags (integration no-CDN test in suite)
- `uv run pytest --cov=app --cov-report=term-missing` → **683 passed, 99% coverage** (>90% ✓)
- `uv run pytest tests/e2e/test_local_directory_sources.py --no-cov` → **3 passed in isolation, twice** (deterministic)
- Regression: `test_git_sources_admin.py` **6 passed**; `test_sync_button.py` **3 passed**
- `uv run ruff check . && uv run pyright` → **clean (0 errors)**
- Commit: single atomic `94d7228` (conventional, unsigned `%G?=N`); phase dir move left to harness
- Working tree carries only harness/owner artifacts (`.agents` task moves, `TODO.md`, untracked `NOTES.md`) — untouched per rules
- **Next pending phase: `39_configurable_brand`**
@@ -0,0 +1,58 @@
........................................................................ [ 10%]
........................................................................ [ 21%]
........................................................................ [ 31%]
........................................................................ [ 42%]
........................................................................ [ 52%]
........................................................................ [ 63%]
........................................................................ [ 73%]
........................................................................ [ 84%]
........................................................................ [ 94%]
................................... [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/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 80 0 100%
app/config.py 66 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 42 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 81 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 174 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 1745 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK
@@ -0,0 +1,18 @@
All done. My changes are exactly the three intended files (the `.agents/` deletions and TODO/NOTES changes are pre-existing harness bookkeeping). Dev DB is at head (`0007`), clean.
## Report
**Implemented (task 01 — `git_sources.kind` + `path`):**
- `alembic/versions/0007_git_sources_kind.py` — chains off 0006's real revision id; `upgrade()` adds `kind TEXT NOT NULL DEFAULT 'git'` + `ck_git_sources_kind CHECK (kind IN ('git','local'))` + nullable `path TEXT` + plain unique index `uq_git_sources_path` (mirrors 0006's plain-unique choice for `url`; Postgres treats NULLs as distinct); `downgrade()` drops index → constraint → path → kind
- `app/models.py` — `GitSource.kind` (default `"git"`, matching server default) + `path` (nullable, unique); docstrings updated (module + class, phase 38)
- `tests/integration/test_migration_0007.py` — 7 tests in the 0004/0006 style: up (types/nullability/defaults/constraint/index), pre-0007 row reads `kind='git'`/`path=NULL`, insert default, CHECK rejects `kind='bogus'`, duplicate local path rejected + NULL paths tolerated, down drops everything, round-trip restores
**Test / lint results:**
- `uv run alembic upgrade head` — applied cleanly to dev DB; verified downgrade→insert→upgrade cycle: pre-existing row reads `('git', None)`
- `uv run pytest tests/integration/test_migration_0007.py -v --no-cov` — 7 passed
- `uv run pytest --cov=app --cov-report=term-missing` — 665 passed, **99% coverage** (gate >90%)
- `uv run ruff check . && uv run pyright` — clean (0 errors)
**Decisions:** kept the DB server default `'git'` (per task spec's `DEFAULT 'git'`) and declared it in the model too for metadata consistency; plain (non-partial) unique index on `path`, matching 0006's style for `url`.
**Next pending task:** `.agents/phases/todo/38_local_directory_sources/02_api_local_kind.md`
@@ -0,0 +1,58 @@
........................................................................ [ 10%]
........................................................................ [ 21%]
........................................................................ [ 32%]
........................................................................ [ 43%]
........................................................................ [ 54%]
........................................................................ [ 64%]
........................................................................ [ 75%]
........................................................................ [ 86%]
........................................................................ [ 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 122 0 100%
app/api/docs.py 23 0 100%
app/api/git_sources.py 44 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 72 0 100%
app/config.py 66 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 42 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 81 0 100%
app/rag/chunker.py 206 4 98%
app/rag/git_sources.py 11 0 100%
app/rag/importer.py 173 3 98%
app/rag/llm.py 174 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 87 0 100%
--------------------------------------------
TOTAL 1700 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK
@@ -0,0 +1,18 @@
All green. Task 02 is complete.
## Report
**Implemented** (task 02 — admin API local kind):
- `app/schemas.py`: `GitSourceIn` gains `kind` (default `"git"`), optional trimmed `url`/`path` (path ≤2000, mirroring `documents.full_path`); new `GitSourceRow` (id/kind/url/path/added_at) for GET; `GitSourceOut` POST shape unchanged
- `app/api/git_sources.py`: POST branches on kind — git keeps the byte-identical phase-35 contract (shape 422 / dup 409, no URL echo); local requires `path` → `expanduser()` → absolute existing dir else 422 naming the path, dup 409 naming it, unique-index backstop shared via `_commit_new`; GET rows carry `kind`+`path` (env rows git-only); DELETE unchanged; OpenAPI verified accurate
- Local rows store the expanded path in `url` too (phase-35 NOT-NULL location column; URL shapes can't collide with absolute paths) — so the 201 body keeps the exact phase-35 shape for both kinds
- Extended `tests/integration/test_git_sources_api.py`: 9 new tests (201 expanded/trimmed, relative/missing/file 422 naming path, dup + race 409, wrong-combination 422s, mixed-kind GET order, anonymous 403 on local POST); 2 existing exact-shape GET assertions updated for the task-mandated additive `kind`/`path` fields — all git-kind validation tests pass unmodified
**Results**
- `uv run pytest tests/integration/test_git_sources_api.py -v --no-cov` → 23 passed
- `uv run pytest --cov=app --cov-report=term-missing` → 674 passed; TOTAL 99% (>90%); modified modules 100%
- `uv run ruff check . && uv run pyright` → clean (0 errors)
**Notable**: `~`-expansion tested via monkeypatched `HOME`; local 422s echo the *expanded* path (not a secret, per task); git 422s stay input-free.
**Next pending task**: `.agents/phases/todo/38_local_directory_sources/03_sync_import_local.md`
@@ -0,0 +1,58 @@
........................................................................ [ 10%]
........................................................................ [ 21%]
........................................................................ [ 32%]
........................................................................ [ 42%]
........................................................................ [ 53%]
........................................................................ [ 64%]
........................................................................ [ 74%]
........................................................................ [ 85%]
........................................................................ [ 96%]
.......................... [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/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 72 0 100%
app/config.py 66 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 42 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 81 0 100%
app/rag/chunker.py 206 4 98%
app/rag/git_sources.py 11 0 100%
app/rag/importer.py 173 3 98%
app/rag/llm.py 174 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 1734 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK
@@ -0,0 +1,17 @@
All green. My task-03 changes are confined to the resolver, sync pipeline, CLI, and the three test files (the other modified files are tasks 01/02's uncommitted work; the phase commit lands in task 05).
**Report — task 03 (sync + `import_docs`: git and local together)**
- `app/rag/git_sources.py`: new `effective_sources(db) -> (rows, origin)` returning `git_sources` DB rows of **both kinds** (DB-wins; env fallback = synthetic git-only rows; both-empty `([], "env")`); `effective_git_sources` kept as a tested back-compat alias (git URLs only).
- `app/api/sync.py::_run_sync`: per-row walk — git → `clone_or_pull` (unchanged), local → `expanduser()` + `.is_dir()` **at sync time** else `GitSyncError("local source missing: <path>")` (runs through `_sanitize_error`); single combined list into `import_sources(..., prune=True)` (union pruning); new fail-loud `"no sources configured (git or local)"`; started log gains `git=N local=M` with `origin=db|env`.
- `scripts/import_docs.py::_resolve_sources`: `--source` still wins; DB git + local next (local walked directly, missing dir aborts pre-import with the path named); env fallback git-only; legacy `DEFAULT_SOURCES` when both empty; failure message generalized to `source sync failed`.
- Tests: unit (mixed kinds, DB-wins, env-fallback git-only, both-empty, ordering, alias ×2); sync integration (local-only, mixed + union-prune on re-sync, missing-local fails loudly with zero imports — real imports via `FakeEmbedder`, temp host dirs, KB verified via `GET /api/docs`); CLI integration (mixed resolution, missing local at resolve + `main` level).
**Results**
- `uv run pytest` → 683 passed
- `uv run pytest --cov=app --cov-report=term-missing` → 99% total (app/api/sync.py 100%, app/rag/git_sources.py 100%)
- `uv run ruff check . && uv run pyright` → clean (0 errors)
**Decisions**: kept the `effective_git_sources` alias per the task's back-compat clause (all app importers now use `effective_sources`); per-row processing means a git row before a missing local dir is still cloned (a clone isn't an import — import never runs), asserted in the failure test.
**Next pending task**: `.agents/phases/todo/38_local_directory_sources/04_admin_page_local.md`
@@ -0,0 +1,58 @@
........................................................................ [ 10%]
........................................................................ [ 21%]
........................................................................ [ 31%]
........................................................................ [ 42%]
........................................................................ [ 52%]
........................................................................ [ 63%]
........................................................................ [ 73%]
........................................................................ [ 84%]
........................................................................ [ 94%]
................................... [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/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 80 0 100%
app/config.py 66 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 42 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 81 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 174 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 1745 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK
@@ -0,0 +1,18 @@
All gates green. Final report:
**Implemented (phase 38, task 04 — local-directory form + badges on the sources admin page):**
- `frontend/git-sources.html`: second "Local directory" add form (`#local-source-form` — labeled input, placeholder `~/Notes`, Add button, inline `role=alert` error slot); table column `Source` with per-row kind badge; hint updated to "Sync clones/pulls the git repos and imports the local directories together (files removed from a source are pruned)…"; empty-state/sub copy generalized. Gate + nav link unchanged.
- `frontend/assets/git-sources.js`: rows render a Git/Local badge (text + color) + mono value (git URL as before; full local path via `s.path ?? s.url`); kind-aware Remove labels/confirm; both add forms share one `wireAddForm` §7.4 never-stale lifecycle (local posts `{kind:"local", path}`); all git-form strings/behavior byte-identical.
- `frontend/assets/styles.css`: local form reuses the git form rules verbatim (grouped selectors, incl. mobile block); `.git-source-kind` badge — Git = brand pair 6.9:1, Local = ok pair 10.6:1 (AA, WCAG 1.4.1 text+color).
- UI Structure Check passed: landmarks intact, both inputs labeled, new Add button has 3px `:focus-visible`, no new top-level structure, no CDN tags.
**Test / lint / coverage:**
- `uv run pytest` → 683 passed
- `uv run pytest --cov=app --cov-report=term-missing` → 683 passed, TOTAL **99%** (>90%)
- `uv run ruff check . && uv run pyright` → clean (0 errors)
- `uv run pytest tests/e2e/test_git_sources_admin.py -v --no-cov` (phase-35 page gate) → 6 passed
- Throwaway Playwright drive of the real page (boots app, real login): 10/10 — add valid dir → Local badge row, missing/relative path → 422 inline + button recovers, duplicate → 409 inline, Remove on local row works.
**Decisions/deviations:** none — task is frontend-only (API from tasks 02/03); "both themes" in the task maps to the single dark theme in this repo (all pairs ≥4.5:1 there).
**Next pending task:** `.agents/phases/todo/38_local_directory_sources/05_e2e_docs_commit.md` (story E2E, README, commit, phase move).
@@ -0,0 +1,58 @@
........................................................................ [ 10%]
........................................................................ [ 21%]
........................................................................ [ 31%]
........................................................................ [ 42%]
........................................................................ [ 52%]
........................................................................ [ 63%]
........................................................................ [ 73%]
........................................................................ [ 84%]
........................................................................ [ 94%]
................................... [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/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 80 0 100%
app/config.py 66 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 42 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 81 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 174 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 1745 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK
@@ -0,0 +1,17 @@
All gates are green and the phase is committed. Final report:
**Implemented (phase 38 task 05):**
- `tests/e2e/test_local_directory_sources.py` — story E2E (isolated, per-module app with a host temp dir fixture, no `BOR_GIT_SOURCES`): anonymous soft-gate + 403s (phase-35 regression); admin add lifecycle — missing path `/nonexistent/bor-e2e` → inline 422 naming it, temp dir → row with Local badge, duplicate → 409 naming it (never-stale button, form a11y checks); real Sync button imports the fixture (verified via `GET /api/docs` + sentinel in content), file delete + sync → union prune (`pruned: 1`), row Remove → gone + empty state.
- README: two managed kinds (git clone/pull vs local in-place walk), add-time validation, union prune, "DB is the local-source registry — no env var"; updated Sync prerequisites (`no sources configured (git or local)`); config reference note.
- `.env.example`: extended the `BOR_GIT_SOURCES` note — env fallback is git-only; local dirs are admin-page-registered (migration 0007).
- One atomic commit `94d7228` (`--no-gpg-sign`), 22 files; recorded `complete/38/01–04` via `git add -f` (phase-37 precedent). Harness still owns the `todo/38 → complete/` move.
**Gates (exact commands / outcomes):**
- `uv run pytest tests/e2e/test_local_directory_sources.py -v --no-cov` — 3 passed, **three consecutive runs** (deterministic)
- `uv run pytest` — 643 passed · `uv run pytest --cov=app --cov-report=term-missing` — **99%** (>90%)
- `uv run pytest tests/e2e/test_git_sources_admin.py -v --no-cov` — 6 passed (phase-35 suite green **unchanged**, no selector collision) · `tests/e2e/test_sync_button.py` — 3 passed
- `uv run ruff check . && uv run pyright` — clean
**Notes:** The repo `.env` ships `BOR_GIT_SOURCES` which the app reads from cwd — the module app explicitly overrides it with an empty string (env beats `.env` file) so the local-only story holds. Left untouched: `TODO.md` (owner's new item, future phase) and `NOTES.md` (never-committed owner notes, as in phase 37).
**Next pending task:** `.agents/phases/todo/39_configurable_brand/01_config_endpoint.md`
@@ -0,0 +1,58 @@
........................................................................ [ 10%]
........................................................................ [ 21%]
........................................................................ [ 31%]
........................................................................ [ 42%]
........................................................................ [ 52%]
........................................................................ [ 63%]
........................................................................ [ 73%]
........................................................................ [ 84%]
........................................................................ [ 94%]
................................... [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/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 80 0 100%
app/config.py 66 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 42 0 100%
app/models.py 60 0 100%
app/rag/__init__.py 0 0 100%
app/rag/agent.py 81 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 174 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 1745 12 99%
coverage gate: app/ 99% (>90%) OK
All checks passed!
0 errors, 0 warnings, 0 informations
validation OK