nmarshall commited on
Commit
35717f5
·
1 Parent(s): b597a58

qvm: recover exit log publication

Browse files
docs/FINDINGS.md CHANGED
@@ -1517,3 +1517,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
1517
 
1518
 
1519
  **RE-839:** Rust matches 39 original begin-transition cases, preserving timestamp guard semantics, fallback IDs, entity-client field clear and preparation/slow/respawn/move/publication order. Native work stays typed effects; invalid counts reject before mutation. [Evidence](research/RUST_INTERMISSION_BEGIN.md).
 
 
 
 
1517
 
1518
 
1519
  **RE-839:** Rust matches 39 original begin-transition cases, preserving timestamp guard semantics, fallback IDs, entity-client field clear and preparation/slow/respawn/move/publication order. Native work stays typed effects; invalid counts reject before mutation. [Evidence](research/RUST_INTERMISSION_BEGIN.md).
1520
+
1521
+
1522
+ **RE-840:** 83 original 7367 cases recover Exit header, pending now−50, publication/configstring22 ordering, team score log, signed ping clamp and at most32 ranked connected nonspectator rows. Verified original format strings are recorded. Logging, publication and syscall effects remain captured. [Evidence](research/QVM_EXIT_LOG.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1533,3 +1533,6 @@ RE-838: 39 original 6825 cases recover the once-only blocked guard, clock assign
1533
 
1534
 
1535
  RE-839: Rust matches 39 original begin-transition cases, preserving timestamp guard semantics, fallback IDs, entity-client field clear and preparation/slow/respawn/move/publication order. Native work stays typed effects; invalid counts reject before mutation. Full runtime completion remains open. [Evidence](research/RUST_INTERMISSION_BEGIN.md).
 
 
 
 
1533
 
1534
 
1535
  RE-839: Rust matches 39 original begin-transition cases, preserving timestamp guard semantics, fallback IDs, entity-client field clear and preparation/slow/respawn/move/publication order. Native work stays typed effects; invalid counts reject before mutation. Full runtime completion remains open. [Evidence](research/RUST_INTERMISSION_BEGIN.md).
1536
+
1537
+
1538
+ RE-840: 83 original 7367 cases recover Exit header, pending now−50, publication/configstring22 ordering, team score log, signed ping clamp and at most32 ranked connected nonspectator rows. Verified original format strings are recorded. Logging, publication and syscall effects remain captured. Full runtime completion remains open. [Evidence](research/QVM_EXIT_LOG.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -1869,3 +1869,8 @@ Rust matches 131 original readiness cases, including slot16 mask exclusion, empt
1869
  ## 2026-10-27 — RE-839 Rust begin-intermission state and effect intentions
1870
 
1871
  Rust matches 39 original begin-transition cases, preserving timestamp guard semantics, fallback IDs, entity-client field clear and preparation/slow/respawn/move/publication order. Native work stays typed effects; invalid counts reject before mutation. Focused `cargo xtask test-group rust-intermission-begin` 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.
 
 
 
 
 
 
1869
  ## 2026-10-27 — RE-839 Rust begin-intermission state and effect intentions
1870
 
1871
  Rust matches 39 original begin-transition cases, preserving timestamp guard semantics, fallback IDs, entity-client field clear and preparation/slow/respawn/move/publication order. Native work stays typed effects; invalid counts reject before mutation. Focused `cargo xtask test-group rust-intermission-begin` 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.
1872
+
1873
+
1874
+ ## 2026-10-27 — RE-840 Original exit log publication and ranked row contracts
1875
+
1876
+ 83 original 7367 cases recover Exit header, pending now−50, publication/configstring22 ordering, team score log, signed ping clamp and at most32 ranked connected nonspectator rows. Verified original format strings are recorded. Logging, publication and syscall effects remain captured. Focused `cargo xtask test-group exit-log` passes (5 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
@@ -1570,3 +1570,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1570
 
1571
 
1572
  - [x] RE-839 Rust begin-intermission state and effect intentions ([evidence](research/RUST_INTERMISSION_BEGIN.md)).
 
 
 
 
1570
 
1571
 
1572
  - [x] RE-839 Rust begin-intermission state and effect intentions ([evidence](research/RUST_INTERMISSION_BEGIN.md)).
1573
+
1574
+
1575
+ - [x] RE-840 Original exit log publication and ranked row contracts ([evidence](research/QVM_EXIT_LOG.md)).
docs/research/QVM_EXIT_LOG.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Original exit log publication and ranked row contracts
2
+
3
+ RE-840. Reproduce with `python3 scripts/analyze_qvm_exit_log.py`; focused validation: `cargo xtask test-group exit-log`. [Machine report](qvm-exit-log.json).
4
+
5
+ 83 original 7367 cases recover Exit header, pending now−50, publication/configstring22 ordering, team score log, signed ping clamp and at most32 ranked connected nonspectator rows. Verified original format strings are recorded. Logging, publication and syscall effects remain captured.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/README.md CHANGED
@@ -1109,3 +1109,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1109
 
1110
 
1111
  [RE-839: Rust begin-intermission state and effect intentions](RUST_INTERMISSION_BEGIN.md).
 
 
 
 
1109
 
1110
 
1111
  [RE-839: Rust begin-intermission state and effect intentions](RUST_INTERMISSION_BEGIN.md).
1112
+
1113
+
1114
+ [RE-840: Original exit log publication and ranked row contracts](QVM_EXIT_LOG.md).
docs/research/qvm-exit-log.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_exit_log.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import itertools
3
+ from pathlib import Path
4
+ from qvm_research_support import source
5
+ from qvm_intermission_support import seed,execute
6
+ from analyze_qvm import write_json
7
+
8
+ def cases():
9
+ for mode,count,ping in itertools.product([-1,3,9,11],[-1,0,1,4,33],[-1,998,999,1000]):
10
+ c=[{'468':1 if j%5==1 else 2,'3096':3 if j%5==2 else 0,'248':j-10,'452':ping,'140':j} for j in range(35)]
11
+ yield dict(mode=mode,rank_count=count,order=list(reversed(range(35))),now=120000,reason=34414,first_score=-1,second_score=42),c
12
+ for now in [-2147483648,0,2147483647]:yield dict(now=now,reason=34577,rank_count=0),[]
13
+
14
+ def main():
15
+ q,raw,h,ins=source();rows=[]
16
+ for a,c in cases():
17
+ m,p=execute(ins,seed(c,**a),7367,7523,56,{8:a['reason']},targets=[7259,6328,-19]);p.update(input=a,clients=c,pending=m[34999592]&0xffffffff);rows.append(p)
18
+ strings={}
19
+ for a in [34708,34691,34655]:
20
+ start=h['data_offset']+a;strings[str(a)]=raw[start:raw.index(b'\0',start)].decode('ascii')
21
+ write_json(Path('docs/research/qvm-exit-log.json'),{'source':q['source'],'sha256':q['sha256'],'strings':strings,'probes':rows,'limits':'Actual7367 body and actual33715 over83 cases. Exit header, pending now-50, publication/configstring22, optional team scores, capped32 ranked rows, connected/non-spectator filters and ping min(value,999). Logging/publication/syscall effects captured; native files/network unverified.'})
22
+ if __name__=='__main__':main()
scripts/test_qvm_exit_log.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from qvm_intermission_support import CPOOL
4
+
5
+ def expected(a,c):
6
+ out=[(7259,{8:34708,12:a['reason']}),(6328,{}),(-19,{8:22,12:39731})]
7
+ if a.get('mode',0)>=3 and a['mode'] not in [9,11]:out.append((7259,{8:34691,12:a.get('first_score',0),16:a.get('second_score',0)}))
8
+ for id in a.get('order',list(range(len(c))))[:max(0,min(32,a.get('rank_count',len(c))))]:
9
+ v=c[id]
10
+ if v.get('3096',0)!=3 and v.get('468',2)==2:out.append((7259,{8:34655,12:v.get('248',0),16:min(v.get('452',0),999),20:id,24:CPOOL+6336*id+504}))
11
+ return out
12
+ class ExitLogTests(unittest.TestCase):
13
+ def test_exact_log_and_publication_abi(self):
14
+ r=json.loads(Path('docs/research/qvm-exit-log.json').read_text());self.assertEqual(len(r['probes']),83)
15
+ for p in r['probes']:
16
+ actual=[(v['target'],{int(k):n&0xffffffff for k,n in v['arguments'].items()}) for v in p['requests']];wanted=expected(p['input'],p['clients']);self.assertEqual(actual,[(t,{k:v&0xffffffff for k,v in a.items()}) for t,a in wanted]);self.assertEqual(p['pending'],(p['input'].get('now',0)-50)&0xffffffff)
17
+ def test_only_pending_write_and_original_strings(self):
18
+ r=json.loads(Path('docs/research/qvm-exit-log.json').read_text());self.assertEqual(r['strings']['34708'],'Exit: %s\n');self.assertEqual(r['strings']['34691'],'red:%i blue:%i\n')
19
+ for p in r['probes']:self.assertTrue(all(v['address']==34999592 for v in p['changes']))
20
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -2208,3 +2208,7 @@ report scripts/analyze_rust_intermission_begin.py docs/research/rust-intermissio
2208
  edge docs/research/rust-intermission-begin.json scripts/test_rust_intermission_begin.py
2209
  group rust-intermission-begin scripts/analyze_rust_intermission_begin.py
2210
  edge scripts/analyze_rust_intermission_begin.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
2208
  edge docs/research/rust-intermission-begin.json scripts/test_rust_intermission_begin.py
2209
  group rust-intermission-begin scripts/analyze_rust_intermission_begin.py
2210
  edge scripts/analyze_rust_intermission_begin.py scripts/analyze_qvm_resumer_audit.py
2211
+ report scripts/analyze_qvm_exit_log.py docs/research/qvm-exit-log.json
2212
+ edge docs/research/qvm-exit-log.json scripts/test_qvm_exit_log.py
2213
+ group exit-log scripts/analyze_qvm_exit_log.py
2214
+ edge scripts/analyze_qvm_exit_log.py scripts/analyze_qvm_resumer_audit.py