# Milestone 17 evidence: adaptive client list and state presentation Recorded 2026-10-28T23:09:37+02:00 on `x86_64-unknown-linux-gnu` with `rustc`/Cargo 1.97.1, rustfmt 1.9.0 and Clippy 0.1.97. Base commit: `d49721ff8e6a40c1016e59b2648a6a622f84a4c4`. This is a dirty working tree; the M17 Rust/README inputs at validation have SHA256: | Input | SHA256 | | --- | --- | | `src/tui/render.rs` | `19fad8a9edfa571060c94fe34a1a484369f3601a3ffc52148081c935be2404f2` | | `src/tui/state.rs` | `b533427001c67fb2c1d8527fb8a2cc1d6bd7e824be8985fd8b773b09a144d0f9` | | `src/tui/terminal.rs` | `591ad7498fb4bb8cb825dfba0bad26e28bd8432ef26d5527950863a7534689f6` | | `tests/tui_workflow.rs` | `f57d058d8538d5d1afdab7ddb7e88d23259804a9927ee4ac52982903dc1a6928` | | `README.md` | `7c5eb0b58e81aaecbddae230211099db59560dfc5fe30991e7022d841d6b04a8` | `PLANS.md` and `docs/evidence/milestone-16.md` are also dirty documentation inputs. The latter records user-directed M16 acceptance and an undocumented manual check; it is not M17 test evidence. No M17 dependency manifest or application adapter changed. The release binary `target/release/wireguard-admin` has SHA256 `336103d76bb78225735411a76abdbf3f6d5dc49dd6ce0b96537dfd3dea46a578`. `file` identified an x86-64 dynamically linked GNU/Linux PIE. ## Implementation and acceptance mapping - M17-A1: the table allocates the actual list-pane width across wide, medium and compact columns. Synthetic buffers cover growing names, Latin/Cyrillic/ wide-character alignment, separate host IPv4/IPv6 cells, IPv4-only peers, and route markers. Full routes and public identity remain in details. - M17-A2/A3: shared visible records and selection drive the list, persistent pane and Enter details. Synthetic state/navigation/buffer checks cover first selection, duplicate and malformed peers, draft removals, document-only issues, refresh, dimension breakpoints and stable geometry. A loading-state regression covers side and stacked panes. Breakpoints use the content area: side-by-side at 140×13 or larger, stacked at 80×17 or larger (eight rows for details), compact summary at 60×12 or larger, otherwise list-only. These dimensions are independent of selected content and action availability. - M17-A4/A5: explicit Draft, Saved and Applied labels distinguish pending drafts from saved peers and runtime verification. The saved peer count comes from installed server bytes and includes nonmanaged peers; managed counts remain separately scoped. Tests cover state combinations, issue versus capability-limit counts, complete details and available observations. - M17-A6: focused TUI/workflow checks include navigation, forms, footer, QR and synthetic PTY lifecycle coverage. No Commit/restore/restart behavior changed. ## Review and checks One GPT-6-Luna/high implementer completed M17.1, M17.2 and M17.3 in order. A separate fresh GPT-6-Luna/high read-only reviewer inspected the integrated diff and ran `cargo test --locked tui::` (70 passed) and `cargo test --locked --test tui_workflow` (8 passed). It found M17-R1 (P2): loading list and persistent detail messages conflicted. A separate GPT-6-Luna/high repairer fixed the pane and added a 140×20/80×24 buffer test; the reviewer rechecked and closed R1 (`cargo test --locked tui::render::tests`: 39 passed). The integrated Clippy gate then found M17-R2 (P2), two redundant closures. The repairer replaced them with function items; the reviewer checked semantics, reran exact Clippy, and closed R2. No actionable review finding remains. Final integrated checks on the input hashes above: | Command | Result | | --- | --- | | `cargo fmt --all -- --check` | exit 0 | | `cargo test --locked tui::` | 71 passed, 0 failed | | `cargo test --locked --test tui_workflow` | 8 passed, 0 failed; includes synthetic PTY smoke | | `cargo clippy --locked --all-targets -- -D warnings` | exit 0 after R2 repair | | `cargo test --locked` | 384 passed, 0 failed, 3 explicitly ignored; 2 doctests passed | | `cargo build --locked --release` | exit 0; binary hash above | | `git diff --check` | exit 0 | All tests used synthetic configuration and keys. The PTY smoke checks emitted terminal control behavior through an isolated `script` session; it is not a manual terminal-emulator usability test. Alpine Testcontainers, disposable-VM systemd paths, live WireGuard, production configuration, and phone QR scanning were not run for this presentation milestone. Those checks are not claimed by the fixture results. No host service was restarted and no Git commit was made.