nmarshall commited on
Commit
947fb1f
·
1 Parent(s): 842a20c

gameplay: port assisted thaw progress

Browse files
crates/urt-gameplay/src/assistance.rs CHANGED
@@ -154,3 +154,98 @@ mod cancel_tests {
154
  assert_eq!(s, old);
155
  }
156
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  assert_eq!(s, old);
155
  }
156
  }
157
+
158
+ /// Original153121 progress fragment with actual152386 meter policy. Selection
159
+ /// already established matching near/protected ownership. Float domains are
160
+ /// finite/in-range; invalid input stages neither helper time nor target state.
161
+ pub fn progress_assistance(
162
+ helper: &mut HelperState,
163
+ target: &mut crate::move_callbacks::MeterState,
164
+ seconds: u32,
165
+ tick: u32,
166
+ slot: i32,
167
+ target_slot: usize,
168
+ owner: u32,
169
+ ) -> Result<Vec<AssistEffect>, Error> {
170
+ indices(slot, target_slot)?;
171
+ let seconds = f32::from_bits(seconds);
172
+ if !seconds.is_finite() {
173
+ return Err(Error::NonFinite);
174
+ }
175
+ if seconds == 0. {
176
+ return Err(Error::InvalidInput);
177
+ }
178
+ let mut next = *target;
179
+ let increment = 32000.0 / (seconds * 1000.0) * (tick.wrapping_sub(helper.last) as i32 as f32);
180
+ let carry = f32::from_bits(next.carry) + increment;
181
+ if !increment.is_finite() || !carry.is_finite() {
182
+ return Err(Error::NonFinite);
183
+ }
184
+ next.carry = carry.to_bits();
185
+ let effects = crate::move_callbacks::finish_meter(
186
+ &mut next,
187
+ crate::move_callbacks::MeterInput {
188
+ melt: false,
189
+ mirror: true,
190
+ slot: target_slot as i32,
191
+ other_slot: slot,
192
+ owner,
193
+ },
194
+ )?;
195
+ *target = next;
196
+ helper.last = tick;
197
+ Ok(effects.into_iter().map(AssistEffect::Nested).collect())
198
+ }
199
+ #[cfg(test)]
200
+ mod progress_tests {
201
+ use super::*;
202
+ use crate::move_callbacks::MeterState;
203
+ fn helper() -> HelperState {
204
+ HelperState {
205
+ flags: 8192,
206
+ active: 1,
207
+ target: Some(3),
208
+ last: u32::MAX - 15,
209
+ }
210
+ }
211
+ fn target() -> MeterState {
212
+ MeterState {
213
+ meter: 0,
214
+ carry: 0.5f32.to_bits(),
215
+ flags220: 16384,
216
+ flags104: 16,
217
+ pm_type: 4,
218
+ receiver: 999,
219
+ event_entity: [7, 1],
220
+ }
221
+ }
222
+ #[test]
223
+ fn wrapped_progress_mirrors_meter_and_completion_orders_effects() {
224
+ let mut h = helper();
225
+ let mut t = target();
226
+ progress_assistance(&mut h, &mut t, 2f32.to_bits(), 10, 2, 3, 9).unwrap();
227
+ assert_eq!((t.meter, t.receiver, h.last), (416, 416, 10));
228
+ t.meter = 31999;
229
+ t.carry = 1.25f32.to_bits();
230
+ let e = progress_assistance(&mut h, &mut t, 2f32.to_bits(), 10, 2, 3, 9).unwrap();
231
+ assert_eq!((t.meter, t.receiver, t.pm_type), (0, 0, 0));
232
+ assert!(matches!(
233
+ &e[..],
234
+ [
235
+ AssistEffect::Nested(crate::move_callbacks::CallbackEffect::Teleport { .. }),
236
+ AssistEffect::Nested(crate::move_callbacks::CallbackEffect::Reset { .. }),
237
+ AssistEffect::Nested(crate::move_callbacks::CallbackEffect::Event { event: 108 }),
238
+ AssistEffect::Nested(crate::move_callbacks::CallbackEffect::Log { .. })
239
+ ]
240
+ ));
241
+ }
242
+ #[test]
243
+ fn late_error_preserves_helper_clock_and_target() {
244
+ let mut h = helper();
245
+ let mut t = target();
246
+ t.carry = f32::MAX.to_bits();
247
+ let old = (h, t);
248
+ assert!(progress_assistance(&mut h, &mut t, 2f32.to_bits(), 10, 2, 3, 9).is_err());
249
+ assert_eq!((h, t), old);
250
+ }
251
+ }
crates/urt-gameplay/src/bin/urt-assistance.rs CHANGED
@@ -79,6 +79,33 @@ fn main() {
79
  let e = cancel_assistance(&mut s, 2, 3).unwrap();
80
  println!("{{{}}}", fields(s, &e));
81
  }
 
82
  _ => panic!("unknown policy"),
83
  }
84
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  let e = cancel_assistance(&mut s, 2, 3).unwrap();
80
  println!("{{{}}}", fields(s, &e));
81
  }
82
+ "progress" => println!("{}", progress(&w)),
83
  _ => panic!("unknown policy"),
84
  }
85
  }
86
+
87
+ fn progress(w: &[u32]) -> String {
88
+ assert_eq!(w.len(), 11);
89
+ let mut h = helper(w);
90
+ let mut t = urt_gameplay::move_callbacks::MeterState {
91
+ meter: w[5],
92
+ carry: w[6],
93
+ flags220: w[7],
94
+ flags104: w[8],
95
+ pm_type: w[9],
96
+ receiver: 999,
97
+ event_entity: [7, 0x80000001],
98
+ };
99
+ let e = progress_assistance(&mut h, &mut t, w[10], w[3], 2, 3, 0x23456789).unwrap();
100
+ format!(
101
+ r#"{{{},"target_meter":{},"carry_bits":{},"target_flags220":{},"target_flags104":{},"target_pm_type":{},"helper_meter":{},"event_entity":{}}}"#,
102
+ fields(h, &e),
103
+ t.meter,
104
+ t.carry,
105
+ t.flags220,
106
+ t.flags104,
107
+ t.pm_type,
108
+ t.receiver,
109
+ list(&t.event_entity)
110
+ )
111
+ }
docs/FINDINGS.md CHANGED
@@ -1953,3 +1953,5 @@ RE-1006: Seventy-two source cases recover both cancellation branches. Only a hel
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).
1954
 
1955
  RE-1008: Twenty-four original-QVM cases execute staged f32 progress using34062368 and helper clock6328, then actual152386 on the target with helper meter mirroring. Negative/wrapped elapsed time, signed duration, fractional carry, precision and threshold completion are covered. Assisted completion orders teleport/reset/event108/log and mirrors zero to the helper. Helper clock advances after the target child; ownership remains until later cancellation. Native nested effects remain captured or supplied. [Evidence](research/QVM_ASSIST_PROGRESS.md).
 
 
 
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).
1954
 
1955
  RE-1008: Twenty-four original-QVM cases execute staged f32 progress using34062368 and helper clock6328, then actual152386 on the target with helper meter mirroring. Negative/wrapped elapsed time, signed duration, fractional carry, precision and threshold completion are covered. Assisted completion orders teleport/reset/event108/log and mirrors zero to the helper. Helper clock advances after the target child; ownership remains until later cancellation. Native nested effects remain captured or supplied. [Evidence](research/QVM_ASSIST_PROGRESS.md).
1956
+
1957
+ RE-1009: Rust matches24 assisted progress cases, including f32 rounding, negative/wrapped elapsed time and completion. Target meter completion mirrors its result to the helper and preserves original nested effect order. Clock and target updates stage together, so invalid duration or late conversion errors leave both unchanged. Unit cases verify wrapped416-unit progress, zero mirroring at completion and rollback. [Evidence](research/RUST_ASSIST_PROGRESS.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -2011,3 +2011,5 @@ RE-974–983 completed routing, command rewrite, inactivity, movement-parameter
2011
  - [x] RE-1007 Port conditional assistance cancellation ([evidence](research/RUST_ASSIST_CANCEL.md)).
2012
 
2013
  - [x] RE-1008 Recover assisted thaw progress and target completion ([evidence](research/QVM_ASSIST_PROGRESS.md)).
 
 
 
2011
  - [x] RE-1007 Port conditional assistance cancellation ([evidence](research/RUST_ASSIST_CANCEL.md)).
2012
 
2013
  - [x] RE-1008 Recover assisted thaw progress and target completion ([evidence](research/QVM_ASSIST_PROGRESS.md)).
2014
+
2015
+ - [x] RE-1009 Port assisted progress with target meter feedback ([evidence](research/RUST_ASSIST_PROGRESS.md)).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2707,3 +2707,7 @@ Rust matches both original cancellation branches across72 source cases. Matching
2707
  ## 2026-10-29 — RE-1008 Recover assisted thaw progress and target completion
2708
 
2709
  Twenty-four original-QVM cases execute staged f32 progress using34062368 and helper clock6328, then actual152386 on the target with helper meter mirroring. Negative/wrapped elapsed time, signed duration, fractional carry, precision and threshold completion are covered. Assisted completion orders teleport/reset/event108/log and mirrors zero to the helper. Helper clock advances after the target child; ownership remains until later cancellation. Native nested effects remain captured or supplied. Focused `cargo xtask test-group qvm-assist-progress` passes with deterministic report regeneration and selected regressions. Full suite deferred to task ten. Original assets unchanged; Python uses the flake-declared Nix runtime.
 
 
 
 
 
2707
  ## 2026-10-29 — RE-1008 Recover assisted thaw progress and target completion
2708
 
2709
  Twenty-four original-QVM cases execute staged f32 progress using34062368 and helper clock6328, then actual152386 on the target with helper meter mirroring. Negative/wrapped elapsed time, signed duration, fractional carry, precision and threshold completion are covered. Assisted completion orders teleport/reset/event108/log and mirrors zero to the helper. Helper clock advances after the target child; ownership remains until later cancellation. Native nested effects remain captured or supplied. Focused `cargo xtask test-group qvm-assist-progress` passes with deterministic report regeneration and selected regressions. Full suite deferred to task ten. Original assets unchanged; Python uses the flake-declared Nix runtime.
2710
+
2711
+ ## 2026-10-29 — RE-1009 Port assisted progress with target meter feedback
2712
+
2713
+ Rust matches24 assisted progress cases, including f32 rounding, negative/wrapped elapsed time and completion. Target meter completion mirrors its result to the helper and preserves original nested effect order. Clock and target updates stage together, so invalid duration or late conversion errors leave both unchanged. Unit cases verify wrapped416-unit progress, zero mirroring at completion and rollback. Focused `cargo xtask test-group rust-assist-progress` 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
@@ -2048,3 +2048,5 @@ RE-974–983 recover routing, command rewriting, inactivity and composed setup t
2048
  - [x] RE-1007 Port conditional assistance cancellation ([evidence](research/RUST_ASSIST_CANCEL.md)).
2049
 
2050
  - [x] RE-1008 Recover assisted thaw progress and target completion ([evidence](research/QVM_ASSIST_PROGRESS.md)).
 
 
 
2048
  - [x] RE-1007 Port conditional assistance cancellation ([evidence](research/RUST_ASSIST_CANCEL.md)).
2049
 
2050
  - [x] RE-1008 Recover assisted thaw progress and target completion ([evidence](research/QVM_ASSIST_PROGRESS.md)).
2051
+
2052
+ - [x] RE-1009 Port assisted progress with target meter feedback ([evidence](research/RUST_ASSIST_PROGRESS.md)).
docs/research/README.md CHANGED
@@ -1581,3 +1581,5 @@ The extension collector adds five focused tests for native tail calls, command-r
1581
  - [RE-1007: Port conditional assistance cancellation](RUST_ASSIST_CANCEL.md).
1582
 
1583
  - [RE-1008: Recover assisted thaw progress and target completion](QVM_ASSIST_PROGRESS.md).
 
 
 
1581
  - [RE-1007: Port conditional assistance cancellation](RUST_ASSIST_CANCEL.md).
1582
 
1583
  - [RE-1008: Recover assisted thaw progress and target completion](QVM_ASSIST_PROGRESS.md).
1584
+
1585
+ - [RE-1009: Port assisted progress with target meter feedback](RUST_ASSIST_PROGRESS.md).
docs/research/RUST_ASSIST_PROGRESS.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Port assisted progress with target meter feedback
2
+
3
+ RE-1009. Focused validation: `cargo xtask test-group rust-assist-progress`. [Machine report](rust-assist-progress.json).
4
+
5
+ Rust matches24 assisted progress cases, including f32 rounding, negative/wrapped elapsed time and completion. Target meter completion mirrors its result to the helper and preserves original nested effect order. Clock and target updates stage together, so invalid duration or late conversion errors leave both unchanged. Unit cases verify wrapped416-unit progress, zero mirroring at completion and rollback.
docs/research/rust-assist-progress.json ADDED
@@ -0,0 +1,997 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Finite source/Rust contract parity; native time/file/network replies remain supplied or captured.",
3
+ "probes": [
4
+ {
5
+ "rust": {
6
+ "active": 1,
7
+ "carry_bits": 0,
8
+ "event_entity": [
9
+ 7,
10
+ 2147483649
11
+ ],
12
+ "events": [],
13
+ "flags": 2147491842,
14
+ "helper_meter": 6400,
15
+ "last": 10000,
16
+ "target": 3,
17
+ "target_flags104": 2147483666,
18
+ "target_flags220": 2147500034,
19
+ "target_meter": 6400,
20
+ "target_pm_type": 4
21
+ },
22
+ "source": {
23
+ "active": 1,
24
+ "carry_bits": 0,
25
+ "event_entity": [
26
+ 7,
27
+ 2147483649
28
+ ],
29
+ "events": [],
30
+ "flags": 2147491842,
31
+ "helper_meter": 6400,
32
+ "last": 10000,
33
+ "target": 3,
34
+ "target_flags104": 2147483666,
35
+ "target_flags220": 2147500034,
36
+ "target_meter": 6400,
37
+ "target_pm_type": 4
38
+ }
39
+ },
40
+ {
41
+ "rust": {
42
+ "active": 1,
43
+ "carry_bits": 0,
44
+ "event_entity": [
45
+ 7,
46
+ 2147483649
47
+ ],
48
+ "events": [],
49
+ "flags": 2147491842,
50
+ "helper_meter": 1600,
51
+ "last": 10000,
52
+ "target": 3,
53
+ "target_flags104": 2147483666,
54
+ "target_flags220": 2147500034,
55
+ "target_meter": 1600,
56
+ "target_pm_type": 4
57
+ },
58
+ "source": {
59
+ "active": 1,
60
+ "carry_bits": 0,
61
+ "event_entity": [
62
+ 7,
63
+ 2147483649
64
+ ],
65
+ "events": [],
66
+ "flags": 2147491842,
67
+ "helper_meter": 1600,
68
+ "last": 10000,
69
+ "target": 3,
70
+ "target_flags104": 2147483666,
71
+ "target_flags220": 2147500034,
72
+ "target_meter": 1600,
73
+ "target_pm_type": 4
74
+ }
75
+ },
76
+ {
77
+ "rust": {
78
+ "active": 1,
79
+ "carry_bits": 0,
80
+ "event_entity": [
81
+ 7,
82
+ 2147483649
83
+ ],
84
+ "events": [],
85
+ "flags": 2147491842,
86
+ "helper_meter": 0,
87
+ "last": 10000,
88
+ "target": 3,
89
+ "target_flags104": 2147483666,
90
+ "target_flags220": 2147500034,
91
+ "target_meter": 0,
92
+ "target_pm_type": 4
93
+ },
94
+ "source": {
95
+ "active": 1,
96
+ "carry_bits": 0,
97
+ "event_entity": [
98
+ 7,
99
+ 2147483649
100
+ ],
101
+ "events": [],
102
+ "flags": 2147491842,
103
+ "helper_meter": 0,
104
+ "last": 10000,
105
+ "target": 3,
106
+ "target_flags104": 2147483666,
107
+ "target_flags220": 2147500034,
108
+ "target_meter": 0,
109
+ "target_pm_type": 4
110
+ }
111
+ },
112
+ {
113
+ "rust": {
114
+ "active": 1,
115
+ "carry_bits": 0,
116
+ "event_entity": [
117
+ 7,
118
+ 2147483649
119
+ ],
120
+ "events": [],
121
+ "flags": 2147491842,
122
+ "helper_meter": 0,
123
+ "last": 10000,
124
+ "target": 3,
125
+ "target_flags104": 2147483666,
126
+ "target_flags220": 2147500034,
127
+ "target_meter": 0,
128
+ "target_pm_type": 4
129
+ },
130
+ "source": {
131
+ "active": 1,
132
+ "carry_bits": 0,
133
+ "event_entity": [
134
+ 7,
135
+ 2147483649
136
+ ],
137
+ "events": [],
138
+ "flags": 2147491842,
139
+ "helper_meter": 0,
140
+ "last": 10000,
141
+ "target": 3,
142
+ "target_flags104": 2147483666,
143
+ "target_flags220": 2147500034,
144
+ "target_meter": 0,
145
+ "target_pm_type": 4
146
+ }
147
+ },
148
+ {
149
+ "rust": {
150
+ "active": 1,
151
+ "carry_bits": 0,
152
+ "event_entity": [
153
+ 7,
154
+ 2147483649
155
+ ],
156
+ "events": [],
157
+ "flags": 2147491842,
158
+ "helper_meter": 0,
159
+ "last": 10000,
160
+ "target": 3,
161
+ "target_flags104": 2147483666,
162
+ "target_flags220": 2147500034,
163
+ "target_meter": 0,
164
+ "target_pm_type": 4
165
+ },
166
+ "source": {
167
+ "active": 1,
168
+ "carry_bits": 0,
169
+ "event_entity": [
170
+ 7,
171
+ 2147483649
172
+ ],
173
+ "events": [],
174
+ "flags": 2147491842,
175
+ "helper_meter": 0,
176
+ "last": 10000,
177
+ "target": 3,
178
+ "target_flags104": 2147483666,
179
+ "target_flags220": 2147500034,
180
+ "target_meter": 0,
181
+ "target_pm_type": 4
182
+ }
183
+ },
184
+ {
185
+ "rust": {
186
+ "active": 1,
187
+ "carry_bits": 0,
188
+ "event_entity": [
189
+ 7,
190
+ 2147483649
191
+ ],
192
+ "events": [],
193
+ "flags": 2147491842,
194
+ "helper_meter": 1700,
195
+ "last": 10000,
196
+ "target": 3,
197
+ "target_flags104": 2147483666,
198
+ "target_flags220": 2147500034,
199
+ "target_meter": 1700,
200
+ "target_pm_type": 4
201
+ },
202
+ "source": {
203
+ "active": 1,
204
+ "carry_bits": 0,
205
+ "event_entity": [
206
+ 7,
207
+ 2147483649
208
+ ],
209
+ "events": [],
210
+ "flags": 2147491842,
211
+ "helper_meter": 1700,
212
+ "last": 10000,
213
+ "target": 3,
214
+ "target_flags104": 2147483666,
215
+ "target_flags220": 2147500034,
216
+ "target_meter": 1700,
217
+ "target_pm_type": 4
218
+ }
219
+ },
220
+ {
221
+ "rust": {
222
+ "active": 1,
223
+ "carry_bits": 0,
224
+ "event_entity": [
225
+ 7,
226
+ 2147483649
227
+ ],
228
+ "events": [],
229
+ "flags": 2147491842,
230
+ "helper_meter": 1664,
231
+ "last": 10,
232
+ "target": 3,
233
+ "target_flags104": 2147483666,
234
+ "target_flags220": 2147500034,
235
+ "target_meter": 1664,
236
+ "target_pm_type": 4
237
+ },
238
+ "source": {
239
+ "active": 1,
240
+ "carry_bits": 0,
241
+ "event_entity": [
242
+ 7,
243
+ 2147483649
244
+ ],
245
+ "events": [],
246
+ "flags": 2147491842,
247
+ "helper_meter": 1664,
248
+ "last": 10,
249
+ "target": 3,
250
+ "target_flags104": 2147483666,
251
+ "target_flags220": 2147500034,
252
+ "target_meter": 1664,
253
+ "target_pm_type": 4
254
+ }
255
+ },
256
+ {
257
+ "rust": {
258
+ "active": 1,
259
+ "carry_bits": 0,
260
+ "event_entity": [
261
+ 7,
262
+ 2147483649
263
+ ],
264
+ "events": [],
265
+ "flags": 2147491842,
266
+ "helper_meter": 416,
267
+ "last": 10,
268
+ "target": 3,
269
+ "target_flags104": 2147483666,
270
+ "target_flags220": 2147500034,
271
+ "target_meter": 416,
272
+ "target_pm_type": 4
273
+ },
274
+ "source": {
275
+ "active": 1,
276
+ "carry_bits": 0,
277
+ "event_entity": [
278
+ 7,
279
+ 2147483649
280
+ ],
281
+ "events": [],
282
+ "flags": 2147491842,
283
+ "helper_meter": 416,
284
+ "last": 10,
285
+ "target": 3,
286
+ "target_flags104": 2147483666,
287
+ "target_flags220": 2147500034,
288
+ "target_meter": 416,
289
+ "target_pm_type": 4
290
+ }
291
+ },
292
+ {
293
+ "rust": {
294
+ "active": 1,
295
+ "carry_bits": 0,
296
+ "event_entity": [
297
+ 7,
298
+ 2147483649
299
+ ],
300
+ "events": [],
301
+ "flags": 2147491842,
302
+ "helper_meter": 0,
303
+ "last": 10,
304
+ "target": 3,
305
+ "target_flags104": 2147483666,
306
+ "target_flags220": 2147500034,
307
+ "target_meter": 0,
308
+ "target_pm_type": 4
309
+ },
310
+ "source": {
311
+ "active": 1,
312
+ "carry_bits": 0,
313
+ "event_entity": [
314
+ 7,
315
+ 2147483649
316
+ ],
317
+ "events": [],
318
+ "flags": 2147491842,
319
+ "helper_meter": 0,
320
+ "last": 10,
321
+ "target": 3,
322
+ "target_flags104": 2147483666,
323
+ "target_flags220": 2147500034,
324
+ "target_meter": 0,
325
+ "target_pm_type": 4
326
+ }
327
+ },
328
+ {
329
+ "rust": {
330
+ "active": 1,
331
+ "carry_bits": 0,
332
+ "event_entity": [
333
+ 7,
334
+ 2147483649
335
+ ],
336
+ "events": [],
337
+ "flags": 2147491842,
338
+ "helper_meter": 31999,
339
+ "last": 10000,
340
+ "target": 3,
341
+ "target_flags104": 2147483666,
342
+ "target_flags220": 2147500034,
343
+ "target_meter": 31999,
344
+ "target_pm_type": 4
345
+ },
346
+ "source": {
347
+ "active": 1,
348
+ "carry_bits": 0,
349
+ "event_entity": [
350
+ 7,
351
+ 2147483649
352
+ ],
353
+ "events": [],
354
+ "flags": 2147491842,
355
+ "helper_meter": 31999,
356
+ "last": 10000,
357
+ "target": 3,
358
+ "target_flags104": 2147483666,
359
+ "target_flags220": 2147500034,
360
+ "target_meter": 31999,
361
+ "target_pm_type": 4
362
+ }
363
+ },
364
+ {
365
+ "rust": {
366
+ "active": 1,
367
+ "carry_bits": 0,
368
+ "event_entity": [
369
+ 7,
370
+ 2147483649
371
+ ],
372
+ "events": [],
373
+ "flags": 2147491842,
374
+ "helper_meter": 31999,
375
+ "last": 10000,
376
+ "target": 3,
377
+ "target_flags104": 2147483666,
378
+ "target_flags220": 2147500034,
379
+ "target_meter": 31999,
380
+ "target_pm_type": 4
381
+ },
382
+ "source": {
383
+ "active": 1,
384
+ "carry_bits": 0,
385
+ "event_entity": [
386
+ 7,
387
+ 2147483649
388
+ ],
389
+ "events": [],
390
+ "flags": 2147491842,
391
+ "helper_meter": 31999,
392
+ "last": 10000,
393
+ "target": 3,
394
+ "target_flags104": 2147483666,
395
+ "target_flags220": 2147500034,
396
+ "target_meter": 31999,
397
+ "target_pm_type": 4
398
+ }
399
+ },
400
+ {
401
+ "rust": {
402
+ "active": 1,
403
+ "carry_bits": 0,
404
+ "event_entity": [
405
+ 7,
406
+ 2147483649
407
+ ],
408
+ "events": [],
409
+ "flags": 2147491842,
410
+ "helper_meter": 31999,
411
+ "last": 10000,
412
+ "target": 3,
413
+ "target_flags104": 2147483666,
414
+ "target_flags220": 2147500034,
415
+ "target_meter": 31999,
416
+ "target_pm_type": 4
417
+ },
418
+ "source": {
419
+ "active": 1,
420
+ "carry_bits": 0,
421
+ "event_entity": [
422
+ 7,
423
+ 2147483649
424
+ ],
425
+ "events": [],
426
+ "flags": 2147491842,
427
+ "helper_meter": 31999,
428
+ "last": 10000,
429
+ "target": 3,
430
+ "target_flags104": 2147483666,
431
+ "target_flags220": 2147500034,
432
+ "target_meter": 31999,
433
+ "target_pm_type": 4
434
+ }
435
+ },
436
+ {
437
+ "rust": {
438
+ "active": 1,
439
+ "carry_bits": 0,
440
+ "event_entity": [
441
+ 591751049,
442
+ 2147483681
443
+ ],
444
+ "events": [
445
+ {
446
+ "op": "teleport",
447
+ "slot": 3
448
+ },
449
+ {
450
+ "op": "reset",
451
+ "slot": 3
452
+ },
453
+ {
454
+ "event": 108,
455
+ "op": "event"
456
+ },
457
+ {
458
+ "format": "546861774f757446696e69736865643a2025692025693a20257320746861776564206f75742025730a",
459
+ "op": "log",
460
+ "slots": [
461
+ 2,
462
+ 3
463
+ ]
464
+ }
465
+ ],
466
+ "flags": 2147491842,
467
+ "helper_meter": 0,
468
+ "last": 10000,
469
+ "target": 3,
470
+ "target_flags104": 2147483650,
471
+ "target_flags220": 2147483650,
472
+ "target_meter": 0,
473
+ "target_pm_type": 0
474
+ },
475
+ "source": {
476
+ "active": 1,
477
+ "carry_bits": 0,
478
+ "event_entity": [
479
+ 591751049,
480
+ 2147483681
481
+ ],
482
+ "events": [
483
+ {
484
+ "op": "teleport",
485
+ "slot": 3
486
+ },
487
+ {
488
+ "op": "reset",
489
+ "slot": 3
490
+ },
491
+ {
492
+ "event": 108,
493
+ "op": "event"
494
+ },
495
+ {
496
+ "format": "546861774f757446696e69736865643a2025692025693a20257320746861776564206f75742025730a",
497
+ "op": "log",
498
+ "slots": [
499
+ 2,
500
+ 3
501
+ ]
502
+ }
503
+ ],
504
+ "flags": 2147491842,
505
+ "helper_meter": 0,
506
+ "last": 10000,
507
+ "target": 3,
508
+ "target_flags104": 2147483650,
509
+ "target_flags220": 2147483650,
510
+ "target_meter": 0,
511
+ "target_pm_type": 0
512
+ }
513
+ },
514
+ {
515
+ "rust": {
516
+ "active": 1,
517
+ "carry_bits": 0,
518
+ "event_entity": [
519
+ 591751049,
520
+ 2147483681
521
+ ],
522
+ "events": [
523
+ {
524
+ "op": "teleport",
525
+ "slot": 3
526
+ },
527
+ {
528
+ "op": "reset",
529
+ "slot": 3
530
+ },
531
+ {
532
+ "event": 108,
533
+ "op": "event"
534
+ },
535
+ {
536
+ "format": "546861774f757446696e69736865643a2025692025693a20257320746861776564206f75742025730a",
537
+ "op": "log",
538
+ "slots": [
539
+ 2,
540
+ 3
541
+ ]
542
+ }
543
+ ],
544
+ "flags": 2147491842,
545
+ "helper_meter": 0,
546
+ "last": 10000,
547
+ "target": 3,
548
+ "target_flags104": 2147483650,
549
+ "target_flags220": 2147483650,
550
+ "target_meter": 0,
551
+ "target_pm_type": 0
552
+ },
553
+ "source": {
554
+ "active": 1,
555
+ "carry_bits": 0,
556
+ "event_entity": [
557
+ 591751049,
558
+ 2147483681
559
+ ],
560
+ "events": [
561
+ {
562
+ "op": "teleport",
563
+ "slot": 3
564
+ },
565
+ {
566
+ "op": "reset",
567
+ "slot": 3
568
+ },
569
+ {
570
+ "event": 108,
571
+ "op": "event"
572
+ },
573
+ {
574
+ "format": "546861774f757446696e69736865643a2025692025693a20257320746861776564206f75742025730a",
575
+ "op": "log",
576
+ "slots": [
577
+ 2,
578
+ 3
579
+ ]
580
+ }
581
+ ],
582
+ "flags": 2147491842,
583
+ "helper_meter": 0,
584
+ "last": 10000,
585
+ "target": 3,
586
+ "target_flags104": 2147483650,
587
+ "target_flags220": 2147483650,
588
+ "target_meter": 0,
589
+ "target_pm_type": 0
590
+ }
591
+ },
592
+ {
593
+ "rust": {
594
+ "active": 1,
595
+ "carry_bits": 0,
596
+ "event_entity": [
597
+ 591751049,
598
+ 2147483681
599
+ ],
600
+ "events": [
601
+ {
602
+ "op": "teleport",
603
+ "slot": 3
604
+ },
605
+ {
606
+ "op": "reset",
607
+ "slot": 3
608
+ },
609
+ {
610
+ "event": 108,
611
+ "op": "event"
612
+ },
613
+ {
614
+ "format": "546861774f757446696e69736865643a2025692025693a20257320746861776564206f75742025730a",
615
+ "op": "log",
616
+ "slots": [
617
+ 2,
618
+ 3
619
+ ]
620
+ }
621
+ ],
622
+ "flags": 2147491842,
623
+ "helper_meter": 0,
624
+ "last": 10000,
625
+ "target": 3,
626
+ "target_flags104": 2147483650,
627
+ "target_flags220": 2147483650,
628
+ "target_meter": 0,
629
+ "target_pm_type": 0
630
+ },
631
+ "source": {
632
+ "active": 1,
633
+ "carry_bits": 0,
634
+ "event_entity": [
635
+ 591751049,
636
+ 2147483681
637
+ ],
638
+ "events": [
639
+ {
640
+ "op": "teleport",
641
+ "slot": 3
642
+ },
643
+ {
644
+ "op": "reset",
645
+ "slot": 3
646
+ },
647
+ {
648
+ "event": 108,
649
+ "op": "event"
650
+ },
651
+ {
652
+ "format": "546861774f757446696e69736865643a2025692025693a20257320746861776564206f75742025730a",
653
+ "op": "log",
654
+ "slots": [
655
+ 2,
656
+ 3
657
+ ]
658
+ }
659
+ ],
660
+ "flags": 2147491842,
661
+ "helper_meter": 0,
662
+ "last": 10000,
663
+ "target": 3,
664
+ "target_flags104": 2147483650,
665
+ "target_flags220": 2147483650,
666
+ "target_meter": 0,
667
+ "target_pm_type": 0
668
+ }
669
+ },
670
+ {
671
+ "rust": {
672
+ "active": 1,
673
+ "carry_bits": 0,
674
+ "event_entity": [
675
+ 7,
676
+ 2147483649
677
+ ],
678
+ "events": [],
679
+ "flags": 2147491842,
680
+ "helper_meter": 0,
681
+ "last": 10000,
682
+ "target": 3,
683
+ "target_flags104": 2147483666,
684
+ "target_flags220": 2147500034,
685
+ "target_meter": 0,
686
+ "target_pm_type": 4
687
+ },
688
+ "source": {
689
+ "active": 1,
690
+ "carry_bits": 0,
691
+ "event_entity": [
692
+ 7,
693
+ 2147483649
694
+ ],
695
+ "events": [],
696
+ "flags": 2147491842,
697
+ "helper_meter": 0,
698
+ "last": 10000,
699
+ "target": 3,
700
+ "target_flags104": 2147483666,
701
+ "target_flags220": 2147500034,
702
+ "target_meter": 0,
703
+ "target_pm_type": 4
704
+ }
705
+ },
706
+ {
707
+ "rust": {
708
+ "active": 1,
709
+ "carry_bits": 0,
710
+ "event_entity": [
711
+ 7,
712
+ 2147483649
713
+ ],
714
+ "events": [],
715
+ "flags": 2147491842,
716
+ "helper_meter": 0,
717
+ "last": 10000,
718
+ "target": 3,
719
+ "target_flags104": 2147483666,
720
+ "target_flags220": 2147500034,
721
+ "target_meter": 0,
722
+ "target_pm_type": 4
723
+ },
724
+ "source": {
725
+ "active": 1,
726
+ "carry_bits": 0,
727
+ "event_entity": [
728
+ 7,
729
+ 2147483649
730
+ ],
731
+ "events": [],
732
+ "flags": 2147491842,
733
+ "helper_meter": 0,
734
+ "last": 10000,
735
+ "target": 3,
736
+ "target_flags104": 2147483666,
737
+ "target_flags220": 2147500034,
738
+ "target_meter": 0,
739
+ "target_pm_type": 4
740
+ }
741
+ },
742
+ {
743
+ "rust": {
744
+ "active": 1,
745
+ "carry_bits": 0,
746
+ "event_entity": [
747
+ 7,
748
+ 2147483649
749
+ ],
750
+ "events": [],
751
+ "flags": 2147491842,
752
+ "helper_meter": 0,
753
+ "last": 10000,
754
+ "target": 3,
755
+ "target_flags104": 2147483666,
756
+ "target_flags220": 2147500034,
757
+ "target_meter": 0,
758
+ "target_pm_type": 4
759
+ },
760
+ "source": {
761
+ "active": 1,
762
+ "carry_bits": 0,
763
+ "event_entity": [
764
+ 7,
765
+ 2147483649
766
+ ],
767
+ "events": [],
768
+ "flags": 2147491842,
769
+ "helper_meter": 0,
770
+ "last": 10000,
771
+ "target": 3,
772
+ "target_flags104": 2147483666,
773
+ "target_flags220": 2147500034,
774
+ "target_meter": 0,
775
+ "target_pm_type": 4
776
+ }
777
+ },
778
+ {
779
+ "rust": {
780
+ "active": 1,
781
+ "carry_bits": 0,
782
+ "event_entity": [
783
+ 7,
784
+ 2147483649
785
+ ],
786
+ "events": [],
787
+ "flags": 2147491842,
788
+ "helper_meter": 31064,
789
+ "last": 10000,
790
+ "target": 3,
791
+ "target_flags104": 2147483666,
792
+ "target_flags220": 2147500034,
793
+ "target_meter": 31064,
794
+ "target_pm_type": 4
795
+ },
796
+ "source": {
797
+ "active": 1,
798
+ "carry_bits": 0,
799
+ "event_entity": [
800
+ 7,
801
+ 2147483649
802
+ ],
803
+ "events": [],
804
+ "flags": 2147491842,
805
+ "helper_meter": 31064,
806
+ "last": 10000,
807
+ "target": 3,
808
+ "target_flags104": 2147483666,
809
+ "target_flags220": 2147500034,
810
+ "target_meter": 31064,
811
+ "target_pm_type": 4
812
+ }
813
+ },
814
+ {
815
+ "rust": {
816
+ "active": 1,
817
+ "carry_bits": 0,
818
+ "event_entity": [
819
+ 7,
820
+ 2147483649
821
+ ],
822
+ "events": [],
823
+ "flags": 2147491842,
824
+ "helper_meter": 31016,
825
+ "last": 10000,
826
+ "target": 3,
827
+ "target_flags104": 2147483666,
828
+ "target_flags220": 2147500034,
829
+ "target_meter": 31016,
830
+ "target_pm_type": 4
831
+ },
832
+ "source": {
833
+ "active": 1,
834
+ "carry_bits": 0,
835
+ "event_entity": [
836
+ 7,
837
+ 2147483649
838
+ ],
839
+ "events": [],
840
+ "flags": 2147491842,
841
+ "helper_meter": 31016,
842
+ "last": 10000,
843
+ "target": 3,
844
+ "target_flags104": 2147483666,
845
+ "target_flags220": 2147500034,
846
+ "target_meter": 31016,
847
+ "target_pm_type": 4
848
+ }
849
+ },
850
+ {
851
+ "rust": {
852
+ "active": 1,
853
+ "carry_bits": 0,
854
+ "event_entity": [
855
+ 7,
856
+ 2147483649
857
+ ],
858
+ "events": [],
859
+ "flags": 2147491842,
860
+ "helper_meter": 30984,
861
+ "last": 10000,
862
+ "target": 3,
863
+ "target_flags104": 2147483666,
864
+ "target_flags220": 2147500034,
865
+ "target_meter": 30984,
866
+ "target_pm_type": 4
867
+ },
868
+ "source": {
869
+ "active": 1,
870
+ "carry_bits": 0,
871
+ "event_entity": [
872
+ 7,
873
+ 2147483649
874
+ ],
875
+ "events": [],
876
+ "flags": 2147491842,
877
+ "helper_meter": 30984,
878
+ "last": 10000,
879
+ "target": 3,
880
+ "target_flags104": 2147483666,
881
+ "target_flags220": 2147500034,
882
+ "target_meter": 30984,
883
+ "target_pm_type": 4
884
+ }
885
+ },
886
+ {
887
+ "rust": {
888
+ "active": 1,
889
+ "carry_bits": 0,
890
+ "event_entity": [
891
+ 7,
892
+ 2147483649
893
+ ],
894
+ "events": [],
895
+ "flags": 2147491842,
896
+ "helper_meter": 31000,
897
+ "last": 10000,
898
+ "target": 3,
899
+ "target_flags104": 2147483666,
900
+ "target_flags220": 2147500034,
901
+ "target_meter": 31000,
902
+ "target_pm_type": 4
903
+ },
904
+ "source": {
905
+ "active": 1,
906
+ "carry_bits": 0,
907
+ "event_entity": [
908
+ 7,
909
+ 2147483649
910
+ ],
911
+ "events": [],
912
+ "flags": 2147491842,
913
+ "helper_meter": 31000,
914
+ "last": 10000,
915
+ "target": 3,
916
+ "target_flags104": 2147483666,
917
+ "target_flags220": 2147500034,
918
+ "target_meter": 31000,
919
+ "target_pm_type": 4
920
+ }
921
+ },
922
+ {
923
+ "rust": {
924
+ "active": 1,
925
+ "carry_bits": 0,
926
+ "event_entity": [
927
+ 7,
928
+ 2147483649
929
+ ],
930
+ "events": [],
931
+ "flags": 2147491842,
932
+ "helper_meter": 31000,
933
+ "last": 10000,
934
+ "target": 3,
935
+ "target_flags104": 2147483666,
936
+ "target_flags220": 2147500034,
937
+ "target_meter": 31000,
938
+ "target_pm_type": 4
939
+ },
940
+ "source": {
941
+ "active": 1,
942
+ "carry_bits": 0,
943
+ "event_entity": [
944
+ 7,
945
+ 2147483649
946
+ ],
947
+ "events": [],
948
+ "flags": 2147491842,
949
+ "helper_meter": 31000,
950
+ "last": 10000,
951
+ "target": 3,
952
+ "target_flags104": 2147483666,
953
+ "target_flags220": 2147500034,
954
+ "target_meter": 31000,
955
+ "target_pm_type": 4
956
+ }
957
+ },
958
+ {
959
+ "rust": {
960
+ "active": 1,
961
+ "carry_bits": 0,
962
+ "event_entity": [
963
+ 7,
964
+ 2147483649
965
+ ],
966
+ "events": [],
967
+ "flags": 2147491842,
968
+ "helper_meter": 31000,
969
+ "last": 10000,
970
+ "target": 3,
971
+ "target_flags104": 2147483666,
972
+ "target_flags220": 2147500034,
973
+ "target_meter": 31000,
974
+ "target_pm_type": 4
975
+ },
976
+ "source": {
977
+ "active": 1,
978
+ "carry_bits": 0,
979
+ "event_entity": [
980
+ 7,
981
+ 2147483649
982
+ ],
983
+ "events": [],
984
+ "flags": 2147491842,
985
+ "helper_meter": 31000,
986
+ "last": 10000,
987
+ "target": 3,
988
+ "target_flags104": 2147483666,
989
+ "target_flags220": 2147500034,
990
+ "target_meter": 31000,
991
+ "target_pm_type": 4
992
+ }
993
+ }
994
+ ],
995
+ "source_report": "docs/research/qvm-assist-progress.json",
996
+ "source_report_sha256": "5048296baf6b4a357903c1eb8cc75a3364c4db16f424a92f440c3830e4ed3530"
997
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
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
  }
 
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
+ "rust_unit_tests": 265,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
scripts/analyze_rust_assist_progress.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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-progress.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', 'target_meter', 'carry_bits', 'target_flags220', 'target_flags104', 'target_pm_type', 'helper_meter', 'event_entity']},rust=result(binary,'progress',encode(p['input']))))
13
+ write_json(Path('docs/research/rust-assist-progress.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):
16
+ from analyze_qvm_acceleration import word
17
+ return [a['flags'],a['active'],a['target'],a['tick'],a['last'],a['meter'],word(a['carry']),a['target_flags220'],a['target_flags104'],a['target_pm_type'],word(a['seconds'])]
18
+ if __name__=='__main__':main()
scripts/test_rust_assist_progress.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-progress.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-progress.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
@@ -4037,3 +4037,32 @@ report scripts/analyze_qvm_assist_progress.py docs/research/qvm-assist-progress.
4037
  edge docs/research/qvm-assist-progress.json scripts/test_qvm_assist_progress.py
4038
  group qvm-assist-progress scripts/analyze_qvm_assist_progress.py
4039
  edge scripts/analyze_qvm_assist_progress.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4037
  edge docs/research/qvm-assist-progress.json scripts/test_qvm_assist_progress.py
4038
  group qvm-assist-progress scripts/analyze_qvm_assist_progress.py
4039
  edge scripts/analyze_qvm_assist_progress.py scripts/analyze_qvm_resumer_audit.py
4040
+ report scripts/analyze_rust_assist_progress.py docs/research/rust-assist-progress.json
4041
+ edge docs/research/rust-assist-progress.json scripts/test_rust_assist_progress.py
4042
+ group rust-assist-progress scripts/analyze_rust_assist_progress.py
4043
+ edge scripts/analyze_rust_assist_progress.py scripts/analyze_qvm_resumer_audit.py
4044
+ edge Cargo.toml scripts/analyze_rust_assist_progress.py
4045
+ edge Cargo.lock scripts/analyze_rust_assist_progress.py
4046
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_assist_progress.py
4047
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_assist_progress.py
4048
+ edge crates/urt-gameplay/src/filter_loading.rs scripts/analyze_rust_assist_progress.py
4049
+ edge crates/urt-gameplay/src/filter_lifecycle.rs scripts/analyze_rust_assist_progress.py
4050
+ edge crates/urt-gameplay/src/native_policy.rs scripts/analyze_rust_assist_progress.py
4051
+ edge crates/urt-gameplay/src/bin/urt-filter-loading.rs scripts/analyze_rust_assist_progress.py
4052
+ edge crates/urt-gameplay/src/qvm_format.rs scripts/analyze_rust_assist_progress.py
4053
+ edge docs/research/qvm-assist-progress.json scripts/analyze_rust_assist_progress.py
4054
+ group rust-assist-progress scripts/analyze_rust_health_impulse.py
4055
+ group gameplay scripts/analyze_rust_assist_progress.py
4056
+ edge crates/urt-gameplay/src/filter_commands.rs scripts/analyze_rust_assist_progress.py
4057
+ edge crates/urt-gameplay/src/bin/urt-filter-commands.rs scripts/analyze_rust_assist_progress.py
4058
+ edge crates/urt-gameplay/src/client_timer.rs scripts/analyze_rust_assist_progress.py
4059
+ edge crates/urt-gameplay/src/bin/urt-client-timer.rs scripts/analyze_rust_assist_progress.py
4060
+ edge crates/urt-gameplay/src/client_processing.rs scripts/analyze_rust_assist_progress.py
4061
+ edge crates/urt-gameplay/src/bin/urt-client-processing.rs scripts/analyze_rust_assist_progress.py
4062
+ edge crates/urt-gameplay/src/client_move_context.rs scripts/analyze_rust_assist_progress.py
4063
+ edge crates/urt-gameplay/src/bin/urt-client-move-context.rs scripts/analyze_rust_assist_progress.py
4064
+ edge crates/urt-gameplay/src/move_callbacks.rs scripts/analyze_rust_assist_progress.py
4065
+ edge crates/urt-gameplay/src/bin/urt-move-callbacks.rs scripts/analyze_rust_assist_progress.py
4066
+ edge crates/urt-gameplay/src/assistance.rs scripts/analyze_rust_assist_progress.py
4067
+ edge crates/urt-gameplay/src/bin/urt-assistance.rs scripts/analyze_rust_assist_progress.py
4068
+ edge crates/urt-gameplay/src/move_callbacks.rs scripts/analyze_rust_assist_progress.py
xtask/src/lib.rs CHANGED
@@ -1146,6 +1146,8 @@ mod integration_tests {
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"),
@@ -1371,6 +1373,7 @@ mod integration_tests {
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"),
 
1146
  ("move_callbacks", "assist_acquire"),
1147
  ("assistance", "assist_cancel"),
1148
  ("move_callbacks", "assist_cancel"),
1149
+ ("assistance", "assist_progress"),
1150
+ ("move_callbacks", "assist_progress"),
1151
  ("client_move_context", "client_move_scratch"),
1152
  ("client_processing", "client_routing"),
1153
  ("client_timer", "client_routing"),
 
1373
  ("qvm-move-resolved-self", "move_resolved_self"),
1374
  ("qvm-assist-acquire", "assist_acquire"),
1375
  ("qvm-assist-cancel", "assist_cancel"),
1376
+ ("qvm-assist-progress", "assist_progress"),
1377
  ("qvm-client-move-scratch", "client_move_scratch"),
1378
  ("qvm-client-routing", "client_routing"),
1379
  ("qvm-client-command-rewrite", "client_command_rewrite"),