From ced55d6703fb605b1f40ce26c5887c6512b2a1f6 Mon Sep 17 00:00:00 2001 From: fylorn <249551762+fylorn@users.noreply.github.com> Date: Thu, 22 Oct 2026 21:25:58 +0800 Subject: [PATCH 1/2] 0.80.0 Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 42 ++++++++++++++++++++--------------------- Cargo.toml | 2 +- release-notes/0.80.0.md | 19 +++++++++++++++++++ 3 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 release-notes/0.80.0.md diff --git a/Cargo.lock b/Cargo.lock index f158091d..bc0d9f6d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3670,7 +3670,7 @@ dependencies = [ [[package]] name = "tw-api" -version = "0.79.0" +version = "0.80.0" dependencies = [ "serde", "serde_json", @@ -3681,7 +3681,7 @@ dependencies = [ [[package]] name = "tw-bedrock" -version = "0.79.0" +version = "0.80.0" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -3702,7 +3702,7 @@ dependencies = [ [[package]] name = "tw-breaker" -version = "0.79.0" +version = "0.80.0" dependencies = [ "serde", "serde_json", @@ -3710,7 +3710,7 @@ dependencies = [ [[package]] name = "tw-config" -version = "0.79.0" +version = "0.80.0" dependencies = [ "blake3", "libc", @@ -3736,7 +3736,7 @@ dependencies = [ [[package]] name = "tw-control" -version = "0.79.0" +version = "0.80.0" dependencies = [ "axum", "base64 0.22.1", @@ -3781,7 +3781,7 @@ dependencies = [ [[package]] name = "tw-dialect" -version = "0.79.0" +version = "0.80.0" dependencies = [ "memchr", "serde", @@ -3790,7 +3790,7 @@ dependencies = [ [[package]] name = "tw-engine" -version = "0.79.0" +version = "0.80.0" dependencies = [ "chrono", "serde", @@ -3804,7 +3804,7 @@ dependencies = [ [[package]] name = "tw-gateway" -version = "0.79.0" +version = "0.80.0" dependencies = [ "arc-swap", "async-stream", @@ -3855,7 +3855,7 @@ dependencies = [ [[package]] name = "tw-guard" -version = "0.79.0" +version = "0.80.0" dependencies = [ "aho-corasick", "base64 0.22.1", @@ -3873,7 +3873,7 @@ dependencies = [ [[package]] name = "tw-link" -version = "0.79.0" +version = "0.80.0" dependencies = [ "serde", "serde_json", @@ -3887,7 +3887,7 @@ dependencies = [ [[package]] name = "tw-observe" -version = "0.79.0" +version = "0.80.0" dependencies = [ "tokio", "tracing", @@ -3896,7 +3896,7 @@ dependencies = [ [[package]] name = "tw-pack" -version = "0.79.0" +version = "0.80.0" dependencies = [ "age", "blake3", @@ -3920,7 +3920,7 @@ dependencies = [ [[package]] name = "tw-plugin" -version = "0.79.0" +version = "0.80.0" dependencies = [ "libc", "rand 0.10.2", @@ -3936,7 +3936,7 @@ dependencies = [ [[package]] name = "tw-pricing" -version = "0.79.0" +version = "0.80.0" dependencies = [ "arc-swap", "flate2", @@ -3949,14 +3949,14 @@ dependencies = [ [[package]] name = "tw-secret" -version = "0.79.0" +version = "0.80.0" dependencies = [ "thiserror 2.0.20", ] [[package]] name = "tw-store" -version = "0.79.0" +version = "0.80.0" dependencies = [ "blake3", "bytes", @@ -3976,7 +3976,7 @@ dependencies = [ [[package]] name = "tw-sync" -version = "0.79.0" +version = "0.80.0" dependencies = [ "age", "axum", @@ -4004,7 +4004,7 @@ dependencies = [ [[package]] name = "tw-types" -version = "0.79.0" +version = "0.80.0" dependencies = [ "serde", "serde_json", @@ -4013,7 +4013,7 @@ dependencies = [ [[package]] name = "tw-watch" -version = "0.79.0" +version = "0.80.0" dependencies = [ "libc", "notify", @@ -4024,7 +4024,7 @@ dependencies = [ [[package]] name = "tw-yaml" -version = "0.79.0" +version = "0.80.0" dependencies = [ "saphyr-parser", "serde_yaml_ng", @@ -4034,7 +4034,7 @@ dependencies = [ [[package]] name = "twcore" -version = "0.79.0" +version = "0.80.0" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index 4cba0f0c..6ad24d9f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,7 +59,7 @@ categories = ["network-programming", "web-programming::http-server"] # 二进制走 CalVer,crate 走 SemVer —— 两者是两回事,卖给不同的人。 # 这里是 crate 的版本。 -version = "0.79.0" +version = "0.80.0" [workspace.dependencies] # ── 内部 crate ─────────────────────────────────────────── diff --git a/release-notes/0.80.0.md b/release-notes/0.80.0.md new file mode 100644 index 00000000..b4a0ac90 --- /dev/null +++ b/release-notes/0.80.0.md @@ -0,0 +1,19 @@ +This release records requests that are refused before they reach any upstream, so a mistyped or unavailable model name shows up in the request records instead of disappearing. + +**Upgrade notes** + +- The control-plane protocol version stays at 51, and the request store's schema is unchanged; nothing is cleared. +- No configuration key is added, renamed or removed. + +**Refused requests are recorded.** Once the gateway key is recognized, a request that goes to no upstream now gets a request record and the usual `RequestStarted`, `RequestRouted` and `RequestFailed` events, the same way a request denied by a rule already did. This covers: + +- a model name that does not exist, is not allowed for the key, or whose alias or specified model does not resolve (`gw.model.*`); +- a request no rule decided on, or whose rules could not be evaluated (`gw.route.failed`); +- a request made before any upstream is configured (`gw.config.no_upstreams`); +- on a Responses WebSocket connection, each turn refused for the same reasons, and a Realtime upgrade refused for its model or its route. + +The record holds the model name the client sent, the error code with its arguments, the key and the route. The upstream and the attempts are empty, and so is the rule when no rule decided. The status code the client receives and the error body are unchanged; the body is now sent chunked instead of with `Content-Length`, as it already was for requests denied by a rule. + +Requests refused before the key is recognized (no key, an invalid or disabled key, a source address that is not allowed) are still not recorded. + +Route statistics count these records under their route and no longer list an empty rule name. From d64d5203fb05b5460ac66349033b2c30dfd83e39 Mon Sep 17 00:00:00 2001 From: fylorn <249551762+fylorn@users.noreply.github.com> Date: Thu, 22 Oct 2026 21:42:58 +0800 Subject: [PATCH 2/2] Update rustls-webpki and webpki-root-certs for RUSTSEC-2026-0382 and 0383 Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 10 +++++----- release-notes/0.80.0.md | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc0d9f6d..cbe4a1b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2867,9 +2867,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.15" +version = "0.103.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" dependencies = [ "aws-lc-rs", "ring", @@ -3283,7 +3283,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.4", "once_cell", "rustix", "windows-sys 0.61.2", @@ -4554,9 +4554,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +checksum = "58ec80e73fd8baf57bf0d9615554c75348bda990d6d5bbeab964dd068319fecb" dependencies = [ "rustls-pki-types", ] diff --git a/release-notes/0.80.0.md b/release-notes/0.80.0.md index b4a0ac90..cde0d872 100644 --- a/release-notes/0.80.0.md +++ b/release-notes/0.80.0.md @@ -17,3 +17,5 @@ The record holds the model name the client sent, the error code with its argumen Requests refused before the key is recognized (no key, an invalid or disabled key, a source address that is not allowed) are still not recorded. Route statistics count these records under their route and no longer list an empty rule name. + +**Security.** `rustls-webpki` is updated to 0.103.16 for RUSTSEC-2026-0382 (certificate verification could accept distrusted intermediates), and `webpki-root-certs` to 1.0.10 for RUSTSEC-2026-0383 (the bundled roots trusted distrusted emSign intermediates).