Add visible styled keyboard quick reference in bottom panel

This commit is contained in:
2026-10-26 22:59:11 +02:00
parent 7d0f006601
commit e141c03c2c
3 changed files with 677 additions and 16 deletions
+110 -10
View File
@@ -118,7 +118,8 @@ Each row is a delivery milestone, not a completion claim. Expand its record befo
| 6 | Client configuration delivery and reissue lifecycle | 5 | accepted |
| 7 | Complete terminal management workflow | 6 | accepted |
| 8 | Alpine Testcontainers integration | 7; suitable disposable Docker environment | accepted |
| 9 | Real systemd acceptance and release readiness | 8; disposable systemd VM | in_progress |
| 9 | Real systemd acceptance and release readiness | 8; disposable systemd VM | retired |
| 10 | Visible styled keyboard quick reference in bottom panel | 8; existing M7 TUI | in_progress |
### Milestone 1 — Rust foundation, settings, and domain states
@@ -2977,12 +2978,14 @@ review closed all actionable findings and the host and repeated real-container
gates passed on one source fingerprint. M8-A1–A10 are satisfied within that
scope. IPv6 capability and traffic were excluded by user direction; real
systemd/D-Bus behavior remains unverified and belongs to M9.
Milestone 9 remains pending.
Milestone 9 was later retired by user direction; this historical M8 acceptance
does not establish real systemd/D-Bus behavior.
### Milestone 9 — Real systemd acceptance and release readiness
Status: paused (2026-10-26T20:30:15Z; user explicitly stopped Milestone 9 as
over-engineering). No VM acceptance result exists.
Status: retired (2026-10-26T20:52:01Z; user judged the milestone goal
unnecessary over-engineering and removed it from the development sequence).
No M9 acceptance result exists; real systemd/D-Bus behavior remains unverified.
Prerequisites: milestones 1–8 accepted; explicitly selected disposable Linux VM
with its own kernel, systemd as PID 1, system D-Bus, WireGuard and synthetic data;
compatible pinned-toolchain artifacts and a bounded management/console channel.
@@ -3261,22 +3264,119 @@ service callback is not systemd evidence. Carry forward that distinction. Initia
M9 evidence is unavailable until actual guest execution; record missing historical
inputs as unavailable rather than reconstructing them.
Next action: none. User stopped Milestone 9. Do not restart the VM or resume
M9.1–M9.3 without a new explicit request. No M9-A1–A9 check is complete.
Next action: none for M9. The user retired it and authorized development to
continue with M10. Do not restart the VM or resume M9 work without a new explicit
request. No M9-A1–A9 check is complete.
#### Outcome
Paused at the user's request. The separate disposable Debian VM
Retired at the user's request. The separate disposable Debian VM
`b14c850b-a21e-4a56-acca-785590f0c4ac` was powered off; a read-only
running-VM inventory was empty afterward. M9.1 remains incomplete, M9.2–M9.3
have not run, and M9-A1–A9 remain unchecked. Prior host gates and M9.4
documentation passed; no release acceptance or deployment is claimed.
Real IPv6 remains separately unverified by the previously accepted test scope.
### Milestone 10 — Visible styled keyboard quick reference in bottom panel
Status: in_progress (2026-10-26T20:52:01Z). The user retired M9 and explicitly
directed development to continue. M1–M8 are accepted; M9 is no longer a
prerequisite. M10 implementation, review, and validation are starting now.
#### Outcome and scope
Display discoverable keyboard controls inside the bordered panel at the very
bottom of the terminal. Users should be able to find routine operations without
opening Help. Render each hint as a distinct key label followed by its action,
with bold/color emphasis on keys and readable action text. Keep UI text in
English, following repository conventions. These are keyboard hints; adding
mouse interaction is outside this milestone.
The present `src/tui/render.rs::draw` reserves only two rows for a fully bordered
footer. Its top and bottom borders leave no interior row, hiding the existing
plain shortcut text. Repair layout as well as styling; merely recoloring that
paragraph cannot meet the requirement.
#### Context and implementation steps
| Task | Owner | Scope and expected result | State |
| --- | --- | --- | --- |
| M10.1 | implementer | Inspect `src/tui/render.rs`, `state.rs`, `forms.rs` and `terminal.rs`; derive hints from actual supported keys and screen/form state. Implement the bottom panel with sufficient interior height, styled key/action groups and width-aware packing. | needs_changes: initial 7 render tests passed; independent R1/R2 found compact/form key-hint mismatches; targeted repair pending |
| M10.2 | implementer | Cover resize, narrow/minimum terminals, list/details, forms, progress and QR disclosure with synthetic render/navigation checks. Update README shortcut guidance if needed. | pending |
| M10.3 | reviewer / repairer | Independent review of actual layout, hints versus handlers, readability, clipping and state correctness; repair and re-review actionable findings. | pending |
| M10.4 | coordinator | Run integrated gates, record source/artifact identity and actual results, maintain this plan and make the scoped acceptance decision. | pending |
List/details quick reference must include navigation (`Up/Down`, `Enter`, `Esc`
as applicable), `?` Help and `q` Exit, plus the implemented management keys:
`n` New, `r` Rename, `d` Delete, `p` Preview, `c` Commit, `x` Discard,
`R` Restart, `o` First file, `O` Reissue, `b` Backups, `B` Backup,
`s` Setup and `i` Import. Distinguish uppercase from lowercase visibly.
Context-dependent actions must be omitted or explicitly marked unavailable
when their real prerequisites are not met. Form hints must reflect their actual
Enter/Tab/Esc behavior; busy screens must not advertise blocked submissions.
QR disclosure must retain a visible hint for clearing it with Esc.
Use the existing Ratatui styles and dependencies. Select contrasting styles for
navigation, ordinary actions and destructive actions, while keeping key/action
text sufficient without color. Adapt panel height to packed rows and terminal
height, preserve usable main content, and retain the existing too-small-terminal
fallback. At narrow widths prioritize navigation and Help, showing an explicit
Help/overflow hint for omitted commands rather than silently clipping them.
Keep Help as the complete reference and preserve all existing operation semantics.
#### Acceptance and validation
- [ ] M10-A1: the lowest bordered panel has visible interior text; at 80x24 all
applicable list actions are displayed in readable packed rows.
- [ ] M10-A2: key labels are visually distinct with bold/color styling; action
text is readable, and meaning remains understandable without color.
- [ ] M10-A3: hints match actual key handlers, uppercase/lowercase and active
screen/form prerequisites; no hint implies a disabled operation can run.
- [ ] M10-A4: resizing through 120x30, 80x24, 40x8 and the supported minimum
34x8 causes no panic, overlapping borders or invisible footer text; compact
layouts retain navigation/Help and indicate omitted commands. Below-minimum
sizes retain a readable resize message.
- [ ] M10-A5: list/detail navigation, forms, progress and QR remain usable;
footer rendering exposes no secrets and performs no application mutations.
- [ ] M10-A6: focused synthetic rendering checks and all required Rust gates
pass; independent review closes actionable findings with recorded evidence.
Planned validation: `cargo test --locked tui::`,
`cargo test --locked --test tui_workflow`, then `cargo fmt --all -- --check`,
`cargo clippy --locked --all-targets -- -D warnings`, `cargo test --locked`,
`cargo build --locked --release` and `git diff --check`. Use synthetic fixtures
and Ratatui test buffers; inspect styles as well as rendered text and geometry.
No production or VM operations are needed for this presentation change. These
checks have not been run for M10; no implementation or acceptance is claimed.
#### Review, evidence and handoff
M10.1 initial implementation added visible styled footer rows and passed
`cargo test --locked tui::render` (7/7), `cargo fmt --all -- --check`, and
`git diff --check`. Independent review found **M10.1-R1 (P2, open)**: compact
rows advertise list navigation/Help during forms, QR, and pending work;
**M10.1-R2 (P2, open)**: generic form Enter is false for draft review and Tab
is missing from tabbed forms. Targeted repair/re-review is next; no acceptance
item is closed yet.
The user removed M9 as
a prerequisite without accepting its unchecked M9-A1–A9 criteria. The project
configuration specifies GPT-6-Sol/medium for the coordinator and GPT-6-Luna/high
for all four custom roles. Start with M10.1, one writer at a time. The
coordinator owns this plan; record detailed evidence in
`docs/evidence/milestone-10.md` only after actual checks exist. No new
dependencies are planned.
#### Outcome
Milestone in progress; no M10 acceptance is claimed. Next action: implement
M10.1, then independent review/repair and M10.2–M10.4 checks. M9 stays retired.
## Current progress and resume point
- Bounded TUI maintenance (2026-10-26): repaired list arrows opening client details. Up/Down now only move the highlight; Enter opens details and Esc returns. Initial navigation follows the renderer's first-row highlight. Independent review closed NAV-001 with no remaining scoped findings; validation is recorded in [navigation repair evidence](docs/evidence/tui-navigation.md). This does not advance M9 or supply VM/Alpine acceptance evidence; prior artifact identities remain historical after this Rust change.
- Milestones 1–8 are accepted; milestone 9 is paused by the user and unaccepted.
- Milestones 1–8 are accepted; milestone 9 is retired by user direction and unaccepted. Its real systemd/D-Bus checks remain unverified and are not a prerequisite to M10.
- Milestone 10 is in progress: implement the styled keyboard quick reference in the bottom bordered panel, then review and validate it.
- The approved dependency list is in [DEPENDENCIES.md](docs/DEPENDENCIES.md); container testing methodology is in [TESTING.md](docs/TESTING.md).
- Milestone 1 is expanded and the Rust environment is pinned.
- Milestone 2 delivered a lossless in-memory WireGuard configuration editor, versioned metadata, and behavioral preservation tests.
@@ -3288,8 +3388,8 @@ Real IPv6 remains separately unverified by the previously accepted test scope.
- Milestone 7 delivered the native terminal workflow, safe startup/session projection, bounded single-owner worker, setup/import/draft/Commit/restart/delivery/backup/restore forms, synthetic PTY and workflow tests, and documentation. Independent R2 closed its list-status finding; all planned coordinator gates passed. Real WireGuard and systemd remain M8/M9.
- Milestone 8 delivered reviewed opt-in Alpine Testcontainers coverage for real IPv4 WireGuard peers, application lifecycle, saved/runtime separation, restoration, import/reissue, backup failures and the real Rustix reader. Host gates and three fresh real-container runs passed on one stable source fingerprint; M8-A1–A10 accepted. Real IPv6 behavior is unverified by user-authorized scope.
- Milestone 9 is paused and unaccepted: the reviewed disposable VM preparation and guarded first start did not establish Debian/systemd acceptance. The exact VM was powered off after the user stopped work. M9.2–M9.3 were not started; M9-A1–A9 are unchecked.
- Next action: none unless the user explicitly requests more Milestone 9 work. Do not restart the VM, access production, commit, or deploy.
- Milestone 9 is retired and unaccepted: the reviewed disposable VM preparation and guarded first start did not establish Debian/systemd acceptance. The exact VM was powered off after the user stopped work. M9.2–M9.3 were not started; M9-A1–A9 are unchecked.
- Next action: execute M10.1. Do not restart the VM, access production, commit, or deploy.
## Plan maintenance