🎉 tau-rag v2.0

Release notes — 68 features, 1096 tests, 6 side-channel analytics stores, 4 background daemons, 4 HTML dashboards.
What v2.0 means: API stability pledge. Everything under /v1/* is now stable. Additive changes only. Breaking changes will be delivered under a new /v2/* namespace. features.* in /v1/version tracks currently-active capabilities so clients can feature-detect.

Headline numbers

MetricValue
Tests passing1096 (up from 32 at v1.32)
Endpoints80+ across /v1 and /v1/admin
Side-channel analytics stores6
Background daemons4
HTML dashboards4
Iterations68 (v1.32 → v2.00)

Architecture (v2.0 shape)

Retrieval core

4 retrievers: bm25 gematria hilbert graph → rank-based fuser → optional reranker → structure-preserving verifier → TAU-Ω signal aggregator.

Observability stack (6 layers, all composable)

LayerShippedPath
pushv1.71 webhook + v1.79 circuit breaker TAU_RAG_AUDIT_WEBHOOK_URL
batchv1.74 audit export /v1/admin/audit/export
pull-streamv1.75 SSE log tail /v1/admin/logs/stream
historyv1.78 metrics + v1.88 content-health /v1/admin/metrics/history
breakerv1.79 (inside webhook dispatcher) /v1/admin/webhook
rulesv1.80 + v1.81 scheduler /v1/admin/alerts

Content analytics (the 6-dim grid)

DimVersionStore
per-docv1.82DocumentStatsStore
per-retrieverv1.83RetrieverAttributionStore
(doc, doc) pairv1.84CoCitationStore
per-queryv1.89QueryStatsStore
doc freshnessv1.94DocFreshnessStore
(query, doc) pairv1.96QueryDocAffinityStore

Cross-cut views: content health (v1.85), update priorities (v1.95), query analytics UI (v1.98), unified dump/restore (v1.97).

Auth & safety

Debugging

Patterns that formed along the way

Side-channel store pattern

Each analytics dimension is an independent module:

Daemon lifecycle pattern

4 background threads (AutoSnapshotter, MetricsHistorySampler, AlertScheduler, AnalyticsRetentionScheduler) share the same shape:

HTML dashboard pattern

4 dashboards (admin UI, content health, chunks viewer, query analytics) share the same design:

Singleton-with-injection

Every stateful module (auth, obs, limiter, cache, 6 analytics stores, 4 schedulers) uses the same pair: module-level singleton + setter for test injection. Lets prod use globals while tests keep clean state per run. No dependency injection framework.

Breaking / deprecation notice

What's still open

Honest accounting:

Credits

This stretch shipped across one long coding session, with one Living Document (RAG_Projects_Ultimate_Report.html) tracking every iteration. The Living Doc remains the canonical changelog — this file is a v2.0 summary.

Released 19 April 2026.