nmarshall commited on
Commit
51dbd8d
·
1 Parent(s): 2974ac4

gameplay: port full-table filter expiry

Browse files
crates/urt-gameplay/src/bin/urt-filter-loading.rs CHANGED
@@ -24,6 +24,55 @@ fn main() {
24
  list(&inverse)
25
  );
26
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  _ => panic!("unknown policy"),
28
  }
29
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  list(&inverse)
25
  );
26
  }
27
+ "expiry" => {
28
+ assert_eq!(w.len(), 2);
29
+ let now = w[0];
30
+ let slots = [0usize, 1, 2, 3, 4, 5, 63, 4095];
31
+ let mut rows: Vec<_> = (0..4096)
32
+ .map(|j| urt_gameplay::native_policy::FilterRecord {
33
+ mask: 0x11223344,
34
+ comparison: j + 1,
35
+ metadata: u32::MAX,
36
+ })
37
+ .collect();
38
+ for (j, t) in slots.into_iter().zip([
39
+ 0,
40
+ now.wrapping_sub(1),
41
+ now,
42
+ now.wrapping_add(1),
43
+ u32::MAX,
44
+ 0x80000000,
45
+ 60,
46
+ 0,
47
+ ]) {
48
+ rows[j].metadata = t;
49
+ }
50
+ rows[5].comparison = u32::MAX;
51
+ expire_filters(&mut rows, now).unwrap();
52
+ let selected = slots
53
+ .iter()
54
+ .map(|j| list(&[rows[*j].mask, rows[*j].comparison, rows[*j].metadata]))
55
+ .collect::<Vec<_>>()
56
+ .join(",");
57
+ println!(
58
+ "{{\"calls\":[{{\"op\":\"time\"}}],\"count\":{},\"selected\":[{}],\"checksum\":{}}}",
59
+ w[1],
60
+ selected,
61
+ digest(&rows)
62
+ );
63
+ }
64
  _ => panic!("unknown policy"),
65
  }
66
  }
67
+
68
+ fn digest(rows: &[urt_gameplay::native_policy::FilterRecord]) -> u64 {
69
+ let mut h = 14695981039346656037u64;
70
+ for r in rows {
71
+ for w in [r.mask, r.comparison, r.metadata] {
72
+ for b in w.to_le_bytes() {
73
+ h = (h ^ b as u64).wrapping_mul(1099511628211);
74
+ }
75
+ }
76
+ }
77
+ h
78
+ }
crates/urt-gameplay/src/filter_loading.rs CHANGED
@@ -40,3 +40,63 @@ mod tests {
40
  }
41
  }
42
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
41
  }
42
  }
43
+
44
+ /// Original252067 always scans4096 records. Count is intentionally absent:
45
+ /// unsigned metadata less than now expires comparison only; -1 is permanent.
46
+ pub fn expire_filters(
47
+ records: &mut [crate::native_policy::FilterRecord],
48
+ now: u32,
49
+ ) -> Result<(), crate::native_policy::Error> {
50
+ if records.len() != 4096 {
51
+ return Err(crate::native_policy::Error::InvalidCount);
52
+ }
53
+ for r in records {
54
+ if r.metadata != u32::MAX && r.metadata < now {
55
+ r.comparison = u32::MAX;
56
+ }
57
+ }
58
+ Ok(())
59
+ }
60
+ #[cfg(test)]
61
+ mod expiry_tests {
62
+ use super::*;
63
+ use crate::native_policy::FilterRecord;
64
+ #[test]
65
+ fn unsigned_strict_gate_and_permanent_marker_preserve_other_fields() {
66
+ let row = FilterRecord {
67
+ mask: 7,
68
+ comparison: 8,
69
+ metadata: u32::MAX,
70
+ };
71
+ let mut rows = vec![row; 4096];
72
+ rows[0].metadata = 59;
73
+ rows[1].metadata = 60;
74
+ rows[2].metadata = 0x80000000;
75
+ rows[4095].metadata = 0;
76
+ expire_filters(&mut rows, 60).unwrap();
77
+ assert_eq!(rows[0].comparison, u32::MAX);
78
+ assert_eq!(rows[1].comparison, 8);
79
+ assert_eq!(rows[2].comparison, 8);
80
+ assert_eq!(rows[4095].comparison, u32::MAX);
81
+ assert_eq!(rows[0].mask, 7);
82
+ assert_eq!(rows[0].metadata, 59);
83
+ assert_eq!(rows[3], row);
84
+ expire_filters(&mut rows, u32::MAX).unwrap();
85
+ assert_eq!(rows[2].comparison, u32::MAX);
86
+ assert_eq!(rows[3], row);
87
+ }
88
+ #[test]
89
+ fn incomplete_storage_rejects_without_mutation() {
90
+ let mut rows = vec![
91
+ FilterRecord {
92
+ mask: 7,
93
+ comparison: 8,
94
+ metadata: 0
95
+ };
96
+ 4095
97
+ ];
98
+ let before = rows.clone();
99
+ assert!(expire_filters(&mut rows, 60).is_err());
100
+ assert_eq!(rows, before);
101
+ }
102
+ }
docs/FINDINGS.md CHANGED
@@ -1825,3 +1825,5 @@ RE-944: Eighty-four actual251995/252024 conversion pairs recover wrapping day-of
1825
  RE-945: Rust matches84 original conversion pairs using wrapping arithmetic and truncating signed division, retaining the inverse minute-field quirk and all unrelated structure words. Unit tests cover signed extremes, arithmetic wrap and unchanged sentinel fields. Native clock acquisition and calendar interpretation remain supplied boundaries. [Evidence](research/RUST_FILTER_TIME.md).
1826
 
1827
  RE-946: Twelve actual252067 scans execute all4096 slots with actual251995 and supplied native time. Metadata other than-1 expires only when unsigned-less-than current minutes; equality is retained. Expiry changes comparison only, ignores and preserves active count, and never exports. Fixtures verify the last slot mutates even at count zero, permanent markers and high-bit timestamps. Calendar rollover and invocation cadence remain open. [Evidence](research/QVM_FILTER_EXPIRY.md).
 
 
 
1825
  RE-945: Rust matches84 original conversion pairs using wrapping arithmetic and truncating signed division, retaining the inverse minute-field quirk and all unrelated structure words. Unit tests cover signed extremes, arithmetic wrap and unchanged sentinel fields. Native clock acquisition and calendar interpretation remain supplied boundaries. [Evidence](research/RUST_FILTER_TIME.md).
1826
 
1827
  RE-946: Twelve actual252067 scans execute all4096 slots with actual251995 and supplied native time. Metadata other than-1 expires only when unsigned-less-than current minutes; equality is retained. Expiry changes comparison only, ignores and preserves active count, and never exports. Fixtures verify the last slot mutates even at count zero, permanent markers and high-bit timestamps. Calendar rollover and invocation cadence remain open. [Evidence](research/QVM_FILTER_EXPIRY.md).
1828
+
1829
+ RE-947: Rust matches12 full4096-slot original scans and table-wide checksums. The API requires exactly4096 records and has no active-count parameter, preserving expiry beyond active rows. It retains masks/metadata, strict unsigned comparisons, permanent-1 and no-export behavior. Unit tests cover high-bit/equality/permanent gates, last-slot mutation and atomic rejection of incomplete storage. [Evidence](research/RUST_FILTER_EXPIRY.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1873,3 +1873,5 @@ RE-934–943 completed bounded filter export/removal/metadata and insertion/remo
1873
  - [x] RE-945 Rust filter time arithmetic and asymmetric inverse ([evidence](research/RUST_FILTER_TIME.md)).
1874
 
1875
  - [x] RE-946 Original full-table filter expiry and unsigned time gates ([evidence](research/QVM_FILTER_EXPIRY.md)).
 
 
 
1873
  - [x] RE-945 Rust filter time arithmetic and asymmetric inverse ([evidence](research/RUST_FILTER_TIME.md)).
1874
 
1875
  - [x] RE-946 Original full-table filter expiry and unsigned time gates ([evidence](research/QVM_FILTER_EXPIRY.md)).
1876
+
1877
+ - [x] RE-947 Rust full-table expiry with unsigned metadata gates ([evidence](research/RUST_FILTER_EXPIRY.md)).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2451,3 +2451,7 @@ Rust matches84 original conversion pairs using wrapping arithmetic and truncatin
2451
  ## 2026-10-28 — RE-946 Original full-table filter expiry and unsigned time gates
2452
 
2453
  Twelve actual252067 scans execute all4096 slots with actual251995 and supplied native time. Metadata other than-1 expires only when unsigned-less-than current minutes; equality is retained. Expiry changes comparison only, ignores and preserves active count, and never exports. Fixtures verify the last slot mutates even at count zero, permanent markers and high-bit timestamps. Calendar rollover and invocation cadence remain open. Focused `cargo xtask test-group qvm-filter-expiry` 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.
 
 
 
 
 
2451
  ## 2026-10-28 — RE-946 Original full-table filter expiry and unsigned time gates
2452
 
2453
  Twelve actual252067 scans execute all4096 slots with actual251995 and supplied native time. Metadata other than-1 expires only when unsigned-less-than current minutes; equality is retained. Expiry changes comparison only, ignores and preserves active count, and never exports. Fixtures verify the last slot mutates even at count zero, permanent markers and high-bit timestamps. Calendar rollover and invocation cadence remain open. Focused `cargo xtask test-group qvm-filter-expiry` 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.
2454
+
2455
+ ## 2026-10-28 — RE-947 Rust full-table expiry with unsigned metadata gates
2456
+
2457
+ Rust matches12 full4096-slot original scans and table-wide checksums. The API requires exactly4096 records and has no active-count parameter, preserving expiry beyond active rows. It retains masks/metadata, strict unsigned comparisons, permanent-1 and no-export behavior. Unit tests cover high-bit/equality/permanent gates, last-slot mutation and atomic rejection of incomplete storage. Focused `cargo xtask test-group rust-filter-expiry` 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
@@ -1910,3 +1910,5 @@ RE-934–943 continue the prior batch with filter export/removal/metadata and co
1910
  - [x] RE-945 Rust filter time arithmetic and asymmetric inverse ([evidence](research/RUST_FILTER_TIME.md)).
1911
 
1912
  - [x] RE-946 Original full-table filter expiry and unsigned time gates ([evidence](research/QVM_FILTER_EXPIRY.md)).
 
 
 
1910
  - [x] RE-945 Rust filter time arithmetic and asymmetric inverse ([evidence](research/RUST_FILTER_TIME.md)).
1911
 
1912
  - [x] RE-946 Original full-table filter expiry and unsigned time gates ([evidence](research/QVM_FILTER_EXPIRY.md)).
1913
+
1914
+ - [x] RE-947 Rust full-table expiry with unsigned metadata gates ([evidence](research/RUST_FILTER_EXPIRY.md)).
docs/research/README.md CHANGED
@@ -1445,3 +1445,5 @@ The extension collector adds five focused tests for native tail calls, command-r
1445
  - [RE-945: Rust filter time arithmetic and asymmetric inverse](RUST_FILTER_TIME.md).
1446
 
1447
  - [RE-946: Original full-table filter expiry and unsigned time gates](QVM_FILTER_EXPIRY.md).
 
 
 
1445
  - [RE-945: Rust filter time arithmetic and asymmetric inverse](RUST_FILTER_TIME.md).
1446
 
1447
  - [RE-946: Original full-table filter expiry and unsigned time gates](QVM_FILTER_EXPIRY.md).
1448
+
1449
+ - [RE-947: Rust full-table expiry with unsigned metadata gates](RUST_FILTER_EXPIRY.md).
docs/research/RUST_FILTER_EXPIRY.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Rust full-table expiry with unsigned metadata gates
2
+
3
+ RE-947. Focused validation: `cargo xtask test-group rust-filter-expiry`. [Machine report](rust-filter-expiry.json).
4
+
5
+ Rust matches12 full4096-slot original scans and table-wide checksums. The API requires exactly4096 records and has no active-count parameter, preserving expiry beyond active rows. It retains masks/metadata, strict unsigned comparisons, permanent-1 and no-export behavior. Unit tests cover high-bit/equality/permanent gates, last-slot mutation and atomic rejection of incomplete storage.
docs/research/rust-filter-expiry.json ADDED
@@ -0,0 +1,1255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Finite source/Rust contract parity; native time/file/network replies remain supplied or captured.",
3
+ "probes": [
4
+ {
5
+ "rust": {
6
+ "calls": [
7
+ {
8
+ "op": "time"
9
+ }
10
+ ],
11
+ "checksum": 9798687455571071282,
12
+ "count": 0,
13
+ "selected": [
14
+ [
15
+ 287454020,
16
+ 1,
17
+ 0
18
+ ],
19
+ [
20
+ 287454020,
21
+ 2,
22
+ 4294967295
23
+ ],
24
+ [
25
+ 287454020,
26
+ 3,
27
+ 0
28
+ ],
29
+ [
30
+ 287454020,
31
+ 4,
32
+ 1
33
+ ],
34
+ [
35
+ 287454020,
36
+ 5,
37
+ 4294967295
38
+ ],
39
+ [
40
+ 287454020,
41
+ 4294967295,
42
+ 2147483648
43
+ ],
44
+ [
45
+ 287454020,
46
+ 64,
47
+ 60
48
+ ],
49
+ [
50
+ 287454020,
51
+ 4096,
52
+ 0
53
+ ]
54
+ ]
55
+ },
56
+ "source": {
57
+ "calls": [
58
+ {
59
+ "op": "time"
60
+ }
61
+ ],
62
+ "checksum": 9798687455571071282,
63
+ "count": 0,
64
+ "selected": [
65
+ [
66
+ 287454020,
67
+ 1,
68
+ 0
69
+ ],
70
+ [
71
+ 287454020,
72
+ 2,
73
+ 4294967295
74
+ ],
75
+ [
76
+ 287454020,
77
+ 3,
78
+ 0
79
+ ],
80
+ [
81
+ 287454020,
82
+ 4,
83
+ 1
84
+ ],
85
+ [
86
+ 287454020,
87
+ 5,
88
+ 4294967295
89
+ ],
90
+ [
91
+ 287454020,
92
+ 4294967295,
93
+ 2147483648
94
+ ],
95
+ [
96
+ 287454020,
97
+ 64,
98
+ 60
99
+ ],
100
+ [
101
+ 287454020,
102
+ 4096,
103
+ 0
104
+ ]
105
+ ]
106
+ }
107
+ },
108
+ {
109
+ "rust": {
110
+ "calls": [
111
+ {
112
+ "op": "time"
113
+ }
114
+ ],
115
+ "checksum": 9798687455571071282,
116
+ "count": 3,
117
+ "selected": [
118
+ [
119
+ 287454020,
120
+ 1,
121
+ 0
122
+ ],
123
+ [
124
+ 287454020,
125
+ 2,
126
+ 4294967295
127
+ ],
128
+ [
129
+ 287454020,
130
+ 3,
131
+ 0
132
+ ],
133
+ [
134
+ 287454020,
135
+ 4,
136
+ 1
137
+ ],
138
+ [
139
+ 287454020,
140
+ 5,
141
+ 4294967295
142
+ ],
143
+ [
144
+ 287454020,
145
+ 4294967295,
146
+ 2147483648
147
+ ],
148
+ [
149
+ 287454020,
150
+ 64,
151
+ 60
152
+ ],
153
+ [
154
+ 287454020,
155
+ 4096,
156
+ 0
157
+ ]
158
+ ]
159
+ },
160
+ "source": {
161
+ "calls": [
162
+ {
163
+ "op": "time"
164
+ }
165
+ ],
166
+ "checksum": 9798687455571071282,
167
+ "count": 3,
168
+ "selected": [
169
+ [
170
+ 287454020,
171
+ 1,
172
+ 0
173
+ ],
174
+ [
175
+ 287454020,
176
+ 2,
177
+ 4294967295
178
+ ],
179
+ [
180
+ 287454020,
181
+ 3,
182
+ 0
183
+ ],
184
+ [
185
+ 287454020,
186
+ 4,
187
+ 1
188
+ ],
189
+ [
190
+ 287454020,
191
+ 5,
192
+ 4294967295
193
+ ],
194
+ [
195
+ 287454020,
196
+ 4294967295,
197
+ 2147483648
198
+ ],
199
+ [
200
+ 287454020,
201
+ 64,
202
+ 60
203
+ ],
204
+ [
205
+ 287454020,
206
+ 4096,
207
+ 0
208
+ ]
209
+ ]
210
+ }
211
+ },
212
+ {
213
+ "rust": {
214
+ "calls": [
215
+ {
216
+ "op": "time"
217
+ }
218
+ ],
219
+ "checksum": 9798687455571071282,
220
+ "count": 4096,
221
+ "selected": [
222
+ [
223
+ 287454020,
224
+ 1,
225
+ 0
226
+ ],
227
+ [
228
+ 287454020,
229
+ 2,
230
+ 4294967295
231
+ ],
232
+ [
233
+ 287454020,
234
+ 3,
235
+ 0
236
+ ],
237
+ [
238
+ 287454020,
239
+ 4,
240
+ 1
241
+ ],
242
+ [
243
+ 287454020,
244
+ 5,
245
+ 4294967295
246
+ ],
247
+ [
248
+ 287454020,
249
+ 4294967295,
250
+ 2147483648
251
+ ],
252
+ [
253
+ 287454020,
254
+ 64,
255
+ 60
256
+ ],
257
+ [
258
+ 287454020,
259
+ 4096,
260
+ 0
261
+ ]
262
+ ]
263
+ },
264
+ "source": {
265
+ "calls": [
266
+ {
267
+ "op": "time"
268
+ }
269
+ ],
270
+ "checksum": 9798687455571071282,
271
+ "count": 4096,
272
+ "selected": [
273
+ [
274
+ 287454020,
275
+ 1,
276
+ 0
277
+ ],
278
+ [
279
+ 287454020,
280
+ 2,
281
+ 4294967295
282
+ ],
283
+ [
284
+ 287454020,
285
+ 3,
286
+ 0
287
+ ],
288
+ [
289
+ 287454020,
290
+ 4,
291
+ 1
292
+ ],
293
+ [
294
+ 287454020,
295
+ 5,
296
+ 4294967295
297
+ ],
298
+ [
299
+ 287454020,
300
+ 4294967295,
301
+ 2147483648
302
+ ],
303
+ [
304
+ 287454020,
305
+ 64,
306
+ 60
307
+ ],
308
+ [
309
+ 287454020,
310
+ 4096,
311
+ 0
312
+ ]
313
+ ]
314
+ }
315
+ },
316
+ {
317
+ "rust": {
318
+ "calls": [
319
+ {
320
+ "op": "time"
321
+ }
322
+ ],
323
+ "checksum": 6770823300158093670,
324
+ "count": 0,
325
+ "selected": [
326
+ [
327
+ 287454020,
328
+ 4294967295,
329
+ 0
330
+ ],
331
+ [
332
+ 287454020,
333
+ 4294967295,
334
+ 59
335
+ ],
336
+ [
337
+ 287454020,
338
+ 3,
339
+ 60
340
+ ],
341
+ [
342
+ 287454020,
343
+ 4,
344
+ 61
345
+ ],
346
+ [
347
+ 287454020,
348
+ 5,
349
+ 4294967295
350
+ ],
351
+ [
352
+ 287454020,
353
+ 4294967295,
354
+ 2147483648
355
+ ],
356
+ [
357
+ 287454020,
358
+ 64,
359
+ 60
360
+ ],
361
+ [
362
+ 287454020,
363
+ 4294967295,
364
+ 0
365
+ ]
366
+ ]
367
+ },
368
+ "source": {
369
+ "calls": [
370
+ {
371
+ "op": "time"
372
+ }
373
+ ],
374
+ "checksum": 6770823300158093670,
375
+ "count": 0,
376
+ "selected": [
377
+ [
378
+ 287454020,
379
+ 4294967295,
380
+ 0
381
+ ],
382
+ [
383
+ 287454020,
384
+ 4294967295,
385
+ 59
386
+ ],
387
+ [
388
+ 287454020,
389
+ 3,
390
+ 60
391
+ ],
392
+ [
393
+ 287454020,
394
+ 4,
395
+ 61
396
+ ],
397
+ [
398
+ 287454020,
399
+ 5,
400
+ 4294967295
401
+ ],
402
+ [
403
+ 287454020,
404
+ 4294967295,
405
+ 2147483648
406
+ ],
407
+ [
408
+ 287454020,
409
+ 64,
410
+ 60
411
+ ],
412
+ [
413
+ 287454020,
414
+ 4294967295,
415
+ 0
416
+ ]
417
+ ]
418
+ }
419
+ },
420
+ {
421
+ "rust": {
422
+ "calls": [
423
+ {
424
+ "op": "time"
425
+ }
426
+ ],
427
+ "checksum": 6770823300158093670,
428
+ "count": 3,
429
+ "selected": [
430
+ [
431
+ 287454020,
432
+ 4294967295,
433
+ 0
434
+ ],
435
+ [
436
+ 287454020,
437
+ 4294967295,
438
+ 59
439
+ ],
440
+ [
441
+ 287454020,
442
+ 3,
443
+ 60
444
+ ],
445
+ [
446
+ 287454020,
447
+ 4,
448
+ 61
449
+ ],
450
+ [
451
+ 287454020,
452
+ 5,
453
+ 4294967295
454
+ ],
455
+ [
456
+ 287454020,
457
+ 4294967295,
458
+ 2147483648
459
+ ],
460
+ [
461
+ 287454020,
462
+ 64,
463
+ 60
464
+ ],
465
+ [
466
+ 287454020,
467
+ 4294967295,
468
+ 0
469
+ ]
470
+ ]
471
+ },
472
+ "source": {
473
+ "calls": [
474
+ {
475
+ "op": "time"
476
+ }
477
+ ],
478
+ "checksum": 6770823300158093670,
479
+ "count": 3,
480
+ "selected": [
481
+ [
482
+ 287454020,
483
+ 4294967295,
484
+ 0
485
+ ],
486
+ [
487
+ 287454020,
488
+ 4294967295,
489
+ 59
490
+ ],
491
+ [
492
+ 287454020,
493
+ 3,
494
+ 60
495
+ ],
496
+ [
497
+ 287454020,
498
+ 4,
499
+ 61
500
+ ],
501
+ [
502
+ 287454020,
503
+ 5,
504
+ 4294967295
505
+ ],
506
+ [
507
+ 287454020,
508
+ 4294967295,
509
+ 2147483648
510
+ ],
511
+ [
512
+ 287454020,
513
+ 64,
514
+ 60
515
+ ],
516
+ [
517
+ 287454020,
518
+ 4294967295,
519
+ 0
520
+ ]
521
+ ]
522
+ }
523
+ },
524
+ {
525
+ "rust": {
526
+ "calls": [
527
+ {
528
+ "op": "time"
529
+ }
530
+ ],
531
+ "checksum": 6770823300158093670,
532
+ "count": 4096,
533
+ "selected": [
534
+ [
535
+ 287454020,
536
+ 4294967295,
537
+ 0
538
+ ],
539
+ [
540
+ 287454020,
541
+ 4294967295,
542
+ 59
543
+ ],
544
+ [
545
+ 287454020,
546
+ 3,
547
+ 60
548
+ ],
549
+ [
550
+ 287454020,
551
+ 4,
552
+ 61
553
+ ],
554
+ [
555
+ 287454020,
556
+ 5,
557
+ 4294967295
558
+ ],
559
+ [
560
+ 287454020,
561
+ 4294967295,
562
+ 2147483648
563
+ ],
564
+ [
565
+ 287454020,
566
+ 64,
567
+ 60
568
+ ],
569
+ [
570
+ 287454020,
571
+ 4294967295,
572
+ 0
573
+ ]
574
+ ]
575
+ },
576
+ "source": {
577
+ "calls": [
578
+ {
579
+ "op": "time"
580
+ }
581
+ ],
582
+ "checksum": 6770823300158093670,
583
+ "count": 4096,
584
+ "selected": [
585
+ [
586
+ 287454020,
587
+ 4294967295,
588
+ 0
589
+ ],
590
+ [
591
+ 287454020,
592
+ 4294967295,
593
+ 59
594
+ ],
595
+ [
596
+ 287454020,
597
+ 3,
598
+ 60
599
+ ],
600
+ [
601
+ 287454020,
602
+ 4,
603
+ 61
604
+ ],
605
+ [
606
+ 287454020,
607
+ 5,
608
+ 4294967295
609
+ ],
610
+ [
611
+ 287454020,
612
+ 4294967295,
613
+ 2147483648
614
+ ],
615
+ [
616
+ 287454020,
617
+ 64,
618
+ 60
619
+ ],
620
+ [
621
+ 287454020,
622
+ 4294967295,
623
+ 0
624
+ ]
625
+ ]
626
+ }
627
+ },
628
+ {
629
+ "rust": {
630
+ "calls": [
631
+ {
632
+ "op": "time"
633
+ }
634
+ ],
635
+ "checksum": 11781194392214500037,
636
+ "count": 0,
637
+ "selected": [
638
+ [
639
+ 287454020,
640
+ 4294967295,
641
+ 0
642
+ ],
643
+ [
644
+ 287454020,
645
+ 4294967295,
646
+ 1439
647
+ ],
648
+ [
649
+ 287454020,
650
+ 3,
651
+ 1440
652
+ ],
653
+ [
654
+ 287454020,
655
+ 4,
656
+ 1441
657
+ ],
658
+ [
659
+ 287454020,
660
+ 5,
661
+ 4294967295
662
+ ],
663
+ [
664
+ 287454020,
665
+ 4294967295,
666
+ 2147483648
667
+ ],
668
+ [
669
+ 287454020,
670
+ 4294967295,
671
+ 60
672
+ ],
673
+ [
674
+ 287454020,
675
+ 4294967295,
676
+ 0
677
+ ]
678
+ ]
679
+ },
680
+ "source": {
681
+ "calls": [
682
+ {
683
+ "op": "time"
684
+ }
685
+ ],
686
+ "checksum": 11781194392214500037,
687
+ "count": 0,
688
+ "selected": [
689
+ [
690
+ 287454020,
691
+ 4294967295,
692
+ 0
693
+ ],
694
+ [
695
+ 287454020,
696
+ 4294967295,
697
+ 1439
698
+ ],
699
+ [
700
+ 287454020,
701
+ 3,
702
+ 1440
703
+ ],
704
+ [
705
+ 287454020,
706
+ 4,
707
+ 1441
708
+ ],
709
+ [
710
+ 287454020,
711
+ 5,
712
+ 4294967295
713
+ ],
714
+ [
715
+ 287454020,
716
+ 4294967295,
717
+ 2147483648
718
+ ],
719
+ [
720
+ 287454020,
721
+ 4294967295,
722
+ 60
723
+ ],
724
+ [
725
+ 287454020,
726
+ 4294967295,
727
+ 0
728
+ ]
729
+ ]
730
+ }
731
+ },
732
+ {
733
+ "rust": {
734
+ "calls": [
735
+ {
736
+ "op": "time"
737
+ }
738
+ ],
739
+ "checksum": 11781194392214500037,
740
+ "count": 3,
741
+ "selected": [
742
+ [
743
+ 287454020,
744
+ 4294967295,
745
+ 0
746
+ ],
747
+ [
748
+ 287454020,
749
+ 4294967295,
750
+ 1439
751
+ ],
752
+ [
753
+ 287454020,
754
+ 3,
755
+ 1440
756
+ ],
757
+ [
758
+ 287454020,
759
+ 4,
760
+ 1441
761
+ ],
762
+ [
763
+ 287454020,
764
+ 5,
765
+ 4294967295
766
+ ],
767
+ [
768
+ 287454020,
769
+ 4294967295,
770
+ 2147483648
771
+ ],
772
+ [
773
+ 287454020,
774
+ 4294967295,
775
+ 60
776
+ ],
777
+ [
778
+ 287454020,
779
+ 4294967295,
780
+ 0
781
+ ]
782
+ ]
783
+ },
784
+ "source": {
785
+ "calls": [
786
+ {
787
+ "op": "time"
788
+ }
789
+ ],
790
+ "checksum": 11781194392214500037,
791
+ "count": 3,
792
+ "selected": [
793
+ [
794
+ 287454020,
795
+ 4294967295,
796
+ 0
797
+ ],
798
+ [
799
+ 287454020,
800
+ 4294967295,
801
+ 1439
802
+ ],
803
+ [
804
+ 287454020,
805
+ 3,
806
+ 1440
807
+ ],
808
+ [
809
+ 287454020,
810
+ 4,
811
+ 1441
812
+ ],
813
+ [
814
+ 287454020,
815
+ 5,
816
+ 4294967295
817
+ ],
818
+ [
819
+ 287454020,
820
+ 4294967295,
821
+ 2147483648
822
+ ],
823
+ [
824
+ 287454020,
825
+ 4294967295,
826
+ 60
827
+ ],
828
+ [
829
+ 287454020,
830
+ 4294967295,
831
+ 0
832
+ ]
833
+ ]
834
+ }
835
+ },
836
+ {
837
+ "rust": {
838
+ "calls": [
839
+ {
840
+ "op": "time"
841
+ }
842
+ ],
843
+ "checksum": 11781194392214500037,
844
+ "count": 4096,
845
+ "selected": [
846
+ [
847
+ 287454020,
848
+ 4294967295,
849
+ 0
850
+ ],
851
+ [
852
+ 287454020,
853
+ 4294967295,
854
+ 1439
855
+ ],
856
+ [
857
+ 287454020,
858
+ 3,
859
+ 1440
860
+ ],
861
+ [
862
+ 287454020,
863
+ 4,
864
+ 1441
865
+ ],
866
+ [
867
+ 287454020,
868
+ 5,
869
+ 4294967295
870
+ ],
871
+ [
872
+ 287454020,
873
+ 4294967295,
874
+ 2147483648
875
+ ],
876
+ [
877
+ 287454020,
878
+ 4294967295,
879
+ 60
880
+ ],
881
+ [
882
+ 287454020,
883
+ 4294967295,
884
+ 0
885
+ ]
886
+ ]
887
+ },
888
+ "source": {
889
+ "calls": [
890
+ {
891
+ "op": "time"
892
+ }
893
+ ],
894
+ "checksum": 11781194392214500037,
895
+ "count": 4096,
896
+ "selected": [
897
+ [
898
+ 287454020,
899
+ 4294967295,
900
+ 0
901
+ ],
902
+ [
903
+ 287454020,
904
+ 4294967295,
905
+ 1439
906
+ ],
907
+ [
908
+ 287454020,
909
+ 3,
910
+ 1440
911
+ ],
912
+ [
913
+ 287454020,
914
+ 4,
915
+ 1441
916
+ ],
917
+ [
918
+ 287454020,
919
+ 5,
920
+ 4294967295
921
+ ],
922
+ [
923
+ 287454020,
924
+ 4294967295,
925
+ 2147483648
926
+ ],
927
+ [
928
+ 287454020,
929
+ 4294967295,
930
+ 60
931
+ ],
932
+ [
933
+ 287454020,
934
+ 4294967295,
935
+ 0
936
+ ]
937
+ ]
938
+ }
939
+ },
940
+ {
941
+ "rust": {
942
+ "calls": [
943
+ {
944
+ "op": "time"
945
+ }
946
+ ],
947
+ "checksum": 5086403093565816865,
948
+ "count": 0,
949
+ "selected": [
950
+ [
951
+ 287454020,
952
+ 4294967295,
953
+ 0
954
+ ],
955
+ [
956
+ 287454020,
957
+ 4294967295,
958
+ 4294967294
959
+ ],
960
+ [
961
+ 287454020,
962
+ 3,
963
+ 4294967295
964
+ ],
965
+ [
966
+ 287454020,
967
+ 4294967295,
968
+ 0
969
+ ],
970
+ [
971
+ 287454020,
972
+ 5,
973
+ 4294967295
974
+ ],
975
+ [
976
+ 287454020,
977
+ 4294967295,
978
+ 2147483648
979
+ ],
980
+ [
981
+ 287454020,
982
+ 4294967295,
983
+ 60
984
+ ],
985
+ [
986
+ 287454020,
987
+ 4294967295,
988
+ 0
989
+ ]
990
+ ]
991
+ },
992
+ "source": {
993
+ "calls": [
994
+ {
995
+ "op": "time"
996
+ }
997
+ ],
998
+ "checksum": 5086403093565816865,
999
+ "count": 0,
1000
+ "selected": [
1001
+ [
1002
+ 287454020,
1003
+ 4294967295,
1004
+ 0
1005
+ ],
1006
+ [
1007
+ 287454020,
1008
+ 4294967295,
1009
+ 4294967294
1010
+ ],
1011
+ [
1012
+ 287454020,
1013
+ 3,
1014
+ 4294967295
1015
+ ],
1016
+ [
1017
+ 287454020,
1018
+ 4294967295,
1019
+ 0
1020
+ ],
1021
+ [
1022
+ 287454020,
1023
+ 5,
1024
+ 4294967295
1025
+ ],
1026
+ [
1027
+ 287454020,
1028
+ 4294967295,
1029
+ 2147483648
1030
+ ],
1031
+ [
1032
+ 287454020,
1033
+ 4294967295,
1034
+ 60
1035
+ ],
1036
+ [
1037
+ 287454020,
1038
+ 4294967295,
1039
+ 0
1040
+ ]
1041
+ ]
1042
+ }
1043
+ },
1044
+ {
1045
+ "rust": {
1046
+ "calls": [
1047
+ {
1048
+ "op": "time"
1049
+ }
1050
+ ],
1051
+ "checksum": 5086403093565816865,
1052
+ "count": 3,
1053
+ "selected": [
1054
+ [
1055
+ 287454020,
1056
+ 4294967295,
1057
+ 0
1058
+ ],
1059
+ [
1060
+ 287454020,
1061
+ 4294967295,
1062
+ 4294967294
1063
+ ],
1064
+ [
1065
+ 287454020,
1066
+ 3,
1067
+ 4294967295
1068
+ ],
1069
+ [
1070
+ 287454020,
1071
+ 4294967295,
1072
+ 0
1073
+ ],
1074
+ [
1075
+ 287454020,
1076
+ 5,
1077
+ 4294967295
1078
+ ],
1079
+ [
1080
+ 287454020,
1081
+ 4294967295,
1082
+ 2147483648
1083
+ ],
1084
+ [
1085
+ 287454020,
1086
+ 4294967295,
1087
+ 60
1088
+ ],
1089
+ [
1090
+ 287454020,
1091
+ 4294967295,
1092
+ 0
1093
+ ]
1094
+ ]
1095
+ },
1096
+ "source": {
1097
+ "calls": [
1098
+ {
1099
+ "op": "time"
1100
+ }
1101
+ ],
1102
+ "checksum": 5086403093565816865,
1103
+ "count": 3,
1104
+ "selected": [
1105
+ [
1106
+ 287454020,
1107
+ 4294967295,
1108
+ 0
1109
+ ],
1110
+ [
1111
+ 287454020,
1112
+ 4294967295,
1113
+ 4294967294
1114
+ ],
1115
+ [
1116
+ 287454020,
1117
+ 3,
1118
+ 4294967295
1119
+ ],
1120
+ [
1121
+ 287454020,
1122
+ 4294967295,
1123
+ 0
1124
+ ],
1125
+ [
1126
+ 287454020,
1127
+ 5,
1128
+ 4294967295
1129
+ ],
1130
+ [
1131
+ 287454020,
1132
+ 4294967295,
1133
+ 2147483648
1134
+ ],
1135
+ [
1136
+ 287454020,
1137
+ 4294967295,
1138
+ 60
1139
+ ],
1140
+ [
1141
+ 287454020,
1142
+ 4294967295,
1143
+ 0
1144
+ ]
1145
+ ]
1146
+ }
1147
+ },
1148
+ {
1149
+ "rust": {
1150
+ "calls": [
1151
+ {
1152
+ "op": "time"
1153
+ }
1154
+ ],
1155
+ "checksum": 5086403093565816865,
1156
+ "count": 4096,
1157
+ "selected": [
1158
+ [
1159
+ 287454020,
1160
+ 4294967295,
1161
+ 0
1162
+ ],
1163
+ [
1164
+ 287454020,
1165
+ 4294967295,
1166
+ 4294967294
1167
+ ],
1168
+ [
1169
+ 287454020,
1170
+ 3,
1171
+ 4294967295
1172
+ ],
1173
+ [
1174
+ 287454020,
1175
+ 4294967295,
1176
+ 0
1177
+ ],
1178
+ [
1179
+ 287454020,
1180
+ 5,
1181
+ 4294967295
1182
+ ],
1183
+ [
1184
+ 287454020,
1185
+ 4294967295,
1186
+ 2147483648
1187
+ ],
1188
+ [
1189
+ 287454020,
1190
+ 4294967295,
1191
+ 60
1192
+ ],
1193
+ [
1194
+ 287454020,
1195
+ 4294967295,
1196
+ 0
1197
+ ]
1198
+ ]
1199
+ },
1200
+ "source": {
1201
+ "calls": [
1202
+ {
1203
+ "op": "time"
1204
+ }
1205
+ ],
1206
+ "checksum": 5086403093565816865,
1207
+ "count": 4096,
1208
+ "selected": [
1209
+ [
1210
+ 287454020,
1211
+ 4294967295,
1212
+ 0
1213
+ ],
1214
+ [
1215
+ 287454020,
1216
+ 4294967295,
1217
+ 4294967294
1218
+ ],
1219
+ [
1220
+ 287454020,
1221
+ 3,
1222
+ 4294967295
1223
+ ],
1224
+ [
1225
+ 287454020,
1226
+ 4294967295,
1227
+ 0
1228
+ ],
1229
+ [
1230
+ 287454020,
1231
+ 5,
1232
+ 4294967295
1233
+ ],
1234
+ [
1235
+ 287454020,
1236
+ 4294967295,
1237
+ 2147483648
1238
+ ],
1239
+ [
1240
+ 287454020,
1241
+ 4294967295,
1242
+ 60
1243
+ ],
1244
+ [
1245
+ 287454020,
1246
+ 4294967295,
1247
+ 0
1248
+ ]
1249
+ ]
1250
+ }
1251
+ }
1252
+ ],
1253
+ "source_report": "docs/research/qvm-filter-expiry.json",
1254
+ "source_report_sha256": "665ea63e46ad5c7211b760dbae3aeb47837327b8ac93bf967d6001e4064fb723"
1255
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 198,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
 
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
+ "rust_unit_tests": 200,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
scripts/analyze_rust_filter_expiry.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compare recovered Rust policy with original QVM fixtures."""
2
+ import hashlib,json,os,subprocess
3
+ from pathlib import Path
4
+ from analyze_qvm import write_json
5
+ from rust_lifecycle_support import result
6
+
7
+ def main():
8
+ subprocess.run(['cargo','build','--offline','--package','urt-gameplay','--bin','urt-filter-loading'],check=True,capture_output=True)
9
+ binary=Path(os.environ.get('CARGO_TARGET_DIR','target'))/'debug'/'urt-filter-loading'
10
+ path=Path('docs/research/qvm-filter-expiry.json');data=path.read_bytes();probes=[]
11
+ for p in json.loads(data)['probes']:
12
+ probes.append(dict(source={k:p[k] for k in ['calls', 'count', 'selected', 'checksum']},rust=result(binary,'expiry',encode(p['input']))))
13
+ write_json(Path('docs/research/rust-filter-expiry.json'),dict(source_report=str(path),source_report_sha256=hashlib.sha256(data).hexdigest(),probes=probes,limits='Finite source/Rust contract parity; native time/file/network replies remain supplied or captured.'))
14
+
15
+ def encode(a):return [a['now'],a['count']]
16
+ if __name__=='__main__':main()
scripts/test_rust_filter_expiry.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib,json,unittest
2
+ from pathlib import Path
3
+ class PortTests(unittest.TestCase):
4
+ def test_original_parity(self):
5
+ r=json.loads(Path('docs/research/rust-filter-expiry.json').read_text());self.assertGreaterEqual(len(r['probes']),12)
6
+ for p in r['probes']:self.assertEqual(p['source'],p['rust'])
7
+ def test_identity(self):
8
+ r=json.loads(Path('docs/research/rust-filter-expiry.json').read_text());self.assertEqual(hashlib.sha256(Path(r['source_report']).read_bytes()).hexdigest(),r['source_report_sha256'])
9
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -3228,3 +3228,19 @@ report scripts/analyze_qvm_filter_expiry.py docs/research/qvm-filter-expiry.json
3228
  edge docs/research/qvm-filter-expiry.json scripts/test_qvm_filter_expiry.py
3229
  group qvm-filter-expiry scripts/analyze_qvm_filter_expiry.py
3230
  edge scripts/analyze_qvm_filter_expiry.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3228
  edge docs/research/qvm-filter-expiry.json scripts/test_qvm_filter_expiry.py
3229
  group qvm-filter-expiry scripts/analyze_qvm_filter_expiry.py
3230
  edge scripts/analyze_qvm_filter_expiry.py scripts/analyze_qvm_resumer_audit.py
3231
+ report scripts/analyze_rust_filter_expiry.py docs/research/rust-filter-expiry.json
3232
+ edge docs/research/rust-filter-expiry.json scripts/test_rust_filter_expiry.py
3233
+ group rust-filter-expiry scripts/analyze_rust_filter_expiry.py
3234
+ edge scripts/analyze_rust_filter_expiry.py scripts/analyze_qvm_resumer_audit.py
3235
+ edge Cargo.toml scripts/analyze_rust_filter_expiry.py
3236
+ edge Cargo.lock scripts/analyze_rust_filter_expiry.py
3237
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_filter_expiry.py
3238
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_filter_expiry.py
3239
+ edge crates/urt-gameplay/src/filter_loading.rs scripts/analyze_rust_filter_expiry.py
3240
+ edge crates/urt-gameplay/src/filter_lifecycle.rs scripts/analyze_rust_filter_expiry.py
3241
+ edge crates/urt-gameplay/src/native_policy.rs scripts/analyze_rust_filter_expiry.py
3242
+ edge crates/urt-gameplay/src/bin/urt-filter-loading.rs scripts/analyze_rust_filter_expiry.py
3243
+ edge crates/urt-gameplay/src/qvm_format.rs scripts/analyze_rust_filter_expiry.py
3244
+ edge docs/research/qvm-filter-expiry.json scripts/analyze_rust_filter_expiry.py
3245
+ group rust-filter-expiry scripts/analyze_rust_health_impulse.py
3246
+ group gameplay scripts/analyze_rust_filter_expiry.py