nmarshall commited on
Commit
549f772
·
1 Parent(s): 15d7fca

qvm: recover intermission camera placement

Browse files
docs/FINDINGS.md CHANGED
@@ -1529,3 +1529,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
1529
 
1530
 
1531
  **RE-843:** Rust composes recovered tie, readiness, begin and exit-log policies with prior exit timers/limits across150 continuous source fixtures. Atomic staged updates preserve shared pending/client state; reset and lower-level world/I/O effects remain explicit intentions. Source branch labels are independently classified by the tested composition oracle; captured requests and actual final source state supply effect parity. [Evidence](research/RUST_INTERMISSION_FLOW.md).
 
 
 
 
1529
 
1530
 
1531
  **RE-843:** Rust composes recovered tie, readiness, begin and exit-log policies with prior exit timers/limits across150 continuous source fixtures. Atomic staged updates preserve shared pending/client state; reset and lower-level world/I/O effects remain explicit intentions. Source branch labels are independently classified by the tested composition oracle; captured requests and actual final source state supply effect parity. [Evidence](research/RUST_INTERMISSION_FLOW.md).
1532
+
1533
+
1534
+ **RE-844:** 72 original 6575 fixtures recover entity/player origin and view-angle copies, velocity clear, movement type5 and cleared entity/client fields. Coherent byte copies preserve arbitrary float words, including NaN payloads; two entity-to-client targets prove indirection. Mode/field4324 gates converge without extra effects. Native renderer/camera integration remains open. [Evidence](research/QVM_CAMERA_PLACE.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1548,3 +1548,6 @@ RE-843: Rust composes recovered tie, readiness, begin and exit-log policies with
1548
 
1549
 
1550
  - [ ] RE-844: Recover next-map/respawn/camera/publication/event allocation effects, broaden pointer/identity fixtures, and integrate ranking→intermission→scoreboard runtime traces. [Scope](research/QVM_INTERMISSION_BATCH.md).
 
 
 
 
1548
 
1549
 
1550
  - [ ] RE-844: Recover next-map/respawn/camera/publication/event allocation effects, broaden pointer/identity fixtures, and integrate ranking→intermission→scoreboard runtime traces. [Scope](research/QVM_INTERMISSION_BATCH.md).
1551
+
1552
+
1553
+ RE-844: 72 original 6575 fixtures recover entity/player origin and view-angle copies, velocity clear, movement type5 and cleared entity/client fields. Coherent byte copies preserve arbitrary float words, including NaN payloads; two entity-to-client targets prove indirection. Mode/field4324 gates converge without extra effects. Native renderer/camera integration remains open. Full runtime completion remains open. [Evidence](research/QVM_CAMERA_PLACE.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -1893,3 +1893,8 @@ Rust composes recovered tie, readiness, begin and exit-log policies with prior e
1893
  RE-843 final review: targeted xtask registry regression passes for the intermission module and all five source-to-Rust report dependencies. Added batch evidence, validation cadence and RE-844 lower-level/runtime follow-ups.
1894
 
1895
  Batch RE-834–843 boundary: the single `cargo xtask test-full --since 5f7b2df8` run passed after task ten: 1,648 Python tests, 137 Rust tests (assets 10, gameplay 99, xtask 28), 45 deterministic report producers, storage policy, 403 documentation files and whitespace checks. No generated report drift; validation notes amended into task ten. Original assets unchanged.
 
 
 
 
 
 
1893
  RE-843 final review: targeted xtask registry regression passes for the intermission module and all five source-to-Rust report dependencies. Added batch evidence, validation cadence and RE-844 lower-level/runtime follow-ups.
1894
 
1895
  Batch RE-834–843 boundary: the single `cargo xtask test-full --since 5f7b2df8` run passed after task ten: 1,648 Python tests, 137 Rust tests (assets 10, gameplay 99, xtask 28), 45 deterministic report producers, storage policy, 403 documentation files and whitespace checks. No generated report drift; validation notes amended into task ten. Original assets unchanged.
1896
+
1897
+
1898
+ ## 2026-10-27 — RE-844 Original intermission camera placement and client indirection
1899
+
1900
+ 72 original 6575 fixtures recover entity/player origin and view-angle copies, velocity clear, movement type5 and cleared entity/client fields. Coherent byte copies preserve arbitrary float words, including NaN payloads; two entity-to-client targets prove indirection. Mode/field4324 gates converge without extra effects. Native renderer/camera integration remains open. Focused `cargo xtask test-group camera-place` passes (5 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1585,3 +1585,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1585
 
1586
 
1587
  - [ ] RE-844: Recover next-map/respawn/camera/publication/event allocation effects, broaden pointer/identity fixtures, and integrate ranking→intermission→scoreboard runtime traces. [Scope](research/QVM_INTERMISSION_BATCH.md).
 
 
 
 
1585
 
1586
 
1587
  - [ ] RE-844: Recover next-map/respawn/camera/publication/event allocation effects, broaden pointer/identity fixtures, and integrate ranking→intermission→scoreboard runtime traces. [Scope](research/QVM_INTERMISSION_BATCH.md).
1588
+
1589
+
1590
+ - [x] RE-844 Original intermission camera placement and client indirection ([evidence](research/QVM_CAMERA_PLACE.md)).
docs/research/QVM_CAMERA_PLACE.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Original intermission camera placement and client indirection
2
+
3
+ RE-844. Reproduce with `python3 scripts/analyze_qvm_camera_place.py`; focused validation: `cargo xtask test-group camera-place`. [Machine report](qvm-camera-place.json).
4
+
5
+ 72 original 6575 fixtures recover entity/player origin and view-angle copies, velocity clear, movement type5 and cleared entity/client fields. Coherent byte copies preserve arbitrary float words, including NaN payloads; two entity-to-client targets prove indirection. Mode/field4324 gates converge without extra effects. Native renderer/camera integration remains open.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/README.md CHANGED
@@ -1123,3 +1123,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1123
  [RE-843: Rust composed exit and intermission state machine](RUST_INTERMISSION_FLOW.md).
1124
 
1125
  - [RE-834–843 intermission batch findings, validation and follow-up scope](QVM_INTERMISSION_BATCH.md).
 
 
 
 
1123
  [RE-843: Rust composed exit and intermission state machine](RUST_INTERMISSION_FLOW.md).
1124
 
1125
  - [RE-834–843 intermission batch findings, validation and follow-up scope](QVM_INTERMISSION_BATCH.md).
1126
+
1127
+
1128
+ [RE-844: Original intermission camera placement and client indirection](QVM_CAMERA_PLACE.md).
docs/research/qvm-camera-place.json ADDED
The diff for this file is too large to render. See raw diff
 
docs/research/qvm-resumer-audit.json CHANGED
@@ -9974,6 +9974,17 @@
9974
  "path": "scripts/qvm_team_counter_support.py",
9975
  "repeated_calls_opt_in": true,
9976
  "repeated_calls_setting": "literal_true"
 
 
 
 
 
 
 
 
 
 
 
9977
  }
9978
  ],
9979
  "limits": "Static direct-import calls only, including local aliases. Computed ranges, indirect/module calls and reachability need manual/dynamic review. Backward branches and dynamic stores are review markers, not proven failures; fixture compatibility is not semantic proof.",
@@ -10014,10 +10025,10 @@
10014
  }
10015
  },
10016
  "summary": {
10017
- "call_expressions": 201,
10018
- "files": 153,
10019
  "legacy_expressions": 158,
10020
- "nonliteral_ranges": 26,
10021
  "unresolved_mode_expressions": 3
10022
  }
10023
  }
 
9974
  "path": "scripts/qvm_team_counter_support.py",
9975
  "repeated_calls_opt_in": true,
9976
  "repeated_calls_setting": "literal_true"
9977
+ },
9978
+ {
9979
+ "backward_conditional_branches": [],
9980
+ "calls": [],
9981
+ "explicit_result_offsets": null,
9982
+ "helper": "qvm_trace_support.resume",
9983
+ "line": 22,
9984
+ "literal_range": null,
9985
+ "path": "scripts/qvm_transition_support.py",
9986
+ "repeated_calls_opt_in": true,
9987
+ "repeated_calls_setting": "literal_true"
9988
  }
9989
  ],
9990
  "limits": "Static direct-import calls only, including local aliases. Computed ranges, indirect/module calls and reachability need manual/dynamic review. Backward branches and dynamic stores are review markers, not proven failures; fixture compatibility is not semantic proof.",
 
10025
  }
10026
  },
10027
  "summary": {
10028
+ "call_expressions": 202,
10029
+ "files": 154,
10030
  "legacy_expressions": 158,
10031
+ "nonliteral_ranges": 27,
10032
  "unresolved_mode_expressions": 3
10033
  }
10034
  }
scripts/analyze_qvm_camera_place.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import itertools
3
+ from pathlib import Path
4
+ from qvm_research_support import source
5
+ from qvm_transition_support import run,vector,words,ENTITY,PCLIENT,POSITION,ANGLES
6
+ from analyze_qvm import write_json
7
+ EF=[4,8,92,96,100,156,160,180,460]
8
+ CF=[4,20,24,28,32,36,40,104,152,156,160,3108,4324]
9
+ VECTORS=[[0x80000000,0,0x3f800000],[0x7fc01234,0x7f800000,0xff800000],[0x3fc00000,0xc0100000,0x4b000001]]
10
+ def main():
11
+ q,raw,h,ins=source();rows=[]
12
+ for mode,special,slot,origin,angles in itertools.product([0,2,3],[0,1],[0,1],VECTORS,VECTORS[:2]):
13
+ m={ENTITY+o:0x12345678 for o in EF};m[ENTITY+520]=PCLIENT+6336*slot
14
+ for j in range(2):
15
+ for o in CF:m[PCLIENT+6336*j+o]=0xaabbccdd
16
+ m[PCLIENT+6336*slot+3108]=mode;m[PCLIENT+6336*slot+4324]=special;vector(m,POSITION,origin);vector(m,ANGLES,angles)
17
+ before=[{str(o):m[PCLIENT+6336*j+o]&0xffffffff for o in CF} for j in range(2)];m,p=run(ins,m,6575,6715,20,{8:ENTITY});p.update(input=dict(mode=mode,special=special,slot=slot,origin=origin,angles=angles),clients_before=before,entity={str(o):m[ENTITY+o]&0xffffffff for o in EF},clients=[{str(o):m[PCLIENT+6336*j+o]&0xffffffff for o in CF} for j in range(2)]);rows.append(p)
18
+ write_json(Path('docs/research/qvm-camera-place.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual6575 over72 coherent word/byte fixtures, including entity-client indirection and raw NaN/infinite/signed-zero copies. Both apparent mode gates join the same body. No native camera/rendering behavior or unbounded alias ABI claim.'})
19
+ if __name__=='__main__':main()
scripts/qvm_transition_support.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Finite camera/map/event source execution with coherent byte copies."""
2
+ from qvm_exit_rules_support import E,CPOOL,POOL
3
+ from qvm_trace_support import resume
4
+ from qvm_byte_memory_support import read_bytes
5
+ T=E+0x30000
6
+ ENTITY=POOL+880*60
7
+ PCLIENT=CPOOL+6336*60
8
+ POSITION=34999612
9
+ ANGLES=34999624
10
+
11
+ def vector(m,a,values):
12
+ for j,v in enumerate(values):m[a+4*j]=v
13
+
14
+ def words(m,a,n):return [int.from_bytes(read_bytes(m,{},a+4*j,4),'little') for j in range(n)]
15
+ def run(ins,m,start,stop,frame,args=None,targets=(),handlers=None,boundaries=(),base=T):
16
+ for o,v in (args or {}).items():m[base+frame+o]=v
17
+ requests=[]
18
+ def capture(t):
19
+ def f(i,m,a):requests.append({'target':t,'arguments':a});return m,0,{'captured':True}
20
+ return f
21
+ hs={t:capture(t) for t in targets};hs.update(handlers or {})
22
+ initial=dict(m);m,e=resume(ins,start+1,stop,m,base,handlers=hs,boundaries=boundaries,repeated_calls=True,sync_child_words=True,coherent_memory=True,segment_limit=4096,limit=32768)
23
+ changes=[{'address':a,'before':v&0xffffffff,'after':m[a]&0xffffffff} for a,v in initial.items() if (m[a]&0xffffffff)!=(v&0xffffffff) and not T<=a<T+0x20000]
24
+ return m,{'return':e['return'],'requests':requests,'changes':changes,'execution':{k:e[k] for k in ['stop','trace_length','trace_sha256']}}
25
+
26
+ def classify(ins,m,a):
27
+ m,p=run(ins,m,33715,33740,12,a,base=T+0x1000)
28
+ return m,p['return'],{'actual_source_child':33715}
scripts/test_qvm_camera_place.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ class CameraTests(unittest.TestCase):
4
+ def test_exact_camera_words_and_untouched_indirected_client(self):
5
+ rows=json.loads(Path('docs/research/qvm-camera-place.json').read_text())['probes'];self.assertEqual(len(rows),72)
6
+ for p in rows:
7
+ a=p['input'];entity={str(o):0 for o in [4,8,156,160,180,460]};entity.update({str(92+4*j):v for j,v in enumerate(a['origin'])});self.assertEqual(p['entity'],entity)
8
+ expected=[dict(v) for v in p['clients_before']];c=expected[a['slot']]
9
+ c.update({str(20+4*j):v for j,v in enumerate(a['origin'])});c.update({str(152+4*j):v for j,v in enumerate(a['angles'])});c.update({'4':5,'32':0,'36':0,'40':0,'104':0});self.assertEqual(p['clients'],expected)
10
+ def test_no_children_or_unexpected_mutation_addresses(self):
11
+ for p in json.loads(Path('docs/research/qvm-camera-place.json').read_text())['probes']:self.assertEqual(p['requests'],[]);self.assertEqual(p['execution']['stop'],6715)
12
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -2244,3 +2244,8 @@ report scripts/analyze_rust_intermission_flow.py docs/research/rust-intermission
2244
  edge docs/research/rust-intermission-flow.json scripts/test_rust_intermission_flow.py
2245
  group rust-intermission-flow scripts/analyze_rust_intermission_flow.py
2246
  edge scripts/analyze_rust_intermission_flow.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
2244
  edge docs/research/rust-intermission-flow.json scripts/test_rust_intermission_flow.py
2245
  group rust-intermission-flow scripts/analyze_rust_intermission_flow.py
2246
  edge scripts/analyze_rust_intermission_flow.py scripts/analyze_qvm_resumer_audit.py
2247
+ report scripts/analyze_qvm_camera_place.py docs/research/qvm-camera-place.json
2248
+ edge docs/research/qvm-camera-place.json scripts/test_qvm_camera_place.py
2249
+ group camera-place scripts/analyze_qvm_camera_place.py
2250
+ edge scripts/analyze_qvm_camera_place.py scripts/analyze_qvm_resumer_audit.py
2251
+ edge scripts/qvm_transition_support.py scripts/analyze_qvm_resumer_audit.py