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.
- Worktree:
/home/jadams/tmp/k230-touch-menu-deploy-2026-10-11 - Branch:
deploy/touch-app-menu-2026-10-11 - Source revision:
383d45247e6ac56a11504e4bda7837aee930a9e0 - Owned paths: this directory
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.
| Identity | Value |
|---|---|
| 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 |
| Kernel | unchanged: /nix/store/f3rnipvbc5vqam8kwdmn3wgcl5rbz9yx-linux-riscv64-unknown-linux-gnu-7.3.0-rc5 |
| Baseline | recovery-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
- 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-…). - 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.
- 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 boot561f5e4b-…. - Qualification. qualification-used.py wrote and
board-validated
deployment-authorization.json, class
operator-authorized-userspace-update, with no finger checks claimed. - Install and ordinary autoboot.
… --qualification deployment-authorization.json --installpassed (ordinary-boot.json, log). ordinary-runtime.json is PASS on a new boot8000d79e-…:- current system and normal profile are both
7s8pl7pv…; - the new Rust ELF is running and four services are active;
- rollback roots are valid.
- current system and normal profile are both
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.