You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Load testing now serves through the real ASGI bridge (asgi:app) instead of a bare Flask app, so queue-wait/preflight/abort metrics are measured and LUMEN_WSGI_WORKERS is honored (#47).
Load-test accounts are created with access_type: "allowed" instead of the legacy unrecognised "whitelist" (which denied every model).
A missing T0 bridge mark is now loudly logged (and a 500 under LUMEN_REQUIRE_BRIDGE=1) instead of silently skipped.
Every new PostgreSQL session is pinned to UTC (SET TIME ZONE 'UTC' on connect), fixing /usage heatmap and bucket errors on non-UTC servers.
A client disconnecting in the milliseconds between billing and the final stream yield no longer loses the reply it paid for.
/chat/stream closes the LLM stream in a finally instead of relying on garbage collection to bill abandoned streams.
Billing failures on the streaming API are no longer misreported as upstream failures.
Bumped dependency floors to the majors actually locked/tested (openai>=3, flask-limiter>=4, pypdf>=6, psutil>=7, pytest>=9, pytest-cov>=7).
Client disconnects are now detected in production — the ASGI bridge delivers http.disconnect and both streaming paths stop/close on it.
All backend calls are timeout/retry-bounded, configurable under llm:.
A half-open TCP link no longer pins a worker thread; sends are bounded by LUMEN_WSGI_SEND_TIMEOUT.
Abandoned streams are now billed for what they consumed (exact usage, else an estimate) instead of zero cost.
The test suite no longer runs against the dev database; it requires SQLite at exactly test_lumen.db.
PostgreSQL integration tests use per-module private migrations instead of sharing (and clobbering) one DB.
The aware-last_refill_at test flake is fixed and the branch is actually reached.
Every span in the LLM paths now uses one monotonic clock (tests/unit/test_single_clock.py).
/usage no longer drops the first partial hour of each window.
Deleted entities no longer reappear in /usage after a continuous-aggregate refresh.
Org-wide /usage charts no longer lag up to two hours (continuous aggregate built real-time, materialized_only=false).
Fixed two flaky pool-registry tests and the metrics-snapshot race.
Helm-deployed config no longer warns about its own config_editor/email_themes keys.
app.encryption_key and app.logs.level are now flagged restart-required.
Chart README no longer documents a migration Job that does not exist (migrations run inline in the entrypoint).
Startup-probe budget raised to 30 minutes (configurable) so a migration can complete.