Files
ducoterra dbf2af26c6 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.
2026-09-05 10:57:07 -04:00

2.1 KiB
Raw Permalink Blame History

Phase 15 complete. Final report:

Implemented

  • steering_notes table (migration 0003, applied) + SteeringNote model + BOR_STEERING_MAX_CHARS setting
  • Stateless CRUD: GET/POST /api/steering (trimmed, 1–2000 chars, 201/422), DELETE /api/steering/{id} (204/404), newest-first list
  • <tuning> prompt section (numbered, budget-capped with […truncated…]) in both HIGH and DEFLECT prompts, between <relevance> and the mode body; zero-note prompts byte-identical to before; per-turn log gains tuning=N
  • E2E mock echoes first tuning note as (tuning: …) suffix
  • UI: Tune button in every completed brain bubble's meta row (≥44px), inline labeled form (maxlength 2000, keep-on-failure error role=alert, .tune-saved role=status), header "Tuning" toggle + count badge + panel (region, newest-first, labeled per-note delete, polite live-region announcer), text-only note rendering (XSS-safe), Phase-08 tokens
  • README "Tuning your answers" + config rows; owner's persona edits applied (no "you've got this", no mandated deflection opening) with verbatim test aligned

Gates

  • uv run pytest --cov=app --cov-report=term-missing → 241 passed, 99% (was 98.9% pre-phase)
  • uv run ruff check . → clean; uv run pyright → 0 errors
  • uv run pytest tests/e2e/test_steering.py -v --no-cov → 4 passed; regressions test_chat_rag/test_honest_deflection/test_retrieval_quality + all 13 other E2E suites green in isolation
  • Committed: fc0d9a2 feat(rag): steering notes — tune how Brain answers… (--no-gpg-sign)

Decisions/deviations

  • .agents/PLAN.md untouched (harness rule overrides phase step 7) — the PLAN §6 persona revision is recorded in app/rag/prompts.py + test docstrings instead; §4/§5/§7.5/§9/roadmap rows still need the harness/owner update
  • Owner's persona edits weren't present in the (clean) working tree; I applied exactly the two documented edits
  • Unit file named test_steering_prompts.py (basename collision with integration test_steering.py); killed a stale pre-change uvicorn squatting on port 8123 that initially masked E2E results

Next pending phase: none — todo/ is empty.