# Pellet muzzle width and indexed point rotation RE-622. Reproduce with `python3 scripts/analyze_qvm_pellet_rotation.py`; check with `python3 scripts/test_qvm_pellet_rotation.py`. The [machine report](qvm-pellet-rotation.json) retains source identity and bounded fixtures. The frame wrapper now accepts actual caller argument pointers while preserving its default report. Actual295495–295548 invokes the alternate muzzle helper, reads entity-ID table4260+ID×432 for degrees, computes a sin/cos width and initializes loop index0. Actual295549–295572 sets point(0,1,0), uses initialized axis local956=(0,0,1), and calls recovered61092 with float(index×18). Index0 follows function entry; indices1/19 are explicit resumed-loop fixtures and do not claim earlier pellets or traces executed. The source later increments the index and loops while<20. Width depends on entityID, independently of caller origin and normalized direction. The output scratch vector can initially be absent; the rotation wrapper now reports that absence instead of inventing prior words. Source computation writes all components. Per-pellet argument seed remains unchanged at this boundary; seed perturbation and endpoint follow next. 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.