nmarshall commited on
Commit
50ed27d
·
1 Parent(s): 78e7b7c

qvm: recover recent record awards

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -940,3 +940,6 @@ Research progress: RE-759 [report](research/QVM_STAT_RATIOS.md); original assets
940
 
941
 
942
  Research progress: RE-760 [report](research/QVM_TEAM_COUNTERS.md); original assets unchanged.
 
 
 
 
940
 
941
 
942
  Research progress: RE-760 [report](research/QVM_TEAM_COUNTERS.md); original assets unchanged.
943
+
944
+
945
+ Research progress: RE-761 [report](research/QVM_RECENT_AWARDS.md); original assets unchanged.
docs/FINDINGS.md CHANGED
@@ -1286,3 +1286,6 @@ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEA
1286
 
1287
 
1288
  **RE-760 — Complete same team aggregate counters and participant gates:** 279720 increments first-client2444 and second-client2516 only for distinct same-team clients in supported modes. [Evidence](research/QVM_TEAM_COUNTERS.md).
 
 
 
 
1286
 
1287
 
1288
  **RE-760 — Complete same team aggregate counters and participant gates:** 279720 increments first-client2444 and second-client2516 only for distinct same-team clients in supported modes. [Evidence](research/QVM_TEAM_COUNTERS.md).
1289
+
1290
+
1291
+ **RE-761 — Complete recent record awards timestamp gates and index64 alias:** 285227 awards distinct enemy recipients when record count is at least40 and wrapped signed age is at most30000; index64 aliases the award word. [Evidence](research/QVM_RECENT_AWARDS.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1281,3 +1281,6 @@ Research progress: RE-759 [report](research/QVM_STAT_RATIOS.md); full native/pla
1281
 
1282
 
1283
  Research progress: RE-760 [report](research/QVM_TEAM_COUNTERS.md); full native/platform/game scope remains open.
 
 
 
 
1281
 
1282
 
1283
  Research progress: RE-760 [report](research/QVM_TEAM_COUNTERS.md); full native/platform/game scope remains open.
1284
+
1285
+
1286
+ Research progress: RE-761 [report](research/QVM_RECENT_AWARDS.md); full native/platform/game scope remains open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -1454,3 +1454,8 @@ Exactly ten task commits follow baseline `ae4d61e7`. Each task passed focused `c
1454
  ## 2026-10-21 — RE-760 Complete same team aggregate counters and participant gates
1455
 
1456
  279720 increments first-client2444 and second-client2516 only for distinct same-team clients in supported modes. Focused `cargo xtask test-group team-counters` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 77671 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
 
 
 
 
 
 
1454
  ## 2026-10-21 — RE-760 Complete same team aggregate counters and participant gates
1455
 
1456
  279720 increments first-client2444 and second-client2516 only for distinct same-team clients in supported modes. Focused `cargo xtask test-group team-counters` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 77671 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
1457
+
1458
+
1459
+ ## 2026-10-21 — RE-761 Complete recent record awards timestamp gates and index64 alias
1460
+
1461
+ 285227 awards distinct enemy recipients when record count is at least40 and wrapped signed age is at most30000; index64 aliases the award word. Focused `cargo xtask test-group recent-awards` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 238290 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
@@ -1324,3 +1324,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1324
 
1325
 
1326
  - [x] RE-760 Complete same team aggregate counters and participant gates ([report](research/QVM_TEAM_COUNTERS.md)).
 
 
 
 
1324
 
1325
 
1326
  - [x] RE-760 Complete same team aggregate counters and participant gates ([report](research/QVM_TEAM_COUNTERS.md)).
1327
+
1328
+
1329
+ - [x] RE-761 Complete recent record awards timestamp gates and index64 alias ([report](research/QVM_RECENT_AWARDS.md)).
docs/research/QVM_RECENT_AWARDS.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Complete recent record awards timestamp gates and index64 alias
2
+
3
+ RE-761. Reproduce with `python3 scripts/analyze_qvm_recent_awards.py`; validate with `cargo xtask test-group recent-awards`. See the [machine report](qvm-recent-awards.json).
4
+
5
+ Recovered complete285227 with actual33715 across68 fixtures, including equality boundaries, future timestamps, signed clock wrap, null offender client and wrapping awards. Original source accepts index64, where pair count and award counter are the same3032 word. No nonnegative age gate is invented. Logging7259 and live matrix/offender ownership remain unresolved.
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
@@ -876,3 +876,6 @@ The extension collector adds five focused tests for native tail calls, command-r
876
 
877
 
878
  [RE-760: Complete same team aggregate counters and participant gates](QVM_TEAM_COUNTERS.md).
 
 
 
 
876
 
877
 
878
  [RE-760: Complete same team aggregate counters and participant gates](QVM_TEAM_COUNTERS.md).
879
+
880
+
881
+ [RE-761: Complete recent record awards timestamp gates and index64 alias](QVM_RECENT_AWARDS.md).
docs/research/qvm-recent-awards.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_recent_awards.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Complete recent-record award gates with source index64 aliasing."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source
6
+ from qvm_recent_award_support import seed,award
7
+ from analyze_qvm import write_json
8
+
9
+ def main():
10
+ q,raw,h,ins=source();rows=[]
11
+ cases=[dict(mode=m,index=i,count=c,age=t) for m,i,c,t in itertools.product([3,9,10,11],[-1,1,64,65],[39,40],[30000,30001])]
12
+ cases += [dict(index=1,count=40,age=-1,initial=0xffffffff),dict(index=1,actor_client=False),dict(index=1,count=0xffffffff),dict(index=1,now=-2147483648,age=30000)]
13
+ for a in cases:
14
+ _,_,p=award(ins,seed(**a),{8:a['index'],12:2});p['input']=a;rows.append(p)
15
+ write_json(Path('docs/research/qvm-recent-awards.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Complete285227 with actual33715 across68 finite mode/index/count/time/client fixtures. Logs7259 captured. Source index64 aliases pair-count and award word3032; lifetime ownership, invalid offender IDs and original runtime parity remain open.'})
16
+ if __name__=='__main__':main()
scripts/qvm_recent_award_support.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """285227 finite cross-client award record and timestamp contracts."""
2
+ from qvm_health_effects_support import H
3
+ from qvm_notification_support import POOL
4
+ from qvm_record_clear_support import RPOOL
5
+ from qvm_trace_support import resume,captured
6
+ from qvm_contact_support import predicate
7
+ A=H+0x160000
8
+ SLOTS=[0,1,2,3,64]
9
+
10
+ def seed(**a):
11
+ index=a.get('index',1);key=index if 0<=index<=64 else 0;now=a.get('now',40000);m={34090788:a.get('mode',10),34992532:now}
12
+ for j in range(65):
13
+ c=RPOOL+j*6336 if j in SLOTS and not(j==2 and not a.get('actor_client',True)) else 0;m[POOL+880*j+520]=c;m[POOL+880*j+168]=j
14
+ if c:m.update({c+3096:1 if j in [1,64] else 2,c+3032:a.get('initial',7),c+2520+8*key:a.get('count',40),c+2524+8*key:(now-a.get('age',30000))&0xffffffff})
15
+ return m
16
+
17
+ def snapshot(m,index):
18
+ key=index if 0<=index<=64 else 0;rows=[]
19
+ for j in SLOTS:
20
+ c=m[POOL+880*j+520]
21
+ rows.append({'slot':j,'present':bool(c),'team':m[c+3096] if c else None,'awards':m[c+3032]&0xffffffff if c else None,'count':m[c+2520+8*key]&0xffffffff if c else None,'when':m[c+2524+8*key]&0xffffffff if c else None})
22
+ return rows
23
+
24
+ def award(ins,m,args):
25
+ m[A+112]=args[8];m[A+116]=args[12];before=snapshot(m,args[8]);requests=[];m,e=resume(ins,285228,285484,m,A,handlers={33715:predicate,7259:captured(7259,requests)})
26
+ return m,0,{'arguments':args,'initial':before,'final':snapshot(m,args[8]),'requests':requests,'execution':e}
scripts/test_qvm_recent_awards.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from test_qvm_stat_totals import signed
4
+
5
+ def awarded(p):
6
+ a=p['input'];mode=a.get('mode',10);i=a['index'];now=a.get('now',40000);rows={r['slot']:r for r in p['initial']};out=[]
7
+ if not(0<=i<=64 and mode>=3 and mode not in [9,11] and rows[i]['present']):return out
8
+ for j,r in rows.items():
9
+ if j>=64 or not r['present'] or j==2 or r['team']==rows[i]['team']:continue
10
+ if signed(r['count'])<40 or signed(now-r['when'])>30000 or not rows[2]['present']:continue
11
+ out.append(j)
12
+ return out
13
+ class RecentAwardTests(unittest.TestCase):
14
+ @classmethod
15
+ def setUpClass(cls):cls.ps=json.loads(Path('docs/research/qvm-recent-awards.json').read_text())['probes']
16
+ def test_independent_awards_and_aliasing(self):
17
+ for p in self.ps:
18
+ ids=awarded(p);r=[dict(row) for row in p['initial']]
19
+ for row in r:
20
+ if row['slot'] in ids:row['awards']=(row['awards']+1)&0xffffffff
21
+ if p['input']['index']==64 and row['slot'] in ids:row['count']=row['awards']
22
+ self.assertEqual(p['final'],r,p['input']);self.assertEqual(len(p['requests']),len(ids))
23
+ def test_log_identifiers_and_exact_exit(self):
24
+ for p in self.ps:
25
+ for c,j in zip(p['requests'],awarded(p)):self.assertEqual(c['target'],7259);self.assertEqual({k:c['arguments'][k] for k in ['8','12','16','20']},{'8':95461,'12':j,'16':2,'20':p['input']['index']})
26
+ self.assertEqual(p['execution']['stop'],285484)
27
+ def test_threshold_wrap_and_index64_domains(self):
28
+ self.assertEqual(len(self.ps),68);self.assertTrue(any(p['input']['index']==64 and p['requests'] for p in self.ps));self.assertTrue(any(p['input'].get('initial')==0xffffffff and p['requests'] for p in self.ps))
29
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -1281,3 +1281,6 @@ group stat-ratios scripts/analyze_qvm_stat_ratios.py
1281
  report scripts/analyze_qvm_team_counters.py docs/research/qvm-team-counters.json
1282
  edge docs/research/qvm-team-counters.json scripts/test_qvm_team_counters.py
1283
  group team-counters scripts/analyze_qvm_team_counters.py
 
 
 
 
1281
  report scripts/analyze_qvm_team_counters.py docs/research/qvm-team-counters.json
1282
  edge docs/research/qvm-team-counters.json scripts/test_qvm_team_counters.py
1283
  group team-counters scripts/analyze_qvm_team_counters.py
1284
+ report scripts/analyze_qvm_recent_awards.py docs/research/qvm-recent-awards.json
1285
+ edge docs/research/qvm-recent-awards.json scripts/test_qvm_recent_awards.py
1286
+ group recent-awards scripts/analyze_qvm_recent_awards.py