nmarshall commited on
Commit
b7976c2
·
1 Parent(s): da6b345

qvm: compose filter insertion with export

Browse files
docs/FINDINGS.md CHANGED
@@ -1811,3 +1811,5 @@ RE-937: Rust matches all30 original removal cases, retaining first-match orderin
1811
  RE-938: Across180 actual252127 fixtures, parser252304/37159 precedes an exact mask/comparison scan; only the first match receives the supplied raw metadata word. Comparison/mask/count remain unchanged. Export is requested only after a successful match with a nonzero save argument. Invalid parse and missing match return0 with diagnostics. A comparison-1 sentinel can match and receive metadata without becoming active; timestamp interpretation and native callers remain open. [Evidence](research/QVM_FILTER_METADATA.md).
1812
 
1813
  RE-939: Rust matches180 original metadata-update cases, retaining the first exact pair, every unaffected row, raw metadata bits, parser/missing-match diagnostics and save gating. Unit tests verify negative save requests, duplicate preservation, sentinel matching and atomic rejection of unsupported tokens. Metadata is deliberately a raw word; native time/expiry interpretation remains open. [Evidence](research/RUST_FILTER_METADATA.md).
 
 
 
1811
  RE-938: Across180 actual252127 fixtures, parser252304/37159 precedes an exact mask/comparison scan; only the first match receives the supplied raw metadata word. Comparison/mask/count remain unchanged. Export is requested only after a successful match with a nonzero save argument. Invalid parse and missing match return0 with diagnostics. A comparison-1 sentinel can match and receive metadata without becoming active; timestamp interpretation and native callers remain open. [Evidence](research/QVM_FILTER_METADATA.md).
1812
 
1813
  RE-939: Rust matches180 original metadata-update cases, retaining the first exact pair, every unaffected row, raw metadata bits, parser/missing-match diagnostics and save gating. Unit tests verify negative save requests, duplicate preservation, sentinel matching and atomic rejection of unsupported tokens. Metadata is deliberately a raw word; native time/expiry interpretation remains open. [Evidence](research/RUST_FILTER_METADATA.md).
1814
+
1815
+ RE-940: Twenty-four original252829/252304/252500 compositions verify table checksums plus exact export records and file-operation order. Parse failure still retains count growth and exports, including an empty write through a supplied zero handle. Valid broadcast sentinel values are skipped by export, and wildcard masks are lost in serialized output. Native file IO remains captured; insertion table/caller provenance remains open. [Evidence](research/QVM_FILTER_INSERT_EXPORT.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1857,3 +1857,5 @@ RE-924–933 completed bounded bot settings, announcement, connect-child composi
1857
  - [x] RE-938 Original filter metadata update and save gating ([evidence](research/QVM_FILTER_METADATA.md)).
1858
 
1859
  - [x] RE-939 Rust first-match filter metadata policy ([evidence](research/RUST_FILTER_METADATA.md)).
 
 
 
1857
  - [x] RE-938 Original filter metadata update and save gating ([evidence](research/QVM_FILTER_METADATA.md)).
1858
 
1859
  - [x] RE-939 Rust first-match filter metadata policy ([evidence](research/RUST_FILTER_METADATA.md)).
1860
+
1861
+ - [x] RE-940 Original insertion composed with recovered export ([evidence](research/QVM_FILTER_INSERT_EXPORT.md)).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2421,3 +2421,7 @@ Across180 actual252127 fixtures, parser252304/37159 precedes an exact mask/compa
2421
  ## 2026-10-28 — RE-939 Rust first-match filter metadata policy
2422
 
2423
  Rust matches180 original metadata-update cases, retaining the first exact pair, every unaffected row, raw metadata bits, parser/missing-match diagnostics and save gating. Unit tests verify negative save requests, duplicate preservation, sentinel matching and atomic rejection of unsupported tokens. Metadata is deliberately a raw word; native time/expiry interpretation remains open. Focused `cargo xtask test-group rust-filter-metadata` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
 
 
 
 
 
2421
  ## 2026-10-28 — RE-939 Rust first-match filter metadata policy
2422
 
2423
  Rust matches180 original metadata-update cases, retaining the first exact pair, every unaffected row, raw metadata bits, parser/missing-match diagnostics and save gating. Unit tests verify negative save requests, duplicate preservation, sentinel matching and atomic rejection of unsupported tokens. Metadata is deliberately a raw word; native time/expiry interpretation remains open. Focused `cargo xtask test-group rust-filter-metadata` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
2424
+
2425
+ ## 2026-10-28 — RE-940 Original insertion composed with recovered export
2426
+
2427
+ Twenty-four original252829/252304/252500 compositions verify table checksums plus exact export records and file-operation order. Parse failure still retains count growth and exports, including an empty write through a supplied zero handle. Valid broadcast sentinel values are skipped by export, and wildcard masks are lost in serialized output. Native file IO remains captured; insertion table/caller provenance remains open. Focused `cargo xtask test-group qvm-filter-insert-export` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1894,3 +1894,5 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1894
  - [x] RE-938 Original filter metadata update and save gating ([evidence](research/QVM_FILTER_METADATA.md)).
1895
 
1896
  - [x] RE-939 Rust first-match filter metadata policy ([evidence](research/RUST_FILTER_METADATA.md)).
 
 
 
1894
  - [x] RE-938 Original filter metadata update and save gating ([evidence](research/QVM_FILTER_METADATA.md)).
1895
 
1896
  - [x] RE-939 Rust first-match filter metadata policy ([evidence](research/RUST_FILTER_METADATA.md)).
1897
+
1898
+ - [x] RE-940 Original insertion composed with recovered export ([evidence](research/QVM_FILTER_INSERT_EXPORT.md)).
docs/research/QVM_FILTER_INSERT_EXPORT.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Original insertion composed with recovered export
2
+
3
+ RE-940. Focused validation: `cargo xtask test-group qvm-filter-insert-export`. [Machine report](qvm-filter-insert-export.json).
4
+
5
+ Twenty-four original252829/252304/252500 compositions verify table checksums plus exact export records and file-operation order. Parse failure still retains count growth and exports, including an empty write through a supplied zero handle. Valid broadcast sentinel values are skipped by export, and wildcard masks are lost in serialized output. Native file IO remains captured; insertion table/caller provenance remains open.
docs/research/README.md CHANGED
@@ -1429,3 +1429,5 @@ The extension collector adds five focused tests for native tail calls, command-r
1429
  - [RE-938: Original filter metadata update and save gating](QVM_FILTER_METADATA.md).
1430
 
1431
  - [RE-939: Rust first-match filter metadata policy](RUST_FILTER_METADATA.md).
 
 
 
1429
  - [RE-938: Original filter metadata update and save gating](QVM_FILTER_METADATA.md).
1430
 
1431
  - [RE-939: Rust first-match filter metadata policy](RUST_FILTER_METADATA.md).
1432
+
1433
+ - [RE-940: Original insertion composed with recovered export](QVM_FILTER_INSERT_EXPORT.md).
docs/research/qvm-filter-insert-export.json ADDED
@@ -0,0 +1,1196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "24 composed252829/252304/252500 cases with actual formatter children. Failed parse retains grown count and may export an empty table; holes and mask loss preserved. Native memset/strncpy modeled, console/file operations captured; no live filesystem acceptance claim.",
3
+ "probes": [
4
+ {
5
+ "after": [
6
+ 4294967295,
7
+ 67305985,
8
+ 4294967295
9
+ ],
10
+ "before": [
11
+ 287454020,
12
+ 1432778632,
13
+ 2578103244
14
+ ],
15
+ "before_count": 0,
16
+ "checksum": 8643066824336841373,
17
+ "count": 1,
18
+ "diagnostics": [],
19
+ "execution": {
20
+ "stop": 252931,
21
+ "trace_length": 62,
22
+ "trace_sha256": "dfa12c7c7503e03c744e873200f15c8afdb44e0ccd57747984630ca69714f374"
23
+ },
24
+ "exported": [],
25
+ "exports": [],
26
+ "input": {
27
+ "handle": 7,
28
+ "profile": 0,
29
+ "save": 0,
30
+ "text": "312e322e332e34"
31
+ },
32
+ "parsed": 1,
33
+ "result": 1,
34
+ "slot": 0
35
+ },
36
+ {
37
+ "after": [
38
+ 4294967295,
39
+ 67305985,
40
+ 4294967295
41
+ ],
42
+ "before": [
43
+ 287454020,
44
+ 1432778632,
45
+ 2578103244
46
+ ],
47
+ "before_count": 0,
48
+ "checksum": 8643066824336841373,
49
+ "count": 1,
50
+ "diagnostics": [],
51
+ "execution": {
52
+ "stop": 252931,
53
+ "trace_length": 65,
54
+ "trace_sha256": "501d07b191d64902167541498e00bf85bfcedb1a7f965610a98a8e7e205887e0"
55
+ },
56
+ "exported": [
57
+ {
58
+ "buffer": "312e322e332e343a2d310a",
59
+ "events": [
60
+ {
61
+ "op": "print",
62
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
63
+ },
64
+ {
65
+ "mode": 1,
66
+ "op": "open",
67
+ "path": "62616e6c6973742e747874"
68
+ },
69
+ {
70
+ "handle": 7,
71
+ "op": "write",
72
+ "text": "312e322e332e343a2d310a"
73
+ },
74
+ {
75
+ "handle": 7,
76
+ "op": "close"
77
+ }
78
+ ],
79
+ "formats": [
80
+ "312e322e332e343a2d310a"
81
+ ]
82
+ }
83
+ ],
84
+ "exports": [
85
+ 252500
86
+ ],
87
+ "input": {
88
+ "handle": 7,
89
+ "profile": 0,
90
+ "save": 1,
91
+ "text": "312e322e332e34"
92
+ },
93
+ "parsed": 1,
94
+ "result": 1,
95
+ "slot": 0
96
+ },
97
+ {
98
+ "after": [
99
+ 287454020,
100
+ 4294967295,
101
+ 2578103244
102
+ ],
103
+ "before": [
104
+ 287454020,
105
+ 1432778632,
106
+ 2578103244
107
+ ],
108
+ "before_count": 0,
109
+ "checksum": 15828147485467890441,
110
+ "count": 1,
111
+ "diagnostics": [
112
+ {
113
+ "op": "bad-address",
114
+ "text": "626164"
115
+ }
116
+ ],
117
+ "execution": {
118
+ "stop": 252931,
119
+ "trace_length": 64,
120
+ "trace_sha256": "810b8414311a3fb8e0d914a4bf83e82871706e87ec798295bfb6de5020512321"
121
+ },
122
+ "exported": [],
123
+ "exports": [],
124
+ "input": {
125
+ "handle": 0,
126
+ "profile": 0,
127
+ "save": 0,
128
+ "text": "626164"
129
+ },
130
+ "parsed": 0,
131
+ "result": 1,
132
+ "slot": 0
133
+ },
134
+ {
135
+ "after": [
136
+ 287454020,
137
+ 4294967295,
138
+ 2578103244
139
+ ],
140
+ "before": [
141
+ 287454020,
142
+ 1432778632,
143
+ 2578103244
144
+ ],
145
+ "before_count": 0,
146
+ "checksum": 15828147485467890441,
147
+ "count": 1,
148
+ "diagnostics": [
149
+ {
150
+ "op": "bad-address",
151
+ "text": "626164"
152
+ }
153
+ ],
154
+ "execution": {
155
+ "stop": 252931,
156
+ "trace_length": 67,
157
+ "trace_sha256": "d79c029f28f68754745bdc9e70ce3f050acb094d3c1f520a4797deae15d1c377"
158
+ },
159
+ "exported": [
160
+ {
161
+ "buffer": "",
162
+ "events": [
163
+ {
164
+ "op": "print",
165
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
166
+ },
167
+ {
168
+ "mode": 1,
169
+ "op": "open",
170
+ "path": "62616e6c6973742e747874"
171
+ },
172
+ {
173
+ "handle": 0,
174
+ "op": "write",
175
+ "text": ""
176
+ },
177
+ {
178
+ "handle": 0,
179
+ "op": "close"
180
+ }
181
+ ],
182
+ "formats": []
183
+ }
184
+ ],
185
+ "exports": [
186
+ 252500
187
+ ],
188
+ "input": {
189
+ "handle": 0,
190
+ "profile": 0,
191
+ "save": 1,
192
+ "text": "626164"
193
+ },
194
+ "parsed": 0,
195
+ "result": 1,
196
+ "slot": 0
197
+ },
198
+ {
199
+ "after": [
200
+ 4294967295,
201
+ 4294967295,
202
+ 4294967295
203
+ ],
204
+ "before": [
205
+ 287454020,
206
+ 1432778632,
207
+ 2578103244
208
+ ],
209
+ "before_count": 0,
210
+ "checksum": 10626296841257250281,
211
+ "count": 1,
212
+ "diagnostics": [],
213
+ "execution": {
214
+ "stop": 252931,
215
+ "trace_length": 62,
216
+ "trace_sha256": "dfa12c7c7503e03c744e873200f15c8afdb44e0ccd57747984630ca69714f374"
217
+ },
218
+ "exported": [],
219
+ "exports": [],
220
+ "input": {
221
+ "handle": 7,
222
+ "profile": 0,
223
+ "save": 0,
224
+ "text": "3235352e3235352e3235352e323535"
225
+ },
226
+ "parsed": 1,
227
+ "result": 1,
228
+ "slot": 0
229
+ },
230
+ {
231
+ "after": [
232
+ 4294967295,
233
+ 4294967295,
234
+ 4294967295
235
+ ],
236
+ "before": [
237
+ 287454020,
238
+ 1432778632,
239
+ 2578103244
240
+ ],
241
+ "before_count": 0,
242
+ "checksum": 10626296841257250281,
243
+ "count": 1,
244
+ "diagnostics": [],
245
+ "execution": {
246
+ "stop": 252931,
247
+ "trace_length": 65,
248
+ "trace_sha256": "501d07b191d64902167541498e00bf85bfcedb1a7f965610a98a8e7e205887e0"
249
+ },
250
+ "exported": [
251
+ {
252
+ "buffer": "",
253
+ "events": [
254
+ {
255
+ "op": "print",
256
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
257
+ },
258
+ {
259
+ "mode": 1,
260
+ "op": "open",
261
+ "path": "62616e6c6973742e747874"
262
+ },
263
+ {
264
+ "handle": 7,
265
+ "op": "write",
266
+ "text": ""
267
+ },
268
+ {
269
+ "handle": 7,
270
+ "op": "close"
271
+ }
272
+ ],
273
+ "formats": []
274
+ }
275
+ ],
276
+ "exports": [
277
+ 252500
278
+ ],
279
+ "input": {
280
+ "handle": 7,
281
+ "profile": 0,
282
+ "save": 1,
283
+ "text": "3235352e3235352e3235352e323535"
284
+ },
285
+ "parsed": 1,
286
+ "result": 1,
287
+ "slot": 0
288
+ },
289
+ {
290
+ "after": [
291
+ 0,
292
+ 0,
293
+ 4294967295
294
+ ],
295
+ "before": [
296
+ 287454020,
297
+ 1432778632,
298
+ 2578103244
299
+ ],
300
+ "before_count": 0,
301
+ "checksum": 9180629977285729265,
302
+ "count": 1,
303
+ "diagnostics": [],
304
+ "execution": {
305
+ "stop": 252931,
306
+ "trace_length": 62,
307
+ "trace_sha256": "dfa12c7c7503e03c744e873200f15c8afdb44e0ccd57747984630ca69714f374"
308
+ },
309
+ "exported": [],
310
+ "exports": [],
311
+ "input": {
312
+ "handle": 7,
313
+ "profile": 0,
314
+ "save": 0,
315
+ "text": "2a"
316
+ },
317
+ "parsed": 1,
318
+ "result": 1,
319
+ "slot": 0
320
+ },
321
+ {
322
+ "after": [
323
+ 0,
324
+ 0,
325
+ 4294967295
326
+ ],
327
+ "before": [
328
+ 287454020,
329
+ 1432778632,
330
+ 2578103244
331
+ ],
332
+ "before_count": 0,
333
+ "checksum": 9180629977285729265,
334
+ "count": 1,
335
+ "diagnostics": [],
336
+ "execution": {
337
+ "stop": 252931,
338
+ "trace_length": 65,
339
+ "trace_sha256": "501d07b191d64902167541498e00bf85bfcedb1a7f965610a98a8e7e205887e0"
340
+ },
341
+ "exported": [
342
+ {
343
+ "buffer": "302e302e302e303a2d310a",
344
+ "events": [
345
+ {
346
+ "op": "print",
347
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
348
+ },
349
+ {
350
+ "mode": 1,
351
+ "op": "open",
352
+ "path": "62616e6c6973742e747874"
353
+ },
354
+ {
355
+ "handle": 7,
356
+ "op": "write",
357
+ "text": "302e302e302e303a2d310a"
358
+ },
359
+ {
360
+ "handle": 7,
361
+ "op": "close"
362
+ }
363
+ ],
364
+ "formats": [
365
+ "302e302e302e303a2d310a"
366
+ ]
367
+ }
368
+ ],
369
+ "exports": [
370
+ 252500
371
+ ],
372
+ "input": {
373
+ "handle": 7,
374
+ "profile": 0,
375
+ "save": 1,
376
+ "text": "2a"
377
+ },
378
+ "parsed": 1,
379
+ "result": 1,
380
+ "slot": 0
381
+ },
382
+ {
383
+ "after": [
384
+ 4294967295,
385
+ 67305985,
386
+ 4294967295
387
+ ],
388
+ "before": [
389
+ 4294967295,
390
+ 4294967295,
391
+ 100
392
+ ],
393
+ "before_count": 3,
394
+ "checksum": 12352080663264302319,
395
+ "count": 3,
396
+ "diagnostics": [],
397
+ "execution": {
398
+ "stop": 252931,
399
+ "trace_length": 58,
400
+ "trace_sha256": "c9f2b9a46e3bd140b1af9672bf5492c5c4782ee446da397ec5bee063256d71d1"
401
+ },
402
+ "exported": [],
403
+ "exports": [],
404
+ "input": {
405
+ "handle": 7,
406
+ "profile": 2,
407
+ "save": 0,
408
+ "text": "312e322e332e34"
409
+ },
410
+ "parsed": 1,
411
+ "result": 1,
412
+ "slot": 0
413
+ },
414
+ {
415
+ "after": [
416
+ 4294967295,
417
+ 67305985,
418
+ 4294967295
419
+ ],
420
+ "before": [
421
+ 4294967295,
422
+ 4294967295,
423
+ 100
424
+ ],
425
+ "before_count": 3,
426
+ "checksum": 12352080663264302319,
427
+ "count": 3,
428
+ "diagnostics": [],
429
+ "execution": {
430
+ "stop": 252931,
431
+ "trace_length": 61,
432
+ "trace_sha256": "8f0a1c1f00a84ac6cb65b3f75aabbd16225c36e084529eb2c2c42a68834198b2"
433
+ },
434
+ "exported": [
435
+ {
436
+ "buffer": "312e322e332e343a2d310a322e302e302e303a3130310a332e302e302e303a3130320a",
437
+ "events": [
438
+ {
439
+ "op": "print",
440
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
441
+ },
442
+ {
443
+ "mode": 1,
444
+ "op": "open",
445
+ "path": "62616e6c6973742e747874"
446
+ },
447
+ {
448
+ "handle": 7,
449
+ "op": "write",
450
+ "text": "312e322e332e343a2d310a322e302e302e303a3130310a332e302e302e303a3130320a"
451
+ },
452
+ {
453
+ "handle": 7,
454
+ "op": "close"
455
+ }
456
+ ],
457
+ "formats": [
458
+ "312e322e332e343a2d310a",
459
+ "322e302e302e303a3130310a",
460
+ "332e302e302e303a3130320a"
461
+ ]
462
+ }
463
+ ],
464
+ "exports": [
465
+ 252500
466
+ ],
467
+ "input": {
468
+ "handle": 7,
469
+ "profile": 2,
470
+ "save": 1,
471
+ "text": "312e322e332e34"
472
+ },
473
+ "parsed": 1,
474
+ "result": 1,
475
+ "slot": 0
476
+ },
477
+ {
478
+ "after": [
479
+ 4294967295,
480
+ 4294967295,
481
+ 100
482
+ ],
483
+ "before": [
484
+ 4294967295,
485
+ 4294967295,
486
+ 100
487
+ ],
488
+ "before_count": 3,
489
+ "checksum": 4983954312695245907,
490
+ "count": 3,
491
+ "diagnostics": [
492
+ {
493
+ "op": "bad-address",
494
+ "text": "626164"
495
+ }
496
+ ],
497
+ "execution": {
498
+ "stop": 252931,
499
+ "trace_length": 60,
500
+ "trace_sha256": "3f323a8aef17e7475e19a9f86ff54d5f4c8c3dbcd82434cba28224b197bf2607"
501
+ },
502
+ "exported": [],
503
+ "exports": [],
504
+ "input": {
505
+ "handle": 0,
506
+ "profile": 2,
507
+ "save": 0,
508
+ "text": "626164"
509
+ },
510
+ "parsed": 0,
511
+ "result": 1,
512
+ "slot": 0
513
+ },
514
+ {
515
+ "after": [
516
+ 4294967295,
517
+ 4294967295,
518
+ 100
519
+ ],
520
+ "before": [
521
+ 4294967295,
522
+ 4294967295,
523
+ 100
524
+ ],
525
+ "before_count": 3,
526
+ "checksum": 4983954312695245907,
527
+ "count": 3,
528
+ "diagnostics": [
529
+ {
530
+ "op": "bad-address",
531
+ "text": "626164"
532
+ }
533
+ ],
534
+ "execution": {
535
+ "stop": 252931,
536
+ "trace_length": 63,
537
+ "trace_sha256": "c8a654797fed24b4864d0f38a115b19965b03e9d70808cf3a314e3668a0bbb3b"
538
+ },
539
+ "exported": [
540
+ {
541
+ "buffer": "322e302e302e303a3130310a332e302e302e303a3130320a",
542
+ "events": [
543
+ {
544
+ "op": "print",
545
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
546
+ },
547
+ {
548
+ "mode": 1,
549
+ "op": "open",
550
+ "path": "62616e6c6973742e747874"
551
+ },
552
+ {
553
+ "handle": 0,
554
+ "op": "write",
555
+ "text": "322e302e302e303a3130310a332e302e302e303a3130320a"
556
+ },
557
+ {
558
+ "handle": 0,
559
+ "op": "close"
560
+ }
561
+ ],
562
+ "formats": [
563
+ "322e302e302e303a3130310a",
564
+ "332e302e302e303a3130320a"
565
+ ]
566
+ }
567
+ ],
568
+ "exports": [
569
+ 252500
570
+ ],
571
+ "input": {
572
+ "handle": 0,
573
+ "profile": 2,
574
+ "save": 1,
575
+ "text": "626164"
576
+ },
577
+ "parsed": 0,
578
+ "result": 1,
579
+ "slot": 0
580
+ },
581
+ {
582
+ "after": [
583
+ 4294967295,
584
+ 4294967295,
585
+ 4294967295
586
+ ],
587
+ "before": [
588
+ 4294967295,
589
+ 4294967295,
590
+ 100
591
+ ],
592
+ "before_count": 3,
593
+ "checksum": 11865259713149171923,
594
+ "count": 3,
595
+ "diagnostics": [],
596
+ "execution": {
597
+ "stop": 252931,
598
+ "trace_length": 58,
599
+ "trace_sha256": "c9f2b9a46e3bd140b1af9672bf5492c5c4782ee446da397ec5bee063256d71d1"
600
+ },
601
+ "exported": [],
602
+ "exports": [],
603
+ "input": {
604
+ "handle": 7,
605
+ "profile": 2,
606
+ "save": 0,
607
+ "text": "3235352e3235352e3235352e323535"
608
+ },
609
+ "parsed": 1,
610
+ "result": 1,
611
+ "slot": 0
612
+ },
613
+ {
614
+ "after": [
615
+ 4294967295,
616
+ 4294967295,
617
+ 4294967295
618
+ ],
619
+ "before": [
620
+ 4294967295,
621
+ 4294967295,
622
+ 100
623
+ ],
624
+ "before_count": 3,
625
+ "checksum": 11865259713149171923,
626
+ "count": 3,
627
+ "diagnostics": [],
628
+ "execution": {
629
+ "stop": 252931,
630
+ "trace_length": 61,
631
+ "trace_sha256": "8f0a1c1f00a84ac6cb65b3f75aabbd16225c36e084529eb2c2c42a68834198b2"
632
+ },
633
+ "exported": [
634
+ {
635
+ "buffer": "322e302e302e303a3130310a332e302e302e303a3130320a",
636
+ "events": [
637
+ {
638
+ "op": "print",
639
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
640
+ },
641
+ {
642
+ "mode": 1,
643
+ "op": "open",
644
+ "path": "62616e6c6973742e747874"
645
+ },
646
+ {
647
+ "handle": 7,
648
+ "op": "write",
649
+ "text": "322e302e302e303a3130310a332e302e302e303a3130320a"
650
+ },
651
+ {
652
+ "handle": 7,
653
+ "op": "close"
654
+ }
655
+ ],
656
+ "formats": [
657
+ "322e302e302e303a3130310a",
658
+ "332e302e302e303a3130320a"
659
+ ]
660
+ }
661
+ ],
662
+ "exports": [
663
+ 252500
664
+ ],
665
+ "input": {
666
+ "handle": 7,
667
+ "profile": 2,
668
+ "save": 1,
669
+ "text": "3235352e3235352e3235352e323535"
670
+ },
671
+ "parsed": 1,
672
+ "result": 1,
673
+ "slot": 0
674
+ },
675
+ {
676
+ "after": [
677
+ 0,
678
+ 0,
679
+ 4294967295
680
+ ],
681
+ "before": [
682
+ 4294967295,
683
+ 4294967295,
684
+ 100
685
+ ],
686
+ "before_count": 3,
687
+ "checksum": 9243264774671796427,
688
+ "count": 3,
689
+ "diagnostics": [],
690
+ "execution": {
691
+ "stop": 252931,
692
+ "trace_length": 58,
693
+ "trace_sha256": "c9f2b9a46e3bd140b1af9672bf5492c5c4782ee446da397ec5bee063256d71d1"
694
+ },
695
+ "exported": [],
696
+ "exports": [],
697
+ "input": {
698
+ "handle": 7,
699
+ "profile": 2,
700
+ "save": 0,
701
+ "text": "2a"
702
+ },
703
+ "parsed": 1,
704
+ "result": 1,
705
+ "slot": 0
706
+ },
707
+ {
708
+ "after": [
709
+ 0,
710
+ 0,
711
+ 4294967295
712
+ ],
713
+ "before": [
714
+ 4294967295,
715
+ 4294967295,
716
+ 100
717
+ ],
718
+ "before_count": 3,
719
+ "checksum": 9243264774671796427,
720
+ "count": 3,
721
+ "diagnostics": [],
722
+ "execution": {
723
+ "stop": 252931,
724
+ "trace_length": 61,
725
+ "trace_sha256": "8f0a1c1f00a84ac6cb65b3f75aabbd16225c36e084529eb2c2c42a68834198b2"
726
+ },
727
+ "exported": [
728
+ {
729
+ "buffer": "302e302e302e303a2d310a322e302e302e303a3130310a332e302e302e303a3130320a",
730
+ "events": [
731
+ {
732
+ "op": "print",
733
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
734
+ },
735
+ {
736
+ "mode": 1,
737
+ "op": "open",
738
+ "path": "62616e6c6973742e747874"
739
+ },
740
+ {
741
+ "handle": 7,
742
+ "op": "write",
743
+ "text": "302e302e302e303a2d310a322e302e302e303a3130310a332e302e302e303a3130320a"
744
+ },
745
+ {
746
+ "handle": 7,
747
+ "op": "close"
748
+ }
749
+ ],
750
+ "formats": [
751
+ "302e302e302e303a2d310a",
752
+ "322e302e302e303a3130310a",
753
+ "332e302e302e303a3130320a"
754
+ ]
755
+ }
756
+ ],
757
+ "exports": [
758
+ 252500
759
+ ],
760
+ "input": {
761
+ "handle": 7,
762
+ "profile": 2,
763
+ "save": 1,
764
+ "text": "2a"
765
+ },
766
+ "parsed": 1,
767
+ "result": 1,
768
+ "slot": 0
769
+ },
770
+ {
771
+ "after": [
772
+ 4294967295,
773
+ 67305985,
774
+ 4294967295
775
+ ],
776
+ "before": [
777
+ 4294967295,
778
+ 4294967295,
779
+ 101
780
+ ],
781
+ "before_count": 3,
782
+ "checksum": 577458280395593209,
783
+ "count": 3,
784
+ "diagnostics": [],
785
+ "execution": {
786
+ "stop": 252931,
787
+ "trace_length": 78,
788
+ "trace_sha256": "059d33d70d4834a1d60cc80aaef5709e177980fed7a2f2c2b37b05b03d290312"
789
+ },
790
+ "exported": [],
791
+ "exports": [],
792
+ "input": {
793
+ "handle": 7,
794
+ "profile": 3,
795
+ "save": 0,
796
+ "text": "312e322e332e34"
797
+ },
798
+ "parsed": 1,
799
+ "result": 1,
800
+ "slot": 1
801
+ },
802
+ {
803
+ "after": [
804
+ 4294967295,
805
+ 67305985,
806
+ 4294967295
807
+ ],
808
+ "before": [
809
+ 4294967295,
810
+ 4294967295,
811
+ 101
812
+ ],
813
+ "before_count": 3,
814
+ "checksum": 577458280395593209,
815
+ "count": 3,
816
+ "diagnostics": [],
817
+ "execution": {
818
+ "stop": 252931,
819
+ "trace_length": 81,
820
+ "trace_sha256": "f8d750c5a00fd4b4ce38137fea9476d847de9dc2673733b435f834243840cb8a"
821
+ },
822
+ "exported": [
823
+ {
824
+ "buffer": "312e302e302e303a3130300a312e322e332e343a2d310a332e302e302e303a3130320a",
825
+ "events": [
826
+ {
827
+ "op": "print",
828
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
829
+ },
830
+ {
831
+ "mode": 1,
832
+ "op": "open",
833
+ "path": "62616e6c6973742e747874"
834
+ },
835
+ {
836
+ "handle": 7,
837
+ "op": "write",
838
+ "text": "312e302e302e303a3130300a312e322e332e343a2d310a332e302e302e303a3130320a"
839
+ },
840
+ {
841
+ "handle": 7,
842
+ "op": "close"
843
+ }
844
+ ],
845
+ "formats": [
846
+ "312e302e302e303a3130300a",
847
+ "312e322e332e343a2d310a",
848
+ "332e302e302e303a3130320a"
849
+ ]
850
+ }
851
+ ],
852
+ "exports": [
853
+ 252500
854
+ ],
855
+ "input": {
856
+ "handle": 7,
857
+ "profile": 3,
858
+ "save": 1,
859
+ "text": "312e322e332e34"
860
+ },
861
+ "parsed": 1,
862
+ "result": 1,
863
+ "slot": 1
864
+ },
865
+ {
866
+ "after": [
867
+ 4294967295,
868
+ 4294967295,
869
+ 101
870
+ ],
871
+ "before": [
872
+ 4294967295,
873
+ 4294967295,
874
+ 101
875
+ ],
876
+ "before_count": 3,
877
+ "checksum": 15420461893339168460,
878
+ "count": 3,
879
+ "diagnostics": [
880
+ {
881
+ "op": "bad-address",
882
+ "text": "626164"
883
+ }
884
+ ],
885
+ "execution": {
886
+ "stop": 252931,
887
+ "trace_length": 80,
888
+ "trace_sha256": "1dfc460d999df52984c68d4816eff409a285cd7261748ba21fa4295cf766d108"
889
+ },
890
+ "exported": [],
891
+ "exports": [],
892
+ "input": {
893
+ "handle": 0,
894
+ "profile": 3,
895
+ "save": 0,
896
+ "text": "626164"
897
+ },
898
+ "parsed": 0,
899
+ "result": 1,
900
+ "slot": 1
901
+ },
902
+ {
903
+ "after": [
904
+ 4294967295,
905
+ 4294967295,
906
+ 101
907
+ ],
908
+ "before": [
909
+ 4294967295,
910
+ 4294967295,
911
+ 101
912
+ ],
913
+ "before_count": 3,
914
+ "checksum": 15420461893339168460,
915
+ "count": 3,
916
+ "diagnostics": [
917
+ {
918
+ "op": "bad-address",
919
+ "text": "626164"
920
+ }
921
+ ],
922
+ "execution": {
923
+ "stop": 252931,
924
+ "trace_length": 83,
925
+ "trace_sha256": "631d4d92a379a5f678a1f5b23779eb448face51fecacbc44c5ae0a05564ad777"
926
+ },
927
+ "exported": [
928
+ {
929
+ "buffer": "312e302e302e303a3130300a332e302e302e303a3130320a",
930
+ "events": [
931
+ {
932
+ "op": "print",
933
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
934
+ },
935
+ {
936
+ "mode": 1,
937
+ "op": "open",
938
+ "path": "62616e6c6973742e747874"
939
+ },
940
+ {
941
+ "handle": 0,
942
+ "op": "write",
943
+ "text": "312e302e302e303a3130300a332e302e302e303a3130320a"
944
+ },
945
+ {
946
+ "handle": 0,
947
+ "op": "close"
948
+ }
949
+ ],
950
+ "formats": [
951
+ "312e302e302e303a3130300a",
952
+ "332e302e302e303a3130320a"
953
+ ]
954
+ }
955
+ ],
956
+ "exports": [
957
+ 252500
958
+ ],
959
+ "input": {
960
+ "handle": 0,
961
+ "profile": 3,
962
+ "save": 1,
963
+ "text": "626164"
964
+ },
965
+ "parsed": 0,
966
+ "result": 1,
967
+ "slot": 1
968
+ },
969
+ {
970
+ "after": [
971
+ 4294967295,
972
+ 4294967295,
973
+ 4294967295
974
+ ],
975
+ "before": [
976
+ 4294967295,
977
+ 4294967295,
978
+ 101
979
+ ],
980
+ "before_count": 3,
981
+ "checksum": 7753791190889012745,
982
+ "count": 3,
983
+ "diagnostics": [],
984
+ "execution": {
985
+ "stop": 252931,
986
+ "trace_length": 78,
987
+ "trace_sha256": "059d33d70d4834a1d60cc80aaef5709e177980fed7a2f2c2b37b05b03d290312"
988
+ },
989
+ "exported": [],
990
+ "exports": [],
991
+ "input": {
992
+ "handle": 7,
993
+ "profile": 3,
994
+ "save": 0,
995
+ "text": "3235352e3235352e3235352e323535"
996
+ },
997
+ "parsed": 1,
998
+ "result": 1,
999
+ "slot": 1
1000
+ },
1001
+ {
1002
+ "after": [
1003
+ 4294967295,
1004
+ 4294967295,
1005
+ 4294967295
1006
+ ],
1007
+ "before": [
1008
+ 4294967295,
1009
+ 4294967295,
1010
+ 101
1011
+ ],
1012
+ "before_count": 3,
1013
+ "checksum": 7753791190889012745,
1014
+ "count": 3,
1015
+ "diagnostics": [],
1016
+ "execution": {
1017
+ "stop": 252931,
1018
+ "trace_length": 81,
1019
+ "trace_sha256": "f8d750c5a00fd4b4ce38137fea9476d847de9dc2673733b435f834243840cb8a"
1020
+ },
1021
+ "exported": [
1022
+ {
1023
+ "buffer": "312e302e302e303a3130300a332e302e302e303a3130320a",
1024
+ "events": [
1025
+ {
1026
+ "op": "print",
1027
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
1028
+ },
1029
+ {
1030
+ "mode": 1,
1031
+ "op": "open",
1032
+ "path": "62616e6c6973742e747874"
1033
+ },
1034
+ {
1035
+ "handle": 7,
1036
+ "op": "write",
1037
+ "text": "312e302e302e303a3130300a332e302e302e303a3130320a"
1038
+ },
1039
+ {
1040
+ "handle": 7,
1041
+ "op": "close"
1042
+ }
1043
+ ],
1044
+ "formats": [
1045
+ "312e302e302e303a3130300a",
1046
+ "332e302e302e303a3130320a"
1047
+ ]
1048
+ }
1049
+ ],
1050
+ "exports": [
1051
+ 252500
1052
+ ],
1053
+ "input": {
1054
+ "handle": 7,
1055
+ "profile": 3,
1056
+ "save": 1,
1057
+ "text": "3235352e3235352e3235352e323535"
1058
+ },
1059
+ "parsed": 1,
1060
+ "result": 1,
1061
+ "slot": 1
1062
+ },
1063
+ {
1064
+ "after": [
1065
+ 0,
1066
+ 0,
1067
+ 4294967295
1068
+ ],
1069
+ "before": [
1070
+ 4294967295,
1071
+ 4294967295,
1072
+ 101
1073
+ ],
1074
+ "before_count": 3,
1075
+ "checksum": 11277808847814685921,
1076
+ "count": 3,
1077
+ "diagnostics": [],
1078
+ "execution": {
1079
+ "stop": 252931,
1080
+ "trace_length": 78,
1081
+ "trace_sha256": "059d33d70d4834a1d60cc80aaef5709e177980fed7a2f2c2b37b05b03d290312"
1082
+ },
1083
+ "exported": [],
1084
+ "exports": [],
1085
+ "input": {
1086
+ "handle": 7,
1087
+ "profile": 3,
1088
+ "save": 0,
1089
+ "text": "2a"
1090
+ },
1091
+ "parsed": 1,
1092
+ "result": 1,
1093
+ "slot": 1
1094
+ },
1095
+ {
1096
+ "after": [
1097
+ 0,
1098
+ 0,
1099
+ 4294967295
1100
+ ],
1101
+ "before": [
1102
+ 4294967295,
1103
+ 4294967295,
1104
+ 101
1105
+ ],
1106
+ "before_count": 3,
1107
+ "checksum": 11277808847814685921,
1108
+ "count": 3,
1109
+ "diagnostics": [],
1110
+ "execution": {
1111
+ "stop": 252931,
1112
+ "trace_length": 81,
1113
+ "trace_sha256": "f8d750c5a00fd4b4ce38137fea9476d847de9dc2673733b435f834243840cb8a"
1114
+ },
1115
+ "exported": [
1116
+ {
1117
+ "buffer": "312e302e302e303a3130300a302e302e302e303a2d310a332e302e302e303a3130320a",
1118
+ "events": [
1119
+ {
1120
+ "op": "print",
1121
+ "text": "57726974696e673a2062616e6c6973742e7478740a"
1122
+ },
1123
+ {
1124
+ "mode": 1,
1125
+ "op": "open",
1126
+ "path": "62616e6c6973742e747874"
1127
+ },
1128
+ {
1129
+ "handle": 7,
1130
+ "op": "write",
1131
+ "text": "312e302e302e303a3130300a302e302e302e303a2d310a332e302e302e303a3130320a"
1132
+ },
1133
+ {
1134
+ "handle": 7,
1135
+ "op": "close"
1136
+ }
1137
+ ],
1138
+ "formats": [
1139
+ "312e302e302e303a3130300a",
1140
+ "302e302e302e303a2d310a",
1141
+ "332e302e302e303a3130320a"
1142
+ ]
1143
+ }
1144
+ ],
1145
+ "exports": [
1146
+ 252500
1147
+ ],
1148
+ "input": {
1149
+ "handle": 7,
1150
+ "profile": 3,
1151
+ "save": 1,
1152
+ "text": "2a"
1153
+ },
1154
+ "parsed": 1,
1155
+ "result": 1,
1156
+ "slot": 1
1157
+ }
1158
+ ],
1159
+ "root": 252829,
1160
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1161
+ "source": {
1162
+ "archive": "zUrT43_qvm.pk3",
1163
+ "archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
1164
+ "member": {
1165
+ "bytes": 983300,
1166
+ "comment_hex": "",
1167
+ "compressed_bytes": 246560,
1168
+ "compression": 8,
1169
+ "crc32": "98ea1768",
1170
+ "create_system": 0,
1171
+ "create_version": 63,
1172
+ "date_time": [
1173
+ 2018,
1174
+ 6,
1175
+ 18,
1176
+ 22,
1177
+ 11,
1178
+ 50
1179
+ ],
1180
+ "directory": false,
1181
+ "entry_index": 2,
1182
+ "external_attr": 32,
1183
+ "extra_hex": "0a0020000000000001001800d1e24e974007d40116dcbf962f1fd20116dcbf962f1fd201",
1184
+ "extract_version": 20,
1185
+ "flags": 0,
1186
+ "header_offset": 221309,
1187
+ "internal_attr": 0,
1188
+ "occurrence": 0,
1189
+ "output": "assets/extracted/zUrT43_qvm.pk3/members/000002/vm/qagame.qvm",
1190
+ "path": "vm/qagame.qvm",
1191
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1192
+ "type": "member",
1193
+ "volume": 0
1194
+ }
1195
+ }
1196
+ }
docs/research/qvm-resumer-audit.json CHANGED
@@ -8718,7 +8718,7 @@
8718
  ],
8719
  "explicit_result_offsets": null,
8720
  "helper": "qvm_trace_support.resume",
8721
- "line": 35,
8722
  "literal_range": [
8723
  252830,
8724
  252931
 
8718
  ],
8719
  "explicit_result_offsets": null,
8720
  "helper": "qvm_trace_support.resume",
8721
+ "line": 38,
8722
  "literal_range": [
8723
  252830,
8724
  252931
scripts/analyze_qvm_filter_insert_export.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Original insertion composed with actual export/formatting children."""
2
+ from pathlib import Path
3
+ from itertools import product
4
+ from analyze_qvm import write_json
5
+ from qvm_research_support import source
6
+ from qvm_filter_update_support import seed,insert,snapshot,digest,COUNT
7
+ from qvm_filter_persistence_support import export
8
+
9
+ def main():
10
+ q,raw,h,ins=source();probes=[]
11
+ for profile,text,save in product([0,2,3],[b'1.2.3.4',b'bad',b'255.255.255.255',b'*'],[0,1]):
12
+ m,b,count,before=seed(raw,h,profile);exported=[];handle=0 if text==b'bad' else 7
13
+ def persist(i,m,a,bs):
14
+ m,p,bs=export(i,m,dict(bs),handle);exported.append({k:p[k] for k in ['events','formats','buffer']});return m,0,{'actual_source_child':252500}
15
+ m,p,b=insert(ins,m,b,text,save,exporter=persist);rows=snapshot(m,len(before));j=p['slot']
16
+ p.update(input=dict(profile=profile,text=text.hex(),save=save,handle=handle),before_count=count,count=m[COUNT],before=before[j],after=rows[j],checksum=digest(rows),exported=exported);probes.append(p)
17
+ write_json(Path('docs/research/qvm-filter-insert-export.json'),dict(source=q['source'],sha256=q['sha256'],root=252829,probes=probes,limits='24 composed252829/252304/252500 cases with actual formatter children. Failed parse retains grown count and may export an empty table; holes and mask loss preserved. Native memset/strncpy modeled, console/file operations captured; no live filesystem acceptance claim.'))
18
+ if __name__=='__main__':main()
scripts/qvm_filter_update_support.py CHANGED
@@ -22,7 +22,7 @@ def seed(raw,h,profile):
22
  for k,v in enumerate(row):m[TABLE+12*j+4*k]=v
23
  return m,b,n,rows
24
 
25
- def insert(ins,m,b,text,save):
26
  from qvm_map_commands_support import put_string
27
  put_string(m,b,LEFT,text);diagnostics=[];parsed=None;exports=[]
28
  def warning(i,m,a,bs):diagnostics.append(dict(op='full') if a[8]==92236 else dict(op='bad-address',text=cstring(m,bs,a[12]).hex()));return m,0,{'diagnostic_captured':True}
@@ -31,7 +31,10 @@ def insert(ins,m,b,text,save):
31
  def parse(i,m,a,bs):
32
  nonlocal parsed
33
  m,v,p,b=run(i,m,252304,252498,172,a,dict(bs),{37159:atoi,2294:warning},base=ROOT+0x1000);parsed=v;return m,v,{'actual_source_child':252304}
34
- def export(i,m,a,bs):exports.append(252500);return m,0,{'export_callback_captured':True}
 
 
 
35
  m,b=frame_args(m,b,{ROOT+32:LEFT,ROOT+36:save});m,e=resume(ins,252830,252931,m,ROOT,handlers={252304:parse,2294:warning,252500:export},byte_inputs=b,repeated_calls=True,sync_child_words=True,coherent_memory=True,byte_handlers=True,capture_byte_memory=True,segment_limit=4096,limit=262144);return m,dict(execution={k:e[k] for k in ['stop','trace_length','trace_sha256']},result=e['return'],slot=None if e['return']==0 else m[ROOT+16],parsed=parsed,diagnostics=diagnostics,exports=exports),e['byte_memory']
36
 
37
  def snapshot(m,n):return [[m[TABLE+12*j+4*k]&0xffffffff for k in range(3)] for j in range(n)]
 
22
  for k,v in enumerate(row):m[TABLE+12*j+4*k]=v
23
  return m,b,n,rows
24
 
25
+ def insert(ins,m,b,text,save,exporter=None):
26
  from qvm_map_commands_support import put_string
27
  put_string(m,b,LEFT,text);diagnostics=[];parsed=None;exports=[]
28
  def warning(i,m,a,bs):diagnostics.append(dict(op='full') if a[8]==92236 else dict(op='bad-address',text=cstring(m,bs,a[12]).hex()));return m,0,{'diagnostic_captured':True}
 
31
  def parse(i,m,a,bs):
32
  nonlocal parsed
33
  m,v,p,b=run(i,m,252304,252498,172,a,dict(bs),{37159:atoi,2294:warning},base=ROOT+0x1000);parsed=v;return m,v,{'actual_source_child':252304}
34
+ def export(i,m,a,bs):
35
+ exports.append(252500)
36
+ if exporter is not None:return exporter(i,m,a,bs)
37
+ return m,0,{'export_callback_captured':True}
38
  m,b=frame_args(m,b,{ROOT+32:LEFT,ROOT+36:save});m,e=resume(ins,252830,252931,m,ROOT,handlers={252304:parse,2294:warning,252500:export},byte_inputs=b,repeated_calls=True,sync_child_words=True,coherent_memory=True,byte_handlers=True,capture_byte_memory=True,segment_limit=4096,limit=262144);return m,dict(execution={k:e[k] for k in ['stop','trace_length','trace_sha256']},result=e['return'],slot=None if e['return']==0 else m[ROOT+16],parsed=parsed,diagnostics=diagnostics,exports=exports),e['byte_memory']
39
 
40
  def snapshot(m,n):return [[m[TABLE+12*j+4*k]&0xffffffff for k in range(3)] for j in range(n)]
scripts/test_qvm_filter_insert_export.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from qvm_filter_insert_oracle import policy
4
+ from qvm_filter_update_support import table
5
+ from qvm_filter_persistence_support import export_oracle
6
+ class CompositionTests(unittest.TestCase):
7
+ def test_original_mutation_and_file_bytes(self):
8
+ rows=json.loads(Path('docs/research/qvm-filter-insert-export.json').read_text())['probes'];self.assertEqual(len(rows),24)
9
+ for p in rows:
10
+ a=p['input'];want=policy(a['profile'],bytes.fromhex(a['text']),a['save'])
11
+ for k,v in want.items():self.assertEqual(p[k],v)
12
+ n,r=table(a['profile']);r[want['slot']]=want['after']
13
+ self.assertEqual(p['exported'],[export_oracle(r[:want['count']],a['handle'])] if a['save'] else [])
14
+ def test_parse_failure_still_reaches_zero_handle_write(self):
15
+ rows=json.loads(Path('docs/research/qvm-filter-insert-export.json').read_text())['probes']
16
+ p=next(p for p in rows if p['input']==dict(profile=0,text=b'bad'.hex(),save=1,handle=0))
17
+ self.assertEqual(p['count'],1);self.assertEqual(p['parsed'],0);self.assertEqual(p['exported'][0]['events'][2],dict(op='write',handle=0,text=''))
18
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -3160,3 +3160,7 @@ edge crates/urt-gameplay/src/bin/urt-filter-policy.rs scripts/analyze_rust_filte
3160
  edge docs/research/qvm-filter-metadata.json scripts/analyze_rust_filter_metadata.py
3161
  group rust-filter-metadata scripts/analyze_rust_health_impulse.py
3162
  group gameplay scripts/analyze_rust_filter_metadata.py
 
 
 
 
 
3160
  edge docs/research/qvm-filter-metadata.json scripts/analyze_rust_filter_metadata.py
3161
  group rust-filter-metadata scripts/analyze_rust_health_impulse.py
3162
  group gameplay scripts/analyze_rust_filter_metadata.py
3163
+ report scripts/analyze_qvm_filter_insert_export.py docs/research/qvm-filter-insert-export.json
3164
+ edge docs/research/qvm-filter-insert-export.json scripts/test_qvm_filter_insert_export.py
3165
+ group qvm-filter-insert-export scripts/analyze_qvm_filter_insert_export.py
3166
+ edge scripts/analyze_qvm_filter_insert_export.py scripts/analyze_qvm_resumer_audit.py