## What's Changed since v0.8.2
### Multi-Provider LLM — Gemini 2.5 Flash (Experimental)
**LlmTransport abstraction** — pluggable provider layer with `AnthropicTransport` and `GeminiTransport`:
- `LlmTransport` interface and `TransportRouter` for model-to-provider routing (Story 37.1)
- `AnthropicTransport` wraps existing Claude SDK calls (Story 37.2)
- `GeminiTransport` wraps `@google/gemini-cli-core` with Google OAuth (Story 37.3)
- Auth check with graceful fallback to Claude when Gemini is unavailable (Story 37.5)
- Circuit breaker: auto-falls back to Claude on repeated Gemini failures
**Axis routing** — utility, duplication, overengineering now routed to Gemini 2.5 Flash (Story 38.1):
- 100% accuracy on gold-set benchmarks, 2-5s latency, implicit caching (96% hit rate on 2nd call)
- Correction, tests, best practices, documentation remain on Claude (quality-critical)
- Deliberation stays on Claude Opus (non-negotiable safety net)
**NLP summarization** routed to Gemini Flash (Story 39.1) — 100% schema validity, $0/token
**Impact:** ~69% reduction in Claude API calls, ~74% cost reduction, ~35-40% faster runs
**New commands:**
- `anatoly providers` — verify LLM connectivity (Claude + Gemini status)
**Infrastructure:**
- Dual semaphores for Claude and Gemini concurrency management
- Provider field in logs and run metrics (Story 39.2)
### Review Engine
- **AST-based import extraction** — replaced regex with tree-sitter AST traversal for `require()`, Python `from-import`, and Bash recursion
- **False positive reduction** — filter private symbols, deduplicate actions, calibrate severity, conservative test coherence
- **Test discovery** — expanded test file discovery, inject tests into deliberation context, deduplication
- **Deliberation memory overhaul** — group by symbol instead of per-axis entries, merge stale entries, escape regex, rebuild on corrupted JSON, truncate `original_detail` to reclassified axes only
- **`--flush-memory` flag** — reset deliberation memory before a run
- **Rate limit handling** — sleep until rate limit reset instead of degrading reviews
- Raise default review concurrency from 4 to 8
### Report
- **`public_report.md`** — new polished public-facing report layout
- **Report upstream extracted** — migrated to standalone script in `anatoly-reports` repo
- **Redesigned report sections** — merged Findings Summary into Axes table, emoji health bars, verdict breakdown for all-clear axes, doc coverage section, total findings count in hero block
- Absolute links to anatoly-reports + breadcrumb navigation
- Executive summary with all 7 axes, fix token metrics
### Clean Loop
- **Subcommand rename** — `clean-run` → `clean run`, `clean-sync` → `clean sync`, etc.
- `clean generate`, `clean run`, `clean sync` as proper subcommands with tests
- Bump default iterations from 10 to 50
- Rename Ralph → clean loop in source code
### Documentation Pipeline
- **Smart chunking** — programmatic H2+H3+paragraph splitting replaces Haiku LLM chunking ($0)
- **Coherence optimization** — single-pass Sonnet, auto-fix, content injection (was multi-pass Opus)
- **Incremental updates** — scope doc updates to touched modules only
- **Doc deduplication** — auto-sync project docs from internal when trees are identical, `docs identity` and `docs reset-project` commands
- **Batch doc embeddings** — one mega-batch instead of per-file
- Auto-fix missing h1 heading, strip preamble from multi-turn agent output
- Raise scaffold maxTurns from 5 to 15, coherence injection budget to 50%
- Track RAG costs, expose cached status for doc section indexing
- Modular type-context injection + remove dead strategy2
### CLI & UX
- Show "Done !" instead of "0/N checks left" on file completion
- Clear screen on terminal resize to prevent rendering glitches
- Show "done" on completed pipeline tasks instead of stale counters
- Two-column models table, doc cache refresh, estimate doc stats
- Cache breakdown in pipeline output, error dumps, `[review]` prefix
- Reduce path truncation in progress display
### Rust Support
- Chained `super::` resolution, workspace glob expansion, cross-crate usage tracking
- Cargo workspace detection as Monorepo
- Language-aware output formatting
### Security
- Shell injection fixes — `execFileSync`, validate NWO format
### JSDoc Coverage (clean loop auto-fix)
- Added JSDoc for ~200 symbols across 70 files (auto-generated via clean loop)
### Bug Fixes
- RAG: block fallback to lite when index was built with advanced-gguf
- Symlink guard on sync/reset, conditional sync task
- Rate limiter max standby cycles, doc-gen rate limit detection
- Workspace module extraction, gap detection, Cargo detection
- Adversarial review — 12 fixes across CLI, RAG, core, commands
- Breadcrumb links, fork detection, doc coverage on cached runs
**Full Changelog**: https://github.com/r-via/anatoly/compare/v0.8.2...v0.9.0