nmarshall commited on
Commit
3363297
·
1 Parent(s): ae8c29b

qvm: held item interruption and override

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -793,3 +793,6 @@ Research progress: RE-708 [report](research/QVM_DAMAGE_ATTRIBUTION.md); remainin
793
 
794
 
795
  Research progress: RE-709 [report](research/QVM_DAMAGE_LOCATION_FLAGS.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
793
 
794
 
795
  Research progress: RE-709 [report](research/QVM_DAMAGE_LOCATION_FLAGS.md); remaining native/content/runtime/platform scope stays open.
796
+
797
+
798
+ Research progress: RE-710 [report](research/QVM_DAMAGE_INTERRUPT.md); remaining native/content/runtime/platform scope stays open.
docs/FINDINGS.md CHANGED
@@ -1139,3 +1139,6 @@ Bounded qagame paths recover bomb-plant/inactivity correction requests, direct f
1139
 
1140
 
1141
  **RE-709 — Damage location jump table and client flags:** The original32796 jump table ORs client192 bit4 for locations1/2, bit1 for3/4/7/8, and bit2 for5/6/9–14; signed out-of-range locations bypass it. [Evidence](research/QVM_DAMAGE_LOCATION_FLAGS.md).
 
 
 
 
1139
 
1140
 
1141
  **RE-709 — Damage location jump table and client flags:** The original32796 jump table ORs client192 bit4 for locations1/2, bit1 for3/4/7/8, and bit2 for5/6/9–14; signed out-of-range locations bypass it. [Evidence](research/QVM_DAMAGE_LOCATION_FLAGS.md).
1142
+
1143
+
1144
+ **RE-710 — Held-item deadline and final factor override:** Held item low-byte14 at factor≥0.2 or23 at factor≥0.5 writes client6304=time+200 for nonleg locations; global34066516 returns1 after side effects. [Evidence](research/QVM_DAMAGE_INTERRUPT.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1128,3 +1128,6 @@ Research progress: RE-708 [report](research/QVM_DAMAGE_ATTRIBUTION.md); remainin
1128
 
1129
 
1130
  Research progress: RE-709 [report](research/QVM_DAMAGE_LOCATION_FLAGS.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
1128
 
1129
 
1130
  Research progress: RE-709 [report](research/QVM_DAMAGE_LOCATION_FLAGS.md); remaining native/content/runtime/platform scope stays open.
1131
+
1132
+
1133
+ Research progress: RE-710 [report](research/QVM_DAMAGE_INTERRUPT.md); remaining native/content/runtime/platform scope stays open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -1187,3 +1187,8 @@ Active wounds record attacker pointer at target836 and weapon at client4300; cou
1187
  ## 2026-10-21 — RE-709 Damage location jump table and client flags (separate task commit)
1188
 
1189
  The original32796 jump table ORs client192 bit4 for locations1/2, bit1 for3/4/7/8, and bit2 for5/6/9–14; signed out-of-range locations bypass it. 133 location/initial-flag fixtures verify every original branch target, signed bypass and preservation of unrelated fields. Full suite: 1287 tests pass. Report regenerates byte-identically (195933 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
 
 
 
 
 
 
1187
  ## 2026-10-21 — RE-709 Damage location jump table and client flags (separate task commit)
1188
 
1189
  The original32796 jump table ORs client192 bit4 for locations1/2, bit1 for3/4/7/8, and bit2 for5/6/9–14; signed out-of-range locations bypass it. 133 location/initial-flag fixtures verify every original branch target, signed bypass and preservation of unrelated fields. Full suite: 1287 tests pass. Report regenerates byte-identically (195933 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
1190
+
1191
+
1192
+ ## 2026-10-21 — RE-710 Held-item deadline and final factor override (separate task commit)
1193
+
1194
+ Held item low-byte14 at factor≥0.2 or23 at factor≥0.5 writes client6304=time+200 for nonleg locations; global34066516 returns1 after side effects. 167 item/threshold/location/override/client/clock fixtures pass independent float32, low-byte and signed-wrap oracles. Full suite: 1291 tests pass. Report regenerates byte-identically (252605 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
@@ -1171,3 +1171,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1171
 
1172
 
1173
  - [x] RE-709 Damage location jump table and client flags ([report](research/QVM_DAMAGE_LOCATION_FLAGS.md)).
 
 
 
 
1171
 
1172
 
1173
  - [x] RE-709 Damage location jump table and client flags ([report](research/QVM_DAMAGE_LOCATION_FLAGS.md)).
1174
+
1175
+
1176
+ - [x] RE-710 Held-item deadline and final factor override ([report](research/QVM_DAMAGE_INTERRUPT.md)).
docs/research/QVM_DAMAGE_INTERRUPT.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Held-item deadline and final factor override
2
+
3
+ RE-710. Reproduce with `python3 scripts/analyze_qvm_damage_interrupt.py`; check with `python3 scripts/test_qvm_damage_interrupt.py`. The [machine report](qvm-damage-interrupt.json) retains source identity and bounded fixtures.
4
+
5
+ Actual290374–290490 reads the active held-slot index client144 and low byte of client312+4×index. Item14 requires factor at least float32(0.2); item23 requires at least0.5. Locations11–14 suppress the client6304=time+200 write. Null clients bypass held reads. Deadline behavior is structurally recovered; its gameplay interpretation remains provisional. Global34066516 nonzero overrides the return to float32(1) only after these effects, leaving local factor and earlier effects intact. Explicit near-overflow clock fixtures expose32-bit wrap without asserting legal server clock domains. No health damage or external calls occur.
6
+
7
+ 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
@@ -729,3 +729,6 @@ The extension collector adds five focused tests for native tail calls, command-r
729
 
730
 
731
  [RE-709: Damage location jump table and client flags](QVM_DAMAGE_LOCATION_FLAGS.md). Reproduce with `python3 scripts/analyze_qvm_damage_location_flags.py`; check with `python3 scripts/test_qvm_damage_location_flags.py`.
 
 
 
 
729
 
730
 
731
  [RE-709: Damage location jump table and client flags](QVM_DAMAGE_LOCATION_FLAGS.md). Reproduce with `python3 scripts/analyze_qvm_damage_location_flags.py`; check with `python3 scripts/test_qvm_damage_location_flags.py`.
732
+
733
+
734
+ [RE-710: Held-item deadline and final factor override](QVM_DAMAGE_INTERRUPT.md). Reproduce with `python3 scripts/analyze_qvm_damage_interrupt.py`; check with `python3 scripts/test_qvm_damage_interrupt.py`.
docs/research/qvm-damage-interrupt.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_damage_interrupt.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Held-item interruption deadlines and final damage-factor override."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source
6
+ from qvm_damage_support import seed,run
7
+ from analyze_qvm import write_json
8
+
9
+ def main():
10
+ q,raw,h,ins=source();rows=[]
11
+ cases=[dict(held=held,factor=factor,location=loc,override=override) for held,factor,loc,override in itertools.product([0,14,23,0xaa000e,0xaa0017],[0.19999,0.2,0.49999,0.5],[1,10,11,14],[0,1])]
12
+ cases += [dict(client=False,held=held,factor=1,override=override) for held,override in itertools.product([14,23],[0,1])]
13
+ cases += [dict(held=14,factor=0.2,now=now) for now in [-200,0,2147483600]]
14
+ for a in cases:
15
+ _,p=run(ins,seed(raw,h,**a),290374,290491);p['input']=a;rows.append(p)
16
+ write_json(Path('docs/research/qvm-damage-interrupt.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual290374..290490 with supplied factor/client/held inventory and clock. Deadline purpose is inferred; final override does not retroactively undo side effects.'})
17
+ if __name__=='__main__':main()
scripts/test_qvm_damage_interrupt.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from test_qvm_ground import word,f,n
4
+ class DamageInterruptTests(unittest.TestCase):
5
+ @classmethod
6
+ def setUpClass(cls):cls.ps=json.loads(Path('docs/research/qvm-damage-interrupt.json').read_text())['probes']
7
+ def test_exact_threshold_item_mask_and_location_gates(self):
8
+ for p in self.ps:
9
+ a=p['input'];item=a['held']&255;v=f(a['factor']);active=a.get('client',True) and ((item==14 and v>=n(1045220557)) or (item==23 and v>=0.5)) and a.get('location',3) not in (11,12,13,14)
10
+ self.assertEqual(p['final']['client']['6304'],(a.get('now',5000)+200)&0xffffffff if active else 123)
11
+ def test_return_override_does_not_replace_local_factor(self):
12
+ for p in self.ps:
13
+ a=p['input'];self.assertEqual(p['execution']['return']&0xffffffff,word(1 if a.get('override',0) else a['factor']));self.assertEqual(p['final']['locals']['20'],word(a['factor']))
14
+ def test_signed_deadline_wrap(self):
15
+ p=next(p for p in self.ps if p['input'].get('now')==2147483600);self.assertEqual(p['final']['client']['6304'],2147483800)
16
+ def test_no_calls_or_other_tracked_state_changes(self):
17
+ self.assertEqual(len(self.ps),167)
18
+ for p in self.ps:
19
+ a=dict(p['initial']['client']);b=dict(p['final']['client']);a.pop('6304');b.pop('6304');self.assertEqual(a,b);self.assertEqual(p['execution']['calls'],[])
20
+ if __name__=='__main__':unittest.main()