Files
wireguard-admin/docs/RELEASE_READINESS.md

86 lines
7.5 KiB
Markdown
Raw Permalink 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.
# 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.