Integrated-image injected gesture matrix
Captured 2026-09-23 at 04:27:26 UTC on the physical K230 board. These are injected touch and native compositor captures, not real-finger evidence.
Installed source and procedure
The flashed image was built from 03cbade:
/nix/store/d7r354bnsnffxnwnqblaf3raqvd15190-k230-sd-image.img.
The running system was
/nix/store/568vf3220mpvdmgjgfnz5ln0qn09934r-nixos-system-nixos-26.11.20260919.20b1ddd,
boot ID 506e9b30-5617-4ecf-9c88-95e50dd5113e.
The installed launcher binary was
/nix/store/mmc9ag2dasrpp0ph3d890yq5mqcm0pcb-k230-touch-launcher-riscv64-unknown-linux-gnu-0.1/bin/k230-touch-launcher.
The operator started that launcher as the shell user with
K230_LAUNCHER_METRICS=/run/shell/launcher-metrics.txt, PID 1099. Terminal and
Monitor were already open. evemu-device replicated the real touchscreen
controller descriptor as /dev/input/event1. The repository’s unchanged
tools/inject-tap.sh and tools/gesture-acceptance.py ran from /run using
the installed Python closure. See procedure and
the executed action list and memory snapshots.
The helper exited 0 after 20 left/right pairs, an explicit keyboard show/hide, a two-window catalog query, overview entry, and its Back button. No input was injected during the subsequent separately requested real-finger recording.
Result
The complete trace contains 197 render records and 41 settled transitions: 40 Apps transitions and one overview entry. Analysis:
python3 tools/analyze-launcher-transitions.py \
docs/evidence/launcher-gestures/integrated-injected/launcher-metrics.txt \
--expect-alternating 20
Analysis output verifies exactly 20 left/page-1 then right/page-0 pairs, with no missed or duplicate page changes. The catalog still contained the two expected windows after those swipes. A classified swipe did not launch another application.
| Measured quantity | Median | p95 | Maximum |
|---|---|---|---|
| Release to final-frame submission, elapsed | 138 ms | 151 ms | 163 ms |
| Process CPU since release | 62.060 ms | 62.878 ms | 69.644 ms |
Every settled transition was below 200 ms. At most three live Wayland buffers were recorded. The two transient animation snapshots occupied 5,343,744 bytes. That snapshot counter excludes the saved last frame, live SHM buffers, font caches, and other allocations; it is not total launcher memory.
The /proc snapshots record RSS 18,344 → 26,324 KiB and PSS
9,748 → 17,252 KiB, with the final status high-water mark 31,364 KiB.
The helper’s status JSON key contains the selected /proc/status lines;
smaps_rollup contains separately sampled RSS/PSS. These are before/after
observations, not a continuous peak or a leak diagnosis.
Native captures and limitations
These PNGs were produced by grim on this run and pulled over the serial
console. They contain the shell UI and generic test windows. Their hashes are
registered as DATA in docs/blob-inventory.md.
The transition timestamps measure CPU-side release-to-submit work, not panel scanout or optical presentation. This run measures paging with the keyboard hidden and one multi-card overview transition. The keyboard-visible screenshot alone does not measure transitions under keyboard load. Focus selection, stale/empty cases, downward exit, forced rollback and real-finger acceptance remain separate gates. No archive follows from this matrix alone.
Keyboard-visible follow-up
The same launcher PID then ran five left/right pairs with the keyboard explicitly
shown (pkill -USR2 -x wvkbd-mobintl). Each drag used the same coordinates and
250 ms settle interval. The keyboard was hidden with SIGUSR1 afterward.
Trace, analysis, and
native frame preserve this separate run. All ten
transitions alternated correctly: elapsed median 132 ms, p95/max 139 ms;
process CPU median 47.214 ms, p95/max 52.573 ms. Maximum live buffers remained
three. The smaller surface’s two snapshots occupied 3,526,144 bytes.
Before and
after RSS/PSS were unchanged at
24,548/15,929 KiB. This is a short bounded observation, not a long-term leak test.