What's Changed
- fix(balancer): decorrelate round-robin tie-breaking across replicas by @Soju06 in #1327
- fix(observability): anchor TTFT to the attempt, expose queue wait as a dashboard trend by @Soju06 in #1333
- docs(openspec): archive accurate-stream-speed-metrics by @Soju06 in #1334
- docs(contributing): codify simplicity principles and merge gates by @Soju06 in #1336
- fix(proxy): settle API-key reservation before budget-exhausted compact preflight raises by @Soju06 in #1332
- docs(site): add mkdocs documentation site and slim README to quick-start scope by @Soju06 in #1337
- fix(proxy): reject unsupported multi-worker-per-instance for shared per-account caps by @Soju06 in #1328
- ci(budgets): enforce simplicity budgets on README, env example, and core nav by @Soju06 in #1341
- feat(dashboard): group advanced navigation and settings behind progressive disclosure by @Soju06 in #1339
- docs(openspec): archive the simplicity-effort changes by @Soju06 in #1347
- test(balancer): make sticky-selection test deterministic under decorrelated tie-breaking by @Soju06 in #1348
- fix(oauth): persist dashboard OAuth flow state for multi-replica by @Soju06 in #1329
- docs(readme): restore the features grid and client logo table by @Soju06 in #1346
- refactor(config): remove zero-risk tunables from the settings surface by @Soju06 in #1351
- chore(openspec): archive replica-reliability + follow-up changes by @Soju06 in #1350
- fix(proxy): recover from host network changes by @leventov in #1234
- fix(proxy): preserve HTTP bridge model-transition forks by @Komzpa in #1356
- fix(proxy): record early downstream cancellations by @Komzpa in #1324
- fix(models): complete required Codex catalog fields by @luawl in #1299
- fix(proxy): recover stale response-create gates by @luawl in #1296
- fix(proxy): forward Codex standalone web search by @HeroOfOdyssey in #1232
- fix(proxy): retry server_is_overloaded responses by @mereyabdenbekuly-ctrl in #1315
- chore(contributors): add fozbek to all-contributors by @Soju06 in #1361
- fix(usage): price gpt-5.6 personality models by @fozbek in #1275
- refactor(config): remove phase-2 low-risk tunables from the settings surface by @Soju06 in #1360
- refactor(config): remove phase-3 pool and drain tunables from the settings surface by @Soju06 in #1362
- fix(proxy): recover sequenced Codex prewarms by @luawl in #1359
- feat(model-sources): report upstream generation timings by @evaldass in #1319
- chore(contributors): add ShiroKSH and aididhaiqal to all-contributors by @Soju06 in #1365
- fix(api-keys): reject duplicate limit rules on create by @ShiroKSH in #1312
- feat(settings): manage data retention from the dashboard by @Soju06 in #1364
- refactor(config): retire prewarm canary scaffolding by @Soju06 in #1363
- docs(openspec): archive the settings-reduction changes by @Soju06 in #1368
- docs(reference): add generated settings reference with drift guards by @Soju06 in #1369
- fix(proxy): retry stale per-account model rejections by @luawl in #1321
- fix(proxy): release pending websocket stream leases on disconnect by @tobwen in #1282
- feat(ui): add Korean dashboard locale by @codemoo in #1375
- fix(proxy): retry upstream model capacity errors by @Komzpa in #1385
- fix(proxy): preserve encrypted compaction item ids by @mhughdo in #1316
- feat(proxy): add stale-anchor diagnostics by @mastertyko in #1225
- fix(balancer): reject implausible rate-limit resets by @leventov in #1374
- fix(proxy): route Spark using fresh per-account quota evidence by @mastertyko in #1248
- fix(security): harden trusted Forwarded chain resolution by @mastertyko in #1377
- feat(accounts): add reset-credit controls and auto redeem by @codemoo in #1358
- fix(docker): preserve runtime readability for owner-only build files by @yshishenya in #1373
- docs: add yshishenya and alchemistkiv as contributors by @Soju06 in #1387
- fix(security): enforce trusted proxy locality by @mastertyko in #1381
- fix(proxy): slim inline images nested in historical tool-call outputs by @Soju06 in #1344
- perf(db): optimize dashboard hot-path indexes by @Soju06 in #1386
- fix(security): inspect repeated session proxy headers by @mastertyko in #1378
- fix(config): reject empty trusted proxy CIDRs by @mastertyko in #1379
- fix(reports): reject inverted date ranges by @mastertyko in #1396
- fix(dashboard): keep overview visible when request logs fail by @mastertyko in #1397
- fix(usage): make weekly-primary remap tiebreak data-aware by @zepx in #1391
- fix(proxy): spill bare session affinity under account caps by @leventov in #1382
- test(proxy): characterize load-balancer contract before decomposition by @stemirkhan in #1392
- fix(db): pin asyncpg session time zone to UTC by @Daltonganger in #1352
- fix(observability): improve TTFT and TPS accuracy by @jamesx0416 in #1325
- fix(proxy): purge stale durable bridge rows on startup by @tobwen in #1310
- refactor(proxy): restore architecture ratchets by @mastertyko in #1430
- chore(deps): bump the python-minor-patch group with 12 updates by @dependabot[bot] in #1429
- chore(deps): bump @testing-library/jest-dom from 6.9.1 to 7.0.0 in /frontend by @dependabot[bot] in #1428
- chore(docker): bump astral-sh/uv from 0.11.28 to 0.11.30 by @dependabot[bot] in #1425
- chore(ci): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #1421
- chore(ci): bump actions/labeler from 6.1.0 to 6.2.0 by @dependabot[bot] in #1423
- chore(docker): bump pgautoupgrade/pgautoupgrade from 18-alpine to 18-alpine by @dependabot[bot] in #1419
- chore(ci): bump actions/deploy-pages from 4.0.5 to 5.0.0 by @dependabot[bot] in #1424
- chore(ci): bump actions/create-github-app-token from 2.2.2 to 3.2.0 by @dependabot[bot] in #1420
- fix(balancer): recover probing accounts by @leventov in #1376
- perf(proxy): cache upstream-route resolution per account by @Soju06 in #1283
- chore(deps): bump the frontend-minor-patch group in /frontend with 12 updates by @dependabot[bot] in #1426
- ci(db): run PostgreSQL migration lock tests by @mastertyko in #1444
- fix(cli): reject out-of-range server port before startup by @mastertyko in #1400
- fix(proxy): bound raw HTTP request ingress by @mastertyko in #1440
- fix(proxy): serialize shared-session rate-limit reads by @mastertyko in #1432
- fix(proxy-responses): normalize Lite reasoning context by @mastertyko in #1431
- fix(db): reject empty migration database URL by @mastertyko in #1399
- fix(proxy): dedup and cap oversized response.create dumps by @ozpool in #1366
- fix(proxy): recover idle Codex Desktop bridge by @mastertyko in #1439
- feat(ui): header brand back to /dashboard on click by @huzky-v in #1452
- fix(api): give thread-goal GET/POST distinct operationIds by @mastertyko in #1398
- fix(shutdown): drain audit and fleet tasks by @mastertyko in #1443
- docs(replica): refresh operations context by @mastertyko in #1445
- perf(automations): bound run-history query work by @mastertyko in #1451
- perf(usage): persist account snapshots transactionally by @mastertyko in #1448
- perf(usage): scope refresh work to selected account by @mastertyko in #1446
- feat(helm): make ExternalSecret remote refs configurable by @KakatkarAkshay in #1455
- feat(conversation): implementation on conversation grouping on Opencode + Codex by @huzky-v in #1453
- fix(uploads): bound multipart request resources by @mastertyko in #1447
- fix(proxy): ignore API-key-enforced service tier a model never advertises by @ozpool in #1438
- fix(auth): require trusted-proxy identity consensus by @mastertyko in #1380
- ci(proxy): realign architecture ratchets with main by @mereyabdenbekuly-ctrl in #1435
- fix(proxy): recover verified responses after owner loss by @mhughdo in #1437
- fix(useragent): fixing the unexpected category on useragent group by @huzky-v in #1458
- chore(ci): bump actions/checkout from 7.0.0 to 7.0.1 by @dependabot[bot] in #1422
- chore(deps): bump typescript from 6.0.3 to 7.0.2 in /frontend by @dependabot[bot] in #1427
- feat(helm): support Gateway API rule filters by @KakatkarAkshay in #1459
- fix(streaming): preserve terminal no-replay boundaries by @Komzpa in #1389
- fix(proxy): harden compact continuity recovery by @Komzpa in #1441
- fix(compact): preserve historical side-effect anchors by @Komzpa in #1418
- ci: keep needs rebase labels current by @Komzpa in #1460
- test(ui): add real dashboard browser smoke by @mastertyko in #1449
- fix(ci): run ruff from the locked environment by @Soju06 in #1465
- chore(main): release 1.22.0 by @Soju06 in #1330
New Contributors
- @mereyabdenbekuly-ctrl made their first contribution in #1315
- @fozbek made their first contribution in #1275
- @ShiroKSH made their first contribution in #1312
- @yshishenya made their first contribution in #1373
Full Changelog: v1.21.0...v1.22.0
Install / Run
uvx codex-lb
docker pull ghcr.io/Soju06/codex-lb:1.22.0
helm install codex-lb oci://ghcr.io/soju06/charts/codex-lb --version 1.22.0