4.7 KiB
Verification report - RustProxy 0.28.0
Scope
RustProxy 0.28.0 adds authenticated on-demand GeoIP refresh through the same staging/lock path as the automatic worker, replaces coupled release/checksum bases with direct per-database sources, makes publisher SHA-256 URLs optional, supports either separate IPv4/IPv6 CSV ranges or one native MaxMind DB (.mmdb), and verifies hot replacement of the shared ArcSwap database. It also improves active-listener presentation with running H1/H2/H2C/H3 badges, reports the completed ACME Python/Certbot probe in the INFO log instead of printing speculative startup state, adds configurable cache Via metadata, narrows cache compatibility invalidation for bypass/response-only diagnostics, and fixes the vhost Security header-rule Delete/Operation layout. It retains the 0.27.3 restore/listener/WebSocket/update-check/automatic-GeoIP fixes.
SQLite schema 8 and COLD cache format 3 remain unchanged. Older saved configurations remain compatible: legacy GeoIP release_url/checksum_url values are accepted and migrated into the direct-source model, while the old moving default checksum source is deliberately treated as unpinned and therefore optional. geoip_updates and the new cache.via_header are serde-defaulted when absent. The cache Via value defaults to RustProxy; null disables it.
The GeoIP request path reads state.geoip.load() when a frontend/location policy, country rate limit or country log capture needs a country. Manual and automatic updates both publish through the same ArcSwap<Database>. The regression test keeps an old Arc, publishes a replacement database and verifies that the old snapshot remains valid while subsequent slot loads return the new country mapping. CSV mode validates both IP families and ordering; MMDB mode validates MaxMind DB v2 structure and supports standard country.iso_code, registered_country.iso_code, sapics-style top-level country_code, and a two-letter root string used by simple custom databases.
When publisher checksum URLs are empty, downloads remain size-bounded and structurally validated. RustProxy computes the staged file's local SHA-256 and compares it with the installed file, so unchanged content is not republished. If an optional checksum URL is configured, the publisher digest is additionally enforced. A disabled MMDB downloader may use a locally managed <data-dir>/geoip/country.mmdb; the manual refresh action validates and hot-reloads that local file.
Cache compatibility hashing intentionally ignores bypass_query, bypass_prefixes and response-only cache diagnostic/Via fields. Those settings affect admission/wire behavior on subsequent requests but do not mutate a stored representation. Representation/origin-affecting cache, transform, header, forwarding and vhost changes remain in the compatibility identity.
Verification status in this workspace
Rust/Cargo is not installed in this workspace. Rust-independent release checks can run here; compiler/type/runtime gates and real H2/H3 protocol execution require a Rust-enabled host.
Release checks
| Check | Result |
|---|---|
| Rust/source module contracts | PASS |
| GeoIP direct-source/optional-checksum/MMDB/manual endpoint/UI/hot-swap source contracts | PASS |
| Cache Via/narrow invalidation source contracts | PASS |
| Listener protocol-badge/header-editor UI source contracts | PASS |
| ACME startup reporting contract (no speculative banner state; final INFO event) | PASS |
| Documentation and language-pack checks | PASS |
| Web Server, security and dependency source contracts | PASS |
tools/checks/check_source.py |
PASS (compiler/runtime explicitly not verified) |
tools/checks/release_smoke.py |
PASS |
Python syntax (py_compile) and direct-CSV installer validation checks |
PASS |
Browser Web Service UI regression (node tools/checks/web_service_ui_test.mjs) |
PASS |
Docker Agent (go test ./...) |
PASS |
./dev.sh test static/pre-compiler stages |
PASS; command then exits 127 at the Rust/Cargo gate |
Rust cargo fmt/check/test, linking and Rust unit tests (including synthetic standard/sapics/custom-MMDB lookup fixtures, GeoIP hot-swap, cache Via and cache-revision tests) |
NOT VERIFIED - Cargo/Rust is not installed in this workspace |
| Live manual/automatic GeoIP direct-source download and real-world MMDB lookup | NOT VERIFIED - requires network access and a compiled 0.28.0 binary |
| Live HTTP/2 + HTTP/3 protocol tests | NOT VERIFIED - requires a compiled 0.28.0 binary and QUIC-capable runtime |
./dev.sh test is expected to exit with status 127 only when it reaches the Rust toolchain gate; all earlier release/static checks must complete successfully for this report to remain valid.