nmarshall commited on
Commit
213e61c
·
1 Parent(s): bae6801

qvm: resolve bot and announcement connect children

Browse files
docs/FINDINGS.md CHANGED
@@ -1781,3 +1781,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
1781
 
1782
 
1783
  **RE-927:** Rust matches162 original182896 payload/counter cases, retaining exact ccprint/spectator framing, raw name bytes, previous-team suppression and wrapping formatter counter. It does not select or mutate teams. Native broadcast delivery and additional team-switch logic remain open. [Evidence](research/RUST_TEAM_ANNOUNCEMENT.md).
 
 
 
 
1781
 
1782
 
1783
  **RE-927:** Rust matches162 original182896 payload/counter cases, retaining exact ccprint/spectator framing, raw name bytes, previous-team suppression and wrapping formatter counter. It does not select or mutate teams. Native broadcast delivery and additional team-switch logic remain open. [Evidence](research/RUST_TEAM_ANNOUNCEMENT.md).
1784
+
1785
+
1786
+ **RE-928:** 144 original173979 suffix cases execute actual161744 settings/drop wrapper and182896 announcement body instead of supplied bot booleans and captured team callback. Parent control/state remains source-identical; extra userinfo selector toggles, setup records, drops, exact announcement bytes and formatter carry are verified. Native125185 setup,171668 userinfo mutation, ranking/network/logging remain supplied/captured. [Evidence](research/QVM_RESOLVED_CONNECT_TAIL.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1824,3 +1824,6 @@ RE-926: 162 actual182896 cases execute original70458/37914 integer/string format
1824
 
1825
 
1826
  RE-927: Rust matches162 original182896 payload/counter cases, retaining exact ccprint/spectator framing, raw name bytes, previous-team suppression and wrapping formatter counter. It does not select or mutate teams. Native broadcast delivery and additional team-switch logic remain open. Full runtime completion remains open. [Evidence](research/RUST_TEAM_ANNOUNCEMENT.md).
 
 
 
 
1824
 
1825
 
1826
  RE-927: Rust matches162 original182896 payload/counter cases, retaining exact ccprint/spectator framing, raw name bytes, previous-team suppression and wrapping formatter counter. It does not select or mutate teams. Native broadcast delivery and additional team-switch logic remain open. Full runtime completion remains open. [Evidence](research/RUST_TEAM_ANNOUNCEMENT.md).
1827
+
1828
+
1829
+ RE-928: 144 original173979 suffix cases execute actual161744 settings/drop wrapper and182896 announcement body instead of supplied bot booleans and captured team callback. Parent control/state remains source-identical; extra userinfo selector toggles, setup records, drops, exact announcement bytes and formatter carry are verified. Native125185 setup,171668 userinfo mutation, ranking/network/logging remain supplied/captured. Full runtime completion remains open. [Evidence](research/QVM_RESOLVED_CONNECT_TAIL.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2365,3 +2365,8 @@ Rust matches288 original161744 fixed-record and effect cases, preserving143-byte
2365
  ## 2026-10-28 — RE-927 Rust team announcements and spectator suppression
2366
 
2367
  Rust matches162 original182896 payload/counter cases, retaining exact ccprint/spectator framing, raw name bytes, previous-team suppression and wrapping formatter counter. It does not select or mutate teams. Native broadcast delivery and additional team-switch logic remain open. Focused `cargo xtask test-group rust-team-announcement` 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.
 
 
 
 
 
 
2365
  ## 2026-10-28 — RE-927 Rust team announcements and spectator suppression
2366
 
2367
  Rust matches162 original182896 payload/counter cases, retaining exact ccprint/spectator framing, raw name bytes, previous-team suppression and wrapping formatter counter. It does not select or mutate teams. Native broadcast delivery and additional team-switch logic remain open. Focused `cargo xtask test-group rust-team-announcement` 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.
2368
+
2369
+
2370
+ ## 2026-10-28 — RE-928 Original connect suffix with bot wrapper and announcements
2371
+
2372
+ 144 original173979 suffix cases execute actual161744 settings/drop wrapper and182896 announcement body instead of supplied bot booleans and captured team callback. Parent control/state remains source-identical; extra userinfo selector toggles, setup records, drops, exact announcement bytes and formatter carry are verified. Native125185 setup,171668 userinfo mutation, ranking/network/logging remain supplied/captured. Focused `cargo xtask test-group qvm-resolved-connect-tail` passes (4 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
@@ -1861,3 +1861,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1861
 
1862
 
1863
  - [x] RE-927 Rust team announcements and spectator suppression ([evidence](research/RUST_TEAM_ANNOUNCEMENT.md)).
 
 
 
 
1861
 
1862
 
1863
  - [x] RE-927 Rust team announcements and spectator suppression ([evidence](research/RUST_TEAM_ANNOUNCEMENT.md)).
1864
+
1865
+
1866
+ - [x] RE-928 Original connect suffix with bot wrapper and announcements ([evidence](research/QVM_RESOLVED_CONNECT_TAIL.md)).
docs/research/QVM_RESOLVED_CONNECT_TAIL.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Original connect suffix with bot wrapper and announcements
2
+
3
+ RE-928. Reproduce with `python3 scripts/analyze_qvm_resolved_connect_tail.py`; focused validation: `cargo xtask test-group qvm-resolved-connect-tail`. [Machine report](qvm-resolved-connect-tail.json).
4
+
5
+ 144 original173979 suffix cases execute actual161744 settings/drop wrapper and182896 announcement body instead of supplied bot booleans and captured team callback. Parent control/state remains source-identical; extra userinfo selector toggles, setup records, drops, exact announcement bytes and formatter carry are verified. Native125185 setup,171668 userinfo mutation, ranking/network/logging remain supplied/captured.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/README.md CHANGED
@@ -1396,3 +1396,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1396
 
1397
 
1398
  [RE-927: Rust team announcements and spectator suppression](RUST_TEAM_ANNOUNCEMENT.md).
 
 
 
 
1396
 
1397
 
1398
  [RE-927: Rust team announcements and spectator suppression](RUST_TEAM_ANNOUNCEMENT.md).
1399
+
1400
+
1401
+ [RE-928: Original connect suffix with bot wrapper and announcements](QVM_RESOLVED_CONNECT_TAIL.md).
docs/research/qvm-resolved-connect-tail.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_resolved_connect_tail.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Execute the verified original QVM body; native effects are supplied or captured."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source,constants
6
+ from qvm_camera_world_support import B,run
7
+ from qvm_exit_rules_support import POOL,CPOOL
8
+ from analyze_qvm_acceleration import word,number
9
+ from analyze_qvm import write_json
10
+
11
+ def main():
12
+ q,raw,h,ins=source();rows=[]
13
+ from qvm_connect_policy_support import WATCH
14
+ from qvm_connect_callback_support import environment,resolved_tail
15
+ from qvm_map_commands_support import put_string
16
+ for mode,team,bot,first,answer,changed in itertools.product([0,3,9],[0,2,3],[0,1],[0,1],[0,1],[False,True]):
17
+ m,b=environment(raw,h);slot=3;pointer=CPOOL+6336*slot
18
+ for o in range(0,6336,4):m[pointer+o]=0xaabbccdd
19
+ now=2147483647 if mode==9 else 100;seconds={0:0,2:2,3:-1}[team];m.update({pointer+3096:team,34090788:mode,34992532:now,34085460:seconds,POOL+880*slot+424:32,POOL+880*slot+532:0});put_string(m,b,pointer+504,b'old');m,p,b=resolved_tail(ins,m,b,slot,first,bot,b'\\characterfile\\bots/a.c\\skill\\1.5\\team\\red',answer,2 if changed else None,b'new^1name');p.update(input=dict(mode=mode,team=team,bot=bot,first=first,answer=answer,changed=changed,now=now,seconds=seconds),words={str(o):m[pointer+o]&0xffffffff for o in WATCH},entity_flags=m[POOL+880*slot+424]&0xffffffff,in_use=m[POOL+880*slot+532]&0xffffffff,ring=m[23708]&0xffffffff,info_ring=m[23712]&0xffffffff);rows.append(p)
20
+
21
+ write_json(Path('docs/research/qvm-resolved-connect-tail.json'),{'source':q['source'],'sha256':q['sha256'],'root':173979,'probes':rows,'limits':'144 original173979 suffix cases execute actual161744 settings/drop wrapper and182896 announcement body instead of supplied bot booleans and captured team callback. Parent control/state remains source-identical; extra userinfo selector toggles, setup records, drops, exact announcement bytes and formatter carry are verified. Native125185 setup,171668 userinfo mutation, ranking/network/logging remain supplied/captured.'})
22
+ if __name__=='__main__':main()
scripts/qvm_connect_callback_support.py CHANGED
@@ -32,3 +32,20 @@ def team_announcement(ins,m,b,pointer,previous):
32
  def fmt(i,m,a,bs):return final_format(i,m,a,dict(bs),formatter)
33
  def send(i,m,a,bs):sends.append(dict(recipient=a[8],text=cstring(m,bs,a[12]).hex()));return m,0,{'network_send_captured':True}
34
  m,v,p,b=run(ins,m,182896,183023,28,{8:pointer,12:previous},b,{70458:fmt,-18:send},base=ANNOUNCE);p.update(sends=sends);return m,p,b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  def fmt(i,m,a,bs):return final_format(i,m,a,dict(bs),formatter)
33
  def send(i,m,a,bs):sends.append(dict(recipient=a[8],text=cstring(m,bs,a[12]).hex()));return m,0,{'network_send_captured':True}
34
  m,v,p,b=run(ins,m,182896,183023,28,{8:pointer,12:previous},b,{70458:fmt,-18:send},base=ANNOUNCE);p.update(sends=sends);return m,p,b
35
+
36
+ def resolved_handlers(slot,userinfo,answer,after_team,name,events,children):
37
+ from qvm_connect_policy_support import tail_handlers
38
+ handlers=tail_handlers(slot,answer,after_team,name,events)
39
+ def bot(i,m,a,bs):
40
+ events.append(dict(op='bot',slot=a[8],restart=a[12]));m,p,b=bot_settings(i,m,dict(bs),a[8],a[12],userinfo,answer);children['bot']=p;return m,p['result'],{'actual_source_child':161744}
41
+ def announce(i,m,a,bs):
42
+ events.append(dict(op='join',slot=slot,choice=a[12]));m,p,b=team_announcement(i,m,dict(bs),a[8],a[12]);children.setdefault('announcements',[]).extend(p['sends']);return m,0,{'actual_source_child':182896}
43
+ handlers.update({161744:bot,182896:announce});return handlers
44
+
45
+ def resolved_tail(ins,m,b,slot,first,bot,userinfo,answer,after_team,name):
46
+ from qvm_connect_policy_support import TAIL
47
+ from qvm_exit_rules_support import CPOOL
48
+ from qvm_camera_world_support import POOL
49
+ import hashlib,json
50
+ events=[];children={};m[TAIL+20]=CPOOL+6336*slot;m[TAIL+24]=POOL+880*slot
51
+ m,v,p,b=run(ins,m,174173,174397,1080,{8:slot,12:first,16:bot},b,resolved_handlers(slot,userinfo,answer,after_team,name,events,children),base=TAIL);changes=p.pop('changes');p.update(change_count=len(changes),changes_sha256=hashlib.sha256(json.dumps(changes,sort_keys=True).encode()).hexdigest(),events=events,children=children,accepted=v==0,message=None if v==0 else cstring(m,b,v).hex());return m,p,b
scripts/test_qvm_resolved_connect_tail.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ class ResolvedTests(unittest.TestCase):
4
+ def test_actual_children_and_preserved_parent_state(self):
5
+ rows=json.loads(Path('docs/research/qvm-resolved-connect-tail.json').read_text())['probes'];old=json.loads(Path('docs/research/qvm-connect-tail.json').read_text())['probes'];self.assertEqual(len(rows),144)
6
+ for p,prior in zip(rows,old):
7
+ for k in ['input','events','accepted','message','words','entity_flags','in_use']:self.assertEqual(p[k],prior[k])
8
+ a=p['input'];bot=p['children'].get('bot');self.assertEqual(bot is not None,bool(a['bot']));self.assertEqual(p['info_ring'],int(bool(a['bot'])))
9
+ if bot:
10
+ self.assertEqual(bot['result'],int(bool(a['answer'])));self.assertEqual(bytes.fromhex(bot['settings'][0])[144:148],bytes.fromhex('0000c03f'));self.assertEqual(bot['calls'][-1]['op'],'setup' if a['answer'] else 'drop')
11
+ notice=p['children'].get('announcements',[]);joined=any(e['op']=='join' for e in p['events']);self.assertEqual(notice,[{'recipient':-1,'text':b'ccprint "5" "new^1name" "2"'.hex()}] if joined else []);self.assertEqual(p['ring'],prior['ring']+int(joined))
12
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -3042,3 +3042,8 @@ report scripts/analyze_rust_team_announcement.py docs/research/rust-team-announc
3042
  edge docs/research/rust-team-announcement.json scripts/test_rust_team_announcement.py
3043
  group rust-team-announcement scripts/analyze_rust_team_announcement.py
3044
  edge scripts/analyze_rust_team_announcement.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
3042
  edge docs/research/rust-team-announcement.json scripts/test_rust_team_announcement.py
3043
  group rust-team-announcement scripts/analyze_rust_team_announcement.py
3044
  edge scripts/analyze_rust_team_announcement.py scripts/analyze_qvm_resumer_audit.py
3045
+ edge docs/research/qvm-connect-tail.json scripts/test_qvm_resolved_connect_tail.py
3046
+ report scripts/analyze_qvm_resolved_connect_tail.py docs/research/qvm-resolved-connect-tail.json
3047
+ edge docs/research/qvm-resolved-connect-tail.json scripts/test_qvm_resolved_connect_tail.py
3048
+ group qvm-resolved-connect-tail scripts/analyze_qvm_resolved_connect_tail.py
3049
+ edge scripts/analyze_qvm_resolved_connect_tail.py scripts/analyze_qvm_resumer_audit.py