Skip to content

Commit 4ecebe5

Browse files
committed
Add Wasm cache lookup policy hook
1 parent 99797e3 commit 4ecebe5

40 files changed

Lines changed: 828 additions & 286 deletions

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,28 @@ Fluxheim follows semantic versioning once `1.0.0` is released. Before `1.0.0`,
77
minor versions may still change configuration shape, feature names, and runtime
88
behavior when the change improves security or project direction.
99

10+
## 1.7.4 - 2026-07-07
11+
12+
### Added
13+
14+
- Add live native HTTP/1 Wasm `cache-lookup` hooks under the bounded
15+
`fluxheim_policy_v1` preview ABI.
16+
- Add `continue`, `pass`, `bypass`, and `deny` cache lookup outcomes before
17+
slice lookup, normal lookup, peer-fill, request collapsing, origin-fill
18+
protection, and store admission.
19+
- Add live listener tests proving a plugin can pass selected `/api/*` requests
20+
without storing while normal cacheable paths still produce MISS then HIT.
21+
22+
### Security
23+
24+
- Keep cache hooks constrained to integer outcomes and coarse path context in
25+
this slice; raw headers, bodies, cache-key bytes, TTL override, tag
26+
assignment, and response-store mutation remain unavailable.
27+
- Preserve built-in access, rate-limit, route, and header-policy ordering
28+
before cache-lookup hooks run.
29+
- Fail closed with `503` when a cache-lookup plugin errors under fail-closed
30+
mode, and deny with `403` when a plugin explicitly returns deny.
31+
1032
## 1.7.3 - 2026-07-06
1133

1234
### Added

Cargo.lock

Lines changed: 19 additions & 19 deletions
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 = "fluxheim"
3-
version = "1.7.3"
3+
version = "1.7.4"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

README.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ Fluxheim is licensed under the European Union Public Licence 1.2.
136136
| Apple Silicon macOS dev builds || `1.4.4`; Level 1 developer support with Mac-safe runtime paths while some upstream macOS support remains experimental. |
137137
| GeoIP/Geo-Context policy || `1.4.5`; optional `geoip` feature with local MMDB support for MaxMind GeoIP2/GeoLite2 and CIRCL Geo Open datasets, plus vhost/route country and ASN ACLs. |
138138
| Pingora-free runtime || `1.6.34`; normal Fluxheim builds no longer compile Pingora crates. Server/listener/TLS, HTTP/1, HTTP/2, WebSocket, cache, load-balancer, admin, metrics, stream, and background-service paths run through Fluxheim-owned Rust crates. |
139-
| HTTP/3/QUIC || Planned as a Fluxheim-owned `1.8` protocol milestone using the Rust `quinn`/`h3` stack after the `1.7` Wasm extensibility line. |
140-
| WASM extensibility | 🧪 | Active `1.7.x` line. `1.7.0` added the optional `wasm` feature, strict plugin-file loading, bounded Wasmtime execution, and real-Wasm smoke coverage. `1.7.1` adds config-level plugin registry validation, deterministic attachment ordering, admission limits, metrics, and live native HTTP/1 access-decision hooks. `1.7.2` adds bounded native HTTP/1 request/response header hooks. `1.7.3` starts bounded native HTTP/1 route-decision hooks with configured canary and mirror branch selection, including selected native load-balanced and persistent routes. Direct backend choice, plugin-provided persistence keys, dynamic mirror/shadow target choice, and VCL-like cache policy hooks remain staged for later `1.7.x`. |
139+
| HTTP/3/QUIC || Planned as a Fluxheim-owned `1.9` protocol milestone using the Rust `quinn`/`h3` stack after the `1.8` macOS/Windows production parity line. |
140+
| WASM extensibility | 🧪 | Active `1.7.x` line. `1.7.0` added the optional `wasm` feature, strict plugin-file loading, bounded Wasmtime execution, and real-Wasm smoke coverage. `1.7.1` adds config-level plugin registry validation, deterministic attachment ordering, admission limits, metrics, and live native HTTP/1 access-decision hooks. `1.7.2` adds bounded native HTTP/1 request/response header hooks. `1.7.3` starts bounded native HTTP/1 route-decision hooks with configured canary and mirror branch selection, including selected native load-balanced and persistent routes. `1.7.4` starts VCL-like cache-policy hooks with a bounded cache-lookup decision that can continue, pass, bypass, or deny before cache lookup/storage. Direct backend choice, plugin-provided persistence keys, dynamic mirror/shadow target choice, and richer cache-key/TTL/tag store policy hooks remain staged for later `1.7.x`. |
141141

142142
See [Production Readiness](docs/production-readiness.md) for the precise
143143
stable-core promise and deployment checks. See
@@ -258,7 +258,7 @@ Individual module features:
258258
| `php-fpm` | No | PHP-FPM FastCGI bridge for WordPress-style PHP applications. Implies `proxy` and `web`; not included in default/focused images. |
259259
| `privacy-mode` | No | Zero-retention static/proxy build profile. |
260260
| `security` | Yes | Compile-time security profile marker plus release hardening checks. Runtime enforcement lives in the concrete config, TLS, filesystem, admin, and request-handling modules. |
261-
| `wasm` | No | Optional `1.7.x` WebAssembly policy runtime. `1.7.3` supports live native HTTP/1 access-decision hooks, bounded request/response header hooks, and constrained route-decision hooks with configured canary and mirror branch selection, including selected native load-balanced and persistent routes. Later `1.7.x` releases add direct backend choice, plugin-provided persistence keys, dynamic mirror/shadow target choice, and cache-policy hooks. |
261+
| `wasm` | No | Optional `1.7.x` WebAssembly policy runtime. `1.7.4` supports live native HTTP/1 access-decision hooks, bounded request/response header hooks, constrained route-decision hooks with configured canary and mirror branch selection, selected native load-balanced/persistent routes, and bounded cache-lookup hooks. Later `1.7.x` releases add direct backend choice, plugin-provided persistence keys, dynamic mirror/shadow target choice, and richer cache-key/TTL/tag store policy hooks. |
262262
| `wasm-proxy-abi` | No | Reserved compatibility preview for a reviewed safe subset of proxy-oriented Wasm ABI calls; depends on `wasm` and remains off by default. |
263263
| `wasm-wasi` | No | Reserved WASI capability preview; depends on `wasm` and remains off by default with no filesystem/network/process capabilities unless explicitly granted in a later release. |
264264
| `tls` | No | Internal TLS marker used by TLS/ACME code; select a concrete backend for serving. |
@@ -351,8 +351,8 @@ Release tags use the same profile/OS suffixes on both registries. The first
351351
`1.7.x` image tags include `v1.7.0-wolfi`, `v1.7.0-cache-wolfi`,
352352
`v1.7.0-proxy-wolfi`, `v1.7.0-load-balancer-wolfi`, and `v1.7.0-php-wolfi`;
353353
follow-up `1.7.x` releases use the same suffix pattern, for example
354-
`v1.7.3-wolfi`, `v1.7.3-cache-wolfi`, `v1.7.3-proxy-wolfi`,
355-
`v1.7.3-load-balancer-wolfi`, and `v1.7.3-php-wolfi`.
354+
`v1.7.4-wolfi`, `v1.7.4-cache-wolfi`, `v1.7.4-proxy-wolfi`,
355+
`v1.7.4-load-balancer-wolfi`, and `v1.7.4-php-wolfi`.
356356

357357
Release note for `1.5.15`: the signed git tag `v1.5.15` is the canonical code
358358
tag. The GitHub Release page is published under `v1.5.15-release` because the
@@ -491,9 +491,10 @@ coverage are documented in [Cache Backends](docs/cache-backends.md),
491491
[Config Reference](docs/config-reference.md), and
492492
[Production Readiness](docs/production-readiness.md).
493493

494-
The `1.8` line remains HTTP/3/QUIC based on the Rust `quinn`/`h3` stack. See
495-
[Versioning Plan](docs/versioning-plan.md) and [Roadmap](ROADMAP.md) for the
496-
full release ladder.
494+
The `1.8` line is the macOS/Windows production-parity line, and HTTP/3/QUIC
495+
moves to the following Fluxheim-owned `1.9` protocol line based on the Rust
496+
`quinn`/`h3` stack. See [Versioning Plan](docs/versioning-plan.md) and
497+
[Roadmap](ROADMAP.md) for the full release ladder.
497498

498499
## Documentation
499500

crates/fluxheim-acme/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-acme"
3-
version = "1.7.3"
3+
version = "1.7.4"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-cache/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-cache"
3-
version = "1.7.3"
3+
version = "1.7.4"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-common/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-common"
3-
version = "1.7.3"
3+
version = "1.7.4"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-compression/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-compression"
3-
version = "1.7.3"
3+
version = "1.7.4"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-config/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-config"
3-
version = "1.7.3"
3+
version = "1.7.4"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-geoip/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-geoip"
3-
version = "1.7.3"
3+
version = "1.7.4"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

0 commit comments

Comments
 (0)