nmarshall commited on
Commit
3624d21
·
1 Parent(s): c377fd6

qvm: freeflight movement

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -370,3 +370,6 @@ Research progress: RE-557 [report](research/QVM_WALK_POLICY.md); remaining nativ
370
 
371
 
372
  Research progress: RE-558 [report](research/QVM_WALKING_MODE.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
370
 
371
 
372
  Research progress: RE-558 [report](research/QVM_WALKING_MODE.md); remaining native/content/runtime/platform scope stays open.
373
+
374
+
375
+ Research progress: RE-560 [report](research/QVM_FREEFLIGHT.md); remaining native/content/runtime/platform scope stays open.
docs/FINDINGS.md CHANGED
@@ -728,3 +728,6 @@ Bounded qagame paths recover bomb-plant/inactivity correction requests, direct f
728
 
729
 
730
  **RE-558 — Complete bounded walking wrapper and combined main handoffs:** Complete43626 routes actual entry to air/water or normal policy, clears32 and runs60091(0) only when horizontal velocity is nonzero; actual main posture/contents/ground/timer/action/query and post-ground share the resulting state. [Evidence](research/QVM_WALKING_MODE.md).
 
 
 
 
728
 
729
 
730
  **RE-558 — Complete bounded walking wrapper and combined main handoffs:** Complete43626 routes actual entry to air/water or normal policy, clears32 and runs60091(0) only when horizontal velocity is nonzero; actual main posture/contents/ground/timer/action/query and post-ground share the resulting state. [Evidence](research/QVM_WALKING_MODE.md).
731
+
732
+
733
+ **RE-560 — Complete bounded freeflight movement:** 42486 composes friction, command scale multiplied by1.5, a three-axis wish, normalization and coefficient8 acceleration, then integrates position only if any resulting absolute velocity component exceeds1. [Evidence](research/QVM_FREEFLIGHT.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -682,3 +682,6 @@ Research progress: RE-557 [report](research/QVM_WALK_POLICY.md); remaining nativ
682
 
683
 
684
  Research progress: RE-558 [report](research/QVM_WALKING_MODE.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
682
 
683
 
684
  Research progress: RE-558 [report](research/QVM_WALKING_MODE.md); remaining native/content/runtime/platform scope stays open.
685
+
686
+
687
+ Research progress: RE-560 [report](research/QVM_FREEFLIGHT.md); remaining native/content/runtime/platform scope stays open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -496,3 +496,8 @@ Complete43626 routes actual entry to air/water or normal policy, clears32 and ru
496
  ### Ten-task batch final regression audit
497
 
498
  RE-549–558 each has its own code/tests/report/documentation commit. All759 tests pass; all ten direct test commands execute four tests each. Ten new reports and six prior contact/main/active/flagged/walk-entry/air reports regenerate byte-identically after final integration. New reports remain below the2MiB normal-Git cap. Completed coverage and explicit native-supplied limits are indexed in `research/QVM_MOVEMENT_BATCH.md`; RE-559 preserves remaining original-reference/native/runtime/rendering/content/platform work. No asset payloads or Rust runtime were added.
 
 
 
 
 
 
496
  ### Ten-task batch final regression audit
497
 
498
  RE-549–558 each has its own code/tests/report/documentation commit. All759 tests pass; all ten direct test commands execute four tests each. Ten new reports and six prior contact/main/active/flagged/walk-entry/air reports regenerate byte-identically after final integration. New reports remain below the2MiB normal-Git cap. Completed coverage and explicit native-supplied limits are indexed in `research/QVM_MOVEMENT_BATCH.md`; RE-559 preserves remaining original-reference/native/runtime/rendering/content/platform work. No asset payloads or Rust runtime were added.
499
+
500
+
501
+ ## 2026-10-19 — RE-560 Complete bounded freeflight movement (separate task commit)
502
+
503
+ 42486 composes friction, command scale multiplied by1.5, a three-axis wish, normalization and coefficient8 acceleration, then integrates position only if any resulting absolute velocity component exceeds1. 64 finite fixtures independently check friction, scaling, wish geometry, normalization, acceleration, strict integration threshold and untouched state. Full suite: 763 tests pass. Report regenerates byte-identically (453652 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
@@ -722,3 +722,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
722
 
723
 
724
  - [x] RE-558 Complete bounded walking wrapper and combined main handoffs ([report](research/QVM_WALKING_MODE.md)).
 
 
 
 
722
 
723
 
724
  - [x] RE-558 Complete bounded walking wrapper and combined main handoffs ([report](research/QVM_WALKING_MODE.md)).
725
+
726
+
727
+ - [x] RE-560 Complete bounded freeflight movement ([report](research/QVM_FREEFLIGHT.md)).
docs/research/QVM_FREEFLIGHT.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Complete bounded freeflight movement
2
+
3
+ RE-560. Reproduce with `python3 scripts/analyze_qvm_freeflight.py`; check with `python3 scripts/test_qvm_freeflight.py`. The [machine report](qvm-freeflight.json) retains source identity and bounded fixtures.
4
+
5
+ The complete42486 body is interpreted from42487 to its void epilogue42836. Actual recovered39988 friction,40397 scale and40275 acceleration run in disjoint frames; the finite native sqrt response is supplied from ordinary math rounded to float32. Unlike the collision movement consumers, this body directly adds velocity×dt to all three origin components when any component has absolute value strictly above1. At or below1 it retains origin.
6
+
7
+ Command scale is multiplied by1.5 before basis construction; forward/right contribute to all three components and signed up contributes to Z. The normalized vector and its original length feed acceleration using file-backed21200=8. Tests cover zero and signed commands, pitched and identity bases, dt0/.016 and threshold velocities. No native collision request occurs. Original dispatch legality, live view basis, invalid/nonfinite vectors, spectator/noclip semantic naming and reference parity remain open.
8
+
9
+ Next integration work: connect this recovered consumer to main dispatch with actual command/timer/environment state; reproduce movement in Rust only after reference fixtures exist.
10
+
11
+ 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
@@ -283,3 +283,6 @@ The extension collector adds five focused tests for native tail calls, command-r
283
 
284
 
285
  [RE-558: Complete bounded walking wrapper and combined main handoffs](QVM_WALKING_MODE.md). Reproduce with `python3 scripts/analyze_qvm_walking_mode.py`; check with `python3 scripts/test_qvm_walking_mode.py`.
 
 
 
 
283
 
284
 
285
  [RE-558: Complete bounded walking wrapper and combined main handoffs](QVM_WALKING_MODE.md). Reproduce with `python3 scripts/analyze_qvm_walking_mode.py`; check with `python3 scripts/test_qvm_walking_mode.py`.
286
+
287
+
288
+ [RE-560: Complete bounded freeflight movement](QVM_FREEFLIGHT.md). Reproduce with `python3 scripts/analyze_qvm_freeflight.py`; check with `python3 scripts/test_qvm_freeflight.py`.
docs/research/qvm-freeflight.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_freeflight.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Complete bounded42486 friction, three-axis wish and direct integration."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source,memory,execute
6
+ from analyze_qvm_acceleration import PS,FRAME,word
7
+ from analyze_qvm_active_mode import command_scale,accelerate
8
+ from analyze_qvm_friction import friction_probe
9
+ from analyze_qvm_jump_entry import snapshot
10
+ from analyze_qvm_slide_prefix import vec
11
+ from analyze_qvm import write_json
12
+ LOCAL=0x6a000000
13
+
14
+ def freeflight(ins,m,cmd):
15
+ initial=snapshot(m)
16
+ def friction(i,m,a,c):
17
+ m,r=friction_probe(i,{},(0,0,0),initial_memory=m,return_memory=True);return m,c,0,r
18
+ def scale(i,m,a,c):
19
+ m,r=command_scale(i,m,c,a[8]);return m,c,r['result_scale_float_word'],r
20
+ def acceleration(i,m,a,c):
21
+ m,r=accelerate(i,m,a);return m,c,0,r
22
+ m,c,r=execute(ins,42487,42836,m,cmd,LOCAL,{39988:friction,40397:scale,40275:acceleration})
23
+ return m,{'initial':initial,'commands':list(cmd),'forward_basis':vec(m,35023892),'right_basis':vec(m,35023904),'dt':m[35023928],'constructed':vec(m,LOCAL+44),'direction':vec(m,LOCAL+20),'speed':m[LOCAL+32]&0xffffffff,'execution':r,'final':snapshot(m)}
24
+
25
+ def main():
26
+ q,raw,h,ins=source();rows=[]
27
+ for cmd,v,dt,basis in itertools.product([(0,0,0),(127,0,0),(81,1,-128),(0,0,127)],[(0,0,0),(1,-1,1),(-1.01,0,0),(10,20,-30)],[0,.016],[(1,0,0,0,1,0),(.6,0,.8,0,1,0)]):
28
+ m=memory(raw,h,cmd,plane=0);m[PS+220]=0;m[35023928]=word(dt)
29
+ for j,x in enumerate(v):m[PS+32+4*j]=word(x)
30
+ for j,x in enumerate(basis):m[(35023892 if j<3 else 35023904)+4*(j%3)]=word(x)
31
+ rows.append(freeflight(ins,m,cmd)[1])
32
+ write_json(Path('docs/research/qvm-freeflight.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Complete finite42486 with recovered friction/scale/acceleration and supplied finite sqrt; no collision or native movement. Dispatch legality and live basis remain unverified.'})
33
+ if __name__=='__main__':main()
scripts/test_qvm_freeflight.py ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest,math
2
+ from pathlib import Path
3
+ from test_qvm_ground import word,n,f
4
+ from test_qvm_acceleration import scale_oracle,accel_oracle,s8
5
+ from test_qvm_friction import friction_oracle
6
+ class FreeflightTests(unittest.TestCase):
7
+ @classmethod
8
+ def setUpClass(cls):cls.r=json.loads(Path('docs/research/qvm-freeflight.json').read_text())
9
+ def test_actual_children(self):
10
+ self.assertEqual(len(self.r['probes']),64)
11
+ constants={21160:100,21208:4,21212:1,21220:5,21224:3000}
12
+ for p in self.r['probes']:
13
+ a=p['execution']['children'];self.assertEqual([x['call']['target'] for x in a],[39988,40397,-107,40275]);fr=a[0]['effect'];self.assertEqual(fr['result_velocity_float_words'],friction_oracle(fr,constants)[3]);sc=a[1]['effect'];self.assertEqual(sc['result_scale_float_word'],scale_oracle(sc));ac=a[3]['effect'];self.assertEqual(ac['result_velocity_float_words'],accel_oracle(ac,fr['result_velocity_float_words'])[3])
14
+ def test_three_axis_wish_and_normalization(self):
15
+ for p in self.r['probes']:
16
+ scale=f(1.5*n(p['execution']['children'][1]['effect']['result_scale_float_word']));fw,right,up=map(s8,[x&255 for x in p['commands']]);v=[f(f(f(scale*n(a))*fw)+f(f(scale*n(b))*right)) for a,b in zip(p['forward_basis'],p['right_basis'])];v[2]=f(v[2]+f(scale*up));self.assertEqual(p['constructed'],list(map(word,v)));length=f(math.sqrt(f(f(f(v[0]*v[0])+f(v[1]*v[1]))+f(v[2]*v[2]))));self.assertEqual(p['speed'],word(length));self.assertEqual(p['direction'],[word(f(x*f(1/length))) if length else word(x) for x in v])
17
+ def test_strict_velocity_threshold_and_direct_position(self):
18
+ for p in self.r['probes']:
19
+ v=list(map(n,p['final']['velocity']));initial=p['initial']['origin'];want=[word(f(n(o)+f(x*n(p['dt'])))) for o,x in zip(initial,v)] if any(abs(x)>1 for x in v) else initial;self.assertEqual(p['final']['origin'],want)
20
+ def test_other_state_and_no_collision(self):
21
+ for p in self.r['probes']:
22
+ a=dict(p['initial']);a.update(origin=p['final']['origin'],velocity=p['final']['velocity']);self.assertEqual(p['final'],a);self.assertNotIn(-25,[x['target'] for x in p['execution']['calls']])
23
+ if __name__=='__main__':unittest.main()