mannequin GUI — look-preset switcher as a remote-controllable atom
The mannequin egui GUI (mannequin/src/gui.rs) draws a look-&-feel preset switcher (Windows/macOS/Device, light+dark) as a row of selectable_labels. Until now the click result lived only in self.look_preset — not observable, so a robot couldn't assert it. This closes that gap per the north-star (every UI atom remote-controllable + tested in code, AI-free at runtime).
What changed
MannequinGui::state_json()(LAW 6) exposes the app-level atoms as data:{ look_preset, look_name, preset_count, selected_system }.- The drivable half already existed:
set_look_preset(idx) -> String(clamped) and the facettSystemChart::select. mannequin/tests/look_preset_robot.rsdrivesset_look_presetin code and assertsstate_jsonreflects it (index round-trips,look_namematches, an out-of-range index clamps — never panics). Emits anornir-testmatrixcell (holger-mannequin/gui :: look_preset_switcher_remote_drivable) behind the additivetestmatrixfeature — reuses edda, no hand-rolled harness.
Flow
set_look_preset(i) ──▶ MannequinGui.look_preset ──▶ state_json{look_preset,look_name}
(drive, in code) │
▼
robot assert ── + ── nornir-testmatrix cell
(no display, no AI — self-driving)
Green: default cargo test -p holger-mannequin (gui_robot 3 + look_preset 1) and --features testmatrix.