nmarshall commited on
Commit
0cdf16d
·
1 Parent(s): 9f649eb

gameplay: port saved-position write intentions

Browse files
crates/urt-gameplay/src/bin/urt-native-policy.rs CHANGED
@@ -383,6 +383,38 @@ fn run() -> Result<String, String> {
383
  list(&out.words)
384
  ))
385
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
386
  _ => Err("unknown command".into()),
387
  }
388
  }
@@ -565,3 +597,27 @@ fn input_blob(w: &[u32], p: &mut usize) -> Result<Option<Vec<u8>>, String> {
565
  *p += n;
566
  Ok(Some(v))
567
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
383
  list(&out.words)
384
  ))
385
  }
386
+ "save-position" => {
387
+ if w.len() < 10 {
388
+ return Err("missing save header".into());
389
+ }
390
+ let mut p = 10;
391
+ let info = input_blob(&w, &mut p)?.ok_or("null info")?;
392
+ let map = input_blob(&w, &mut p)?.ok_or("null map")?;
393
+ let name = input_blob(&w, &mut p)?.ok_or("null name")?;
394
+ if p != w.len() {
395
+ return Err("trailing save words".into());
396
+ }
397
+ let mut ring = 0;
398
+ let out = save_position(
399
+ PositionInput {
400
+ mode: w[0] as i32,
401
+ enabled: w[1] as i32,
402
+ slot: w[2] as usize,
403
+ handle: w[3],
404
+ values: w[4..10].try_into().unwrap(),
405
+ userinfo: &info,
406
+ mapname: &map,
407
+ name: &name,
408
+ },
409
+ &mut ring,
410
+ )
411
+ .map_err(|e| format!("{e:?}"))?;
412
+ Ok(format!(
413
+ "{{\"events\":{},\"ring\":{},\"info_ring\":{ring}}}",
414
+ position_events(&out.events),
415
+ out.ring_advance
416
+ ))
417
+ }
418
  _ => Err("unknown command".into()),
419
  }
420
  }
 
597
  *p += n;
598
  Ok(Some(v))
599
  }
600
+
601
+ fn position_events(events: &[PositionEvent]) -> String {
602
+ format!(
603
+ "[{}]",
604
+ events
605
+ .iter()
606
+ .map(|e| match e {
607
+ PositionEvent::Userinfo(slot) => format!("{{\"op\":\"userinfo\",\"slot\":{slot}}}"),
608
+ PositionEvent::Map => "{\"op\":\"map\"}".into(),
609
+ PositionEvent::Open { path, mode } => format!(
610
+ "{{\"op\":\"open\",\"path\":\"{}\",\"mode\":{mode}}}",
611
+ hex(path)
612
+ ),
613
+ PositionEvent::Write { handle, data } => format!(
614
+ "{{\"op\":\"write\",\"handle\":{handle},\"length\":{},\"data\":\"{}\"}}",
615
+ data.len(),
616
+ hex(data)
617
+ ),
618
+ PositionEvent::Close(handle) => format!("{{\"op\":\"close\",\"handle\":{handle}}}"),
619
+ })
620
+ .collect::<Vec<String>>()
621
+ .join(",")
622
+ )
623
+ }
crates/urt-gameplay/src/native_policy.rs CHANGED
@@ -889,3 +889,139 @@ mod scan_tests {
889
  );
890
  }
891
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
889
  );
890
  }
891
  }
892
+
893
+ #[derive(Clone, Debug, PartialEq, Eq)]
894
+ pub enum PositionEvent {
895
+ Userinfo(usize),
896
+ Map,
897
+ Open { path: Vec<u8>, mode: u32 },
898
+ Write { handle: u32, data: Vec<u8> },
899
+ Close(u32),
900
+ }
901
+ #[derive(Clone, Debug, PartialEq, Eq)]
902
+ pub struct PositionIo {
903
+ pub events: Vec<PositionEvent>,
904
+ pub ring_advance: u32,
905
+ }
906
+ pub struct PositionInput<'a> {
907
+ pub mode: i32,
908
+ pub enabled: i32,
909
+ pub slot: usize,
910
+ pub userinfo: &'a [u8],
911
+ pub mapname: &'a [u8],
912
+ pub name: &'a [u8],
913
+ pub values: [u32; 6],
914
+ pub handle: u32,
915
+ }
916
+ fn cbytes(v: &[u8]) -> &[u8] {
917
+ v.split(|x| *x == 0).next().unwrap_or_default()
918
+ }
919
+ fn position_path(map: &[u8], guid: &[u8]) -> Vec<u8> {
920
+ let map = cbytes(map);
921
+ let mut out = b"positions/".to_vec();
922
+ out.extend_from_slice(&map[..map.len().min(63)]);
923
+ out.push(b'/');
924
+ out.extend_from_slice(guid);
925
+ out.extend_from_slice(b".pos");
926
+ out
927
+ }
928
+ /// Recovered246746 file intentions; the caller supplies the engine open handle.
929
+ pub fn save_position(input: PositionInput<'_>, info_ring: &mut u32) -> Result<PositionIo, Error> {
930
+ let mut out = PositionIo {
931
+ events: vec![],
932
+ ring_advance: 0,
933
+ };
934
+ if input.mode != 9 {
935
+ return Ok(out);
936
+ }
937
+ if input.slot >= 64 {
938
+ return Err(Error::InvalidIndex);
939
+ }
940
+ let mut staged = *info_ring;
941
+ let raw = cbytes(input.userinfo);
942
+ let guid = info_lookup(
943
+ Some(&raw[..raw.len().min(1023)]),
944
+ Some(b"cl_guid"),
945
+ &mut staged,
946
+ )?;
947
+ out.events.push(PositionEvent::Userinfo(input.slot));
948
+ if input.enabled >= 1
949
+ && !guid.value.is_empty()
950
+ && input.values[..3].iter().any(|v| f32::from_bits(*v) != 0.)
951
+ {
952
+ out.events.push(PositionEvent::Map);
953
+ out.events.push(PositionEvent::Open {
954
+ path: position_path(input.mapname, &guid.value),
955
+ mode: 1,
956
+ });
957
+ out.ring_advance = 1;
958
+ if input.handle != 0 {
959
+ let mut data = vec![];
960
+ for (j, v) in input.values.into_iter().enumerate() {
961
+ if j > 0 {
962
+ data.push(b',')
963
+ }
964
+ data.extend(
965
+ crate::qvm_format::floating(v, 0, None).map_err(|_| Error::InvalidInput)?,
966
+ );
967
+ }
968
+ data.push(b'\n');
969
+ data.extend_from_slice(cbytes(input.name));
970
+ if data.len() >= 1023 {
971
+ return Err(Error::InvalidInput);
972
+ }
973
+ out.events.push(PositionEvent::Write {
974
+ handle: input.handle,
975
+ data,
976
+ });
977
+ out.events.push(PositionEvent::Close(input.handle));
978
+ }
979
+ }
980
+ *info_ring = staged;
981
+ Ok(out)
982
+ }
983
+ #[cfg(test)]
984
+ mod save_position_tests {
985
+ use super::*;
986
+ #[test]
987
+ fn angle_only_negative_zero_does_not_open() {
988
+ let mut ring = 0;
989
+ let out = save_position(
990
+ PositionInput {
991
+ mode: 9,
992
+ enabled: 1,
993
+ slot: 0,
994
+ userinfo: b"\\cl_guid\\x",
995
+ mapname: b"m",
996
+ name: b"n",
997
+ values: [(-0f32).to_bits(), 0, 0, 1f32.to_bits(), 0, 0],
998
+ handle: 1,
999
+ },
1000
+ &mut ring,
1001
+ )
1002
+ .unwrap();
1003
+ assert_eq!(out.events, [PositionEvent::Userinfo(0)]);
1004
+ assert_eq!(ring, 1);
1005
+ }
1006
+ #[test]
1007
+ fn unsupported_format_does_not_commit_selector() {
1008
+ let mut ring = 0;
1009
+ assert_eq!(
1010
+ save_position(
1011
+ PositionInput {
1012
+ mode: 9,
1013
+ enabled: 1,
1014
+ slot: 0,
1015
+ userinfo: b"\\cl_guid\\x",
1016
+ mapname: b"m",
1017
+ name: b"n",
1018
+ values: [f32::INFINITY.to_bits(); 6],
1019
+ handle: 1
1020
+ },
1021
+ &mut ring
1022
+ ),
1023
+ Err(Error::InvalidInput)
1024
+ );
1025
+ assert_eq!(ring, 0);
1026
+ }
1027
+ }
docs/FINDINGS.md CHANGED
@@ -1694,3 +1694,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
1694
 
1695
 
1696
  **RE-898:** 96 actual246746 cases execute70503/69386/36038,70458/37914,70386 and float formatting. Mode9, enabled>=1, nonempty cl_guid and nonzero position gate file writes; angles alone do not. Mapname truncates63 bytes and GUID bytes pass into positions/map/GUID.pos without sanitization in this body. Open return is ignored; a nonzero supplied handle leads to exact float/name bytes, write then close. Engine buffers, native strncpy and file effects remain supplied/modeled/captured. [Evidence](research/QVM_POSITION_SAVE.md).
 
 
 
 
1694
 
1695
 
1696
  **RE-898:** 96 actual246746 cases execute70503/69386/36038,70458/37914,70386 and float formatting. Mode9, enabled>=1, nonempty cl_guid and nonzero position gate file writes; angles alone do not. Mapname truncates63 bytes and GUID bytes pass into positions/map/GUID.pos without sanitization in this body. Open return is ignored; a nonzero supplied handle leads to exact float/name bytes, write then close. Engine buffers, native strncpy and file effects remain supplied/modeled/captured. [Evidence](research/QVM_POSITION_SAVE.md).
1697
+
1698
+
1699
+ **RE-899:** Rust matches96 original246746 cases with recovered userinfo, path construction and floating formatter bytes. Mode/enabled/position gates,63-byte map truncation, unsanitized GUID path bytes, ignored open return and write/close ordering are preserved. Typed unsupported format errors preserve the selector. Engine userinfo, native files and unsafe paths/ABI ownership remain open. [Evidence](research/RUST_POSITION_SAVE.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1728,3 +1728,6 @@ RE-897: Rust matches72 actual38326/38355/37159/36779 cases, preserving digits-on
1728
 
1729
 
1730
  RE-898: 96 actual246746 cases execute70503/69386/36038,70458/37914,70386 and float formatting. Mode9, enabled>=1, nonempty cl_guid and nonzero position gate file writes; angles alone do not. Mapname truncates63 bytes and GUID bytes pass into positions/map/GUID.pos without sanitization in this body. Open return is ignored; a nonzero supplied handle leads to exact float/name bytes, write then close. Engine buffers, native strncpy and file effects remain supplied/modeled/captured. Full runtime completion remains open. [Evidence](research/QVM_POSITION_SAVE.md).
 
 
 
 
1728
 
1729
 
1730
  RE-898: 96 actual246746 cases execute70503/69386/36038,70458/37914,70386 and float formatting. Mode9, enabled>=1, nonempty cl_guid and nonzero position gate file writes; angles alone do not. Mapname truncates63 bytes and GUID bytes pass into positions/map/GUID.pos without sanitization in this body. Open return is ignored; a nonzero supplied handle leads to exact float/name bytes, write then close. Engine buffers, native strncpy and file effects remain supplied/modeled/captured. Full runtime completion remains open. [Evidence](research/QVM_POSITION_SAVE.md).
1731
+
1732
+
1733
+ RE-899: Rust matches96 original246746 cases with recovered userinfo, path construction and floating formatter bytes. Mode/enabled/position gates,63-byte map truncation, unsanitized GUID path bytes, ignored open return and write/close ordering are preserved. Typed unsupported format errors preserve the selector. Engine userinfo, native files and unsafe paths/ABI ownership remain open. Full runtime completion remains open. [Evidence](research/RUST_POSITION_SAVE.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2205,3 +2205,8 @@ Rust matches72 actual38326/38355/37159/36779 cases, preserving digits-only integ
2205
  ## 2026-10-28 — RE-898 Original saved-position write and file ownership
2206
 
2207
  96 actual246746 cases execute70503/69386/36038,70458/37914,70386 and float formatting. Mode9, enabled>=1, nonempty cl_guid and nonzero position gate file writes; angles alone do not. Mapname truncates63 bytes and GUID bytes pass into positions/map/GUID.pos without sanitization in this body. Open return is ignored; a nonzero supplied handle leads to exact float/name bytes, write then close. Engine buffers, native strncpy and file effects remain supplied/modeled/captured. Focused `cargo xtask test-group qvm-position-save` passes (4 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.
 
 
 
 
 
 
2205
  ## 2026-10-28 — RE-898 Original saved-position write and file ownership
2206
 
2207
  96 actual246746 cases execute70503/69386/36038,70458/37914,70386 and float formatting. Mode9, enabled>=1, nonempty cl_guid and nonzero position gate file writes; angles alone do not. Mapname truncates63 bytes and GUID bytes pass into positions/map/GUID.pos without sanitization in this body. Open return is ignored; a nonzero supplied handle leads to exact float/name bytes, write then close. Engine buffers, native strncpy and file effects remain supplied/modeled/captured. Focused `cargo xtask test-group qvm-position-save` passes (4 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.
2208
+
2209
+
2210
+ ## 2026-10-28 — RE-899 Rust saved-position write and handle intentions
2211
+
2212
+ Rust matches96 original246746 cases with recovered userinfo, path construction and floating formatter bytes. Mode/enabled/position gates,63-byte map truncation, unsanitized GUID path bytes, ignored open return and write/close ordering are preserved. Typed unsupported format errors preserve the selector. Engine userinfo, native files and unsafe paths/ABI ownership remain open. Focused `cargo xtask test-group rust-position-save` 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
@@ -1765,3 +1765,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1765
 
1766
 
1767
  - [x] RE-898 Original saved-position write and file ownership ([evidence](research/QVM_POSITION_SAVE.md)).
 
 
 
 
1765
 
1766
 
1767
  - [x] RE-898 Original saved-position write and file ownership ([evidence](research/QVM_POSITION_SAVE.md)).
1768
+
1769
+
1770
+ - [x] RE-899 Rust saved-position write and handle intentions ([evidence](research/RUST_POSITION_SAVE.md)).
docs/research/README.md CHANGED
@@ -1300,3 +1300,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1300
 
1301
 
1302
  [RE-898: Original saved-position write and file ownership](QVM_POSITION_SAVE.md).
 
 
 
 
1300
 
1301
 
1302
  [RE-898: Original saved-position write and file ownership](QVM_POSITION_SAVE.md).
1303
+
1304
+
1305
+ [RE-899: Rust saved-position write and handle intentions](RUST_POSITION_SAVE.md).
docs/research/RUST_POSITION_SAVE.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Rust saved-position write and handle intentions
2
+
3
+ RE-899. Reproduce with `python3 scripts/analyze_rust_position_save.py`; focused validation: `cargo xtask test-group rust-position-save`. [Machine report](rust-position-save.json).
4
+
5
+ Rust matches96 original246746 cases with recovered userinfo, path construction and floating formatter bytes. Mode/enabled/position gates,63-byte map truncation, unsanitized GUID path bytes, ignored open return and write/close ordering are preserved. Typed unsupported format errors preserve the selector. Engine userinfo, native files and unsafe paths/ABI ownership remain open.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 152,
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": 154,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
docs/research/rust-position-save.json ADDED
@@ -0,0 +1,1743 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Rust matches96 original246746 cases with recovered userinfo, path construction and floating formatter bytes. Mode/enabled/position gates,63-byte map truncation, unsanitized GUID path bytes, ignored open return and write/close ordering are preserved. Typed unsupported format errors preserve the selector. Engine userinfo, native files and unsafe paths/ABI ownership remain open.",
3
+ "probes": [
4
+ {
5
+ "rust": {
6
+ "events": [],
7
+ "info_ring": 0,
8
+ "ring": 0
9
+ },
10
+ "source": {
11
+ "events": [],
12
+ "info_ring": 0,
13
+ "ring": 0
14
+ }
15
+ },
16
+ {
17
+ "rust": {
18
+ "events": [],
19
+ "info_ring": 0,
20
+ "ring": 0
21
+ },
22
+ "source": {
23
+ "events": [],
24
+ "info_ring": 0,
25
+ "ring": 0
26
+ }
27
+ },
28
+ {
29
+ "rust": {
30
+ "events": [],
31
+ "info_ring": 0,
32
+ "ring": 0
33
+ },
34
+ "source": {
35
+ "events": [],
36
+ "info_ring": 0,
37
+ "ring": 0
38
+ }
39
+ },
40
+ {
41
+ "rust": {
42
+ "events": [],
43
+ "info_ring": 0,
44
+ "ring": 0
45
+ },
46
+ "source": {
47
+ "events": [],
48
+ "info_ring": 0,
49
+ "ring": 0
50
+ }
51
+ },
52
+ {
53
+ "rust": {
54
+ "events": [],
55
+ "info_ring": 0,
56
+ "ring": 0
57
+ },
58
+ "source": {
59
+ "events": [],
60
+ "info_ring": 0,
61
+ "ring": 0
62
+ }
63
+ },
64
+ {
65
+ "rust": {
66
+ "events": [],
67
+ "info_ring": 0,
68
+ "ring": 0
69
+ },
70
+ "source": {
71
+ "events": [],
72
+ "info_ring": 0,
73
+ "ring": 0
74
+ }
75
+ },
76
+ {
77
+ "rust": {
78
+ "events": [],
79
+ "info_ring": 0,
80
+ "ring": 0
81
+ },
82
+ "source": {
83
+ "events": [],
84
+ "info_ring": 0,
85
+ "ring": 0
86
+ }
87
+ },
88
+ {
89
+ "rust": {
90
+ "events": [],
91
+ "info_ring": 0,
92
+ "ring": 0
93
+ },
94
+ "source": {
95
+ "events": [],
96
+ "info_ring": 0,
97
+ "ring": 0
98
+ }
99
+ },
100
+ {
101
+ "rust": {
102
+ "events": [],
103
+ "info_ring": 0,
104
+ "ring": 0
105
+ },
106
+ "source": {
107
+ "events": [],
108
+ "info_ring": 0,
109
+ "ring": 0
110
+ }
111
+ },
112
+ {
113
+ "rust": {
114
+ "events": [],
115
+ "info_ring": 0,
116
+ "ring": 0
117
+ },
118
+ "source": {
119
+ "events": [],
120
+ "info_ring": 0,
121
+ "ring": 0
122
+ }
123
+ },
124
+ {
125
+ "rust": {
126
+ "events": [],
127
+ "info_ring": 0,
128
+ "ring": 0
129
+ },
130
+ "source": {
131
+ "events": [],
132
+ "info_ring": 0,
133
+ "ring": 0
134
+ }
135
+ },
136
+ {
137
+ "rust": {
138
+ "events": [],
139
+ "info_ring": 0,
140
+ "ring": 0
141
+ },
142
+ "source": {
143
+ "events": [],
144
+ "info_ring": 0,
145
+ "ring": 0
146
+ }
147
+ },
148
+ {
149
+ "rust": {
150
+ "events": [],
151
+ "info_ring": 0,
152
+ "ring": 0
153
+ },
154
+ "source": {
155
+ "events": [],
156
+ "info_ring": 0,
157
+ "ring": 0
158
+ }
159
+ },
160
+ {
161
+ "rust": {
162
+ "events": [],
163
+ "info_ring": 0,
164
+ "ring": 0
165
+ },
166
+ "source": {
167
+ "events": [],
168
+ "info_ring": 0,
169
+ "ring": 0
170
+ }
171
+ },
172
+ {
173
+ "rust": {
174
+ "events": [],
175
+ "info_ring": 0,
176
+ "ring": 0
177
+ },
178
+ "source": {
179
+ "events": [],
180
+ "info_ring": 0,
181
+ "ring": 0
182
+ }
183
+ },
184
+ {
185
+ "rust": {
186
+ "events": [],
187
+ "info_ring": 0,
188
+ "ring": 0
189
+ },
190
+ "source": {
191
+ "events": [],
192
+ "info_ring": 0,
193
+ "ring": 0
194
+ }
195
+ },
196
+ {
197
+ "rust": {
198
+ "events": [],
199
+ "info_ring": 0,
200
+ "ring": 0
201
+ },
202
+ "source": {
203
+ "events": [],
204
+ "info_ring": 0,
205
+ "ring": 0
206
+ }
207
+ },
208
+ {
209
+ "rust": {
210
+ "events": [],
211
+ "info_ring": 0,
212
+ "ring": 0
213
+ },
214
+ "source": {
215
+ "events": [],
216
+ "info_ring": 0,
217
+ "ring": 0
218
+ }
219
+ },
220
+ {
221
+ "rust": {
222
+ "events": [],
223
+ "info_ring": 0,
224
+ "ring": 0
225
+ },
226
+ "source": {
227
+ "events": [],
228
+ "info_ring": 0,
229
+ "ring": 0
230
+ }
231
+ },
232
+ {
233
+ "rust": {
234
+ "events": [],
235
+ "info_ring": 0,
236
+ "ring": 0
237
+ },
238
+ "source": {
239
+ "events": [],
240
+ "info_ring": 0,
241
+ "ring": 0
242
+ }
243
+ },
244
+ {
245
+ "rust": {
246
+ "events": [],
247
+ "info_ring": 0,
248
+ "ring": 0
249
+ },
250
+ "source": {
251
+ "events": [],
252
+ "info_ring": 0,
253
+ "ring": 0
254
+ }
255
+ },
256
+ {
257
+ "rust": {
258
+ "events": [],
259
+ "info_ring": 0,
260
+ "ring": 0
261
+ },
262
+ "source": {
263
+ "events": [],
264
+ "info_ring": 0,
265
+ "ring": 0
266
+ }
267
+ },
268
+ {
269
+ "rust": {
270
+ "events": [],
271
+ "info_ring": 0,
272
+ "ring": 0
273
+ },
274
+ "source": {
275
+ "events": [],
276
+ "info_ring": 0,
277
+ "ring": 0
278
+ }
279
+ },
280
+ {
281
+ "rust": {
282
+ "events": [],
283
+ "info_ring": 0,
284
+ "ring": 0
285
+ },
286
+ "source": {
287
+ "events": [],
288
+ "info_ring": 0,
289
+ "ring": 0
290
+ }
291
+ },
292
+ {
293
+ "rust": {
294
+ "events": [],
295
+ "info_ring": 0,
296
+ "ring": 0
297
+ },
298
+ "source": {
299
+ "events": [],
300
+ "info_ring": 0,
301
+ "ring": 0
302
+ }
303
+ },
304
+ {
305
+ "rust": {
306
+ "events": [],
307
+ "info_ring": 0,
308
+ "ring": 0
309
+ },
310
+ "source": {
311
+ "events": [],
312
+ "info_ring": 0,
313
+ "ring": 0
314
+ }
315
+ },
316
+ {
317
+ "rust": {
318
+ "events": [],
319
+ "info_ring": 0,
320
+ "ring": 0
321
+ },
322
+ "source": {
323
+ "events": [],
324
+ "info_ring": 0,
325
+ "ring": 0
326
+ }
327
+ },
328
+ {
329
+ "rust": {
330
+ "events": [],
331
+ "info_ring": 0,
332
+ "ring": 0
333
+ },
334
+ "source": {
335
+ "events": [],
336
+ "info_ring": 0,
337
+ "ring": 0
338
+ }
339
+ },
340
+ {
341
+ "rust": {
342
+ "events": [],
343
+ "info_ring": 0,
344
+ "ring": 0
345
+ },
346
+ "source": {
347
+ "events": [],
348
+ "info_ring": 0,
349
+ "ring": 0
350
+ }
351
+ },
352
+ {
353
+ "rust": {
354
+ "events": [],
355
+ "info_ring": 0,
356
+ "ring": 0
357
+ },
358
+ "source": {
359
+ "events": [],
360
+ "info_ring": 0,
361
+ "ring": 0
362
+ }
363
+ },
364
+ {
365
+ "rust": {
366
+ "events": [],
367
+ "info_ring": 0,
368
+ "ring": 0
369
+ },
370
+ "source": {
371
+ "events": [],
372
+ "info_ring": 0,
373
+ "ring": 0
374
+ }
375
+ },
376
+ {
377
+ "rust": {
378
+ "events": [],
379
+ "info_ring": 0,
380
+ "ring": 0
381
+ },
382
+ "source": {
383
+ "events": [],
384
+ "info_ring": 0,
385
+ "ring": 0
386
+ }
387
+ },
388
+ {
389
+ "rust": {
390
+ "events": [],
391
+ "info_ring": 0,
392
+ "ring": 0
393
+ },
394
+ "source": {
395
+ "events": [],
396
+ "info_ring": 0,
397
+ "ring": 0
398
+ }
399
+ },
400
+ {
401
+ "rust": {
402
+ "events": [],
403
+ "info_ring": 0,
404
+ "ring": 0
405
+ },
406
+ "source": {
407
+ "events": [],
408
+ "info_ring": 0,
409
+ "ring": 0
410
+ }
411
+ },
412
+ {
413
+ "rust": {
414
+ "events": [],
415
+ "info_ring": 0,
416
+ "ring": 0
417
+ },
418
+ "source": {
419
+ "events": [],
420
+ "info_ring": 0,
421
+ "ring": 0
422
+ }
423
+ },
424
+ {
425
+ "rust": {
426
+ "events": [],
427
+ "info_ring": 0,
428
+ "ring": 0
429
+ },
430
+ "source": {
431
+ "events": [],
432
+ "info_ring": 0,
433
+ "ring": 0
434
+ }
435
+ },
436
+ {
437
+ "rust": {
438
+ "events": [],
439
+ "info_ring": 0,
440
+ "ring": 0
441
+ },
442
+ "source": {
443
+ "events": [],
444
+ "info_ring": 0,
445
+ "ring": 0
446
+ }
447
+ },
448
+ {
449
+ "rust": {
450
+ "events": [],
451
+ "info_ring": 0,
452
+ "ring": 0
453
+ },
454
+ "source": {
455
+ "events": [],
456
+ "info_ring": 0,
457
+ "ring": 0
458
+ }
459
+ },
460
+ {
461
+ "rust": {
462
+ "events": [],
463
+ "info_ring": 0,
464
+ "ring": 0
465
+ },
466
+ "source": {
467
+ "events": [],
468
+ "info_ring": 0,
469
+ "ring": 0
470
+ }
471
+ },
472
+ {
473
+ "rust": {
474
+ "events": [],
475
+ "info_ring": 0,
476
+ "ring": 0
477
+ },
478
+ "source": {
479
+ "events": [],
480
+ "info_ring": 0,
481
+ "ring": 0
482
+ }
483
+ },
484
+ {
485
+ "rust": {
486
+ "events": [],
487
+ "info_ring": 0,
488
+ "ring": 0
489
+ },
490
+ "source": {
491
+ "events": [],
492
+ "info_ring": 0,
493
+ "ring": 0
494
+ }
495
+ },
496
+ {
497
+ "rust": {
498
+ "events": [],
499
+ "info_ring": 0,
500
+ "ring": 0
501
+ },
502
+ "source": {
503
+ "events": [],
504
+ "info_ring": 0,
505
+ "ring": 0
506
+ }
507
+ },
508
+ {
509
+ "rust": {
510
+ "events": [],
511
+ "info_ring": 0,
512
+ "ring": 0
513
+ },
514
+ "source": {
515
+ "events": [],
516
+ "info_ring": 0,
517
+ "ring": 0
518
+ }
519
+ },
520
+ {
521
+ "rust": {
522
+ "events": [],
523
+ "info_ring": 0,
524
+ "ring": 0
525
+ },
526
+ "source": {
527
+ "events": [],
528
+ "info_ring": 0,
529
+ "ring": 0
530
+ }
531
+ },
532
+ {
533
+ "rust": {
534
+ "events": [],
535
+ "info_ring": 0,
536
+ "ring": 0
537
+ },
538
+ "source": {
539
+ "events": [],
540
+ "info_ring": 0,
541
+ "ring": 0
542
+ }
543
+ },
544
+ {
545
+ "rust": {
546
+ "events": [],
547
+ "info_ring": 0,
548
+ "ring": 0
549
+ },
550
+ "source": {
551
+ "events": [],
552
+ "info_ring": 0,
553
+ "ring": 0
554
+ }
555
+ },
556
+ {
557
+ "rust": {
558
+ "events": [],
559
+ "info_ring": 0,
560
+ "ring": 0
561
+ },
562
+ "source": {
563
+ "events": [],
564
+ "info_ring": 0,
565
+ "ring": 0
566
+ }
567
+ },
568
+ {
569
+ "rust": {
570
+ "events": [],
571
+ "info_ring": 0,
572
+ "ring": 0
573
+ },
574
+ "source": {
575
+ "events": [],
576
+ "info_ring": 0,
577
+ "ring": 0
578
+ }
579
+ },
580
+ {
581
+ "rust": {
582
+ "events": [
583
+ {
584
+ "op": "userinfo",
585
+ "slot": 3
586
+ }
587
+ ],
588
+ "info_ring": 1,
589
+ "ring": 0
590
+ },
591
+ "source": {
592
+ "events": [
593
+ {
594
+ "op": "userinfo",
595
+ "slot": 3
596
+ }
597
+ ],
598
+ "info_ring": 1,
599
+ "ring": 0
600
+ }
601
+ },
602
+ {
603
+ "rust": {
604
+ "events": [
605
+ {
606
+ "op": "userinfo",
607
+ "slot": 3
608
+ }
609
+ ],
610
+ "info_ring": 1,
611
+ "ring": 0
612
+ },
613
+ "source": {
614
+ "events": [
615
+ {
616
+ "op": "userinfo",
617
+ "slot": 3
618
+ }
619
+ ],
620
+ "info_ring": 1,
621
+ "ring": 0
622
+ }
623
+ },
624
+ {
625
+ "rust": {
626
+ "events": [
627
+ {
628
+ "op": "userinfo",
629
+ "slot": 3
630
+ }
631
+ ],
632
+ "info_ring": 1,
633
+ "ring": 0
634
+ },
635
+ "source": {
636
+ "events": [
637
+ {
638
+ "op": "userinfo",
639
+ "slot": 3
640
+ }
641
+ ],
642
+ "info_ring": 1,
643
+ "ring": 0
644
+ }
645
+ },
646
+ {
647
+ "rust": {
648
+ "events": [
649
+ {
650
+ "op": "userinfo",
651
+ "slot": 3
652
+ }
653
+ ],
654
+ "info_ring": 1,
655
+ "ring": 0
656
+ },
657
+ "source": {
658
+ "events": [
659
+ {
660
+ "op": "userinfo",
661
+ "slot": 3
662
+ }
663
+ ],
664
+ "info_ring": 1,
665
+ "ring": 0
666
+ }
667
+ },
668
+ {
669
+ "rust": {
670
+ "events": [
671
+ {
672
+ "op": "userinfo",
673
+ "slot": 3
674
+ }
675
+ ],
676
+ "info_ring": 1,
677
+ "ring": 0
678
+ },
679
+ "source": {
680
+ "events": [
681
+ {
682
+ "op": "userinfo",
683
+ "slot": 3
684
+ }
685
+ ],
686
+ "info_ring": 1,
687
+ "ring": 0
688
+ }
689
+ },
690
+ {
691
+ "rust": {
692
+ "events": [
693
+ {
694
+ "op": "userinfo",
695
+ "slot": 3
696
+ }
697
+ ],
698
+ "info_ring": 1,
699
+ "ring": 0
700
+ },
701
+ "source": {
702
+ "events": [
703
+ {
704
+ "op": "userinfo",
705
+ "slot": 3
706
+ }
707
+ ],
708
+ "info_ring": 1,
709
+ "ring": 0
710
+ }
711
+ },
712
+ {
713
+ "rust": {
714
+ "events": [
715
+ {
716
+ "op": "userinfo",
717
+ "slot": 3
718
+ }
719
+ ],
720
+ "info_ring": 1,
721
+ "ring": 0
722
+ },
723
+ "source": {
724
+ "events": [
725
+ {
726
+ "op": "userinfo",
727
+ "slot": 3
728
+ }
729
+ ],
730
+ "info_ring": 1,
731
+ "ring": 0
732
+ }
733
+ },
734
+ {
735
+ "rust": {
736
+ "events": [
737
+ {
738
+ "op": "userinfo",
739
+ "slot": 3
740
+ }
741
+ ],
742
+ "info_ring": 1,
743
+ "ring": 0
744
+ },
745
+ "source": {
746
+ "events": [
747
+ {
748
+ "op": "userinfo",
749
+ "slot": 3
750
+ }
751
+ ],
752
+ "info_ring": 1,
753
+ "ring": 0
754
+ }
755
+ },
756
+ {
757
+ "rust": {
758
+ "events": [
759
+ {
760
+ "op": "userinfo",
761
+ "slot": 3
762
+ }
763
+ ],
764
+ "info_ring": 1,
765
+ "ring": 0
766
+ },
767
+ "source": {
768
+ "events": [
769
+ {
770
+ "op": "userinfo",
771
+ "slot": 3
772
+ }
773
+ ],
774
+ "info_ring": 1,
775
+ "ring": 0
776
+ }
777
+ },
778
+ {
779
+ "rust": {
780
+ "events": [
781
+ {
782
+ "op": "userinfo",
783
+ "slot": 3
784
+ }
785
+ ],
786
+ "info_ring": 1,
787
+ "ring": 0
788
+ },
789
+ "source": {
790
+ "events": [
791
+ {
792
+ "op": "userinfo",
793
+ "slot": 3
794
+ }
795
+ ],
796
+ "info_ring": 1,
797
+ "ring": 0
798
+ }
799
+ },
800
+ {
801
+ "rust": {
802
+ "events": [
803
+ {
804
+ "op": "userinfo",
805
+ "slot": 3
806
+ }
807
+ ],
808
+ "info_ring": 1,
809
+ "ring": 0
810
+ },
811
+ "source": {
812
+ "events": [
813
+ {
814
+ "op": "userinfo",
815
+ "slot": 3
816
+ }
817
+ ],
818
+ "info_ring": 1,
819
+ "ring": 0
820
+ }
821
+ },
822
+ {
823
+ "rust": {
824
+ "events": [
825
+ {
826
+ "op": "userinfo",
827
+ "slot": 3
828
+ }
829
+ ],
830
+ "info_ring": 1,
831
+ "ring": 0
832
+ },
833
+ "source": {
834
+ "events": [
835
+ {
836
+ "op": "userinfo",
837
+ "slot": 3
838
+ }
839
+ ],
840
+ "info_ring": 1,
841
+ "ring": 0
842
+ }
843
+ },
844
+ {
845
+ "rust": {
846
+ "events": [
847
+ {
848
+ "op": "userinfo",
849
+ "slot": 3
850
+ }
851
+ ],
852
+ "info_ring": 1,
853
+ "ring": 0
854
+ },
855
+ "source": {
856
+ "events": [
857
+ {
858
+ "op": "userinfo",
859
+ "slot": 3
860
+ }
861
+ ],
862
+ "info_ring": 1,
863
+ "ring": 0
864
+ }
865
+ },
866
+ {
867
+ "rust": {
868
+ "events": [
869
+ {
870
+ "op": "userinfo",
871
+ "slot": 3
872
+ }
873
+ ],
874
+ "info_ring": 1,
875
+ "ring": 0
876
+ },
877
+ "source": {
878
+ "events": [
879
+ {
880
+ "op": "userinfo",
881
+ "slot": 3
882
+ }
883
+ ],
884
+ "info_ring": 1,
885
+ "ring": 0
886
+ }
887
+ },
888
+ {
889
+ "rust": {
890
+ "events": [
891
+ {
892
+ "op": "userinfo",
893
+ "slot": 3
894
+ }
895
+ ],
896
+ "info_ring": 1,
897
+ "ring": 0
898
+ },
899
+ "source": {
900
+ "events": [
901
+ {
902
+ "op": "userinfo",
903
+ "slot": 3
904
+ }
905
+ ],
906
+ "info_ring": 1,
907
+ "ring": 0
908
+ }
909
+ },
910
+ {
911
+ "rust": {
912
+ "events": [
913
+ {
914
+ "op": "userinfo",
915
+ "slot": 3
916
+ }
917
+ ],
918
+ "info_ring": 1,
919
+ "ring": 0
920
+ },
921
+ "source": {
922
+ "events": [
923
+ {
924
+ "op": "userinfo",
925
+ "slot": 3
926
+ }
927
+ ],
928
+ "info_ring": 1,
929
+ "ring": 0
930
+ }
931
+ },
932
+ {
933
+ "rust": {
934
+ "events": [
935
+ {
936
+ "op": "userinfo",
937
+ "slot": 3
938
+ }
939
+ ],
940
+ "info_ring": 1,
941
+ "ring": 0
942
+ },
943
+ "source": {
944
+ "events": [
945
+ {
946
+ "op": "userinfo",
947
+ "slot": 3
948
+ }
949
+ ],
950
+ "info_ring": 1,
951
+ "ring": 0
952
+ }
953
+ },
954
+ {
955
+ "rust": {
956
+ "events": [
957
+ {
958
+ "op": "userinfo",
959
+ "slot": 3
960
+ }
961
+ ],
962
+ "info_ring": 1,
963
+ "ring": 0
964
+ },
965
+ "source": {
966
+ "events": [
967
+ {
968
+ "op": "userinfo",
969
+ "slot": 3
970
+ }
971
+ ],
972
+ "info_ring": 1,
973
+ "ring": 0
974
+ }
975
+ },
976
+ {
977
+ "rust": {
978
+ "events": [
979
+ {
980
+ "op": "userinfo",
981
+ "slot": 3
982
+ }
983
+ ],
984
+ "info_ring": 1,
985
+ "ring": 0
986
+ },
987
+ "source": {
988
+ "events": [
989
+ {
990
+ "op": "userinfo",
991
+ "slot": 3
992
+ }
993
+ ],
994
+ "info_ring": 1,
995
+ "ring": 0
996
+ }
997
+ },
998
+ {
999
+ "rust": {
1000
+ "events": [
1001
+ {
1002
+ "op": "userinfo",
1003
+ "slot": 3
1004
+ }
1005
+ ],
1006
+ "info_ring": 1,
1007
+ "ring": 0
1008
+ },
1009
+ "source": {
1010
+ "events": [
1011
+ {
1012
+ "op": "userinfo",
1013
+ "slot": 3
1014
+ }
1015
+ ],
1016
+ "info_ring": 1,
1017
+ "ring": 0
1018
+ }
1019
+ },
1020
+ {
1021
+ "rust": {
1022
+ "events": [
1023
+ {
1024
+ "op": "userinfo",
1025
+ "slot": 3
1026
+ }
1027
+ ],
1028
+ "info_ring": 1,
1029
+ "ring": 0
1030
+ },
1031
+ "source": {
1032
+ "events": [
1033
+ {
1034
+ "op": "userinfo",
1035
+ "slot": 3
1036
+ }
1037
+ ],
1038
+ "info_ring": 1,
1039
+ "ring": 0
1040
+ }
1041
+ },
1042
+ {
1043
+ "rust": {
1044
+ "events": [
1045
+ {
1046
+ "op": "userinfo",
1047
+ "slot": 3
1048
+ }
1049
+ ],
1050
+ "info_ring": 1,
1051
+ "ring": 0
1052
+ },
1053
+ "source": {
1054
+ "events": [
1055
+ {
1056
+ "op": "userinfo",
1057
+ "slot": 3
1058
+ }
1059
+ ],
1060
+ "info_ring": 1,
1061
+ "ring": 0
1062
+ }
1063
+ },
1064
+ {
1065
+ "rust": {
1066
+ "events": [
1067
+ {
1068
+ "op": "userinfo",
1069
+ "slot": 3
1070
+ }
1071
+ ],
1072
+ "info_ring": 1,
1073
+ "ring": 0
1074
+ },
1075
+ "source": {
1076
+ "events": [
1077
+ {
1078
+ "op": "userinfo",
1079
+ "slot": 3
1080
+ }
1081
+ ],
1082
+ "info_ring": 1,
1083
+ "ring": 0
1084
+ }
1085
+ },
1086
+ {
1087
+ "rust": {
1088
+ "events": [
1089
+ {
1090
+ "op": "userinfo",
1091
+ "slot": 3
1092
+ }
1093
+ ],
1094
+ "info_ring": 1,
1095
+ "ring": 0
1096
+ },
1097
+ "source": {
1098
+ "events": [
1099
+ {
1100
+ "op": "userinfo",
1101
+ "slot": 3
1102
+ }
1103
+ ],
1104
+ "info_ring": 1,
1105
+ "ring": 0
1106
+ }
1107
+ },
1108
+ {
1109
+ "rust": {
1110
+ "events": [
1111
+ {
1112
+ "op": "userinfo",
1113
+ "slot": 3
1114
+ }
1115
+ ],
1116
+ "info_ring": 1,
1117
+ "ring": 0
1118
+ },
1119
+ "source": {
1120
+ "events": [
1121
+ {
1122
+ "op": "userinfo",
1123
+ "slot": 3
1124
+ }
1125
+ ],
1126
+ "info_ring": 1,
1127
+ "ring": 0
1128
+ }
1129
+ },
1130
+ {
1131
+ "rust": {
1132
+ "events": [
1133
+ {
1134
+ "op": "userinfo",
1135
+ "slot": 3
1136
+ }
1137
+ ],
1138
+ "info_ring": 1,
1139
+ "ring": 0
1140
+ },
1141
+ "source": {
1142
+ "events": [
1143
+ {
1144
+ "op": "userinfo",
1145
+ "slot": 3
1146
+ }
1147
+ ],
1148
+ "info_ring": 1,
1149
+ "ring": 0
1150
+ }
1151
+ },
1152
+ {
1153
+ "rust": {
1154
+ "events": [
1155
+ {
1156
+ "op": "userinfo",
1157
+ "slot": 3
1158
+ }
1159
+ ],
1160
+ "info_ring": 1,
1161
+ "ring": 0
1162
+ },
1163
+ "source": {
1164
+ "events": [
1165
+ {
1166
+ "op": "userinfo",
1167
+ "slot": 3
1168
+ }
1169
+ ],
1170
+ "info_ring": 1,
1171
+ "ring": 0
1172
+ }
1173
+ },
1174
+ {
1175
+ "rust": {
1176
+ "events": [
1177
+ {
1178
+ "op": "userinfo",
1179
+ "slot": 3
1180
+ }
1181
+ ],
1182
+ "info_ring": 1,
1183
+ "ring": 0
1184
+ },
1185
+ "source": {
1186
+ "events": [
1187
+ {
1188
+ "op": "userinfo",
1189
+ "slot": 3
1190
+ }
1191
+ ],
1192
+ "info_ring": 1,
1193
+ "ring": 0
1194
+ }
1195
+ },
1196
+ {
1197
+ "rust": {
1198
+ "events": [
1199
+ {
1200
+ "op": "userinfo",
1201
+ "slot": 3
1202
+ }
1203
+ ],
1204
+ "info_ring": 1,
1205
+ "ring": 0
1206
+ },
1207
+ "source": {
1208
+ "events": [
1209
+ {
1210
+ "op": "userinfo",
1211
+ "slot": 3
1212
+ }
1213
+ ],
1214
+ "info_ring": 1,
1215
+ "ring": 0
1216
+ }
1217
+ },
1218
+ {
1219
+ "rust": {
1220
+ "events": [
1221
+ {
1222
+ "op": "userinfo",
1223
+ "slot": 3
1224
+ }
1225
+ ],
1226
+ "info_ring": 1,
1227
+ "ring": 0
1228
+ },
1229
+ "source": {
1230
+ "events": [
1231
+ {
1232
+ "op": "userinfo",
1233
+ "slot": 3
1234
+ }
1235
+ ],
1236
+ "info_ring": 1,
1237
+ "ring": 0
1238
+ }
1239
+ },
1240
+ {
1241
+ "rust": {
1242
+ "events": [
1243
+ {
1244
+ "op": "userinfo",
1245
+ "slot": 3
1246
+ }
1247
+ ],
1248
+ "info_ring": 1,
1249
+ "ring": 0
1250
+ },
1251
+ "source": {
1252
+ "events": [
1253
+ {
1254
+ "op": "userinfo",
1255
+ "slot": 3
1256
+ }
1257
+ ],
1258
+ "info_ring": 1,
1259
+ "ring": 0
1260
+ }
1261
+ },
1262
+ {
1263
+ "rust": {
1264
+ "events": [
1265
+ {
1266
+ "op": "userinfo",
1267
+ "slot": 3
1268
+ }
1269
+ ],
1270
+ "info_ring": 1,
1271
+ "ring": 0
1272
+ },
1273
+ "source": {
1274
+ "events": [
1275
+ {
1276
+ "op": "userinfo",
1277
+ "slot": 3
1278
+ }
1279
+ ],
1280
+ "info_ring": 1,
1281
+ "ring": 0
1282
+ }
1283
+ },
1284
+ {
1285
+ "rust": {
1286
+ "events": [
1287
+ {
1288
+ "op": "userinfo",
1289
+ "slot": 3
1290
+ }
1291
+ ],
1292
+ "info_ring": 1,
1293
+ "ring": 0
1294
+ },
1295
+ "source": {
1296
+ "events": [
1297
+ {
1298
+ "op": "userinfo",
1299
+ "slot": 3
1300
+ }
1301
+ ],
1302
+ "info_ring": 1,
1303
+ "ring": 0
1304
+ }
1305
+ },
1306
+ {
1307
+ "rust": {
1308
+ "events": [
1309
+ {
1310
+ "op": "userinfo",
1311
+ "slot": 3
1312
+ }
1313
+ ],
1314
+ "info_ring": 1,
1315
+ "ring": 0
1316
+ },
1317
+ "source": {
1318
+ "events": [
1319
+ {
1320
+ "op": "userinfo",
1321
+ "slot": 3
1322
+ }
1323
+ ],
1324
+ "info_ring": 1,
1325
+ "ring": 0
1326
+ }
1327
+ },
1328
+ {
1329
+ "rust": {
1330
+ "events": [
1331
+ {
1332
+ "op": "userinfo",
1333
+ "slot": 3
1334
+ }
1335
+ ],
1336
+ "info_ring": 1,
1337
+ "ring": 0
1338
+ },
1339
+ "source": {
1340
+ "events": [
1341
+ {
1342
+ "op": "userinfo",
1343
+ "slot": 3
1344
+ }
1345
+ ],
1346
+ "info_ring": 1,
1347
+ "ring": 0
1348
+ }
1349
+ },
1350
+ {
1351
+ "rust": {
1352
+ "events": [
1353
+ {
1354
+ "op": "userinfo",
1355
+ "slot": 3
1356
+ }
1357
+ ],
1358
+ "info_ring": 1,
1359
+ "ring": 0
1360
+ },
1361
+ "source": {
1362
+ "events": [
1363
+ {
1364
+ "op": "userinfo",
1365
+ "slot": 3
1366
+ }
1367
+ ],
1368
+ "info_ring": 1,
1369
+ "ring": 0
1370
+ }
1371
+ },
1372
+ {
1373
+ "rust": {
1374
+ "events": [
1375
+ {
1376
+ "op": "userinfo",
1377
+ "slot": 3
1378
+ },
1379
+ {
1380
+ "op": "map"
1381
+ },
1382
+ {
1383
+ "mode": 1,
1384
+ "op": "open",
1385
+ "path": "706f736974696f6e732f7574345f746573742f782f792e706f73"
1386
+ }
1387
+ ],
1388
+ "info_ring": 1,
1389
+ "ring": 1
1390
+ },
1391
+ "source": {
1392
+ "events": [
1393
+ {
1394
+ "op": "userinfo",
1395
+ "slot": 3
1396
+ },
1397
+ {
1398
+ "op": "map"
1399
+ },
1400
+ {
1401
+ "mode": 1,
1402
+ "op": "open",
1403
+ "path": "706f736974696f6e732f7574345f746573742f782f792e706f73"
1404
+ }
1405
+ ],
1406
+ "info_ring": 1,
1407
+ "ring": 1
1408
+ }
1409
+ },
1410
+ {
1411
+ "rust": {
1412
+ "events": [
1413
+ {
1414
+ "op": "userinfo",
1415
+ "slot": 3
1416
+ },
1417
+ {
1418
+ "op": "map"
1419
+ },
1420
+ {
1421
+ "mode": 1,
1422
+ "op": "open",
1423
+ "path": "706f736974696f6e732f6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2f782f792e706f73"
1424
+ }
1425
+ ],
1426
+ "info_ring": 1,
1427
+ "ring": 1
1428
+ },
1429
+ "source": {
1430
+ "events": [
1431
+ {
1432
+ "op": "userinfo",
1433
+ "slot": 3
1434
+ },
1435
+ {
1436
+ "op": "map"
1437
+ },
1438
+ {
1439
+ "mode": 1,
1440
+ "op": "open",
1441
+ "path": "706f736974696f6e732f6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2f782f792e706f73"
1442
+ }
1443
+ ],
1444
+ "info_ring": 1,
1445
+ "ring": 1
1446
+ }
1447
+ },
1448
+ {
1449
+ "rust": {
1450
+ "events": [
1451
+ {
1452
+ "op": "userinfo",
1453
+ "slot": 3
1454
+ },
1455
+ {
1456
+ "op": "map"
1457
+ },
1458
+ {
1459
+ "mode": 1,
1460
+ "op": "open",
1461
+ "path": "706f736974696f6e732f7574345f746573742f782f792e706f73"
1462
+ },
1463
+ {
1464
+ "data": "312e3235303030302c2d322e3530303030302c332e3132353030302c39302e3030303030302c3138302e3030303030302c2d34352e3530303030300a706c61796572ff",
1465
+ "handle": 7,
1466
+ "length": 67,
1467
+ "op": "write"
1468
+ },
1469
+ {
1470
+ "handle": 7,
1471
+ "op": "close"
1472
+ }
1473
+ ],
1474
+ "info_ring": 1,
1475
+ "ring": 1
1476
+ },
1477
+ "source": {
1478
+ "events": [
1479
+ {
1480
+ "op": "userinfo",
1481
+ "slot": 3
1482
+ },
1483
+ {
1484
+ "op": "map"
1485
+ },
1486
+ {
1487
+ "mode": 1,
1488
+ "op": "open",
1489
+ "path": "706f736974696f6e732f7574345f746573742f782f792e706f73"
1490
+ },
1491
+ {
1492
+ "data": "312e3235303030302c2d322e3530303030302c332e3132353030302c39302e3030303030302c3138302e3030303030302c2d34352e3530303030300a706c61796572ff",
1493
+ "handle": 7,
1494
+ "length": 67,
1495
+ "op": "write"
1496
+ },
1497
+ {
1498
+ "handle": 7,
1499
+ "op": "close"
1500
+ }
1501
+ ],
1502
+ "info_ring": 1,
1503
+ "ring": 1
1504
+ }
1505
+ },
1506
+ {
1507
+ "rust": {
1508
+ "events": [
1509
+ {
1510
+ "op": "userinfo",
1511
+ "slot": 3
1512
+ },
1513
+ {
1514
+ "op": "map"
1515
+ },
1516
+ {
1517
+ "mode": 1,
1518
+ "op": "open",
1519
+ "path": "706f736974696f6e732f6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2f782f792e706f73"
1520
+ },
1521
+ {
1522
+ "data": "312e3235303030302c2d322e3530303030302c332e3132353030302c39302e3030303030302c3138302e3030303030302c2d34352e3530303030300a706c61796572ff",
1523
+ "handle": 7,
1524
+ "length": 67,
1525
+ "op": "write"
1526
+ },
1527
+ {
1528
+ "handle": 7,
1529
+ "op": "close"
1530
+ }
1531
+ ],
1532
+ "info_ring": 1,
1533
+ "ring": 1
1534
+ },
1535
+ "source": {
1536
+ "events": [
1537
+ {
1538
+ "op": "userinfo",
1539
+ "slot": 3
1540
+ },
1541
+ {
1542
+ "op": "map"
1543
+ },
1544
+ {
1545
+ "mode": 1,
1546
+ "op": "open",
1547
+ "path": "706f736974696f6e732f6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2f782f792e706f73"
1548
+ },
1549
+ {
1550
+ "data": "312e3235303030302c2d322e3530303030302c332e3132353030302c39302e3030303030302c3138302e3030303030302c2d34352e3530303030300a706c61796572ff",
1551
+ "handle": 7,
1552
+ "length": 67,
1553
+ "op": "write"
1554
+ },
1555
+ {
1556
+ "handle": 7,
1557
+ "op": "close"
1558
+ }
1559
+ ],
1560
+ "info_ring": 1,
1561
+ "ring": 1
1562
+ }
1563
+ },
1564
+ {
1565
+ "rust": {
1566
+ "events": [
1567
+ {
1568
+ "op": "userinfo",
1569
+ "slot": 3
1570
+ }
1571
+ ],
1572
+ "info_ring": 1,
1573
+ "ring": 0
1574
+ },
1575
+ "source": {
1576
+ "events": [
1577
+ {
1578
+ "op": "userinfo",
1579
+ "slot": 3
1580
+ }
1581
+ ],
1582
+ "info_ring": 1,
1583
+ "ring": 0
1584
+ }
1585
+ },
1586
+ {
1587
+ "rust": {
1588
+ "events": [
1589
+ {
1590
+ "op": "userinfo",
1591
+ "slot": 3
1592
+ }
1593
+ ],
1594
+ "info_ring": 1,
1595
+ "ring": 0
1596
+ },
1597
+ "source": {
1598
+ "events": [
1599
+ {
1600
+ "op": "userinfo",
1601
+ "slot": 3
1602
+ }
1603
+ ],
1604
+ "info_ring": 1,
1605
+ "ring": 0
1606
+ }
1607
+ },
1608
+ {
1609
+ "rust": {
1610
+ "events": [
1611
+ {
1612
+ "op": "userinfo",
1613
+ "slot": 3
1614
+ }
1615
+ ],
1616
+ "info_ring": 1,
1617
+ "ring": 0
1618
+ },
1619
+ "source": {
1620
+ "events": [
1621
+ {
1622
+ "op": "userinfo",
1623
+ "slot": 3
1624
+ }
1625
+ ],
1626
+ "info_ring": 1,
1627
+ "ring": 0
1628
+ }
1629
+ },
1630
+ {
1631
+ "rust": {
1632
+ "events": [
1633
+ {
1634
+ "op": "userinfo",
1635
+ "slot": 3
1636
+ }
1637
+ ],
1638
+ "info_ring": 1,
1639
+ "ring": 0
1640
+ },
1641
+ "source": {
1642
+ "events": [
1643
+ {
1644
+ "op": "userinfo",
1645
+ "slot": 3
1646
+ }
1647
+ ],
1648
+ "info_ring": 1,
1649
+ "ring": 0
1650
+ }
1651
+ },
1652
+ {
1653
+ "rust": {
1654
+ "events": [
1655
+ {
1656
+ "op": "userinfo",
1657
+ "slot": 3
1658
+ }
1659
+ ],
1660
+ "info_ring": 1,
1661
+ "ring": 0
1662
+ },
1663
+ "source": {
1664
+ "events": [
1665
+ {
1666
+ "op": "userinfo",
1667
+ "slot": 3
1668
+ }
1669
+ ],
1670
+ "info_ring": 1,
1671
+ "ring": 0
1672
+ }
1673
+ },
1674
+ {
1675
+ "rust": {
1676
+ "events": [
1677
+ {
1678
+ "op": "userinfo",
1679
+ "slot": 3
1680
+ }
1681
+ ],
1682
+ "info_ring": 1,
1683
+ "ring": 0
1684
+ },
1685
+ "source": {
1686
+ "events": [
1687
+ {
1688
+ "op": "userinfo",
1689
+ "slot": 3
1690
+ }
1691
+ ],
1692
+ "info_ring": 1,
1693
+ "ring": 0
1694
+ }
1695
+ },
1696
+ {
1697
+ "rust": {
1698
+ "events": [
1699
+ {
1700
+ "op": "userinfo",
1701
+ "slot": 3
1702
+ }
1703
+ ],
1704
+ "info_ring": 1,
1705
+ "ring": 0
1706
+ },
1707
+ "source": {
1708
+ "events": [
1709
+ {
1710
+ "op": "userinfo",
1711
+ "slot": 3
1712
+ }
1713
+ ],
1714
+ "info_ring": 1,
1715
+ "ring": 0
1716
+ }
1717
+ },
1718
+ {
1719
+ "rust": {
1720
+ "events": [
1721
+ {
1722
+ "op": "userinfo",
1723
+ "slot": 3
1724
+ }
1725
+ ],
1726
+ "info_ring": 1,
1727
+ "ring": 0
1728
+ },
1729
+ "source": {
1730
+ "events": [
1731
+ {
1732
+ "op": "userinfo",
1733
+ "slot": 3
1734
+ }
1735
+ ],
1736
+ "info_ring": 1,
1737
+ "ring": 0
1738
+ }
1739
+ }
1740
+ ],
1741
+ "source_report": "docs/research/qvm-position-save.json",
1742
+ "source_report_sha256": "e3955ff981375c9b468392e02f4aca7f1d6f24c8bfa72242e71f4c09077c1f9f"
1743
+ }
scripts/analyze_rust_position_save.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import hashlib,json
3
+ from pathlib import Path
4
+ from rust_native_policy_support import binary,result,invoke
5
+ from analyze_qvm import write_json
6
+ def blob(s):return [len(bytes.fromhex(s)),*bytes.fromhex(s)]
7
+ def encode(s):
8
+ a=s['input'];return [a['mode'],a['enabled'],a['slot'],a['handle'],*a['values'],*blob(a['userinfo']),*blob(a['mapname']),*blob(a['name'])]
9
+ def project(s):return {k:s[k] for k in ['events','ring','info_ring']}
10
+
11
+ def main():
12
+ b=binary();p=Path('docs/research/qvm-position-save.json');data=p.read_bytes();rows=[]
13
+ for s in json.loads(data)['probes']:rows.append({'source':project(s),'rust':result(b,'save-position',encode(s))})
14
+ write_json(Path('docs/research/rust-position-save.json'),{'source_report':str(p),'source_report_sha256':hashlib.sha256(data).hexdigest(),'probes':rows,'limits':'Rust matches96 original246746 cases with recovered userinfo, path construction and floating formatter bytes. Mode/enabled/position gates,63-byte map truncation, unsanitized GUID path bytes, ignored open return and write/close ordering are preserved. Typed unsupported format errors preserve the selector. Engine userinfo, native files and unsafe paths/ABI ownership remain open.'})
15
+ if __name__=='__main__':main()
scripts/test_rust_position_save.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
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-position-save.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']:self.assertEqual(p['rust'],p['source'])
7
+ def test_source_identity(self):
8
+ r=json.loads(Path('docs/research/rust-position-save.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
@@ -2748,3 +2748,17 @@ report scripts/analyze_qvm_position_save.py docs/research/qvm-position-save.json
2748
  edge docs/research/qvm-position-save.json scripts/test_qvm_position_save.py
2749
  group qvm-position-save scripts/analyze_qvm_position_save.py
2750
  edge scripts/analyze_qvm_position_save.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2748
  edge docs/research/qvm-position-save.json scripts/test_qvm_position_save.py
2749
  group qvm-position-save scripts/analyze_qvm_position_save.py
2750
  edge scripts/analyze_qvm_position_save.py scripts/analyze_qvm_resumer_audit.py
2751
+ edge Cargo.toml scripts/analyze_rust_position_save.py
2752
+ edge Cargo.lock scripts/analyze_rust_position_save.py
2753
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_position_save.py
2754
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_position_save.py
2755
+ edge crates/urt-gameplay/src/native_policy.rs scripts/analyze_rust_position_save.py
2756
+ edge crates/urt-gameplay/src/bin/urt-native-policy.rs scripts/analyze_rust_position_save.py
2757
+ edge docs/research/qvm-position-save.json scripts/analyze_rust_position_save.py
2758
+ group rust-position-save scripts/analyze_rust_health_impulse.py
2759
+ group gameplay scripts/analyze_rust_position_save.py
2760
+ edge crates/urt-gameplay/src/qvm_format.rs scripts/analyze_rust_position_save.py
2761
+ report scripts/analyze_rust_position_save.py docs/research/rust-position-save.json
2762
+ edge docs/research/rust-position-save.json scripts/test_rust_position_save.py
2763
+ group rust-position-save scripts/analyze_rust_position_save.py
2764
+ edge scripts/analyze_rust_position_save.py scripts/analyze_qvm_resumer_audit.py