Development without hardware
Mock enables reproducible tests but does not prove hardware compatibility.
Explicit simulation
createMockSdk returns sdk and controls. Controls include start, pause, resume, stop, device, hit and disconnect. Mock never creates a network socket. controls.sent exposes outgoing messages with the demonstration session_token redacted.
Validation layers
Playground tests browser mechanics. Node tests validate the library. A separate wire test connects the library to SessionHost from the real Launcher source. None replaces projector, audio, physical target, installer or kiosk acceptance.
Required scenarios
No gameplay before start; pause without scoring; resume without reset; stop without automatic restart; lost socket; duplicate shot_id; invalid manifest; one final result. Create a new client for each new mock session. Never enable mock from a catch-all connection error handler.
Code example
Integration excerpt: game-specific variables belong to the application. Playground contains the runnable reference.
controls.start({countdown_ms: 1000});
controls.hit(0.5, 0.5, 'shot-001');
controls.pause('operator_requested');
controls.resume();
controls.device('controller_lost');
controls.stop('device_fault');