nmarshall commited on
Commit
615aedc
·
1 Parent(s): 151f41b

qvm: contact event announcement gates

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -811,3 +811,6 @@ Research progress: RE-714 [report](research/QVM_CONTACT_FACTOR.md); remaining na
811
 
812
 
813
  Research progress: RE-715 [report](research/QVM_CONTACT_SPECIAL.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
811
 
812
 
813
  Research progress: RE-715 [report](research/QVM_CONTACT_SPECIAL.md); remaining native/content/runtime/platform scope stays open.
814
+
815
+
816
+ Research progress: RE-716 [report](research/QVM_CONTACT_ANNOUNCEMENT.md); remaining native/content/runtime/platform scope stays open.
docs/FINDINGS.md CHANGED
@@ -1157,3 +1157,6 @@ RE-703–712 batch complete: [damage factor and contact dispatch](research/QVM_D
1157
 
1158
 
1159
  **RE-715 — Special weapon4 contact classification:** The special contact path fixes scalar1, reads the first context category and reclassifies head/torso through actual inventory, without invoking289594 or changing its accumulator. [Evidence](research/QVM_CONTACT_SPECIAL.md).
 
 
 
 
1157
 
1158
 
1159
  **RE-715 — Special weapon4 contact classification:** The special contact path fixes scalar1, reads the first context category and reclassifies head/torso through actual inventory, without invoking289594 or changing its accumulator. [Evidence](research/QVM_CONTACT_SPECIAL.md).
1160
+
1161
+
1162
+ **RE-716 — Contact event and announcement gates:** Events require nonzero caller flag and scalar; announcement7259 additionally requires34081316 and clear victim client220 bit16384/entity552 bit16. [Evidence](research/QVM_CONTACT_ANNOUNCEMENT.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1146,3 +1146,6 @@ Research progress: RE-714 [report](research/QVM_CONTACT_FACTOR.md); remaining na
1146
 
1147
 
1148
  Research progress: RE-715 [report](research/QVM_CONTACT_SPECIAL.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
1146
 
1147
 
1148
  Research progress: RE-715 [report](research/QVM_CONTACT_SPECIAL.md); remaining native/content/runtime/platform scope stays open.
1149
+
1150
+
1151
+ Research progress: RE-716 [report](research/QVM_CONTACT_ANNOUNCEMENT.md); remaining native/content/runtime/platform scope stays open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -1215,3 +1215,8 @@ Ordinary292545 now calls complete289594, multiplies its returned float factor by
1215
  ## 2026-10-21 — RE-715 Special weapon4 contact classification (separate task commit)
1216
 
1217
  The special contact path fixes scalar1, reads the first context category and reclassifies head/torso through actual inventory, without invoking289594 or changing its accumulator. 224 category/client/health/slot combinations check scalar, classifier decisions, exact item queries and exclusion of slot16. Full suite: 1308 tests pass. Report regenerates byte-identically (215339 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
 
 
 
 
 
 
1215
  ## 2026-10-21 — RE-715 Special weapon4 contact classification (separate task commit)
1216
 
1217
  The special contact path fixes scalar1, reads the first context category and reclassifies head/torso through actual inventory, without invoking289594 or changing its accumulator. 224 category/client/health/slot combinations check scalar, classifier decisions, exact item queries and exclusion of slot16. Full suite: 1308 tests pass. Report regenerates byte-identically (215339 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
1218
+
1219
+
1220
+ ## 2026-10-21 — RE-716 Contact event and announcement gates (separate task commit)
1221
+
1222
+ Events require nonzero caller flag and scalar; announcement7259 additionally requires34081316 and clear victim client220 bit16384/entity552 bit16. 144 gate combinations check continuation, announcement truth table, original format and every call argument. Full suite: 1312 tests pass. Report regenerates byte-identically (123916 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
@@ -1189,3 +1189,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1189
 
1190
 
1191
  - [x] RE-715 Special weapon4 contact classification ([report](research/QVM_CONTACT_SPECIAL.md)).
 
 
 
 
1189
 
1190
 
1191
  - [x] RE-715 Special weapon4 contact classification ([report](research/QVM_CONTACT_SPECIAL.md)).
1192
+
1193
+
1194
+ - [x] RE-716 Contact event and announcement gates ([report](research/QVM_CONTACT_ANNOUNCEMENT.md)).
docs/research/QVM_CONTACT_ANNOUNCEMENT.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Contact event and announcement gates
2
+
3
+ RE-716. Reproduce with `python3 scripts/analyze_qvm_contact_announcement.py`; check with `python3 scripts/test_qvm_contact_announcement.py`. The [machine report](qvm-contact-announcement.json) retains source identity and bounded fixtures.
4
+
5
+ Actual292833–292916 bypasses events to293373 when caller148 is zero or scalar56 compares equal to float zero. Negative explicit scalar fixtures still pass this gate. Announcement7259 is conditional on global34081316 and clear victim client220 bit16384 plus entity552 bit16. Its eight arguments are original format97459, target ID, attacker ID, location, weapon, attacker client504 name pointer, victim client504 name pointer, and original3704+4×location label pointer. The request is captured without executing formatting/output effects. Announcement suppression does not suppress the event continuation at292917. No event allocation or health damage occurs in this range.
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
@@ -747,3 +747,6 @@ The extension collector adds five focused tests for native tail calls, command-r
747
 
748
 
749
  [RE-715: Special weapon4 contact classification](QVM_CONTACT_SPECIAL.md). Reproduce with `python3 scripts/analyze_qvm_contact_special.py`; check with `python3 scripts/test_qvm_contact_special.py`.
 
 
 
 
747
 
748
 
749
  [RE-715: Special weapon4 contact classification](QVM_CONTACT_SPECIAL.md). Reproduce with `python3 scripts/analyze_qvm_contact_special.py`; check with `python3 scripts/test_qvm_contact_special.py`.
750
+
751
+
752
+ [RE-716: Contact event and announcement gates](QVM_CONTACT_ANNOUNCEMENT.md). Reproduce with `python3 scripts/analyze_qvm_contact_announcement.py`; check with `python3 scripts/test_qvm_contact_announcement.py`.
docs/research/qvm-contact-announcement.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_contact_announcement.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Contact event eligibility and conditional announcement call arguments."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source
6
+ from qvm_contact_support import seed,run
7
+ from analyze_qvm import write_json
8
+
9
+ def main():
10
+ q,raw,h,ins=source();rows=[]
11
+ for flag,scalar,announce,client_flags,entity_flags,loc in itertools.product([0,1],[-1,0,1],[0,1],[0,16384],[0,16],[1,3,14]):
12
+ a=dict(flag=flag,scalar=scalar,announce=announce,client_flags=client_flags,entity_flags=entity_flags,location=loc);m=seed(raw,h,**a);label=m[3704+4*loc];_,p=run(ins,m,292833,293373,boundaries=[292917]);p.update(input=a,location_label_pointer=label);rows.append(p)
13
+ text=raw[h['data_offset']+97459:].split(b'\0',1)[0].decode()
14
+ write_json(Path('docs/research/qvm-contact-announcement.json'),{'source':q['source'],'sha256':q['sha256'],'format':{'address':97459,'text':text},'probes':rows,'limits':'Actual292833..292916;7259 request captured without formatting/output effects. Stops before event or at dispatch continuation. Explicit nonnull clients for announcement branch.'})
15
+ if __name__=='__main__':main()
scripts/test_qvm_contact_announcement.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from qvm_contact_support import A_CLIENT,V_CLIENT
4
+ class ContactAnnouncementTests(unittest.TestCase):
5
+ @classmethod
6
+ def setUpClass(cls):cls.r=json.loads(Path('docs/research/qvm-contact-announcement.json').read_text());cls.ps=cls.r['probes']
7
+ def test_event_gate_independent_of_announcement(self):
8
+ for p in self.ps:
9
+ a=p['input'];self.assertEqual(p['execution']['stop'],292917 if a['flag'] and a['scalar']!=0 else 293373)
10
+ def test_announcement_flag_truth_table(self):
11
+ for p in self.ps:
12
+ a=p['input'];wanted=bool(a['flag'] and a['scalar']!=0 and a['announce'] and not a['client_flags']&16384 and not a['entity_flags']&16);self.assertEqual(len(p['effects']['announcements']),int(wanted))
13
+ def test_exact_eight_argument_request(self):
14
+ for p in self.ps:
15
+ for c in p['effects']['announcements']:self.assertEqual(c['arguments'],{'8':97459,'12':65,'16':7,'20':p['input']['location'],'24':3,'28':A_CLIENT+504,'32':V_CLIENT+504,'36':p['location_label_pointer']})
16
+ def test_source_format_and_no_event_or_health_execution(self):
17
+ from qvm_research_support import source
18
+ _,raw,h,_=source();self.assertEqual(self.r['format']['text'],raw[h['data_offset']+97459:].split(b'\0',1)[0].decode());self.assertEqual(len(self.ps),144)
19
+ for p in self.ps:self.assertEqual(p['effects']['events'],[]);self.assertEqual(p['effects']['damage'],[])
20
+ if __name__=='__main__':unittest.main()