# Weapon continuation guards timer floors and cancellation RE-576. Reproduce with `python3 scripts/analyze_qvm_weapon_guards.py`; check with `python3 scripts/test_qvm_weapon_guards.py`. The [machine report](qvm-weapon-guards.json) retains source identity and bounded fixtures. This standalone slice starts at50923 with explicitly supplied parent local ID. PS12 bit8 plus state32 clears bits32/64, sets weapon state2 and exits. State16384 plus32 exits without those writes. In both groups IDs11/13 branch directly, while other IDs execute CONST12→local12 STORE and then branch on that nonzero value. The source therefore assigns12 rather than comparing ID to12; packed weapon is unchanged. Intended high-level logic is not inferred. Next, state1024 or PS12 bit8 exits. State4 floors PS44 at300. State512 with button1 stays pending while timer is positive, otherwise clears512 and sets300. Without button1, state128/256 causes immediate exit retaining512; otherwise the timer is floored300 and512 clears. Finally positive PS44 exits; nonpositive timer reaches51207. 90 fixtures independently check exact state and source stop boundaries. No prefix is run in these standalone probes, so input state32 is not silently cleared by an earlier absent button1. Remaining: compose these gates after actual selection and recover ready/ammo/reload/phase branches while preserving local state and caller legality. No original executable/full QVM/native collision/physics/rendering executes. Native responses and legal input domains are supplied or unverified where stated; full runtime/macOS/Linux Rust/Bevy/Solari gameplay remains open.