Files
RustProxy/docs/V0.25.4_AUDIT.md
T
2026-10-04 23:13:27 +02:00

2.9 KiB

RustProxy 0.25.4 release audit

RustProxy 0.25.4 adds restore from retained manual-configuration history on top of the schema-8 history introduced in 0.25.3. There is no SQLite schema change.

Configuration history restore

Requirement Status Evidence
Restore an older retained revision IMPLEMENTED POST /api/config/history/restore loads the retained document and passes it through the normal configuration validation/update path.
Preserve monotonic revision history IMPLEMENTED Restore uses the current expected_revision and commits the restored document as the next revision; it never updates or deletes the selected historical row.
Reject stale restore actions IMPLEMENTED The endpoint compares expected_revision with the current published revision and returns conflict before restore when configuration changed. The storage write retains the existing CAS guard.
Keep restore private and CSRF-protected IMPLEMENTED The endpoint is outside the anonymous allowlist and is routed through the existing administrator session, Origin/request-marker and CSRF guard.
Audit restores distinctly IMPLEMENTED Restore persistence records config.restore with source_revision=<old> revision=<new> in the same SQLite transaction as the configuration write/history insert.
Reuse hot-publish behavior IMPLEMENTED Restore calls the same compile, listener-lock, certificate-removal, cache-invalidation and immutable snapshot publication path used by ordinary configuration updates.
Provide dashboard restore UX IMPLEMENTED The revision-history detail view exposes a restore action only for an older revision, shows an explicit confirmation, refreshes the current envelope after success and reloads history.

Compatibility

SQLite remains at schema version 8 and the history capacity remains 512 revisions. Upgrading from 0.25.3 requires no SQL migration. History retention still begins with the schema-8 migration introduced in 0.25.3.

A restore can fail current validation when an older document is no longer valid in the current runtime environment, for example because referenced certificate files, listener constraints or other external prerequisites changed. In that case the active configuration and revision remain unchanged.

Verification gates

Rust-independent source, language, documentation, OpenAPI, browser JavaScript, security-contract and release-smoke checks are included in the release tree. Rust tests include an authenticated end-to-end restore case that applies two configurations, restores the first as revision 3 and checks the config.restore audit entry and retained previous document.

This packaging workspace does not provide the Rust/Cargo toolchain. Compiler-enabled cargo fmt --all, cargo check --locked --all-targets and cargo test --locked --all-targets therefore remain mandatory on a release host before production deployment.