nmarshall commited on
Commit
ec10c78
·
1 Parent(s): 3bc8c35

qvm: recover cross-client clearing

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -913,3 +913,6 @@ Research progress: RE-749 [report](research/QVM_METHOD_STAT_SLOTS.md); original
913
 
914
 
915
  Research progress: RE-750 [report](research/QVM_METHOD_STAT_UPDATES.md); original assets unchanged.
 
 
 
 
913
 
914
 
915
  Research progress: RE-750 [report](research/QVM_METHOD_STAT_UPDATES.md); original assets unchanged.
916
+
917
+
918
+ Research progress: RE-751 [report](research/QVM_CROSS_CLIENT_CLEAR.md); original assets unchanged.
docs/FINDINGS.md CHANGED
@@ -1259,3 +1259,6 @@ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEA
1259
 
1260
 
1261
  **RE-750 — Complete method counter mutation aliases and notifications:** 278834 updates per-method or fallback counters with wrapping increments, distinct self cases, and ordered aggregate/report requests. [Evidence](research/QVM_METHOD_STAT_UPDATES.md).
 
 
 
 
1259
 
1260
 
1261
  **RE-750 — Complete method counter mutation aliases and notifications:** 278834 updates per-method or fallback counters with wrapping increments, distinct self cases, and ordered aggregate/report requests. [Evidence](research/QVM_METHOD_STAT_UPDATES.md).
1262
+
1263
+
1264
+ **RE-751 — Complete cross client record clearing and inclusive index64:** 285486 clears two words across nonnull client records in64 entity slots; its source gate accepts index64 inclusively. [Evidence](research/QVM_CROSS_CLIENT_CLEAR.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1251,3 +1251,6 @@ Research progress: RE-749 [report](research/QVM_METHOD_STAT_SLOTS.md); full nati
1251
 
1252
 
1253
  Research progress: RE-750 [report](research/QVM_METHOD_STAT_UPDATES.md); full native/platform/game scope remains open.
 
 
 
 
1251
 
1252
 
1253
  Research progress: RE-750 [report](research/QVM_METHOD_STAT_UPDATES.md); full native/platform/game scope remains open.
1254
+
1255
+
1256
+ Research progress: RE-751 [report](research/QVM_CROSS_CLIENT_CLEAR.md); full native/platform/game scope remains open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -1400,3 +1400,8 @@ Exactly ten task commits follow baseline `e1f7eb5a`. Each task passed focused `c
1400
  ## 2026-10-21 — RE-750 Complete method counter mutation aliases and notifications
1401
 
1402
  278834 updates per-method or fallback counters with wrapping increments, distinct self cases, and ordered aggregate/report requests. Focused `cargo xtask test-group stat-updates` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 956970 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
 
 
 
 
 
 
1400
  ## 2026-10-21 — RE-750 Complete method counter mutation aliases and notifications
1401
 
1402
  278834 updates per-method or fallback counters with wrapping increments, distinct self cases, and ordered aggregate/report requests. Focused `cargo xtask test-group stat-updates` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 956970 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
1403
+
1404
+
1405
+ ## 2026-10-21 — RE-751 Complete cross client record clearing and inclusive index64
1406
+
1407
+ 285486 clears two words across nonnull client records in64 entity slots; its source gate accepts index64 inclusively. Focused `cargo xtask test-group record-clear` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 137753 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1294,3 +1294,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1294
 
1295
 
1296
  - [x] RE-750 Complete method counter mutation aliases and notifications ([report](research/QVM_METHOD_STAT_UPDATES.md)).
 
 
 
 
1294
 
1295
 
1296
  - [x] RE-750 Complete method counter mutation aliases and notifications ([report](research/QVM_METHOD_STAT_UPDATES.md)).
1297
+
1298
+
1299
+ - [x] RE-751 Complete cross client record clearing and inclusive index64 ([report](research/QVM_CROSS_CLIENT_CLEAR.md)).
docs/research/QVM_CROSS_CLIENT_CLEAR.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Complete cross client record clearing and inclusive index64
2
+
3
+ RE-751. Reproduce with `python3 scripts/analyze_qvm_cross_client_clear.py`; validate with `cargo xtask test-group record-clear`. See the [machine report](qvm-cross-client-clear.json).
4
+
5
+ Recovered complete285486 with actual33715 over40 mode/index/sparse/dense fixtures. Exact write footprints verify no other seeded record word changes, including neighbors. Index64 clears client3032/3036 and is retained for fidelity; it is not silently narrowed to63. Matrix ownership, live IDs and original native parity remain open.
6
+
7
+ No original executable/full VM/native world collision or rendering runs. Supplied callback/native responses and fixture domains remain explicit; complete macOS/Linux Rust/Bevy/Solari gameplay remains open.
docs/research/README.md CHANGED
@@ -849,3 +849,6 @@ The extension collector adds five focused tests for native tail calls, command-r
849
 
850
 
851
  [RE-750: Complete method counter mutation aliases and notifications](QVM_METHOD_STAT_UPDATES.md).
 
 
 
 
849
 
850
 
851
  [RE-750: Complete method counter mutation aliases and notifications](QVM_METHOD_STAT_UPDATES.md).
852
+
853
+
854
+ [RE-751: Complete cross client record clearing and inclusive index64](QVM_CROSS_CLIENT_CLEAR.md).
docs/research/qvm-cross-client-clear.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_cross_client_clear.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Complete285486 index/mode gates and exact cross-client write footprint."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source
6
+ from qvm_record_clear_support import seed,clear,RPOOL
7
+ from qvm_notification_support import POOL
8
+ from analyze_qvm import write_json
9
+
10
+ def main():
11
+ q,raw,h,ins=source();rows=[]
12
+ for mode,index,dense in itertools.product([3,9,10,11],[-1,0,63,64,65],[False,True]):
13
+ a=dict(mode=mode,index=index,dense=dense);m=seed(**a);slots=[j for j in range(64) if m[POOL+880*j+520]];_,_,p=clear(ins,m,{8:index});p.update(input=a,client_slots=slots);rows.append(p)
14
+ write_json(Path('docs/research/qvm-cross-client-clear.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Complete285486 with actual33715,64 entity slots and sparse/dense client pointers. Accepts index64 (inclusive source bound), clearing pair at3032/3036. Fixture record values supplied; live matrix ownership and native parity remain open.'})
15
+ if __name__=='__main__':main()
scripts/qvm_record_clear_support.py ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """285486 cross-client pair clearing, including accepted index64."""
2
+ from qvm_health_effects_support import H
3
+ from qvm_notification_support import POOL
4
+ from qvm_trace_support import resume
5
+ from qvm_contact_support import predicate
6
+ R=H+0x110000
7
+ RPOOL=H+0x300000
8
+
9
+ def seed(**a):
10
+ m={34090788:a.get('mode',10)};slots=list(range(64)) if a.get('dense',False) else [0,3,63]
11
+ for j in range(64):
12
+ c=RPOOL+j*6336 if j in slots else 0;m[POOL+880*j+520]=c
13
+ if c:
14
+ for k in range(65):m[c+2520+8*k]=10000+j*256+2*k;m[c+2524+8*k]=10001+j*256+2*k
15
+ return m
16
+
17
+ def clear(ins,m,args):
18
+ m[R+40]=args[8];addresses=sorted(a for a in m if RPOOL<=a<RPOOL+64*6336);before={a:m[a]&0xffffffff for a in addresses}
19
+ m,e=resume(ins,285487,285578,m,R,handlers={33715:predicate})
20
+ changes=[{'address':a,'before':v,'after':m[a]&0xffffffff} for a,v in before.items() if v!=(m[a]&0xffffffff)]
21
+ return m,0,{'arguments':args,'changes':changes,'execution':e}
scripts/test_qvm_cross_client_clear.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from qvm_record_clear_support import RPOOL
4
+ class CrossClientClearTests(unittest.TestCase):
5
+ @classmethod
6
+ def setUpClass(cls):cls.ps=json.loads(Path('docs/research/qvm-cross-client-clear.json').read_text())['probes']
7
+ def test_independent_exact_write_footprint_and_values(self):
8
+ for p in self.ps:
9
+ a=p['input'];active=0<=a['index']<=64 and a['mode']>=3 and a['mode'] not in [9,11];expected=[]
10
+ if active:
11
+ for j in p['client_slots']:
12
+ for k in [0,1]:expected.append({'address':RPOOL+j*6336+2520+8*a['index']+4*k,'before':10000+j*256+2*a['index']+k,'after':0})
13
+ self.assertEqual(p['changes'],expected,a)
14
+ def test_inclusive64_and_sparse_slots(self):
15
+ self.assertEqual(len(self.ps),40);self.assertTrue(any(p['input']['index']==64 and p['changes'] for p in self.ps));self.assertEqual({len(p['client_slots']) for p in self.ps},{3,64})
16
+ def test_only_actual_mode_predicate_child_and_complete_exit(self):
17
+ for p in self.ps:
18
+ self.assertEqual(p['execution']['stop'],285578);self.assertEqual([c['target'] for c in p['execution']['calls']],[33715] if 0<=p['input']['index']<=64 else [])
19
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -1233,3 +1233,6 @@ group stat-slots scripts/analyze_qvm_method_stat_slots.py
1233
  report scripts/analyze_qvm_method_stat_updates.py docs/research/qvm-method-stat-updates.json
1234
  edge docs/research/qvm-method-stat-updates.json scripts/test_qvm_method_stat_updates.py
1235
  group stat-updates scripts/analyze_qvm_method_stat_updates.py
 
 
 
 
1233
  report scripts/analyze_qvm_method_stat_updates.py docs/research/qvm-method-stat-updates.json
1234
  edge docs/research/qvm-method-stat-updates.json scripts/test_qvm_method_stat_updates.py
1235
  group stat-updates scripts/analyze_qvm_method_stat_updates.py
1236
+ report scripts/analyze_qvm_cross_client_clear.py docs/research/qvm-cross-client-clear.json
1237
+ edge docs/research/qvm-cross-client-clear.json scripts/test_qvm_cross_client_clear.py
1238
+ group record-clear scripts/analyze_qvm_cross_client_clear.py