91 lines
6.0 KiB
Markdown
91 lines
6.0 KiB
Markdown
# 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.
|