735 lines
52 KiB
Markdown
735 lines
52 KiB
Markdown
# 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.
|
||
|
||
See [the 0.24.1 specification audit](V0.24.1_AUDIT.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.
|
||
|
||
See [the 0.24.0 specification audit](V0.24.0_AUDIT.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.
|
||
|
||
See [the 0.23.3 specification audit](V0.23.3_AUDIT.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.
|
||
|
||
See [the 0.23.2 specification audit](V0.23.2_AUDIT.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.
|
||
|
||
See [the 0.23.1 specification audit](V0.23.1_AUDIT.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.
|
||
|
||
See [the 0.23.0 specification audit](V0.23.0_AUDIT.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.
|
||
|
||
See [the 0.22.3 specification audit](V0.22.3_AUDIT.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.
|
||
|
||
See [the 0.22.2 specification audit](V0.22.2_AUDIT.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.
|
||
|
||
See [the 0.22.1 specification audit](V0.22.1_AUDIT.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.
|
||
|
||
See [the 0.21.0 specification audit](V0.21.0_AUDIT.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.
|