qvm: conditional aim jitter
Browse files- docs/ASSET_PIPELINE_TODO.md +3 -0
- docs/FINDINGS.md +3 -0
- docs/PROVISIONAL_TODO.md +3 -0
- docs/RESEARCH_LEDGER.md +5 -0
- docs/REVERSE_ENGINEERING_TODO.md +3 -0
- docs/research/QVM_AIM_EXTRA_OFFSETS.md +7 -0
- docs/research/README.md +3 -0
- docs/research/qvm-aim-extra-offsets.json +0 -0
- scripts/analyze_qvm_aim_extra_offsets.py +25 -0
- scripts/test_qvm_aim_extra_offsets.py +27 -0
docs/ASSET_PIPELINE_TODO.md
CHANGED
|
@@ -526,3 +526,6 @@ Research progress: RE-613 [report](research/QVM_SHARED_SHOT_BASIS.md); remaining
|
|
| 526 |
|
| 527 |
|
| 528 |
Research progress: RE-615 [report](research/QVM_AIM_TRIG.md); remaining native/content/runtime/platform scope stays open.
|
|
|
|
|
|
|
|
|
|
|
|
| 526 |
|
| 527 |
|
| 528 |
Research progress: RE-615 [report](research/QVM_AIM_TRIG.md); remaining native/content/runtime/platform scope stays open.
|
| 529 |
+
|
| 530 |
+
|
| 531 |
+
Research progress: RE-616 [report](research/QVM_AIM_EXTRA_OFFSETS.md); remaining native/content/runtime/platform scope stays open.
|
docs/FINDINGS.md
CHANGED
|
@@ -881,3 +881,6 @@ Bounded qagame paths recover bomb-plant/inactivity correction requests, direct f
|
|
| 881 |
|
| 882 |
|
| 883 |
**RE-615 — Aim airborne adjustment and trigonometric offsets:** The airborne44 multiplier precedes sampling; three sin/cos pairs create horizontal and vertical offsets, then future field6304 can clear flag84. [Evidence](research/QVM_AIM_TRIG.md).
|
|
|
|
|
|
|
|
|
|
|
|
| 881 |
|
| 882 |
|
| 883 |
**RE-615 — Aim airborne adjustment and trigonometric offsets:** The airborne44 multiplier precedes sampling; three sin/cos pairs create horizontal and vertical offsets, then future field6304 can clear flag84. [Evidence](research/QVM_AIM_TRIG.md).
|
| 884 |
+
|
| 885 |
+
|
| 886 |
+
**RE-616 — Conditional aim jitter and additional RNG draws:** IDs10/14/23 may add two RNG offsets; flag84 and the strict150-time boundary control the branch, with a distinct ID23 scale. [Evidence](research/QVM_AIM_EXTRA_OFFSETS.md).
|
docs/PROVISIONAL_TODO.md
CHANGED
|
@@ -846,3 +846,6 @@ Research progress: RE-613 [report](research/QVM_SHARED_SHOT_BASIS.md); remaining
|
|
| 846 |
|
| 847 |
|
| 848 |
Research progress: RE-615 [report](research/QVM_AIM_TRIG.md); remaining native/content/runtime/platform scope stays open.
|
|
|
|
|
|
|
|
|
|
|
|
| 846 |
|
| 847 |
|
| 848 |
Research progress: RE-615 [report](research/QVM_AIM_TRIG.md); remaining native/content/runtime/platform scope stays open.
|
| 849 |
+
|
| 850 |
+
|
| 851 |
+
Research progress: RE-616 [report](research/QVM_AIM_EXTRA_OFFSETS.md); remaining native/content/runtime/platform scope stays open.
|
docs/RESEARCH_LEDGER.md
CHANGED
|
@@ -757,3 +757,8 @@ Each spread candidate consumes four actual36717 draws; acceptance requires radiu
|
|
| 757 |
## 2026-10-20 — RE-615 Aim airborne adjustment and trigonometric offsets (separate task commit)
|
| 758 |
|
| 759 |
The airborne44 multiplier precedes sampling; three sin/cos pairs create horizontal and vertical offsets, then future field6304 can clear flag84. 37 fixtures check independent f32 offsets, trig arguments/order and explicit zero-seed exhaustion. Existing default sampler output stays identical. Full suite: 955 tests pass. Report regenerates byte-identically (437425 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 757 |
## 2026-10-20 — RE-615 Aim airborne adjustment and trigonometric offsets (separate task commit)
|
| 758 |
|
| 759 |
The airborne44 multiplier precedes sampling; three sin/cos pairs create horizontal and vertical offsets, then future field6304 can clear flag84. 37 fixtures check independent f32 offsets, trig arguments/order and explicit zero-seed exhaustion. Existing default sampler output stays identical. Full suite: 955 tests pass. Report regenerates byte-identically (437425 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
|
| 760 |
+
|
| 761 |
+
|
| 762 |
+
## 2026-10-20 — RE-616 Conditional aim jitter and additional RNG draws (separate task commit)
|
| 763 |
+
|
| 764 |
+
IDs10/14/23 may add two RNG offsets; flag84 and the strict150-time boundary control the branch, with a distinct ID23 scale. 72 ID/flag/time/future-field fixtures independently check every added draw, offsets and final seed. Full suite: 958 tests pass. Report regenerates byte-identically (958589 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
|
docs/REVERSE_ENGINEERING_TODO.md
CHANGED
|
@@ -889,3 +889,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
|
|
| 889 |
|
| 890 |
|
| 891 |
- [x] RE-615 Aim airborne adjustment and trigonometric offsets ([report](research/QVM_AIM_TRIG.md)).
|
|
|
|
|
|
|
|
|
|
|
|
| 889 |
|
| 890 |
|
| 891 |
- [x] RE-615 Aim airborne adjustment and trigonometric offsets ([report](research/QVM_AIM_TRIG.md)).
|
| 892 |
+
|
| 893 |
+
|
| 894 |
+
- [x] RE-616 Conditional aim jitter and additional RNG draws ([report](research/QVM_AIM_EXTRA_OFFSETS.md)).
|
docs/research/QVM_AIM_EXTRA_OFFSETS.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Conditional aim jitter and additional RNG draws
|
| 2 |
+
|
| 3 |
+
RE-616. Reproduce with `python3 scripts/analyze_qvm_aim_extra_offsets.py`; check with `python3 scripts/test_qvm_aim_extra_offsets.py`. The [machine report](qvm-aim-extra-offsets.json) retains source identity and bounded fixtures.
|
| 4 |
+
|
| 5 |
+
Actual291315–291475 follows the recovered trig stage without resetting RNG or local offsets. Flag0 adds two draws for IDs10/14/23, using ID23-specific scale/bias. Flag1 adds two draws only for IDs10/14 when now−PS4404<150; equality150 suppresses them. Future timestamps produce negative elapsed values and follow the source comparison, but are not asserted legal live inputs. For IDs14/23 the preceding futurePS6304 override may clear flag84 and select the other branch. All72 probes reconstruct extra samples from an independent xor-shift/f32 oracle and retain actual36717 call evidence. The endpoint is still untouched at291476.
|
| 6 |
+
|
| 7 |
+
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.
|
docs/research/README.md
CHANGED
|
@@ -447,3 +447,6 @@ The extension collector adds five focused tests for native tail calls, command-r
|
|
| 447 |
|
| 448 |
|
| 449 |
[RE-615: Aim airborne adjustment and trigonometric offsets](QVM_AIM_TRIG.md). Reproduce with `python3 scripts/analyze_qvm_aim_trig.py`; check with `python3 scripts/test_qvm_aim_trig.py`.
|
|
|
|
|
|
|
|
|
|
|
|
| 447 |
|
| 448 |
|
| 449 |
[RE-615: Aim airborne adjustment and trigonometric offsets](QVM_AIM_TRIG.md). Reproduce with `python3 scripts/analyze_qvm_aim_trig.py`; check with `python3 scripts/test_qvm_aim_trig.py`.
|
| 450 |
+
|
| 451 |
+
|
| 452 |
+
[RE-616: Conditional aim jitter and additional RNG draws](QVM_AIM_EXTRA_OFFSETS.md). Reproduce with `python3 scripts/analyze_qvm_aim_extra_offsets.py`; check with `python3 scripts/test_qvm_aim_extra_offsets.py`.
|
docs/research/qvm-aim-extra-offsets.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
scripts/analyze_qvm_aim_extra_offsets.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Actual291315–291475 conditional additional RNG offsets."""
|
| 3 |
+
import itertools
|
| 4 |
+
from pathlib import Path
|
| 5 |
+
from qvm_research_support import source,execute
|
| 6 |
+
from qvm_server_fire_support import seed
|
| 7 |
+
from analyze_qvm_aim_trig import aim_trig
|
| 8 |
+
from analyze_qvm_spread_parameters import LOCAL
|
| 9 |
+
from analyze_qvm_server_shot_setup import random_word
|
| 10 |
+
from analyze_qvm_acceleration import PS
|
| 11 |
+
from analyze_qvm import write_json
|
| 12 |
+
|
| 13 |
+
def extra_offsets(ins,m):
|
| 14 |
+
m,p=aim_trig(ins,m);before=m[21044]&0xffffffff;r={'aim':p,'initial_seed':before,'execution':None,'status':p['status']}
|
| 15 |
+
if p['status']!='extra-offsets-pending':return m,r
|
| 16 |
+
def rng(i,m,a,c):m,e=random_word(i,m);return m,c,e['result'],e
|
| 17 |
+
m,_,e=execute(ins,291315,291476,m,(0,0,0),LOCAL,{36717:rng});r.update({'execution':e,'final_seed':m[21044]&0xffffffff,'offsets':{str(o):m[LOCAL+o]&0xffffffff for o in [76,52]},'status':'endpoint-pending'})
|
| 18 |
+
return m,r
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
q,raw,h,ins=source();rows=[]
|
| 22 |
+
for ident,flags,elapsed,future in itertools.product([2,10,14,23],[0,8192,16384],[150,149,-1],[False,True]):
|
| 23 |
+
m=seed(raw,h,ident);m[PS+144]=0;m[PS+312]=ident;m[PS+4048]=flags;m[PS+4404]=5000-elapsed;m[PS+6304]=5001 if future else 5000;m[21044]=1;rows.append(extra_offsets(ins,m)[1])
|
| 24 |
+
write_json(Path('docs/research/qvm-aim-extra-offsets.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual aim preparation and291315–291475; actual36717 for added draws. Negative elapsed/future timestamps are synthetic boundary probes, not established legal live inputs. No endpoint/trace/damage.'})
|
| 25 |
+
if __name__=='__main__':main()
|
scripts/test_qvm_aim_extra_offsets.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json,unittest
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
from test_qvm_ground import word,n,f
|
| 4 |
+
from test_qvm_server_shot_setup import random_oracle
|
| 5 |
+
|
| 6 |
+
def expected(p):
|
| 7 |
+
a=p['aim'];ident=a['speed']['parameters']['initial']['id'];active=(a['flag84']==0 and ident in [10,14,23]) or (a['flag84']==1 and ident in [10,14] and a['time']-a['fields']['4404']<150);seed=p['initial_seed'];out=dict(a['offsets']);draws=[]
|
| 8 |
+
if active:
|
| 9 |
+
scale,bias=(1031799040,1149239296) if ident==23 else (1040187648,1157627904)
|
| 10 |
+
for key in ['76','52']:
|
| 11 |
+
seed,v=random_oracle(seed);draws.append(v);out[key]=word(f(n(out[key])+f(f(float(v)*n(scale))-n(bias))))
|
| 12 |
+
return seed,out,draws
|
| 13 |
+
class AimExtraOffsetTests(unittest.TestCase):
|
| 14 |
+
@classmethod
|
| 15 |
+
def setUpClass(cls):cls.r=json.loads(Path('docs/research/qvm-aim-extra-offsets.json').read_text())
|
| 16 |
+
def test_independent_extra_offsets_rng_and_final_seed(self):
|
| 17 |
+
self.assertEqual(len(self.r['probes']),72)
|
| 18 |
+
for p in self.r['probes']:
|
| 19 |
+
seed,out,draws=expected(p);self.assertEqual(p['final_seed'],seed);self.assertEqual(p['offsets'],out);self.assertEqual([c['effect']['result'] for c in p['execution']['children']],draws)
|
| 20 |
+
def test_exact_recent_boundary(self):
|
| 21 |
+
rows=[p for p in self.r['probes'] if p['aim']['speed']['parameters']['initial']['id']==10 and p['aim']['flag84']==1]
|
| 22 |
+
for p in rows:self.assertEqual(len(p['execution']['calls']),0 if p['aim']['time']-p['aim']['fields']['4404']==150 else 2)
|
| 23 |
+
def test_future_field_overrides_id23_flags(self):
|
| 24 |
+
for p in self.r['probes']:
|
| 25 |
+
a=p['aim']
|
| 26 |
+
if a['speed']['parameters']['initial']['id']==23:self.assertEqual(len(p['execution']['calls']),2 if a['flag84']==0 else 0)
|
| 27 |
+
if __name__=='__main__':unittest.main()
|