Improve application help

This commit is contained in:
2026-10-29 00:01:35 +02:00
parent 4960c65f65
commit 23d6180f24
6 changed files with 1126 additions and 48 deletions
+90
View File
@@ -0,0 +1,90 @@
# 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.