QA and acceptance
Validate the library, game mechanics, integration and physical installation separately. A PASS at one layer does not replace the next one.
Session contract
Valid/invalid manifest; rejected authentication; timeout; ready only after loading; no gameplay before start; pause/resume/stop; no automatic reconnect; player_count; single completion; token-free logs.
Hits and scoring
Centre and corners, letterboxing, repeated shot_id, impacts during countdown/pause and timer expiry with the final shot. Assert exact expected score values.
Two players — alternating turns
Test handoff after the configured shot/series/round, pause during handoff, stop, duplicate shot_id and the final aggregate result.
Two players — split target
Test nx=0, 0.499, 0.5 and 1.0, both edges, centre line, mirrored targets, clear side indication and no cross-side scoring.
12 languages
Compare dictionary keys across all 12 locales automatically. Visually test every locale, especially Arabic RTL, Chinese/Japanese/Hindi, long German/Russian labels, font coverage and offline resource loading.
Operation
Cold launch, repeated sessions, offline use, audio, assigned projector, controller loss, operator abort, update and clean exit. Retain version, configuration, steps, expected and actual results.