evidence · 6.2 KiB

README.md

Committed at docs/evidence/home-screen/navigation/README.md. This is what grounds the requirements that cite it.

Open raw source

Overview → Home → App drawer

The user’s navigation sequence is implemented in source f39cb7eb: start an upward swipe in the bottom navigation area of the windows list to reveal the pinned Home screen, then make a separate upward bottom-edge swipe to open the app drawer. Running windows keep their IDs and workspace placement. A swipe on an individual card still uses the existing app-close gesture.

The compositor translates Overview one pixel per held input pixel, then eases to Home or returns to Overview after a cancelled swipe. Home hides app scene groups; it does not park apps in a scratchpad, move workspaces or close them. App focus restores those groups. Home’s app lookup now recognizes Sway’s floating_con type and the StartupWMClass declared by our themed terminal entries, so tapping an icon can return to its existing window.

Commands

python3 -m unittest tests.test_card_shell_route tests.test_card_shell_state
cargo test --offline --manifest-path nix/rust-shell-client/Cargo.toml --lib home_screen
cargo test --offline --manifest-path nix/rust-shell-client/Cargo.toml --bin k230-shell-rust running_con_id_honors_startup_class_for_floating_apps
nix build .#nixosConfigurations.k230-coherent-shell.config.system.build.toplevel --cores 6 --no-link

The host checks passed: 37 route/policy checks, 20 Rust Home tests, and the startup-class regression. The separate real-compositor Home-layer self-heal regression also passed. tests/rust_home_screen_qemu.py --client <native-probe> adds navigation to the existing paired Home fixture; all 24 checks passed with the exact candidate RISC-V compositor and Rust executables. qemu-result.json records the checks and identities; qemu-command.json records the arguments. The test covers the new navigation, held displacement, short/reversed/multitouch cancellation, existing/new app focus, and the earlier paging, pinning, rearranging and helper-restart behavior.

Evidence limits

Injected QEMU input, injected input on the physical board, and real-finger acceptance are separate evidence classes. The broad Home readability, long-press and real-glass acceptance task 8.1 remains open.

Physical-board navigation

The guarded trial passed on 2026-09-27 UTC. result.json records all three window IDs before and after, seven passed interaction observations, and a 160.2-pixel compositor displacement for a requested 160-pixel held drag. The captures were reviewed and contain only the navigation fixture and shell.

Pinned Home reached from Overview Window list before the Home swipe App drawer reached by a separate swipe from Home The existing Terminal returned through its Home icon

board-navigation-check.py is the exact board workload. Stage it beside ../../theme-picker/finger-tracking/k230-picker-baseline.py, named touch.py, in /run/k230-home-navigation-install-control/; create the verified virtual touchscreen using evemu-device, then run the workload as root with arguments SYSTEM PROTECTED_UPLOAD_URL. The trial used the Python path in runtime.json under a systemd Type=exec unit bounded to 120 seconds. The upload endpoint and console transcripts stay in protected runtime files and are not repository assets. It opened two clean Foot fixture windows, preserved the existing terminal, and left Home visible after the round trip. No existing app was closed.

The candidate is /nix/store/514nic5my8069ddwmn4b5mrnm73kqqz8-nixos-system-nixos-26.11.20260919.20b1ddd. runtime.json records its actual Sway/Rust executables and four healthy shell services; manifest.json records the source, previous system, transfer size and boot-bundle checks. The kernel and initrd payload remain unchanged.

The previous background-picker image was first normally rebooted and verified as both running and booted before this trial. Earlier QEMU attempts uncovered the floating-window/desktop-ID lookup defect and a first-buffer setup race; those failures were corrected before the final paired run. An overlapping serial status query failed after the successful trial; it is not part of the proof, and subsequent console operations were serialized.

Persistent installation

The qualified image is running and selected in the system profile and boot bundle. persist-result.json records SUCCESS from the unchanged guarded ../../theme-picker/finger-tracking/persist-userspace.sh helper; the unique transaction is /var/lib/k230/home-navigation-persist-20260927/home-navigation-transaction. persist-verified.json independently confirms service exit 0, the durable success record, candidate boot hashes, unchanged firmware/selectors, the installed system profile and sync. No full-card readback was performed. A normal reboot into this new image has not been performed; this boot began with the previous image. The board is left on Home for real-finger testing.

Change ownership

Worktree k230-home-navigation, branch fix/home-navigation, base e37dc2243afb38014663fd8c9ed73a03d27f319c; implementation f39cb7eb. Owned paths are the card-shell adapter/header/Sway patch, Rust Home app lookup, focused route/Home tests, this Home OpenSpec change, this evidence directory, and the screenshot inventory. The single board/serial reservation covers this trial and installation only. The remaining acceptance gate is task 8.1’s physical-finger/readability review; this change is not archived.

Publication and handoff

Source and evidence landed on master at 04eefdbf. Pages run 36300532436 passed build and deployment. The published evidence page and work dashboard were fetched successfully and both contain the new native captures. The local site build and binary inventory passed. The injected input service and protected transfer server are stopped; the board reservation is released. Final observation: four shell services active, zero failed units, candidate running and selected. Only the wider task 8.1 acceptance and a normal reboot into this newly selected image remain unperformed; no source review, merge or persistent install is pending.