Coordinated shell scene gate 4.2 — 2026-10-10
All five named cases passed against the selected, freshly cross-built Sway component and the unchanged selected Rust shell. The actual result, command output and provenance record source revisions, executable paths and hashes, UTC timestamps and capture identities. This closes task 4.2’s QEMU integration gate only.
CARD_SHELL_SWAY=/nix/store/2djjlzlhwpcp0gqc4j4863nlh9alkf4a-sway-unwrapped-riscv64-unknown-linux-gnu-1.12/bin/sway \
CARD_SHELL_CLIENT=/nix/store/yjb89ap4bq5vb29szdzkr5sv9lpw1sz6-card-composition-probe-client-0.1/bin/card-composition-probe-client \
K230_SHELL_RUST=/nix/store/q2rxmp980f9kxi962f29333z9pbixvbk-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0/bin/k230-shell-rust \
python3 tests/test_shell_motion.py --case shrink-live --case drawer-rise \
--case shade-descend --case expand-live --case focus \
--output /home/jadams/tmp/k230-m42-final
Observations and drawer correction
- App entry captures progressively smaller live root/subsurface bounds, rounded clipping and stable held geometry. Root and child frame/callback counters advance while held; release reaches Overview without losing the app. Held card, Overview.
- Navigation uses the accepted app → Overview → pinned Home → Drawer route.
This is the already implemented route in archived
2026-10-09-the-shell-presents-a-pinned-home-screentask group 10, which supersedes the coherent design’s original Home-as-deck decision. It is not a new navigation decision. Home tracks the held upward gesture before release; running windows survive Home and Drawer. - Drawer edge positions are 1132 and 932 after 100- and 300-pixel upward movement, and 32 after settling. Its visible handle is measured in actual composed frames; Home remains stationary, the drawer covers Home, and the accepted touch stream is not replayed into the Rust overlay. 100 pixels, 300 pixels, open.
- The fixture exposed a stale Sway normalization: drawer travel used 81% of output height, while the Rust drawer now travels height minus its fixed 32-pixel inset. Sway now uses that actual travel. The unchanged final fixture with the old compositor fails at edge 1112 instead of 1132: a 100-pixel finger move produces 120-pixel drawer motion. The control log and capture retain that regression proof. The new compositor passes the same check.
- Shade tracks 100- and 300-pixel downward motion and settles at bottom 801.
Its Settings target is activated through injected touch, paints a
content-sized surface ending at 1014, preserves the underlying app rectangle,
and returns focus through the actual Done target. Only synthetic
statusrequests occur. Shade, Settings, returned app. - Card activation captures intermediate live geometry before the full app, with monotonic expansion and no missing live pixels or blank scene. Intermediate, returned app.
- Browsing a neighboring card does not activate it prematurely. Expansion commits its focus; keyboard input reaches that app. Drawer search receives text while both app key counts stay unchanged. Hiding search returns to Home; selecting the existing second app from Drawer restores its visible pixels and keyboard delivery. Typed search, restored app.
The three task-4.1 cases also pass on this new compositor:
result, output.
python3 tests/test_card_shell_reveal.py and
python3 tests/test_card_shell_route.py pass their existing host checks;
reveal log, route log.
Build and retention
The guarded component build succeeds and produces
/nix/store/gg7m8cqiixyi5mr7a3jcjz431np9a2na-k230-card-shell.
It builds 14 graphics/compositor derivations, not the kernel, image or Rust
shell. Input comparison shows identical old/new Sway
dependency derivations; only the adapter source input changes.
The retention audit records a gap in the earlier
10,218-path farm: it retained graphics runtime outputs and derivations but
omitted Cairo, HarfBuzz and Pango development outputs. With keep-outputs=false,
retaining a derivation does not protect its unreferenced sibling outputs.
The missing coverage explains why that pin could not prevent repeated builds;
the particular historical GC deletion event remains unverified.
A separate durable root at
~/.local/state/tdisplay-k230/retained-builds/coherent-motion-2026-10-10/build-closure
now explicitly retains all currently realized outputs enumerated from the prior
selected system/kernel/initrd derivations and this new component, plus the prior
farm’s paths and recursive derivation sources. Development/documentation/debug
siblings are enumerated directly from nix derivation show --recursive, rather
than assumed to follow runtime references. The audit retains the exact guarded
farm command, counts, manifest hash and actual GC-root queries. Unrealized
outputs are listed in the host-local receipt and are not built just for pinning.
The prior roots remain and global GC policy is unchanged. Changed derivations
still require builds; retention works while these durable roots remain.
Scope and remaining gates
Worktree /home/jadams/tmp/k230-coherent-closeout-2026-10-10, branch
closeout/coherent-integration-2026-10-10, task base
3b9d9ca28c192d3c9c069884c19506bb0dd4839d. Owned paths: the motion fixture,
nix/card-shell/adapter.c, this evidence directory and screenshot inventory,
the coherent task record and its work-board override. No board or serial
reservation was taken. The temporary guarded build slot is released.
Evidence class: headless Pixman captures of the actual RISC-V Sway and Rust processes under QEMU user emulation, native Wayland clients, injected wlroots touch and virtual keyboard. Settings inputs are synthetic; audio and notification services are deliberately unavailable. Captures contain synthetic fixture content. This is not a system-mode boot, physical panel/finger, latency measurement or board installation of the new compositor.
Task 4.3’s interruption cases are still unimplemented and rejected by the parser.
Accessibility and required physical/trace/polish gates remain open. The umbrella
is 28/39 complete and remains open. Board deployment and physical acceptance of
this updated compositor remain required; existing group-5/6 operator commands
are preserved, including python3 tools/capture-feature.py coherent-shell --provenance real-touch --duration 60 --description 'Gesture Home drawer shade and recovery on glass' --output-dir docs/evidence/coherent-shell from task 5.1.