Files
RustProxy/docs/ROADMAP_HISTORY.md
T
2026-10-11 23:09:59 +02:00

735 lines
53 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Historical roadmap archive
> Archived during the RustProxy 0.25 documentation cleanup. This file preserves completed historical roadmap entries. The active roadmap is [`../ROADMAP.md`](../ROADMAP.md); unresolved work is tracked in [`TODO.md`](TODO.md).
# RustProxy roadmap
## 0.25.0
Current direction: 0.24.10 -> 0.25.0
- [x] Add independent reusable Web Service configuration with name, document root, index list and directory-listing switch.
- [x] Add Web Service CRUD through the dashboard/API and persist it through the existing revisioned configuration store.
- [x] Add `Reverse Proxy` / `Web Server` source selection to vhost fallback and custom locations without storing Web Server filesystem settings in vhosts.
- [x] Allow one Web Service to be referenced by multiple vhosts and one vhost to mix Web Server and Reverse Proxy locations.
- [x] Add `GET`, `HEAD`, MIME, `Content-Length`, streaming, index lookup, directory slash redirect and optional directory listing.
- [x] Add metadata-based `ETag`/`Last-Modified`, conditional `304`, single `Range`/`If-Range`, `206` and `416`.
- [x] Enforce decoded-path validation and document-root confinement; Unix traversal uses `openat` + `O_NOFOLLOW` and does not serve symlinks.
- [x] Keep Web Server inside the existing routing, ACL/auth, custom-header/error-page/security and H1/H2/H3 response pipeline; do not create separate routing/error/cache subsystems.
- [x] Add unit/source-contract coverage, OpenAPI/UI language coverage and Web Server documentation.
- [x] Clean 0.25 README/Docs/CHANGELOG release material so current user-facing changes are separated from historical audits.
- [x] Add an authenticated `/docs` Markdown Reader with a separate API/OpenAPI tab, canonical docs index, 0.25 specification audit and open-work TODO.
- [ ] Run compiler-enabled `./dev.sh fmt`, `./dev.sh check`, `./dev.sh test` plus live H1/H2/H3/static-file acceptance on the release host.
## 0.24.10
Current direction: 0.24.9 -> 0.24.10
- [x] Make Error File a first-class revisioned configuration section and persist enabled/path/format across database reopen.
- [x] Remove the redundant Error File help sentence while retaining JSON/RAW controls and live apply.
- [x] Keep response-time history permanently expanded and add an accessible information popover matching Process.
- [x] Extend UI/API/source regressions and update release identity to 0.24.10.
- [ ] Run compiler-enabled `./dev.sh fmt`, `./dev.sh check`, `./dev.sh test` and browser acceptance on the release host.
## 0.24.9
Current direction: 0.24.8 -> 0.24.9
- [x] Add the encrypted Secret Store and migrate ACME Cloudflare/OVH/RFC2136 credentials away from persistent plaintext files.
- [x] Add password-encrypted full backup/restore with manifest validation, integrity checks, staging and rollback-safe activation.
- [x] Add the optional bounded asynchronous ERROR file sink with JSON/RAW formats, shared secret redaction and external logrotate integration.
- [x] Extend offline source/release contracts and update release identity to 0.24.9.
- [ ] Run compiler-enabled `./dev.sh fmt`, `./dev.sh check`, `./dev.sh test` and end-to-end backup/restore/error-log acceptance on the release host.
## 0.24.8
Current direction: 0.24.7 -> 0.24.8
- [x] Expand Cache RAM overview history with HOT usage/limit and transient total/fill/COLD queue/COLD I/O series.
- [x] Add COLD storage occupancy history without mixing disk bytes into process RAM.
- [x] Move the RSS/cache accounting caveat behind an accessible information control.
- [x] Extend offline UI/release contracts and update release identity to 0.24.8.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test` and browser/live-cache acceptance on the release host.
## 0.24.7
Current direction: 0.24.6 -> 0.24.7
- [x] Make the transform temporary-memory budget configurable and persisted with the normal SQLite-backed transform settings.
- [x] Add a process-wide maximum concurrent transformation limit with fail-open pressure behavior.
- [x] Add persisted RAM saver / Recommended / Performance / Uber performance resource presets while keeping transform types/extensions independent.
- [x] Add UI budget safety warnings and manual-edit -> Custom preset behavior.
- [x] Expose live transform RAM/concurrency, process/cache RAM accounting and COLD disk occupancy in the dashboard.
- [x] Clean externally reported cache/CSS compiler warnings without lint suppression.
- [x] Rotate cache compatibility identity for global transform representation/eligibility changes but not resource-only capacity metadata.
- [x] Extend OpenAPI, SQLite persistence, memory-contract and release/source regressions and update release identity to 0.24.7.
- [ ] Run compiler-enabled `./dev.sh fmt`, `./dev.sh check`, `./dev.sh test` and sustained RSS/heap acceptance for every resource preset on the release host.
## 0.24.6
Current direction: 0.24.5 -> 0.24.6
- [x] Persist selected HOT/COLD cache preset intent in the SQLite-backed configuration and restore it in Settings.
- [x] Add a Recommended COLD policy preset without overriding disk capacity/path choices.
- [x] Bound transform aggregation/decompression/concurrency memory and remove avoidable JSON/HTML/CSS allocation churn.
- [x] Bound stale revalidation, proactive refresh scheduling, COLD cleanup selection/concurrency and delete fallback tasks.
- [x] Audit the remaining long-lived/background workers for queue/task cardinality and cancellation ownership.
- [x] Add Rust-independent memory contract regression checks and update release identity to 0.24.6.
- [ ] Run compiler-enabled `./dev.sh fmt`, `./dev.sh check`, `./dev.sh test` and sustained RSS/heap acceptance on the release host.
## 0.24.5
Current direction: 0.24.4 -> 0.24.5
- [x] Resolve unknown-length, actually empty HTTP/3 bodies before HTTP/1.1 upstream framing.
- [x] Preserve streaming for non-empty H3 bodies and declared `Content-Length` requests.
- [x] Add source-level regression coverage for DELETE and other body-capable methods.
- [x] Bound HOT by allocation-aware admission, enforce `max_object_bytes` during fill, and add a separately bounded transient/COLD-queue memory model.
- [x] Preserve HOT -> COLD ownership semantics while charging demoted payloads until persistence drops them; expose logical/allocated/transient telemetry.
- [x] Make global cache disable authoritative over vhost overrides and remove the artificial 1 GiB HOT/object ceiling.
- [x] Add host/cgroup-aware conservative/recommended/performance cache presets and non-blocking memory/headroom warnings in Settings.
- [x] Update source/package/UI/OpenAPI identity and offline release checks to 0.24.5.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test`, the H1/H2/H3 method matrix, and cache RSS/HOT/COLD stress acceptance on the release host.
## 0.24.4
Current direction: 0.24.3 -> 0.24.4
- [x] Make the Linux THP mitigation process-local with `PR_SET_THP_DISABLE` before Tokio worker creation.
- [x] Preserve the existing glibc arena limit and allocator-trim behavior.
- [x] Add source/release regression coverage for THP opt-out ordering and release identity.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test`, release build and a sustained production RSS comparison with host THP returned to its normal policy.
## 0.24.3
Current direction: 0.24.2 -> 0.24.3
- [x] Reduce Linux/glibc arena retention by adding `MALLOC_ARENA_MAX=2` to managed systemd units.
- [x] Remove redundant identity-body and JavaScript/CSS transformation allocations; release successful-transform temporaries earlier and trim large glibc transform churn at a bounded cadence.
- [x] Move HTTP/3 enablement to listener editing while keeping HTTP/3 tuning under HTTP connections.
- [x] Rename Proxy Process to Process and hide unsupported platform diagnostics dynamically.
- [x] Remove the stale unreferenced per-BSD parser source from the release archive.
- [x] Update source/package/UI/OpenAPI identity and Rust-independent release gates to 0.24.3.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test`, release build and sustained cache/transform RSS acceptance on the release host.
## 0.24.2
Current direction: 0.24.1 -> 0.24.2
- [x] Bump package/source/UI/OpenAPI release identity to 0.24.2 without functional changes.
## 0.24.1
Current direction: 0.24.0 -> 0.24.1
- [x] Replace the duplicated BSD statistics implementation with shared cross-platform library APIs.
- [x] Preserve Linux-specific `/proc`/cgroup diagnostics as additive compatibility fields.
- [x] Populate additional portable system/process metrics exposed by the selected libraries where available.
- [x] Expose low-risk runtime metadata through the authenticated status API, including the resolved data/database path.
- [x] Make CLI installed-data discovery use Linux and BSD/OPNsense conventions without hardcoding the path in the browser.
- [x] Move Logging into Settings and retain legacy `/logging` navigation compatibility.
- [x] Fix the release-host compiler error in portable uptime sampling and remove the stale H2 import warning.
- [x] Remove artificial hostname-count ceilings from certificate bindings/issuance and hostname-list configuration while retaining syntax, payload and resource-safety bounds.
- [x] Update source/package/UI/OpenAPI identity and source-side regression contracts to 0.24.1.
- [ ] Generate and commit a resolver-produced `Cargo.lock`, then run compiler-enabled `cargo fmt --all`, `cargo check --locked --all-targets` and `cargo test --locked --all-targets` on the release host.
- [ ] Run native FreeBSD/OpenBSD/NetBSD diagnostics acceptance and final H2/H3/WebSocket/proxy-statistics regression.
The 0.24.1-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.24.0
Current direction: 0.23.3 -> 0.24.0
- [x] Graceful H2 idle retirement with activity/stream recheck, GOAWAY and bounded drain.
- [x] Independent H2 maximum connection lifetime and drain timeout settings.
- [x] Settings API/UI/OpenAPI contracts for all three H2 lifecycle limits.
- [x] Extract system statistics into platform backends without changing Linux metric semantics.
- [x] Add FreeBSD/OpenBSD/NetBSD native best-effort sampling and explicit unsupported/null metrics.
- [x] Surface platform in Proxy Process and Prometheus metadata.
- [x] Update source/package/UI identity and source-side regression contracts to 0.24.0.
The 0.24.0-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.23.3
Current direction: 0.23.2 -> 0.23.3
- [x] Add opt-in per-vhost legacy WebSocket compatibility without changing ordinary HTTP behavior.
- [x] Force legacy-mode upstream WebSocket handshakes to HTTP/1.1 and force legacy WebSocket `Host` to the configured backend authority and align `Origin` with it.
- [x] Tolerate old `101` response framing while keeping the WebSocket accept proof and subprotocol validation strict.
- [x] Add dashboard/OpenAPI/language-pack controls and source regressions.
- [x] Update package/source identity and Rust-independent release gates to 0.23.3.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test`, release build and live iLO4/legacy WebSocket acceptance on the release host.
The 0.23.3-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.23.2
Current direction: 0.23.1 -> 0.23.2
- [x] Let Cache and Transformation live charts retain 60, 120, 300 or 600 samples without changing the 3-second polling cadence.
- [x] Persist each chart history-window choice locally in the browser and keep history memory bounded.
- [x] Fix local CLI administration transport detection so HTTPS administration no longer traps `--livelogs` in a 308 reconnect loop.
- [x] Pin local CLI HTTPS to certificates from the private RustProxy certificate directory and reuse the transport for config/TLS CLI calls.
- [x] Update package/source identity and Rust-independent release gates to 0.23.2.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test`, release build and live HTTPS `--livelogs` acceptance on the release host.
The 0.23.2-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.23.1
Current direction: 0.23.0 -> 0.23.1
- [x] Add default-collapsed, full-width live activity charts to the Cache and Transform workspaces.
- [x] Plot selected-scope Cache HIT/MISS/BYPASS rates from runtime counters without adding proxy-path work.
- [x] Plot selected-scope Transform applied/cache-HIT/skipped/error rates from the existing runtime metrics endpoint.
- [x] Reuse the dashboard SVG/chart styling, live 3-second refresh and language-pack model.
- [x] Update package/source identity and Rust-independent release gates to 0.23.1.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test`, release build and browser acceptance with sustained Cache/Transform traffic on the release host.
The 0.23.1-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.23.0
Current direction: 0.22.3 -> 0.23.0
- [x] Add scoped external certificate API authentication with Key ID + Bearer Token, hash-only storage, rotation/revoke/status and last-used metadata.
- [x] Restrict the external credential to certificate deploy/reload and require HTTPS outside loopback.
- [x] Add Settings → Certificate API UX and preserve direct production binary commands for local deploy/reload.
- [x] Add `rust-proxy --livelogs` with a bounded live stream, interactive structured filters, detailed request inspection and explicit lag reporting.
- [x] Split Settings → Cache into General, Resilience, Cold cache and Static & diagnostics sub-tabs without changing the atomic cache settings document.
- [ ] Run compiler-enabled `rust-proxy`/Cargo check, tests and release build plus live token-auth certificate rotation and sustained high-rate live-log acceptance on the release host.
- [ ] Upstream mTLS/client certificate remains deliberately deferred.
The 0.23.0-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.22.3
Current direction: 0.22.2 -> 0.22.3
- [x] Add HTTP/1.1 `Upgrade: h2c` on opt-in cleartext H2 listeners while preserving prior-knowledge h2c.
- [x] Validate Upgrade/HTTP2-Settings and reject malformed or body-bearing bootstrap requests before `101`.
- [x] Reconstruct the initiating H1 request as HTTP/2 stream 1 and retain the normal Hyper H2 path for later streams.
- [x] Add dedicated certificate hot reload without mutating desired configuration or revision.
- [x] Add external certificate deployment for Certbot/manual issuers with immutable generation staging and atomic multi-vhost switch by certificate id.
- [x] Add API/CLI/panel support plus audit/OpenAPI/documentation for certificate reload/deploy.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test`, release build and live H1 -> h2c Upgrade -> H2 plus TLS/H2/H3 certificate-rotation acceptance on the release host.
- [ ] Upstream mTLS/client certificate remains deliberately deferred.
The 0.22.3-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.22.2
Current direction: 0.22.1 -> 0.22.2
- [x] Add replay-safe failover retry with bounded policy and observability.
- [x] Correct explicit HTTP/2 upstream request versioning and retain h2c prior-knowledge regression coverage.
- [x] Add per-backend maximum concurrent proxy exchanges with bounded queue timeout / 503 behavior and metrics.
- [x] Add detailed upstream failure classification plus last failure and health ejection/recovery timestamps.
- [x] Consolidate backend operations data in the existing dashboard table: health, active/limit, requests/errors, latency, traffic, last failure and last recovery.
- [x] Parse and expose public-certificate issuer/SAN/validity/remaining-days/expiry status plus renewal status/last attempt/error.
- [ ] Add a distinct maximum TCP connection/socket limit per backend; request concurrency is implemented but is intentionally not presented as a socket limit.
- [ ] Run compiler-enabled `./dev.sh check` / `./dev.sh test` and live H1/H2/H3 plus H2 -> proxy -> H2 acceptance on the release host.
The 0.22.2-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.22.1
Current direction: 0.22.0 -> 0.22.1
- [x] Move selective PURGE/BAN and active BAN management into dedicated Cache modals with inline operation feedback.
- [x] Add per-vhost RFC 8441 HTTP/2 WebSocket Extended CONNECT beside RFC 9220.
- [x] Bridge H2 RFC 8441 WebSockets to H1 upstreams and preserve Extended CONNECT to explicit H2 upstreams.
- [x] Add opt-in cleartext HTTP/2 prior-knowledge (`h2c`) listeners.
- [x] Add stable active-tunnel inventory, per-tunnel kill, operator reason and audit logging.
- [x] Split WebSocket tunnel statistics by H1 / H2 RFC 8441 / H3 RFC 9220 on the main dashboard and Prometheus.
- [x] Preserve the 0.22.0 cache feature set and `Accept-Ranges` policy.
- [x] Update 0.22.1 source/package identity and Rust-independent release gates.
- [ ] Run the compiler-enabled `./dev.sh check` / `./dev.sh test` gate plus live H1/H2/H3/h2c/RFC8441 acceptance on the release host.
The 0.22.1-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.21.0
Current direction: 0.20.0 -> 0.21.0
- [x] Shard Cold Cache storage and add bounded asynchronous GC plus selective cleanup.
- [x] Add RFC 5861 stale windows, request `max-stale`, correct request `max-age=N`, and correct revalidation-directive semantics.
- [x] Add the extensible decode -> transform -> canonical cache -> encode stage with transformed lengths/validators, strict `no-transform`, HEAD/fill safety and canonical `Vary: Accept-Encoding` handling.
- [x] Add global, per-vhost and Docker-discovery transformation controls and administration UI/API coverage.
- [x] Make Passive Backend Health explicit opt-in for ordinary and Docker vhosts while preserving independent active health checks and unconditional observability.
- [x] Keep route cache override tri-state and expose effective route/cache/transform diagnostics.
- [x] Close 0.21.0 with the current conservative JS/CSS transformers; defer parser-backed replacements to a later development cycle.
- [ ] Release-host gate: run Rust 1.88+ fmt/check/test/clippy/release-build and live H1/H2/H3/cache/compression/restart acceptance before deployment.
- [x] Finish release polish: backend timing header rename, human-readable uptime, transformed Live traffic series, Docker Passive Backend Health layout fix, warning cleanup and cache module split.
- [x] Keep package/source identity and OpenAPI at 0.21.0 and package the completed feature scope as the 0.21.0 release source.
The 0.21.0-era notes are summarized in the retained [technical changelog archive](CHANGELOG_TECHNICAL_ARCHIVE.md).
## 0.20.0
Current direction: 0.19.4 -> 0.20.0
- [x] Split Certificates into Installed / Renewal / Generate tabs.
- [x] Move generation/import into the tabbed workspace and keep existing certificate actions compatible.
- [x] Improve ACME/renewal status readability and display exact Certbot log locations on failures.
- [x] Update package/source identity, OpenAPI and release checks to 0.20.0.
## 0.19.4
Current direction: 0.19.3 -> 0.19.4
- [x] Normalize Docker-vhost Aliases field geometry with neighboring inputs and remove the extra inherited label spacing.
- [x] Retain `0.0 KiB/s` idle and `<0.1 KiB/s` positive low-rate backend traffic formatting with release regression coverage.
- [x] Add Cache domain-table filtering by resolved cache-enabled state without changing aggregate cache statistics.
- [x] Update package/source identity, OpenAPI and release checks to 0.19.4.
## 0.19.3
Current direction: 0.19.2 -> 0.19.3
- [x] Preserve the exact panel and Settings tab through session expiry/re-login without shell flicker.
- [x] Canonicalize `/configuration` into persistent Settings tab routing.
- [x] Add shared save-button busy state and field-focused validation feedback.
- [x] Preserve certificate import file selections after failed saves.
- [x] Add per-Settings-tab unsaved-change indicators, including Manual config.
- [x] Add persisted dark/light administrator theme selection and consolidate theme-sensitive CSS tokens.
- [x] Keep Live Logs column selection compact with standard checkboxes and no internal scrollbars.
- [x] Add a fail-soft embedded-config release checker with hourly default cadence and CLI/environment overrides.
- [x] Keep the release checker compiler-compatible by mapping boxed HTTP body collection failures explicitly into `anyhow::Error`.
- [x] Reduce the footer to API latency/dropped logs and fix the last broad Live Logs checkbox sizing override.
- [x] Update package/source identity, OpenAPI and release checks to 0.19.3.
## 0.19.2
Current direction: 0.19.1 -> 0.19.2
- [x] Restore administration-backend local-listener risk detection for startup-locked listeners and loopback aliases; make vhost discard restore the persisted draft baseline.
- [x] Use descriptive status names for default responses.
- [x] Add an on-demand 4096-entry live log buffer that lasts until the log window closes.
- [x] Align inline checkboxes and reduce Docker-vhost alias editor height.
- [x] Render idle backend traffic as `0.0 KiB/s` and positive sub-0.1 KiB/s traffic as `<0.1 KiB/s`.
- [x] Remove cache diagnostics/validators from locally generated placeholder/default pages and enforce `no-store`.
- [x] Allow safe vhost-ID rename with collision protection and operator warning.
- [x] Update package/source identity, OpenAPI and release checks to 0.19.2.
## 0.19.1
Current direction: 0.19.0 -> 0.19.1
- [x] Repair Default responses section serialization/server routing.
- [x] Isolate cache objects by frontend scheme.
- [x] Keep a 256-entry live log window with 4096 retained entries available on demand.
- [x] Polish backend traffic units, checkbox/column UI and Docker-vhost Advanced layout/alias spacing.
- [x] Remove stale screenshots and index historical/version-labelled documentation.
- [x] Restore source-package test files/fixtures required by the release gates.
- [x] Update package/source identity, OpenAPI and release checks to 0.19.1.
## 0.19.0
Current direction: 0.18.8 -> 0.19.0
- [x] Persist per-admin Live Logs column visibility in SQLite without affecting JSON export or proxy configuration revisions.
- [x] Remove the duplicate top-right version badge.
- [x] Carry the legacy X.509 `tls_verify=false` compatibility fix and expanded upstream diagnostics into the release.
- [x] Add schema-v4 migration, administration API coverage and update package/source identity to 0.19.0.
## 0.18.8
Current direction: 0.18.7 -> 0.18.8
- [x] Use hostname-style chips for Docker-vhost aliases.
- [x] Add per-app HTTP-to-HTTPS redirect, WebSocket and cache switches for Docker vhosts.
- [x] Add an agent-level default ACL-profile selector without removing per-app ACL overrides/inline rules.
- [x] Remove the compression-codec explainer from Overview.
- [x] Update package/source identity, API schema and release checks to 0.18.8.
## 0.18.7
Current direction: 0.18.6 -> 0.18.7
- [x] Keep Response time history collapsed by default without stopping its live samples.
- [x] Make per-interface RX/TX charts visually consistent with the aggregate network history.
- [x] Fix expanded Docker-vhost route/ACL field alignment from the 0.18.6 UI.
- [x] Update package/source identity and release checks to 0.18.7.
## 0.18.6
Current direction: 0.18.5 -> 0.18.6
- [x] Add network-throughput diagnostics split by non-loopback host interface.
- [x] Re-audit compression counters and add q-weighted negotiation coverage for all four supported codecs.
- [x] Polish Docker-agent settings alignment and spacing around listener selection / Add agent.
- [x] Update package/source identity and release checks to 0.18.6.
## 0.18.5
Current direction: 0.18.4 -> 0.18.5
- [x] Make compression counters track the codec actually applied by RustProxy and add independent per-codec regression coverage.
- [x] Split the Overview request-rate chart into total, HTTP/1.1, HTTP/2 and HTTP/3 series.
- [x] Add a proxied-app launcher to Docker vhosts and show their domains beside generated backend-pool IDs.
- [x] Remove the global Open proxy shortcut.
- [x] Make Compact density clearly tighter than Dense.
- [x] Give proxy timeout controls explicit safe defaults instead of blank inherited values.
- [x] Replace Docker-agent listener CSV entry with the named-listener picker and tighten the agent status-row UX.
- [x] Update package/source identity and release checks to 0.18.5.
## 0.18.4
Current direction: 0.18.3 -> 0.18.4
- [x] Make TCP the default backend health-check mode without rewriting existing explicit HTTP/off configuration.
- [x] Make Docker vhosts summary-first so large container inventories do not render every routing/ACL/timeout/health control at once.
- [x] Simplify Settings -> Security with progressive disclosure for credential and host-policy editing.
- [x] Move Administration audit to a dedicated on-demand modal.
- [x] Update package/source identity and release checks to 0.18.4.
## 0.18.3
Current direction: 0.18.2 -> 0.18.3
- [x] Export Docker vhosts/backends under dedicated Prometheus metric families rather than ordinary vhost/backend families.
- [x] Add a separate live Docker-vhosts metric-group switch in Prometheus settings.
- [x] Cover Docker vhost traffic/duration and backend health/latency/probe/runtime observations with bounded labels.
- [x] Add regression checks for ordinary-vs-Docker metric isolation.
- [x] Add configurable separate access-log files per vhost and preserve bounded asynchronous sink behavior.
- [x] Lock startup-owned HTTP/HTTPS/admin binds while keeping non-startup listeners editable.
- [x] Polish compact UI, 404 response statuses, redirect summaries, global TLS cipher visibility and managed-certificate lifecycle UX.
- [x] Default WebSocket proxying to HTTP/1.1 Upgrade and make RFC 9220 HTTP/3 Extended CONNECT an explicit experimental vhost opt-in.
## 0.18.2
Current direction: 0.18.1 -> 0.18.2
- [x] Serve the standalone Docker agent over HTTPS by default using a persistent self-signed ECDSA certificate.
- [x] Add SHA-256 certificate pinning for self-signed Docker agents while retaining normal public-CA validation when no pin is configured.
- [x] Add per-service Docker backend health-check settings backed by the normal bounded backend health machinery.
- [x] Show Docker backend health/runtime diagnostics and agent TLS/observation state in the Docker vhosts UX.
## 0.18.1
Current direction: 0.18.0 -> 0.18.1
- [x] Add a standalone, token-authenticated Docker discovery agent that reports only running containers with non-loopback published TCP ports.
- [x] Add multi-agent endpoint/token/base-domain/listener/default-IP settings and keep observed Docker inventory separate from desired persisted assignments.
- [x] Detect multiple usable Docker-host addresses and preserve every public Docker bind for each discovered service.
- [x] Add a Docker vhosts panel with short names, arbitrary FQDNs, aliases and per-service backend-IP selection; reconcile assignments into dynamic ephemeral vhosts without revision writes.
- [x] Move the cache Live toggle to the right edge of the cache action toolbar.
- [x] Remove all dedicated `X-Rust-Proxy-Revision` handling; it is no longer generated, stripped, protected or migrated.
- [x] Replace production password recovery help with the installed `rust-proxy admin reset-password` command.
## 0.17.0
Current direction: 0.16.1 -> 0.17.0
- [x] Add Debian/systemd/logrotate packaging and local APT-repository generation.
- [x] Export all currently implemented bounded process/OS diagnostics and extend safe Prometheus coverage for backend, GeoIP, certificate renewal, stream and logging state.
- [x] Add explicit trusted-CIDR Prometheus scraping without a token and preserve actual-peer-only ACL evaluation.
- [x] Ship a Grafana operations dashboard.
- [x] Add dedicated certificate/listener-aware local-response / 404 hosts and a dashboard editor.
- [x] Keep the built-in welcome placeholder `no-store` and strip optional response metadata.
- [x] Match Redirect source-domain editing UX to Vhost hostname chips.
## 0.16.1
Current direction: 0.16.0 -> 0.16.1
- [x] Keep revision CAS as an internal concurrency mechanism but stop showing revision numbers in successful configuration-save feedback.
- [x] Preserve all 0.16.0 proxy/cache/H3/admin/UX behavior and bump release identity to 0.16.1.
## 0.16.0
- [x] Keep the main vhost backend as an internal fallback separate from Custom locations, with legacy synthetic-root normalization.
- [x] Preserve the reserved administration session cookie only for an explicitly allowed, TLS-protected self-admin reverse-proxy route; ordinary upstreams remain isolated.
- [x] Complete backend WebSocket takeover before HTTP/3 Extended CONNECT success and add phase/error/reset/upstream diagnostics to access logs.
- [x] Split process-memory and cache-memory reporting into RSS categories plus hot/transient fill/cold-queue/cold-I/O gauges while retaining the existing allocator-release paths.
## 0.15.1
Current direction: 0.15.0 -> 0.15.1
- [x] Repair EN/PL Custom locations/help translations and reject misplaced language-pack keys in release checks.
- [x] Rework visual header-rule editing and add a live effective-behavior preview to each location.
- [x] Expand in-panel location documentation with structured sections and common examples.
- [x] Add combined HIT/MISS/BYPASS activity and Proxy process CPU/RSS charts.
## 0.15.0
Current direction: 0.14.0 -> 0.15.0
- [x] Add Nginx-style Custom location matching, rewrite and local-response controls with inline documentation and a visual header-rule builder.
- [x] Add reusable Nagios/Icinga API checks for control-plane latency, backend availability/latency and dropped-work counters.
- [x] Move per-vhost timing/Cloudflare diagnostics to the main frontend configuration and add source IP to live logs.
- [x] Add dashboard history charts for RAM cache, network throughput and response latency plus compact API/footer diagnostics.
- [x] Add separate idle-age and total-hot-residency cold-cache policies.
- [x] Remove the runtime renewal-observation JSON importer and quarantine obsolete state only during a stopped source upgrade.
- [x] Accept repeated literal path separators by normalizing them for routing/ACL decisions while preserving the original backend target.
## 0.14.0
Current direction: 0.13.2 -> 0.14.0
- [x] Accept explicitly allowlisted browser-facing administration DNS authorities behind a trusted reverse proxy without requiring the internal admin port.
- [x] Keep direct IP/localhost administration access on the configured admin port and derive same-origin/cookie security from trusted external proxy metadata.
- [x] Implement RFC 9220 WebSocket Extended CONNECT over HTTP/3 without a side-channel transport or HTTP/1.1 bootstrap fields on the client-facing H3 request.
- [x] Move the H3 stack to `hpx-h3 2.5.19` with integrated Quinn transport and advertise Extended CONNECT support.
- [x] Rename the requested dashboard sections/actions in EN/PL and update release contracts/documentation.
## 0.13.2
Current direction: 0.13.1 -> 0.13.2
- [x] Honor a valid administrator session on direct panel refresh and revalidate stale browser-history login documents.
- [x] Force hot-cache handoff to enabled cold storage during managed updates and provide a longer controlled-stop budget.
- [x] Store automatic-renewal observations in SQLite schema v3 and restore them before the administration listener starts, with one-time legacy JSON import.
- [x] Move the raw configuration document editor under **Settings -> Manual config** while preserving `/configuration` as a compatibility alias.
- [x] Update documentation, OpenAPI, language help, offline regressions and release identity.
## 0.13.1
Current direction: 0.13.0 -> 0.13.1
- [x] Extend administrator browser sessions to a configurable absolute 7–30 day lifetime, default 30 days.
- [x] Keep password change, logout and revoke-all as immediate session invalidation boundaries.
- [x] Allow deliberate local-listener backends, including port 9090, only behind explicit per-backend risk acceptance while retaining private/special-address policy.
- [x] Add panel confirmation, OpenAPI fields, EN/PL strings, documentation and regressions.
## 0.13.0
Current direction: 0.12.1 -> 0.13.0
- [x] Add first-class redirect hosts and dashboard navigation.
- [x] Support scheme/path matching, URL/host/path targets, 301/302/303/307/308, path/query and redirect-cache controls.
- [x] Share named listeners and certificate inventory with redirects while rejecting conflicting frontend ownership.
- [x] Default backend HTTPS `tls_verify` to false when omitted; keep explicit opt-in verification.
- [x] Compact certificate inventory cards, render DNS SANs as vhost-style badges and inspect legacy/manual public PEM files when stored coverage metadata is absent.
- [x] Update OpenAPI, docs, translations, regressions and release identity.
## 0.12.1
Current direction: 0.12.0 -> 0.12.1
- [x] Split ordinary configuration writes into revisioned section endpoints and retain atomic full-document publication for intentional multi-section changes.
- [x] Stop unrelated control-plane saves from rotating cache compatibility identity.
- [x] Preserve dashboard subpage routing across browser refresh/back-forward navigation.
- [x] Add independently selectable cold-cache idle/LRU/shutdown persistence policies.
- [x] Flush hot cache objects to cold storage during graceful shutdown and release RAM after bulk demotion where the allocator supports it.
- [x] Expose certificate DNS SubjectAltName coverage separately from configured SNI bindings.
- [x] Improve HTTPS backend TLS validation guidance while preserving secure-by-default omitted configuration and the explicit debug preset.
- [x] Update OpenAPI, regression checks and release identity to 0.12.1.
- [ ] Compile and execute the Rust test suite on a Rust 1.88+ staging host.
## 0.12.0
Current direction: 0.11.5 -> 0.12.0
- [x] Move Layer-4 TCP/UDP stream management out of Settings into a dedicated main-navigation page directly below Vhosts.
- [x] Give Streams the vhost-style searchable card + modal workflow with explicit active-versus-desired restart state.
- [x] Add fixed-cardinality per-stream connection/session, reject, error, byte and UDP packet telemetry without database work on the data path.
- [x] Add browser-session RX/TX rate charts derived from monotonic backend stream counters.
- [x] Restyle named listener bind addresses with the same chip interaction used for vhost hostnames.
- [x] Extend offline source/release regression gates for Streams navigation, authenticated assets, UI contracts and L4 metrics source invariants.
- [x] Stop successful unsafe methods from globally purging otherwise unrelated cached GET objects.
- [x] Use Host + URL as the logical primary cache identity and response `Vary` for representation variants instead of hashing unrelated request headers/backend members.
- [x] Share cache objects across backend-pool members and GET/HEAD requests.
- [x] Preserve resident age through 304 revalidation and hot/cold movement; persist the additional cold metadata in format 2.
- [x] Add variant-schema safety and cache regression coverage for the new behavior.
- [x] Make Force SSL require a real HTTP ingress and choose port 443 deterministically when several TLS ports are selected.
- [x] Add a graphical ACL-profile rule editor and resilient bulk-rule import with exact line errors.
- [x] Hide RustProxy cache diagnostics when a vhost explicitly disables cache.
- [x] Distinguish disabled vhost pools from unhealthy backends in the dashboard.
- [x] Add per-vhost client-IP forwarding control without weakening RustProxy ACL/GeoIP/rate-limit/Tinyauth identity.
- [x] Add a compact vhost search/filter for large installations.
- [x] Keep the checked-in Cargo lockfile stable and correct the Quinn manifest version to the resolved release.
- [x] Make the standard JSONL log directory writable under the hardened systemd service.
- [x] Accept HTTP/2/H3 `:authority` on the HTTPS administration panel without requiring a duplicate legacy Host header.
- [x] Reject ambiguous requests where legacy Host conflicts with protocol-native authority, while preserving strict HTTP/1.x origin-server semantics.
- [x] Add administration H2 authority and `/healthz` regression tests.
- [x] Add per-vhost Force SSL with an HTTP 308 redirect to the configured TLS frontend while preserving path/query.
- [x] Preserve NPM `ssl_forced` in the SQLite migrator as RustProxy Force SSL with usable HTTP+HTTPS listener bindings.
- [x] Fix managed update/rollback health checks for persisted administration HTTPS and changed admin bind/Host policy.
- [x] Add a dry-run-first SQLite migration tool for Nginx Proxy Manager proxy-host names and backends, with generic RustProxy TLS certificate fallback and manual-review warnings for unsupported NPM features.
- [x] Add offline migration-planner and HTTPS health-target regression coverage.
- [x] Add reusable ACL Profiles with country allow/block and IP/CIDR policy, attachable per vhost while retaining cumulative inline vhost and route ACL controls.
- [x] Add chip-style hostname editing and leading `*.` wildcard domains with exact-host and longest-wildcard precedence.
- [x] Add compact browser-session request-rate charts to vhost cards with progressive lifetime compaction.
- [x] Add the built-in HTTP 401 error page and treat benign post-upgrade WebSocket closes as normal tunnel completion.
- [x] Redirect plaintext requests arriving on the HTTPS administration socket and accept valid DNS Host values when no explicit admin hostname allowlist is configured.
- [x] Allow one named frontend listener policy to bind up to 16 explicit local addresses while forbidding wildcard binds in multi-address mode.
- [x] Align the Logging format builder with the Vhost configuration modal and reposition its field-configuration action.
- [x] Make source ZIP generation deterministic and verify reproducibility in release smoke tests.
- [x] Add bounded hot RAM and optional persistent cold disk cache tiers with asynchronous demotion/promotion, restart recovery, integrity metadata and separate hot/cold statistics.
- [x] Add cold-tier settings for path, disk/object budgets and idle demotion time while preserving global hot RAM limits.
- [x] Add structured-log format presets plus a visual field selector/renamer with JSON preview and advanced raw mapping fallback.
- [x] Normalize Logging sink cards to the shared application card styling instead of release-specific fieldset CSS.
- [x] Add baseline multi-stage Docker/OCI packaging with an unprivileged runtime user and persistent data volume.
- [x] Document browser hard-reload cache revalidation semantics and expose the exact request revalidation reasons in the cache inspector.
- [x] Redesign vhost cards around listener/protocol/certificate/cache identity plus live pool health, requests, active exchanges, errors, latency and traffic rate.
- [x] Add bounded structured JSON access-log sinks for JSONL files, Logstash TCP and Loki HTTP(S), with configurable field mapping/static fields and sink counters.
- [x] Expand cache object inspection with body bytes, resident bytes, overhead and aggregate stored-object memory counters.
- [x] Add optional `X-Cache-Resident-Age` and expose resident age for stored HITs.
- [x] Add administration HTTPS using the application-managed default certificate or a selected certificate, with restart-aware persisted bind address and hostname allow list.
- [x] Permit non-loopback administration binding when HTTPS is enabled; keep plain remote HTTP behind the legacy explicit risk gate.
- [x] Add global TLS protocol/cipher policy plus per-vhost TLS 1.2/1.3 and cipher overrides for TCP TLS. HTTP/3 vhosts inherit the global TLS 1.3 policy.
- [x] Make Settings tabs fill the available width and add dedicated Administration/TLS policy pages plus a separate Logging navigation page.
- [x] Enable shared cache by default while keeping explicit vhost/route disable controls.
- [x] Implement fresh conditional HIT for `If-None-Match` / `If-Modified-Since`.
- [x] Implement backend validator revalidation and cached-body reuse on backend 304.
- [x] Treat request/response `no-cache` as validation semantics rather than no-store; preserve `no-store` as hard exclusion.
- [x] Retain stale validators for bounded revalidation without stale serving.
- [x] Raise maximum object configuration to 1 GiB and remove eager object-sized fill allocation.
- [x] Add diagnostics, real-binary smoke scenarios, unit regressions and 0.8.1 release documentation.
- [x] Per-vhost H2/H3 frontend opt-outs next to named-listener selection, capability-gated by Settings listeners.
- [x] Global static-cookie cache defaults for common assets, visible global/per-vhost controls and response-side privacy guards.
- [x] Listener editor uses page scrolling without a nested scrollbar.
- [x] Per-vhost fixed-window request rate limiting with burst allowance.
- [x] Per-country rate overrides and block/allow-only country access rules backed by verified install-time GeoIP data.
- [x] Cloudflare client IP mode gated by direct-peer Cloudflare CIDRs.
- [x] Per-vhost H2/H3 frontend opt-outs and Server-Timing diagnostics.
- [x] Named listener selection in vhosts; listening IP/ports managed in Settings.
- [x] Health-check `off` disables active and passive classification.
- [x] HTTPS-by-IP backend debugging defaults and warnings.
- [x] Global static-cookie cache defaults plus per-vhost inheritance/overrides with response privacy guards.
- [x] Corrected cache Age calculation.
- [x] Updated deployment regressions, docs and 0.8.0 release identity.
- [x] Release CLI can generate the one-time setup token before first server start.
- [x] Explicit two-flag risk gate for wildcard remote administration binding.
- [x] Numeric Host validation for the wildcard panel; DNS hostnames remain rejected.
- [x] Linux/systemd install defaults enable 80/443; explicit `--no-https` opt-out.
- [x] Updated deployment regressions, docs and 0.7.3 release identity.
- [ ] Build/check/test the Rust binary and exercise remote-panel/systemd behavior live.
- [x] Explicit release identity, without overwriting the 0.7.1 artifact.
- [x] Swagger asset default independent of environment presence/Cargo config lookup.
- [x] Embedded assets prepared by our build, without an adapter's old-version fallback.
- [x] Offline local ZIP, bounded member validation, optional SHA-256 and safe caching.
- [x] Executable build-helper regressions and updated build/migration instructions.
- [ ] Build/check/test real Rust and render the actual upstream Swagger distribution.
- [x] Per-location visual proxy-request and client-response header rules.
- [x] Minimal anonymous login document and filtered extensible language bundle.
- [x] Exact default-deny admin route/method policy including private assets and docs.
- [x] Protected OpenAPI/Swagger, cookie session and CSRF-confirmed mutations.
- [x] Generic public discovery/errors and cross-tab UI revocation cleanup.
- [x] Source audit, access probe and regression tests with explicit execution limits.
- [ ] Compile and run router/proxy tests, inspect real Swagger rendering, and run the
anonymous probe against the built release before production acceptance.
- [x] Scheduled renewal for HTTP-01, Cloudflare, OVH and RFC2136 managed profiles.
- [x] Validated revisioned hot certificate publication with unchanged/failure safety.
- [x] Per-certificate opt-out, manual check, dry run, next/last/expiry observations.
- [x] Separate install/update scripts; isolated service, full data backup and rollback.
- [x] Vhost Basic Auth with bounded Argon2id checks and optional credential forwarding.
- [x] Per-vhost WebSocket toggle and graphical cumulative CIDR ACL editing.
- [x] Visual prefix locations with pool exclusion for dedicated origins.
- [x] Neutral welcome page, opt-in protocol fixture, shared square modal/Settings style.
- [x] Independent proxy and local administrator control plane; no Docker dependency.
- [x] SQLite documents, revision CAS, immutable snapshots, audit and private backups.
- [x] Accounts, bounded sessions, setup capability, origin/CSRF protections.
- [x] Host/path routes, aliases, explicit private-origin permission and CIDR ACLs.
- [x] Streaming bodies and full-exchange limits; bounded logs, SSE and Prometheus.
- [x] Public TLS/SNI, verified HTTPS upstreams, guarded DNS, HTTP/2 and WebSocket source.
- [x] Whole-source upgrade, legacy auth-module repair and rollback on copy failure.
- [x] Persist public HTTP/HTTPS bind addresses and ports, including 80/443 presets.
- [x] Distinguish active listeners, desired listeners and startup defaults; show restart pending.
- [x] Allow remote origins on ordinary 80/443 without allowing local listener loops.
- [x] RAM cache with TTL/Age, entry/object/byte limits, LRU eviction and route bypass.
- [x] Bounded streaming fills; do not publish partial, failed, oversized or trailer bodies.
- [x] Privacy exclusions, conservative Vary identity and ACL-before-cache ordering.
- [x] Optional X-Cache, X-Cache-Hits and Cache-Status; counters and authenticated purge.
- [x] Invalidate old fill generations on purge, config publication and successful unsafe methods.
- [x] Streaming gzip, Brotli, Zstandard and deflate negotiation with privacy/no-transform safeguards.
- [x] Preserve/hide/custom Server policy; client-response and upstream-request header editors.
- [x] Denser responsive dashboard; original logo retained.
- [x] OS/process CPU, RAM/RSS, load, descriptors, threads, network, cgroup and cache diagnostics.
- [x] Compile-time language discovery from langs/*.json; metadata, fallback and RTL.
- [x] Extra language files survive managed source updates.
- [x] Log filtering by host/path/cache outcome and bounded JSON export.
- [x] Unit and real-binary integration test source; 49 simulated-API frontend checks.
- [x] Example unprivileged systemd service with low-port capability.
- [x] Remove reported compression threshold type mismatch without narrowing or panic conversion.
- [x] Explicit frontend IP/port/TLS ownership inside a vhost; actual-destination isolation.
- [x] Multiple backend members, weights, backup and drain modes.
- [x] Weighted round-robin, least active exchanges, least traffic, adaptive and IP hash.
- [x] Connection keepalive/reuse limits and timers, not a Keepalived/VRRP integration.
- [x] Bounded TCP/HTTP health checks, slow-response exclusion, fall/rise and recovery.
- [x] Opaque cookie/IP affinity; compatible edit continuity, safe cache bypass.
- [x] Full-exchange backend leases; no automatic replay of failed writes.
- [x] Per-vhost response/security headers, TLS-only HSTS and explicit preload policy.
- [x] HTTP/2 TLS preference retains HTTP/1.1 for clients and HTTPS origins.
- [x] Vhost editor, atomic legacy migration, health/traffic/latency dashboard and API metrics.
- [x] All new user-facing text in discovered language packs; logo unchanged.
- [x] Rust regression and real-binary acceptance test source; 63 simulated-API UI checks.
- [x] Complete source update, examples, migration documentation and evidence report.
- [x] Split oversized status JSON expansion instead of masking it with a larger recursion limit.
- [x] Optional per-vhost certificate upload/selection with bounded private staging and validated SNI mappings.
- [x] Independent vhost cache behavior, inherited defaults and shared resident/object ceilings.
- [x] **Selective cache invalidation by vhost**, promoted from Cache evolution; invalidate pending fills too.
- [x] Compact manager list and tabbed vhost dialog, visual header rules and live health/latency.
- [x] Dashboard density presets and top alignment, without redesigning the logo.
- [x] Separate modal/docked live logs with persistent controls, vhost filters, pause and scoped export.
- [x] Global/vhost error pages, maintenance/static response and direct-IP/unknown-host behavior.
- [x] Security shortcut within Settings; new labels remain in discoverable language packs.
- [x] Python-only random-data mock origin for cache, health, delay, compression and error-page development.
- [x] Regression test source for new runtime policies; executed frontend/helper checks in TEST_REPORT.md.
- [x] Canonical Forwarded/X-Forwarded-For/X-Real-IP with explicit bounded proxy trust; keep destination-IP routing independent.
- [x] Per-vhost Tinyauth auth subrequest, sanitized identity headers, restricted login redirects and fail-closed handling before cache/static/upgrades.
- [x] Separate certificate inventory tab with upload, per-vhost selection and metadata-only read API; leave ACME as future work.
- [x] Named multiple-IP listeners, descriptive scope, reusable vhost references and explicit legacy-route permission.
- [x] HTTP/3 UDP adapter using Quinn/h3 with TLS 1.3, same SNI/policy pipeline, Alt-Svc, requested limits and bounded drain; retain TCP H2/H1.
- [x] Request ID/revision off by default, independent per-vhost controls, optional mock-origin removal and effective per-vhost Server policy.
- [x] Actual frontend socket in cache identity; streaming-safe empty request detection for H2/H3.
- [x] Toast above active modal backdrop, including browser top-layer/inertness handling.
- [x] Python fake-auth peer plus Rust regression sources for auth, headers, extra-frontend cache, listeners and real QUIC/TCP.
- [x] Dedicated bounded cache panel: resident objects/bytes, per-domain effectiveness, TTL/Age/hits, reasons and vhost filters.
- [x] Remove the reserved administrator cookie before cache eligibility; preserve application-cookie privacy.
- [x] Handle empty terminating DATA frames and expose fixed X-Cache-Reason / Cache-Status detail diagnostics.
- [x] Replace special mock-origin hiding with explicit revision controls; keep general header rules.
- [x] Default HTTP/3 for TLS while persisting explicit opt-out and TCP fallbacks.
- [x] Diagnose overlapping sockets with addresses, ownership, protocol/limit differences and remedies.
- [x] Classify unavailable/invalid/timed-out upstreams as 503/502/504 respectively.
- [x] Basic Let's Encrypt DNS-01/RFC2136 job and library-import workflow through Certbot; private TSIG/account state and staging-first consent.
- [x] Offline adapter tests, browser fixtures and Rust regression sources; unchanged brand assets.
- [x] Vhosts-only runtime/UI and one-way legacy import preserving path/backend and IP ownership.
- [x] HTTP-01 active-job/domain-scoped challenge serving with private webroot storage.
- [x] Certbot Cloudflare and OVH API DNS-01 adapters alongside RFC2136.
- [x] Unified provider/import dialog, masked credentials, explicit consent and issuer metadata.
- [x] Dedicated opt-in Prometheus endpoint, scrape CIDRs and environment-token authentication.
- [x] Application/admin/listener/vhost/backend/cache/system collectors and exchange histograms.
- [x] Functional Settings tabs with preserved dirty fields, keyboard navigation and no Security sidebar.
- [x] Offline provider regressions, simulated-API UI checks and unexecuted Rust acceptance tests.
- [ ] Validate real HTTP-01, Cloudflare/OVH/RFC2136 DNS updates, CA issuance, cancellation cleanup and certificate hot-deployment.
- [x] Add the managed renewal scheduler and audited validated deployment source.
- [ ] Verify real renewal/publication and add external expiry alerts, revocation/account lifecycle.
- [ ] Resolve and retain Cargo.lock; run check, test and all real-binary suites.
- [ ] Verify real Tinyauth integration, revocation, trusted forwarding and independent HTTP/3 client interoperability.
- [ ] Run an independent RFC 9114/QUIC conformance suite, malformed-stream/load tests and actual TLS/UDP production deployment checks.
- [ ] Execute vhost isolation/weighted balancing/health/recovery/keepalive/affinity acceptance against a real Rust binary.
- [ ] Verify compression output with independent Brotli/Zstandard decoders.
- [ ] Run real TLS/HTTP2/WebSocket/cache concurrency, cancellation and graceful-drain tests.
- [ ] Benchmark HIT/MISS/streaming RSS and CPU under slow clients and origin failures.
- [ ] Fuzz malformed HTTP/cache directives and language-pack validation.
- [ ] Exercise real non-root 80/443 bindings and systemd service confinement.
- [ ] Verify native browser HTTP/CSP/cookie enforcement (navigation blocked in this environment).
- [ ] Validate the dedicated scrape endpoint/token with a real Prometheus server and production network policy.
- [x] X-Cache-Resident-Age - implemented in 0.9.0
## Optional module follow-ups
### Docker discovery
Implemented in 0.18.1 through the standalone `docker-agent/` provider boundary.
Future work can add provider-side filters, mTLS and DNS-provider automation; the core remains useful without Docker and never opens the Docker socket itself.
### Cache evolution
Conditional revalidation is implemented. Stale-while-revalidate/stale-if-error, request collapsing,
tag-based invalidation and richer per-route policy remain open. Persistent hot/cold storage is implemented in 0.10.0.
Selective invalidation by vhost is implemented in 0.3.0; the domain/object inspector in 0.5.0; tags are not. No VCL engine,
distributed cache, ESI or Varnish-protocol compatibility is implemented.
### Operations
Container/OCI packaging is implemented in 0.10.0. Certificate alerting/revocation and account lifecycle, reproducible releases,
performance baselines and cross-platform diagnostics remain open. Remote HTTPS administration is implemented in 0.9.0;
loopback remains the default and plain remote HTTP remains explicitly risk-gated.