From 519d5e2f2b610531d030394f113a90873c91fd44 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sun, 19 Apr 2026 01:01:30 -0700 Subject: [PATCH] Expose compact event control-lane probe summary --- crates/rrt-runtime/src/import.rs | 366 +++++++++++++++++++++++++++++++ crates/rrt-runtime/src/smp.rs | 84 +++++++ docs/rehost-queue.md | 6 + 3 files changed, 456 insertions(+) diff --git a/crates/rrt-runtime/src/import.rs b/crates/rrt-runtime/src/import.rs index a17846d..199fa84 100644 --- a/crates/rrt-runtime/src/import.rs +++ b/crates/rrt-runtime/src/import.rs @@ -6288,6 +6288,12 @@ mod tests { live_entry_ids: vec![1, 3, 5], decoded_record_count: 0, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![ crate::SmpLoadedPackedEventRecordSummary { record_index: 0, @@ -7111,6 +7117,12 @@ mod tests { live_entry_ids: vec![7], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 7, @@ -7237,6 +7249,12 @@ mod tests { live_entry_ids: vec![7], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 7, @@ -7341,6 +7359,12 @@ mod tests { live_entry_ids: vec![10, 11, 12], decoded_record_count: 3, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![ synthetic_packed_record( 0, @@ -7471,6 +7495,12 @@ mod tests { live_entry_ids: vec![21, 22], decoded_record_count: 2, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![ synthetic_packed_record( 0, @@ -7562,6 +7592,12 @@ mod tests { live_entry_ids: vec![7], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 7, @@ -7721,6 +7757,12 @@ mod tests { live_entry_ids: vec![7, 8, 9, 10, 11], decoded_record_count: 5, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![ crate::SmpLoadedPackedEventRecordSummary { record_index: 0, @@ -7970,6 +8012,12 @@ mod tests { live_entry_ids: vec![7], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 7, @@ -8054,6 +8102,12 @@ mod tests { live_entry_ids: vec![7], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 7, @@ -8162,6 +8216,12 @@ mod tests { live_entry_ids: vec![7], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 7, @@ -8243,6 +8303,12 @@ mod tests { live_entry_ids: vec![8], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 8, @@ -8327,6 +8393,12 @@ mod tests { live_entry_ids: vec![9], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 9, @@ -8424,6 +8496,12 @@ mod tests { live_entry_ids: vec![31], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 31, @@ -8537,6 +8615,12 @@ mod tests { live_entry_ids: vec![32], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 32, @@ -8621,6 +8705,12 @@ mod tests { live_entry_ids: vec![33], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 33, @@ -8782,6 +8872,12 @@ mod tests { live_entry_ids: vec![33], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 33, @@ -8888,6 +8984,12 @@ mod tests { live_entry_ids: vec![34], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 34, @@ -8971,6 +9073,12 @@ mod tests { live_entry_ids: vec![35], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 35, @@ -9054,6 +9162,12 @@ mod tests { live_entry_ids: vec![41], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 41, @@ -9211,6 +9325,12 @@ mod tests { live_entry_ids: vec![36], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 36, @@ -9313,6 +9433,12 @@ mod tests { live_entry_ids: vec![37], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 37, @@ -9394,6 +9520,12 @@ mod tests { live_entry_ids: vec![35], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 35, @@ -9485,6 +9617,12 @@ mod tests { live_entry_ids: vec![38], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 38, @@ -9585,6 +9723,12 @@ mod tests { live_entry_ids: vec![39], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 39, @@ -9693,6 +9837,12 @@ mod tests { live_entry_ids: vec![40], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 40, @@ -9790,6 +9940,12 @@ mod tests { live_entry_ids: vec![41], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 41, @@ -9873,6 +10029,12 @@ mod tests { live_entry_ids: vec![36], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 36, @@ -10026,6 +10188,12 @@ mod tests { live_entry_ids: vec![9], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 9, @@ -10189,6 +10357,12 @@ mod tests { live_entry_ids: vec![11], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 11, @@ -10300,6 +10474,12 @@ mod tests { live_entry_ids: vec![12], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 12, @@ -10392,6 +10572,12 @@ mod tests { live_entry_ids: vec![13], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 13, @@ -10511,6 +10697,12 @@ mod tests { live_entry_ids: vec![13], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 13, @@ -10624,6 +10816,12 @@ mod tests { live_entry_ids: vec![18], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 18, @@ -10727,6 +10925,12 @@ mod tests { live_entry_ids: vec![19], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 19, @@ -10826,6 +11030,12 @@ mod tests { live_entry_ids: vec![14], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 14, @@ -10939,6 +11149,12 @@ mod tests { live_entry_ids: vec![16], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 16, @@ -11037,6 +11253,12 @@ mod tests { live_entry_ids: vec![18], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 18, @@ -11117,6 +11339,12 @@ mod tests { live_entry_ids: vec![52], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 52, @@ -11202,6 +11430,12 @@ mod tests { live_entry_ids: vec![21], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 21, @@ -11292,6 +11526,12 @@ mod tests { live_entry_ids: vec![22], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 22, @@ -11382,6 +11622,12 @@ mod tests { live_entry_ids: vec![23], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 23, @@ -11488,6 +11734,12 @@ mod tests { live_entry_ids: vec![24], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 24, @@ -11585,6 +11837,12 @@ mod tests { live_entry_ids: vec![29], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 29, @@ -11729,6 +11987,12 @@ mod tests { live_entry_ids: vec![27], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 27, @@ -11872,6 +12136,12 @@ mod tests { live_entry_ids: vec![41, 45], decoded_record_count: 2, imported_runtime_record_count: 2, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![ crate::SmpLoadedPackedEventRecordSummary { record_index: 0, @@ -12406,6 +12676,12 @@ mod tests { live_entry_ids: vec![71], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 71, @@ -12594,6 +12870,12 @@ mod tests { live_entry_ids: vec![72], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 72, @@ -12727,6 +13009,12 @@ mod tests { live_entry_ids: vec![73], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 73, @@ -12859,6 +13147,12 @@ mod tests { live_entry_ids: vec![74], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 74, @@ -12992,6 +13286,12 @@ mod tests { live_entry_ids: vec![25], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 25, @@ -13109,6 +13409,12 @@ mod tests { live_entry_ids: vec![26], decoded_record_count: 1, imported_runtime_record_count: 1, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 26, @@ -13301,6 +13607,12 @@ mod tests { live_entry_ids: vec![19], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 19, @@ -13401,6 +13713,12 @@ mod tests { live_entry_ids: vec![20], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 20, @@ -13503,6 +13821,12 @@ mod tests { live_entry_ids: vec![24], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 24, @@ -13676,6 +14000,12 @@ mod tests { live_entry_ids: vec![21], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 21, @@ -13832,6 +14162,12 @@ mod tests { live_entry_ids: vec![22], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 22, @@ -13929,6 +14265,12 @@ mod tests { live_entry_ids: vec![23], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 23, @@ -14059,6 +14401,12 @@ mod tests { live_entry_ids: vec![25], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 25, @@ -14177,6 +14525,12 @@ mod tests { live_entry_ids: vec![17], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 17, @@ -14369,6 +14723,12 @@ mod tests { live_entry_ids: vec![7], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 7, @@ -14571,6 +14931,12 @@ mod tests { live_entry_ids: vec![7], decoded_record_count: 1, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 0, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: vec![crate::SmpLoadedPackedEventRecordSummary { record_index: 0, live_entry_id: 7, diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index 3f324fa..ebb4dc1 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -3844,6 +3844,18 @@ pub struct SmpLoadedEventRuntimeCollectionSummary { #[serde(default)] pub imported_runtime_record_count: usize, #[serde(default)] + pub records_with_trigger_kind: usize, + #[serde(default)] + pub records_missing_trigger_kind: usize, + #[serde(default)] + pub nondirect_compact_record_count: usize, + #[serde(default)] + pub nondirect_compact_records_missing_trigger_kind: usize, + #[serde(default)] + pub trigger_kinds_present: Vec, + #[serde(default)] + pub control_lane_notes: Vec, + #[serde(default)] pub records: Vec, } @@ -9398,6 +9410,42 @@ fn parse_event_runtime_collection_summary_with_tag_width( .iter() .filter(|record| record.executable_import_ready) .count(); + let records_with_trigger_kind = records + .iter() + .filter(|record| record.trigger_kind.is_some()) + .count(); + let records_missing_trigger_kind = records.len().saturating_sub(records_with_trigger_kind); + let nondirect_compact_record_count = records + .iter() + .filter(|record| record.payload_family == "real_packed_nondirect_compact_v1") + .count(); + let nondirect_compact_records_missing_trigger_kind = records + .iter() + .filter(|record| { + record.payload_family == "real_packed_nondirect_compact_v1" + && record.trigger_kind.is_none() + }) + .count(); + let mut trigger_kinds_present = records + .iter() + .filter_map(|record| record.trigger_kind) + .collect::>(); + trigger_kinds_present.sort_unstable(); + trigger_kinds_present.dedup(); + let mut control_lane_notes = Vec::new(); + if nondirect_compact_record_count != 0 + && nondirect_compact_record_count == nondirect_compact_records_missing_trigger_kind + { + control_lane_notes.push( + "all compact non-direct rows currently decode row bodies only and still lack a decoded trigger/control lane".to_string(), + ); + } + if records_with_trigger_kind != 0 { + control_lane_notes.push(format!( + "decoded trigger kinds present in this collection = {:?}", + trigger_kinds_present + )); + } return Some(SmpLoadedEventRuntimeCollectionSummary { source_kind, @@ -9419,6 +9467,12 @@ fn parse_event_runtime_collection_summary_with_tag_width( live_entry_ids, decoded_record_count, imported_runtime_record_count, + records_with_trigger_kind, + records_missing_trigger_kind, + nondirect_compact_record_count, + nondirect_compact_records_missing_trigger_kind, + trigger_kinds_present, + control_lane_notes, records, }); } @@ -21949,6 +22003,9 @@ mod tests { assert_eq!(summary.live_entry_ids, vec![1, 3, 5]); assert_eq!(summary.records_tag_offset, 96); assert_eq!(summary.decoded_record_count, 0); + assert_eq!(summary.records_with_trigger_kind, 0); + assert_eq!(summary.records_missing_trigger_kind, 3); + assert_eq!(summary.nondirect_compact_record_count, 0); assert_eq!(summary.records.len(), 3); assert_eq!(summary.records[0].decode_status, "unsupported_framing"); } @@ -21984,6 +22041,9 @@ mod tests { assert_eq!(summary.live_entry_ids, vec![1, 3, 5]); assert_eq!(summary.records_tag_offset, 98); assert_eq!(summary.decoded_record_count, 0); + assert_eq!(summary.records_with_trigger_kind, 0); + assert_eq!(summary.records_missing_trigger_kind, 3); + assert_eq!(summary.nondirect_compact_record_count, 0); assert_eq!(summary.records.len(), 3); assert_eq!(summary.records[0].decode_status, "unsupported_framing"); } @@ -22022,6 +22082,10 @@ mod tests { assert_eq!(summary.live_entry_ids, vec![1, 2, 3]); assert_eq!(summary.records_tag_offset, 102); assert_eq!(summary.decoded_record_count, 0); + assert_eq!(summary.records_with_trigger_kind, 0); + assert_eq!(summary.records_missing_trigger_kind, 3); + assert_eq!(summary.nondirect_compact_record_count, 0); + assert_eq!(summary.nondirect_compact_records_missing_trigger_kind, 0); assert_eq!(summary.records.len(), 3); assert_eq!(summary.records[0].decode_status, "unsupported_framing"); } @@ -22074,6 +22138,13 @@ mod tests { .event_runtime_collection_summary .as_ref() .expect("non-direct event runtime collection summary should parse"); + assert_eq!(summary.records_with_trigger_kind, 0); + assert_eq!(summary.records_missing_trigger_kind, 1); + assert_eq!(summary.nondirect_compact_record_count, 1); + assert_eq!(summary.nondirect_compact_records_missing_trigger_kind, 1); + assert!(summary.control_lane_notes.iter().any(|line| { + line.contains("all compact non-direct rows currently decode row bodies only") + })); let record = summary .records .first() @@ -22355,9 +22426,13 @@ mod tests { assert_eq!(summary.decoded_record_count, 1); assert_eq!(summary.imported_runtime_record_count, 1); + assert_eq!(summary.records_with_trigger_kind, 1); + assert_eq!(summary.records_missing_trigger_kind, 0); + assert_eq!(summary.trigger_kinds_present, vec![7]); assert_eq!(summary.records.len(), 1); assert_eq!(summary.records[0].decode_status, "executable"); assert_eq!(summary.records[0].payload_family, "synthetic_harness"); + assert_eq!(summary.records[0].trigger_kind, Some(7)); assert_eq!(summary.records[0].text_bands[0].preview, "Alpha"); assert_eq!(summary.records[0].standalone_condition_row_count, 1); assert_eq!( @@ -22408,6 +22483,9 @@ mod tests { assert_eq!(summary.decoded_record_count, 1); assert_eq!(summary.imported_runtime_record_count, 1); + assert_eq!(summary.records_with_trigger_kind, 1); + assert_eq!(summary.records_missing_trigger_kind, 0); + assert_eq!(summary.trigger_kinds_present, vec![8]); assert_eq!(summary.records[0].decode_status, "executable"); assert_eq!(summary.records[0].payload_family, "synthetic_harness"); assert!(summary.records[0].executable_import_ready); @@ -24864,6 +24942,12 @@ mod tests { live_entry_ids: vec![1, 3, 5], decoded_record_count: 0, imported_runtime_record_count: 0, + records_with_trigger_kind: 0, + records_missing_trigger_kind: 3, + nondirect_compact_record_count: 0, + nondirect_compact_records_missing_trigger_kind: 0, + trigger_kinds_present: vec![], + control_lane_notes: vec![], records: build_unsupported_event_runtime_record_summaries(&[1, 3, 5], "test summary"), }); diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 5eb9eed..092f446 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -246,6 +246,12 @@ Working rule: `Texas Tea.gmp` expose non-direct `0x4e99/0x4e9a/0x4e9b` runtime-event collections, and the compact `0x526f/0x4eb8/0x4eb9` row family is now decoded into actual condition/grouped row summaries rather than opaque slices + - the rehosted collection summary now makes the remaining control-lane gap explicit too: + it reports `records_with_trigger_kind`, `records_missing_trigger_kind`, + `nondirect_compact_record_count`, `nondirect_compact_records_missing_trigger_kind`, and + `control_lane_notes`; real `War Effort.gmp` output currently shows `24/24` compact non-direct + rows still missing decoded trigger kind, which narrows the next owner question to the + non-row-body control lane rather than the compact row framing itself - the concrete owner strip above that bundle is grounded now too: `0x00433060` is the direct non-direct serializer loop that writes `0x4e99/0x4e9a/0x4e9b`, calls `0x00430d70` per live collection row, and sits beside the sibling `0x00433130` size/load