From 461cf087e5bb9736cf5208f58a47ce86637130f4 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sun, 19 Apr 2026 10:26:03 -0700 Subject: [PATCH] Track add-building row-shape families --- crates/rrt-cli/src/main.rs | 42 ++++++++++++++++++++++ crates/rrt-runtime/src/import.rs | 61 ++++++++++++++++++++++++++++++++ crates/rrt-runtime/src/smp.rs | 51 ++++++++++++++++++++++++++ docs/rehost-queue.md | 6 ++++ 4 files changed, 160 insertions(+) diff --git a/crates/rrt-cli/src/main.rs b/crates/rrt-cli/src/main.rs index 1c71a5a..a768cfe 100644 --- a/crates/rrt-cli/src/main.rs +++ b/crates/rrt-cli/src/main.rs @@ -341,6 +341,8 @@ struct RuntimeCompactEventDispatchClusterReport { add_building_dispatch_records_missing_trigger_kind: usize, add_building_descriptor_occurrence_counts: BTreeMap, add_building_descriptor_map_counts: BTreeMap, + add_building_row_shape_occurrence_counts: BTreeMap, + add_building_row_shape_map_counts: BTreeMap, add_building_signature_family_occurrence_counts: BTreeMap, add_building_signature_family_map_counts: BTreeMap, add_building_condition_tuple_occurrence_counts: BTreeMap, @@ -370,6 +372,8 @@ struct RuntimeCompactEventDispatchClusterCountsReport { add_building_dispatch_records_missing_trigger_kind: usize, add_building_descriptor_occurrence_counts: BTreeMap, add_building_descriptor_map_counts: BTreeMap, + add_building_row_shape_occurrence_counts: BTreeMap, + add_building_row_shape_map_counts: BTreeMap, add_building_signature_family_occurrence_counts: BTreeMap, add_building_signature_family_map_counts: BTreeMap, add_building_condition_tuple_occurrence_counts: BTreeMap, @@ -1853,6 +1857,9 @@ fn run_runtime_inspect_compact_event_dispatch_cluster_counts( add_building_descriptor_occurrence_counts: report .add_building_descriptor_occurrence_counts, add_building_descriptor_map_counts: report.add_building_descriptor_map_counts, + add_building_row_shape_occurrence_counts: report + .add_building_row_shape_occurrence_counts, + add_building_row_shape_map_counts: report.add_building_row_shape_map_counts, add_building_signature_family_occurrence_counts: report .add_building_signature_family_occurrence_counts, add_building_signature_family_map_counts: report @@ -1894,6 +1901,8 @@ fn build_runtime_compact_event_dispatch_cluster_report( let mut add_building_dispatch_records_missing_trigger_kind = 0usize; let mut add_building_descriptor_occurrence_counts = BTreeMap::::new(); let mut add_building_descriptor_map_counts = BTreeMap::::new(); + let mut add_building_row_shape_occurrence_counts = BTreeMap::::new(); + let mut add_building_row_shape_map_counts = BTreeMap::::new(); let mut add_building_signature_family_occurrence_counts = BTreeMap::::new(); let mut add_building_signature_family_map_counts = BTreeMap::::new(); let mut add_building_condition_tuple_occurrence_counts = BTreeMap::::new(); @@ -1919,6 +1928,7 @@ fn build_runtime_compact_event_dispatch_cluster_report( let mut map_dispatch_strip_record_count = 0usize; let mut map_descriptor_keys = BTreeSet::::new(); let mut map_add_building_descriptor_keys = BTreeSet::::new(); + let mut map_add_building_row_shapes = BTreeSet::::new(); let mut map_add_building_signature_families = BTreeSet::::new(); let mut map_add_building_condition_tuples = BTreeSet::::new(); let mut map_add_building_signature_condition_clusters = BTreeSet::::new(); @@ -1968,6 +1978,7 @@ fn build_runtime_compact_event_dispatch_cluster_report( let signature_family = compact_event_signature_family_from_notes(&record.notes); let condition_tuple_family = compact_event_dispatch_condition_tuple_family(&condition_tuples); + let row_shape_family = compact_event_dispatch_row_shape_family(&matching_rows); let signature_family_key = signature_family .clone() .unwrap_or_else(|| "unknown-signature-family".to_string()); @@ -2005,6 +2016,10 @@ fn build_runtime_compact_event_dispatch_cluster_report( .entry(descriptor_key.clone()) .or_insert(0) += 1; map_add_building_descriptor_keys.insert(descriptor_key.clone()); + *add_building_row_shape_occurrence_counts + .entry(row_shape_family.clone()) + .or_insert(0) += 1; + map_add_building_row_shapes.insert(row_shape_family.clone()); *add_building_signature_family_occurrence_counts .entry(signature_family_key.clone()) .or_insert(0) += 1; @@ -2054,6 +2069,11 @@ fn build_runtime_compact_event_dispatch_cluster_report( .entry(descriptor_key) .or_insert(0) += 1; } + for row_shape in map_add_building_row_shapes { + *add_building_row_shape_map_counts + .entry(row_shape) + .or_insert(0) += 1; + } for signature_family in map_add_building_signature_families { *add_building_signature_family_map_counts .entry(signature_family) @@ -2125,6 +2145,8 @@ fn build_runtime_compact_event_dispatch_cluster_report( add_building_dispatch_records_missing_trigger_kind, add_building_descriptor_occurrence_counts, add_building_descriptor_map_counts, + add_building_row_shape_occurrence_counts, + add_building_row_shape_map_counts, add_building_signature_family_occurrence_counts, add_building_signature_family_map_counts, add_building_condition_tuple_occurrence_counts, @@ -4516,6 +4538,26 @@ fn compact_event_dispatch_descriptor_key( .unwrap_or_else(|| descriptor_id.to_string()) } +fn compact_event_dispatch_row_shape_family( + grouped_rows: &BTreeMap>, +) -> String { + let mut parts = grouped_rows + .values() + .flat_map(|rows| rows.iter()) + .map(|row| { + format!( + "{}:{}:{}", + row.group_index, row.opcode, row.raw_scalar_value + ) + }) + .collect::>(); + if parts.is_empty() { + return "[]".to_string(); + } + parts.sort(); + format!("[{}]", parts.join(",")) +} + fn compact_event_dispatch_condition_tuple_family( tuples: &[RuntimeCompactEventDispatchClusterConditionTuple], ) -> String { diff --git a/crates/rrt-runtime/src/import.rs b/crates/rrt-runtime/src/import.rs index 0c894f0..7fab01d 100644 --- a/crates/rrt-runtime/src/import.rs +++ b/crates/rrt-runtime/src/import.rs @@ -6603,6 +6603,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -7623,6 +7624,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -7766,6 +7768,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -7887,6 +7890,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -8034,6 +8038,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -8142,6 +8147,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -8318,6 +8324,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -8584,6 +8591,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -8685,6 +8693,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -8810,6 +8819,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -8908,6 +8918,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -9009,6 +9020,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -9123,6 +9135,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -9253,6 +9266,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -9354,6 +9368,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -9532,6 +9547,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -9655,6 +9671,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -9755,6 +9772,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -9855,6 +9873,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10029,6 +10048,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10148,6 +10168,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10246,6 +10267,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10354,6 +10376,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10471,6 +10494,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10596,6 +10620,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10710,6 +10735,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10810,6 +10836,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -10980,6 +11007,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -11160,6 +11188,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -11288,6 +11317,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -11397,6 +11427,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -11533,6 +11564,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -11663,6 +11695,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -11783,6 +11816,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -11899,6 +11933,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12029,6 +12064,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12144,6 +12180,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12241,6 +12278,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12343,6 +12381,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12450,6 +12489,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12557,6 +12597,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12680,6 +12721,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12794,6 +12836,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -12955,6 +12998,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -13115,6 +13159,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -13666,6 +13711,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -13871,6 +13917,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -14021,6 +14068,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -14170,6 +14218,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -14320,6 +14369,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -14454,6 +14504,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -14663,6 +14714,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -14780,6 +14832,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -14899,6 +14952,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -15089,6 +15143,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -15262,6 +15317,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -15376,6 +15432,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -15523,6 +15580,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -15658,6 +15716,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -15867,6 +15926,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], @@ -16086,6 +16146,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index 4a37a43..5e71835 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -3988,6 +3988,8 @@ pub struct SmpLoadedEventRuntimeCollectionSummary { #[serde(default)] pub add_building_dispatch_strip_records_missing_trigger_kind: usize, #[serde(default)] + pub add_building_dispatch_strip_row_shape_families: Vec, + #[serde(default)] pub add_building_dispatch_strip_signature_families: Vec, #[serde(default)] pub add_building_dispatch_strip_condition_tuple_families: Vec, @@ -9995,6 +9997,22 @@ fn parse_event_runtime_collection_summary_with_tag_width( .collect::>(); add_building_dispatch_strip_descriptor_labels.sort_unstable(); add_building_dispatch_strip_descriptor_labels.dedup(); + let mut add_building_dispatch_strip_row_shape_families = records + .iter() + .filter(|record| { + record.grouped_effect_rows.iter().any(|row| { + opcode_reaches_world_apply_compact_runtime_effect_dispatch_strip(row.opcode) + && compact_event_dispatch_add_building_descriptor_id(row.descriptor_id) + }) + }) + .map(|record| { + compact_event_dispatch_row_shape_family_from_summary_rows( + &record.grouped_effect_rows, + ) + }) + .collect::>(); + add_building_dispatch_strip_row_shape_families.sort_unstable(); + add_building_dispatch_strip_row_shape_families.dedup(); let mut add_building_dispatch_strip_signature_families = records .iter() .filter(|record| { @@ -10174,6 +10192,10 @@ fn parse_event_runtime_collection_summary_with_tag_width( "decoded Add Building descriptor labels present in the 0x00431b20 dispatch strip = {:?}", add_building_dispatch_strip_descriptor_labels )); + control_lane_notes.push(format!( + "Add Building row-shape families present in the 0x00431b20 dispatch strip = {:?}", + add_building_dispatch_strip_row_shape_families + )); control_lane_notes.push(format!( "Add Building signature families present in the 0x00431b20 dispatch strip = {:?}", add_building_dispatch_strip_signature_families @@ -10223,6 +10245,7 @@ fn parse_event_runtime_collection_summary_with_tag_width( add_building_dispatch_strip_descriptor_labels, add_building_dispatch_strip_records_with_trigger_kind, add_building_dispatch_strip_records_missing_trigger_kind, + add_building_dispatch_strip_row_shape_families, add_building_dispatch_strip_signature_families, add_building_dispatch_strip_condition_tuple_families, add_building_dispatch_strip_signature_condition_clusters, @@ -10265,6 +10288,24 @@ fn compact_event_dispatch_condition_tuple_family_from_summary_rows( format!("[{}]", parts.join(",")) } +fn compact_event_dispatch_row_shape_family_from_summary_rows( + rows: &[SmpLoadedPackedEventGroupedEffectRowSummary], +) -> String { + if rows.is_empty() { + return "[]".to_string(); + } + let parts = rows + .iter() + .map(|row| { + format!( + "{}:{}:{}", + row.group_index, row.opcode, row.raw_scalar_value + ) + }) + .collect::>(); + format!("[{}]", parts.join(",")) +} + fn compact_event_dispatch_signature_condition_cluster_from_summary_rows( signature_family: Option<&str>, rows: &[SmpLoadedPackedEventConditionRowSummary], @@ -23169,6 +23210,10 @@ mod tests { .expect("non-direct event runtime collection summary should parse"); assert_eq!(summary.add_building_dispatch_strip_record_indexes, vec![0]); + assert_eq!( + summary.add_building_dispatch_strip_row_shape_families, + vec!["[0:8:1]".to_string()] + ); assert_eq!( summary.add_building_dispatch_strip_signature_families, vec!["nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff".to_string()] @@ -23206,6 +23251,11 @@ mod tests { "decoded Add Building descriptor labels present in the 0x00431b20 dispatch strip = [\"Add Building Port01\"]", ) })); + assert!(summary.control_lane_notes.iter().any(|line| { + line.contains( + "Add Building row-shape families present in the 0x00431b20 dispatch strip = [\"[0:8:1]\"]", + ) + })); assert!(summary.control_lane_notes.iter().any(|line| { line.contains( "Add Building signature families present in the 0x00431b20 dispatch strip = [\"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff\"]", @@ -26005,6 +26055,7 @@ mod tests { add_building_dispatch_strip_descriptor_labels: vec![], add_building_dispatch_strip_records_with_trigger_kind: 0, add_building_dispatch_strip_records_missing_trigger_kind: 0, + add_building_dispatch_strip_row_shape_families: vec![], add_building_dispatch_strip_signature_families: vec![], add_building_dispatch_strip_condition_tuple_families: vec![], add_building_dispatch_strip_signature_condition_clusters: vec![], diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 1cffb42..56d3c41 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -320,6 +320,12 @@ Working rule: show those observed add-building clusters have empty non-add-building companions, which biases the next source/trigger-kind pass toward a distinct add-building compact subfamily rather than a generic dispatch carrier reused by variable-band rows + - the descriptor-independent row-shape split is explicit now too: + the same cluster-counts surface reports normalized add-building row shapes. + Current targeted checks show `Texas Tea.gmp` on the one-row shape `[0:8:0]`, while + `Alternate USA.gmp` sits on the repeated three-row shape + `[0:8:-25,0:8:0,0:8:0]`; that gives the next pass a simpler shape-level discriminator even + when descriptor labels differ - the same probe now narrows the candidate runtime-effect set too: it reports which decoded records already carry grouped opcodes in the grounded `0x00431b20` dispatch strip; real `War Effort.gmp` currently narrows that to record indexes