What's Changed
- fix(quota-planner): compare warmup reset epochs in UTC by @Komzpa in #1623
- Keep HTTP bridge missing-created watchdog armed after prelude by @Komzpa in #1580
- docs(openspec): archive landed performance and reliability changes by @Soju06 in #1694
- fix(proxy): release the API-key reservation on all exits of the models endpoints by @Komzpa in #1653
- fix(compact): omit oversized non-state tool tail by @Komzpa in #1235
- fix(dashboard): separate quota and purchased credits by @Dvredin in #1670
- fix(dashboard): exclude cancelled/client_disconnected from error rate by @Soju06 in #1696
- fix(proxy): durably recover hard HTTP bridge operations by @shaqman in #1657
- fix(http-bridge): keep idle retirements out of retry circuit by @leventov in #1677
- feat(reset-credits): add refresh scheduler enable toggle by @Soju06 in #1701
- feat(telemetry): anonymous usage telemetry with informed opt-out consent by @Soju06 in #1618
- fix(dashboard): pin web asset MIME types against poisoned OS registries by @Soju06 in #1709
- docs(openspec): archive 90 landed changes and sync their specs by @Soju06 in #1713
- fix(dashboard): distinguish first-run empty states from filter mismatch by @mastertyko in #1729
- fix(chat): omit unset tools on mapped Responses payloads by @mastertyko in #1725
- fix(http-bridge): refuse foreign claims on live DRAINING leases by @mastertyko in #1722
- fix(proxy): keep stream idle timeouts account-neutral by @mastertyko in #1718
- fix(proxy): settle compact failover before account health by @mastertyko in #1717
- fix(proxy): close non-stream chat collect and map error status by @mastertyko in #1712
- fix(proxy): sweep idle bridge sessions without request traffic by @Soju06 in #1747
- docs(proxy): document cluster-wide account cap partitioning by @Soju06 in #1750
- fix(cache): keep an aborted invalidation bump queued by @Soju06 in #1748
- feat(db): report SQLite write transactions that outlive the busy timeout by @Soju06 in #1752
- fix(proxy): fence successor bridge claims against the retiring predecessor by @Soju06 in #1751
- fix(proxy): add explicit Daybreak capability routing by @mastertyko in #1742
- fix(review): keep Codex review sessions resumable by @leventov in #1678
- fix(accounts): recover Free accounts after reset by @HulianBuligon in #1700
- fix(proxy): keep file-pin owner on soft 1011 reconnect by @mastertyko in #1761
- fix(proxy): persist file ownership across replicas by @mastertyko in #1521
- fix(proxy): scope backend Codex affinity by thread identity by @leventov in #1703
- fix(http-bridge): preserve goal-restart recovery across reconnects by @leventov in #1680
- fix(dashboard): preserve cancelled request count by @mastertyko in #1766
- fix(dashboard): show cancelled request logs by @mastertyko in #1769
- fix(dashboard): surface upstream route metadata by @mastertyko in #1767
- fix(models): correct GPT-5.6 context windows by @kidclone3 in #1691
- fix(auth): guard the refresh singleflight negative cache by successor ownership by @Komzpa in #1652
- test(proxy): add property tests for response payload invariants by @iqbalmaulana03 in #1699
- fix(http-bridge): dedupe retry circuit failures per send by @choi138 in #1743
- fix(proxy): abandon unavailable owner on thread-scoped goal restart by @mastertyko in #1764
- fix(proxy): do not rewrite thread locality for a file-pin owner by @mastertyko in #1765
- fix(usage): settle live snapshots after account consolidation by @mastertyko in #1773
- fix(proxy): normalize single-account warmup failures by @mastertyko in #1774
- fix(proxy): settle terminal spool append failures by @mastertyko in #1775
- chore(github): retire codex review label gate in favor of CodeRabbit by @Soju06 in #1763
- fix(proxy): hold fenced hard turns through cooldown by @kevinsslin in #1739
- fix(proxy): stop abandoning an unresolved inflight session-creation future by @Komzpa in #1644
- chore(tooling): run Makefile Python scripts through uv by @kevinsslin in #1741
- fix(proxy): separate websocket scope cleanup budget by @kevinsslin in #1723
- fix(proxy): route source-owned models off the WebSocket transport by @Borealin in #1659
- feat(proxy): report websocket cleanup phase by @kevinsslin in #1726
- fix(proxy): complete disconnect cleanup — pool leak, charged reservation, mutable terminal reason by @Komzpa in #1645
- fix(dashboard): show cancellation totals in reports by @mastertyko in #1772
- feat(model-sources): advertise operator-declared reasoning efforts by @Borealin in #1661
- feat(ui): customize dashboard request-log columns by @BrenticusMaximus in #1503
- fix(proxy): keep abrupt eventless websocket drops account-neutral by @Soju06 in #1777
- fix(db): bound wedged SQLite session teardown and reclaim the connection by @Soju06 in #1778
- perf(proxy): disable permessage-deflate on direct-egress upstream websockets by @Soju06 in #1786
- perf(middleware): convert BaseHTTPMiddleware layers to pure ASGI by @Soju06 in #1787
- fix(compact): recover previous-response-pinned compaction from quota-excluded owners by @Soju06 in #1780
- perf: coalesce same-owner sticky session TTL refresh upserts by @Soju06 in #1790
- docs(dashboard): clarify routing, sticky affinity, quota thresholds, warm-up, and eligibility copy by @Soju06 in #1781
- fix(server): serve h2c upgrade offers as plain HTTP/1.1 instead of rejecting them by @Soju06 in #1782
- fix(db): add postgres shm_size and raise default pool headroom by @Soju06 in #1791
- perf(dashboard): cap projections bulk usage-history read per account by @Soju06 in #1779
- perf(accounts): bound the account-listing live tail with a 2h fold lag and a 30s summary cache by @Soju06 in #1792
- perf(accounts): make account deletion a fast mark + background batch drain by @Soju06 in #1795
- fix(usage): fence leaked live-usage-ingestor tasks and settle their failures deterministically by @Soju06 in #1783
- fix(docker): upgrade util-linux family in runtime image for CVE-2026-53615 by @Soju06 in #1796
- perf(proxy): validate stream payloads only for lifecycle events by @Soju06 in #1784
- perf(api-keys,proxy): shape ORM hot-path queries by @Soju06 in #1788
- perf(proxy): relay unmodified SSE frames verbatim by @Soju06 in #1785
- perf(api-keys): skip usage reservations when no limit applies by @Soju06 in #1789
- chore: release v1.24.0-beta.1 by @Soju06 in #1704
- chore(ci): bump astral-sh/setup-uv from 9.0.0 to 10.0.1 by @dependabot[bot] in #1802
- chore(deps): bump the python-minor-patch group with 10 updates by @dependabot[bot] in #1806
- chore(deps): bump openai from 2.53.0 to 3.0.0 by @dependabot[bot] in #1807
- chore(docker): bump astral-sh/uv from 0.12.3 to 0.12.5 by @dependabot[bot] in #1803
- chore(deps): bump the frontend-minor-patch group in /frontend with 12 updates by @dependabot[bot] in #1804
- chore(ci): bump github/codeql-action/upload-sarif from 4.37.6 to 4.37.7 by @dependabot[bot] in #1805
- feat(api-keys): allow per-key reasoning effort policies by @yshishenya in #1642
- test(proxy): keep eventless anchored bridge replay fail-closed by @kevinsslin in #1736
- feat(reports): Add API Key Filtering to Reports Dashboard by @SAKTHIMARAN-VENOM in #1728
- fix(proxy): compact transport switch + trigger canonicalization (supersedes #1749) by @Soju06 in #1809
- feat(proxy): support Ultrafast service tier by @evan-choi in #1734
- feat(ui): surface reasoning token usage by @chaoxu in #1801
- fix(models): raise GPT-5.6 bootstrap max_context_window to 872k by @zenasharp in #1813
- fix(proxy): drop malformed compact item ids by @yshishenya in #1815
- chore(openspec): archive GPT-5.6 context-window changes in dependency order by @Soju06 in #1819
- fix(proxy): classify parameterless previous response errors by @rknightion in #1818
- chore: release v1.24.0-beta.2 by @Soju06 in #1810
- fix(proxy): bind account-bound retries to dispatch owner by @mastertyko in #1829
- fix(proxy): reject truncated chat completion streams by @mastertyko in #1833
- fix(proxy): retain image reservation recovery ownership by @mastertyko in #1822
- fix(warmup): warm paid-to-free transitions by @HulianBuligon in #1825
- feat(model-sources): embeddings source capability with request-log accounting by @Komzpa in #1776
- fix(helm): bind TTFT dashboard SQL datasource by @mastertyko in #1827
- fix(reports): format full Cost values with grouping separators by @hanseo0507 in #1814
- fix(proxy): preserve compact terminal error type by @mastertyko in #1824
- feat(config): timeout-invariant linter — validate deadline/TTL inequalities at startup and in CI by @Komzpa in #1622
- chore(repo): drop root agent-debris files and enforce a root-file allowlist budget by @Soju06 in #1837
- fix(models): apply context-window overrides to /v1 input context fields by @yeongjun-cigro in #1808
- test(oauth): make test_oauth_flow order-independent by fencing the shared OAuth store by @Soju06 in #1839
- fix(http-bridge): classify recovery error frames and poison same-anchor eventless failures by @Soju06 in #1841
- fix(proxy): O(1) shared-future admission waits + event-loop lag watchdog by @Soju06 in #1842
- feat(telemetry): report consent state and send a decision-time opt-out signal by @Soju06 in #1835
- chore: release v1.24.0-beta.3 by @Soju06 in #1834
- feat(frontend): configure model-source reasoning efforts by @Komzpa in #1848
- fix(proxy): absorb replay-safe compaction recovery by @Komzpa in #1849
- fix(proxy): terminate suppressed duplicate tool-call replays by @Komzpa in #1706
- fix(db): repair retired identity/warmup migration stamp by @Komzpa in #1847
- fix(proxy): demote quarantined bridge reattach keys by @Komzpa in #1730
- fix(proxy): guard model-transition owner-conflict fork by @Komzpa in #1619
- Revert five squash merges landed outside the merge triage round by @Komzpa in #1858
- fix(proxy): wait on usage-refresh singleflight without asyncio.shield by @Soju06 in #1897
- chore: release v1.24.0-beta.4 by @Soju06 in #1851
- chore(deps): bump the python-minor-patch group with 7 updates by @dependabot[bot] in #1915
- chore(main): release 1.24.0 by @Soju06 in #1692
New Contributors
- @Dvredin made their first contribution in #1670
- @kidclone3 made their first contribution in #1691
- @kevinsslin made their first contribution in #1739
- @Borealin made their first contribution in #1659
- @BrenticusMaximus made their first contribution in #1503
- @SAKTHIMARAN-VENOM made their first contribution in #1728
- @evan-choi made their first contribution in #1734
- @chaoxu made their first contribution in #1801
- @zenasharp made their first contribution in #1813
- @hanseo0507 made their first contribution in #1814
Full Changelog: v1.23.0...v1.24.0
Install / Run
uvx codex-lb
docker pull ghcr.io/Soju06/codex-lb:1.24.0
helm install codex-lb oci://ghcr.io/soju06/charts/codex-lb --version 1.24.0