evidence · 3.6 KiB

README.md

Committed at docs/evidence/coherent-shell/notification-history-motion-qemu/README.md. This is what grounds the requirements that cite it.

Open raw source

Notification history motion: paired headless QEMU

2026-09-24 host run, not a board or real-finger result. The fixture ran the cross-built Rust shade and Sway together on the 568×1232 headless Pixman output. Sway’s card_shell test-touch injected one-contact gestures. A private local fake notification broker returned twelve invented events; no real history, app identity, credential, address, or physical notification was used.

Exact candidate Rust source: 0a4144343993d07b4524af086f7ad5a91c309a7c with the preceding motion source 031e0dfc5bd03868630883b5b28fad3eccdeed2b. nix build --no-link --print-out-paths --max-jobs 1 --cores 4 .#handheld-shell-rust passed: derivation /nix/store/3l1k5s4h36nii837a1cgfnwk2dc99s5g-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0.drv, output /nix/store/z9nrjxcm3ky6yd2xvqj3846azvi6zxn6-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0. The exact Sway input was the card-shell-patched sway-unwrapped inside nix build --no-link --print-out-paths --max-jobs 1 --cores 4 .#card-shell (output /nix/store/8p7ryh0zw8fkhc74xc6v52br3rif9j7d-k230-card-shell, built from origin/master 69e23b3f sources): /nix/store/m1im24g1h70xylmia55s1qvjwa76jn9x-sway-unwrapped-riscv64-unknown-linux-gnu-1.12/bin/sway. .#shell-compositor is the unpatched Sway and rejects card_shell commands. This run does not prove the latest integrated system closure.

python3 tests/rust_notification_motion_qemu.py \
  --sway /nix/store/m1im24g1h70xylmia55s1qvjwa76jn9x-sway-unwrapped-riscv64-unknown-linux-gnu-1.12/bin/sway \
  --rust /nix/store/z9nrjxcm3ky6yd2xvqj3846azvi6zxn6-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0/bin/k230-shell-rust \
  --output /tmp/k230-notif-v9
env CARD_SHELL_SWAY=/nix/store/m1im24g1h70xylmia55s1qvjwa76jn9x-sway-unwrapped-riscv64-unknown-linux-gnu-1.12/bin/sway \
  K230_SHELL_RUST=/nix/store/z9nrjxcm3ky6yd2xvqj3846azvi6zxn6-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0/bin/k230-shell-rust \
  python3 tests/test_notification_center.py --case history-flick-stop \
    --case swipe-cancel --case swipe-dismiss --case critical-retained

Both commands passed. The named test runs the same paired client fixture after its broker critical-retention check. Pixels show the critical row fixed, horizontal row tracking and reversal, a non-jumping release-to-rest, a row swipe that returns while the same finger is still down once it turns vertical (swipe-vertical-held.png → swipe-vertical-cancel.png, no dismiss sent), two distinct post-release vertical history frames and a stationary state after tap-to-stop, and the next row occupying the dismissed row’s slot after the delayed fake broker reply. The fixture also checks that a tap on the old slot during that pending reply sends no notification action. The same fixture against the preceding 031e0dfc binary failed that last check, which is a useful negative control for the 0a414434 correction.

swipe-return.mp4 and scroll-stop.mp4 were encoded from sequential grim captures of this actual paired QEMU session at 12 presentation frames per second. The source captures are sampled unevenly by host/QEMU scheduling; the files illustrate ordering and continuity, not measured animation speed or panel cadence. The PNGs are unedited session captures. Source and Cargo tests cover bounded easing, reverse, stop, and event identity separately.

Remaining gates: native compositor and Rust integration in the next complete image, real-glass finger feel, private/critical content policy under actual apps, and the notification physical acceptance in task 5.4. No physical task is checked by this host run.