Add aligned users table
This commit is contained in:
@@ -3465,12 +3465,90 @@ HEAD to `18f28ee` while M11.1 was underway; the review covered committed and
|
||||
uncommitted M11 inputs. This team created no commit. No Alpine, VM or
|
||||
production behavior is claimed. Stop after this milestone.
|
||||
|
||||
### Milestone 12 — Aligned, responsive client table
|
||||
|
||||
Status: accepted (2026-10-26T21:39:45Z). M11 is accepted; M9 remains
|
||||
retired and unaccepted. The user requested this scoped presentation change.
|
||||
|
||||
#### Outcome and scope
|
||||
|
||||
Render client records with Ratatui's native `Table` and explicit column
|
||||
constraints. Show `State`, `Name`, `Public key`, `Mode`, and `Allowed IPs`
|
||||
headers when width permits. Keep columns aligned across short/long and Unicode
|
||||
aliases, supported and inspection-only peers, and all draft states. Truncate
|
||||
predictably by terminal cell width. At narrow widths prioritize State and Name,
|
||||
then omit or shrink secondary columns while preserving Enter access to full
|
||||
peer details. Retain diagnostics, document-level issue rows, draft-removal
|
||||
information, selected-row highlight, keyboard navigation, and the M10 bottom
|
||||
shortcut panel. This milestone changes rendering only; parser, projection,
|
||||
validation, persistence, allocation, restart and VPN behavior are unchanged.
|
||||
|
||||
#### Context and steps
|
||||
|
||||
`src/tui/render.rs::render_list` currently builds variable-length `ListItem`
|
||||
strings, so columns drift with alias/state length. `UiState` and
|
||||
`src/tui/terminal.rs` select real peers by `peer_index`; draft-removal and
|
||||
document-issue rows are appended after peer rows and are not peer selections.
|
||||
Keep that row order and mapping when replacing the widget with `Table`.
|
||||
`detail_lines` already retains full peer public key, alias, routes and issues.
|
||||
The list must continue escaping untrusted display text. Use the existing
|
||||
approved `ratatui` dependency and its terminal-width APIs; do not add a direct
|
||||
Unicode-width crate or literal tab delimiters.
|
||||
|
||||
| Task | Owner | Scope and expected result | State |
|
||||
| --- | --- | --- | --- |
|
||||
| M12.1 | implementer | Replace list rendering with responsive Ratatui Table, preserve peer selection mapping, state/diagnostic information and footer; add focused mixed-width/Unicode/long-route/empty/narrow tests. | complete: render 20/20, terminal 8/8, TUI workflow 6/6 on final integrated source |
|
||||
| M12.2 | reviewer / repairer | Fresh independent review of layout, truncation, details access, draft/document rows and navigation; repair and re-review actionable findings. | complete: R1–R4 repaired and independently re-reviewed closed; no remaining actionable finding |
|
||||
| M12.3 | coordinator | Verify integrated files, run focused and Rust completion gates, record evidence and accept only if criteria pass. | complete: all Rust completion gates passed; source fingerprints/results in [M12 evidence](docs/evidence/milestone-12.md) |
|
||||
|
||||
#### Acceptance and validation
|
||||
|
||||
- [x] M12-A1: native Table has the five requested headers at ordinary width;
|
||||
row columns align across mixed alias lengths, states, duplicate aliases,
|
||||
supported and inspection-only peers, with no literal tabs.
|
||||
- [x] M12-A2: Unicode aliases and long values truncate at display-cell
|
||||
boundaries without corrupting adjacent columns; full peer alias, public key,
|
||||
routes and diagnostic explanations remain in details.
|
||||
- [x] M12-A3: 120×30, 80×24, 40×8, 34×8 and below-minimum layouts retain
|
||||
visible State/Name at supported sizes, adapt or omit secondary columns,
|
||||
preserve the M10 footer and readable resize fallback.
|
||||
- [x] M12-A4: Up/Down highlight and Enter-to-details stay tied to the selected
|
||||
peer (including unsupported/malformed peers), without enabling mutation;
|
||||
empty lists, draft additions/removals and document issues remain readable
|
||||
and do not disturb selection alignment.
|
||||
- [x] M12-A5: focused synthetic render/navigation tests and applicable Rust
|
||||
completion gates pass; independent review closes actionable findings.
|
||||
|
||||
Planned checks: `cargo test --locked tui::render`,
|
||||
`cargo test --locked tui::terminal`, `cargo test --locked --test tui_workflow`,
|
||||
`cargo fmt --all -- --check`, `cargo clippy --locked --all-targets -- -D
|
||||
warnings`, `cargo test --locked`, `cargo build --locked --release`, and
|
||||
`git diff --check`. Synthetic Ratatui/PTY evidence only; no Alpine, VM,
|
||||
production, or live VPN checks are required for this presentation change.
|
||||
|
||||
#### Outcome
|
||||
|
||||
Accepted for scoped TUI presentation. **M12-R1 (P2, closed):** compact bordered table hid all peers;
|
||||
repair uses a borderless compact table with a visible selected row and footer.
|
||||
**M12-R2 (P2, closed):** empty/document-only views falsely highlighted row
|
||||
zero; selection is now `None`. **M12-R3 (P2, closed):** five columns omitted
|
||||
the two-cell marker budget; repair and buffer assertions cover the right edge.
|
||||
Independent re-review closed R1–R3. **M12-R4 (P2, closed):** at widths 72–78 the
|
||||
five-column threshold activated before the `Allowed IPs` header fit. Repair
|
||||
uses the full-header minimum width and buffer tests at 72/78/79/80;
|
||||
independent re-review closed R4 with no remaining finding. Final focused tests,
|
||||
format, Clippy, locked full suite, release build and diff check passed on the
|
||||
source in [M12 evidence](docs/evidence/milestone-12.md). Synthetic UI/PTY
|
||||
evidence does not establish physical terminal, Alpine or systemd behavior.
|
||||
Stop after this milestone; do not resume VM work, commit or deploy.
|
||||
|
||||
## 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 retired by user direction and unaccepted. Its real systemd/D-Bus checks remain unverified and are not a prerequisite to M10.
|
||||
- Milestone 10 is accepted: the styled keyboard quick reference passed independent review, focused synthetic/PTY checks and Rust completion gates.
|
||||
- Milestone 11 is accepted for valid but unsupported AllowedIPs route presentation; focused and full Rust gates and independent re-review passed. Real systemd/D-Bus and IPv6 behavior remain unverified.
|
||||
- Milestone 12 is accepted: native responsive client table, independent R4 closure and all scoped Rust gates passed; source and synthetic UI/PTY evidence are linked above.
|
||||
- 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.
|
||||
@@ -3483,7 +3561,7 @@ production behavior is claimed. Stop after this milestone.
|
||||
|
||||
- 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 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: stop after M11 and await user direction. Do not restart the VM, access production, commit, or deploy.
|
||||
- Next action: stop after M12 and await user direction. Do not restart the VM, access production, commit, or deploy.
|
||||
|
||||
## Plan maintenance
|
||||
|
||||
|
||||
Reference in New Issue
Block a user