nmarshall commited on
Commit
59ce008
·
1 Parent(s): ae16be1

qvm: model hit ray and pose request

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -634,3 +634,6 @@ Research progress: RE-650 [report](research/QVM_PRODUCED_HISTORY_REWIND.md); rem
634
 
635
 
636
  Research progress: RE-651 [report](research/QVM_VICTIM_STATS.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
634
 
635
 
636
  Research progress: RE-651 [report](research/QVM_VICTIM_STATS.md); remaining native/content/runtime/platform scope stays open.
637
+
638
+
639
+ Research progress: RE-652 [report](research/QVM_MODEL_RAY_PREFIX.md); remaining native/content/runtime/platform scope stays open.
docs/FINDINGS.md CHANGED
@@ -980,3 +980,6 @@ Bounded qagame paths recover bomb-plant/inactivity correction requests, direct f
980
 
981
 
982
  **RE-651 — Victim team and hit statistic bookkeeping:** Complete279820 updates attacker/victim hit/location/value counters;33715 enables same-team accounting for modes≥3 except9/11. [Evidence](research/QVM_VICTIM_STATS.md).
 
 
 
 
980
 
981
 
982
  **RE-651 — Victim team and hit statistic bookkeeping:** Complete279820 updates attacker/victim hit/location/value counters;33715 enables same-team accounting for modes≥3 except9/11. [Evidence](research/QVM_VICTIM_STATS.md).
983
+
984
+
985
+ **RE-652 — Model hit target ray normalization and pending pose ABI:** 144766 selects the trace entity, normalizes end−start and requests32254 with target pose fields and shooter6176−client0 timing. [Evidence](research/QVM_MODEL_RAY_PREFIX.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -954,3 +954,6 @@ Research progress: RE-650 [report](research/QVM_PRODUCED_HISTORY_REWIND.md); rem
954
 
955
 
956
  Research progress: RE-651 [report](research/QVM_VICTIM_STATS.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
954
 
955
 
956
  Research progress: RE-651 [report](research/QVM_VICTIM_STATS.md); remaining native/content/runtime/platform scope stays open.
957
+
958
+
959
+ Research progress: RE-652 [report](research/QVM_MODEL_RAY_PREFIX.md); remaining native/content/runtime/platform scope stays open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -922,3 +922,8 @@ Reset plus25 actual append calls produce newest-first retained history consumed
922
  ## 2026-10-20 — RE-651 Victim team and hit statistic bookkeeping (separate task commit)
923
 
924
  Complete279820 updates attacker/victim hit/location/value counters;33715 enables same-team accounting for modes≥3 except9/11. 16 mode predicates and62 two-client/self/location/value cases independently check all380 words per client and exact child order. Full suite: 1074 tests pass. Report regenerates byte-identically (1482109 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
 
 
 
 
 
 
922
  ## 2026-10-20 — RE-651 Victim team and hit statistic bookkeeping (separate task commit)
923
 
924
  Complete279820 updates attacker/victim hit/location/value counters;33715 enables same-team accounting for modes≥3 except9/11. 16 mode predicates and62 two-client/self/location/value cases independently check all380 words per client and exact child order. Full suite: 1074 tests pass. Report regenerates byte-identically (1482109 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
925
+
926
+
927
+ ## 2026-10-20 — RE-652 Model hit target ray normalization and pending pose ABI (separate task commit)
928
+
929
+ 144766 selects the trace entity, normalizes end−start and requests32254 with target pose fields and shooter6176−client0 timing. 12 target/selector/ray fixtures independently check exact normalized directions including zero, both reset flags and every pose argument pointer/value. Full suite: 1077 tests pass. Report regenerates byte-identically (25670 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
@@ -997,3 +997,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
997
 
998
 
999
  - [x] RE-651 Victim team and hit statistic bookkeeping ([report](research/QVM_VICTIM_STATS.md)).
 
 
 
 
997
 
998
 
999
  - [x] RE-651 Victim team and hit statistic bookkeeping ([report](research/QVM_VICTIM_STATS.md)).
1000
+
1001
+
1002
+ - [x] RE-652 Model hit target ray normalization and pending pose ABI ([report](research/QVM_MODEL_RAY_PREFIX.md)).
docs/research/QVM_MODEL_RAY_PREFIX.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Model hit target ray normalization and pending pose ABI
2
+
3
+ RE-652. Reproduce with `python3 scripts/analyze_qvm_model_ray_prefix.py`; check with `python3 scripts/test_qvm_model_ray_prefix.py`. The [machine report](qvm-model-ray-prefix.json) retains source identity and bounded fixtures.
4
+
5
+ Actual144767–144897 selects fixed pool target=base+traceID×880, resets locals216/220, normalizes the input ray with supplied finite sqrt and reads target client700. The next source instructions are decoded into the pending32254 request: target angle/velocity pointers, client6204/6256, shooter6176−client0, local output pointers and client4380..4392 pointers. This timing subtraction differs from the earlier trace prelude6176−716 and is retained without assigning unverified meanings. Zero ray remains zero and still reaches the pose request. The pose child does not execute; selector700 is an explicit fixture rather than a proven asset identity or successful hit.
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
@@ -555,3 +555,6 @@ The extension collector adds five focused tests for native tail calls, command-r
555
 
556
 
557
  [RE-651: Victim team and hit statistic bookkeeping](QVM_VICTIM_STATS.md). Reproduce with `python3 scripts/analyze_qvm_victim_stats.py`; check with `python3 scripts/test_qvm_victim_stats.py`.
 
 
 
 
555
 
556
 
557
  [RE-651: Victim team and hit statistic bookkeeping](QVM_VICTIM_STATS.md). Reproduce with `python3 scripts/analyze_qvm_victim_stats.py`; check with `python3 scripts/test_qvm_victim_stats.py`.
558
+
559
+
560
+ [RE-652: Model hit target ray normalization and pending pose ABI](QVM_MODEL_RAY_PREFIX.md). Reproduce with `python3 scripts/analyze_qvm_model_ray_prefix.py`; check with `python3 scripts/test_qvm_model_ray_prefix.py`.
docs/research/qvm-model-ray-prefix.json ADDED
@@ -0,0 +1,1169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Actual144767\u2013144982 plus decoding pending32254 call; no pose child executes. Finite supplied sqrt. Target/client pointers and selector700 are explicit fixtures, not validated model identities or successful hits.",
3
+ "probes": [
4
+ {
5
+ "arguments": {
6
+ "8": 34147688,
7
+ "12": 2037391360,
8
+ "16": 2037391872,
9
+ "20": 2037391616,
10
+ "24": 2037391872
11
+ },
12
+ "direction": [
13
+ 0,
14
+ 0,
15
+ 0
16
+ ],
17
+ "end": [
18
+ 0,
19
+ 0,
20
+ 0
21
+ ],
22
+ "execution": {
23
+ "byte_writes": [],
24
+ "calls": [
25
+ {
26
+ "args": {
27
+ "8": 0
28
+ },
29
+ "instruction": 144851,
30
+ "target": -107
31
+ }
32
+ ],
33
+ "children": [
34
+ {
35
+ "call": {
36
+ "args": {
37
+ "8": 0
38
+ },
39
+ "instruction": 144851,
40
+ "target": -107
41
+ },
42
+ "effect": {
43
+ "input": 0,
44
+ "root": 0
45
+ }
46
+ }
47
+ ],
48
+ "return": null,
49
+ "trace": null,
50
+ "trace_length": 104,
51
+ "trace_sha256": "eaa19d154f79767ff5e303686cd7a6686aa590ec561828873a6d3bb7c4b1b48c"
52
+ },
53
+ "flags": [
54
+ 0,
55
+ 0
56
+ ],
57
+ "model_selector700": 0,
58
+ "pose_call": {
59
+ "args": {
60
+ "8": 34148628,
61
+ "12": 34148604,
62
+ "16": 11,
63
+ "20": 12,
64
+ "24": 1034,
65
+ "28": 2013528116,
66
+ "32": 2634012,
67
+ "36": 2634016,
68
+ "40": 2634020,
69
+ "44": 2634024,
70
+ "48": 2013528288
71
+ },
72
+ "instruction": 144983,
73
+ "target": 32254
74
+ },
75
+ "request_execution": {
76
+ "trace": null,
77
+ "trace_length": 86,
78
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
79
+ },
80
+ "shooter_time_inputs": {
81
+ "0": 200,
82
+ "6176": 1234
83
+ },
84
+ "start": [
85
+ 0,
86
+ 0,
87
+ 0
88
+ ],
89
+ "status": "pose-child-pending",
90
+ "target_client": 2629632,
91
+ "target_fields": {
92
+ "6204": 11,
93
+ "6256": 12
94
+ },
95
+ "target_index": 65,
96
+ "target_pointer": 34148568
97
+ },
98
+ {
99
+ "arguments": {
100
+ "8": 34147688,
101
+ "12": 2037391360,
102
+ "16": 2037391872,
103
+ "20": 2037391616,
104
+ "24": 2037391872
105
+ },
106
+ "direction": [
107
+ 1058642330,
108
+ 1061997773,
109
+ 0
110
+ ],
111
+ "end": [
112
+ 1077936128,
113
+ 1082130432,
114
+ 0
115
+ ],
116
+ "execution": {
117
+ "byte_writes": [],
118
+ "calls": [
119
+ {
120
+ "args": {
121
+ "8": 1103626240
122
+ },
123
+ "instruction": 144851,
124
+ "target": -107
125
+ }
126
+ ],
127
+ "children": [
128
+ {
129
+ "call": {
130
+ "args": {
131
+ "8": 1103626240
132
+ },
133
+ "instruction": 144851,
134
+ "target": -107
135
+ },
136
+ "effect": {
137
+ "input": 1103626240,
138
+ "root": 1084227584
139
+ }
140
+ }
141
+ ],
142
+ "return": null,
143
+ "trace": null,
144
+ "trace_length": 131,
145
+ "trace_sha256": "ae6437adefac6873cf3ba0d3778302c6e8e4919e639a0e731a316311985decf1"
146
+ },
147
+ "flags": [
148
+ 0,
149
+ 0
150
+ ],
151
+ "model_selector700": 0,
152
+ "pose_call": {
153
+ "args": {
154
+ "8": 34148628,
155
+ "12": 34148604,
156
+ "16": 11,
157
+ "20": 12,
158
+ "24": 1034,
159
+ "28": 2013528116,
160
+ "32": 2634012,
161
+ "36": 2634016,
162
+ "40": 2634020,
163
+ "44": 2634024,
164
+ "48": 2013528288
165
+ },
166
+ "instruction": 144983,
167
+ "target": 32254
168
+ },
169
+ "request_execution": {
170
+ "trace": null,
171
+ "trace_length": 86,
172
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
173
+ },
174
+ "shooter_time_inputs": {
175
+ "0": 200,
176
+ "6176": 1234
177
+ },
178
+ "start": [
179
+ 0,
180
+ 0,
181
+ 0
182
+ ],
183
+ "status": "pose-child-pending",
184
+ "target_client": 2629632,
185
+ "target_fields": {
186
+ "6204": 11,
187
+ "6256": 12
188
+ },
189
+ "target_index": 65,
190
+ "target_pointer": 34148568
191
+ },
192
+ {
193
+ "arguments": {
194
+ "8": 34147688,
195
+ "12": 2037391360,
196
+ "16": 2037391872,
197
+ "20": 2037391616,
198
+ "24": 2037391872
199
+ },
200
+ "direction": [
201
+ 3210704002,
202
+ 1046443138,
203
+ 1054831746
204
+ ],
205
+ "end": [
206
+ 3221225472,
207
+ 1056964608,
208
+ 1065353216
209
+ ],
210
+ "execution": {
211
+ "byte_writes": [],
212
+ "calls": [
213
+ {
214
+ "args": {
215
+ "8": 1084751872
216
+ },
217
+ "instruction": 144851,
218
+ "target": -107
219
+ }
220
+ ],
221
+ "children": [
222
+ {
223
+ "call": {
224
+ "args": {
225
+ "8": 1084751872
226
+ },
227
+ "instruction": 144851,
228
+ "target": -107
229
+ },
230
+ "effect": {
231
+ "input": 1084751872,
232
+ "root": 1074963574
233
+ }
234
+ }
235
+ ],
236
+ "return": null,
237
+ "trace": null,
238
+ "trace_length": 131,
239
+ "trace_sha256": "ae6437adefac6873cf3ba0d3778302c6e8e4919e639a0e731a316311985decf1"
240
+ },
241
+ "flags": [
242
+ 0,
243
+ 0
244
+ ],
245
+ "model_selector700": 0,
246
+ "pose_call": {
247
+ "args": {
248
+ "8": 34148628,
249
+ "12": 34148604,
250
+ "16": 11,
251
+ "20": 12,
252
+ "24": 1034,
253
+ "28": 2013528116,
254
+ "32": 2634012,
255
+ "36": 2634016,
256
+ "40": 2634020,
257
+ "44": 2634024,
258
+ "48": 2013528288
259
+ },
260
+ "instruction": 144983,
261
+ "target": 32254
262
+ },
263
+ "request_execution": {
264
+ "trace": null,
265
+ "trace_length": 86,
266
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
267
+ },
268
+ "shooter_time_inputs": {
269
+ "0": 200,
270
+ "6176": 1234
271
+ },
272
+ "start": [
273
+ 0,
274
+ 0,
275
+ 0
276
+ ],
277
+ "status": "pose-child-pending",
278
+ "target_client": 2629632,
279
+ "target_fields": {
280
+ "6204": 11,
281
+ "6256": 12
282
+ },
283
+ "target_index": 65,
284
+ "target_pointer": 34148568
285
+ },
286
+ {
287
+ "arguments": {
288
+ "8": 34147688,
289
+ "12": 2037391360,
290
+ "16": 2037391872,
291
+ "20": 2037391616,
292
+ "24": 2037391872
293
+ },
294
+ "direction": [
295
+ 0,
296
+ 0,
297
+ 0
298
+ ],
299
+ "end": [
300
+ 0,
301
+ 0,
302
+ 0
303
+ ],
304
+ "execution": {
305
+ "byte_writes": [],
306
+ "calls": [
307
+ {
308
+ "args": {
309
+ "8": 0
310
+ },
311
+ "instruction": 144851,
312
+ "target": -107
313
+ }
314
+ ],
315
+ "children": [
316
+ {
317
+ "call": {
318
+ "args": {
319
+ "8": 0
320
+ },
321
+ "instruction": 144851,
322
+ "target": -107
323
+ },
324
+ "effect": {
325
+ "input": 0,
326
+ "root": 0
327
+ }
328
+ }
329
+ ],
330
+ "return": null,
331
+ "trace": null,
332
+ "trace_length": 104,
333
+ "trace_sha256": "eaa19d154f79767ff5e303686cd7a6686aa590ec561828873a6d3bb7c4b1b48c"
334
+ },
335
+ "flags": [
336
+ 0,
337
+ 0
338
+ ],
339
+ "model_selector700": 3,
340
+ "pose_call": {
341
+ "args": {
342
+ "8": 34148628,
343
+ "12": 34148604,
344
+ "16": 11,
345
+ "20": 12,
346
+ "24": 1034,
347
+ "28": 2013528116,
348
+ "32": 2634012,
349
+ "36": 2634016,
350
+ "40": 2634020,
351
+ "44": 2634024,
352
+ "48": 2013528288
353
+ },
354
+ "instruction": 144983,
355
+ "target": 32254
356
+ },
357
+ "request_execution": {
358
+ "trace": null,
359
+ "trace_length": 86,
360
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
361
+ },
362
+ "shooter_time_inputs": {
363
+ "0": 200,
364
+ "6176": 1234
365
+ },
366
+ "start": [
367
+ 0,
368
+ 0,
369
+ 0
370
+ ],
371
+ "status": "pose-child-pending",
372
+ "target_client": 2629632,
373
+ "target_fields": {
374
+ "6204": 11,
375
+ "6256": 12
376
+ },
377
+ "target_index": 65,
378
+ "target_pointer": 34148568
379
+ },
380
+ {
381
+ "arguments": {
382
+ "8": 34147688,
383
+ "12": 2037391360,
384
+ "16": 2037391872,
385
+ "20": 2037391616,
386
+ "24": 2037391872
387
+ },
388
+ "direction": [
389
+ 1058642330,
390
+ 1061997773,
391
+ 0
392
+ ],
393
+ "end": [
394
+ 1077936128,
395
+ 1082130432,
396
+ 0
397
+ ],
398
+ "execution": {
399
+ "byte_writes": [],
400
+ "calls": [
401
+ {
402
+ "args": {
403
+ "8": 1103626240
404
+ },
405
+ "instruction": 144851,
406
+ "target": -107
407
+ }
408
+ ],
409
+ "children": [
410
+ {
411
+ "call": {
412
+ "args": {
413
+ "8": 1103626240
414
+ },
415
+ "instruction": 144851,
416
+ "target": -107
417
+ },
418
+ "effect": {
419
+ "input": 1103626240,
420
+ "root": 1084227584
421
+ }
422
+ }
423
+ ],
424
+ "return": null,
425
+ "trace": null,
426
+ "trace_length": 131,
427
+ "trace_sha256": "ae6437adefac6873cf3ba0d3778302c6e8e4919e639a0e731a316311985decf1"
428
+ },
429
+ "flags": [
430
+ 0,
431
+ 0
432
+ ],
433
+ "model_selector700": 3,
434
+ "pose_call": {
435
+ "args": {
436
+ "8": 34148628,
437
+ "12": 34148604,
438
+ "16": 11,
439
+ "20": 12,
440
+ "24": 1034,
441
+ "28": 2013528116,
442
+ "32": 2634012,
443
+ "36": 2634016,
444
+ "40": 2634020,
445
+ "44": 2634024,
446
+ "48": 2013528288
447
+ },
448
+ "instruction": 144983,
449
+ "target": 32254
450
+ },
451
+ "request_execution": {
452
+ "trace": null,
453
+ "trace_length": 86,
454
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
455
+ },
456
+ "shooter_time_inputs": {
457
+ "0": 200,
458
+ "6176": 1234
459
+ },
460
+ "start": [
461
+ 0,
462
+ 0,
463
+ 0
464
+ ],
465
+ "status": "pose-child-pending",
466
+ "target_client": 2629632,
467
+ "target_fields": {
468
+ "6204": 11,
469
+ "6256": 12
470
+ },
471
+ "target_index": 65,
472
+ "target_pointer": 34148568
473
+ },
474
+ {
475
+ "arguments": {
476
+ "8": 34147688,
477
+ "12": 2037391360,
478
+ "16": 2037391872,
479
+ "20": 2037391616,
480
+ "24": 2037391872
481
+ },
482
+ "direction": [
483
+ 3210704002,
484
+ 1046443138,
485
+ 1054831746
486
+ ],
487
+ "end": [
488
+ 3221225472,
489
+ 1056964608,
490
+ 1065353216
491
+ ],
492
+ "execution": {
493
+ "byte_writes": [],
494
+ "calls": [
495
+ {
496
+ "args": {
497
+ "8": 1084751872
498
+ },
499
+ "instruction": 144851,
500
+ "target": -107
501
+ }
502
+ ],
503
+ "children": [
504
+ {
505
+ "call": {
506
+ "args": {
507
+ "8": 1084751872
508
+ },
509
+ "instruction": 144851,
510
+ "target": -107
511
+ },
512
+ "effect": {
513
+ "input": 1084751872,
514
+ "root": 1074963574
515
+ }
516
+ }
517
+ ],
518
+ "return": null,
519
+ "trace": null,
520
+ "trace_length": 131,
521
+ "trace_sha256": "ae6437adefac6873cf3ba0d3778302c6e8e4919e639a0e731a316311985decf1"
522
+ },
523
+ "flags": [
524
+ 0,
525
+ 0
526
+ ],
527
+ "model_selector700": 3,
528
+ "pose_call": {
529
+ "args": {
530
+ "8": 34148628,
531
+ "12": 34148604,
532
+ "16": 11,
533
+ "20": 12,
534
+ "24": 1034,
535
+ "28": 2013528116,
536
+ "32": 2634012,
537
+ "36": 2634016,
538
+ "40": 2634020,
539
+ "44": 2634024,
540
+ "48": 2013528288
541
+ },
542
+ "instruction": 144983,
543
+ "target": 32254
544
+ },
545
+ "request_execution": {
546
+ "trace": null,
547
+ "trace_length": 86,
548
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
549
+ },
550
+ "shooter_time_inputs": {
551
+ "0": 200,
552
+ "6176": 1234
553
+ },
554
+ "start": [
555
+ 0,
556
+ 0,
557
+ 0
558
+ ],
559
+ "status": "pose-child-pending",
560
+ "target_client": 2629632,
561
+ "target_fields": {
562
+ "6204": 11,
563
+ "6256": 12
564
+ },
565
+ "target_index": 65,
566
+ "target_pointer": 34148568
567
+ },
568
+ {
569
+ "arguments": {
570
+ "8": 34147688,
571
+ "12": 2037391360,
572
+ "16": 2037391872,
573
+ "20": 2037391616,
574
+ "24": 2037391872
575
+ },
576
+ "direction": [
577
+ 0,
578
+ 0,
579
+ 0
580
+ ],
581
+ "end": [
582
+ 0,
583
+ 0,
584
+ 0
585
+ ],
586
+ "execution": {
587
+ "byte_writes": [],
588
+ "calls": [
589
+ {
590
+ "args": {
591
+ "8": 0
592
+ },
593
+ "instruction": 144851,
594
+ "target": -107
595
+ }
596
+ ],
597
+ "children": [
598
+ {
599
+ "call": {
600
+ "args": {
601
+ "8": 0
602
+ },
603
+ "instruction": 144851,
604
+ "target": -107
605
+ },
606
+ "effect": {
607
+ "input": 0,
608
+ "root": 0
609
+ }
610
+ }
611
+ ],
612
+ "return": null,
613
+ "trace": null,
614
+ "trace_length": 104,
615
+ "trace_sha256": "eaa19d154f79767ff5e303686cd7a6686aa590ec561828873a6d3bb7c4b1b48c"
616
+ },
617
+ "flags": [
618
+ 0,
619
+ 0
620
+ ],
621
+ "model_selector700": 0,
622
+ "pose_call": {
623
+ "args": {
624
+ "8": 34152148,
625
+ "12": 34152124,
626
+ "16": 11,
627
+ "20": 12,
628
+ "24": 1034,
629
+ "28": 2013528116,
630
+ "32": 2666780,
631
+ "36": 2666784,
632
+ "40": 2666788,
633
+ "44": 2666792,
634
+ "48": 2013528288
635
+ },
636
+ "instruction": 144983,
637
+ "target": 32254
638
+ },
639
+ "request_execution": {
640
+ "trace": null,
641
+ "trace_length": 86,
642
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
643
+ },
644
+ "shooter_time_inputs": {
645
+ "0": 200,
646
+ "6176": 1234
647
+ },
648
+ "start": [
649
+ 0,
650
+ 0,
651
+ 0
652
+ ],
653
+ "status": "pose-child-pending",
654
+ "target_client": 2662400,
655
+ "target_fields": {
656
+ "6204": 11,
657
+ "6256": 12
658
+ },
659
+ "target_index": 69,
660
+ "target_pointer": 34152088
661
+ },
662
+ {
663
+ "arguments": {
664
+ "8": 34147688,
665
+ "12": 2037391360,
666
+ "16": 2037391872,
667
+ "20": 2037391616,
668
+ "24": 2037391872
669
+ },
670
+ "direction": [
671
+ 1058642330,
672
+ 1061997773,
673
+ 0
674
+ ],
675
+ "end": [
676
+ 1077936128,
677
+ 1082130432,
678
+ 0
679
+ ],
680
+ "execution": {
681
+ "byte_writes": [],
682
+ "calls": [
683
+ {
684
+ "args": {
685
+ "8": 1103626240
686
+ },
687
+ "instruction": 144851,
688
+ "target": -107
689
+ }
690
+ ],
691
+ "children": [
692
+ {
693
+ "call": {
694
+ "args": {
695
+ "8": 1103626240
696
+ },
697
+ "instruction": 144851,
698
+ "target": -107
699
+ },
700
+ "effect": {
701
+ "input": 1103626240,
702
+ "root": 1084227584
703
+ }
704
+ }
705
+ ],
706
+ "return": null,
707
+ "trace": null,
708
+ "trace_length": 131,
709
+ "trace_sha256": "ae6437adefac6873cf3ba0d3778302c6e8e4919e639a0e731a316311985decf1"
710
+ },
711
+ "flags": [
712
+ 0,
713
+ 0
714
+ ],
715
+ "model_selector700": 0,
716
+ "pose_call": {
717
+ "args": {
718
+ "8": 34152148,
719
+ "12": 34152124,
720
+ "16": 11,
721
+ "20": 12,
722
+ "24": 1034,
723
+ "28": 2013528116,
724
+ "32": 2666780,
725
+ "36": 2666784,
726
+ "40": 2666788,
727
+ "44": 2666792,
728
+ "48": 2013528288
729
+ },
730
+ "instruction": 144983,
731
+ "target": 32254
732
+ },
733
+ "request_execution": {
734
+ "trace": null,
735
+ "trace_length": 86,
736
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
737
+ },
738
+ "shooter_time_inputs": {
739
+ "0": 200,
740
+ "6176": 1234
741
+ },
742
+ "start": [
743
+ 0,
744
+ 0,
745
+ 0
746
+ ],
747
+ "status": "pose-child-pending",
748
+ "target_client": 2662400,
749
+ "target_fields": {
750
+ "6204": 11,
751
+ "6256": 12
752
+ },
753
+ "target_index": 69,
754
+ "target_pointer": 34152088
755
+ },
756
+ {
757
+ "arguments": {
758
+ "8": 34147688,
759
+ "12": 2037391360,
760
+ "16": 2037391872,
761
+ "20": 2037391616,
762
+ "24": 2037391872
763
+ },
764
+ "direction": [
765
+ 3210704002,
766
+ 1046443138,
767
+ 1054831746
768
+ ],
769
+ "end": [
770
+ 3221225472,
771
+ 1056964608,
772
+ 1065353216
773
+ ],
774
+ "execution": {
775
+ "byte_writes": [],
776
+ "calls": [
777
+ {
778
+ "args": {
779
+ "8": 1084751872
780
+ },
781
+ "instruction": 144851,
782
+ "target": -107
783
+ }
784
+ ],
785
+ "children": [
786
+ {
787
+ "call": {
788
+ "args": {
789
+ "8": 1084751872
790
+ },
791
+ "instruction": 144851,
792
+ "target": -107
793
+ },
794
+ "effect": {
795
+ "input": 1084751872,
796
+ "root": 1074963574
797
+ }
798
+ }
799
+ ],
800
+ "return": null,
801
+ "trace": null,
802
+ "trace_length": 131,
803
+ "trace_sha256": "ae6437adefac6873cf3ba0d3778302c6e8e4919e639a0e731a316311985decf1"
804
+ },
805
+ "flags": [
806
+ 0,
807
+ 0
808
+ ],
809
+ "model_selector700": 0,
810
+ "pose_call": {
811
+ "args": {
812
+ "8": 34152148,
813
+ "12": 34152124,
814
+ "16": 11,
815
+ "20": 12,
816
+ "24": 1034,
817
+ "28": 2013528116,
818
+ "32": 2666780,
819
+ "36": 2666784,
820
+ "40": 2666788,
821
+ "44": 2666792,
822
+ "48": 2013528288
823
+ },
824
+ "instruction": 144983,
825
+ "target": 32254
826
+ },
827
+ "request_execution": {
828
+ "trace": null,
829
+ "trace_length": 86,
830
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
831
+ },
832
+ "shooter_time_inputs": {
833
+ "0": 200,
834
+ "6176": 1234
835
+ },
836
+ "start": [
837
+ 0,
838
+ 0,
839
+ 0
840
+ ],
841
+ "status": "pose-child-pending",
842
+ "target_client": 2662400,
843
+ "target_fields": {
844
+ "6204": 11,
845
+ "6256": 12
846
+ },
847
+ "target_index": 69,
848
+ "target_pointer": 34152088
849
+ },
850
+ {
851
+ "arguments": {
852
+ "8": 34147688,
853
+ "12": 2037391360,
854
+ "16": 2037391872,
855
+ "20": 2037391616,
856
+ "24": 2037391872
857
+ },
858
+ "direction": [
859
+ 0,
860
+ 0,
861
+ 0
862
+ ],
863
+ "end": [
864
+ 0,
865
+ 0,
866
+ 0
867
+ ],
868
+ "execution": {
869
+ "byte_writes": [],
870
+ "calls": [
871
+ {
872
+ "args": {
873
+ "8": 0
874
+ },
875
+ "instruction": 144851,
876
+ "target": -107
877
+ }
878
+ ],
879
+ "children": [
880
+ {
881
+ "call": {
882
+ "args": {
883
+ "8": 0
884
+ },
885
+ "instruction": 144851,
886
+ "target": -107
887
+ },
888
+ "effect": {
889
+ "input": 0,
890
+ "root": 0
891
+ }
892
+ }
893
+ ],
894
+ "return": null,
895
+ "trace": null,
896
+ "trace_length": 104,
897
+ "trace_sha256": "eaa19d154f79767ff5e303686cd7a6686aa590ec561828873a6d3bb7c4b1b48c"
898
+ },
899
+ "flags": [
900
+ 0,
901
+ 0
902
+ ],
903
+ "model_selector700": 3,
904
+ "pose_call": {
905
+ "args": {
906
+ "8": 34152148,
907
+ "12": 34152124,
908
+ "16": 11,
909
+ "20": 12,
910
+ "24": 1034,
911
+ "28": 2013528116,
912
+ "32": 2666780,
913
+ "36": 2666784,
914
+ "40": 2666788,
915
+ "44": 2666792,
916
+ "48": 2013528288
917
+ },
918
+ "instruction": 144983,
919
+ "target": 32254
920
+ },
921
+ "request_execution": {
922
+ "trace": null,
923
+ "trace_length": 86,
924
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
925
+ },
926
+ "shooter_time_inputs": {
927
+ "0": 200,
928
+ "6176": 1234
929
+ },
930
+ "start": [
931
+ 0,
932
+ 0,
933
+ 0
934
+ ],
935
+ "status": "pose-child-pending",
936
+ "target_client": 2662400,
937
+ "target_fields": {
938
+ "6204": 11,
939
+ "6256": 12
940
+ },
941
+ "target_index": 69,
942
+ "target_pointer": 34152088
943
+ },
944
+ {
945
+ "arguments": {
946
+ "8": 34147688,
947
+ "12": 2037391360,
948
+ "16": 2037391872,
949
+ "20": 2037391616,
950
+ "24": 2037391872
951
+ },
952
+ "direction": [
953
+ 1058642330,
954
+ 1061997773,
955
+ 0
956
+ ],
957
+ "end": [
958
+ 1077936128,
959
+ 1082130432,
960
+ 0
961
+ ],
962
+ "execution": {
963
+ "byte_writes": [],
964
+ "calls": [
965
+ {
966
+ "args": {
967
+ "8": 1103626240
968
+ },
969
+ "instruction": 144851,
970
+ "target": -107
971
+ }
972
+ ],
973
+ "children": [
974
+ {
975
+ "call": {
976
+ "args": {
977
+ "8": 1103626240
978
+ },
979
+ "instruction": 144851,
980
+ "target": -107
981
+ },
982
+ "effect": {
983
+ "input": 1103626240,
984
+ "root": 1084227584
985
+ }
986
+ }
987
+ ],
988
+ "return": null,
989
+ "trace": null,
990
+ "trace_length": 131,
991
+ "trace_sha256": "ae6437adefac6873cf3ba0d3778302c6e8e4919e639a0e731a316311985decf1"
992
+ },
993
+ "flags": [
994
+ 0,
995
+ 0
996
+ ],
997
+ "model_selector700": 3,
998
+ "pose_call": {
999
+ "args": {
1000
+ "8": 34152148,
1001
+ "12": 34152124,
1002
+ "16": 11,
1003
+ "20": 12,
1004
+ "24": 1034,
1005
+ "28": 2013528116,
1006
+ "32": 2666780,
1007
+ "36": 2666784,
1008
+ "40": 2666788,
1009
+ "44": 2666792,
1010
+ "48": 2013528288
1011
+ },
1012
+ "instruction": 144983,
1013
+ "target": 32254
1014
+ },
1015
+ "request_execution": {
1016
+ "trace": null,
1017
+ "trace_length": 86,
1018
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
1019
+ },
1020
+ "shooter_time_inputs": {
1021
+ "0": 200,
1022
+ "6176": 1234
1023
+ },
1024
+ "start": [
1025
+ 0,
1026
+ 0,
1027
+ 0
1028
+ ],
1029
+ "status": "pose-child-pending",
1030
+ "target_client": 2662400,
1031
+ "target_fields": {
1032
+ "6204": 11,
1033
+ "6256": 12
1034
+ },
1035
+ "target_index": 69,
1036
+ "target_pointer": 34152088
1037
+ },
1038
+ {
1039
+ "arguments": {
1040
+ "8": 34147688,
1041
+ "12": 2037391360,
1042
+ "16": 2037391872,
1043
+ "20": 2037391616,
1044
+ "24": 2037391872
1045
+ },
1046
+ "direction": [
1047
+ 3210704002,
1048
+ 1046443138,
1049
+ 1054831746
1050
+ ],
1051
+ "end": [
1052
+ 3221225472,
1053
+ 1056964608,
1054
+ 1065353216
1055
+ ],
1056
+ "execution": {
1057
+ "byte_writes": [],
1058
+ "calls": [
1059
+ {
1060
+ "args": {
1061
+ "8": 1084751872
1062
+ },
1063
+ "instruction": 144851,
1064
+ "target": -107
1065
+ }
1066
+ ],
1067
+ "children": [
1068
+ {
1069
+ "call": {
1070
+ "args": {
1071
+ "8": 1084751872
1072
+ },
1073
+ "instruction": 144851,
1074
+ "target": -107
1075
+ },
1076
+ "effect": {
1077
+ "input": 1084751872,
1078
+ "root": 1074963574
1079
+ }
1080
+ }
1081
+ ],
1082
+ "return": null,
1083
+ "trace": null,
1084
+ "trace_length": 131,
1085
+ "trace_sha256": "ae6437adefac6873cf3ba0d3778302c6e8e4919e639a0e731a316311985decf1"
1086
+ },
1087
+ "flags": [
1088
+ 0,
1089
+ 0
1090
+ ],
1091
+ "model_selector700": 3,
1092
+ "pose_call": {
1093
+ "args": {
1094
+ "8": 34152148,
1095
+ "12": 34152124,
1096
+ "16": 11,
1097
+ "20": 12,
1098
+ "24": 1034,
1099
+ "28": 2013528116,
1100
+ "32": 2666780,
1101
+ "36": 2666784,
1102
+ "40": 2666788,
1103
+ "44": 2666792,
1104
+ "48": 2013528288
1105
+ },
1106
+ "instruction": 144983,
1107
+ "target": 32254
1108
+ },
1109
+ "request_execution": {
1110
+ "trace": null,
1111
+ "trace_length": 86,
1112
+ "trace_sha256": "6e955ad42e431e39382ebf0b2f6c2cc7482e4e5bf9bb2a7b9d32de3acf2215d2"
1113
+ },
1114
+ "shooter_time_inputs": {
1115
+ "0": 200,
1116
+ "6176": 1234
1117
+ },
1118
+ "start": [
1119
+ 0,
1120
+ 0,
1121
+ 0
1122
+ ],
1123
+ "status": "pose-child-pending",
1124
+ "target_client": 2662400,
1125
+ "target_fields": {
1126
+ "6204": 11,
1127
+ "6256": 12
1128
+ },
1129
+ "target_index": 69,
1130
+ "target_pointer": 34152088
1131
+ }
1132
+ ],
1133
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1134
+ "source": {
1135
+ "archive": "zUrT43_qvm.pk3",
1136
+ "archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
1137
+ "member": {
1138
+ "bytes": 983300,
1139
+ "comment_hex": "",
1140
+ "compressed_bytes": 246560,
1141
+ "compression": 8,
1142
+ "crc32": "98ea1768",
1143
+ "create_system": 0,
1144
+ "create_version": 63,
1145
+ "date_time": [
1146
+ 2018,
1147
+ 6,
1148
+ 18,
1149
+ 22,
1150
+ 11,
1151
+ 50
1152
+ ],
1153
+ "directory": false,
1154
+ "entry_index": 2,
1155
+ "external_attr": 32,
1156
+ "extra_hex": "0a0020000000000001001800d1e24e974007d40116dcbf962f1fd20116dcbf962f1fd201",
1157
+ "extract_version": 20,
1158
+ "flags": 0,
1159
+ "header_offset": 221309,
1160
+ "internal_attr": 0,
1161
+ "occurrence": 0,
1162
+ "output": "assets/extracted/zUrT43_qvm.pk3/members/000002/vm/qagame.qvm",
1163
+ "path": "vm/qagame.qvm",
1164
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1165
+ "type": "member",
1166
+ "volume": 0
1167
+ }
1168
+ }
1169
+ }
scripts/analyze_qvm_model_ray_prefix.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """144766 target selection, normalized ray and pending pose request ABI."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source,execute
6
+ from analyze_deferred_auth import trace_slice
7
+ from analyze_bsp_references import trace_fields
8
+ from analyze_qvm_shot_trace_request import fixture,TRACE,END,HIT
9
+ from analyze_qvm_entity_init import POOL,STRIDE
10
+ from analyze_qvm_acceleration import word
11
+ from analyze_qvm_slide_prefix import vec
12
+ from analyze_qvm import write_json
13
+ LOCAL=0x78040000
14
+
15
+ def prefix(ins,m,args):
16
+ m=dict(m)
17
+ for o,v in args.items():m[LOCAL+312+o]=v
18
+ start=vec(m,args[16]);end=vec(m,args[20]);index=m[args[12]+52];target=POOL+index*STRIDE;client=m[target+520];shooter_client=m[args[8]+520];m,_,e=execute(ins,144767,144898,m,(0,0,0),LOCAL)
19
+ request=trace_slice(ins,144898,144984,m,{},local_base=LOCAL,capture_stack=True,limit=128);m=request['memory'];assert len(request['calls'])==1 and request['calls'][0]['target']==32254
20
+ return m,{'arguments':args,'start':start,'end':end,'target_index':index,'target_pointer':target,'target_client':client,'model_selector700':m[client+700],'target_fields':{str(o):m[client+o] for o in [6204,6256]},'shooter_time_inputs':{'6176':m[shooter_client+6176],'0':m[shooter_client]},'direction':vec(m,LOCAL+200),'flags':[m[LOCAL+216],m[LOCAL+220]],'execution':e,'pose_call':request['calls'][0],'request_execution':trace_fields(request,False),'status':'pose-child-pending'}
21
+
22
+ def main():
23
+ q,raw,h,ins=source();rows=[]
24
+ for index,selector,delta in itertools.product([65,69],[0,3],[(0,0,0),(3,4,0),(-2,.5,1)]):
25
+ m,a=fixture(raw,h);p=POOL+index*STRIDE;c=m[p+520];m[TRACE+52]=index;m[c+700]=selector;m[c+6204]=11;m[c+6256]=12;shooter=m[a[8]+520];m[shooter]=200;m[shooter+6176]=1234
26
+ for j,v in enumerate(delta):m[END+4*j]=word(v)
27
+ start=END+0x100
28
+ for j in range(3):m[start+4*j]=word(0)
29
+ rows.append(prefix(ins,m,{8:a[8],12:TRACE,16:start,20:END,24:HIT})[1])
30
+ write_json(Path('docs/research/qvm-model-ray-prefix.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual144767–144982 plus decoding pending32254 call; no pose child executes. Finite supplied sqrt. Target/client pointers and selector700 are explicit fixtures, not validated model identities or successful hits.'})
31
+ if __name__=='__main__':main()
scripts/test_qvm_model_ray_prefix.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,math,unittest
2
+ from pathlib import Path
3
+ from test_qvm_ground import word,n,f
4
+ class ModelRayPrefixTests(unittest.TestCase):
5
+ @classmethod
6
+ def setUpClass(cls):cls.r=json.loads(Path('docs/research/qvm-model-ray-prefix.json').read_text())
7
+ def test_independent_normalized_direction_including_zero(self):
8
+ for p in self.r['probes']:
9
+ v=[f(n(b)-n(a)) for a,b in zip(p['start'],p['end'])];length=f(math.sqrt(f(f(f(v[0]*v[0])+f(v[1]*v[1]))+f(v[2]*v[2]))));want=[word(f(x*f(1/length))) for x in v] if length else list(map(word,v));self.assertEqual(p['direction'],want);self.assertEqual(p['flags'],[0,0])
10
+ def test_exact_target_and_pose_argument_contract(self):
11
+ for p in self.r['probes']:
12
+ target=34091368+880*p['target_index'];client=p['target_client'];self.assertEqual(p['target_pointer'],target);self.assertEqual(p['pose_call']['args'],{'8':target+60,'12':target+36,'16':11,'20':12,'24':1034,'28':0x78040000+52,'32':client+4380,'36':client+4384,'40':client+4388,'44':client+4392,'48':0x78040000+224})
13
+ def test_only_sqrt_executes_before_unrecovered_pose(self):
14
+ for p in self.r['probes']:self.assertEqual([c['target'] for c in p['execution']['calls']],[-107]);self.assertEqual(p['pose_call']['target'],32254);self.assertEqual(p['status'],'pose-child-pending')
15
+ if __name__=='__main__':unittest.main()