# Milestone 20 evidence: vocabulary and prepared contexts Recorded 2026-10-29T22:38:53+02:00. Base commit `ede45d224a9ad255a919900e556a03d7e575430f` had a clean working tree. The final tree is dirty only for this milestone's `PLANS.md`, Rust source and test changes, and this evidence report. No `Cargo.toml` or `Cargo.lock` diff, new dependency, persisted-format change, production configuration, or secret fixture was introduced. The final Rust source/test patch fingerprint is SHA256 `cba97207f926f1927c70643754db2743603e0f72892115ef8d959696d769992a`, produced by: ```sh git diff -- src/app.rs src/domain.rs src/persistence.rs src/container_driver.rs src/tui/events.rs src/tui/render.rs src/tui/state.rs src/tui/terminal.rs tests/client_delivery.rs tests/commit_restore.rs tests/runtime_restart.rs tests/tui_workflow.rs | sha256sum ``` The release artifact `target/release/wireguard-admin` built from those inputs has SHA256 `7a6ee46b1d9c39bac9a7b3627b0b8ba30e70321126ebd16b1948b42b8658ac98`. `file target/release/wireguard-admin` identified an x86-64 dynamically linked GNU/Linux PIE with interpreter `/lib64/ld-linux-x86-64.so.2`. ## Implementation and acceptance mapping - M20.1 renamed the domain's current knowledge enum to `ApplyStatus`, retained `runtime::RuntimeObservation` for measured interface data, and migrated actual application, persistence, TUI and integration callers. The exact duplicate TUI `AppliedState` enum/mapping and now unnecessary `Statistics`, `TechnicalObservation` and `ObservedRuntime` aliases were removed. UI labels and current-versus-historical state transitions were preserved (M20-A1). - M20.2 replaced the six-value prepared delivery tuple and three-value restore tuple with private named contexts. A private `DeliveryMode` distinguishes first issue and reissue without changing public `reissue` flags. Neither context derives `Clone` or `Debug`; identity, attempt, generation, overwrite, cancellation, unrelated-command clearing, password ownership and QR/file order remain unchanged. A behavioral test covers cancel/unrelated-command clearing (M20-A2). - All affected production and test callers compile; no manifests, formats or transport behavior changed. Focused tests, final full RUST gates and independent review passed (M20-A3). ## Independent review and repair A GPT-6-Luna/high implementer completed M20.1 and M20.2 sequentially. A separate fresh GPT-6-Luna/high read-only reviewer inspected the integrated diff, production paths, callers, tests and secret-bearing contexts and found no behavior issue. The coordinator's first Clippy gate found M20-R1 (P2): two test/test-only `.clone()` calls on the now-`Copy` status. A separate GPT-6-Luna/high repairer changed only those two calls to dereferences in `src/app.rs` and `src/container_driver.rs`. The reviewer independently rechecked the repair and affected tests, closed R1 and found no new issue. No actionable finding remains. ## Checks and limits Environment at execution: `rustc`/Cargo 1.97.1 on `x86_64-unknown-linux-gnu`, rustfmt 1.9.0 and Clippy 0.1.97, matching the pinned compiler. Focused implementer/reviewer runs covered `domain::` (13), `runtime::` (25), `tui::state::` (7), `tui::events::` (7), `--test commit_restore` (9), `--test runtime_restart` (3), `--test tui_workflow` (8), and `--test client_delivery` (5). After R1, the repairer ran `cargo test --locked app::` (58 passed) and `cargo test --locked --lib container_driver::` (23 passed, 2 ignored). The reviewer reran affected app/event tests. These are host synthetic/PTY checks; ignored Alpine selectors were not run. | Final coordinator command | Actual result | | --- | --- | | `cargo fmt --all -- --check` | exit 0 | | `cargo clippy --locked --all-targets -- -D warnings` | exit 0 after M20-R1 repair | | `cargo test --locked` | exit 0: 391 unit/integration tests passed, 3 ignored; 2 doctests passed; 0 failed | | `cargo build --locked --release` | exit 0; artifact SHA256 above | | `git diff --check` | exit 0 | The initial Clippy run exited 101 on M20-R1 before repair and is not the final gate result. Default tests did not execute the three explicitly ignored Alpine/selected-daemon tests. No Alpine Testcontainers or disposable systemd VM run was required for this naming/context refactor or performed. Prior Alpine results are historical for earlier source and do not validate this artifact; real systemd/D-Bus and IPv6 limitations remain as previously recorded. No production, live VPN, host service or host network operation was performed.