3.8 KiB
Milestone 25 evidence — explicit restart verification scenario
Run date: 2026-10-30T21:35:10+02:00. Baseline commit: 7cef400; the working tree has uncommitted M25 changes in src/app.rs, new src/app/restart.rs, and docs/PROJECT_LAYOUT.md, plus coordinator-owned PLANS.md. Rust/Cargo: 1.97.1, native host target. Tests used synthetic fixtures/adapters only. No production configuration, keys, VPN, host service, Docker environment, or VM was accessed.
Integrated inputs
| Input | SHA-256 |
|---|---|
src/app.rs |
784001013f90d9bbdb1579cf3c6672a27dd34dc0e295d3e6ea3f70d53d05c586 |
src/app/restart.rs |
fb724054faec6adf1b58a31800a2a636307b2620ac3d980309638ad508a00fa3 |
docs/PROJECT_LAYOUT.md |
8f156088800e469e6bbf7ac0f012afdb4bf1f190ab4c9161fb3c41d871e04df2 |
target/release/wireguard-admin |
b383a1f30e776dcce983bb123af6f4e474e71d6b3d28866f3a06ba3c423228b7 |
No dependency, manifest, lockfile, service-adapter or runtime-transport files changed. The release artifact hash identifies the binary built from this integrated source; no deployment occurred.
Checks on integrated tree
| Command | Result |
|---|---|
cargo test --locked app:: |
Exit 0; 67 app tests passed. |
cargo test --locked runtime:: |
Exit 0; 25 runtime tests passed. |
cargo test --locked service:: |
Exit 0; 26 service tests passed. |
cargo test --locked --test commit_restore |
Exit 0; 9 tests passed. |
cargo test --locked --test runtime_restart |
Exit 0; 3 tests passed. |
cargo fmt --all -- --check |
Exit 0. |
cargo clippy --locked --all-targets -- -D warnings |
Exit 0. |
cargo test --locked |
Exit 0; library 337 passed, 2 ignored; integration and doc tests passed. The selected Alpine tests stayed ignored. |
cargo build --locked --release |
Exit 0. |
git diff --check |
Exit 0. |
Acceptance mapping and review
- M25-A1:
restart.rscontains the preview, validated preparation, completed pre-restart backup, one-use attempt, optional draft discard, service job, bounded runtime read, full comparison and durable publication in the original order. Cancel preserves draft and performs no backup/job/read. The service deadline is created after backup and shared with observation; both saved generation and attempt ID are checked before persistence. - M25-A2: Existing app/runtime/service tests cover legacy metadata-free, IPv4-only, subnet-route and missing-IPv4 valid peers; malformed or duplicate identities, incomplete observations, mismatches, service and transport distinctions, shared deadline exhaustion, and post-match persistence failure.
SavedPeerProjectionremains the complete technical target while a managementSnapshotis optional. Reservations release only after durable verified success. - M25-A3:
Application::restartstill calls the existingservice::restart_systemd_unit_reportandruntime::transport::observe_interfaceadapters. The fixture apply method and container driver remain#[cfg(test)]; no rollback or second restart was introduced.apppublic restart types remain re-exported.
Fresh independent reviewer /root/m25_review examined the integrated source and original behavior, verified all five focused suites and Rust gates, and found no actionable source defect. M25-R1 was the missing specified evidence artifact; the coordinator created this report after independently running all required commands. The reviewer independently rechecked the record and all four hashes and closed M25-R1; no finding remains.
This is host/fixture evidence only. No fresh Alpine Testcontainers scenario or disposable systemd VM test was run, so real systemd/D-Bus and live IPv6 behavior remain unverified. Alpine would not establish systemd behavior. The retired M9 real-system acceptance limitation remains outside M25.