The first tap (or SHUFFLE) loads the solved board and deals it with a
Fisher-Yates pass driven by the free-running logistic-map RNG, so tap
timing picks the board. A parity latch adds one swap of cells 1 and 2
when needed, so every deal is solvable.
Tile moves and deal swaps share one cell-swap mechanism, cutting RAM
from 56.4 kB (failed to start on the Orion) to 34.6 kB (runs). Adds
deal checks to verify_logic.py --v2 and the hint label to the viewer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cells never move; each NumericSelectLabel shows the number it holds
on white and the empty cell takes the board colour via a linked
backgroundColor. Adds the V2 generator, build step (with a direct-Java
sedonac fallback), offline verifier mode (--v2) and viewer support.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- gen_aspirin.py generates aspirin.sax (playable) and aspirin_solver.sax
(30-move shuffle, then one inverse move per second) from stock kits
- build.py compiles with sedonac and packages simulator backup zips
- verify_logic.py models the Sedona scan engine to test both apps offline
- viewer/OxViewer.java shows the headless simulator's screen live over SOX
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>