Cluster add-building compact dispatch families

This commit is contained in:
Jan Petykiewicz 2026-04-19 10:17:49 -07:00
commit d334da6687
4 changed files with 435 additions and 0 deletions

View file

@ -3988,6 +3988,12 @@ pub struct SmpLoadedEventRuntimeCollectionSummary {
#[serde(default)]
pub add_building_dispatch_strip_records_missing_trigger_kind: usize,
#[serde(default)]
pub add_building_dispatch_strip_signature_families: Vec<String>,
#[serde(default)]
pub add_building_dispatch_strip_condition_tuple_families: Vec<String>,
#[serde(default)]
pub add_building_dispatch_strip_signature_condition_clusters: Vec<String>,
#[serde(default)]
pub control_lane_notes: Vec<String>,
#[serde(default)]
pub records: Vec<SmpLoadedPackedEventRecordSummary>,
@ -9989,6 +9995,54 @@ fn parse_event_runtime_collection_summary_with_tag_width(
.collect::<Vec<_>>();
add_building_dispatch_strip_descriptor_labels.sort_unstable();
add_building_dispatch_strip_descriptor_labels.dedup();
let mut add_building_dispatch_strip_signature_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_signature_family_from_notes(&record.notes)
.unwrap_or_else(|| "unknown-signature-family".to_string())
})
.collect::<Vec<_>>();
add_building_dispatch_strip_signature_families.sort_unstable();
add_building_dispatch_strip_signature_families.dedup();
let mut add_building_dispatch_strip_condition_tuple_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_condition_tuple_family_from_summary_rows(
&record.standalone_condition_rows,
)
})
.collect::<Vec<_>>();
add_building_dispatch_strip_condition_tuple_families.sort_unstable();
add_building_dispatch_strip_condition_tuple_families.dedup();
let mut add_building_dispatch_strip_signature_condition_clusters = 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_signature_condition_cluster_from_summary_rows(
compact_event_signature_family_from_notes(&record.notes).as_deref(),
&record.standalone_condition_rows,
)
})
.collect::<Vec<_>>();
add_building_dispatch_strip_signature_condition_clusters.sort_unstable();
add_building_dispatch_strip_signature_condition_clusters.dedup();
let mut mutation_candidate_unknown_descriptor_ids = records
.iter()
.flat_map(|record| record.grouped_effect_rows.iter())
@ -10120,6 +10174,18 @@ 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 signature families present in the 0x00431b20 dispatch strip = {:?}",
add_building_dispatch_strip_signature_families
));
control_lane_notes.push(format!(
"Add Building condition-tuple families present in the 0x00431b20 dispatch strip = {:?}",
add_building_dispatch_strip_condition_tuple_families
));
control_lane_notes.push(format!(
"Add Building signature/condition clusters present in the 0x00431b20 dispatch strip = {:?}",
add_building_dispatch_strip_signature_condition_clusters
));
if add_building_dispatch_strip_records_with_trigger_kind == 0 {
control_lane_notes.push(
"every currently decoded Add Building dispatch-strip row still has null trigger kind, so the missing control-lane mapping remains the blocker above the already-grounded add-building descriptor bridge".to_string(),
@ -10157,6 +10223,9 @@ 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_signature_families,
add_building_dispatch_strip_condition_tuple_families,
add_building_dispatch_strip_signature_condition_clusters,
control_lane_notes,
records,
});
@ -10173,6 +10242,40 @@ fn compact_event_dispatch_add_building_descriptor_id(descriptor_id: u32) -> bool
(503..=613).contains(&descriptor_id)
}
fn compact_event_signature_family_from_notes(notes: &[String]) -> Option<String> {
notes.iter().find_map(|note| {
note.strip_prefix("compact signature family = ")
.map(ToString::to_string)
})
}
fn compact_event_dispatch_condition_tuple_family_from_summary_rows(
rows: &[SmpLoadedPackedEventConditionRowSummary],
) -> String {
if rows.is_empty() {
return "[]".to_string();
}
let parts = rows
.iter()
.map(|row| match &row.metric {
Some(metric) => format!("{}:{}:{}", row.raw_condition_id, row.subtype, metric),
None => format!("{}:{}", row.raw_condition_id, row.subtype),
})
.collect::<Vec<_>>();
format!("[{}]", parts.join(","))
}
fn compact_event_dispatch_signature_condition_cluster_from_summary_rows(
signature_family: Option<&str>,
rows: &[SmpLoadedPackedEventConditionRowSummary],
) -> String {
format!(
"{} :: {}",
signature_family.unwrap_or("unknown-signature-family"),
compact_event_dispatch_condition_tuple_family_from_summary_rows(rows)
)
}
fn known_special_condition_label_for_compact_descriptor_id(
descriptor_id: u32,
) -> Option<&'static str> {
@ -23066,6 +23169,21 @@ 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_signature_families,
vec!["nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff".to_string()]
);
assert_eq!(
summary.add_building_dispatch_strip_condition_tuple_families,
vec!["[-1:4]".to_string()]
);
assert_eq!(
summary.add_building_dispatch_strip_signature_condition_clusters,
vec![
"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff :: [-1:4]"
.to_string()
]
);
assert_eq!(
summary.add_building_dispatch_strip_descriptor_labels,
vec!["Add Building Port01".to_string()]
@ -23088,6 +23206,21 @@ 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 signature families present in the 0x00431b20 dispatch strip = [\"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff\"]",
)
}));
assert!(summary.control_lane_notes.iter().any(|line| {
line.contains(
"Add Building condition-tuple families present in the 0x00431b20 dispatch strip = [\"[-1:4]\"]",
)
}));
assert!(summary.control_lane_notes.iter().any(|line| {
line.contains(
"Add Building signature/condition clusters present in the 0x00431b20 dispatch strip = [\"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff :: [-1:4]\"]",
)
}));
assert!(summary.control_lane_notes.iter().any(|line| {
line.contains("every currently decoded Add Building dispatch-strip row still has null trigger kind")
}));
@ -25872,6 +26005,9 @@ 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_signature_families: vec![],
add_building_dispatch_strip_condition_tuple_families: vec![],
add_building_dispatch_strip_signature_condition_clusters: vec![],
control_lane_notes: vec![],
records: build_unsupported_event_runtime_record_summaries(&[1, 3, 5], "test summary"),
});