qvm: recover intermission readiness
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_INTERMISSION_READY.md +7 -0
- docs/research/README.md +3 -0
- docs/research/qvm-intermission-ready.json +0 -0
- scripts/analyze_qvm_intermission_ready.py +19 -0
- scripts/test_qvm_intermission_ready.py +23 -0
- xtask/checks.tsv +5 -0
docs/FINDINGS.md
CHANGED
|
@@ -1505,3 +1505,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
|
|
| 1505 |
|
| 1506 |
|
| 1507 |
**RE-835:** Rust matches all 168 source cases with typed signed mode classification, global-score and ranked-field selection, early gate handling and safe rank rejection. A separate scoped intermission adapter avoids rebuilding unrelated lifecycle fixtures; original runtime remains open. [Evidence](research/RUST_EXIT_PREDICATE.md).
|
|
|
|
|
|
|
|
|
|
|
|
| 1505 |
|
| 1506 |
|
| 1507 |
**RE-835:** Rust matches all 168 source cases with typed signed mode classification, global-score and ranked-field selection, early gate handling and safe rank rejection. A separate scoped intermission adapter avoids rebuilding unrelated lifecycle fixtures; original runtime remains open. [Evidence](research/RUST_EXIT_PREDICATE.md).
|
| 1508 |
+
|
| 1509 |
+
|
| 1510 |
+
**RE-836:** 131 original 7525 cases recover connected/entity-flag8 exclusion, nonzero readiness, first16-slot mask and independent counts. Signed wrapped timestamp additions gate a five-second minimum and ten-second wait; all-ready includes an empty eligible set. Actual 6939 next-map transition remains captured. [Evidence](research/QVM_INTERMISSION_READY.md).
|
docs/PROVISIONAL_TODO.md
CHANGED
|
@@ -1521,3 +1521,6 @@ RE-834: Actual 7662 and child 33715 execute across 168 cases. Playing count and
|
|
| 1521 |
|
| 1522 |
|
| 1523 |
RE-835: Rust matches all 168 source cases with typed signed mode classification, global-score and ranked-field selection, early gate handling and safe rank rejection. A separate scoped intermission adapter avoids rebuilding unrelated lifecycle fixtures; original runtime remains open. Full runtime completion remains open. [Evidence](research/RUST_EXIT_PREDICATE.md).
|
|
|
|
|
|
|
|
|
|
|
|
| 1521 |
|
| 1522 |
|
| 1523 |
RE-835: Rust matches all 168 source cases with typed signed mode classification, global-score and ranked-field selection, early gate handling and safe rank rejection. A separate scoped intermission adapter avoids rebuilding unrelated lifecycle fixtures; original runtime remains open. Full runtime completion remains open. [Evidence](research/RUST_EXIT_PREDICATE.md).
|
| 1524 |
+
|
| 1525 |
+
|
| 1526 |
+
RE-836: 131 original 7525 cases recover connected/entity-flag8 exclusion, nonzero readiness, first16-slot mask and independent counts. Signed wrapped timestamp additions gate a five-second minimum and ten-second wait; all-ready includes an empty eligible set. Actual 6939 next-map transition remains captured. Full runtime completion remains open. [Evidence](research/QVM_INTERMISSION_READY.md).
|
docs/RESEARCH_LEDGER.md
CHANGED
|
@@ -1849,3 +1849,8 @@ Actual 7662 and child 33715 execute across 168 cases. Playing count and the enab
|
|
| 1849 |
## 2026-10-27 — RE-835 Rust ranked exit tie predicate
|
| 1850 |
|
| 1851 |
Rust matches all 168 source cases with typed signed mode classification, global-score and ranked-field selection, early gate handling and safe rank rejection. A separate scoped intermission adapter avoids rebuilding unrelated lifecycle fixtures; original runtime remains open. Focused `cargo xtask test-group rust-exit-predicate` 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1849 |
## 2026-10-27 — RE-835 Rust ranked exit tie predicate
|
| 1850 |
|
| 1851 |
Rust matches all 168 source cases with typed signed mode classification, global-score and ranked-field selection, early gate handling and safe rank rejection. A separate scoped intermission adapter avoids rebuilding unrelated lifecycle fixtures; original runtime remains open. Focused `cargo xtask test-group rust-exit-predicate` 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.
|
| 1852 |
+
|
| 1853 |
+
|
| 1854 |
+
## 2026-10-27 — RE-836 Original intermission readiness scan and timeout policy
|
| 1855 |
+
|
| 1856 |
+
131 original 7525 cases recover connected/entity-flag8 exclusion, nonzero readiness, first16-slot mask and independent counts. Signed wrapped timestamp additions gate a five-second minimum and ten-second wait; all-ready includes an empty eligible set. Actual 6939 next-map transition remains captured. Focused `cargo xtask test-group intermission-ready` 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
|
@@ -1558,3 +1558,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
|
|
| 1558 |
|
| 1559 |
|
| 1560 |
- [x] RE-835 Rust ranked exit tie predicate ([evidence](research/RUST_EXIT_PREDICATE.md)).
|
|
|
|
|
|
|
|
|
|
|
|
| 1558 |
|
| 1559 |
|
| 1560 |
- [x] RE-835 Rust ranked exit tie predicate ([evidence](research/RUST_EXIT_PREDICATE.md)).
|
| 1561 |
+
|
| 1562 |
+
|
| 1563 |
+
- [x] RE-836 Original intermission readiness scan and timeout policy ([evidence](research/QVM_INTERMISSION_READY.md)).
|
docs/research/QVM_INTERMISSION_READY.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Original intermission readiness scan and timeout policy
|
| 2 |
+
|
| 3 |
+
RE-836. Reproduce with `python3 scripts/analyze_qvm_intermission_ready.py`; focused validation: `cargo xtask test-group intermission-ready`. [Machine report](qvm-intermission-ready.json).
|
| 4 |
+
|
| 5 |
+
131 original 7525 cases recover connected/entity-flag8 exclusion, nonzero readiness, first16-slot mask and independent counts. Signed wrapped timestamp additions gate a five-second minimum and ten-second wait; all-ready includes an empty eligible set. Actual 6939 next-map transition remains captured.
|
| 6 |
+
|
| 7 |
+
Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
|
docs/research/README.md
CHANGED
|
@@ -1097,3 +1097,6 @@ The extension collector adds five focused tests for native tail calls, command-r
|
|
| 1097 |
|
| 1098 |
|
| 1099 |
[RE-835: Rust ranked exit tie predicate](RUST_EXIT_PREDICATE.md).
|
|
|
|
|
|
|
|
|
|
|
|
| 1097 |
|
| 1098 |
|
| 1099 |
[RE-835: Rust ranked exit tie predicate](RUST_EXIT_PREDICATE.md).
|
| 1100 |
+
|
| 1101 |
+
|
| 1102 |
+
[RE-836: Original intermission readiness scan and timeout policy](QVM_INTERMISSION_READY.md).
|
docs/research/qvm-intermission-ready.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
scripts/analyze_qvm_intermission_ready.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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,E
|
| 6 |
+
from analyze_qvm import write_json
|
| 7 |
+
|
| 8 |
+
def cases():
|
| 9 |
+
for n,pattern,elapsed,waiting in itertools.product([0,1,4,17],['all','none','mixed','excluded'],[4999,5000,14999,15000],[0,1]):
|
| 10 |
+
clients=[{'4036':1 if pattern=='all' or pattern=='mixed' and j%2==0 else 0,'entity_flags':8 if pattern=='excluded' else 0,'468':1 if pattern=='mixed' and j==1 else 2} for j in range(n)]
|
| 11 |
+
yield dict(blocked=1000,now=1000+elapsed,waiting=waiting,wait_start=6000,max_clients=n),clients
|
| 12 |
+
for a in [dict(blocked=2147483647,now=-2147483648),dict(blocked=-2147483648,now=2147483647),dict(blocked=1000,now=6000,waiting=-1,wait_start=2147483647)]:yield a,[{'4036':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),7525,7660,28,targets=[6939]);p.update(input=a,clients=c,waiting=m[34999604]&0xffffffff,wait_start=m[34999608]&0xffffffff,ready_count=m[E+20],unready_count=m[E+16],mask=m[E+24]&0xffffffff);rows.append(p)
|
| 18 |
+
write_json(Path('docs/research/qvm-intermission-ready.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual7525 readiness scan and signed wrapped timestamp-add gates across131 cases. Source computes first16-slot ready mask and counts but no network publication occurs here.6939 next-map child captured. Native runtime unverified.'})
|
| 19 |
+
if __name__=='__main__':main()
|
scripts/test_qvm_intermission_ready.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json,unittest
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
from test_qvm_exit_complete import signed
|
| 4 |
+
|
| 5 |
+
def policy(a,c):
|
| 6 |
+
eligible=[(j,v) for j,v in enumerate(c[:a.get('max_clients',len(c))]) if v.get('468',2)==2 and not(v.get('entity_flags',0)&8)]
|
| 7 |
+
ready=[j for j,v in eligible if v.get('4036',0)!=0];unready=len(eligible)-len(ready);waiting=a.get('waiting',0);start=a.get('wait_start',0);exit=False
|
| 8 |
+
if signed(a.get('now',0))>=signed(a.get('blocked',0)+5000):
|
| 9 |
+
if unready==0:exit=True
|
| 10 |
+
else:
|
| 11 |
+
if waiting==0:waiting=1;start=a.get('now',0)
|
| 12 |
+
exit=signed(a.get('now',0))>=signed(start+10000)
|
| 13 |
+
return {'waiting':waiting&0xffffffff,'wait_start':start&0xffffffff,'exit':exit,'ready_count':len(ready),'unready_count':unready,'mask':sum(1<<j for j in ready if j<16)}
|
| 14 |
+
class ReadyTests(unittest.TestCase):
|
| 15 |
+
def test_counts_mask_and_timer_effects(self):
|
| 16 |
+
rows=json.loads(Path('docs/research/qvm-intermission-ready.json').read_text())['probes'];self.assertEqual(len(rows),131)
|
| 17 |
+
for p in rows:
|
| 18 |
+
e=policy(p['input'],p['clients'])
|
| 19 |
+
for k in ['waiting','wait_start','ready_count','unready_count','mask']:self.assertEqual(p[k],e[k])
|
| 20 |
+
self.assertEqual(p['requests'],[{'target':6939,'arguments':{},'native_effect_not_executed':True}] if e['exit'] else [])
|
| 21 |
+
def test_only_waiting_globals_change(self):
|
| 22 |
+
for p in json.loads(Path('docs/research/qvm-intermission-ready.json').read_text())['probes']:self.assertTrue(all(w['address'] in [34999604,34999608] for w in p['changes']))
|
| 23 |
+
if __name__=='__main__':unittest.main()
|
xtask/checks.tsv
CHANGED
|
@@ -2174,3 +2174,8 @@ edge docs/research/rust-exit-predicate.json scripts/test_rust_exit_predicate.py
|
|
| 2174 |
group rust-exit-predicate scripts/analyze_rust_exit_predicate.py
|
| 2175 |
edge scripts/analyze_rust_exit_predicate.py scripts/analyze_qvm_resumer_audit.py
|
| 2176 |
edge scripts/rust_intermission_support.py scripts/analyze_qvm_resumer_audit.py
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2174 |
group rust-exit-predicate scripts/analyze_rust_exit_predicate.py
|
| 2175 |
edge scripts/analyze_rust_exit_predicate.py scripts/analyze_qvm_resumer_audit.py
|
| 2176 |
edge scripts/rust_intermission_support.py scripts/analyze_qvm_resumer_audit.py
|
| 2177 |
+
report scripts/analyze_qvm_intermission_ready.py docs/research/qvm-intermission-ready.json
|
| 2178 |
+
edge docs/research/qvm-intermission-ready.json scripts/test_qvm_intermission_ready.py
|
| 2179 |
+
group intermission-ready scripts/analyze_qvm_intermission_ready.py
|
| 2180 |
+
edge scripts/analyze_qvm_intermission_ready.py scripts/analyze_qvm_resumer_audit.py
|
| 2181 |
+
edge scripts/analyze_rust_intermission_ready.py scripts/analyze_qvm_resumer_audit.py
|