Theme preparation admission closeout — 2026-10-10
Task 13.3’s two named host commands pass: seven preparation cases and one row-motion test covering held, coasting and settling states separately for each of the two real production carousels. The host theme-UI compatibility suite passes 28 tests and all 22 binary route tests pass. Provenance records exact commands, source revision, log hashes and filesystem observation timestamps. These are source/host and cross-build proofs, not board proof.
CARGO_TARGET_DIR=/home/jadams/tmp/k230-admission-host-target \
cargo test --offline --manifest-path nix/rust-shell-client/Cargo.toml --lib prepare_ahead
CARGO_TARGET_DIR=/home/jadams/tmp/k230-admission-host-target \
cargo test --offline --manifest-path nix/rust-shell-client/Cargo.toml \
--bin k230-shell-rust speculative_theme_motion
Preparation output, row-motion output, theme-UI compatibility, route compatibility.
Existing implementation and remaining priority correction
Commit f4bf213eccfe84102c584460f24a3a44cc494e95 already added
poll_prepare_ahead_at_rest and called it with the production both-row motion
decision. The September 28 audit predates that implementation; its assertion
that task 13.3 has no source or targets is historical, not the current state.
That implementation preserves the neighbor queue and running request ID during motion, resets obsolete center dwell, blocks a successor even when a reply finishes during motion, and preserves foreground-request protection. Existing host cases verify those behaviors, no-center neighbor fallback and reply identity. The binary regression now feeds the actual held/coasting/settling decision for each row into the production admission API and proves eligibility resumes once the motion finishes. The other row stays at rest in each of those six cases.
The old source could nevertheless admit a queued neighbor during a newly settled center’s dwell, delaying the center and using the single prepared slot first. The new test-only old-source control reproduces this: actual failure, source/command identity. The control uses unchanged base product logic with only the new regression test added; it is not a frozen product build. The same test passes after the fix.
The free slot now waits through the latest valid center’s dwell before optional neighbors resume. An active or absent center still permits the established neighbor fallback. No running warm-up is canceled, and explicit Preview/Activate keeps priority. The regression preserves the two-item queue across 200 motion polls and direction changes, verifies dwell restarts for a new settled center, checks single-flight behavior, then permits a neighbor after the center reply. No pointer publication, appearance acknowledgement or motion physics changed.
Cross-build and retention
The guarded component build passes and produces:
/nix/store/x69mg9sdfbk6m3m25gi80f2s083c7nwk-k230-shell-rust-riscv64-unknown-linux-gnu-0.1.0
The copied source, Cargo manifest and lock match committed source: input comparison. This task changes neither the manifest nor the lock. The initial plan requires 53 derivations: the Rust client, its vendor aggregation and missing Cargo source-fetch/unpack outputs. It does not rebuild the graphics stack, kernel or image. Nix’s Rust package compiles its locked Rust dependencies inside the changed package build.
The selected vendor output is identical to that used by the previous live-fixture
Rust package but was outside the prior 10,266-path retention farm. This proves a
coverage gap, not a particular historical GC deletion. The verified receipt
extends the prior farm to 10,357 currently valid paths,
including the selected Rust vendor sources, package output and derivation inputs.
Actual root queries protect both the client and vendor output. The durable root
is ~/.local/state/tdisplay-k230/retained-builds/theme-admission-2026-10-10/build-closure;
the separate rust-client root also retains the built package. Prior roots and
global GC policy are unchanged; unrealized outputs are not built for pinning.
Ownership and remaining gates
Worktree /home/jadams/tmp/k230-theme-admission-closeout-2026-10-10, branch
closeout/theme-admission-2026-10-10, base 9c8f2321, source 91943f89587da3f1869c905c25f2039b7c17d370.
Owned paths: nix/rust-shell-client/src/theme_ui.rs, src/main.rs in that package,
this evidence directory, the theme-swap task record and its work-board override.
The temporary /tmp/k230-nix-build.lock build reservation is released.
No board or serial reservation was taken; the new package is not installed.
The theme-swap proposal is 65/81 complete and remains open. Task 13.3’s source
scheduling gate is complete; the matched workload harness, cost attribution and
three-pair physical comparison remain tasks 13.1, 13.2 and 13.4. The latter’s
planned operator command stays python3 /run/theme-picker-profile.py capture --plan /run/picker-plan.json --output /run/picker-profile.json after that harness
exists, with a reserved board and exact baseline/candidate identities. That tool
is still a planned interface here. The source fix does not substitute for that
trial, install a new board package, quantify latency or claim real-finger feel.
Existing user acceptance is preserved separately; no repeat confirmation is asked.