20260927
What's Changed
- ci: run pull_request jobs on GitHub-hosted runners by @realtmxi in #1348
- docs(readme): link the RouteWise docs and drop the repeated lab link by @realtmxi in #1413
- fix(serving): read the session Claude Code actually sends today by @1a1a11a in #1391
- fix(alerts): stop naming a broken endpoint's victims as its offenders by @1a1a11a in #1415
- fix(routing): admit one probe to a half-open circuit, not the whole burst by @1a1a11a in #1418
- fix(auth): name the caller behind an ip_blocked row by @1a1a11a in #1420
- fix(alerts): measure quota overrun against the cap that is actually enforced by @1a1a11a in #1422
- fix(serving): redact internal error detail from responses, preserve every status code by @1a1a11a in #1423
- feat(alerts): name the sources and accounts behind an auth failure spike by @1a1a11a in #1424
- fix(ci): tolerate out-of-order Actions job timestamps in timing summary by @1a1a11a in #1425
- fix(routewise): cap probing at one request per worker, not one per model by @1a1a11a in #1429
- fix(adapters): repair malformed tool_call arguments before they reach upstream by @1a1a11a in #1432
- fix(alerts): log refused Slack deliveries and bound the retries they trigger by @1a1a11a in #1435
- fix(routing): surface a fallback route's client 400 instead of a dead primary's 500 by @1a1a11a in #1434
- feat(routing): make silently-excluded routes and health verdicts observable by @1a1a11a in #1437
- fix(serving): detect and log tool calls the gateway streams out with unparseable arguments by @1a1a11a in #1433
- feat(alerts): page on client-error bursts and per-model stream failures by @1a1a11a in #1436
- perf(routewise): stop per-request routing cost from scaling with traffic by @1a1a11a in #1426
- fix(alerts): stop logging the Slack webhook URL on every alert post by @1a1a11a in #1438
- fix(tokens): stop tiktoken from crashing on special-token text by @1a1a11a in #1441
- feat(alerts): put the request id on firing pages by @1a1a11a in #1442
- fix(alerts): honour every state_changes knob, not just one by @1a1a11a in #1439
- docs: drop dead D1 and ollama references by @1a1a11a in #1443
- feat(adapters): cap outbound concurrency per provider key, AIMD on 429 by @1a1a11a in #1448
- feat(admin): show the live adaptive upstream concurrency limits by @1a1a11a in #1449
- feat(streaming): detect a stalled upstream before the proxy's clock does by @1a1a11a in #1447
- fix(frontend): let prettier own formatting, unblock next.config.js edits by @1a1a11a in #1446
- refactor: retire nginx and grafana by @1a1a11a in #1444
- fix(ci): stop the example stacks stranding a Docker volume per run by @1a1a11a in #1450
- chore: promote dev to main for the production lock bump by @1a1a11a in #1451
- chore: drop dead component and unused runtime deps by @1a1a11a in #1452
- fix(alerts): stop announcing a recovery for auth_ip_blocked by @1a1a11a in #1453
- fix(adapters): read the upstream's SSE error frame instead of blaming framing by @1a1a11a in #1445
- docs(readme): add the Slack workspace invitation by @realtmxi in #1455
- refactor(routing): add hybrid router abstraction over pluggable backends by @realtmxi in #1454
- docs(routing): pin hybrid design to the #1454 merge by @realtmxi in #1458
- docs(developer): document the endpoint execution boundary from #1454 by @realtmxi in #1459
- docs(architecture): illustrate routing contracts and hybrid topologies by @realtmxi in #1460
- docs(agents): add hierarchical guidance convention and routing pilot by @B-A-M-N in #1456
- feat(routewise): add prefill-load-aware routing by @B-A-M-N in #1419
- fix(storage): close hard-delete erasure race with advisory-lock fence (#1421) by @B-A-M-N in #1428
- fix(routewise): validate prefix-cache locality with observed cache reuse by @B-A-M-N in #1417
- fix(serving): resolve client IP only across trusted proxy boundaries (#1036) by @B-A-M-N in #1427
- docs(readme): cite RouteWise with its EuroSys '27 ACM metadata by @realtmxi in #1467
- feat(frontend): support distribution-owned public UI through the upstream build by @realtmxi in #1465
- fix(tokens): upgrade tiktoken so unsplittable runs stop freezing the gateway by @realtmxi in #1470
- Revise Consent Language by @williamnixon20 in #1469
- fix(streaming): answer a pre-first-byte upstream failure with its real status by @1a1a11a in #1474
New Contributors
Full Changelog: 2026091...2026092