nmarshall commited on
Commit
247470e
·
1 Parent(s): 1a02853

gameplay: port assistance cancellation policy

Browse files
crates/urt-gameplay/src/assistance.rs CHANGED
@@ -88,3 +88,69 @@ mod acquire_tests {
88
  assert_eq!(s, old);
89
  }
90
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  assert_eq!(s, old);
89
  }
90
  }
91
+
92
+ /// Original153284/153346 cancellation, once far/unprotected routing is known.
93
+ pub fn cancel_assistance(
94
+ state: &mut HelperState,
95
+ slot: i32,
96
+ target: usize,
97
+ ) -> Result<Vec<AssistEffect>, Error> {
98
+ indices(slot, target)?;
99
+ if state.flags & 8192 == 0 || state.active == 0 || state.target != Some(target) {
100
+ return Ok(vec![]);
101
+ }
102
+ state.flags &= !8192;
103
+ state.active = 0;
104
+ state.target = None;
105
+ Ok(vec![AssistEffect::Publish {
106
+ slot,
107
+ event: 105,
108
+ param: u32::MAX,
109
+ }])
110
+ }
111
+ #[cfg(test)]
112
+ mod cancel_tests {
113
+ use super::*;
114
+ #[test]
115
+ fn cancellation_preserves_clock_and_is_idempotent() {
116
+ let mut s = HelperState {
117
+ flags: 0x80002002,
118
+ active: 2,
119
+ target: Some(3),
120
+ last: u32::MAX,
121
+ };
122
+ let e = cancel_assistance(&mut s, 2, 3).unwrap();
123
+ assert_eq!(
124
+ s,
125
+ HelperState {
126
+ flags: 0x80000002,
127
+ active: 0,
128
+ target: None,
129
+ last: u32::MAX
130
+ }
131
+ );
132
+ assert_eq!(
133
+ e,
134
+ vec![AssistEffect::Publish {
135
+ slot: 2,
136
+ event: 105,
137
+ param: u32::MAX
138
+ }]
139
+ );
140
+ assert!(cancel_assistance(&mut s, 2, 3).unwrap().is_empty());
141
+ }
142
+ #[test]
143
+ fn unrelated_target_and_invalid_slot_preserve_state() {
144
+ let mut s = HelperState {
145
+ flags: 8192,
146
+ active: 1,
147
+ target: Some(0),
148
+ last: 7,
149
+ };
150
+ let old = s;
151
+ assert!(cancel_assistance(&mut s, 2, 3).unwrap().is_empty());
152
+ assert_eq!(s, old);
153
+ assert!(cancel_assistance(&mut s, 64, 0).is_err());
154
+ assert_eq!(s, old);
155
+ }
156
+ }
crates/urt-gameplay/src/bin/urt-assistance.rs CHANGED
@@ -73,6 +73,12 @@ fn main() {
73
  let e = acquire_assistance(&mut s, 2, 3, 0x87654321, w[3]).unwrap();
74
  println!("{{{}}}", fields(s, &e));
75
  }
 
 
 
 
 
 
76
  _ => panic!("unknown policy"),
77
  }
78
  }
 
73
  let e = acquire_assistance(&mut s, 2, 3, 0x87654321, w[3]).unwrap();
74
  println!("{{{}}}", fields(s, &e));
75
  }
76
+ "cancel" => {
77
+ assert_eq!(w.len(), 6);
78
+ let mut s = helper(&w);
79
+ let e = cancel_assistance(&mut s, 2, 3).unwrap();
80
+ println!("{{{}}}", fields(s, &e));
81
+ }
82
  _ => panic!("unknown policy"),
83
  }
84
  }
docs/FINDINGS.md CHANGED
@@ -1949,3 +1949,5 @@ RE-1004: Thirty-six original-QVM cases recover assistance acquisition after near
1949
  RE-1005: Rust ports the conditional assistance ownership lock across36 source cases. Typed target indices preserve stale-state behavior, raw flag bits and wrapped clocks. Event104 precedes the original source log; both remain plans. Unit tests cover locked switching, inactive stale-target replacement, event ordering and atomic invalid-target rejection. Caller admission and proximity selection remain separate. [Evidence](research/RUST_ASSIST_ACQUIRE.md).
1950
 
1951
  RE-1006: Seventy-two source cases recover both cancellation branches. Only a helper with mask8192, nonzero active state and matching target loses assistance: mask8192 clears, active becomes0 and target becomes null. Clock6328 and unrelated bits survive. Both far and no-longer-protected paths request event105 with parameter0xffffffff; unmatched or incomplete ownership is untouched. Native event publication remains captured. [Evidence](research/QVM_ASSIST_CANCEL.md).
 
 
 
1949
  RE-1005: Rust ports the conditional assistance ownership lock across36 source cases. Typed target indices preserve stale-state behavior, raw flag bits and wrapped clocks. Event104 precedes the original source log; both remain plans. Unit tests cover locked switching, inactive stale-target replacement, event ordering and atomic invalid-target rejection. Caller admission and proximity selection remain separate. [Evidence](research/RUST_ASSIST_ACQUIRE.md).
1950
 
1951
  RE-1006: Seventy-two source cases recover both cancellation branches. Only a helper with mask8192, nonzero active state and matching target loses assistance: mask8192 clears, active becomes0 and target becomes null. Clock6328 and unrelated bits survive. Both far and no-longer-protected paths request event105 with parameter0xffffffff; unmatched or incomplete ownership is untouched. Native event publication remains captured. [Evidence](research/QVM_ASSIST_CANCEL.md).
1952
+
1953
+ RE-1007: Rust matches both original cancellation branches across72 source cases. Matching flagged active ownership clears only assistance state and emits event105; repeated cancellation is silent. Clocks and high bits survive, mismatched targets remain intact, and invalid indices reject before mutation. Native publication remains an explicit effect plan. [Evidence](research/RUST_ASSIST_CANCEL.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -2007,3 +2007,5 @@ RE-974–983 completed routing, command rewrite, inactivity, movement-parameter
2007
  - [x] RE-1005 Port assistance acquisition and ownership guard ([evidence](research/RUST_ASSIST_ACQUIRE.md)).
2008
 
2009
  - [x] RE-1006 Recover far and unprotected assistance cancellation ([evidence](research/QVM_ASSIST_CANCEL.md)).
 
 
 
2007
  - [x] RE-1005 Port assistance acquisition and ownership guard ([evidence](research/RUST_ASSIST_ACQUIRE.md)).
2008
 
2009
  - [x] RE-1006 Recover far and unprotected assistance cancellation ([evidence](research/QVM_ASSIST_CANCEL.md)).
2010
+
2011
+ - [x] RE-1007 Port conditional assistance cancellation ([evidence](research/RUST_ASSIST_CANCEL.md)).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2699,3 +2699,7 @@ Rust ports the conditional assistance ownership lock across36 source cases. Type
2699
  ## 2026-10-29 — RE-1006 Recover far and unprotected assistance cancellation
2700
 
2701
  Seventy-two source cases recover both cancellation branches. Only a helper with mask8192, nonzero active state and matching target loses assistance: mask8192 clears, active becomes0 and target becomes null. Clock6328 and unrelated bits survive. Both far and no-longer-protected paths request event105 with parameter0xffffffff; unmatched or incomplete ownership is untouched. Native event publication remains captured. Focused `cargo xtask test-group qvm-assist-cancel` passes with deterministic report regeneration and selected regressions. Full suite deferred to task ten. Original assets unchanged; Python uses the flake-declared Nix runtime.
 
 
 
 
 
2699
  ## 2026-10-29 — RE-1006 Recover far and unprotected assistance cancellation
2700
 
2701
  Seventy-two source cases recover both cancellation branches. Only a helper with mask8192, nonzero active state and matching target loses assistance: mask8192 clears, active becomes0 and target becomes null. Clock6328 and unrelated bits survive. Both far and no-longer-protected paths request event105 with parameter0xffffffff; unmatched or incomplete ownership is untouched. Native event publication remains captured. Focused `cargo xtask test-group qvm-assist-cancel` passes with deterministic report regeneration and selected regressions. Full suite deferred to task ten. Original assets unchanged; Python uses the flake-declared Nix runtime.
2702
+
2703
+ ## 2026-10-29 — RE-1007 Port conditional assistance cancellation
2704
+
2705
+ Rust matches both original cancellation branches across72 source cases. Matching flagged active ownership clears only assistance state and emits event105; repeated cancellation is silent. Clocks and high bits survive, mismatched targets remain intact, and invalid indices reject before mutation. Native publication remains an explicit effect plan. Focused `cargo xtask test-group rust-assist-cancel` passes with deterministic report regeneration and selected regressions. Full suite deferred to task ten. Original assets unchanged; Python uses the flake-declared Nix runtime.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -2044,3 +2044,5 @@ RE-974–983 recover routing, command rewriting, inactivity and composed setup t
2044
  - [x] RE-1005 Port assistance acquisition and ownership guard ([evidence](research/RUST_ASSIST_ACQUIRE.md)).
2045
 
2046
  - [x] RE-1006 Recover far and unprotected assistance cancellation ([evidence](research/QVM_ASSIST_CANCEL.md)).
 
 
 
2044
  - [x] RE-1005 Port assistance acquisition and ownership guard ([evidence](research/RUST_ASSIST_ACQUIRE.md)).
2045
 
2046
  - [x] RE-1006 Recover far and unprotected assistance cancellation ([evidence](research/QVM_ASSIST_CANCEL.md)).
2047
+
2048
+ - [x] RE-1007 Port conditional assistance cancellation ([evidence](research/RUST_ASSIST_CANCEL.md)).
docs/research/README.md CHANGED
@@ -1577,3 +1577,5 @@ The extension collector adds five focused tests for native tail calls, command-r
1577
  - [RE-1005: Port assistance acquisition and ownership guard](RUST_ASSIST_ACQUIRE.md).
1578
 
1579
  - [RE-1006: Recover far and unprotected assistance cancellation](QVM_ASSIST_CANCEL.md).
 
 
 
1577
  - [RE-1005: Port assistance acquisition and ownership guard](RUST_ASSIST_ACQUIRE.md).
1578
 
1579
  - [RE-1006: Recover far and unprotected assistance cancellation](QVM_ASSIST_CANCEL.md).
1580
+
1581
+ - [RE-1007: Port conditional assistance cancellation](RUST_ASSIST_CANCEL.md).
docs/research/RUST_ASSIST_CANCEL.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Port conditional assistance cancellation
2
+
3
+ RE-1007. Focused validation: `cargo xtask test-group rust-assist-cancel`. [Machine report](rust-assist-cancel.json).
4
+
5
+ Rust matches both original cancellation branches across72 source cases. Matching flagged active ownership clears only assistance state and emits event105; repeated cancellation is silent. Clocks and high bits survive, mismatched targets remain intact, and invalid indices reject before mutation. Native publication remains an explicit effect plan.
docs/research/rust-assist-cancel.json ADDED
@@ -0,0 +1,1271 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Finite source/Rust contract parity; native time/file/network replies remain supplied or captured.",
3
+ "probes": [
4
+ {
5
+ "rust": {
6
+ "active": 0,
7
+ "events": [],
8
+ "flags": 0,
9
+ "last": 1234,
10
+ "target": null
11
+ },
12
+ "source": {
13
+ "active": 0,
14
+ "events": [],
15
+ "flags": 0,
16
+ "last": 1234,
17
+ "target": null
18
+ }
19
+ },
20
+ {
21
+ "rust": {
22
+ "active": 0,
23
+ "events": [],
24
+ "flags": 0,
25
+ "last": 1234,
26
+ "target": null
27
+ },
28
+ "source": {
29
+ "active": 0,
30
+ "events": [],
31
+ "flags": 0,
32
+ "last": 1234,
33
+ "target": null
34
+ }
35
+ },
36
+ {
37
+ "rust": {
38
+ "active": 0,
39
+ "events": [],
40
+ "flags": 0,
41
+ "last": 1234,
42
+ "target": null
43
+ },
44
+ "source": {
45
+ "active": 0,
46
+ "events": [],
47
+ "flags": 0,
48
+ "last": 1234,
49
+ "target": null
50
+ }
51
+ },
52
+ {
53
+ "rust": {
54
+ "active": 0,
55
+ "events": [],
56
+ "flags": 0,
57
+ "last": 1234,
58
+ "target": null
59
+ },
60
+ "source": {
61
+ "active": 0,
62
+ "events": [],
63
+ "flags": 0,
64
+ "last": 1234,
65
+ "target": null
66
+ }
67
+ },
68
+ {
69
+ "rust": {
70
+ "active": 0,
71
+ "events": [],
72
+ "flags": 0,
73
+ "last": 1234,
74
+ "target": 0
75
+ },
76
+ "source": {
77
+ "active": 0,
78
+ "events": [],
79
+ "flags": 0,
80
+ "last": 1234,
81
+ "target": 0
82
+ }
83
+ },
84
+ {
85
+ "rust": {
86
+ "active": 0,
87
+ "events": [],
88
+ "flags": 0,
89
+ "last": 1234,
90
+ "target": 0
91
+ },
92
+ "source": {
93
+ "active": 0,
94
+ "events": [],
95
+ "flags": 0,
96
+ "last": 1234,
97
+ "target": 0
98
+ }
99
+ },
100
+ {
101
+ "rust": {
102
+ "active": 0,
103
+ "events": [],
104
+ "flags": 0,
105
+ "last": 1234,
106
+ "target": 0
107
+ },
108
+ "source": {
109
+ "active": 0,
110
+ "events": [],
111
+ "flags": 0,
112
+ "last": 1234,
113
+ "target": 0
114
+ }
115
+ },
116
+ {
117
+ "rust": {
118
+ "active": 0,
119
+ "events": [],
120
+ "flags": 0,
121
+ "last": 1234,
122
+ "target": 0
123
+ },
124
+ "source": {
125
+ "active": 0,
126
+ "events": [],
127
+ "flags": 0,
128
+ "last": 1234,
129
+ "target": 0
130
+ }
131
+ },
132
+ {
133
+ "rust": {
134
+ "active": 0,
135
+ "events": [],
136
+ "flags": 0,
137
+ "last": 1234,
138
+ "target": 3
139
+ },
140
+ "source": {
141
+ "active": 0,
142
+ "events": [],
143
+ "flags": 0,
144
+ "last": 1234,
145
+ "target": 3
146
+ }
147
+ },
148
+ {
149
+ "rust": {
150
+ "active": 0,
151
+ "events": [],
152
+ "flags": 0,
153
+ "last": 1234,
154
+ "target": 3
155
+ },
156
+ "source": {
157
+ "active": 0,
158
+ "events": [],
159
+ "flags": 0,
160
+ "last": 1234,
161
+ "target": 3
162
+ }
163
+ },
164
+ {
165
+ "rust": {
166
+ "active": 0,
167
+ "events": [],
168
+ "flags": 0,
169
+ "last": 1234,
170
+ "target": 3
171
+ },
172
+ "source": {
173
+ "active": 0,
174
+ "events": [],
175
+ "flags": 0,
176
+ "last": 1234,
177
+ "target": 3
178
+ }
179
+ },
180
+ {
181
+ "rust": {
182
+ "active": 0,
183
+ "events": [],
184
+ "flags": 0,
185
+ "last": 1234,
186
+ "target": 3
187
+ },
188
+ "source": {
189
+ "active": 0,
190
+ "events": [],
191
+ "flags": 0,
192
+ "last": 1234,
193
+ "target": 3
194
+ }
195
+ },
196
+ {
197
+ "rust": {
198
+ "active": 1,
199
+ "events": [],
200
+ "flags": 0,
201
+ "last": 1234,
202
+ "target": null
203
+ },
204
+ "source": {
205
+ "active": 1,
206
+ "events": [],
207
+ "flags": 0,
208
+ "last": 1234,
209
+ "target": null
210
+ }
211
+ },
212
+ {
213
+ "rust": {
214
+ "active": 1,
215
+ "events": [],
216
+ "flags": 0,
217
+ "last": 1234,
218
+ "target": null
219
+ },
220
+ "source": {
221
+ "active": 1,
222
+ "events": [],
223
+ "flags": 0,
224
+ "last": 1234,
225
+ "target": null
226
+ }
227
+ },
228
+ {
229
+ "rust": {
230
+ "active": 1,
231
+ "events": [],
232
+ "flags": 0,
233
+ "last": 1234,
234
+ "target": null
235
+ },
236
+ "source": {
237
+ "active": 1,
238
+ "events": [],
239
+ "flags": 0,
240
+ "last": 1234,
241
+ "target": null
242
+ }
243
+ },
244
+ {
245
+ "rust": {
246
+ "active": 1,
247
+ "events": [],
248
+ "flags": 0,
249
+ "last": 1234,
250
+ "target": null
251
+ },
252
+ "source": {
253
+ "active": 1,
254
+ "events": [],
255
+ "flags": 0,
256
+ "last": 1234,
257
+ "target": null
258
+ }
259
+ },
260
+ {
261
+ "rust": {
262
+ "active": 1,
263
+ "events": [],
264
+ "flags": 0,
265
+ "last": 1234,
266
+ "target": 0
267
+ },
268
+ "source": {
269
+ "active": 1,
270
+ "events": [],
271
+ "flags": 0,
272
+ "last": 1234,
273
+ "target": 0
274
+ }
275
+ },
276
+ {
277
+ "rust": {
278
+ "active": 1,
279
+ "events": [],
280
+ "flags": 0,
281
+ "last": 1234,
282
+ "target": 0
283
+ },
284
+ "source": {
285
+ "active": 1,
286
+ "events": [],
287
+ "flags": 0,
288
+ "last": 1234,
289
+ "target": 0
290
+ }
291
+ },
292
+ {
293
+ "rust": {
294
+ "active": 1,
295
+ "events": [],
296
+ "flags": 0,
297
+ "last": 1234,
298
+ "target": 0
299
+ },
300
+ "source": {
301
+ "active": 1,
302
+ "events": [],
303
+ "flags": 0,
304
+ "last": 1234,
305
+ "target": 0
306
+ }
307
+ },
308
+ {
309
+ "rust": {
310
+ "active": 1,
311
+ "events": [],
312
+ "flags": 0,
313
+ "last": 1234,
314
+ "target": 0
315
+ },
316
+ "source": {
317
+ "active": 1,
318
+ "events": [],
319
+ "flags": 0,
320
+ "last": 1234,
321
+ "target": 0
322
+ }
323
+ },
324
+ {
325
+ "rust": {
326
+ "active": 1,
327
+ "events": [],
328
+ "flags": 0,
329
+ "last": 1234,
330
+ "target": 3
331
+ },
332
+ "source": {
333
+ "active": 1,
334
+ "events": [],
335
+ "flags": 0,
336
+ "last": 1234,
337
+ "target": 3
338
+ }
339
+ },
340
+ {
341
+ "rust": {
342
+ "active": 1,
343
+ "events": [],
344
+ "flags": 0,
345
+ "last": 1234,
346
+ "target": 3
347
+ },
348
+ "source": {
349
+ "active": 1,
350
+ "events": [],
351
+ "flags": 0,
352
+ "last": 1234,
353
+ "target": 3
354
+ }
355
+ },
356
+ {
357
+ "rust": {
358
+ "active": 1,
359
+ "events": [],
360
+ "flags": 0,
361
+ "last": 1234,
362
+ "target": 3
363
+ },
364
+ "source": {
365
+ "active": 1,
366
+ "events": [],
367
+ "flags": 0,
368
+ "last": 1234,
369
+ "target": 3
370
+ }
371
+ },
372
+ {
373
+ "rust": {
374
+ "active": 1,
375
+ "events": [],
376
+ "flags": 0,
377
+ "last": 1234,
378
+ "target": 3
379
+ },
380
+ "source": {
381
+ "active": 1,
382
+ "events": [],
383
+ "flags": 0,
384
+ "last": 1234,
385
+ "target": 3
386
+ }
387
+ },
388
+ {
389
+ "rust": {
390
+ "active": 0,
391
+ "events": [],
392
+ "flags": 8192,
393
+ "last": 1234,
394
+ "target": null
395
+ },
396
+ "source": {
397
+ "active": 0,
398
+ "events": [],
399
+ "flags": 8192,
400
+ "last": 1234,
401
+ "target": null
402
+ }
403
+ },
404
+ {
405
+ "rust": {
406
+ "active": 0,
407
+ "events": [],
408
+ "flags": 8192,
409
+ "last": 1234,
410
+ "target": null
411
+ },
412
+ "source": {
413
+ "active": 0,
414
+ "events": [],
415
+ "flags": 8192,
416
+ "last": 1234,
417
+ "target": null
418
+ }
419
+ },
420
+ {
421
+ "rust": {
422
+ "active": 0,
423
+ "events": [],
424
+ "flags": 8192,
425
+ "last": 1234,
426
+ "target": null
427
+ },
428
+ "source": {
429
+ "active": 0,
430
+ "events": [],
431
+ "flags": 8192,
432
+ "last": 1234,
433
+ "target": null
434
+ }
435
+ },
436
+ {
437
+ "rust": {
438
+ "active": 0,
439
+ "events": [],
440
+ "flags": 8192,
441
+ "last": 1234,
442
+ "target": null
443
+ },
444
+ "source": {
445
+ "active": 0,
446
+ "events": [],
447
+ "flags": 8192,
448
+ "last": 1234,
449
+ "target": null
450
+ }
451
+ },
452
+ {
453
+ "rust": {
454
+ "active": 0,
455
+ "events": [],
456
+ "flags": 8192,
457
+ "last": 1234,
458
+ "target": 0
459
+ },
460
+ "source": {
461
+ "active": 0,
462
+ "events": [],
463
+ "flags": 8192,
464
+ "last": 1234,
465
+ "target": 0
466
+ }
467
+ },
468
+ {
469
+ "rust": {
470
+ "active": 0,
471
+ "events": [],
472
+ "flags": 8192,
473
+ "last": 1234,
474
+ "target": 0
475
+ },
476
+ "source": {
477
+ "active": 0,
478
+ "events": [],
479
+ "flags": 8192,
480
+ "last": 1234,
481
+ "target": 0
482
+ }
483
+ },
484
+ {
485
+ "rust": {
486
+ "active": 0,
487
+ "events": [],
488
+ "flags": 8192,
489
+ "last": 1234,
490
+ "target": 0
491
+ },
492
+ "source": {
493
+ "active": 0,
494
+ "events": [],
495
+ "flags": 8192,
496
+ "last": 1234,
497
+ "target": 0
498
+ }
499
+ },
500
+ {
501
+ "rust": {
502
+ "active": 0,
503
+ "events": [],
504
+ "flags": 8192,
505
+ "last": 1234,
506
+ "target": 0
507
+ },
508
+ "source": {
509
+ "active": 0,
510
+ "events": [],
511
+ "flags": 8192,
512
+ "last": 1234,
513
+ "target": 0
514
+ }
515
+ },
516
+ {
517
+ "rust": {
518
+ "active": 0,
519
+ "events": [],
520
+ "flags": 8192,
521
+ "last": 1234,
522
+ "target": 3
523
+ },
524
+ "source": {
525
+ "active": 0,
526
+ "events": [],
527
+ "flags": 8192,
528
+ "last": 1234,
529
+ "target": 3
530
+ }
531
+ },
532
+ {
533
+ "rust": {
534
+ "active": 0,
535
+ "events": [],
536
+ "flags": 8192,
537
+ "last": 1234,
538
+ "target": 3
539
+ },
540
+ "source": {
541
+ "active": 0,
542
+ "events": [],
543
+ "flags": 8192,
544
+ "last": 1234,
545
+ "target": 3
546
+ }
547
+ },
548
+ {
549
+ "rust": {
550
+ "active": 0,
551
+ "events": [],
552
+ "flags": 8192,
553
+ "last": 1234,
554
+ "target": 3
555
+ },
556
+ "source": {
557
+ "active": 0,
558
+ "events": [],
559
+ "flags": 8192,
560
+ "last": 1234,
561
+ "target": 3
562
+ }
563
+ },
564
+ {
565
+ "rust": {
566
+ "active": 0,
567
+ "events": [],
568
+ "flags": 8192,
569
+ "last": 1234,
570
+ "target": 3
571
+ },
572
+ "source": {
573
+ "active": 0,
574
+ "events": [],
575
+ "flags": 8192,
576
+ "last": 1234,
577
+ "target": 3
578
+ }
579
+ },
580
+ {
581
+ "rust": {
582
+ "active": 1,
583
+ "events": [],
584
+ "flags": 8192,
585
+ "last": 1234,
586
+ "target": null
587
+ },
588
+ "source": {
589
+ "active": 1,
590
+ "events": [],
591
+ "flags": 8192,
592
+ "last": 1234,
593
+ "target": null
594
+ }
595
+ },
596
+ {
597
+ "rust": {
598
+ "active": 1,
599
+ "events": [],
600
+ "flags": 8192,
601
+ "last": 1234,
602
+ "target": null
603
+ },
604
+ "source": {
605
+ "active": 1,
606
+ "events": [],
607
+ "flags": 8192,
608
+ "last": 1234,
609
+ "target": null
610
+ }
611
+ },
612
+ {
613
+ "rust": {
614
+ "active": 1,
615
+ "events": [],
616
+ "flags": 8192,
617
+ "last": 1234,
618
+ "target": null
619
+ },
620
+ "source": {
621
+ "active": 1,
622
+ "events": [],
623
+ "flags": 8192,
624
+ "last": 1234,
625
+ "target": null
626
+ }
627
+ },
628
+ {
629
+ "rust": {
630
+ "active": 1,
631
+ "events": [],
632
+ "flags": 8192,
633
+ "last": 1234,
634
+ "target": null
635
+ },
636
+ "source": {
637
+ "active": 1,
638
+ "events": [],
639
+ "flags": 8192,
640
+ "last": 1234,
641
+ "target": null
642
+ }
643
+ },
644
+ {
645
+ "rust": {
646
+ "active": 1,
647
+ "events": [],
648
+ "flags": 8192,
649
+ "last": 1234,
650
+ "target": 0
651
+ },
652
+ "source": {
653
+ "active": 1,
654
+ "events": [],
655
+ "flags": 8192,
656
+ "last": 1234,
657
+ "target": 0
658
+ }
659
+ },
660
+ {
661
+ "rust": {
662
+ "active": 1,
663
+ "events": [],
664
+ "flags": 8192,
665
+ "last": 1234,
666
+ "target": 0
667
+ },
668
+ "source": {
669
+ "active": 1,
670
+ "events": [],
671
+ "flags": 8192,
672
+ "last": 1234,
673
+ "target": 0
674
+ }
675
+ },
676
+ {
677
+ "rust": {
678
+ "active": 1,
679
+ "events": [],
680
+ "flags": 8192,
681
+ "last": 1234,
682
+ "target": 0
683
+ },
684
+ "source": {
685
+ "active": 1,
686
+ "events": [],
687
+ "flags": 8192,
688
+ "last": 1234,
689
+ "target": 0
690
+ }
691
+ },
692
+ {
693
+ "rust": {
694
+ "active": 1,
695
+ "events": [],
696
+ "flags": 8192,
697
+ "last": 1234,
698
+ "target": 0
699
+ },
700
+ "source": {
701
+ "active": 1,
702
+ "events": [],
703
+ "flags": 8192,
704
+ "last": 1234,
705
+ "target": 0
706
+ }
707
+ },
708
+ {
709
+ "rust": {
710
+ "active": 0,
711
+ "events": [
712
+ {
713
+ "event": 105,
714
+ "op": "publish",
715
+ "param": 4294967295,
716
+ "slot": 2
717
+ }
718
+ ],
719
+ "flags": 0,
720
+ "last": 1234,
721
+ "target": null
722
+ },
723
+ "source": {
724
+ "active": 0,
725
+ "events": [
726
+ {
727
+ "event": 105,
728
+ "op": "publish",
729
+ "param": 4294967295,
730
+ "slot": 2
731
+ }
732
+ ],
733
+ "flags": 0,
734
+ "last": 1234,
735
+ "target": null
736
+ }
737
+ },
738
+ {
739
+ "rust": {
740
+ "active": 0,
741
+ "events": [
742
+ {
743
+ "event": 105,
744
+ "op": "publish",
745
+ "param": 4294967295,
746
+ "slot": 2
747
+ }
748
+ ],
749
+ "flags": 0,
750
+ "last": 1234,
751
+ "target": null
752
+ },
753
+ "source": {
754
+ "active": 0,
755
+ "events": [
756
+ {
757
+ "event": 105,
758
+ "op": "publish",
759
+ "param": 4294967295,
760
+ "slot": 2
761
+ }
762
+ ],
763
+ "flags": 0,
764
+ "last": 1234,
765
+ "target": null
766
+ }
767
+ },
768
+ {
769
+ "rust": {
770
+ "active": 0,
771
+ "events": [
772
+ {
773
+ "event": 105,
774
+ "op": "publish",
775
+ "param": 4294967295,
776
+ "slot": 2
777
+ }
778
+ ],
779
+ "flags": 0,
780
+ "last": 1234,
781
+ "target": null
782
+ },
783
+ "source": {
784
+ "active": 0,
785
+ "events": [
786
+ {
787
+ "event": 105,
788
+ "op": "publish",
789
+ "param": 4294967295,
790
+ "slot": 2
791
+ }
792
+ ],
793
+ "flags": 0,
794
+ "last": 1234,
795
+ "target": null
796
+ }
797
+ },
798
+ {
799
+ "rust": {
800
+ "active": 0,
801
+ "events": [
802
+ {
803
+ "event": 105,
804
+ "op": "publish",
805
+ "param": 4294967295,
806
+ "slot": 2
807
+ }
808
+ ],
809
+ "flags": 0,
810
+ "last": 1234,
811
+ "target": null
812
+ },
813
+ "source": {
814
+ "active": 0,
815
+ "events": [
816
+ {
817
+ "event": 105,
818
+ "op": "publish",
819
+ "param": 4294967295,
820
+ "slot": 2
821
+ }
822
+ ],
823
+ "flags": 0,
824
+ "last": 1234,
825
+ "target": null
826
+ }
827
+ },
828
+ {
829
+ "rust": {
830
+ "active": 0,
831
+ "events": [],
832
+ "flags": 2147491842,
833
+ "last": 1234,
834
+ "target": null
835
+ },
836
+ "source": {
837
+ "active": 0,
838
+ "events": [],
839
+ "flags": 2147491842,
840
+ "last": 1234,
841
+ "target": null
842
+ }
843
+ },
844
+ {
845
+ "rust": {
846
+ "active": 0,
847
+ "events": [],
848
+ "flags": 2147491842,
849
+ "last": 1234,
850
+ "target": null
851
+ },
852
+ "source": {
853
+ "active": 0,
854
+ "events": [],
855
+ "flags": 2147491842,
856
+ "last": 1234,
857
+ "target": null
858
+ }
859
+ },
860
+ {
861
+ "rust": {
862
+ "active": 0,
863
+ "events": [],
864
+ "flags": 2147491842,
865
+ "last": 1234,
866
+ "target": null
867
+ },
868
+ "source": {
869
+ "active": 0,
870
+ "events": [],
871
+ "flags": 2147491842,
872
+ "last": 1234,
873
+ "target": null
874
+ }
875
+ },
876
+ {
877
+ "rust": {
878
+ "active": 0,
879
+ "events": [],
880
+ "flags": 2147491842,
881
+ "last": 1234,
882
+ "target": null
883
+ },
884
+ "source": {
885
+ "active": 0,
886
+ "events": [],
887
+ "flags": 2147491842,
888
+ "last": 1234,
889
+ "target": null
890
+ }
891
+ },
892
+ {
893
+ "rust": {
894
+ "active": 0,
895
+ "events": [],
896
+ "flags": 2147491842,
897
+ "last": 1234,
898
+ "target": 0
899
+ },
900
+ "source": {
901
+ "active": 0,
902
+ "events": [],
903
+ "flags": 2147491842,
904
+ "last": 1234,
905
+ "target": 0
906
+ }
907
+ },
908
+ {
909
+ "rust": {
910
+ "active": 0,
911
+ "events": [],
912
+ "flags": 2147491842,
913
+ "last": 1234,
914
+ "target": 0
915
+ },
916
+ "source": {
917
+ "active": 0,
918
+ "events": [],
919
+ "flags": 2147491842,
920
+ "last": 1234,
921
+ "target": 0
922
+ }
923
+ },
924
+ {
925
+ "rust": {
926
+ "active": 0,
927
+ "events": [],
928
+ "flags": 2147491842,
929
+ "last": 1234,
930
+ "target": 0
931
+ },
932
+ "source": {
933
+ "active": 0,
934
+ "events": [],
935
+ "flags": 2147491842,
936
+ "last": 1234,
937
+ "target": 0
938
+ }
939
+ },
940
+ {
941
+ "rust": {
942
+ "active": 0,
943
+ "events": [],
944
+ "flags": 2147491842,
945
+ "last": 1234,
946
+ "target": 0
947
+ },
948
+ "source": {
949
+ "active": 0,
950
+ "events": [],
951
+ "flags": 2147491842,
952
+ "last": 1234,
953
+ "target": 0
954
+ }
955
+ },
956
+ {
957
+ "rust": {
958
+ "active": 0,
959
+ "events": [],
960
+ "flags": 2147491842,
961
+ "last": 1234,
962
+ "target": 3
963
+ },
964
+ "source": {
965
+ "active": 0,
966
+ "events": [],
967
+ "flags": 2147491842,
968
+ "last": 1234,
969
+ "target": 3
970
+ }
971
+ },
972
+ {
973
+ "rust": {
974
+ "active": 0,
975
+ "events": [],
976
+ "flags": 2147491842,
977
+ "last": 1234,
978
+ "target": 3
979
+ },
980
+ "source": {
981
+ "active": 0,
982
+ "events": [],
983
+ "flags": 2147491842,
984
+ "last": 1234,
985
+ "target": 3
986
+ }
987
+ },
988
+ {
989
+ "rust": {
990
+ "active": 0,
991
+ "events": [],
992
+ "flags": 2147491842,
993
+ "last": 1234,
994
+ "target": 3
995
+ },
996
+ "source": {
997
+ "active": 0,
998
+ "events": [],
999
+ "flags": 2147491842,
1000
+ "last": 1234,
1001
+ "target": 3
1002
+ }
1003
+ },
1004
+ {
1005
+ "rust": {
1006
+ "active": 0,
1007
+ "events": [],
1008
+ "flags": 2147491842,
1009
+ "last": 1234,
1010
+ "target": 3
1011
+ },
1012
+ "source": {
1013
+ "active": 0,
1014
+ "events": [],
1015
+ "flags": 2147491842,
1016
+ "last": 1234,
1017
+ "target": 3
1018
+ }
1019
+ },
1020
+ {
1021
+ "rust": {
1022
+ "active": 1,
1023
+ "events": [],
1024
+ "flags": 2147491842,
1025
+ "last": 1234,
1026
+ "target": null
1027
+ },
1028
+ "source": {
1029
+ "active": 1,
1030
+ "events": [],
1031
+ "flags": 2147491842,
1032
+ "last": 1234,
1033
+ "target": null
1034
+ }
1035
+ },
1036
+ {
1037
+ "rust": {
1038
+ "active": 1,
1039
+ "events": [],
1040
+ "flags": 2147491842,
1041
+ "last": 1234,
1042
+ "target": null
1043
+ },
1044
+ "source": {
1045
+ "active": 1,
1046
+ "events": [],
1047
+ "flags": 2147491842,
1048
+ "last": 1234,
1049
+ "target": null
1050
+ }
1051
+ },
1052
+ {
1053
+ "rust": {
1054
+ "active": 1,
1055
+ "events": [],
1056
+ "flags": 2147491842,
1057
+ "last": 1234,
1058
+ "target": null
1059
+ },
1060
+ "source": {
1061
+ "active": 1,
1062
+ "events": [],
1063
+ "flags": 2147491842,
1064
+ "last": 1234,
1065
+ "target": null
1066
+ }
1067
+ },
1068
+ {
1069
+ "rust": {
1070
+ "active": 1,
1071
+ "events": [],
1072
+ "flags": 2147491842,
1073
+ "last": 1234,
1074
+ "target": null
1075
+ },
1076
+ "source": {
1077
+ "active": 1,
1078
+ "events": [],
1079
+ "flags": 2147491842,
1080
+ "last": 1234,
1081
+ "target": null
1082
+ }
1083
+ },
1084
+ {
1085
+ "rust": {
1086
+ "active": 1,
1087
+ "events": [],
1088
+ "flags": 2147491842,
1089
+ "last": 1234,
1090
+ "target": 0
1091
+ },
1092
+ "source": {
1093
+ "active": 1,
1094
+ "events": [],
1095
+ "flags": 2147491842,
1096
+ "last": 1234,
1097
+ "target": 0
1098
+ }
1099
+ },
1100
+ {
1101
+ "rust": {
1102
+ "active": 1,
1103
+ "events": [],
1104
+ "flags": 2147491842,
1105
+ "last": 1234,
1106
+ "target": 0
1107
+ },
1108
+ "source": {
1109
+ "active": 1,
1110
+ "events": [],
1111
+ "flags": 2147491842,
1112
+ "last": 1234,
1113
+ "target": 0
1114
+ }
1115
+ },
1116
+ {
1117
+ "rust": {
1118
+ "active": 1,
1119
+ "events": [],
1120
+ "flags": 2147491842,
1121
+ "last": 1234,
1122
+ "target": 0
1123
+ },
1124
+ "source": {
1125
+ "active": 1,
1126
+ "events": [],
1127
+ "flags": 2147491842,
1128
+ "last": 1234,
1129
+ "target": 0
1130
+ }
1131
+ },
1132
+ {
1133
+ "rust": {
1134
+ "active": 1,
1135
+ "events": [],
1136
+ "flags": 2147491842,
1137
+ "last": 1234,
1138
+ "target": 0
1139
+ },
1140
+ "source": {
1141
+ "active": 1,
1142
+ "events": [],
1143
+ "flags": 2147491842,
1144
+ "last": 1234,
1145
+ "target": 0
1146
+ }
1147
+ },
1148
+ {
1149
+ "rust": {
1150
+ "active": 0,
1151
+ "events": [
1152
+ {
1153
+ "event": 105,
1154
+ "op": "publish",
1155
+ "param": 4294967295,
1156
+ "slot": 2
1157
+ }
1158
+ ],
1159
+ "flags": 2147483650,
1160
+ "last": 1234,
1161
+ "target": null
1162
+ },
1163
+ "source": {
1164
+ "active": 0,
1165
+ "events": [
1166
+ {
1167
+ "event": 105,
1168
+ "op": "publish",
1169
+ "param": 4294967295,
1170
+ "slot": 2
1171
+ }
1172
+ ],
1173
+ "flags": 2147483650,
1174
+ "last": 1234,
1175
+ "target": null
1176
+ }
1177
+ },
1178
+ {
1179
+ "rust": {
1180
+ "active": 0,
1181
+ "events": [
1182
+ {
1183
+ "event": 105,
1184
+ "op": "publish",
1185
+ "param": 4294967295,
1186
+ "slot": 2
1187
+ }
1188
+ ],
1189
+ "flags": 2147483650,
1190
+ "last": 1234,
1191
+ "target": null
1192
+ },
1193
+ "source": {
1194
+ "active": 0,
1195
+ "events": [
1196
+ {
1197
+ "event": 105,
1198
+ "op": "publish",
1199
+ "param": 4294967295,
1200
+ "slot": 2
1201
+ }
1202
+ ],
1203
+ "flags": 2147483650,
1204
+ "last": 1234,
1205
+ "target": null
1206
+ }
1207
+ },
1208
+ {
1209
+ "rust": {
1210
+ "active": 0,
1211
+ "events": [
1212
+ {
1213
+ "event": 105,
1214
+ "op": "publish",
1215
+ "param": 4294967295,
1216
+ "slot": 2
1217
+ }
1218
+ ],
1219
+ "flags": 2147483650,
1220
+ "last": 1234,
1221
+ "target": null
1222
+ },
1223
+ "source": {
1224
+ "active": 0,
1225
+ "events": [
1226
+ {
1227
+ "event": 105,
1228
+ "op": "publish",
1229
+ "param": 4294967295,
1230
+ "slot": 2
1231
+ }
1232
+ ],
1233
+ "flags": 2147483650,
1234
+ "last": 1234,
1235
+ "target": null
1236
+ }
1237
+ },
1238
+ {
1239
+ "rust": {
1240
+ "active": 0,
1241
+ "events": [
1242
+ {
1243
+ "event": 105,
1244
+ "op": "publish",
1245
+ "param": 4294967295,
1246
+ "slot": 2
1247
+ }
1248
+ ],
1249
+ "flags": 2147483650,
1250
+ "last": 1234,
1251
+ "target": null
1252
+ },
1253
+ "source": {
1254
+ "active": 0,
1255
+ "events": [
1256
+ {
1257
+ "event": 105,
1258
+ "op": "publish",
1259
+ "param": 4294967295,
1260
+ "slot": 2
1261
+ }
1262
+ ],
1263
+ "flags": 2147483650,
1264
+ "last": 1234,
1265
+ "target": null
1266
+ }
1267
+ }
1268
+ ],
1269
+ "source_report": "docs/research/qvm-assist-cancel.json",
1270
+ "source_report_sha256": "8ddc14eace956d3976570cd611b3d4662706c6243a4919ae15d24cb6ec2805f3"
1271
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 261,
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": 263,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
scripts/analyze_rust_assist_cancel.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-assistance'],check=True,capture_output=True)
9
+ binary=Path(os.environ.get('CARGO_TARGET_DIR','target'))/'debug'/'urt-assistance'
10
+ path=Path('docs/research/qvm-assist-cancel.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 ['flags', 'active', 'target', 'last', 'events']},rust=result(binary,'cancel',encode(p['input']))))
13
+ write_json(Path('docs/research/rust-assist-cancel.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['flags'],a['active'],0xffffffff if a['target'] is None else a['target'],a['tick'],a['last'],int(a['reason']=='far')]
16
+ if __name__=='__main__':main()
scripts/test_rust_assist_cancel.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-assist-cancel.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-assist-cancel.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
@@ -4004,3 +4004,32 @@ report scripts/analyze_qvm_assist_cancel.py docs/research/qvm-assist-cancel.json
4004
  edge docs/research/qvm-assist-cancel.json scripts/test_qvm_assist_cancel.py
4005
  group qvm-assist-cancel scripts/analyze_qvm_assist_cancel.py
4006
  edge scripts/analyze_qvm_assist_cancel.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4004
  edge docs/research/qvm-assist-cancel.json scripts/test_qvm_assist_cancel.py
4005
  group qvm-assist-cancel scripts/analyze_qvm_assist_cancel.py
4006
  edge scripts/analyze_qvm_assist_cancel.py scripts/analyze_qvm_resumer_audit.py
4007
+ report scripts/analyze_rust_assist_cancel.py docs/research/rust-assist-cancel.json
4008
+ edge docs/research/rust-assist-cancel.json scripts/test_rust_assist_cancel.py
4009
+ group rust-assist-cancel scripts/analyze_rust_assist_cancel.py
4010
+ edge scripts/analyze_rust_assist_cancel.py scripts/analyze_qvm_resumer_audit.py
4011
+ edge Cargo.toml scripts/analyze_rust_assist_cancel.py
4012
+ edge Cargo.lock scripts/analyze_rust_assist_cancel.py
4013
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_assist_cancel.py
4014
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_assist_cancel.py
4015
+ edge crates/urt-gameplay/src/filter_loading.rs scripts/analyze_rust_assist_cancel.py
4016
+ edge crates/urt-gameplay/src/filter_lifecycle.rs scripts/analyze_rust_assist_cancel.py
4017
+ edge crates/urt-gameplay/src/native_policy.rs scripts/analyze_rust_assist_cancel.py
4018
+ edge crates/urt-gameplay/src/bin/urt-filter-loading.rs scripts/analyze_rust_assist_cancel.py
4019
+ edge crates/urt-gameplay/src/qvm_format.rs scripts/analyze_rust_assist_cancel.py
4020
+ edge docs/research/qvm-assist-cancel.json scripts/analyze_rust_assist_cancel.py
4021
+ group rust-assist-cancel scripts/analyze_rust_health_impulse.py
4022
+ group gameplay scripts/analyze_rust_assist_cancel.py
4023
+ edge crates/urt-gameplay/src/filter_commands.rs scripts/analyze_rust_assist_cancel.py
4024
+ edge crates/urt-gameplay/src/bin/urt-filter-commands.rs scripts/analyze_rust_assist_cancel.py
4025
+ edge crates/urt-gameplay/src/client_timer.rs scripts/analyze_rust_assist_cancel.py
4026
+ edge crates/urt-gameplay/src/bin/urt-client-timer.rs scripts/analyze_rust_assist_cancel.py
4027
+ edge crates/urt-gameplay/src/client_processing.rs scripts/analyze_rust_assist_cancel.py
4028
+ edge crates/urt-gameplay/src/bin/urt-client-processing.rs scripts/analyze_rust_assist_cancel.py
4029
+ edge crates/urt-gameplay/src/client_move_context.rs scripts/analyze_rust_assist_cancel.py
4030
+ edge crates/urt-gameplay/src/bin/urt-client-move-context.rs scripts/analyze_rust_assist_cancel.py
4031
+ edge crates/urt-gameplay/src/move_callbacks.rs scripts/analyze_rust_assist_cancel.py
4032
+ edge crates/urt-gameplay/src/bin/urt-move-callbacks.rs scripts/analyze_rust_assist_cancel.py
4033
+ edge crates/urt-gameplay/src/assistance.rs scripts/analyze_rust_assist_cancel.py
4034
+ edge crates/urt-gameplay/src/bin/urt-assistance.rs scripts/analyze_rust_assist_cancel.py
4035
+ edge crates/urt-gameplay/src/move_callbacks.rs scripts/analyze_rust_assist_cancel.py
xtask/src/lib.rs CHANGED
@@ -1144,6 +1144,8 @@ mod integration_tests {
1144
  ("client_move_context", "move_resolved_self"),
1145
  ("assistance", "assist_acquire"),
1146
  ("move_callbacks", "assist_acquire"),
 
 
1147
  ("client_move_context", "client_move_scratch"),
1148
  ("client_processing", "client_routing"),
1149
  ("client_timer", "client_routing"),
@@ -1368,6 +1370,7 @@ mod integration_tests {
1368
  ("qvm-move-mode8-eligibility", "move_mode8_eligibility"),
1369
  ("qvm-move-resolved-self", "move_resolved_self"),
1370
  ("qvm-assist-acquire", "assist_acquire"),
 
1371
  ("qvm-client-move-scratch", "client_move_scratch"),
1372
  ("qvm-client-routing", "client_routing"),
1373
  ("qvm-client-command-rewrite", "client_command_rewrite"),
 
1144
  ("client_move_context", "move_resolved_self"),
1145
  ("assistance", "assist_acquire"),
1146
  ("move_callbacks", "assist_acquire"),
1147
+ ("assistance", "assist_cancel"),
1148
+ ("move_callbacks", "assist_cancel"),
1149
  ("client_move_context", "client_move_scratch"),
1150
  ("client_processing", "client_routing"),
1151
  ("client_timer", "client_routing"),
 
1370
  ("qvm-move-mode8-eligibility", "move_mode8_eligibility"),
1371
  ("qvm-move-resolved-self", "move_resolved_self"),
1372
  ("qvm-assist-acquire", "assist_acquire"),
1373
+ ("qvm-assist-cancel", "assist_cancel"),
1374
  ("qvm-client-move-scratch", "client_move_scratch"),
1375
  ("qvm-client-routing", "client_routing"),
1376
  ("qvm-client-command-rewrite", "client_command_rewrite"),