diff --git a/README.md b/README.md index 311662c..f594cb5 100644 --- a/README.md +++ b/README.md @@ -45,12 +45,12 @@ you left. ## Hardware -| Part | What was used | Notes | +| Part | What was used | Status | | --- | --- | --- | -| Display host | LattePanda (Atom x5-Z8350, 1.9 GB) | Debian 11, i3 on X11 | -| Display host | Dell Wyse 3040 (Atom x5-Z8350, 2 GB) | ~$35 used; 8/16 GB eMMC, DP out | -| Panel | GeeekPi 9" 1280x720 3U touchscreen | ILITEK USB touch | -| Mounting | [`cad/`](cad) — 19" rack adapter | 3D-print or laser-cut aluminium | +| Display host | LattePanda (Atom x5-Z8350, 1.9 GB), Debian 11, i3 on X11 | in daily use | +| Display host | Dell Wyse 3040 (Atom x5-Z8350, 2 GB), 8/16 GB eMMC, DP out | not yet tried | +| Panel | GeeekPi 9" 1280x720 3U touchscreen, ILITEK USB touch | in daily use | +| Mounting | [`cad/`](cad) — 19" rack adapter | printed and in the rack | Any Linux box with a USB or DSI touchscreen will do. It is deliberately modest hardware: the whole point is a display that idles at a few watts. diff --git a/notes/HARDWARE-NOTES.md b/notes/HARDWARE-NOTES.md index 99db9b4..51ed882 100644 --- a/notes/HARDWARE-NOTES.md +++ b/notes/HARDWARE-NOTES.md @@ -103,3 +103,19 @@ adapter for the panel; roughly 3-4 W idle, 101x101x28 mm, VESA holes. The eMMC is why the installer checks free space before starting a build: a Rust toolchain plus a target directory is around 1.8 GB. + +## Never log out of a keyboard-less wall display + +lightdm autologin fires when a **seat starts**, not after a logout. `i3-msg exit` +therefore drops the display to the greeter and leaves it there — and the rack +panel has no keyboard, so nobody can log back in at the machine. Recovering it +needs `sudo systemctl restart lightdm` or a reboot, and the LattePanda has no +passwordless sudo. + +So: **`i3-msg exit` does not test the autostart, it only strands the box.** The +only honest test of the boot path is an actual reboot. + +Related trap when handing over a root command: `ssh host 'sudo …'` allocates no +TTY, so sudo has nowhere to prompt and fails. Use `ssh -t`. Chaining with `&&` +then swallows the rest of the line, which is how a recovery command silently did +nothing at all. Use `;` for recovery steps that must run regardless. diff --git a/notes/PLAN-v2.md b/notes/PLAN-v2.md index 148f384..d1ca84a 100644 --- a/notes/PLAN-v2.md +++ b/notes/PLAN-v2.md @@ -1,8 +1,11 @@ # socktop-swipe v2 — release plan -Status: **implemented**, 2026-09-09. Milestones 1-7 are done on branch `v2-rust`; -milestone 8 (the Wyse 3040 validation) is the remaining acceptance gate. Where the -built thing differs from this plan, `notes/DESIGN.md` is authoritative. +Status: **implemented and in service**, 2026-09-09. Milestones 1-7 done on branch +`v2-rust` (PR #1); the LattePanda rack display has been running v2 since, and +passed a physical swipe test and a cold boot. Milestone 8, the Wyse 3040 install +following only the README, is the remaining acceptance gate. + +Where the built thing differs from this plan, `notes/DESIGN.md` is authoritative. v1 is three POSIX shell scripts driving lisgd and tmux. It works and is running on the rack display today, but it hard-codes a single linear carousel of socktop hosts, diff --git a/notes/TODO.md b/notes/TODO.md index dd072be..dcfd806 100644 --- a/notes/TODO.md +++ b/notes/TODO.md @@ -12,13 +12,12 @@ Build there: 108 s, peak 1.1 GB of 1.9 GB, 103 MB target dir. - [ ] Remove the v1 leftovers in `/usr/local/bin` on the LattePanda -- needs root: `sudo rm -f /usr/local/bin/socktop-rack /usr/local/bin/socktop-swipe /usr/local/bin/socktop-gestures /usr/local/etc/socktop-swipe.env` -- [ ] **Physically swipe-test the LattePanda.** Everything was verified over the - control socket; the evdev path itself has only unit tests. Nobody has put a - finger on the panel against v2 yet. -- [ ] **Cold-boot test the LattePanda.** lightdm autologin fires at seat start, so - an `i3-msg exit` drops to the greeter instead of restarting the session -- - it does not exercise the boot path, and on a keyboard-less wall display it - strands the box. Test with a real reboot, not a logout. +- [x] **Physically swipe-tested 2026-09-09** -- and it found a real bug the unit + tests could not: every swipe classified as up-to-down, because a contact's + start position was captured from the X event alone and recorded Y as zero. + Fixed, with protocol-B decoding tests. QA passed on the retest. +- [x] **Cold boot verified 2026-09-09.** Autologin, i3, and `socktop-swipe run` + all come up unattended. - [ ] Add the tested-hardware table to the README once the Wyse is done. - [ ] Decide on the position indicator (`indicator: true`). Implemented; keep or cut based on whether it actually helps on the wall.