nmarshall commited on
Commit
ec600cd
·
1 Parent(s): d9b6d88

qvm: integrate full persistence into map transition

Browse files
docs/FINDINGS.md CHANGED
@@ -1721,3 +1721,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
1721
 
1722
 
1723
  **RE-907:** Rust matches48 original249007 compositions with both actual saved-file and session-cvar children. Typed file/cvar actions preserve per-client order and shared selector/ring advances, and invalid domains preserve selector state. Native open answers remain supplied; no actual engine file/cvar dispatch or map reload is claimed. [Evidence](research/RUST_POST_MAP_FILES.md).
 
 
 
 
1721
 
1722
 
1723
  **RE-907:** Rust matches48 original249007 compositions with both actual saved-file and session-cvar children. Typed file/cvar actions preserve per-client order and shared selector/ring advances, and invalid domains preserve selector state. Native open answers remain supplied; no actual engine file/cvar dispatch or map reload is claimed. [Evidence](research/RUST_POST_MAP_FILES.md).
1724
+
1725
+
1726
+ **RE-908:** 64 actual6939 normal transitions compose122230/7188/249007/246746/246963. File actions and per-client session writes occur between score/global resets and the final connection2-to1 scan; reset maximum and level count vary independently. Engine-map bytes are coherent across map-command and saved-file paths. Bot children, map-list fallback221662, native IO and actual command dispatch remain supplied/captured boundaries. [Evidence](research/QVM_NORMAL_MAP_FILES.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1758,3 +1758,6 @@ RE-906: 48 actual249007/246746/246963 compositions execute both post-map childre
1758
 
1759
 
1760
  RE-907: Rust matches48 original249007 compositions with both actual saved-file and session-cvar children. Typed file/cvar actions preserve per-client order and shared selector/ring advances, and invalid domains preserve selector state. Native open answers remain supplied; no actual engine file/cvar dispatch or map reload is claimed. Full runtime completion remains open. [Evidence](research/RUST_POST_MAP_FILES.md).
 
 
 
 
1758
 
1759
 
1760
  RE-907: Rust matches48 original249007 compositions with both actual saved-file and session-cvar children. Typed file/cvar actions preserve per-client order and shared selector/ring advances, and invalid domains preserve selector state. Native open answers remain supplied; no actual engine file/cvar dispatch or map reload is claimed. Full runtime completion remains open. [Evidence](research/RUST_POST_MAP_FILES.md).
1761
+
1762
+
1763
+ RE-908: 64 actual6939 normal transitions compose122230/7188/249007/246746/246963. File actions and per-client session writes occur between score/global resets and the final connection2-to1 scan; reset maximum and level count vary independently. Engine-map bytes are coherent across map-command and saved-file paths. Bot children, map-list fallback221662, native IO and actual command dispatch remain supplied/captured boundaries. Full runtime completion remains open. [Evidence](research/QVM_NORMAL_MAP_FILES.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2255,3 +2255,8 @@ Rust matches96 original247520 initialization/load/write cases, preserving raw by
2255
  ## 2026-10-28 — RE-907 Rust complete post-map persistence intentions
2256
 
2257
  Rust matches48 original249007 compositions with both actual saved-file and session-cvar children. Typed file/cvar actions preserve per-client order and shared selector/ring advances, and invalid domains preserve selector state. Native open answers remain supplied; no actual engine file/cvar dispatch or map reload is claimed. Focused `cargo xtask test-group rust-post-map-files` passes (9 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.
 
 
 
 
 
 
2255
  ## 2026-10-28 — RE-907 Rust complete post-map persistence intentions
2256
 
2257
  Rust matches48 original249007 compositions with both actual saved-file and session-cvar children. Typed file/cvar actions preserve per-client order and shared selector/ring advances, and invalid domains preserve selector state. Native open answers remain supplied; no actual engine file/cvar dispatch or map reload is claimed. Focused `cargo xtask test-group rust-post-map-files` passes (9 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.
2258
+
2259
+
2260
+ ## 2026-10-28 — RE-908 Original normal transition with both persistence children
2261
+
2262
+ 64 actual6939 normal transitions compose122230/7188/249007/246746/246963. File actions and per-client session writes occur between score/global resets and the final connection2-to1 scan; reset maximum and level count vary independently. Engine-map bytes are coherent across map-command and saved-file paths. Bot children, map-list fallback221662, native IO and actual command dispatch remain supplied/captured boundaries. Focused `cargo xtask test-group qvm-normal-map-files` passes (4 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
@@ -1795,3 +1795,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1795
 
1796
 
1797
  - [x] RE-907 Rust complete post-map persistence intentions ([evidence](research/RUST_POST_MAP_FILES.md)).
 
 
 
 
1795
 
1796
 
1797
  - [x] RE-907 Rust complete post-map persistence intentions ([evidence](research/RUST_POST_MAP_FILES.md)).
1798
+
1799
+
1800
+ - [x] RE-908 Original normal transition with both persistence children ([evidence](research/QVM_NORMAL_MAP_FILES.md)).
docs/research/QVM_NORMAL_MAP_FILES.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Original normal transition with both persistence children
2
+
3
+ RE-908. Reproduce with `python3 scripts/analyze_qvm_normal_map_files.py`; focused validation: `cargo xtask test-group qvm-normal-map-files`. [Machine report](qvm-normal-map-files.json).
4
+
5
+ 64 actual6939 normal transitions compose122230/7188/249007/246746/246963. File actions and per-client session writes occur between score/global resets and the final connection2-to1 scan; reset maximum and level count vary independently. Engine-map bytes are coherent across map-command and saved-file paths. Bot children, map-list fallback221662, native IO and actual command dispatch remain supplied/captured boundaries.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/README.md CHANGED
@@ -1330,3 +1330,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1330
 
1331
 
1332
  [RE-907: Rust complete post-map persistence intentions](RUST_POST_MAP_FILES.md).
 
 
 
 
1330
 
1331
 
1332
  [RE-907: Rust complete post-map persistence intentions](RUST_POST_MAP_FILES.md).
1333
+
1334
+
1335
+ [RE-908: Original normal transition with both persistence children](QVM_NORMAL_MAP_FILES.md).
docs/research/qvm-normal-map-files.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_normal_map_files.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Execute the verified original QVM body; native effects are supplied or captured."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source,constants
6
+ from qvm_camera_world_support import B,run
7
+ from qvm_exit_rules_support import POOL,CPOOL
8
+ from analyze_qvm_acceleration import word,number
9
+ from analyze_qvm import write_json
10
+
11
+ def main():
12
+ q,raw,h,ins=source();rows=[]
13
+ from qvm_persistence_support import environment
14
+ from qvm_lifecycle_support import post_full
15
+ from qvm_session_support import records
16
+ from qvm_map_commands_support import map_seed,normal_flow,put_string,CURSOR,ENABLED,LIMIT,WRITE,MIRROR
17
+ from qvm_transition_support import state_seed,state_words
18
+ from qvm_string_memory_support import cstring
19
+ for mode,maximum,count,enabled,opened,override in itertools.product([0,9],[0,4],[0,4],[0,1],[False,True],[False,True]):
20
+ m,b=environment(raw,h);mm,bb=map_seed(raw,h,b'cycle' if override else b'');m.update(mm);b.update(bb);m.update(state_seed(mode=mode,phase=2,first=5,second=-7));m.update({CURSOR:1,ENABLED:1,LIMIT:2,34089604:maximum,34064148:enabled});put_string(m,b,WRITE,b'previous.cfg',128);clients=[];infos=[];names=[];handles=[]
21
+ for j in range(4):
22
+ vals,indices,flags=records(m,j,count,0,0);row=[100+j,200+j,300+j,[2,1,2,0][j],7+j];origin=[word(v) for v in ([0]*6 if j==0 else [1.25+j,-2.5,3,90,180,-45.5])];info=b'\\cl_guid\\ID'+str(j).encode();name=b'player'+str(j).encode();handle=7+j if opened else 0;put_string(m,b,CPOOL+6336*j+504,name)
23
+ for k,v in enumerate(origin):m[CPOOL+6336*j+3716+4*k]=v
24
+ for o,v in zip([248,304,308,468,696],row):m[CPOOL+6336*j+o]=v
25
+ clients.append(dict(row=row,values=vals,origin=origin));infos.append(info);names.append(name);handles.append(handle)
26
+ before=state_words(m);m,p,b=normal_flow(ins,m,b,b'',b'ut4_test',0,post_child=lambda i,m,bs:post_full(i,m,bs,infos,names,handles));p.update(input=dict(mode=mode,maximum=maximum,count=count,enabled=enabled,opened=opened,override=override,clients=clients,indices=indices,flags=flags,infos=[v.hex() for v in infos],names=[v.hex() for v in names],handles=handles),before=before,state=state_words(m),clients_after=[[m[CPOOL+6336*j+o]&0xffffffff for o in [248,304,308,468,696]] for j in range(4)],ring=m[23708]&0xffffffff,info_ring=m[23712]&0xffffffff,mirror=cstring(m,b,MIRROR).hex());rows.append(p)
27
+
28
+ write_json(Path('docs/research/qvm-normal-map-files.json'),{'source':q['source'],'sha256':q['sha256'],'root':6939,'probes':rows,'limits':'64 actual6939 normal transitions compose122230/7188/249007/246746/246963. File actions and per-client session writes occur between score/global resets and the final connection2-to1 scan; reset maximum and level count vary independently. Engine-map bytes are coherent across map-command and saved-file paths. Bot children, map-list fallback221662, native IO and actual command dispatch remain supplied/captured boundaries.'})
29
+ if __name__=='__main__':main()
scripts/test_qvm_normal_map_files.py ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ class OriginalTests(unittest.TestCase):
4
+ def test_instruction_results(self):
5
+ rows=json.loads(Path('docs/research/qvm-normal-map-files.json').read_text())['probes']
6
+ self.assertEqual(len(rows),64)
7
+ baseline=json.loads(Path('docs/research/qvm-post-map-files.json').read_text())['probes']
8
+ for p in rows:
9
+ a=p['input'];old=next(v for v in baseline if all(v['input'][k]==a[k] for k in ['mode','count','enabled','opened']) and v['input']['pattern']==0)
10
+ for k in ['calls','files','sets','actions']:self.assertEqual(p['parts']['post'][k],old[k])
11
+ c=[list(v['row']) for v in a['clients']]
12
+ for row in c[:a['maximum']]:
13
+ if row[3]==2:
14
+ row[0]=0
15
+ if a['mode']==9:row[1]=row[2]=0
16
+ self.assertEqual(p['middle'],[{str(k):v for k,v in zip([248,304,308,468,696],row)} for row in c])
17
+ for row in c[:a['maximum']]:
18
+ if row[3]==2:row[3]=1
19
+ self.assertEqual(p['clients_after'],c);state=dict(p['before']);state.update(round=0,blocked=0,first=0,second=0);self.assertEqual(p['state'],state);self.assertEqual(p['ring'],old['ring']+int(a['override']));self.assertEqual(p['info_ring'],old['info_ring']);self.assertEqual(p['roots'],[122230,7188,249007])
20
+
21
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -2840,3 +2840,8 @@ report scripts/analyze_rust_post_map_files.py docs/research/rust-post-map-files.
2840
  edge docs/research/rust-post-map-files.json scripts/test_rust_post_map_files.py
2841
  group rust-post-map-files scripts/analyze_rust_post_map_files.py
2842
  edge scripts/analyze_rust_post_map_files.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
2840
  edge docs/research/rust-post-map-files.json scripts/test_rust_post_map_files.py
2841
  group rust-post-map-files scripts/analyze_rust_post_map_files.py
2842
  edge scripts/analyze_rust_post_map_files.py scripts/analyze_qvm_resumer_audit.py
2843
+ edge docs/research/qvm-post-map-files.json scripts/test_qvm_normal_map_files.py
2844
+ report scripts/analyze_qvm_normal_map_files.py docs/research/qvm-normal-map-files.json
2845
+ edge docs/research/qvm-normal-map-files.json scripts/test_qvm_normal_map_files.py
2846
+ group qvm-normal-map-files scripts/analyze_qvm_normal_map_files.py
2847
+ edge scripts/analyze_qvm_normal_map_files.py scripts/analyze_qvm_resumer_audit.py