nmarshall commited on
Commit
f68606e
·
1 Parent(s): 459ec72

qvm: resolve interception child effects

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -919,3 +919,6 @@ Research progress: RE-751 [report](research/QVM_CROSS_CLIENT_CLEAR.md); original
919
 
920
 
921
  Research progress: RE-752 [report](research/QVM_PROTECTED_RESOLVED.md); original assets unchanged.
 
 
 
 
919
 
920
 
921
  Research progress: RE-752 [report](research/QVM_PROTECTED_RESOLVED.md); original assets unchanged.
922
+
923
+
924
+ Research progress: RE-753 [report](research/QVM_MODE10_RESOLVED.md); original assets unchanged.
docs/FINDINGS.md CHANGED
@@ -1265,3 +1265,6 @@ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEA
1265
 
1266
 
1267
  **RE-752 — Protected completion with actual scoring and recipient dispatch:** 152386 completion now executes actual205260 score mutation and6369 connected-recipient dispatch while retaining explicit rank/callback/event boundaries. [Evidence](research/QVM_PROTECTED_RESOLVED.md).
 
 
 
 
1265
 
1266
 
1267
  **RE-752 — Protected completion with actual scoring and recipient dispatch:** 152386 completion now executes actual205260 score mutation and6369 connected-recipient dispatch while retaining explicit rank/callback/event boundaries. [Evidence](research/QVM_PROTECTED_RESOLVED.md).
1268
+
1269
+
1270
+ **RE-753 — Complete interception with actual score statistics and record clearing:** 206128 now composes actual scoring, recipient dispatch, method counters and cross-client clearing for valid pool ID aliases. [Evidence](research/QVM_MODE10_RESOLVED.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1257,3 +1257,6 @@ Research progress: RE-751 [report](research/QVM_CROSS_CLIENT_CLEAR.md); full nat
1257
 
1258
 
1259
  Research progress: RE-752 [report](research/QVM_PROTECTED_RESOLVED.md); full native/platform/game scope remains open.
 
 
 
 
1257
 
1258
 
1259
  Research progress: RE-752 [report](research/QVM_PROTECTED_RESOLVED.md); full native/platform/game scope remains open.
1260
+
1261
+
1262
+ Research progress: RE-753 [report](research/QVM_MODE10_RESOLVED.md); full native/platform/game scope remains open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -1410,3 +1410,10 @@ Exactly ten task commits follow baseline `e1f7eb5a`. Each task passed focused `c
1410
  ## 2026-10-21 — RE-752 Protected completion with actual scoring and recipient dispatch
1411
 
1412
  152386 completion now executes actual205260 score mutation and6369 connected-recipient dispatch while retaining explicit rank/callback/event boundaries. Focused `cargo xtask test-group resolved-protected` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 153157 bytes. Full-suite validation is deferred to the tenth batch commit. Optional lifecycle child resolvers added; default source contracts retained. Original assets, Rust runtime and shared VM evaluator unchanged.
 
 
 
 
 
 
 
 
1410
  ## 2026-10-21 — RE-752 Protected completion with actual scoring and recipient dispatch
1411
 
1412
  152386 completion now executes actual205260 score mutation and6369 connected-recipient dispatch while retaining explicit rank/callback/event boundaries. Focused `cargo xtask test-group resolved-protected` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 153157 bytes. Full-suite validation is deferred to the tenth batch commit. Optional lifecycle child resolvers added; default source contracts retained. Original assets, Rust runtime and shared VM evaluator unchanged.
1413
+
1414
+
1415
+ ## 2026-10-21 — RE-753 Complete interception with actual score statistics and record clearing
1416
+
1417
+ 206128 now composes actual scoring, recipient dispatch, method counters and cross-client clearing for valid pool ID aliases. Focused `cargo xtask test-group resolved-mode10` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 597687 bytes. Full-suite validation is deferred to the tenth batch commit. Optional lifecycle resolvers and reusable clear snapshot address ownership changed. Default reports and actual child fixtures require focused shared-health regression; original assets and shared VM evaluator unchanged.
1418
+
1419
+ Additional RE-753 shared-health regression: `cargo xtask test-group health` passes92 Python tests with deterministic report regeneration. Prior tracked source/Rust reports remain unchanged; no full suite ran.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1300,3 +1300,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1300
 
1301
 
1302
  - [x] RE-752 Protected completion with actual scoring and recipient dispatch ([report](research/QVM_PROTECTED_RESOLVED.md)).
 
 
 
 
1300
 
1301
 
1302
  - [x] RE-752 Protected completion with actual scoring and recipient dispatch ([report](research/QVM_PROTECTED_RESOLVED.md)).
1303
+
1304
+
1305
+ - [x] RE-753 Complete interception with actual score statistics and record clearing ([report](research/QVM_MODE10_RESOLVED.md)).
docs/research/QVM_MODE10_RESOLVED.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Complete interception with actual score statistics and record clearing
2
+
3
+ RE-753. Reproduce with `python3 scripts/analyze_qvm_mode10_resolved.py`; validate with `cargo xtask test-group resolved-mode10`. See the [machine report](qvm-mode10-resolved.json).
4
+
5
+ Recovered child composition across28 method/team/paused/entry/in-use fixtures. Independent oracles verify root state, score deltas, counter offsets, notification recipients and exact clear footprints. Generalized clear snapshots to actual entity client pointers while preserving prior fixtures. Ranking, recipient callback internals, stat aggregation/reporting, logs, commands and original event allocation remain explicit unresolved boundaries.
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
@@ -855,3 +855,6 @@ The extension collector adds five focused tests for native tail calls, command-r
855
 
856
 
857
  [RE-752: Protected completion with actual scoring and recipient dispatch](QVM_PROTECTED_RESOLVED.md).
 
 
 
 
855
 
856
 
857
  [RE-752: Protected completion with actual scoring and recipient dispatch](QVM_PROTECTED_RESOLVED.md).
858
+
859
+
860
+ [RE-753: Complete interception with actual score statistics and record clearing](QVM_MODE10_RESOLVED.md).
docs/research/qvm-mode10-resolved.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_mode10_resolved.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Complete206128 with actual scoring/dispatch/stat/record-reset children."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source
6
+ from qvm_resolved_lifecycle_support import seed,extra,resolvers
7
+ from qvm_lifecycle_support import probe
8
+ from analyze_qvm import write_json
9
+
10
+ def main():
11
+ q,raw,h,ins=source();rows=[]
12
+ cases=[dict(method=d,attacker_team=t,paused=p) for d,t,p in itertools.product([12,20,22,25,34,48],[1,2],[0,1])]
13
+ cases += [dict(method=20,mode=3),dict(method=20,state=3),dict(method=20,blocked=1),dict(method=20,active=0)]
14
+ for a in cases:
15
+ m=seed(raw,h,**a);before=extra(m);m,p=probe(ins,m,206129,207154,resolvers=resolvers());p.update(input=a,extra_initial=before,extra_final=extra(m));rows.append(p)
16
+ write_json(Path('docs/research/qvm-mode10-resolved.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Complete206128 with actual205260/6439/278834/285486 and nested278733/33715. Ranking5864, recipient180087, aggregate/report279720/279586/285227/283622, logs/commands and event allocation remain captured/supplied. Finite nonnull original-pool ID1/2 aliases only.'})
17
+ if __name__=='__main__':main()
scripts/qvm_record_clear_support.py CHANGED
@@ -15,7 +15,7 @@ def seed(**a):
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}
 
15
  return m
16
 
17
  def clear(ins,m,args):
18
+ m[R+40]=args[8];addresses=sorted({c+2520+8*j+4*k for slot in range(64) for c in [m[POOL+880*slot+520]] if c for j in range(65) for k in [0,1]});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_mode10_resolved.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from test_qvm_mode10_complete import complete_expected
4
+ from test_qvm_method_stat_updates import expected as stats_expected
5
+ from qvm_record_clear_support import RPOOL
6
+ from qvm_lifecycle_support import CLIENT,A_CLIENT,TARGET,ATTACKER
7
+ from qvm_notification_support import POOL
8
+ class ResolvedMode10Tests(unittest.TestCase):
9
+ @classmethod
10
+ def setUpClass(cls):cls.ps=json.loads(Path('docs/research/qvm-mode10-resolved.json').read_text())['probes']
11
+ def test_root_state_and_independent_scores_matrix(self):
12
+ for p in self.ps:
13
+ a=p['input'];r,_=complete_expected(p,(0,1));self.assertEqual(p['final'],r,a);active=a.get('mode',10)==10 and a.get('state',0)!=3 and not a.get('blocked',0);same=a.get('attacker_team',1)==1;delta=0 if a.get('paused',0) else 1-2*same
14
+ e={**p['extra_initial'],'scores':[7,11+delta] if active else [7,11],'pair1':[[0,0],[0,0]] if active else [[11,21],[11,21]]};self.assertEqual(p['extra_final'],e,a)
15
+ def test_actual_stat_counter_and_record_clear_children(self):
16
+ for p in self.ps:
17
+ a=p['input'];children={c['call']['target']:c['effect'] for c in p['execution']['children']}
18
+ if 278834 not in children:continue
19
+ stats=children[278834];changes,calls=stats_expected({'method':a.get('method',12),'self':False,'initial':5});self.assertEqual(stats['changes'],changes,a);self.assertEqual([c['target'] for c in stats['requests']],calls)
20
+ clear=children[285486];self.assertEqual(clear['changes'],[{'address':c+2528+4*k,'before':11+10*k,'after':0} for c in [CLIENT,A_CLIENT] for k in [0,1]])
21
+ def test_actual_notification_and_unresolved_leaf_boundaries(self):
22
+ self.assertEqual(len(self.ps),28)
23
+ for p in self.ps:
24
+ a=p['input'];children={c['call']['target']:c['effect'] for c in p['execution']['children']}
25
+ if 6439 in children:self.assertEqual([r['arguments'] for r in children[6439]['requests']],[{'8':TARGET,'12':ATTACKER,'16':POOL+880*j} for j in [1,2]] if a.get('active',1) else [])
26
+ self.assertEqual(p['execution']['stop'],207154)
27
+ self.assertFalse({205260,6439,278834,285486}&{r['target'] for r in p['effects']['requests']})
28
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -1239,3 +1239,6 @@ group record-clear scripts/analyze_qvm_cross_client_clear.py
1239
  report scripts/analyze_qvm_protected_resolved.py docs/research/qvm-protected-resolved.json
1240
  edge docs/research/qvm-protected-resolved.json scripts/test_qvm_protected_resolved.py
1241
  group resolved-protected scripts/analyze_qvm_protected_resolved.py
 
 
 
 
1239
  report scripts/analyze_qvm_protected_resolved.py docs/research/qvm-protected-resolved.json
1240
  edge docs/research/qvm-protected-resolved.json scripts/test_qvm_protected_resolved.py
1241
  group resolved-protected scripts/analyze_qvm_protected_resolved.py
1242
+ report scripts/analyze_qvm_mode10_resolved.py docs/research/qvm-mode10-resolved.json
1243
+ edge docs/research/qvm-mode10-resolved.json scripts/test_qvm_mode10_resolved.py
1244
+ group resolved-mode10 scripts/analyze_qvm_mode10_resolved.py