v0.9.5 — Debt Resolution & Dashboard Backend
EcoDB v0.9.5 — Debt Resolution
Zero-debt release. All architectural debt from v0.9.0 resolved. Dashboard backend complete.
SSE org-scoped broadcast
Events now carry org_id. Non-super clients only receive their organization's events. Worker document lifecycle events (document_indexed, document_failed, duplicate_detected) now send correctly with X-Internal-Secret auth and org_id resolution.
Method-aware rate limiting
POST /memories/preview = 10/min, POST /memories = 20/min. GET paths unchanged at 120/min. Rate limit key now includes HTTP method — different methods on the same path don't share buckets.
Louvain optimization
SQL pre-filtering via JOIN instead of Python set filtering. Configurable LOUVAIN_MIN_DEGREE env var. Empty result guard prevents accidental cluster data wipe.
Search improvements
user_id filter now correctly excludes document chunks (documents have no individual author). New warnings field in SearchResponse for machine-parseable query behavior notices.
10 mechanical fixes
- TeamResourceLink model with actual fields
- Node name case-insensitive lookup (trigram suggestion)
- Graph clusters pagination (limit/offset)
- AGE statement_timeout 4.5s on Cypher queries
- Onboarding contradictions = None stub
- graph_clusters cleanup on entity merge
- SSE event_type newline sanitization
- Clusters offset cap (50k)
- Dead code removal
- Rate limit key eviction for inactive users
Documentation
docs/design/graph-org-scoping.md— shared graph + visibility layer directiondocs/migration-v0.9-to-v0.9.5.md— migration guide with DD8 trigger behaviordocs/DASHBOARD_BACKEND_GUIDE.md— complete backend integration guide for frontend- 4 new trigger verification tests
- Schema v5.1.1 (graph_clusters table)
2 adversarial design loops (Prima) + 2 construction loops (adv-code + adv-seg + verificador + code). All findings resolved.