evidence · 4.5 KiB

README.md

Committed at docs/evidence/launcher-gestures/integrated-injected/README.md. This is what grounds the requirements that cite it.

Open raw source

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 quantityMedianp95Maximum
Release to final-frame submission, elapsed138 ms151 ms163 ms
Process CPU since release62.060 ms62.878 ms69.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.