13 KiB
Verification report - RustProxy 0.32.6
0.32.6 development follow-up — live diagnostic charts / mobile scroll
- The existing server diagnostics collector samples OS and process metrics in
the background, with a 2-second idle delay between collection passes
(sampling work can add time). Compact live status / SSE now
exposes its cached
live_system(sample timestamp, host/process CPU, process RSS, aggregate RX/TX rates and interface rates), without invoking a new OS measurement or fetching/api/system-infoon each live event. - Live Overview charts use the administrator's
overview_seconds(default 3, accepted 1/2/3/5/10, including existing persisted 2-second preferences). Process/System detail text still updates only with the configuredsystem_info_seconds(default 60). Network chart RX/TX now reflects recently sampled interface rates rather than 60-second-old repeated values. - Disabled the nested
overflow:autonetwork-interface list on narrow Overview containers. Stable SVG/text DOM remains in place, to reduce unexpected WebKit touch/momentum scroll anchoring. This is a mitigation; the exact source of the iOS 27 jump remains unverified on physical Safari. - Protocol badge Origin uses the same control radius as the adjacent policy pills for custom presets, and the same 0px baseline for the default preset; observed green/unknown neutral colors are unchanged.
live_diagnostics_0326_browser.py: real diagnostic renderer with 35 live updates verifies fast chart data and slow Process details, no chart DOM replacement or scroll movement, no extra sample from a slow-system-only refresh, touch-sized network list and both custom/default badge radii.mobile_protocol_0326_browser.pycovers all custom radii at six widths.- Prior source/UI tests: all pre-Cargo checks passed; compilation and Rust integration tests not run (Cargo absent). The Chromium fixture does not establish Safari/iOS 27 acceptance.
0.32.6 development follow-up — suspended rate charts
- Added
src/admin/web/app/rate-sampling.jsto the authenticated Rust administration bundle. The shared policy records tab background/pagehide epochs and ignores intervals longer than three configured refresh periods (at least 10 seconds). It validates counter monotonicity and declines counter-derived rates across the gap, preserving existing history. - Updated Cache HIT/MISS/BYPASS, Transform metrics, Overview HTTP/protocol/
cache-outcome deltas, optional small/wide rate and share charts, HTTP
backend monitor, Stream traffic and Vhost/Stream detailed charts. Fresh
absolute CPU/RAM/system observations and independent system-info reads
retain their previous behavior. Visible missing rates show
-, not0/s. - Added
tools/checks/rate_pause_0326_ui_test.mjs: real Cache/Transform chart functions with a simulated DOM and clock. Tests normal idle 0/s, long gaps, short hide/show, pagehide/BFCache, counter resets, sample continuity and 30-second refresh support. This is not a live Safari test. - Pending: Cargo checks/compilation, real server/SSE data, mobile Safari tab suspension and BFCache tests.
0.32.6 development follow-up — badge grouping and chart cadence
- Moved each observed upstream HTTP protocol badge into its Vhost's existing
vhost-policy-pillsrow; preserved the badge class, observed flag, green and neutral CSS styling. No backend or preference changes. - Kept network-interface rows and SVGs stable (no replacement on ordinary
refresh), but restored frequent history progression: each Overview live
status appends the latest cached interface rates, exactly as the aggregate
network chart does. A system-info-only refresh updates visible rates but does
not append a history point. System measurements are fetched only on the
configured
system_info_secondscadence; no extra API call was added. - Chromium tests:
ios_scroll_0326_browser.py(45 live renders, unchanged DOM/scroll/Process height, latest-value reuse and a system-info-only redraw);vhost_protocol_badge_group_0326_browser.py(real Vhost render at 393/1024px, observed green and unknown neutral colors); static source and Node.js protocol status checks.mobile_protocol_0326_browser.pyalso passed at six mobile widths (320-550px)../dev.sh testpassed all pre-Cargo checks, including its source/SQL/upgrade/release-smoke and Node.js UI stages, then exited 127 at the missing-Cargo guard; Rust compilation/tests were not run. These results do not establish iOS 27 Safari acceptance or a compiled RustProxy binary.
0.32.6 development follow-up — iOS 27 scroll / CSS transform
- User video shows repeated returns toward Process during mobile scrolling; it does not include finger touch input, so exact root cause cannot be proven by visual inspection alone. The Network diagnostics renderer removed and recreated all interface rows/SVGs on every live sample, potentially invalidating WebKit's scroll anchor directly beneath Process.
- Initially changed to update chart contents, text nodes and SVG points in place without replacing interface rows. An interim build appended interface RX/TX history only on new system measurements; this sampling decision was superseded by the later development follow-up above, which restores live-rate chart progression independently of slow system-data acquisition. Retest physical iOS 27 before declaring the scroll problem fixed.
- CSS transformer preserves descendant pseudo-class combinators; admin pages
carry
Cache-Control: no-transform. Rust/Cargo check still pending.
0.32.6 mobile presentation and upstream protocol visibility
./dev.sh testpassed all pre-Cargo source, regression, simulated API, upgrade/release-smoke, SQL/schema, documentation, localization and Node.js UI checks. It then stopped at the expected missing-Cargo guard (exit 127)../dev.sh checkalso stopped there (exit 127). A production Rust build and execution of Rust unit tests have not been performed.tools/checks/mobile_protocol_0326_browser.py,appearance_ux_0323_browser.pyandoverview_grid_spacing_0323_browser.pypassed separately with headless Chromium. These optional browser tests require Playwright and are not a dependency of./dev.sh test.- Shipped static CSS and real 62-card grid tested under Chromium mobile touch emulation at 320, 375, 393, 402, 430 and 550px: two metric columns, no horizontal overflow, stable viewport scroll positions after metric updates and repeated no-op preference application. This does not test Safari on a physical iPhone 17 Pro.
- Global Appearance radius presets in Chromium tested on vhost, backend badge, entity and metric surfaces; square draft dock remains excluded.
- JavaScript Vhost badge test checks fresh H1/H2 response observations, Auto no-observation and stale states, response counters and isolation across vhosts with identical member IDs.
- Rust test added to assert response-version observation and counters. The Rust compiler and a running HTTP peer are absent; this is source coverage, not a completed Rust unit/integration test.
- Tests do not establish real backend HTTP/2 ALPN operation; staging validation and full Rust acceptance remain required before production use.
Previous 0.32.5 verification history
- 0.32.5 administration UI startup fix: the DNS ACL translation helper in
src/admin/web/management.jsis now initialized before the DDNS hint uses it.tools/checks/dynamic_acl_startup_0325_ui_test.mjsexecutes the real ACL editor initializer with a simulated DOM and verifies that it completes and renders the translatable DNS hint. The test reproduced the user-reportedReferenceErroragainst the unmodified 0.32.5 source before the fix. 36/36 JavaScript checks passed after adding this test todev.sh. The assembled JavaScript bundle passednode --check. The source/version, admin surface, security, docs and language checks passed.release_smoke.pyexceeded the available execution timeout; the Rust compiler and live server remain unavailable, so full release/runtime acceptance is not claimed. - 0.32.5 build correction: fix reported Rust
E0505insrc/acl/dynamic.rsby cloning the hostname intolookup_nameforlookup_host. The originalnameis returned as the cache key. Added a source-contract regression check; Rust compilation is still required to confirm the correction. tools/checks/dynamic_acl_0325.py: 15/15 static source contracts passed.- JavaScript dashboard/settings regression scripts: 36/36 passed (35 existing and one new startup regression).
tools/checks/check_source.py,rust_module_contracts.py,docs_check.py,langs_check.py,security_contracts.py, andadmin_surface_audit_0310.py: passed.- The full
./dev.sh testwas interrupted by the environment time limit while running expensive pre-Cargo release simulations. It was not a full pass. - Cargo/rustc are unavailable here. Dynamic DNS Rust unit tests, integration tests, real resolver timeouts/rotation and production acceptance not run.
0.32.5 dynamic DNS ACL changes
This build extends existing ACL Rule.network entries with allow-only DNS/DDNS
hostname support. Resolution is background-only and bounded (60s cadence,
4s timeout, max 8 concurrent lookups, max 128 unique names / 32 IPs per name).
Initial, expired and failed resolution states deny dynamic host authorization.
Existing numeric IP/CIDR and explicit-deny precedence remain unchanged.
A Rust compiler and real DNS peer were not available in this environment.
The Rust tests in src/acl/tests.rs and src/acl/dynamic.rs have not been
executed here. Before rollout, run cargo fmt --all -- --check,
cargo check --locked --all-targets and cargo test --locked, then confirm
live DDNS rotation and fail-closed DNS outages on staging.
Previous 0.32.4 scope
Review of the supplied RustProxy 0.32.3 source and patch to 0.32.4: HTTP Host / HTTP/2 authority parity, explicit TCP/DNS destination and TLS/SNI isolation, relaxed HTTPS-by-IP troubleshooting hint, and uniform Overview gutters. Follow-up patch to the first 0.32.4 archive:
- Fix reported
E0382insrc/proxy/types.rs:Request::builder().uri(uri)moveduribeforeupstream_request_target(&uri, ...)could borrow it..uri(uri.clone())preserves the original URI for authority selection. - Make normal Overview gutters uniformly 4px (dense 3px, comfortable 12px).
Resolve the higher-specificity
html[data-dashboard-density] .stats-gridrule which otherwise overrode the aligned grid and kept the larger gaps. Existing database/configuration schemas and retry/transport policies are unchanged. Only compiling Rust and live protocol tests prove runtime behavior.
Available checks
./dev.sh test: all pre-Cargo checks passed, including source/security, SQLite migration/upgrade/backup simulations, memory-model scripts and 35 Node.js UI/behavior test scripts. The command then exited 127 because Rust/Cargo is not installed; this is not a passing Rust test run.- New
preserve_host_0324.pyandpreserve_host_0324_ui_test.mjspassed: authority/destination split source contracts, four protocol selectors, verified/unencrypted origin warnings, explicit diagnostics preset. - Expanded Chromium CSS fixture
tools/checks/overview_gutters_0324_browser.py: 27 checks passed (3 container widths x 3 UI density modes x 3 Dashboard densities), checking horizontal/vertical gutters, equally high rows and numeric-to-large-card transition. Normal/dense/comfortable gaps measured 4/3/12px and the outer grid bottom margin remained0px. The olderoverview_grid_spacing_0323_browser.pyalso passed with all 62 blocks, responsive breakpoints and browser zoom 90%-130%. These are simulated layout tests, not a live administrator session. preserve_host_0324.pynow guards against movinguribefore its final authority adjustment, in addition to the backend/transport source contracts. The existing Rust unit test for retry authority remains in the source.- Version consistency: Cargo manifest, package root in existing lockfile, OpenAPI, README, release notes and static assertion fixtures updated to 0.32.4. External Cargo dependency resolutions have not been regenerated.
Rust validation not performed (blocking for production)
The user's Rust compiler reported error[E0382]: borrow of moved value: uri
from the first 0.32.4 archive. This has been corrected in source, but the
corrected code has not been compiled here: no Cargo or Rust compiler is
available in the source-editing environment.
Do not treat static tests or the simulated TLS-peer tests added to Rust source
as evidence that RustProxy builds or that an actual Angie backend accepts the
corrected requests. Run, on a Rust 1.99+ host:
cargo fmt --all -- --check
cargo check --locked --all-targets
cargo test --locked
Then validate on staging with HTTPS-by-IP and preserve_host: true for
HTTP/1.1, Auto (H2 and H1 ALPN), compatible HTTP/2 and strict H2; check
:authority vs Host, SNI, certificate verification, WebSockets, H2C and
HTTP health probe host overrides. Inspect Angie response/error logs for
400 responses and verify backend connectivity through pool rotation/retry.
No claim of universal backend compatibility or measured throughput is made.