qvm: integrate full persistence into map transition
Browse files- 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_NORMAL_MAP_FILES.md +7 -0
- docs/research/README.md +3 -0
- docs/research/qvm-normal-map-files.json +0 -0
- scripts/analyze_qvm_normal_map_files.py +29 -0
- scripts/test_qvm_normal_map_files.py +21 -0
- xtask/checks.tsv +5 -0
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
|