Implement adaptive client list

This commit is contained in:
2026-10-28 23:12:22 +02:00
parent d49721ff8e
commit 4960c65f65
8 changed files with 1794 additions and 256 deletions
+10 -7
View File
@@ -2,8 +2,11 @@
Recorded 2026-10-27T22:42:48+02:00 on the native
`x86_64-unknown-linux-gnu` development host. This is **implementation and
synthetic evidence, not systemd acceptance**. The milestone remains blocked on
private-peer behavioral and disposable-VM checks.
synthetic evidence, not systemd acceptance**. On 2026-10-28, the user reported a
successful manual check and explicitly directed that M16 be considered done.
The check's environment, commands, source identity, and transport coverage were
not supplied. PLANS.md records user-directed acceptance; this report does not
claim a passing disposable-VM run or independently close M16-R2.
## Source and protocol basis
@@ -65,8 +68,8 @@ Native release artifact `target/release/wireguard-admin` SHA256:
The prior disposable Debian VM was stopped before guest installation and has
no verified guest marker or running systemd acceptance environment, per
[`VM_ACCEPTANCE.md`](../VM_ACCEPTANCE.md). No private-socket or system-bus
restart was run in a disposable VM. Neither transport is accepted against real
systemd yet; production must not be used to fill this gap. The next check is
to finish and authorize a disposable VM with synthetic WireGuard configuration,
then run both transport paths and verify job completion plus full runtime
matching, with exact source/artifact identity.
restart was run in a disposable VM as part of the recorded checks. This gap
remains despite the later user-directed acceptance. A future independent check
would use a disposable VM with synthetic WireGuard configuration to cover both
transport paths, job completion, and full runtime matching, with exact
source/artifact identity. Production must not be used to fill the gap.
+77
View File
@@ -0,0 +1,77 @@
# Milestone 17 evidence: adaptive client list and state presentation
Recorded 2026-10-28T23:09:37+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:
`d49721ff8e6a40c1016e59b2648a6a622f84a4c4`. This is a dirty working tree;
the M17 Rust/README inputs at validation have SHA256:
| Input | SHA256 |
| --- | --- |
| `src/tui/render.rs` | `19fad8a9edfa571060c94fe34a1a484369f3601a3ffc52148081c935be2404f2` |
| `src/tui/state.rs` | `b533427001c67fb2c1d8527fb8a2cc1d6bd7e824be8985fd8b773b09a144d0f9` |
| `src/tui/terminal.rs` | `591ad7498fb4bb8cb825dfba0bad26e28bd8432ef26d5527950863a7534689f6` |
| `tests/tui_workflow.rs` | `f57d058d8538d5d1afdab7ddb7e88d23259804a9927ee4ac52982903dc1a6928` |
| `README.md` | `7c5eb0b58e81aaecbddae230211099db59560dfc5fe30991e7022d841d6b04a8` |
`PLANS.md` and `docs/evidence/milestone-16.md` are also dirty documentation
inputs. The latter records user-directed M16 acceptance and an undocumented
manual check; it is not M17 test evidence. No M17 dependency manifest or
application adapter changed. The release binary
`target/release/wireguard-admin` has SHA256
`336103d76bb78225735411a76abdbf3f6d5dc49dd6ce0b96537dfd3dea46a578`.
`file` identified an x86-64 dynamically linked GNU/Linux PIE.
## Implementation and acceptance mapping
- M17-A1: the table allocates the actual list-pane width across wide, medium
and compact columns. Synthetic buffers cover growing names, Latin/Cyrillic/
wide-character alignment, separate host IPv4/IPv6 cells, IPv4-only peers,
and route markers. Full routes and public identity remain in details.
- M17-A2/A3: shared visible records and selection drive the list, persistent
pane and Enter details. Synthetic state/navigation/buffer checks cover first
selection, duplicate and malformed peers, draft removals, document-only
issues, refresh, dimension breakpoints and stable geometry. A loading-state
regression covers side and stacked panes. Breakpoints use the content area:
side-by-side at 140×13 or larger, stacked at 80×17 or larger (eight rows for
details), compact summary at 60×12 or larger, otherwise list-only. These
dimensions are independent of selected content and action availability.
- M17-A4/A5: explicit Draft, Saved and Applied labels distinguish pending
drafts from saved peers and runtime verification. The saved peer count comes
from installed server bytes and includes nonmanaged peers; managed counts
remain separately scoped. Tests cover state combinations, issue versus
capability-limit counts, complete details and available observations.
- M17-A6: focused TUI/workflow checks include navigation, forms, footer, QR and
synthetic PTY lifecycle coverage. No Commit/restore/restart behavior changed.
## Review and checks
One GPT-6-Luna/high implementer completed M17.1, M17.2 and M17.3 in order.
A separate fresh GPT-6-Luna/high read-only reviewer inspected the integrated
diff and ran `cargo test --locked tui::` (70 passed) and
`cargo test --locked --test tui_workflow` (8 passed). It found M17-R1 (P2):
loading list and persistent detail messages conflicted. A separate
GPT-6-Luna/high repairer fixed the pane and added a 140×20/80×24 buffer test;
the reviewer rechecked and closed R1 (`cargo test --locked tui::render::tests`:
39 passed). The integrated Clippy gate then found M17-R2 (P2), two redundant
closures. The repairer replaced them with function items; the reviewer checked
semantics, reran exact Clippy, and closed R2. No actionable review finding
remains.
Final integrated checks on the input hashes above:
| Command | Result |
| --- | --- |
| `cargo fmt --all -- --check` | exit 0 |
| `cargo test --locked tui::` | 71 passed, 0 failed |
| `cargo test --locked --test tui_workflow` | 8 passed, 0 failed; includes synthetic PTY smoke |
| `cargo clippy --locked --all-targets -- -D warnings` | exit 0 after R2 repair |
| `cargo test --locked` | 384 passed, 0 failed, 3 explicitly ignored; 2 doctests passed |
| `cargo build --locked --release` | exit 0; binary hash above |
| `git diff --check` | exit 0 |
All tests used synthetic configuration and keys. The PTY smoke checks emitted
terminal control behavior through an isolated `script` session; it is not a
manual terminal-emulator usability test. Alpine Testcontainers, disposable-VM
systemd paths, live WireGuard, production configuration, and phone QR scanning
were not run for this presentation milestone. Those checks are not claimed by
the fixture results. No host service was restarted and no Git commit was made.