nmarshall commited on
Commit
e1f74e0
·
1 Parent(s): 8f13e9f

qvm: server firing event prelude

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -463,3 +463,6 @@ Research progress: RE-591 [report](research/QVM_FIRE_SEQUENCES.md); remaining na
463
 
464
 
465
  Research progress: RE-593 [report](research/QVM_SERVER_EVENT_ROUTE.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
463
 
464
 
465
  Research progress: RE-593 [report](research/QVM_SERVER_EVENT_ROUTE.md); remaining native/content/runtime/platform scope stays open.
466
+
467
+
468
+ Research progress: RE-594 [report](research/QVM_SERVER_FIRE_EVENT.md); remaining native/content/runtime/platform scope stays open.
docs/FINDINGS.md CHANGED
@@ -821,3 +821,6 @@ Bounded qagame paths recover bomb-plant/inactivity correction requests, direct f
821
 
822
 
823
  **RE-593 — Server event queue window and firing branch routing:** 151254 consumes at most the latest two ring events using a signed old-sequence clamp; event31 routes to151634, while other recognized consumers are stopped explicitly. [Evidence](research/QVM_SERVER_EVENT_ROUTE.md).
 
 
 
 
821
 
822
 
823
  **RE-593 — Server event queue window and firing branch routing:** 151254 consumes at most the latest two ring events using a signed old-sequence clamp; event31 routes to151634, while other recognized consumers are stopped explicitly. [Evidence](research/QVM_SERVER_EVENT_ROUTE.md).
824
+
825
+
826
+ **RE-594 — Published firing event to server pre-call reset:** Actual outer31 publication reaches server151634, which writes client4140=0 and4328=1 before pending289235(entity); this prelude does not read the queued parameter. [Evidence](research/QVM_SERVER_FIRE_EVENT.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -781,3 +781,6 @@ Research progress: RE-591 [report](research/QVM_FIRE_SEQUENCES.md); remaining na
781
 
782
 
783
  Research progress: RE-593 [report](research/QVM_SERVER_EVENT_ROUTE.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
781
 
782
 
783
  Research progress: RE-593 [report](research/QVM_SERVER_EVENT_ROUTE.md); remaining native/content/runtime/platform scope stays open.
784
+
785
+
786
+ Research progress: RE-594 [report](research/QVM_SERVER_FIRE_EVENT.md); remaining native/content/runtime/platform scope stays open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -655,3 +655,8 @@ RE-591 additional regression:19 related reports from RE-571–580 and RE-582–5
655
  ## 2026-10-20 — RE-593 Server event queue window and firing branch routing (separate task commit)
656
 
657
  151254 consumes at most the latest two ring events using a signed old-sequence clamp; event31 routes to151634, while other recognized consumers are stopped explicitly. 150 independent fixtures check old/new sequence windows, ring parity, ignored/recognized event priority, unchanged state and no fabricated child execution. Full suite: 883 tests pass. Report regenerates byte-identically (409911 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
 
 
 
 
 
 
655
  ## 2026-10-20 — RE-593 Server event queue window and firing branch routing (separate task commit)
656
 
657
  151254 consumes at most the latest two ring events using a signed old-sequence clamp; event31 routes to151634, while other recognized consumers are stopped explicitly. 150 independent fixtures check old/new sequence windows, ring parity, ignored/recognized event priority, unchanged state and no fabricated child execution. Full suite: 883 tests pass. Report regenerates byte-identically (409911 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
658
+
659
+
660
+ ## 2026-10-20 — RE-594 Published firing event to server pre-call reset (separate task commit)
661
+
662
+ Actual outer31 publication reaches server151634, which writes client4140=0 and4328=1 before pending289235(entity); this prelude does not read the queued parameter. 36 producer/ring/routing/reset compositions independently check one/three publications, parity, retained parameters, exact two-field mutation and explicit pending-call boundary. Full suite: 887 tests pass. Report regenerates byte-identically (340717 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -823,3 +823,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
823
 
824
 
825
  - [x] RE-593 Server event queue window and firing branch routing ([report](research/QVM_SERVER_EVENT_ROUTE.md)).
 
 
 
 
823
 
824
 
825
  - [x] RE-593 Server event queue window and firing branch routing ([report](research/QVM_SERVER_EVENT_ROUTE.md)).
826
+
827
+
828
+ - [x] RE-594 Published firing event to server pre-call reset ([report](research/QVM_SERVER_FIRE_EVENT.md)).
docs/research/QVM_SERVER_FIRE_EVENT.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Published firing event to server pre-call reset
2
+
3
+ RE-594. Reproduce with `python3 scripts/analyze_qvm_server_fire_event.py`; check with `python3 scripts/test_qvm_server_fire_event.py`. The [machine report](qvm-server-fire-event.json) retains source identity and bounded fixtures.
4
+
5
+ Actual54855..54978 publishes31 through29913, then actual151254 routes it using the latest-two-event window. On31,151634..151654 clears client+4140 and writes client+4328=1. The next instruction sequence is CONST289235/CALL151656 with entity argument. The parent is stopped before that call, so no unexamined firing result is supplied.
6
+
7
+ 36 fixtures cover three initial field pairs, parameters0/7/unsigned−1, two sequence parities and one/three publications. Queue pressure correctly starts at current−2 rather than replaying old events. Parameter values survive publication, but the reset body itself does not consume them. Those facts do not establish whether later handlers use parameters.
8
+
9
+ Next: recover289235's suppression guard/statistic and angle basis, its muzzle helper, and the entity-weapon dispatch. Numeric client fields remain unnamed pending writer/reference evidence.
10
+
11
+ No original executable/full QVM/native collision/physics/rendering executes. Native responses and legal input domains are supplied or unverified where stated; full runtime/macOS/Linux Rust/Bevy/Solari gameplay remains open.
docs/research/README.md CHANGED
@@ -382,3 +382,6 @@ The extension collector adds five focused tests for native tail calls, command-r
382
 
383
 
384
  [RE-593: Server event queue window and firing branch routing](QVM_SERVER_EVENT_ROUTE.md). Reproduce with `python3 scripts/analyze_qvm_server_event_route.py`; check with `python3 scripts/test_qvm_server_event_route.py`.
 
 
 
 
382
 
383
 
384
  [RE-593: Server event queue window and firing branch routing](QVM_SERVER_EVENT_ROUTE.md). Reproduce with `python3 scripts/analyze_qvm_server_event_route.py`; check with `python3 scripts/test_qvm_server_event_route.py`.
385
+
386
+
387
+ [RE-594: Published firing event to server pre-call reset](QVM_SERVER_FIRE_EVENT.md). Reproduce with `python3 scripts/analyze_qvm_server_fire_event.py`; check with `python3 scripts/test_qvm_server_fire_event.py`.
docs/research/qvm-server-fire-event.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_server_fire_event.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Actual outer event31 publication through server routing and pre-fire resets."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source,execute
6
+ from qvm_server_fire_support import seed,state,ENTITY
7
+ from analyze_qvm_server_event_route import route,LOCAL
8
+ from analyze_qvm_fire_sequences import publish
9
+ from analyze_qvm_acceleration import PS,FRAME
10
+ from analyze_qvm import write_json
11
+
12
+ def prelude(ins,m):
13
+ initial=state(m);m,c,r=execute(ins,151634,151655,m,(0,0,0),LOCAL)
14
+ assert ins[151655]['operand']==289235 and ins[151656]['opcode']=='CALL'
15
+ return m,{'initial':initial,'execution':r,'pending_call':{'instruction':151656,'target':289235,'entity':ENTITY},'final':state(m)}
16
+
17
+ def bridge(ins,m,parameter=0,count=1):
18
+ initial=state(m);old=m[PS+108];publications=[]
19
+ for _ in range(count):
20
+ m.update({FRAME+48:0,FRAME+252:0,FRAME+256:0,FRAME+260:1,FRAME+264:parameter});m,p=publish(ins,m);publications.append({'calls':p['execution']['calls'],'queue':p['final']['queue']})
21
+ m,r=route(ins,m,old);p=None
22
+ if r['execution']['stop']==151634:m,p=prelude(ins,m)
23
+ return m,{'initial':initial,'parameter':parameter,'count':count,'publications':publications,'route':r,'prelude':p,'final':state(m)}
24
+
25
+ def main():
26
+ q,raw,h,ins=source();rows=[]
27
+ for fields,param,seq,count in itertools.product([(-1,-1),(0,0),(1111,5)],[0,7,0xffffffff],[0,1],[1,3]):
28
+ m=seed(raw,h);m.update({PS+4140:fields[0],PS+4328:fields[1],PS+108:seq});rows.append(bridge(ins,m,param,count)[1])
29
+ write_json(Path('docs/research/qvm-server-fire-event.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual54855 publication→151254 routing→151634 reset, stopped before CALL151656 to289235. Event parameter is retained in queue but not read by this prelude; no firing child/native shot executes.'})
30
+ if __name__=='__main__':main()
scripts/test_qvm_server_fire_event.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest,copy
2
+ from pathlib import Path
3
+ from test_qvm_server_event_route import routing
4
+ class ServerFireEventTests(unittest.TestCase):
5
+ @classmethod
6
+ def setUpClass(cls):cls.r=json.loads(Path('docs/research/qvm-server-fire-event.json').read_text())
7
+ def test_actual_producer_ring_and_route_handoff(self):
8
+ self.assertEqual(len(self.r['probes']),36)
9
+ for p in self.r['probes']:
10
+ q=copy.deepcopy(p['initial']['queue'])
11
+ for publication in p['publications']:
12
+ slot=q['sequence']&1;q['events'][slot]=31;q['parameters'][slot]=p['parameter'];q['sequence']+=1;self.assertEqual(publication['queue'],q)
13
+ self.assertEqual(p['route']['initial']['queue'],q);self.assertEqual(p['route']['execution']['stop'],routing(p['route'])[-1]);self.assertEqual(p['route']['execution']['stop'],151634)
14
+ def test_exact_resets_before_pending_fire_call(self):
15
+ for p in self.r['probes']:
16
+ r=p['prelude'];self.assertEqual(r['initial'],p['route']['final']);a=copy.deepcopy(r['initial']);a.update(field4140=0,field4328=1);self.assertEqual(r['final'],a);self.assertEqual(p['final'],a)
17
+ def test_no_fabricated_fire_child_or_parameter_effect(self):
18
+ for p in self.r['probes']:self.assertEqual(p['prelude']['execution']['calls'],[]);self.assertEqual(p['prelude']['pending_call'],{'instruction':151656,'target':289235,'entity':589824})
19
+ def test_queue_pressure_clamp_keeps_latest_two(self):
20
+ for p in self.r['probes']:
21
+ expected=p['initial']['queue']['sequence']+max(p['count']-2,0);self.assertEqual(p['route']['cursor'],expected)
22
+ if __name__=='__main__':unittest.main()