Skip to content

Commit 938431d

Browse files
committed
Release 0.17.0 (RC): three-model audit fixes + version/changelog
1 parent 5abecab commit 938431d

4 files changed

Lines changed: 42 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,45 @@ All notable changes to Busbar are documented here.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.17.0] — 2026-05-31
9+
10+
Release candidate for final testing ahead of 1.0. Outcome of a three-model code audit
11+
(Opus, Sonnet, qwen3.5) of the full source.
12+
13+
### Fixed (correctness / security)
14+
- **Panics removed on hostile input:** a malformed `Authorization` header could panic on a
15+
UTF-8 boundary; a closing brace before an opening one in an upstream body could underflow
16+
the JSON brace scanner; an API key with a control character could panic the worker. All now
17+
fail cleanly.
18+
- **Circuit-breaker error-rate trip** now uses windowed errors vs windowed total (both from the
19+
sliding window) — a long-running lane no longer spuriously trips on clean recent traffic once
20+
old errors age out.
21+
- **SWRR weight updates are serialized** — concurrent selections could corrupt the algorithm's
22+
invariant and bias distribution.
23+
- **Cooldown jitter** applies its sign (±) instead of only ever lengthening cooldowns.
24+
- **Session affinity** uses a stable hash, so sticky routing survives a restart (was a randomly
25+
seeded hasher).
26+
- **Passthrough auth** now forwards the caller's bearer token (handlers previously dropped it,
27+
silently falling back to the lane's static key).
28+
- **Degraded routing** (least-bad / fallback-pool) now applies cross-protocol translation, so it
29+
is correct when the chosen lane speaks a different protocol.
30+
- Anthropic `tool` role messages map to the `user` role (no nonexistent `tool_use` role → 422);
31+
bedrock parse-error signal typo (`ir-parse``ir_parse`); token-count i64 saturation.
32+
33+
### Fixed (robustness / accounting)
34+
- Per-key rate-limit map evicts stale windows (was an unbounded per-key memory leak).
35+
- `/admin` usage `requests` no longer double-counts non-streaming cross-protocol responses.
36+
- `/stats` `inflight` is derived from the semaphore (was always 0).
37+
38+
### Changed
39+
- **Logging:** a stderr `tracing` subscriber is always installed (level from `RUST_LOG`); OTLP
40+
export composes on top when configured. Previously all spans/warnings were dropped unless OTLP
41+
was set. Operational warnings moved from `eprintln!` to structured `tracing`.
42+
- **Quality:** named the magic numbers/strings (auth modes, breaker states, failover/timeout/
43+
probe/rate-window/price/window-capacity defaults, Anthropic API version); the outcome window is
44+
a `VecDeque` (O(1) eviction); scrubbed internal references from comments; `Cargo.toml` reports
45+
the real version. One unconditional dead-code allow remains (a RAII guard).
46+
847
## [0.16.2] — 2026-05-31
948

1049
### Security

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "busbar"
3-
version = "0.16.2"
3+
version = "0.17.0"
44
edition = "2021"
55
description = "Native-protocol LLM gateway: lossless cross-protocol translation, weighted pools, per-(pool,lane) circuit breaking, and governance — in one static Rust binary."
66
license = "AGPL-3.0-or-later"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ The name comes from electrical distribution: a busbar takes one feed and fans it
2121
out across many breakered circuits — one entry point, weighted distribution,
2222
per-circuit protection.
2323

24-
> **Project status: 0.16.0 (pre-1.0), in active development.** APIs and config may
24+
> **Project status: 0.17.0 (pre-1.0), in active development.** APIs and config may
2525
> change before 1.0. See [`docs/roadmap.md`](docs/roadmap.md) for the
2626
> protocols-not-providers thesis and the auth-adapter design.
2727

0 commit comments

Comments
 (0)