nmarshall commited on
Commit
eac9f49
·
1 Parent(s): f525c4a

qvm: child origin ancestry

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -685,3 +685,6 @@ Research progress: RE-668 [report](research/QVM_MODEL_CHILD_SAMPLES.md); remaini
685
 
686
 
687
  Research progress: RE-670 [report](research/QVM_POSED_MODEL.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
685
 
686
 
687
  Research progress: RE-670 [report](research/QVM_POSED_MODEL.md); remaining native/content/runtime/platform scope stays open.
688
+
689
+
690
+ Research progress: RE-671 [report](research/QVM_CHILD_ORIGIN.md); remaining native/content/runtime/platform scope stays open.
docs/FINDINGS.md CHANGED
@@ -1031,3 +1031,6 @@ Bounded qagame paths recover bomb-plant/inactivity correction requests, direct f
1031
 
1032
 
1033
  **RE-670 — Model ray through actual pose and transform construction:** 144766 now executes complete32254 with live target/client pointers and consumes its actual nine angle outputs in all four transform records. [Evidence](research/QVM_POSED_MODEL.md).
 
 
 
 
1031
 
1032
 
1033
  **RE-670 — Model ray through actual pose and transform construction:** 144766 now executes complete32254 with live target/client pointers and consumes its actual nine angle outputs in all four transform records. [Evidence](research/QVM_POSED_MODEL.md).
1034
+
1035
+
1036
+ **RE-671 — Child sample origin through parent-chain rotations:** 22009 copies sample64..72 into child origin, rotates through every parent basis, then adds only the immediate parent origin; null parent exits before basis composition. [Evidence](research/QVM_CHILD_ORIGIN.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1011,3 +1011,6 @@ RE-659–668 batch complete: [complete finite pose and lifecycle composition](re
1011
 
1012
 
1013
  Research progress: RE-670 [report](research/QVM_POSED_MODEL.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
1011
 
1012
 
1013
  Research progress: RE-670 [report](research/QVM_POSED_MODEL.md); remaining native/content/runtime/platform scope stays open.
1014
+
1015
+
1016
+ Research progress: RE-671 [report](research/QVM_CHILD_ORIGIN.md); remaining native/content/runtime/platform scope stays open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -1007,3 +1007,8 @@ Grenade construction now runs actual276433 over an explicit pool and inherits th
1007
  ## 2026-10-21 — RE-670 Model ray through actual pose and transform construction (separate task commit)
1008
 
1009
  144766 now executes complete32254 with live target/client pointers and consumes its actual nine angle outputs in all four transform records. 24 fixtures independently check complete pose outputs/state, caller ABI, ray normalization and every word of four88-byte transform records. Full suite: 1141 tests pass. Report regenerates byte-identically (1011044 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
 
 
 
 
 
 
1007
  ## 2026-10-21 — RE-670 Model ray through actual pose and transform construction (separate task commit)
1008
 
1009
  144766 now executes complete32254 with live target/client pointers and consumes its actual nine angle outputs in all four transform records. 24 fixtures independently check complete pose outputs/state, caller ABI, ray normalization and every word of four88-byte transform records. Full suite: 1141 tests pass. Report regenerates byte-identically (1011044 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
1010
+
1011
+
1012
+ ## 2026-10-21 — RE-671 Child sample origin through parent-chain rotations (separate task commit)
1013
+
1014
+ 22009 copies sample64..72 into child origin, rotates through every parent basis, then adds only the immediate parent origin; null parent exits before basis composition. 16 fixtures independently check ordered parent rotations, immediate translation, zero-parent exit and bounded cycle rejection. Full suite: 1145 tests pass. Report regenerates byte-identically (21978 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
@@ -1054,3 +1054,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1054
 
1055
 
1056
  - [x] RE-670 Model ray through actual pose and transform construction ([report](research/QVM_POSED_MODEL.md)).
 
 
 
 
1054
 
1055
 
1056
  - [x] RE-670 Model ray through actual pose and transform construction ([report](research/QVM_POSED_MODEL.md)).
1057
+
1058
+
1059
+ - [x] RE-671 Child sample origin through parent-chain rotations ([report](research/QVM_CHILD_ORIGIN.md)).
docs/research/QVM_CHILD_ORIGIN.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Child sample origin through parent-chain rotations
2
+
3
+ RE-671. Reproduce with `python3 scripts/analyze_qvm_child_origin.py`; check with `python3 scripts/test_qvm_child_origin.py`. The [machine report](qvm-child-origin.json) retains source identity and bounded fixtures.
4
+
5
+ Actual22010–22321 prepares a sample matrix and copies sample64..72 to child76..84. With no parent96 it jumps directly to the void epilogue. Otherwise it rotates the origin through each linked parent basis in order, then adds the immediate parent translation. Ancestor translations are not separately added in this slice. Explicit finite chains of depth0..3 cover identity and nonuniform turn/scale bases. A harness ownership precheck rejects cyclic supplied chains rather than hanging the bounded evaluator; this is not an invented original-game guard. Basis composition remains the next stage, with no native/intersection calls.
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
@@ -612,3 +612,6 @@ The extension collector adds five focused tests for native tail calls, command-r
612
 
613
 
614
  [RE-670: Model ray through actual pose and transform construction](QVM_POSED_MODEL.md). Reproduce with `python3 scripts/analyze_qvm_posed_model.py`; check with `python3 scripts/test_qvm_posed_model.py`.
 
 
 
 
612
 
613
 
614
  [RE-670: Model ray through actual pose and transform construction](QVM_POSED_MODEL.md). Reproduce with `python3 scripts/analyze_qvm_posed_model.py`; check with `python3 scripts/test_qvm_posed_model.py`.
615
+
616
+
617
+ [RE-671: Child sample origin through parent-chain rotations](QVM_CHILD_ORIGIN.md). Reproduce with `python3 scripts/analyze_qvm_child_origin.py`; check with `python3 scripts/test_qvm_child_origin.py`.
docs/research/qvm-child-origin.json ADDED
@@ -0,0 +1,1101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Actual22010 to22322 or null-parent23090. Parent tables are finite fixtures; cyclic fixture inputs reject before execution. Only source origin path, no intersection or ownership/native effects.",
3
+ "probes": [
4
+ {
5
+ "execution": {
6
+ "byte_writes": [],
7
+ "calls": [],
8
+ "children": [],
9
+ "return": null,
10
+ "stop": 23090,
11
+ "trace": null,
12
+ "trace_length": 106,
13
+ "trace_sha256": "d7ee7a9fa0b172694decf09956f737adb5a86a8a6491e0ef1ee1474c22c5e163"
14
+ },
15
+ "final_origin": [
16
+ 1092616192,
17
+ 1101004800,
18
+ 1106247680
19
+ ],
20
+ "initial_origin": [
21
+ 1089680179,
22
+ 1090519040,
23
+ 1090938470
24
+ ],
25
+ "parents": [],
26
+ "sample_origin": [
27
+ 1092616192,
28
+ 1101004800,
29
+ 1106247680
30
+ ]
31
+ },
32
+ {
33
+ "execution": {
34
+ "byte_writes": [],
35
+ "calls": [],
36
+ "children": [],
37
+ "return": null,
38
+ "stop": 23090,
39
+ "trace": null,
40
+ "trace_length": 106,
41
+ "trace_sha256": "d7ee7a9fa0b172694decf09956f737adb5a86a8a6491e0ef1ee1474c22c5e163"
42
+ },
43
+ "final_origin": [
44
+ 3204448256,
45
+ 1067450368,
46
+ 3221225472
47
+ ],
48
+ "initial_origin": [
49
+ 1089680179,
50
+ 1090519040,
51
+ 1090938470
52
+ ],
53
+ "parents": [],
54
+ "sample_origin": [
55
+ 3204448256,
56
+ 1067450368,
57
+ 3221225472
58
+ ]
59
+ },
60
+ {
61
+ "execution": {
62
+ "byte_writes": [],
63
+ "calls": [],
64
+ "children": [],
65
+ "return": null,
66
+ "stop": 23090,
67
+ "trace": null,
68
+ "trace_length": 106,
69
+ "trace_sha256": "d7ee7a9fa0b172694decf09956f737adb5a86a8a6491e0ef1ee1474c22c5e163"
70
+ },
71
+ "final_origin": [
72
+ 1092616192,
73
+ 1101004800,
74
+ 1106247680
75
+ ],
76
+ "initial_origin": [
77
+ 1089680179,
78
+ 1090519040,
79
+ 1090938470
80
+ ],
81
+ "parents": [],
82
+ "sample_origin": [
83
+ 1092616192,
84
+ 1101004800,
85
+ 1106247680
86
+ ]
87
+ },
88
+ {
89
+ "execution": {
90
+ "byte_writes": [],
91
+ "calls": [],
92
+ "children": [],
93
+ "return": null,
94
+ "stop": 23090,
95
+ "trace": null,
96
+ "trace_length": 106,
97
+ "trace_sha256": "d7ee7a9fa0b172694decf09956f737adb5a86a8a6491e0ef1ee1474c22c5e163"
98
+ },
99
+ "final_origin": [
100
+ 3204448256,
101
+ 1067450368,
102
+ 3221225472
103
+ ],
104
+ "initial_origin": [
105
+ 1089680179,
106
+ 1090519040,
107
+ 1090938470
108
+ ],
109
+ "parents": [],
110
+ "sample_origin": [
111
+ 3204448256,
112
+ 1067450368,
113
+ 3221225472
114
+ ]
115
+ },
116
+ {
117
+ "execution": {
118
+ "byte_writes": [],
119
+ "calls": [],
120
+ "children": [],
121
+ "return": null,
122
+ "stop": 22322,
123
+ "trace": null,
124
+ "trace_length": 314,
125
+ "trace_sha256": "476f869038a60b051f1ff4f92b5f5a56275a2b116ec0200296092a3aa2b91f1b"
126
+ },
127
+ "final_origin": [
128
+ 1121714176,
129
+ 1130102784,
130
+ 1134886912
131
+ ],
132
+ "initial_origin": [
133
+ 1089680179,
134
+ 1090519040,
135
+ 1090938470
136
+ ],
137
+ "parents": [
138
+ {
139
+ "basis": [
140
+ [
141
+ 1065353216,
142
+ 0,
143
+ 0
144
+ ],
145
+ [
146
+ 0,
147
+ 1065353216,
148
+ 0
149
+ ],
150
+ [
151
+ 0,
152
+ 0,
153
+ 1065353216
154
+ ]
155
+ ],
156
+ "origin": [
157
+ 1120403456,
158
+ 1128792064,
159
+ 1133903872
160
+ ],
161
+ "pointer": 2014581760
162
+ }
163
+ ],
164
+ "sample_origin": [
165
+ 1092616192,
166
+ 1101004800,
167
+ 1106247680
168
+ ]
169
+ },
170
+ {
171
+ "execution": {
172
+ "byte_writes": [],
173
+ "calls": [],
174
+ "children": [],
175
+ "return": null,
176
+ "stop": 22322,
177
+ "trace": null,
178
+ "trace_length": 314,
179
+ "trace_sha256": "476f869038a60b051f1ff4f92b5f5a56275a2b116ec0200296092a3aa2b91f1b"
180
+ },
181
+ "final_origin": [
182
+ 1120337920,
183
+ 1128873984,
184
+ 1133838336
185
+ ],
186
+ "initial_origin": [
187
+ 1089680179,
188
+ 1090519040,
189
+ 1090938470
190
+ ],
191
+ "parents": [
192
+ {
193
+ "basis": [
194
+ [
195
+ 1065353216,
196
+ 0,
197
+ 0
198
+ ],
199
+ [
200
+ 0,
201
+ 1065353216,
202
+ 0
203
+ ],
204
+ [
205
+ 0,
206
+ 0,
207
+ 1065353216
208
+ ]
209
+ ],
210
+ "origin": [
211
+ 1120403456,
212
+ 1128792064,
213
+ 1133903872
214
+ ],
215
+ "pointer": 2014581760
216
+ }
217
+ ],
218
+ "sample_origin": [
219
+ 3204448256,
220
+ 1067450368,
221
+ 3221225472
222
+ ]
223
+ },
224
+ {
225
+ "execution": {
226
+ "byte_writes": [],
227
+ "calls": [],
228
+ "children": [],
229
+ "return": null,
230
+ "stop": 22322,
231
+ "trace": null,
232
+ "trace_length": 314,
233
+ "trace_sha256": "476f869038a60b051f1ff4f92b5f5a56275a2b116ec0200296092a3aa2b91f1b"
234
+ },
235
+ "final_origin": [
236
+ 1117782016,
237
+ 1129447424,
238
+ 1135869952
239
+ ],
240
+ "initial_origin": [
241
+ 1089680179,
242
+ 1090519040,
243
+ 1090938470
244
+ ],
245
+ "parents": [
246
+ {
247
+ "basis": [
248
+ [
249
+ 0,
250
+ 1065353216,
251
+ 0
252
+ ],
253
+ [
254
+ 3212836864,
255
+ 0,
256
+ 0
257
+ ],
258
+ [
259
+ 0,
260
+ 0,
261
+ 1073741824
262
+ ]
263
+ ],
264
+ "origin": [
265
+ 1120403456,
266
+ 1128792064,
267
+ 1133903872
268
+ ],
269
+ "pointer": 2014581760
270
+ }
271
+ ],
272
+ "sample_origin": [
273
+ 1092616192,
274
+ 1101004800,
275
+ 1106247680
276
+ ]
277
+ },
278
+ {
279
+ "execution": {
280
+ "byte_writes": [],
281
+ "calls": [],
282
+ "children": [],
283
+ "return": null,
284
+ "stop": 22322,
285
+ "trace": null,
286
+ "trace_length": 314,
287
+ "trace_sha256": "476f869038a60b051f1ff4f92b5f5a56275a2b116ec0200296092a3aa2b91f1b"
288
+ },
289
+ "final_origin": [
290
+ 1120239616,
291
+ 1128759296,
292
+ 1133772800
293
+ ],
294
+ "initial_origin": [
295
+ 1089680179,
296
+ 1090519040,
297
+ 1090938470
298
+ ],
299
+ "parents": [
300
+ {
301
+ "basis": [
302
+ [
303
+ 0,
304
+ 1065353216,
305
+ 0
306
+ ],
307
+ [
308
+ 3212836864,
309
+ 0,
310
+ 0
311
+ ],
312
+ [
313
+ 0,
314
+ 0,
315
+ 1073741824
316
+ ]
317
+ ],
318
+ "origin": [
319
+ 1120403456,
320
+ 1128792064,
321
+ 1133903872
322
+ ],
323
+ "pointer": 2014581760
324
+ }
325
+ ],
326
+ "sample_origin": [
327
+ 3204448256,
328
+ 1067450368,
329
+ 3221225472
330
+ ]
331
+ },
332
+ {
333
+ "execution": {
334
+ "byte_writes": [],
335
+ "calls": [],
336
+ "children": [],
337
+ "return": null,
338
+ "stop": 22322,
339
+ "trace": null,
340
+ "trace_length": 454,
341
+ "trace_sha256": "067a0843b415b55c946711d280f52b44f282f835bfc3767bf9677843712e68b8"
342
+ },
343
+ "final_origin": [
344
+ 1121714176,
345
+ 1130102784,
346
+ 1134886912
347
+ ],
348
+ "initial_origin": [
349
+ 1089680179,
350
+ 1090519040,
351
+ 1090938470
352
+ ],
353
+ "parents": [
354
+ {
355
+ "basis": [
356
+ [
357
+ 1065353216,
358
+ 0,
359
+ 0
360
+ ],
361
+ [
362
+ 0,
363
+ 1065353216,
364
+ 0
365
+ ],
366
+ [
367
+ 0,
368
+ 0,
369
+ 1065353216
370
+ ]
371
+ ],
372
+ "origin": [
373
+ 1120403456,
374
+ 1128792064,
375
+ 1133903872
376
+ ],
377
+ "pointer": 2014581760
378
+ },
379
+ {
380
+ "basis": [
381
+ [
382
+ 1065353216,
383
+ 0,
384
+ 0
385
+ ],
386
+ [
387
+ 0,
388
+ 1065353216,
389
+ 0
390
+ ],
391
+ [
392
+ 0,
393
+ 0,
394
+ 1065353216
395
+ ]
396
+ ],
397
+ "origin": [
398
+ 1120534528,
399
+ 1128857600,
400
+ 1133936640
401
+ ],
402
+ "pointer": 2014582016
403
+ }
404
+ ],
405
+ "sample_origin": [
406
+ 1092616192,
407
+ 1101004800,
408
+ 1106247680
409
+ ]
410
+ },
411
+ {
412
+ "execution": {
413
+ "byte_writes": [],
414
+ "calls": [],
415
+ "children": [],
416
+ "return": null,
417
+ "stop": 22322,
418
+ "trace": null,
419
+ "trace_length": 454,
420
+ "trace_sha256": "067a0843b415b55c946711d280f52b44f282f835bfc3767bf9677843712e68b8"
421
+ },
422
+ "final_origin": [
423
+ 1120337920,
424
+ 1128873984,
425
+ 1133838336
426
+ ],
427
+ "initial_origin": [
428
+ 1089680179,
429
+ 1090519040,
430
+ 1090938470
431
+ ],
432
+ "parents": [
433
+ {
434
+ "basis": [
435
+ [
436
+ 1065353216,
437
+ 0,
438
+ 0
439
+ ],
440
+ [
441
+ 0,
442
+ 1065353216,
443
+ 0
444
+ ],
445
+ [
446
+ 0,
447
+ 0,
448
+ 1065353216
449
+ ]
450
+ ],
451
+ "origin": [
452
+ 1120403456,
453
+ 1128792064,
454
+ 1133903872
455
+ ],
456
+ "pointer": 2014581760
457
+ },
458
+ {
459
+ "basis": [
460
+ [
461
+ 1065353216,
462
+ 0,
463
+ 0
464
+ ],
465
+ [
466
+ 0,
467
+ 1065353216,
468
+ 0
469
+ ],
470
+ [
471
+ 0,
472
+ 0,
473
+ 1065353216
474
+ ]
475
+ ],
476
+ "origin": [
477
+ 1120534528,
478
+ 1128857600,
479
+ 1133936640
480
+ ],
481
+ "pointer": 2014582016
482
+ }
483
+ ],
484
+ "sample_origin": [
485
+ 3204448256,
486
+ 1067450368,
487
+ 3221225472
488
+ ]
489
+ },
490
+ {
491
+ "execution": {
492
+ "byte_writes": [],
493
+ "calls": [],
494
+ "children": [],
495
+ "return": null,
496
+ "stop": 22322,
497
+ "trace": null,
498
+ "trace_length": 454,
499
+ "trace_sha256": "067a0843b415b55c946711d280f52b44f282f835bfc3767bf9677843712e68b8"
500
+ },
501
+ "final_origin": [
502
+ 1119092736,
503
+ 1127481344,
504
+ 1137836032
505
+ ],
506
+ "initial_origin": [
507
+ 1089680179,
508
+ 1090519040,
509
+ 1090938470
510
+ ],
511
+ "parents": [
512
+ {
513
+ "basis": [
514
+ [
515
+ 0,
516
+ 1065353216,
517
+ 0
518
+ ],
519
+ [
520
+ 3212836864,
521
+ 0,
522
+ 0
523
+ ],
524
+ [
525
+ 0,
526
+ 0,
527
+ 1073741824
528
+ ]
529
+ ],
530
+ "origin": [
531
+ 1120403456,
532
+ 1128792064,
533
+ 1133903872
534
+ ],
535
+ "pointer": 2014581760
536
+ },
537
+ {
538
+ "basis": [
539
+ [
540
+ 0,
541
+ 1065353216,
542
+ 0
543
+ ],
544
+ [
545
+ 3212836864,
546
+ 0,
547
+ 0
548
+ ],
549
+ [
550
+ 0,
551
+ 0,
552
+ 1073741824
553
+ ]
554
+ ],
555
+ "origin": [
556
+ 1120534528,
557
+ 1128857600,
558
+ 1133936640
559
+ ],
560
+ "pointer": 2014582016
561
+ }
562
+ ],
563
+ "sample_origin": [
564
+ 1092616192,
565
+ 1101004800,
566
+ 1106247680
567
+ ]
568
+ },
569
+ {
570
+ "execution": {
571
+ "byte_writes": [],
572
+ "calls": [],
573
+ "children": [],
574
+ "return": null,
575
+ "stop": 22322,
576
+ "trace": null,
577
+ "trace_length": 454,
578
+ "trace_sha256": "067a0843b415b55c946711d280f52b44f282f835bfc3767bf9677843712e68b8"
579
+ },
580
+ "final_origin": [
581
+ 1120468992,
582
+ 1128710144,
583
+ 1133641728
584
+ ],
585
+ "initial_origin": [
586
+ 1089680179,
587
+ 1090519040,
588
+ 1090938470
589
+ ],
590
+ "parents": [
591
+ {
592
+ "basis": [
593
+ [
594
+ 0,
595
+ 1065353216,
596
+ 0
597
+ ],
598
+ [
599
+ 3212836864,
600
+ 0,
601
+ 0
602
+ ],
603
+ [
604
+ 0,
605
+ 0,
606
+ 1073741824
607
+ ]
608
+ ],
609
+ "origin": [
610
+ 1120403456,
611
+ 1128792064,
612
+ 1133903872
613
+ ],
614
+ "pointer": 2014581760
615
+ },
616
+ {
617
+ "basis": [
618
+ [
619
+ 0,
620
+ 1065353216,
621
+ 0
622
+ ],
623
+ [
624
+ 3212836864,
625
+ 0,
626
+ 0
627
+ ],
628
+ [
629
+ 0,
630
+ 0,
631
+ 1073741824
632
+ ]
633
+ ],
634
+ "origin": [
635
+ 1120534528,
636
+ 1128857600,
637
+ 1133936640
638
+ ],
639
+ "pointer": 2014582016
640
+ }
641
+ ],
642
+ "sample_origin": [
643
+ 3204448256,
644
+ 1067450368,
645
+ 3221225472
646
+ ]
647
+ },
648
+ {
649
+ "execution": {
650
+ "byte_writes": [],
651
+ "calls": [],
652
+ "children": [],
653
+ "return": null,
654
+ "stop": 22322,
655
+ "trace": null,
656
+ "trace_length": 594,
657
+ "trace_sha256": "3e08d7fcbcd7769636bc6e385ab861f75b9cbaf2b63ad2c36042e1a4f3073972"
658
+ },
659
+ "final_origin": [
660
+ 1121714176,
661
+ 1130102784,
662
+ 1134886912
663
+ ],
664
+ "initial_origin": [
665
+ 1089680179,
666
+ 1090519040,
667
+ 1090938470
668
+ ],
669
+ "parents": [
670
+ {
671
+ "basis": [
672
+ [
673
+ 1065353216,
674
+ 0,
675
+ 0
676
+ ],
677
+ [
678
+ 0,
679
+ 1065353216,
680
+ 0
681
+ ],
682
+ [
683
+ 0,
684
+ 0,
685
+ 1065353216
686
+ ]
687
+ ],
688
+ "origin": [
689
+ 1120403456,
690
+ 1128792064,
691
+ 1133903872
692
+ ],
693
+ "pointer": 2014581760
694
+ },
695
+ {
696
+ "basis": [
697
+ [
698
+ 1065353216,
699
+ 0,
700
+ 0
701
+ ],
702
+ [
703
+ 0,
704
+ 1065353216,
705
+ 0
706
+ ],
707
+ [
708
+ 0,
709
+ 0,
710
+ 1065353216
711
+ ]
712
+ ],
713
+ "origin": [
714
+ 1120534528,
715
+ 1128857600,
716
+ 1133936640
717
+ ],
718
+ "pointer": 2014582016
719
+ },
720
+ {
721
+ "basis": [
722
+ [
723
+ 1065353216,
724
+ 0,
725
+ 0
726
+ ],
727
+ [
728
+ 0,
729
+ 1065353216,
730
+ 0
731
+ ],
732
+ [
733
+ 0,
734
+ 0,
735
+ 1065353216
736
+ ]
737
+ ],
738
+ "origin": [
739
+ 1120665600,
740
+ 1128923136,
741
+ 1133969408
742
+ ],
743
+ "pointer": 2014582272
744
+ }
745
+ ],
746
+ "sample_origin": [
747
+ 1092616192,
748
+ 1101004800,
749
+ 1106247680
750
+ ]
751
+ },
752
+ {
753
+ "execution": {
754
+ "byte_writes": [],
755
+ "calls": [],
756
+ "children": [],
757
+ "return": null,
758
+ "stop": 22322,
759
+ "trace": null,
760
+ "trace_length": 594,
761
+ "trace_sha256": "3e08d7fcbcd7769636bc6e385ab861f75b9cbaf2b63ad2c36042e1a4f3073972"
762
+ },
763
+ "final_origin": [
764
+ 1120337920,
765
+ 1128873984,
766
+ 1133838336
767
+ ],
768
+ "initial_origin": [
769
+ 1089680179,
770
+ 1090519040,
771
+ 1090938470
772
+ ],
773
+ "parents": [
774
+ {
775
+ "basis": [
776
+ [
777
+ 1065353216,
778
+ 0,
779
+ 0
780
+ ],
781
+ [
782
+ 0,
783
+ 1065353216,
784
+ 0
785
+ ],
786
+ [
787
+ 0,
788
+ 0,
789
+ 1065353216
790
+ ]
791
+ ],
792
+ "origin": [
793
+ 1120403456,
794
+ 1128792064,
795
+ 1133903872
796
+ ],
797
+ "pointer": 2014581760
798
+ },
799
+ {
800
+ "basis": [
801
+ [
802
+ 1065353216,
803
+ 0,
804
+ 0
805
+ ],
806
+ [
807
+ 0,
808
+ 1065353216,
809
+ 0
810
+ ],
811
+ [
812
+ 0,
813
+ 0,
814
+ 1065353216
815
+ ]
816
+ ],
817
+ "origin": [
818
+ 1120534528,
819
+ 1128857600,
820
+ 1133936640
821
+ ],
822
+ "pointer": 2014582016
823
+ },
824
+ {
825
+ "basis": [
826
+ [
827
+ 1065353216,
828
+ 0,
829
+ 0
830
+ ],
831
+ [
832
+ 0,
833
+ 1065353216,
834
+ 0
835
+ ],
836
+ [
837
+ 0,
838
+ 0,
839
+ 1065353216
840
+ ]
841
+ ],
842
+ "origin": [
843
+ 1120665600,
844
+ 1128923136,
845
+ 1133969408
846
+ ],
847
+ "pointer": 2014582272
848
+ }
849
+ ],
850
+ "sample_origin": [
851
+ 3204448256,
852
+ 1067450368,
853
+ 3221225472
854
+ ]
855
+ },
856
+ {
857
+ "execution": {
858
+ "byte_writes": [],
859
+ "calls": [],
860
+ "children": [],
861
+ "return": null,
862
+ "stop": 22322,
863
+ "trace": null,
864
+ "trace_length": 594,
865
+ "trace_sha256": "3e08d7fcbcd7769636bc6e385ab861f75b9cbaf2b63ad2c36042e1a4f3073972"
866
+ },
867
+ "final_origin": [
868
+ 1123024896,
869
+ 1128136704,
870
+ 1141309440
871
+ ],
872
+ "initial_origin": [
873
+ 1089680179,
874
+ 1090519040,
875
+ 1090938470
876
+ ],
877
+ "parents": [
878
+ {
879
+ "basis": [
880
+ [
881
+ 0,
882
+ 1065353216,
883
+ 0
884
+ ],
885
+ [
886
+ 3212836864,
887
+ 0,
888
+ 0
889
+ ],
890
+ [
891
+ 0,
892
+ 0,
893
+ 1073741824
894
+ ]
895
+ ],
896
+ "origin": [
897
+ 1120403456,
898
+ 1128792064,
899
+ 1133903872
900
+ ],
901
+ "pointer": 2014581760
902
+ },
903
+ {
904
+ "basis": [
905
+ [
906
+ 0,
907
+ 1065353216,
908
+ 0
909
+ ],
910
+ [
911
+ 3212836864,
912
+ 0,
913
+ 0
914
+ ],
915
+ [
916
+ 0,
917
+ 0,
918
+ 1073741824
919
+ ]
920
+ ],
921
+ "origin": [
922
+ 1120534528,
923
+ 1128857600,
924
+ 1133936640
925
+ ],
926
+ "pointer": 2014582016
927
+ },
928
+ {
929
+ "basis": [
930
+ [
931
+ 0,
932
+ 1065353216,
933
+ 0
934
+ ],
935
+ [
936
+ 3212836864,
937
+ 0,
938
+ 0
939
+ ],
940
+ [
941
+ 0,
942
+ 0,
943
+ 1073741824
944
+ ]
945
+ ],
946
+ "origin": [
947
+ 1120665600,
948
+ 1128923136,
949
+ 1133969408
950
+ ],
951
+ "pointer": 2014582272
952
+ }
953
+ ],
954
+ "sample_origin": [
955
+ 1092616192,
956
+ 1101004800,
957
+ 1106247680
958
+ ]
959
+ },
960
+ {
961
+ "execution": {
962
+ "byte_writes": [],
963
+ "calls": [],
964
+ "children": [],
965
+ "return": null,
966
+ "stop": 22322,
967
+ "trace": null,
968
+ "trace_length": 594,
969
+ "trace_sha256": "3e08d7fcbcd7769636bc6e385ab861f75b9cbaf2b63ad2c36042e1a4f3073972"
970
+ },
971
+ "final_origin": [
972
+ 1120567296,
973
+ 1128824832,
974
+ 1133379584
975
+ ],
976
+ "initial_origin": [
977
+ 1089680179,
978
+ 1090519040,
979
+ 1090938470
980
+ ],
981
+ "parents": [
982
+ {
983
+ "basis": [
984
+ [
985
+ 0,
986
+ 1065353216,
987
+ 0
988
+ ],
989
+ [
990
+ 3212836864,
991
+ 0,
992
+ 0
993
+ ],
994
+ [
995
+ 0,
996
+ 0,
997
+ 1073741824
998
+ ]
999
+ ],
1000
+ "origin": [
1001
+ 1120403456,
1002
+ 1128792064,
1003
+ 1133903872
1004
+ ],
1005
+ "pointer": 2014581760
1006
+ },
1007
+ {
1008
+ "basis": [
1009
+ [
1010
+ 0,
1011
+ 1065353216,
1012
+ 0
1013
+ ],
1014
+ [
1015
+ 3212836864,
1016
+ 0,
1017
+ 0
1018
+ ],
1019
+ [
1020
+ 0,
1021
+ 0,
1022
+ 1073741824
1023
+ ]
1024
+ ],
1025
+ "origin": [
1026
+ 1120534528,
1027
+ 1128857600,
1028
+ 1133936640
1029
+ ],
1030
+ "pointer": 2014582016
1031
+ },
1032
+ {
1033
+ "basis": [
1034
+ [
1035
+ 0,
1036
+ 1065353216,
1037
+ 0
1038
+ ],
1039
+ [
1040
+ 3212836864,
1041
+ 0,
1042
+ 0
1043
+ ],
1044
+ [
1045
+ 0,
1046
+ 0,
1047
+ 1073741824
1048
+ ]
1049
+ ],
1050
+ "origin": [
1051
+ 1120665600,
1052
+ 1128923136,
1053
+ 1133969408
1054
+ ],
1055
+ "pointer": 2014582272
1056
+ }
1057
+ ],
1058
+ "sample_origin": [
1059
+ 3204448256,
1060
+ 1067450368,
1061
+ 3221225472
1062
+ ]
1063
+ }
1064
+ ],
1065
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1066
+ "source": {
1067
+ "archive": "zUrT43_qvm.pk3",
1068
+ "archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
1069
+ "member": {
1070
+ "bytes": 983300,
1071
+ "comment_hex": "",
1072
+ "compressed_bytes": 246560,
1073
+ "compression": 8,
1074
+ "crc32": "98ea1768",
1075
+ "create_system": 0,
1076
+ "create_version": 63,
1077
+ "date_time": [
1078
+ 2018,
1079
+ 6,
1080
+ 18,
1081
+ 22,
1082
+ 11,
1083
+ 50
1084
+ ],
1085
+ "directory": false,
1086
+ "entry_index": 2,
1087
+ "external_attr": 32,
1088
+ "extra_hex": "0a0020000000000001001800d1e24e974007d40116dcbf962f1fd20116dcbf962f1fd201",
1089
+ "extract_version": 20,
1090
+ "flags": 0,
1091
+ "header_offset": 221309,
1092
+ "internal_attr": 0,
1093
+ "occurrence": 0,
1094
+ "output": "assets/extracted/zUrT43_qvm.pk3/members/000002/vm/qagame.qvm",
1095
+ "path": "vm/qagame.qvm",
1096
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1097
+ "type": "member",
1098
+ "volume": 0
1099
+ }
1100
+ }
1101
+ }
scripts/analyze_qvm_child_origin.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """22009 sample origin through bounded parent rotations and immediate translation."""
3
+ import itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source
6
+ from qvm_trace_support import resume
7
+ from analyze_qvm_acceleration import word
8
+ from analyze_qvm_slide_prefix import vec
9
+ from analyze_qvm import write_json
10
+ LOCAL=0x78140000
11
+ CHILD=LOCAL+4096
12
+ SAMPLE=CHILD+256
13
+ PARENTS=[CHILD+1024+256*j for j in range(3)]
14
+
15
+ def fixture(depth,kind,origin=(10,20,30)):
16
+ m={LOCAL+228:CHILD,LOCAL+232:SAMPLE}
17
+ for o in range(0,112,4):m[CHILD+o]=word(o*.1)
18
+ m[CHILD+96]=PARENTS[0] if depth else 0
19
+ for o in range(64,112,4):m[SAMPLE+o]=word((o-64)*.125+1)
20
+ for j,v in enumerate(origin):m[SAMPLE+64+4*j]=word(v)
21
+ basis=[[1,0,0],[0,1,0],[0,0,1]] if kind=='identity' else [[0,1,0],[-1,0,0],[0,0,2]]
22
+ for j,p in enumerate(PARENTS[:depth]):
23
+ for o in range(0,112,4):m[p+o]=0
24
+ for row in range(3):
25
+ for col in range(3):m[p+12+16*row+4*col]=word(basis[row][col])
26
+ m[p+72]=word(1);m[p+96]=PARENTS[j+1] if j+1<depth else 0
27
+ for k,v in enumerate([100+j,200+j,300+j]):m[p+76+4*k]=word(v)
28
+ return m
29
+
30
+ def origin(ins,m):
31
+ m=dict(m);before=vec(m,CHILD+76);sample=vec(m,SAMPLE+64);chain=[];p=m[CHILD+96];seen=set()
32
+ while p:
33
+ if p in seen:raise ValueError('cyclic fixture parent chain')
34
+ seen.add(p);chain.append({'pointer':p,'basis':[vec(m,p+12+16*j) for j in range(3)],'origin':vec(m,p+76)});p=m[p+96]
35
+ m,e=resume(ins,22010,23090,m,LOCAL,boundaries=[22322]);return m,{'initial_origin':before,'sample_origin':sample,'parents':chain,'final_origin':vec(m,CHILD+76),'execution':e}
36
+
37
+ def main():
38
+ q,raw,h,ins=source();rows=[]
39
+ for depth,kind,point in itertools.product([0,1,2,3],['identity','turn-scale'],[(10,20,30),(-.5,1.25,-2)]):rows.append(origin(ins,fixture(depth,kind,point))[1])
40
+ write_json(Path('docs/research/qvm-child-origin.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual22010 to22322 or null-parent23090. Parent tables are finite fixtures; cyclic fixture inputs reject before execution. Only source origin path, no intersection or ownership/native effects.'})
41
+ if __name__=='__main__':main()
scripts/test_qvm_child_origin.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from test_qvm_ground import word,n,f
4
+
5
+ def expected(p):
6
+ v=list(map(n,p['sample_origin']))
7
+ for parent in p['parents']:
8
+ a=[[n(x) for x in row] for row in parent['basis']];v=[f(f(f(v[0]*a[0][j])+f(v[1]*a[1][j]))+f(v[2]*a[2][j])) for j in range(3)]
9
+ if p['parents']:v=[f(x+n(y)) for x,y in zip(v,p['parents'][0]['origin'])]
10
+ return list(map(word,v))
11
+ class ChildOriginTests(unittest.TestCase):
12
+ @classmethod
13
+ def setUpClass(cls):cls.rows=json.loads(Path('docs/research/qvm-child-origin.json').read_text())['probes']
14
+ def test_independent_parent_rotation_order_and_translation(self):
15
+ self.assertEqual(len(self.rows),16)
16
+ for p in self.rows:self.assertEqual(p['final_origin'],expected(p))
17
+ def test_null_parent_copies_origin_and_exits(self):
18
+ for p in self.rows:
19
+ if not p['parents']:self.assertEqual(p['final_origin'],p['sample_origin']);self.assertEqual(p['execution']['stop'],23090)
20
+ def test_nonnull_parent_stops_before_basis_product(self):
21
+ for p in self.rows:
22
+ if p['parents']:self.assertEqual(p['execution']['stop'],22322)
23
+ self.assertEqual(p['execution']['calls'],[])
24
+ def test_cycle_fixture_rejected(self):
25
+ from analyze_qvm_child_origin import fixture,origin,PARENTS
26
+ from qvm_research_support import source
27
+ m=fixture(1,'identity');m[PARENTS[0]+96]=PARENTS[0]
28
+ with self.assertRaisesRegex(ValueError,'cyclic'):origin(source()[3],m)
29
+ if __name__=='__main__':unittest.main()