Improve bottom panel TUI design

This commit is contained in:
2026-10-27 23:04:52 +02:00
parent 4b53aad20c
commit d49721ff8e
3 changed files with 367 additions and 27 deletions
+55
View File
@@ -0,0 +1,55 @@
# TUI-FL-001 evidence: stable keyboard footer
Validated 2026-10-27T22:59:34+02:00 on the native
`x86_64-unknown-linux-gnu` development host with synthetic
Ratatui/TestBackend fixtures. No production configuration, host service, or
systemd VM was used.
## Behavior and review
The standard TUI layout now reserves four footer rows from the first draw:
two hint rows and their borders. The client-list region therefore keeps the
same height as selection and available actions change. Hints use a stable
priority order and fit into two bounded rows. A first packing pass shows every
hint when they fit; only actual overflow triggers a second pass reserving a
visible `… more` marker on the last row. The existing `? Help` route remains
visible in narrow list layouts. The source of context-sensitive hints and the
keyboard action handlers were not changed. Terminals with 8 or 9 rows use the
compact layout so the client pane retains visible content.
Buffer-level tests cover empty/populated/selected list geometry at 80×24,
narrow widths 34/36/40, the compact 80×9 case, and widths 102/103 where all
actions fit without a false omission marker. Tests check complete rendered
labels and the marker row, not just source-side packing. Existing TUI workflow
tests cover the unchanged action behavior.
An independent GPT-6-Luna/high reviewer found TUI-FL-001.2-R1 (P2, clipped
marker on the first row) and R2 (P2, border-only list at height 9). A separate
GPT-6-Luna/high repairer fixed both; re-review closed them. Re-review then found
R3 (P3, unnecessary omission from reserving marker space too early). The
repairer added a two-pass packer and a 102/103-column regression. Independent
re-review closed R3 with no further actionable finding.
## Checks and identity
Pinned `rustc`/Cargo 1.97.1, rustfmt 1.9.0 and Clippy 0.1.97 were verified.
The final integrated revision passed from the repository root:
- `cargo test --locked tui::render::tests`: 31 passed.
- `cargo fmt --all -- --check`: exit 0.
- `cargo clippy --locked --all-targets -- -D warnings`: exit 0.
- `cargo test --locked`: 370 passed, 3 explicitly ignored, 0 failed, including 2 documentation tests.
- `cargo build --locked --release`: exit 0.
- `git diff --check`: exit 0.
Base commit: `4b53aad20cff6cec5d23f779702b58f0de599d44`.
Dirty Rust input `src/tui/render.rs` SHA256:
`ceae0bec7add49304a38f38987fdac554fc83e9d7d23695cf148f2f8404d3016`.
Native release artifact `target/release/wireguard-admin` SHA256:
`a16214c426b0cc9b29ec03124e965352e4f64f07c82d3ac23e4caf8e45d6273b`.
`PLANS.md` was also dirty with this maintenance record. The M16 private-systemd
validation gap remains separate and unverified; no Alpine or VM suite was rerun.
Very narrow layouts intentionally show only priority hints plus the Help
affordance; additional shortcuts remain available through the existing Help
screen. A physical-terminal visual check was not performed.