evidence · 8.7 KiB

README.md

Committed at docs/evidence/coherent-shell/navigation-aid-2026-10-10/README.md. This is what grounds the requirements that cite it.

Open raw source

Deliberately opened Help and navigation aid

Task 1.5 of the-handheld-presents-a-coherent-shell; source starts from 6adac5467ce152bbc7b043dac8067c6e67f3b005, branch closeout/coherent-integration-2026-10-10, worktree /home/jadams/tmp/k230-coherent-closeout-2026-10-10.

All Apps now has a real Help target beside Search. Help explains the existing bottom Home/Overview, drawer, top shade, panel-close and keyboard routes. Its Navigation buttons action deliberately opens large labeled Home, All Apps, Notifications and Settings controls. Return to Help closes the aid; Return to All Apps closes Help. The aid resets on route change/unmap and creates no persistent bar or saved preference. The separate coherentShell = false Nix session still selects the old launcher as rollback; the ordinary image’s coherent selection was already changed by earlier work.

Only userspace Rust changes. The smaller search field and Help target share paint/hit geometry. The app grid, filtering, scroll and compositor live-card paths retain their established geometry. Home uses the existing card_shell home request on a worker, with a two-second deadline and visible pending/failure feedback. A stale reply cannot close another route after Help has been left. The other buttons use existing shell routes; no universal Back key is sent to an app. Settings opens its controls page rather than a retained theme subpage.

Host proof

Host tests record the full task group’s command:

CARGO_TARGET_DIR=/home/jadams/tmp/k230-admission-host-target \
  cargo test --offline --locked --manifest-path nix/rust-shell-client/Cargo.toml

The new tests exercise deliberate opt-in, matched route targets at 300×600, 568×1232, 1920×1080 and 1080×1920, no Help/search/app-grid overlap, cancelled movement/cross-button/nonfinite input, and successful/failed/timed-out Home requests using an actual worker command fixture. The full existing suite also covers released buffers, routes, cancellation, search, theme transactions, background decode and pixel references. See proof.json for totals, input identities and hashes. The prior drawer reference changed intentionally because Help is new; its fresh reviewed render is copied to docs/evidence/shell-responsive/drawer-568x1232.png. Home, wallpaper and Settings references pass unchanged.

Dark Help, light Help, dark navigation buttons, light navigation buttons, dark drawer, light drawer, dark HDMI buttons and light HDMI buttons are production host Cairo/Pango renders. They have no Wayland/compositor, QEMU, physical panel, real finger, latency or installation provenance. The app names are bounded nonsecret synthetic fixtures; appearances are the pinned Catppuccin dark/light generations, validated with the production receiver.

Reproduction (preparation only; no activation):

python3 tools/theme_activate.py catppuccin --prepare-only \
  --state-root /home/jadams/tmp/k230-help-appearance \
  --builtins /nix/store/9c1i2zfliab82a80iv87929qkngn1ca0-handheld-theme-default-28ceaae7/share/omarchy/themes \
  --background backgrounds/2-waves.webp
python3 tools/theme_activate.py catppuccin-latte --prepare-only \
  --state-root /home/jadams/tmp/k230-help-appearance \
  --builtins /nix/store/9c1i2zfliab82a80iv87929qkngn1ca0-handheld-theme-default-28ceaae7/share/omarchy/themes \
  --background backgrounds/1-color-fade.webp
CARGO_TARGET_DIR=/home/jadams/tmp/k230-admission-host-target \
XDG_DATA_DIRS=/nix/store/in3nc21zx02xiz2rdp5bpq36719x3axd-handheld-theme-icons-25.10.3/share \
  cargo run --offline --locked --manifest-path nix/rust-shell-client/Cargo.toml \
  --example render_navigation_aid -- docs/evidence/coherent-shell/navigation-aid-2026-10-10 \
  /home/jadams/tmp/k230-help-appearance/generations/dacf0af8c897e6c51fe922de \
  /home/jadams/tmp/k230-help-appearance/generations/c448496d80fec3ae02a892bd

The generation paths/hashes and final render command are also recorded in proof.json and render.log.

Build and remaining physical gate

Source 9e4515ed32cc849bfcc56dbe60d02e877bee75a7 cross-build passed, selecting the actual coherent configuration package set. Package build built exactly one Rust derivation and fetched no dependencies. Target: /nix/store/z4j8bc7iwz9m7pap376zy0j0z16295lr-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0/bin/k230-shell-rust: ELF 64-bit LSB pie executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /nix/store/syg6xw4x296w82267qnvrd3nn0cp6j31-glibc-riscv64-unknown-linux-gnu-2.42-84/lib/ld-linux-riscv64-lp64d.so.1, for GNU/Linux 4.15.0, not stripped. Output: /nix/store/z4j8bc7iwz9m7pap376zy0j0z16295lr-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0. Repeat build plan exits 0 with zero builds and zero fetches. No kernel, compositor, theme helper or image was rebuilt.

flock -n /tmp/k230-nix-build.lock nix build --impure --expr \
  'let f = builtins.getFlake "git+file:///mnt/MediaVolume/home/jadams/src/gitlab.daringbit.com/josh/tdisplay-k230?rev=9e4515ed32cc849bfcc56dbe60d02e877bee75a7"; p = f.nixosConfigurations.k230-coherent-shell.pkgs; in p.callPackage (f.outPath + "/nix/rust-shell-client") {}' \
  --out-link /home/jadams/.local/state/tdisplay-k230/retained-builds/coherent-help-2026-10-10/candidate \
  --print-out-paths --max-jobs 1 --cores 2

Retention records 10,405 valid store paths, adding 3 to the prior verified Foot farm. The durable candidate and build-closure GC roots preserve this output, recursive sources and currently realized declared dependency outputs. The link-farm uses explicit builtins.storePath references; every retained path passed nix-store --check-validity, and this output’s actual GC roots include the new farm. Global GC policy remains unchanged (keep-outputs=false, keep-derivations=true). Source edits still invalidate the Rust package and can recompile its release crates; rooting dependency outputs cannot preserve Cargo intermediates inside a changed derivation. The exact enumeration script and store-reference recipe are preserved; their paths describe this host’s retained build directory. The graph read and retention commands were (enumeration/root creation ran after the client build completed):

nix derivation show --recursive /nix/store/fk3w6gym9vd1fnybdp3ppmiqqpsjf03m-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0.drv \
  > /home/jadams/tmp/k230-help-derivations.json
python3 /home/jadams/tmp/k230-help-retain.py
flock -n /tmp/k230-nix-build.lock nix build --impure --expr \
  'import /home/jadams/.local/state/tdisplay-k230/retained-builds/coherent-help-2026-10-10/retain.nix' \
  --out-link /home/jadams/.local/state/tdisplay-k230/retained-builds/coherent-help-2026-10-10/build-closure \
  --print-out-paths --max-jobs 1 --cores 2

No board or serial port was reserved or used for this work. A package build does not prove installation or discovery. Task 5.3 remains unchecked: after coordinated candidate deployment, an operator must open All Apps → Help → Navigation buttons, use the named routes and return, and record the actual touch/discovery outcomes plus exact running artifact:

flock /tmp/k230-board.lock ./tools/console.py /dev/ttyACM0 --wait=3 \
  'readlink -f /run/current-system; pgrep -a k230-shell-rust; systemctl is-active shell shell-ui'
python3 tools/capture-feature.py coherent-gestures --provenance real-touch \
  --duration 60 --description 'Gesture ownership and drawer discovery on glass' \
  --output-dir docs/evidence/coherent-gestures

The operator must reserve the board for both commands and inspect camera plus console evidence separately. Physical discovery/readability remains UNVERIFIED; earlier general app-navigation acceptance does not identify this new candidate.

Local site budget failure and owner

Coordinator /root owns the failed host site build: python3 scripts/build_site.py against committed source 70e3fecdbf94a14590a7a16aab92103ceb9d5565, exit 2, 680 pages, 18,138,424 bytes and 148.33 seconds against the unchanged 32 MiB / 120 second budgets. Content, inventory and built-site assertions passed; only elapsed time failed. Several unrelated Rust builds/emulators were concurrently active on this host; this is an observation, not a proved attribution of the overrun. No other operator’s processes were stopped. The implementation and cross-build gate remain complete. The coordinator must inspect the resulting CI site build and exact published revision after landing; a local artifact is not Pages deployment proof, and the elapsed-time budget was not increased or bypassed.