# Release readiness and qualification matrix This is a scope-qualified M9.4 record, not a release approval. M1–M8 are accepted in [`PLANS.md`](../PLANS.md); M9 real-system acceptance remains incomplete because no explicitly selected disposable systemd VM is available. No production host, VPN, service, key, or configuration was accessed. The operator procedure is in [`OPERATIONS.md`](OPERATIONS.md). ## Current host release candidate The following native artifact was built from the current Rust sources with the pinned compiler and locked dependency set. Its `--help` and `--version` paths were executed on the development host. This assessment does not establish startup in a guest or supported compatibility with another distribution. | Property | Observed value | | --- | --- | | Source Git HEAD | `f4a6540df9621c9c5e5d1430243f92e749356a59` | | Working-tree state at build | Pre-existing dirty documentation only: `PLANS.md` modified and `docs/VM_ACCEPTANCE.md` untracked; no source, manifest or lockfile changes | | Relevant input fingerprint | SHA-256 `02ace329ca2ed17aa0b47112a3fcaa090b7d9a7eaa334f293aea9792e35e668a` over sorted `src/`, `Cargo.toml`, and `Cargo.lock` file hashes | | Compiler and target | rustc 1.97.1, host `x86_64-unknown-linux-gnu`; Cargo 1.97.1 | | Build command | `cargo build --locked --release` — exit 0 | | Artifact | `target/release/wireguard-admin`, x86-64 ELF PIE, dynamically linked | | Artifact SHA-256 | `d52d43cd02332352ffbd09c97e3b8095a710359128260c1286006e1c76c1b283` | | Runtime requirements observed | ELF interpreter `/lib64/ld-linux-x86-64.so.2`; `libc.so.6` (GLIBC symbols through `GLIBC_2.39`) and `libgcc_s.so.1`; `ldd` resolved these on the development host | | Artifact smoke | `./target/release/wireguard-admin --help` and `--version` — both exit 0; no settings, terminal, root management, service or interface exercised | Commands used to inspect the artifact were `sha256sum target/release/wireguard-admin`, `file target/release/wireguard-admin`, `readelf -h`, `readelf -l`, `readelf -d`, `readelf --version-info`, and `ldd target/release/wireguard-admin`. The linked GLIBC requirement is an observed lower symbol-version bound, not proof that a distribution satisfying it is otherwise compatible. No installer, package, signature, reproducible-build claim, or supported distribution baseline is provided. This native GNU artifact is not an Alpine/musl artifact. The source-input fingerprint was calculated from the repository root with: ```sh rg --files src Cargo.toml Cargo.lock | sort | xargs sha256sum | sha256sum ``` ## Specification-to-evidence matrix “Accepted” refers to the repository's existing milestone result. It does not mean every production platform or dual-stack behavior has been qualified. For M1–M7, the concise milestone scope, review outcome and commands are in the corresponding accepted sections of [`PLANS.md`](../PLANS.md). M8's detailed source, artifact, run and scope record is [`evidence/milestone-8.md`](evidence/milestone-8.md). | Requirement area | Existing evidence | Qualification and limit | | --- | --- | --- | | Settings validation, executable-relative paths, draft/saved/applied model | M1 accepted record in `PLANS.md`; M7 startup/workflow record there | Synthetic/unit and TUI workflow coverage; no guest startup or production configuration. | | Server configuration authority, client identity by public key, byte preservation and metadata | M2 accepted record in `PLANS.md`; specification in `SPEC.md` | Fixture/behavioral evidence for preserving non-client bytes and comments; no real server file was used. | | Secret-safe keys, encrypted vault, read-only imports and originals | M3 accepted record in `PLANS.md`; M8 import/reissue scenario in `evidence/milestone-8.md` | Synthetic import plus accepted Alpine lifecycle scenario; source originals were fixture files and retained. Vault password loss remains unrecoverable by design. | | Backups, mandatory backup boundary, journaled Commit, recovery and previewed restore | M4 accepted record in `PLANS.md`; M8 restore and backup-failure runs in `evidence/milestone-8.md` | Saved-state operations and test-fixture behavior covered. Restore did not apply runtime changes; real-VM manual recovery remains unverified. Archives are not encrypted. | | Read-only runtime observations, restart orchestration, deadline and failure reporting | M5 accepted record in `PLANS.md`; runtime section of `docs/RUNTIME.md`; M8 Rustix observations | Fake-adapter and real Alpine WireGuard reader/IPv4 observations exist. No actual systemd/D-Bus job or `Application::restart` against real systemd has been run. | | Delivery, first issue, password-per-action reissue, QR and private output | M6 accepted record and M7 synthetic PTY/workflow records in `PLANS.md`; `docs/DELIVERY.md` | Synthetic behavior covers file publication/reissue and QR rendering/terminal handling. No user device scan or actual client device qualification is recorded. | | Native TUI, root/startup boundary and exit/terminal cleanup | M7 accepted record in `PLANS.md`, including synthetic PTY and workflow checks | Not a real guest root/non-root startup smoke. The release binary was only exercised for help/version on the build host. | | Alpine real WireGuard lifecycle and IPv4 traffic | M8.7 in `evidence/milestone-8.md` | Accepted M8 used the pinned Alpine 3.22.7 fixture and selected disposable Docker daemon; repeated fresh integrated IPv4 scenarios passed on the recorded source fingerprint. Fixture Apply is a test-only callback, not systemd evidence. | | Dual-stack behavior | M1–M7 synthetic client/configuration tests; M8 scope declaration | Production IPv4+IPv6 creation/full-tunnel requirements remain in force. Real IPv6 capability and traffic were excluded from M8 and are unverified; an IPv4 result does not qualify IPv6. | | Real systemd job, alias/fast completion, failure/timeout, verified apply, restore and release-worker startup | No M9 VM result exists; `docs/VM_ACCEPTANCE.md` is a reviewed safety/scenario contract | **Unverified / M9 incomplete.** No selected disposable guest or VM run. Do not infer this from fake service adapters, Alpine or the host `--help` check. | | Native artifact identity and dynamic dependencies | This document's host release-candidate record | Host-only assessment. Guest compatibility and startup are unverified; no universal Linux support claim. | ## Qualification status and next action - M1–M8 remain accepted at their recorded scope. Later M9 documentation does not change or broaden their evidence. - M9.1 has a reviewed, non-runnable VM safety/scenario contract. M9.2–M9.3 real-system work and M9.5–M9.6 review/acceptance remain incomplete. - The release candidate was built and its ELF dependencies inspected on the host, but has not been copied to or started in a guest. Actual guest architecture/distribution compatibility, root management startup, systemd/D-Bus behavior and service recovery are unverified. - Real IPv6 capability and tunnel traffic are unverified. No M8 IPv4 or synthetic dual-stack test is a substitute for that qualification. - No release, installation, production action, Git commit, or deployment is authorized by this report. Next action: select and explicitly identify a disposable VM/guest satisfying [`VM_ACCEPTANCE.md`](VM_ACCEPTANCE.md), then complete its target guard and real-system scenarios before independent M9 review. Keep systemd/guest results separate from the existing Alpine and synthetic evidence. Any final release statement must retain the real IPv6 qualification gap unless that coverage is explicitly authorized and completed.