nmarshall commited on
Commit
7761fff
·
1 Parent(s): b8a7968

qvm: conditional aim jitter

Browse files
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()