--- id: PLN-0161 ticket: system-os-cartridge-switch-orchestrator title: Validate Stress To Dummy Boy Game Switch End To End status: done created: 2026-07-05 ref_decisions: [DEC-0039] tags: [runtime, os, lifecycle, game, cartridge, architecture] --- ## Briefing DEC-0039 requires proof that `Game A -> Home -> Game B` creates a fresh Game session and does not present stale state from Game A. The minimum evidence is switching from Stress to Dummy Boy. ## Objective Add end-to-end validation for `Stress -> Home -> Dummy Boy` through the real Hub/Home flow, proving lifecycle, VM session, cartridge identity, and render ownership switch correctly. ## Dependencies - Source decision: DEC-0039. - Requires PLN-0157 target contract. - Requires PLN-0158 destructive replacement. - Requires PLN-0159 failed-switch recovery for negative path assertions. - Requires PLN-0160 Dummy Boy cartridge. ## Scope - Add firmware/system tests that drive: - launch Stress from games root; - request Home; - launch Dummy Boy; - assert Stress session is gone; - assert Dummy Boy session is active; - assert cartridge identity and render ownership belong to Dummy Boy. - Add a negative end-to-end test for broken Game B returning to Home if not already covered by PLN-0159. - Use existing test platform/render submission inspection where possible. ## Non-Goals - Do not require final launcher UX. - Do not add screenshot-based host automation unless existing test utilities make it cheap and deterministic. - Do not implement additional Game-to-Game variants beyond Stress to Dummy Boy. ## Execution Method 1. Inspect existing firmware tests in `crates/console/prometeu-firmware/src/firmware/firmware.rs`. 2. Reuse existing `TestGameRoot` or games-root helpers to expose Stress and Dummy Boy. 3. Drive input through Hub/Home selection rather than calling cartridge load directly when possible. 4. Assert lifecycle/session invariants: - old task closed/stopped; - old VM session removed; - new VM session created; - foreground owner is new Game; - current cartridge identity is Dummy Boy. 5. Assert render invariants: - render ownership epoch belongs to Dummy Boy app identity; - stale Stress submissions are not accepted after switch; - latest observable Game frame comes from Dummy Boy when render inspection is available. 6. Add a focused test for failure path if missing after PLN-0159. ## Acceptance Criteria - End-to-end test proves Stress can be replaced by Dummy Boy from Home. - Stress is not resumable after switching to Dummy Boy. - Dummy Boy receives a fresh VM session. - Cartridge identity and active render ownership are Dummy Boy after switch. - Failure path returns Home and does not restore Stress. - Tests are deterministic and do not rely on manual host interaction. ## Tests - `cargo test -p prometeu-firmware` - `cargo test -p prometeu-system` - `cargo test -p prometeu-host-desktop-winit` - `cargo clippy -p prometeu-system -p prometeu-firmware -p prometeu-host-desktop-winit --all-targets -- -D warnings` ## Affected Artifacts - `crates/console/prometeu-firmware/src/firmware/firmware.rs` - `crates/console/prometeu-system/src/services/game_library.rs` - `test-cartridges/dummy-boy` - Host/render test utilities if needed