evidence · 4.3 KiB

README.md

Committed at docs/evidence/recovery-routes/touch-menu-installed-2026-10-11/README.md. This is what grounds the requirements that cite it.

Open raw source

Deploy the touch app-menu shell build, 2026-10-11

This deploys OpenSpec change the-shell-proves-recovery-states-by-touch (task 1.1, master 383d4524), ahead of task 3.1’s real-finger capture.

The board/serial lock (/tmp/k230-board.lock) protected each board action. The build ran under /tmp/k230-nix-build.lock. Times are UTC (2026-10-12 UTC is the evening of 2026-10-11 local).

The operator was at the board and said “go” to deploy. This record claims no finger observation.

IdentityValue
Bundle/nix/store/hns0czzx7j27qy4wpzbpl3104535dx51-k230-coherent-shell-boot-files
System/nix/store/7s8pl7pvdc9npqry1c6dzblk8k16x002-nixos-system-nixos-26.11.20260919.20b1ddd
Rust shell ELF/nix/store/si9vd9hhdcb8kzppfsfq9id8kaqhnmwk-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0/bin/k230-shell-rust
Kernelunchanged: /nix/store/f3rnipvbc5vqam8kwdmn3wgcl5rbz9yx-linux-riscv64-unknown-linux-gnu-7.3.0-rc5
Baselinerecovery-states install hamn9j9y…, see ../installed-2026-10-11/

Build (host)

flock -n /tmp/k230-nix-build.lock nix build .#kernelMainlineDrmShellBootFiles --out-link ~/.local/state/tdisplay-k230/retained-builds/touch-app-menu-2026-10-11/candidate --print-out-paths --max-jobs 1 --cores 4 passed; see build-tail.log. Image and initrd.uimg are byte-identical to the baseline. The out-link is the bundle’s GC root.

QEMU check of the exact installed ELF

This ELF differs from the one tested in ../touch-app-menu-qemu-2026-10-11/: that ELF was built from a staged, uncommitted tree. The same --actions-only command, run on this ELF with this bundle’s theme (4zi9dmny…-handheld-theme-default-28ceaae7), returned PASS with all 11 checks (qemu-actions/result.json). This is injected touch under headless QEMU, not board input.

Three earlier attempts timed out at the same pointer step (home_app_actions_scenario.py:105). That step comes before any touch-hold scenario. Other jobs had the host at a load average of about 45. A control run of the previously passing ELF timed out at the same line under the same load. The PASS above came after the load dropped below 16.

Board sequence

  1. Preflight (read-only). preflight-used.py matched the recovery-states install’s system, profile, kernel, executables and eight normal boot hashes, with four services active (preflight.json, boot 44fb9940-…).
  2. Stage. stage-used.py delivered a 30-path, xz-compressed closure delta over Wi-Fi on the first attempt: stage.log, transfer.json, staged-state.json, host-inspection.json.
  3. Temporary boot. tools/coherent-shell-board-boot.py --candidate … --state … --output … passed (candidate-boot.json, log). runtime-check-used.py with inspect-runtime.py and expected-runtime.json returned PASS (candidate-runtime.json) on boot 561f5e4b-….
  4. Qualification. qualification-used.py wrote and board-validated deployment-authorization.json, class operator-authorized-userspace-update, with no finger checks claimed.
  5. Install and ordinary autoboot. … --qualification deployment-authorization.json --install passed (ordinary-boot.json, log). ordinary-runtime.json is PASS on a new boot 8000d79e-…:
    • current system and normal profile are both 7s8pl7pv…;
    • the new Rust ELF is running and four services are active;
    • rollback roots are valid.

Limits

This record proves that the build was installed and boots normally. It does not prove that the touch hold opens the menu on glass, or that any recovery state reads correctly there. Both belong to task 3.1’s real-finger capture. Raw UART logs stay private on the host.