# Rust appearance consumer: source and host checkpoint The opt-in Rust shell now binds the private protocol-1 appearance socket beside its reveal socket. It accepts a validated immutable generation, changes the live drawer's `launcher.background` and `menu.background` brushes and `menu.text`, and invalidates the icon cache for the generation's icon theme. Shade and Settings backgrounds use their corresponding authored sections when present. Missing tokens retain the existing legible fallback. A host pixel fixture confirms an authored red launcher brush reaches the default live `RendererCache`, rather than only the export function. Prepare stages the receiver snapshot. For commit or rollback while a panel is mapped, the client waits for a released frame slot, renders and attaches a new SHM buffer, flushes Wayland, then acknowledges the exact phase/generation. Other draws defer while this transaction waits, so a frame callback cannot consume its released slot first. If the panel is idle, ACK means in-memory adoption for its next map, not presentation. A failed draw/flush restores the prior in-memory render snapshot and rejects the transaction. The wait is bounded to 1.4 seconds within the receiver's two-second peer deadline. The appearance socket is separate from the compositor's continuous reveal socket, and no per-motion theme work is added. Selected background media are currently rejected during prepare. The persistent wallpaper layer, decoded still fit/crop, video handling, complete authored roles, and paired compositor theme transaction remain open. This checkpoint does not claim an Omarchy theme is visible on the board. ```sh cargo fmt --manifest-path nix/rust-shell-client/Cargo.toml --check cargo test --manifest-path nix/rust-shell-client/Cargo.toml --locked cargo clippy --manifest-path nix/rust-shell-client/Cargo.toml --locked --all-targets -- -D warnings git diff --check ``` Host checks passed on 2026-09-24 UTC: 21 library tests, 3 route/launch tests, 8 appearance receiver tests, formatting and strict clippy. The exact source commit `c78c9f2198fdad6aa9e1c9a2e27eabec20d5b49b` then passed the RISC-V target build: ```sh nix build "git+file://$PWD?rev=c78c9f2198fdad6aa9e1c9a2e27eabec20d5b49b#handheld-shell-rust" --max-jobs 1 --cores 4 --no-link --print-out-paths ``` Derivation `/nix/store/x2w7mzbq0wkm3gqa67452pgr9gzxxz25-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0.drv` produced `/nix/store/ijla8rh8s7dqknhbhw9g7yvxpz83zfa6-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0`. The paired compositor theme transaction and physical visual proof remain open.