6.0 KiB
Milestone 18 evidence: in-app Help
Recorded 2026-10-28T23:59:51+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:
4960c65f6511da50bac9d35e2b4a625adbaf86c3. The working tree is dirty;
the M18 Rust/README inputs at final validation have SHA256:
| Input | SHA256 |
|---|---|
src/tui/render.rs |
dbf00298f1bf466f99688f790be5ae34e9a7434aa374bc61c7df31e41c8d842b |
src/tui/terminal.rs |
4658404e856c1acced9c115f1cfb4c9f87e714b2343c3996df7ee63504368b81 |
tests/tui_workflow.rs |
d7bc72c20eb9b4d3ba160e599d83f83111e418a9c3056b4e430aa17a555baacd |
README.md |
7352da8e13850b1b13e11bf2f828c8368dbd1b6b95320d6838ac26b7fa0532d6 |
PLANS.md is also dirty, recording the prior M18 plan and this milestone's
progress. No dependency manifests or application adapters changed. Release
target/release/wireguard-admin SHA256 is
d179b2934565e12e0d90ad716730418a40b215c5ca68058fd76566c267e98488;
file identified an x86-64 dynamically linked GNU/Linux PIE.
Shortcut audit and content basis
The implementer audited current src/tui/terminal.rs::handle_key and
handle_navigation_key, src/tui/forms.rs::handle_key and
src/tui/events.rs before writing Help. The guide's shortcut families map to
the existing handlers and guards:
| Keys | Handler and actual availability |
|---|---|
?, Up/Down, PageUp/PageDown, Enter, Esc |
terminal.rs: Help resets to top; Help scrolls by visual row/page; list arrows select and Enter opens details; Esc returns to list or cancels an active form/clears QR. |
q, handled Ctrl-C |
terminal.rs: outside forms, exit is immediate without a draft or asks about draft discard; Ctrl-C is translated to q and is form-specific while a form is active. |
n, r, d |
terminal.rs and forms.rs: create requires a loaded view; rename/delete require a supported unambiguous selected peer and confirmation. Blank paired addresses select automatic allocation. |
p, c, x, R |
terminal.rs, forms.rs, events.rs: preview draft; confirmed Commit saves after backup; confirmed discard drops draft; uppercase restart previews saved state and requires confirmation, backup, service completion and verification. |
o, O |
terminal.rs, forms.rs, events.rs: supported selected saved client only; first delivery after Commit is session-bound and retryable after file failure, while uppercase reissue requires a vault password per action; file precedes optional QR. |
b, B |
terminal.rs and forms.rs: list/select backup and preview confirmed full restore versus create manual backup. Restore changes saved state only. |
s, i, ! |
terminal.rs and forms.rs: setup only before vault initialization; import submits one configured-directory filename and preserves its source; issue summary is available after view load. |
Actions remain guarded by the existing handlers. The Help navigation keys themselves do not submit application work. Existing action letters can still dispatch while Help is visible; the milestone did not change action dispatch. The guide says how to return to the list and accurately distinguishes lowercase and uppercase keys.
Implementation, review and acceptance mapping
The Help screen is one ordered document with an introduction and nine sections:
quick start; list/details; state/observations; client changes; save/restart;
delivery/reissue; backups/restore; vault/import/issues; navigation/exit. It
uses styled headings, key labels, workflows and warnings, with display-cell
wrapping at the actual inner viewport width. A visible row-range title and the
fixed-height footer show navigation and overflow. Renderer and terminal share
the same wrapped-row metrics: one-row arrows, viewport-page keys, bounded
scrolling, resize clamping, ? reset and Esc return. These changes cover
M18-A1–A5; synthetic buffers cover 34×8, 40×9, 60×16, 80×24, 100×30 and
180×50, including reachability of the last section. README Help instructions
were updated.
One GPT-6-Luna/high implementer completed M18.1–M18.3 sequentially. A separate fresh GPT-6-Luna/high read-only reviewer compared content with the handlers and tested Help rendering/navigation. It found M18-R1 (P2): at 34×8, the Help footer omitted Esc return. A separate GPT-6-Luna/high repairer changed only Help's narrow hint packing and added 34×8/40×9 assertions. The reviewer rechecked the actual repair, ran the focused test and closed R1. No actionable finding remained in that pass. A coordinator content audit then found M18-R2: four missing explanations about Applied status, current observations, the first-delivery activation warning and masked password entry. The reviewer independently confirmed those gaps. The separate repairer amended Help and added a 34×8 semantic/reachability regression; independent re-review checked the claims against status/form code and SPEC.md and closed R2. No actionable finding remains, satisfying M18-A6. A proposed change to action-key dispatch was withdrawn after checking the explicit preserve-actions boundary.
Final checks and limits
| Command | Result |
|---|---|
cargo fmt --all -- --check |
exit 0 |
cargo test --locked tui:: |
79 passed, 0 failed |
cargo test --locked --test tui_workflow |
8 passed, 0 failed; includes synthetic PTY Help/resize flow |
cargo clippy --locked --all-targets -- -D warnings |
exit 0 |
cargo test --locked |
392 passed, 0 failed, 3 explicitly ignored; 2 doctests passed |
cargo build --locked --release |
exit 0; binary hash above |
git diff --check |
exit 0 |
Tests use synthetic fixtures and an isolated PTY. That PTY run checks emitted terminal behavior, not manual readability in a specific terminal emulator. Alpine Testcontainers, disposable-VM systemd, live WireGuard and production configuration were not used for this presentation milestone. The user-directed M16 manual check has no recorded environment/transport detail and is not M18 evidence. No host service was restarted and no Git commit was made.