nmarshall commited on
Commit
084bd42
·
1 Parent(s): 8c1d84d

gameplay: port checked angle math policy

Browse files
crates/urt-gameplay/src/bin/urt-camera-world.rs CHANGED
@@ -130,6 +130,25 @@ fn run() -> Result<String, String> {
130
  array(&matches)
131
  ))
132
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  _ => Err("unknown command".into()),
134
  }
135
  }
@@ -173,3 +192,22 @@ fn field_records(w: &[u32], p: &mut usize, n: usize) -> Result<Vec<FieldEntity>,
173
  }
174
  Ok(e)
175
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  array(&matches)
131
  ))
132
  }
133
+ "angles" => {
134
+ if w.len() < 4 {
135
+ return Err("missing angle input".into());
136
+ }
137
+ let mut p = 3;
138
+ let mut math = math_calls(&w, &mut p)?;
139
+ if p != w.len() {
140
+ return Err("trailing angle words".into());
141
+ }
142
+ let input = w[..3].try_into().unwrap();
143
+ let output = vector_angles(input, &mut math).map_err(|e| format!("{e:?}"))?;
144
+ math.finish().map_err(|e| format!("{e:?}"))?;
145
+ let host = vector_angles(input, &mut HostMath).map_err(|e| format!("{e:?}"))?;
146
+ Ok(format!(
147
+ "{{\"output\":{},\"host\":{}}}",
148
+ array(&output),
149
+ array(&host)
150
+ ))
151
+ }
152
  _ => Err("unknown command".into()),
153
  }
154
  }
 
192
  }
193
  Ok(e)
194
  }
195
+
196
+ fn math_calls(w: &[u32], p: &mut usize) -> Result<ReplayMath, String> {
197
+ let n = *w.get(*p).ok_or("missing math count")? as usize;
198
+ *p += 1;
199
+ if n > 128 || 4 * n > w.len() - *p {
200
+ return Err("invalid math count".into());
201
+ }
202
+ let calls = w[*p..*p + 4 * n]
203
+ .chunks_exact(4)
204
+ .map(|v| MathCall {
205
+ operation: v[0] as i32,
206
+ a: v[1],
207
+ b: v[2],
208
+ result: v[3],
209
+ })
210
+ .collect();
211
+ *p += 4 * n;
212
+ Ok(ReplayMath::new(calls))
213
+ }
crates/urt-gameplay/src/camera_world.rs CHANGED
@@ -254,3 +254,143 @@ mod target_tests {
254
  assert_eq!(zero, 0);
255
  }
256
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  assert_eq!(zero, 0);
255
  }
256
  }
257
+
258
+ pub trait AngleMath {
259
+ fn atan2(&mut self, y: f32, x: f32) -> Result<f32, Error>;
260
+ fn sqrt(&mut self, x: f32) -> Result<f32, Error>;
261
+ }
262
+ pub struct HostMath;
263
+ impl AngleMath for HostMath {
264
+ fn atan2(&mut self, y: f32, x: f32) -> Result<f32, Error> {
265
+ Ok((y as f64).atan2(x as f64) as f32)
266
+ }
267
+ fn sqrt(&mut self, x: f32) -> Result<f32, Error> {
268
+ Ok((x as f64).sqrt() as f32)
269
+ }
270
+ }
271
+ #[derive(Clone, Copy, Debug, PartialEq, Eq)]
272
+ pub struct MathCall {
273
+ pub operation: i32,
274
+ pub a: u32,
275
+ pub b: u32,
276
+ pub result: u32,
277
+ }
278
+ pub struct ReplayMath {
279
+ calls: Vec<MathCall>,
280
+ next: usize,
281
+ }
282
+ impl ReplayMath {
283
+ pub fn new(calls: Vec<MathCall>) -> Self {
284
+ Self { calls, next: 0 }
285
+ }
286
+ pub fn finish(&self) -> Result<(), Error> {
287
+ if self.next == self.calls.len() {
288
+ Ok(())
289
+ } else {
290
+ Err(Error::MathTranscript)
291
+ }
292
+ }
293
+ fn take(&mut self, operation: i32, a: f32, b: f32) -> Result<f32, Error> {
294
+ let c = self.calls.get(self.next).ok_or(Error::MathTranscript)?;
295
+ if (c.operation, c.a, c.b) != (operation, a.to_bits(), b.to_bits()) {
296
+ return Err(Error::MathTranscript);
297
+ }
298
+ self.next += 1;
299
+ let value = f32::from_bits(c.result);
300
+ if !value.is_finite() {
301
+ return Err(Error::FloatDomain);
302
+ }
303
+ Ok(value)
304
+ }
305
+ }
306
+ impl AngleMath for ReplayMath {
307
+ fn atan2(&mut self, y: f32, x: f32) -> Result<f32, Error> {
308
+ self.take(-106, y, x)
309
+ }
310
+ fn sqrt(&mut self, x: f32) -> Result<f32, Error> {
311
+ self.take(-107, x, 0.0)
312
+ }
313
+ }
314
+ /// Source f32 staging with caller-selected finite math responses. HostMath does
315
+ /// not establish original native library bit parity.
316
+ pub fn vector_angles<M: AngleMath>(input: [u32; 3], math: &mut M) -> Result<[u32; 3], Error> {
317
+ let [x, y, z] = input.map(f32::from_bits);
318
+ if ![x, y, z].iter().all(|v| v.is_finite()) {
319
+ return Err(Error::FloatDomain);
320
+ }
321
+ if x == 0.0 && y == 0.0 {
322
+ return Ok([
323
+ (-(if z > 0.0 { 90.0f32 } else { 270.0f32 })).to_bits(),
324
+ 0,
325
+ 0,
326
+ ]);
327
+ }
328
+ let degrees = f32::from_bits(1113927393);
329
+ let mut yaw = if x != 0.0 {
330
+ math.atan2(y, x)? * degrees
331
+ } else if y > 0.0 {
332
+ 90.0
333
+ } else {
334
+ 270.0
335
+ };
336
+ if yaw < 0.0 {
337
+ yaw += 360.0;
338
+ }
339
+ let xx = x * x;
340
+ let yy = y * y;
341
+ let sum = xx + yy;
342
+ if !sum.is_finite() {
343
+ return Err(Error::FloatDomain);
344
+ }
345
+ let horizontal = math.sqrt(sum)?;
346
+ if !horizontal.is_finite() || horizontal < 0.0 {
347
+ return Err(Error::FloatDomain);
348
+ }
349
+ let mut pitch = math.atan2(z, horizontal)? * degrees;
350
+ if pitch < 0.0 {
351
+ pitch += 360.0;
352
+ }
353
+ if !pitch.is_finite() || !yaw.is_finite() {
354
+ return Err(Error::FloatDomain);
355
+ }
356
+ Ok([(-pitch).to_bits(), yaw.to_bits(), 0])
357
+ }
358
+ #[cfg(test)]
359
+ mod angle_tests {
360
+ use super::*;
361
+ #[test]
362
+ fn vertical_and_signed_zero_contract() {
363
+ assert_eq!(
364
+ vector_angles([0; 3], &mut HostMath),
365
+ Ok([(-270.0f32).to_bits(), 0, 0])
366
+ );
367
+ assert_eq!(
368
+ vector_angles([0, 0, 1.0f32.to_bits()], &mut HostMath),
369
+ Ok([(-90.0f32).to_bits(), 0, 0])
370
+ );
371
+ assert_eq!(
372
+ vector_angles([1.0f32.to_bits(), 0, 0], &mut HostMath),
373
+ Ok([(-0.0f32).to_bits(), 0, 0])
374
+ );
375
+ }
376
+ #[test]
377
+ fn transcript_and_nonfinite_fail_closed() {
378
+ let mut m = ReplayMath::new(vec![]);
379
+ assert_eq!(
380
+ vector_angles([1.0f32.to_bits(), 0, 0], &mut m),
381
+ Err(Error::MathTranscript)
382
+ );
383
+ assert_eq!(
384
+ vector_angles([f32::NAN.to_bits(), 0, 0], &mut HostMath),
385
+ Err(Error::FloatDomain)
386
+ );
387
+ let mut m = ReplayMath::new(vec![MathCall {
388
+ operation: -107,
389
+ a: 0,
390
+ b: 0,
391
+ result: 0,
392
+ }]);
393
+ assert!(vector_angles([0; 3], &mut m).is_ok());
394
+ assert_eq!(m.finish(), Err(Error::MathTranscript));
395
+ }
396
+ }
docs/FINDINGS.md CHANGED
@@ -1580,3 +1580,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
1580
 
1581
 
1582
  **RE-860:** 96 actual 62944 cases use corrected repeated child reentry and coherent full/partial alias memory, preserving staged f32 arithmetic and exact output words. All24 older fixtures are compared explicitly. atan2/sqrt remain supplied finite f32 math models; original native library bit parity is not established. [Evidence](research/QVM_CAMERA_ANGLES.md).
 
 
 
 
1580
 
1581
 
1582
  **RE-860:** 96 actual 62944 cases use corrected repeated child reentry and coherent full/partial alias memory, preserving staged f32 arithmetic and exact output words. All24 older fixtures are compared explicitly. atan2/sqrt remain supplied finite f32 math models; original native library bit parity is not established. [Evidence](research/QVM_CAMERA_ANGLES.md).
1583
+
1584
+
1585
+ **RE-861:** Rust matches 96 corrected source angle cases exactly through checked math transcripts. A separate host-math path is compared within four f32 ULPs, preserving source staging and signed-zero behavior. Safe nonfinite domains and stale math transcripts reject; original native atan2/sqrt bit parity remains unverified. [Evidence](research/RUST_CAMERA_ANGLES.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1602,3 +1602,6 @@ RE-859: Rust matches 168 original target selections and five six-step RNG sequen
1602
 
1603
 
1604
  RE-860: 96 actual 62944 cases use corrected repeated child reentry and coherent full/partial alias memory, preserving staged f32 arithmetic and exact output words. All24 older fixtures are compared explicitly. atan2/sqrt remain supplied finite f32 math models; original native library bit parity is not established. Full runtime completion remains open. [Evidence](research/QVM_CAMERA_ANGLES.md).
 
 
 
 
1602
 
1603
 
1604
  RE-860: 96 actual 62944 cases use corrected repeated child reentry and coherent full/partial alias memory, preserving staged f32 arithmetic and exact output words. All24 older fixtures are compared explicitly. atan2/sqrt remain supplied finite f32 math models; original native library bit parity is not established. Full runtime completion remains open. [Evidence](research/QVM_CAMERA_ANGLES.md).
1605
+
1606
+
1607
+ RE-861: Rust matches 96 corrected source angle cases exactly through checked math transcripts. A separate host-math path is compared within four f32 ULPs, preserving source staging and signed-zero behavior. Safe nonfinite domains and stale math transcripts reject; original native atan2/sqrt bit parity remains unverified. Full runtime completion remains open. [Evidence](research/RUST_CAMERA_ANGLES.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -1986,3 +1986,8 @@ Rust matches 168 original target selections and five six-step RNG sequences. It
1986
  RE-860 environment correction: added flake.nix/flake.lock because this repository had no flake; pin uses the existing sibling project's nixpkgs revision. All subsequent Python runs use the declared Nix Python3.13.15 dependency and the absolute `PYTHON` variable, with no macOS Command Line Tools Python. The pending focused camera-angle validation is repeated through that shell.
1987
 
1988
  RE-860 flake validation: the repeated focused group passes all5 Python tests with the explicit Nix-store Python executable, identical deterministic source reports and all guards. Flake evaluation exposes both macOS and both Linux architectures.
 
 
 
 
 
 
1986
  RE-860 environment correction: added flake.nix/flake.lock because this repository had no flake; pin uses the existing sibling project's nixpkgs revision. All subsequent Python runs use the declared Nix Python3.13.15 dependency and the absolute `PYTHON` variable, with no macOS Command Line Tools Python. The pending focused camera-angle validation is repeated through that shell.
1987
 
1988
  RE-860 flake validation: the repeated focused group passes all5 Python tests with the explicit Nix-store Python executable, identical deterministic source reports and all guards. Flake evaluation exposes both macOS and both Linux architectures.
1989
+
1990
+
1991
+ ## 2026-10-27 — RE-861 Rust vector-angle policy with checked math transcripts
1992
+
1993
+ Rust matches 96 corrected source angle cases exactly through checked math transcripts. A separate host-math path is compared within four f32 ULPs, preserving source staging and signed-zero behavior. Safe nonfinite domains and stale math transcripts reject; original native atan2/sqrt bit parity remains unverified. Focused `cargo xtask test-group rust-camera-angles` passes (9 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1639,3 +1639,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1639
 
1640
 
1641
  - [x] RE-860 Corrected coherent vector-angle execution and legacy audit ([evidence](research/QVM_CAMERA_ANGLES.md)).
 
 
 
 
1639
 
1640
 
1641
  - [x] RE-860 Corrected coherent vector-angle execution and legacy audit ([evidence](research/QVM_CAMERA_ANGLES.md)).
1642
+
1643
+
1644
+ - [x] RE-861 Rust vector-angle policy with checked math transcripts ([evidence](research/RUST_CAMERA_ANGLES.md)).
docs/research/README.md CHANGED
@@ -1176,3 +1176,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1176
 
1177
 
1178
  [RE-860: Corrected coherent vector-angle execution and legacy audit](QVM_CAMERA_ANGLES.md).
 
 
 
 
1176
 
1177
 
1178
  [RE-860: Corrected coherent vector-angle execution and legacy audit](QVM_CAMERA_ANGLES.md).
1179
+
1180
+
1181
+ [RE-861: Rust vector-angle policy with checked math transcripts](RUST_CAMERA_ANGLES.md).
docs/research/RUST_CAMERA_ANGLES.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Rust vector-angle policy with checked math transcripts
2
+
3
+ RE-861. Reproduce with `python3 scripts/analyze_rust_camera_angles.py`; focused validation: `cargo xtask test-group rust-camera-angles`. [Machine report](rust-camera-angles.json).
4
+
5
+ Rust matches 96 corrected source angle cases exactly through checked math transcripts. A separate host-math path is compared within four f32 ULPs, preserving source staging and signed-zero behavior. Safe nonfinite domains and stale math transcripts reject; original native atan2/sqrt bit parity remains unverified.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/rust-camera-angles.json ADDED
@@ -0,0 +1,2023 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Rust matches 96 corrected source angle cases exactly through checked math transcripts. A separate host-math path is compared within four f32 ULPs, preserving source staging and signed-zero behavior. Safe nonfinite domains and stale math transcripts reject; original native atan2/sqrt bit parity remains unverified.",
3
+ "probes": [
4
+ {
5
+ "host": [
6
+ 3280404480,
7
+ 0,
8
+ 0
9
+ ],
10
+ "rust": {
11
+ "output": [
12
+ 3280404480,
13
+ 0,
14
+ 0
15
+ ]
16
+ },
17
+ "source": {
18
+ "output": [
19
+ 3280404480,
20
+ 0,
21
+ 0
22
+ ]
23
+ }
24
+ },
25
+ {
26
+ "host": [
27
+ 3280404480,
28
+ 0,
29
+ 0
30
+ ],
31
+ "rust": {
32
+ "output": [
33
+ 3280404480,
34
+ 0,
35
+ 0
36
+ ]
37
+ },
38
+ "source": {
39
+ "output": [
40
+ 3280404480,
41
+ 0,
42
+ 0
43
+ ]
44
+ }
45
+ },
46
+ {
47
+ "host": [
48
+ 3280404480,
49
+ 0,
50
+ 0
51
+ ],
52
+ "rust": {
53
+ "output": [
54
+ 3280404480,
55
+ 0,
56
+ 0
57
+ ]
58
+ },
59
+ "source": {
60
+ "output": [
61
+ 3280404480,
62
+ 0,
63
+ 0
64
+ ]
65
+ }
66
+ },
67
+ {
68
+ "host": [
69
+ 3280404480,
70
+ 0,
71
+ 0
72
+ ],
73
+ "rust": {
74
+ "output": [
75
+ 3280404480,
76
+ 0,
77
+ 0
78
+ ]
79
+ },
80
+ "source": {
81
+ "output": [
82
+ 3280404480,
83
+ 0,
84
+ 0
85
+ ]
86
+ }
87
+ },
88
+ {
89
+ "host": [
90
+ 3266576384,
91
+ 0,
92
+ 0
93
+ ],
94
+ "rust": {
95
+ "output": [
96
+ 3266576384,
97
+ 0,
98
+ 0
99
+ ]
100
+ },
101
+ "source": {
102
+ "output": [
103
+ 3266576384,
104
+ 0,
105
+ 0
106
+ ]
107
+ }
108
+ },
109
+ {
110
+ "host": [
111
+ 3266576384,
112
+ 0,
113
+ 0
114
+ ],
115
+ "rust": {
116
+ "output": [
117
+ 3266576384,
118
+ 0,
119
+ 0
120
+ ]
121
+ },
122
+ "source": {
123
+ "output": [
124
+ 3266576384,
125
+ 0,
126
+ 0
127
+ ]
128
+ }
129
+ },
130
+ {
131
+ "host": [
132
+ 3266576384,
133
+ 0,
134
+ 0
135
+ ],
136
+ "rust": {
137
+ "output": [
138
+ 3266576384,
139
+ 0,
140
+ 0
141
+ ]
142
+ },
143
+ "source": {
144
+ "output": [
145
+ 3266576384,
146
+ 0,
147
+ 0
148
+ ]
149
+ }
150
+ },
151
+ {
152
+ "host": [
153
+ 3266576384,
154
+ 0,
155
+ 0
156
+ ],
157
+ "rust": {
158
+ "output": [
159
+ 3266576384,
160
+ 0,
161
+ 0
162
+ ]
163
+ },
164
+ "source": {
165
+ "output": [
166
+ 3266576384,
167
+ 0,
168
+ 0
169
+ ]
170
+ }
171
+ },
172
+ {
173
+ "host": [
174
+ 3280404480,
175
+ 0,
176
+ 0
177
+ ],
178
+ "rust": {
179
+ "output": [
180
+ 3280404480,
181
+ 0,
182
+ 0
183
+ ]
184
+ },
185
+ "source": {
186
+ "output": [
187
+ 3280404480,
188
+ 0,
189
+ 0
190
+ ]
191
+ }
192
+ },
193
+ {
194
+ "host": [
195
+ 3280404480,
196
+ 0,
197
+ 0
198
+ ],
199
+ "rust": {
200
+ "output": [
201
+ 3280404480,
202
+ 0,
203
+ 0
204
+ ]
205
+ },
206
+ "source": {
207
+ "output": [
208
+ 3280404480,
209
+ 0,
210
+ 0
211
+ ]
212
+ }
213
+ },
214
+ {
215
+ "host": [
216
+ 3280404480,
217
+ 0,
218
+ 0
219
+ ],
220
+ "rust": {
221
+ "output": [
222
+ 3280404480,
223
+ 0,
224
+ 0
225
+ ]
226
+ },
227
+ "source": {
228
+ "output": [
229
+ 3280404480,
230
+ 0,
231
+ 0
232
+ ]
233
+ }
234
+ },
235
+ {
236
+ "host": [
237
+ 3280404480,
238
+ 0,
239
+ 0
240
+ ],
241
+ "rust": {
242
+ "output": [
243
+ 3280404480,
244
+ 0,
245
+ 0
246
+ ]
247
+ },
248
+ "source": {
249
+ "output": [
250
+ 3280404480,
251
+ 0,
252
+ 0
253
+ ]
254
+ }
255
+ },
256
+ {
257
+ "host": [
258
+ 2147483648,
259
+ 0,
260
+ 0
261
+ ],
262
+ "rust": {
263
+ "output": [
264
+ 2147483648,
265
+ 0,
266
+ 0
267
+ ]
268
+ },
269
+ "source": {
270
+ "output": [
271
+ 2147483648,
272
+ 0,
273
+ 0
274
+ ]
275
+ }
276
+ },
277
+ {
278
+ "host": [
279
+ 2147483648,
280
+ 0,
281
+ 0
282
+ ],
283
+ "rust": {
284
+ "output": [
285
+ 2147483648,
286
+ 0,
287
+ 0
288
+ ]
289
+ },
290
+ "source": {
291
+ "output": [
292
+ 2147483648,
293
+ 0,
294
+ 0
295
+ ]
296
+ }
297
+ },
298
+ {
299
+ "host": [
300
+ 2147483648,
301
+ 0,
302
+ 0
303
+ ],
304
+ "rust": {
305
+ "output": [
306
+ 2147483648,
307
+ 0,
308
+ 0
309
+ ]
310
+ },
311
+ "source": {
312
+ "output": [
313
+ 2147483648,
314
+ 0,
315
+ 0
316
+ ]
317
+ }
318
+ },
319
+ {
320
+ "host": [
321
+ 2147483648,
322
+ 0,
323
+ 0
324
+ ],
325
+ "rust": {
326
+ "output": [
327
+ 2147483648,
328
+ 0,
329
+ 0
330
+ ]
331
+ },
332
+ "source": {
333
+ "output": [
334
+ 2147483648,
335
+ 0,
336
+ 0
337
+ ]
338
+ }
339
+ },
340
+ {
341
+ "host": [
342
+ 2147483648,
343
+ 1127481344,
344
+ 0
345
+ ],
346
+ "rust": {
347
+ "output": [
348
+ 2147483648,
349
+ 1127481344,
350
+ 0
351
+ ]
352
+ },
353
+ "source": {
354
+ "output": [
355
+ 2147483648,
356
+ 1127481344,
357
+ 0
358
+ ]
359
+ }
360
+ },
361
+ {
362
+ "host": [
363
+ 2147483648,
364
+ 1127481344,
365
+ 0
366
+ ],
367
+ "rust": {
368
+ "output": [
369
+ 2147483648,
370
+ 1127481344,
371
+ 0
372
+ ]
373
+ },
374
+ "source": {
375
+ "output": [
376
+ 2147483648,
377
+ 1127481344,
378
+ 0
379
+ ]
380
+ }
381
+ },
382
+ {
383
+ "host": [
384
+ 2147483648,
385
+ 1127481344,
386
+ 0
387
+ ],
388
+ "rust": {
389
+ "output": [
390
+ 2147483648,
391
+ 1127481344,
392
+ 0
393
+ ]
394
+ },
395
+ "source": {
396
+ "output": [
397
+ 2147483648,
398
+ 1127481344,
399
+ 0
400
+ ]
401
+ }
402
+ },
403
+ {
404
+ "host": [
405
+ 2147483648,
406
+ 1127481344,
407
+ 0
408
+ ],
409
+ "rust": {
410
+ "output": [
411
+ 2147483648,
412
+ 1127481344,
413
+ 0
414
+ ]
415
+ },
416
+ "source": {
417
+ "output": [
418
+ 2147483648,
419
+ 1127481344,
420
+ 0
421
+ ]
422
+ }
423
+ },
424
+ {
425
+ "host": [
426
+ 2147483648,
427
+ 1119092736,
428
+ 0
429
+ ],
430
+ "rust": {
431
+ "output": [
432
+ 2147483648,
433
+ 1119092736,
434
+ 0
435
+ ]
436
+ },
437
+ "source": {
438
+ "output": [
439
+ 2147483648,
440
+ 1119092736,
441
+ 0
442
+ ]
443
+ }
444
+ },
445
+ {
446
+ "host": [
447
+ 2147483648,
448
+ 1119092736,
449
+ 0
450
+ ],
451
+ "rust": {
452
+ "output": [
453
+ 2147483648,
454
+ 1119092736,
455
+ 0
456
+ ]
457
+ },
458
+ "source": {
459
+ "output": [
460
+ 2147483648,
461
+ 1119092736,
462
+ 0
463
+ ]
464
+ }
465
+ },
466
+ {
467
+ "host": [
468
+ 2147483648,
469
+ 1119092736,
470
+ 0
471
+ ],
472
+ "rust": {
473
+ "output": [
474
+ 2147483648,
475
+ 1119092736,
476
+ 0
477
+ ]
478
+ },
479
+ "source": {
480
+ "output": [
481
+ 2147483648,
482
+ 1119092736,
483
+ 0
484
+ ]
485
+ }
486
+ },
487
+ {
488
+ "host": [
489
+ 2147483648,
490
+ 1119092736,
491
+ 0
492
+ ],
493
+ "rust": {
494
+ "output": [
495
+ 2147483648,
496
+ 1119092736,
497
+ 0
498
+ ]
499
+ },
500
+ "source": {
501
+ "output": [
502
+ 2147483648,
503
+ 1119092736,
504
+ 0
505
+ ]
506
+ }
507
+ },
508
+ {
509
+ "host": [
510
+ 2147483648,
511
+ 1132920832,
512
+ 0
513
+ ],
514
+ "rust": {
515
+ "output": [
516
+ 2147483648,
517
+ 1132920832,
518
+ 0
519
+ ]
520
+ },
521
+ "source": {
522
+ "output": [
523
+ 2147483648,
524
+ 1132920832,
525
+ 0
526
+ ]
527
+ }
528
+ },
529
+ {
530
+ "host": [
531
+ 2147483648,
532
+ 1132920832,
533
+ 0
534
+ ],
535
+ "rust": {
536
+ "output": [
537
+ 2147483648,
538
+ 1132920832,
539
+ 0
540
+ ]
541
+ },
542
+ "source": {
543
+ "output": [
544
+ 2147483648,
545
+ 1132920832,
546
+ 0
547
+ ]
548
+ }
549
+ },
550
+ {
551
+ "host": [
552
+ 2147483648,
553
+ 1132920832,
554
+ 0
555
+ ],
556
+ "rust": {
557
+ "output": [
558
+ 2147483648,
559
+ 1132920832,
560
+ 0
561
+ ]
562
+ },
563
+ "source": {
564
+ "output": [
565
+ 2147483648,
566
+ 1132920832,
567
+ 0
568
+ ]
569
+ }
570
+ },
571
+ {
572
+ "host": [
573
+ 2147483648,
574
+ 1132920832,
575
+ 0
576
+ ],
577
+ "rust": {
578
+ "output": [
579
+ 2147483648,
580
+ 1132920832,
581
+ 0
582
+ ]
583
+ },
584
+ "source": {
585
+ "output": [
586
+ 2147483648,
587
+ 1132920832,
588
+ 0
589
+ ]
590
+ }
591
+ },
592
+ {
593
+ "host": [
594
+ 3255635644,
595
+ 1110704128,
596
+ 0
597
+ ],
598
+ "rust": {
599
+ "output": [
600
+ 3255635644,
601
+ 1110704128,
602
+ 0
603
+ ]
604
+ },
605
+ "source": {
606
+ "output": [
607
+ 3255635644,
608
+ 1110704128,
609
+ 0
610
+ ]
611
+ }
612
+ },
613
+ {
614
+ "host": [
615
+ 3255635644,
616
+ 1110704128,
617
+ 0
618
+ ],
619
+ "rust": {
620
+ "output": [
621
+ 3255635644,
622
+ 1110704128,
623
+ 0
624
+ ]
625
+ },
626
+ "source": {
627
+ "output": [
628
+ 3255635644,
629
+ 1110704128,
630
+ 0
631
+ ]
632
+ }
633
+ },
634
+ {
635
+ "host": [
636
+ 3255635644,
637
+ 1110704128,
638
+ 0
639
+ ],
640
+ "rust": {
641
+ "output": [
642
+ 3255635644,
643
+ 1110704128,
644
+ 0
645
+ ]
646
+ },
647
+ "source": {
648
+ "output": [
649
+ 3255635644,
650
+ 1110704128,
651
+ 0
652
+ ]
653
+ }
654
+ },
655
+ {
656
+ "host": [
657
+ 3255635644,
658
+ 1110704128,
659
+ 0
660
+ ],
661
+ "rust": {
662
+ "output": [
663
+ 3255635644,
664
+ 1110704128,
665
+ 0
666
+ ]
667
+ },
668
+ "source": {
669
+ "output": [
670
+ 3255635644,
671
+ 1110704128,
672
+ 0
673
+ ]
674
+ }
675
+ },
676
+ {
677
+ "host": [
678
+ 3282198056,
679
+ 1124532224,
680
+ 0
681
+ ],
682
+ "rust": {
683
+ "output": [
684
+ 3282198056,
685
+ 1124532224,
686
+ 0
687
+ ]
688
+ },
689
+ "source": {
690
+ "output": [
691
+ 3282198056,
692
+ 1124532224,
693
+ 0
694
+ ]
695
+ }
696
+ },
697
+ {
698
+ "host": [
699
+ 3282198056,
700
+ 1124532224,
701
+ 0
702
+ ],
703
+ "rust": {
704
+ "output": [
705
+ 3282198056,
706
+ 1124532224,
707
+ 0
708
+ ]
709
+ },
710
+ "source": {
711
+ "output": [
712
+ 3282198056,
713
+ 1124532224,
714
+ 0
715
+ ]
716
+ }
717
+ },
718
+ {
719
+ "host": [
720
+ 3282198056,
721
+ 1124532224,
722
+ 0
723
+ ],
724
+ "rust": {
725
+ "output": [
726
+ 3282198056,
727
+ 1124532224,
728
+ 0
729
+ ]
730
+ },
731
+ "source": {
732
+ "output": [
733
+ 3282198056,
734
+ 1124532224,
735
+ 0
736
+ ]
737
+ }
738
+ },
739
+ {
740
+ "host": [
741
+ 3282198056,
742
+ 1124532224,
743
+ 0
744
+ ],
745
+ "rust": {
746
+ "output": [
747
+ 3282198056,
748
+ 1124532224,
749
+ 0
750
+ ]
751
+ },
752
+ "source": {
753
+ "output": [
754
+ 3282198056,
755
+ 1124532224,
756
+ 0
757
+ ]
758
+ }
759
+ },
760
+ {
761
+ "host": [
762
+ 3260739908,
763
+ 1130430464,
764
+ 0
765
+ ],
766
+ "rust": {
767
+ "output": [
768
+ 3260739908,
769
+ 1130430464,
770
+ 0
771
+ ]
772
+ },
773
+ "source": {
774
+ "output": [
775
+ 3260739908,
776
+ 1130430464,
777
+ 0
778
+ ]
779
+ }
780
+ },
781
+ {
782
+ "host": [
783
+ 3260739908,
784
+ 1130430464,
785
+ 0
786
+ ],
787
+ "rust": {
788
+ "output": [
789
+ 3260739908,
790
+ 1130430464,
791
+ 0
792
+ ]
793
+ },
794
+ "source": {
795
+ "output": [
796
+ 3260739908,
797
+ 1130430464,
798
+ 0
799
+ ]
800
+ }
801
+ },
802
+ {
803
+ "host": [
804
+ 3260739908,
805
+ 1130430464,
806
+ 0
807
+ ],
808
+ "rust": {
809
+ "output": [
810
+ 3260739908,
811
+ 1130430464,
812
+ 0
813
+ ]
814
+ },
815
+ "source": {
816
+ "output": [
817
+ 3260739908,
818
+ 1130430464,
819
+ 0
820
+ ]
821
+ }
822
+ },
823
+ {
824
+ "host": [
825
+ 3260739908,
826
+ 1130430464,
827
+ 0
828
+ ],
829
+ "rust": {
830
+ "output": [
831
+ 3260739908,
832
+ 1130430464,
833
+ 0
834
+ ]
835
+ },
836
+ "source": {
837
+ "output": [
838
+ 3260739908,
839
+ 1130430464,
840
+ 0
841
+ ]
842
+ }
843
+ },
844
+ {
845
+ "host": [
846
+ 3281560024,
847
+ 1134395392,
848
+ 0
849
+ ],
850
+ "rust": {
851
+ "output": [
852
+ 3281560024,
853
+ 1134395392,
854
+ 0
855
+ ]
856
+ },
857
+ "source": {
858
+ "output": [
859
+ 3281560024,
860
+ 1134395392,
861
+ 0
862
+ ]
863
+ }
864
+ },
865
+ {
866
+ "host": [
867
+ 3281560024,
868
+ 1134395392,
869
+ 0
870
+ ],
871
+ "rust": {
872
+ "output": [
873
+ 3281560024,
874
+ 1134395392,
875
+ 0
876
+ ]
877
+ },
878
+ "source": {
879
+ "output": [
880
+ 3281560024,
881
+ 1134395392,
882
+ 0
883
+ ]
884
+ }
885
+ },
886
+ {
887
+ "host": [
888
+ 3281560024,
889
+ 1134395392,
890
+ 0
891
+ ],
892
+ "rust": {
893
+ "output": [
894
+ 3281560024,
895
+ 1134395392,
896
+ 0
897
+ ]
898
+ },
899
+ "source": {
900
+ "output": [
901
+ 3281560024,
902
+ 1134395392,
903
+ 0
904
+ ]
905
+ }
906
+ },
907
+ {
908
+ "host": [
909
+ 3281560024,
910
+ 1134395392,
911
+ 0
912
+ ],
913
+ "rust": {
914
+ "output": [
915
+ 3281560024,
916
+ 1134395392,
917
+ 0
918
+ ]
919
+ },
920
+ "source": {
921
+ "output": [
922
+ 3281560024,
923
+ 1134395392,
924
+ 0
925
+ ]
926
+ }
927
+ },
928
+ {
929
+ "host": [
930
+ 3266157006,
931
+ 1133791316,
932
+ 0
933
+ ],
934
+ "rust": {
935
+ "output": [
936
+ 3266157006,
937
+ 1133791316,
938
+ 0
939
+ ]
940
+ },
941
+ "source": {
942
+ "output": [
943
+ 3266157006,
944
+ 1133791316,
945
+ 0
946
+ ]
947
+ }
948
+ },
949
+ {
950
+ "host": [
951
+ 3266157006,
952
+ 1133791316,
953
+ 0
954
+ ],
955
+ "rust": {
956
+ "output": [
957
+ 3266157006,
958
+ 1133791316,
959
+ 0
960
+ ]
961
+ },
962
+ "source": {
963
+ "output": [
964
+ 3266157006,
965
+ 1133791316,
966
+ 0
967
+ ]
968
+ }
969
+ },
970
+ {
971
+ "host": [
972
+ 3266157006,
973
+ 1133791316,
974
+ 0
975
+ ],
976
+ "rust": {
977
+ "output": [
978
+ 3266157006,
979
+ 1133791316,
980
+ 0
981
+ ]
982
+ },
983
+ "source": {
984
+ "output": [
985
+ 3266157006,
986
+ 1133791316,
987
+ 0
988
+ ]
989
+ }
990
+ },
991
+ {
992
+ "host": [
993
+ 3266157006,
994
+ 1133791316,
995
+ 0
996
+ ],
997
+ "rust": {
998
+ "output": [
999
+ 3266157006,
1000
+ 1133791316,
1001
+ 0
1002
+ ]
1003
+ },
1004
+ "source": {
1005
+ "output": [
1006
+ 3266157006,
1007
+ 1133791316,
1008
+ 0
1009
+ ]
1010
+ }
1011
+ },
1012
+ {
1013
+ "host": [
1014
+ 2147483648,
1015
+ 1110704128,
1016
+ 0
1017
+ ],
1018
+ "rust": {
1019
+ "output": [
1020
+ 2147483648,
1021
+ 1110704128,
1022
+ 0
1023
+ ]
1024
+ },
1025
+ "source": {
1026
+ "output": [
1027
+ 2147483648,
1028
+ 1110704128,
1029
+ 0
1030
+ ]
1031
+ }
1032
+ },
1033
+ {
1034
+ "host": [
1035
+ 2147483648,
1036
+ 1110704128,
1037
+ 0
1038
+ ],
1039
+ "rust": {
1040
+ "output": [
1041
+ 2147483648,
1042
+ 1110704128,
1043
+ 0
1044
+ ]
1045
+ },
1046
+ "source": {
1047
+ "output": [
1048
+ 2147483648,
1049
+ 1110704128,
1050
+ 0
1051
+ ]
1052
+ }
1053
+ },
1054
+ {
1055
+ "host": [
1056
+ 2147483648,
1057
+ 1110704128,
1058
+ 0
1059
+ ],
1060
+ "rust": {
1061
+ "output": [
1062
+ 2147483648,
1063
+ 1110704128,
1064
+ 0
1065
+ ]
1066
+ },
1067
+ "source": {
1068
+ "output": [
1069
+ 2147483648,
1070
+ 1110704128,
1071
+ 0
1072
+ ]
1073
+ }
1074
+ },
1075
+ {
1076
+ "host": [
1077
+ 2147483648,
1078
+ 1110704128,
1079
+ 0
1080
+ ],
1081
+ "rust": {
1082
+ "output": [
1083
+ 2147483648,
1084
+ 1110704128,
1085
+ 0
1086
+ ]
1087
+ },
1088
+ "source": {
1089
+ "output": [
1090
+ 2147483648,
1091
+ 1110704128,
1092
+ 0
1093
+ ]
1094
+ }
1095
+ },
1096
+ {
1097
+ "host": [
1098
+ 2147483648,
1099
+ 1124532224,
1100
+ 0
1101
+ ],
1102
+ "rust": {
1103
+ "output": [
1104
+ 2147483648,
1105
+ 1124532224,
1106
+ 0
1107
+ ]
1108
+ },
1109
+ "source": {
1110
+ "output": [
1111
+ 2147483648,
1112
+ 1124532224,
1113
+ 0
1114
+ ]
1115
+ }
1116
+ },
1117
+ {
1118
+ "host": [
1119
+ 2147483648,
1120
+ 1124532224,
1121
+ 0
1122
+ ],
1123
+ "rust": {
1124
+ "output": [
1125
+ 2147483648,
1126
+ 1124532224,
1127
+ 0
1128
+ ]
1129
+ },
1130
+ "source": {
1131
+ "output": [
1132
+ 2147483648,
1133
+ 1124532224,
1134
+ 0
1135
+ ]
1136
+ }
1137
+ },
1138
+ {
1139
+ "host": [
1140
+ 2147483648,
1141
+ 1124532224,
1142
+ 0
1143
+ ],
1144
+ "rust": {
1145
+ "output": [
1146
+ 2147483648,
1147
+ 1124532224,
1148
+ 0
1149
+ ]
1150
+ },
1151
+ "source": {
1152
+ "output": [
1153
+ 2147483648,
1154
+ 1124532224,
1155
+ 0
1156
+ ]
1157
+ }
1158
+ },
1159
+ {
1160
+ "host": [
1161
+ 2147483648,
1162
+ 1124532224,
1163
+ 0
1164
+ ],
1165
+ "rust": {
1166
+ "output": [
1167
+ 2147483648,
1168
+ 1124532224,
1169
+ 0
1170
+ ]
1171
+ },
1172
+ "source": {
1173
+ "output": [
1174
+ 2147483648,
1175
+ 1124532224,
1176
+ 0
1177
+ ]
1178
+ }
1179
+ },
1180
+ {
1181
+ "host": [
1182
+ 2147483648,
1183
+ 1130430464,
1184
+ 0
1185
+ ],
1186
+ "rust": {
1187
+ "output": [
1188
+ 2147483648,
1189
+ 1130430464,
1190
+ 0
1191
+ ]
1192
+ },
1193
+ "source": {
1194
+ "output": [
1195
+ 2147483648,
1196
+ 1130430464,
1197
+ 0
1198
+ ]
1199
+ }
1200
+ },
1201
+ {
1202
+ "host": [
1203
+ 2147483648,
1204
+ 1130430464,
1205
+ 0
1206
+ ],
1207
+ "rust": {
1208
+ "output": [
1209
+ 2147483648,
1210
+ 1130430464,
1211
+ 0
1212
+ ]
1213
+ },
1214
+ "source": {
1215
+ "output": [
1216
+ 2147483648,
1217
+ 1130430464,
1218
+ 0
1219
+ ]
1220
+ }
1221
+ },
1222
+ {
1223
+ "host": [
1224
+ 2147483648,
1225
+ 1130430464,
1226
+ 0
1227
+ ],
1228
+ "rust": {
1229
+ "output": [
1230
+ 2147483648,
1231
+ 1130430464,
1232
+ 0
1233
+ ]
1234
+ },
1235
+ "source": {
1236
+ "output": [
1237
+ 2147483648,
1238
+ 1130430464,
1239
+ 0
1240
+ ]
1241
+ }
1242
+ },
1243
+ {
1244
+ "host": [
1245
+ 2147483648,
1246
+ 1130430464,
1247
+ 0
1248
+ ],
1249
+ "rust": {
1250
+ "output": [
1251
+ 2147483648,
1252
+ 1130430464,
1253
+ 0
1254
+ ]
1255
+ },
1256
+ "source": {
1257
+ "output": [
1258
+ 2147483648,
1259
+ 1130430464,
1260
+ 0
1261
+ ]
1262
+ }
1263
+ },
1264
+ {
1265
+ "host": [
1266
+ 2147483648,
1267
+ 1134395392,
1268
+ 0
1269
+ ],
1270
+ "rust": {
1271
+ "output": [
1272
+ 2147483648,
1273
+ 1134395392,
1274
+ 0
1275
+ ]
1276
+ },
1277
+ "source": {
1278
+ "output": [
1279
+ 2147483648,
1280
+ 1134395392,
1281
+ 0
1282
+ ]
1283
+ }
1284
+ },
1285
+ {
1286
+ "host": [
1287
+ 2147483648,
1288
+ 1134395392,
1289
+ 0
1290
+ ],
1291
+ "rust": {
1292
+ "output": [
1293
+ 2147483648,
1294
+ 1134395392,
1295
+ 0
1296
+ ]
1297
+ },
1298
+ "source": {
1299
+ "output": [
1300
+ 2147483648,
1301
+ 1134395392,
1302
+ 0
1303
+ ]
1304
+ }
1305
+ },
1306
+ {
1307
+ "host": [
1308
+ 2147483648,
1309
+ 1134395392,
1310
+ 0
1311
+ ],
1312
+ "rust": {
1313
+ "output": [
1314
+ 2147483648,
1315
+ 1134395392,
1316
+ 0
1317
+ ]
1318
+ },
1319
+ "source": {
1320
+ "output": [
1321
+ 2147483648,
1322
+ 1134395392,
1323
+ 0
1324
+ ]
1325
+ }
1326
+ },
1327
+ {
1328
+ "host": [
1329
+ 2147483648,
1330
+ 1134395392,
1331
+ 0
1332
+ ],
1333
+ "rust": {
1334
+ "output": [
1335
+ 2147483648,
1336
+ 1134395392,
1337
+ 0
1338
+ ]
1339
+ },
1340
+ "source": {
1341
+ "output": [
1342
+ 2147483648,
1343
+ 1134395392,
1344
+ 0
1345
+ ]
1346
+ }
1347
+ },
1348
+ {
1349
+ "host": [
1350
+ 0,
1351
+ 0,
1352
+ 0
1353
+ ],
1354
+ "rust": {
1355
+ "output": [
1356
+ 0,
1357
+ 0,
1358
+ 0
1359
+ ]
1360
+ },
1361
+ "source": {
1362
+ "output": [
1363
+ 0,
1364
+ 0,
1365
+ 0
1366
+ ]
1367
+ }
1368
+ },
1369
+ {
1370
+ "host": [
1371
+ 0,
1372
+ 0,
1373
+ 0
1374
+ ],
1375
+ "rust": {
1376
+ "output": [
1377
+ 0,
1378
+ 0,
1379
+ 0
1380
+ ]
1381
+ },
1382
+ "source": {
1383
+ "output": [
1384
+ 0,
1385
+ 0,
1386
+ 0
1387
+ ]
1388
+ }
1389
+ },
1390
+ {
1391
+ "host": [
1392
+ 0,
1393
+ 0,
1394
+ 0
1395
+ ],
1396
+ "rust": {
1397
+ "output": [
1398
+ 0,
1399
+ 0,
1400
+ 0
1401
+ ]
1402
+ },
1403
+ "source": {
1404
+ "output": [
1405
+ 0,
1406
+ 0,
1407
+ 0
1408
+ ]
1409
+ }
1410
+ },
1411
+ {
1412
+ "host": [
1413
+ 0,
1414
+ 0,
1415
+ 0
1416
+ ],
1417
+ "rust": {
1418
+ "output": [
1419
+ 0,
1420
+ 0,
1421
+ 0
1422
+ ]
1423
+ },
1424
+ "source": {
1425
+ "output": [
1426
+ 0,
1427
+ 0,
1428
+ 0
1429
+ ]
1430
+ }
1431
+ },
1432
+ {
1433
+ "host": [
1434
+ 3266576384,
1435
+ 0,
1436
+ 0
1437
+ ],
1438
+ "rust": {
1439
+ "output": [
1440
+ 3266576384,
1441
+ 0,
1442
+ 0
1443
+ ]
1444
+ },
1445
+ "source": {
1446
+ "output": [
1447
+ 3266576384,
1448
+ 0,
1449
+ 0
1450
+ ]
1451
+ }
1452
+ },
1453
+ {
1454
+ "host": [
1455
+ 3266576384,
1456
+ 0,
1457
+ 0
1458
+ ],
1459
+ "rust": {
1460
+ "output": [
1461
+ 3266576384,
1462
+ 0,
1463
+ 0
1464
+ ]
1465
+ },
1466
+ "source": {
1467
+ "output": [
1468
+ 3266576384,
1469
+ 0,
1470
+ 0
1471
+ ]
1472
+ }
1473
+ },
1474
+ {
1475
+ "host": [
1476
+ 3266576384,
1477
+ 0,
1478
+ 0
1479
+ ],
1480
+ "rust": {
1481
+ "output": [
1482
+ 3266576384,
1483
+ 0,
1484
+ 0
1485
+ ]
1486
+ },
1487
+ "source": {
1488
+ "output": [
1489
+ 3266576384,
1490
+ 0,
1491
+ 0
1492
+ ]
1493
+ }
1494
+ },
1495
+ {
1496
+ "host": [
1497
+ 3266576384,
1498
+ 0,
1499
+ 0
1500
+ ],
1501
+ "rust": {
1502
+ "output": [
1503
+ 3266576384,
1504
+ 0,
1505
+ 0
1506
+ ]
1507
+ },
1508
+ "source": {
1509
+ "output": [
1510
+ 3266576384,
1511
+ 0,
1512
+ 0
1513
+ ]
1514
+ }
1515
+ },
1516
+ {
1517
+ "host": [
1518
+ 3255635663,
1519
+ 1134395392,
1520
+ 0
1521
+ ],
1522
+ "rust": {
1523
+ "output": [
1524
+ 3255635663,
1525
+ 1134395392,
1526
+ 0
1527
+ ]
1528
+ },
1529
+ "source": {
1530
+ "output": [
1531
+ 3255635663,
1532
+ 1134395392,
1533
+ 0
1534
+ ]
1535
+ }
1536
+ },
1537
+ {
1538
+ "host": [
1539
+ 3255635663,
1540
+ 1134395392,
1541
+ 0
1542
+ ],
1543
+ "rust": {
1544
+ "output": [
1545
+ 3255635663,
1546
+ 1134395392,
1547
+ 0
1548
+ ]
1549
+ },
1550
+ "source": {
1551
+ "output": [
1552
+ 3255635663,
1553
+ 1134395392,
1554
+ 0
1555
+ ]
1556
+ }
1557
+ },
1558
+ {
1559
+ "host": [
1560
+ 3255635663,
1561
+ 1134395392,
1562
+ 0
1563
+ ],
1564
+ "rust": {
1565
+ "output": [
1566
+ 3255635663,
1567
+ 1134395392,
1568
+ 0
1569
+ ]
1570
+ },
1571
+ "source": {
1572
+ "output": [
1573
+ 3255635663,
1574
+ 1134395392,
1575
+ 0
1576
+ ]
1577
+ }
1578
+ },
1579
+ {
1580
+ "host": [
1581
+ 3255635663,
1582
+ 1134395392,
1583
+ 0
1584
+ ],
1585
+ "rust": {
1586
+ "output": [
1587
+ 3255635663,
1588
+ 1134395392,
1589
+ 0
1590
+ ]
1591
+ },
1592
+ "source": {
1593
+ "output": [
1594
+ 3255635663,
1595
+ 1134395392,
1596
+ 0
1597
+ ]
1598
+ }
1599
+ },
1600
+ {
1601
+ "host": [
1602
+ 3073106730,
1603
+ 912600803,
1604
+ 0
1605
+ ],
1606
+ "rust": {
1607
+ "output": [
1608
+ 3073106730,
1609
+ 912600803,
1610
+ 0
1611
+ ]
1612
+ },
1613
+ "source": {
1614
+ "output": [
1615
+ 3073106730,
1616
+ 912600803,
1617
+ 0
1618
+ ]
1619
+ }
1620
+ },
1621
+ {
1622
+ "host": [
1623
+ 3073106730,
1624
+ 912600803,
1625
+ 0
1626
+ ],
1627
+ "rust": {
1628
+ "output": [
1629
+ 3073106730,
1630
+ 912600803,
1631
+ 0
1632
+ ]
1633
+ },
1634
+ "source": {
1635
+ "output": [
1636
+ 3073106730,
1637
+ 912600803,
1638
+ 0
1639
+ ]
1640
+ }
1641
+ },
1642
+ {
1643
+ "host": [
1644
+ 3073106730,
1645
+ 912600803,
1646
+ 0
1647
+ ],
1648
+ "rust": {
1649
+ "output": [
1650
+ 3073106730,
1651
+ 912600803,
1652
+ 0
1653
+ ]
1654
+ },
1655
+ "source": {
1656
+ "output": [
1657
+ 3073106730,
1658
+ 912600803,
1659
+ 0
1660
+ ]
1661
+ }
1662
+ },
1663
+ {
1664
+ "host": [
1665
+ 3073106730,
1666
+ 912600803,
1667
+ 0
1668
+ ],
1669
+ "rust": {
1670
+ "output": [
1671
+ 3073106730,
1672
+ 912600803,
1673
+ 0
1674
+ ]
1675
+ },
1676
+ "source": {
1677
+ "output": [
1678
+ 3073106730,
1679
+ 912600803,
1680
+ 0
1681
+ ]
1682
+ }
1683
+ },
1684
+ {
1685
+ "host": [
1686
+ 3260363774,
1687
+ 1115536740,
1688
+ 0
1689
+ ],
1690
+ "rust": {
1691
+ "output": [
1692
+ 3260363774,
1693
+ 1115536740,
1694
+ 0
1695
+ ]
1696
+ },
1697
+ "source": {
1698
+ "output": [
1699
+ 3260363774,
1700
+ 1115536740,
1701
+ 0
1702
+ ]
1703
+ }
1704
+ },
1705
+ {
1706
+ "host": [
1707
+ 3260363774,
1708
+ 1115536740,
1709
+ 0
1710
+ ],
1711
+ "rust": {
1712
+ "output": [
1713
+ 3260363774,
1714
+ 1115536740,
1715
+ 0
1716
+ ]
1717
+ },
1718
+ "source": {
1719
+ "output": [
1720
+ 3260363774,
1721
+ 1115536740,
1722
+ 0
1723
+ ]
1724
+ }
1725
+ },
1726
+ {
1727
+ "host": [
1728
+ 3260363774,
1729
+ 1115536740,
1730
+ 0
1731
+ ],
1732
+ "rust": {
1733
+ "output": [
1734
+ 3260363774,
1735
+ 1115536740,
1736
+ 0
1737
+ ]
1738
+ },
1739
+ "source": {
1740
+ "output": [
1741
+ 3260363774,
1742
+ 1115536740,
1743
+ 0
1744
+ ]
1745
+ }
1746
+ },
1747
+ {
1748
+ "host": [
1749
+ 3260363774,
1750
+ 1115536740,
1751
+ 0
1752
+ ],
1753
+ "rust": {
1754
+ "output": [
1755
+ 3260363774,
1756
+ 1115536740,
1757
+ 0
1758
+ ]
1759
+ },
1760
+ "source": {
1761
+ "output": [
1762
+ 3260363774,
1763
+ 1115536740,
1764
+ 0
1765
+ ]
1766
+ }
1767
+ },
1768
+ {
1769
+ "host": [
1770
+ 3281607040,
1771
+ 1131638617,
1772
+ 0
1773
+ ],
1774
+ "rust": {
1775
+ "output": [
1776
+ 3281607040,
1777
+ 1131638617,
1778
+ 0
1779
+ ]
1780
+ },
1781
+ "source": {
1782
+ "output": [
1783
+ 3281607040,
1784
+ 1131638617,
1785
+ 0
1786
+ ]
1787
+ }
1788
+ },
1789
+ {
1790
+ "host": [
1791
+ 3281607040,
1792
+ 1131638617,
1793
+ 0
1794
+ ],
1795
+ "rust": {
1796
+ "output": [
1797
+ 3281607040,
1798
+ 1131638617,
1799
+ 0
1800
+ ]
1801
+ },
1802
+ "source": {
1803
+ "output": [
1804
+ 3281607040,
1805
+ 1131638617,
1806
+ 0
1807
+ ]
1808
+ }
1809
+ },
1810
+ {
1811
+ "host": [
1812
+ 3281607040,
1813
+ 1131638617,
1814
+ 0
1815
+ ],
1816
+ "rust": {
1817
+ "output": [
1818
+ 3281607040,
1819
+ 1131638617,
1820
+ 0
1821
+ ]
1822
+ },
1823
+ "source": {
1824
+ "output": [
1825
+ 3281607040,
1826
+ 1131638617,
1827
+ 0
1828
+ ]
1829
+ }
1830
+ },
1831
+ {
1832
+ "host": [
1833
+ 3281607040,
1834
+ 1131638617,
1835
+ 0
1836
+ ],
1837
+ "rust": {
1838
+ "output": [
1839
+ 3281607040,
1840
+ 1131638617,
1841
+ 0
1842
+ ]
1843
+ },
1844
+ "source": {
1845
+ "output": [
1846
+ 3281607040,
1847
+ 1131638617,
1848
+ 0
1849
+ ]
1850
+ }
1851
+ },
1852
+ {
1853
+ "host": [
1854
+ 2147483648,
1855
+ 1110704128,
1856
+ 0
1857
+ ],
1858
+ "rust": {
1859
+ "output": [
1860
+ 2147483648,
1861
+ 1110704128,
1862
+ 0
1863
+ ]
1864
+ },
1865
+ "source": {
1866
+ "output": [
1867
+ 2147483648,
1868
+ 1110704128,
1869
+ 0
1870
+ ]
1871
+ }
1872
+ },
1873
+ {
1874
+ "host": [
1875
+ 2147483648,
1876
+ 1110704128,
1877
+ 0
1878
+ ],
1879
+ "rust": {
1880
+ "output": [
1881
+ 2147483648,
1882
+ 1110704128,
1883
+ 0
1884
+ ]
1885
+ },
1886
+ "source": {
1887
+ "output": [
1888
+ 2147483648,
1889
+ 1110704128,
1890
+ 0
1891
+ ]
1892
+ }
1893
+ },
1894
+ {
1895
+ "host": [
1896
+ 2147483648,
1897
+ 1110704128,
1898
+ 0
1899
+ ],
1900
+ "rust": {
1901
+ "output": [
1902
+ 2147483648,
1903
+ 1110704128,
1904
+ 0
1905
+ ]
1906
+ },
1907
+ "source": {
1908
+ "output": [
1909
+ 2147483648,
1910
+ 1110704128,
1911
+ 0
1912
+ ]
1913
+ }
1914
+ },
1915
+ {
1916
+ "host": [
1917
+ 2147483648,
1918
+ 1110704128,
1919
+ 0
1920
+ ],
1921
+ "rust": {
1922
+ "output": [
1923
+ 2147483648,
1924
+ 1110704128,
1925
+ 0
1926
+ ]
1927
+ },
1928
+ "source": {
1929
+ "output": [
1930
+ 2147483648,
1931
+ 1110704128,
1932
+ 0
1933
+ ]
1934
+ }
1935
+ },
1936
+ {
1937
+ "host": [
1938
+ 3258966052,
1939
+ 1134024788,
1940
+ 0
1941
+ ],
1942
+ "rust": {
1943
+ "output": [
1944
+ 3258966052,
1945
+ 1134024788,
1946
+ 0
1947
+ ]
1948
+ },
1949
+ "source": {
1950
+ "output": [
1951
+ 3258966052,
1952
+ 1134024788,
1953
+ 0
1954
+ ]
1955
+ }
1956
+ },
1957
+ {
1958
+ "host": [
1959
+ 3258966052,
1960
+ 1134024788,
1961
+ 0
1962
+ ],
1963
+ "rust": {
1964
+ "output": [
1965
+ 3258966052,
1966
+ 1134024788,
1967
+ 0
1968
+ ]
1969
+ },
1970
+ "source": {
1971
+ "output": [
1972
+ 3258966052,
1973
+ 1134024788,
1974
+ 0
1975
+ ]
1976
+ }
1977
+ },
1978
+ {
1979
+ "host": [
1980
+ 3258966052,
1981
+ 1134024788,
1982
+ 0
1983
+ ],
1984
+ "rust": {
1985
+ "output": [
1986
+ 3258966052,
1987
+ 1134024788,
1988
+ 0
1989
+ ]
1990
+ },
1991
+ "source": {
1992
+ "output": [
1993
+ 3258966052,
1994
+ 1134024788,
1995
+ 0
1996
+ ]
1997
+ }
1998
+ },
1999
+ {
2000
+ "host": [
2001
+ 3258966052,
2002
+ 1134024788,
2003
+ 0
2004
+ ],
2005
+ "rust": {
2006
+ "output": [
2007
+ 3258966052,
2008
+ 1134024788,
2009
+ 0
2010
+ ]
2011
+ },
2012
+ "source": {
2013
+ "output": [
2014
+ 3258966052,
2015
+ 1134024788,
2016
+ 0
2017
+ ]
2018
+ }
2019
+ }
2020
+ ],
2021
+ "source_report": "docs/research/qvm-camera-angles.json",
2022
+ "source_report_sha256": "77e64b205b97da9fc5ccf7be8847d5724fabe38ee2913d1f5ed8ebc95d4f4c33"
2023
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 115,
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": 117,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
scripts/analyze_rust_camera_angles.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import hashlib,json
3
+ from pathlib import Path
4
+ from rust_camera_world_support import binary,result,invoke
5
+ from analyze_qvm import write_json
6
+ def encode(s):return [*s['input'],len(s['math']),*[v for m in s['math'] for v in [m['target'],m['arguments']['8'],m['arguments'].get('12',0),m['result']]]]
7
+ def project(s):return {'output':s['output']}
8
+ def main():
9
+ b=binary();p=Path('docs/research/qvm-camera-angles.json');data=p.read_bytes();rows=[]
10
+ for s in json.loads(data)['probes']:
11
+ r=result(b,'angles',encode(s));rows.append({'source':project(s),'rust':{'output':r['output']},'host':r['host']})
12
+ write_json(Path('docs/research/rust-camera-angles.json'),{'source_report':str(p),'source_report_sha256':hashlib.sha256(data).hexdigest(),'probes':rows,'limits':'Rust matches 96 corrected source angle cases exactly through checked math transcripts. A separate host-math path is compared within four f32 ULPs, preserving source staging and signed-zero behavior. Safe nonfinite domains and stale math transcripts reject; original native atan2/sqrt bit parity remains unverified.'})
13
+ if __name__=='__main__':main()
scripts/test_rust_camera_angles.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib,json,unittest
2
+ from pathlib import Path
3
+ class PortTests(unittest.TestCase):
4
+ def test_all_original_cases(self):
5
+ r=json.loads(Path('docs/research/rust-camera-angles.json').read_text());src=json.loads(Path(r['source_report']).read_text());self.assertEqual(len(r['probes']),len(src['probes']));self.assertGreater(len(r['probes']),20)
6
+ for p in r['probes']:
7
+ self.assertEqual(p['rust'],p['source'])
8
+ for a,b in zip(p['host'],p['source']['output']):self.assertLessEqual(abs(a-b),4)
9
+ def test_source_identity(self):
10
+ r=json.loads(Path('docs/research/rust-camera-angles.json').read_text());self.assertEqual(hashlib.sha256(Path(r['source_report']).read_bytes()).hexdigest(),r['source_report_sha256'])
11
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -2391,3 +2391,16 @@ report scripts/analyze_qvm_camera_angles.py docs/research/qvm-camera-angles.json
2391
  edge docs/research/qvm-camera-angles.json scripts/test_qvm_camera_angles.py
2392
  group camera-angles scripts/analyze_qvm_camera_angles.py
2393
  edge scripts/analyze_qvm_camera_angles.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2391
  edge docs/research/qvm-camera-angles.json scripts/test_qvm_camera_angles.py
2392
  group camera-angles scripts/analyze_qvm_camera_angles.py
2393
  edge scripts/analyze_qvm_camera_angles.py scripts/analyze_qvm_resumer_audit.py
2394
+ edge Cargo.toml scripts/analyze_rust_camera_angles.py
2395
+ edge Cargo.lock scripts/analyze_rust_camera_angles.py
2396
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_camera_angles.py
2397
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_camera_angles.py
2398
+ edge crates/urt-gameplay/src/camera_world.rs scripts/analyze_rust_camera_angles.py
2399
+ edge crates/urt-gameplay/src/bin/urt-camera-world.rs scripts/analyze_rust_camera_angles.py
2400
+ edge docs/research/qvm-camera-angles.json scripts/analyze_rust_camera_angles.py
2401
+ group rust-camera-angles scripts/analyze_rust_health_impulse.py
2402
+ group gameplay scripts/analyze_rust_camera_angles.py
2403
+ report scripts/analyze_rust_camera_angles.py docs/research/rust-camera-angles.json
2404
+ edge docs/research/rust-camera-angles.json scripts/test_rust_camera_angles.py
2405
+ group rust-camera-angles scripts/analyze_rust_camera_angles.py
2406
+ edge scripts/analyze_rust_camera_angles.py scripts/analyze_qvm_resumer_audit.py