Promote top dispatch clusters into service trace

This commit is contained in:
Jan Petykiewicz 2026-04-21 18:22:00 -07:00
commit 43f93eb0b6
7 changed files with 160 additions and 0 deletions

View file

@ -66,6 +66,8 @@ pub(super) fn build_near_city_acquisition_trace_inputs(
.near_city_acquisition_nontransport_late_bringup_candidate_branches,
near_city_acquisition_nontransport_explicit_trigger_kind_retags: projection
.near_city_acquisition_nontransport_explicit_trigger_kind_retags,
near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters: projection
.near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters,
near_city_acquisition_nontransport_add_building_descriptor_map_paths: projection
.near_city_acquisition_nontransport_add_building_descriptor_map_paths,
near_city_acquisition_nontransport_add_building_signature_condition_cluster_map_paths:

View file

@ -29,6 +29,8 @@ pub(in crate::inspect::smp) struct NearCityAcquisitionTraceInputs {
Vec<String>,
pub(in crate::inspect::smp) near_city_acquisition_nontransport_explicit_trigger_kind_retags:
Vec<String>,
pub(in crate::inspect::smp) near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters:
Vec<SmpCompactDispatchSignatureConditionClusterSummaryEntry>,
pub(in crate::inspect::smp) near_city_acquisition_nontransport_add_building_descriptor_map_paths:
BTreeMap<String, Vec<String>>,
pub(in crate::inspect::smp) near_city_acquisition_nontransport_add_building_signature_condition_cluster_map_paths:

View file

@ -1,5 +1,7 @@
use std::collections::BTreeMap;
use crate::inspect::smp::services::SmpCompactDispatchSignatureConditionClusterSummaryEntry;
pub(super) struct NearCityProjectionStatusFields {
pub(super) near_city_acquisition_shellless_readiness_status: String,
pub(super) near_city_acquisition_runtime_backed_input_families: Vec<String>,
@ -18,6 +20,8 @@ pub(super) struct NearCityProjectionStatusFields {
pub(super) near_city_acquisition_nontransport_add_building_record_count: usize,
pub(super) near_city_acquisition_nontransport_late_bringup_candidate_branches: Vec<String>,
pub(super) near_city_acquisition_nontransport_explicit_trigger_kind_retags: Vec<String>,
pub(super) near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters:
Vec<SmpCompactDispatchSignatureConditionClusterSummaryEntry>,
pub(super) near_city_acquisition_nontransport_add_building_descriptor_map_paths:
BTreeMap<String, Vec<String>>,
pub(super) near_city_acquisition_nontransport_add_building_signature_condition_cluster_map_paths:
@ -125,6 +129,90 @@ pub(super) fn build_near_city_projection_status_fields() -> NearCityProjectionSt
"0x00443526 SP - GOLD rewrites [event+0x7ef] 1 -> 5 for live runtime-event id 1 under [world+0x66de]".to_string(),
"0x00443601 Labor rewrites [event+0x7ef] 0 -> 2 for live runtime-event id 0x0d under [world+0x66de]".to_string(),
],
near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters: vec![
SmpCompactDispatchSignatureConditionClusterSummaryEntry {
cluster_key: "nondirect-ge1e-h0001-0360-0004-0100-0200-p0000-0000-0000-ffff :: [864:4]".to_string(),
occurrence_count: 36,
map_count: 18,
descriptor_keys: vec![
"39 Game Variable 1".to_string(),
"40 Game Variable 2".to_string(),
"41 Game Variable 3".to_string(),
"42 Game Variable 4".to_string(),
"43 Company Variable 1".to_string(),
"44 Company Variable 2".to_string(),
"45 Company Variable 3".to_string(),
"46 Company Variable 4".to_string(),
"8 Economic Status".to_string(),
],
sample_map_paths: vec![
"rt3_wineprefix/drive_c/rt3_105/maps/Britain.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Central Pacific.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Chicago to New York.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Crossing the Alps.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Eastern Canada.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Eastern China.gmp".to_string(),
],
},
SmpCompactDispatchSignatureConditionClusterSummaryEntry {
cluster_key: "nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff :: [-1:4]".to_string(),
occurrence_count: 27,
map_count: 14,
descriptor_keys: vec![
"16 Company Track Pieces Buildable".to_string(),
"39 Game Variable 1".to_string(),
"40 Game Variable 2".to_string(),
"41 Game Variable 3".to_string(),
"42 Game Variable 4".to_string(),
"43 Company Variable 1".to_string(),
"44 Company Variable 2".to_string(),
"46 Company Variable 4".to_string(),
"47 Player Variable 1".to_string(),
"48 Player Variable 2".to_string(),
"49 Player Variable 3".to_string(),
"50 Player Variable 4".to_string(),
"506 Add Building Barracks".to_string(),
"507 Add Building Bauxite Mine".to_string(),
],
sample_map_paths: vec![
"rt3_wineprefix/drive_c/rt3_105/maps/Alternate USA.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Central Pacific.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Chicago to New York.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Coast to Coast.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Go West!.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Greenland Growing.gmp".to_string(),
],
},
SmpCompactDispatchSignatureConditionClusterSummaryEntry {
cluster_key: "nondirect-ge1e-h0001-004a-0004-0100-0200-p0000-0000-0000-ffff :: [74:4]".to_string(),
occurrence_count: 9,
map_count: 1,
descriptor_keys: vec!["54 Territory Variable 4".to_string()],
sample_map_paths: vec![
"rt3_wineprefix/drive_c/rt3_105/maps/Alternate USA.gmp".to_string(),
],
},
SmpCompactDispatchSignatureConditionClusterSummaryEntry {
cluster_key: "nondirect-ge1e-h0001-0080-0004-0100-0200-p0000-0000-0000-ffff :: [128:4]".to_string(),
occurrence_count: 9,
map_count: 4,
descriptor_keys: vec![
"39 Game Variable 1".to_string(),
"43 Company Variable 1".to_string(),
"44 Company Variable 2".to_string(),
"45 Company Variable 3".to_string(),
"46 Company Variable 4".to_string(),
"47 Player Variable 1".to_string(),
"50 Player Variable 4".to_string(),
],
sample_map_paths: vec![
"rt3_wineprefix/drive_c/rt3_105/maps/Argentina Opens Up.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/California Island.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/Orient Express.gmp".to_string(),
"rt3_wineprefix/drive_c/rt3_105/maps/South East Australia.gmp".to_string(),
],
},
],
near_city_acquisition_nontransport_add_building_descriptor_map_paths: BTreeMap::from([
(
"506 Add Building Barracks".to_string(),

View file

@ -24,6 +24,8 @@ pub(super) struct NearCityReportFields {
pub(super) near_city_acquisition_nontransport_add_building_record_count: usize,
pub(super) near_city_acquisition_nontransport_late_bringup_candidate_branches: Vec<String>,
pub(super) near_city_acquisition_nontransport_explicit_trigger_kind_retags: Vec<String>,
pub(super) near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters:
Vec<SmpCompactDispatchSignatureConditionClusterSummaryEntry>,
pub(super) near_city_acquisition_nontransport_add_building_descriptor_map_paths:
BTreeMap<String, Vec<String>>,
pub(super) near_city_acquisition_nontransport_add_building_signature_condition_cluster_map_paths:
@ -100,6 +102,9 @@ pub(super) fn build_near_city_report_fields(
near_city_acquisition_nontransport_explicit_trigger_kind_retags: inputs
.near_city_acquisition_nontransport_explicit_trigger_kind_retags
.clone(),
near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters: inputs
.near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters
.clone(),
near_city_acquisition_nontransport_add_building_descriptor_map_paths: inputs
.near_city_acquisition_nontransport_add_building_descriptor_map_paths
.clone(),

View file

@ -126,6 +126,9 @@ pub(in crate::inspect::smp) fn build_periodic_company_service_trace_report(
.near_city_acquisition_nontransport_late_bringup_candidate_branches,
near_city_acquisition_nontransport_explicit_trigger_kind_retags: near_city_fields
.near_city_acquisition_nontransport_explicit_trigger_kind_retags,
near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters:
near_city_fields
.near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters,
near_city_acquisition_nontransport_add_building_descriptor_map_paths: near_city_fields
.near_city_acquisition_nontransport_add_building_descriptor_map_paths,
near_city_acquisition_nontransport_add_building_signature_condition_cluster_map_paths:

View file

@ -90,6 +90,17 @@ pub struct SmpSavePlacedStructurePolicyTrailingWordSummaryEntry {
pub count: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpCompactDispatchSignatureConditionClusterSummaryEntry {
pub cluster_key: String,
pub occurrence_count: usize,
pub map_count: usize,
#[serde(default)]
pub descriptor_keys: Vec<String>,
#[serde(default)]
pub sample_map_paths: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpPeriodicCompanyServiceTraceReport {
pub profile_family: String,
@ -184,6 +195,9 @@ pub struct SmpPeriodicCompanyServiceTraceReport {
#[serde(default)]
pub near_city_acquisition_nontransport_explicit_trigger_kind_retags: Vec<String>,
#[serde(default)]
pub near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters:
Vec<SmpCompactDispatchSignatureConditionClusterSummaryEntry>,
#[serde(default)]
pub near_city_acquisition_nontransport_add_building_descriptor_map_paths:
BTreeMap<String, Vec<String>>,
#[serde(default)]

View file

@ -360,6 +360,52 @@ fn builds_periodic_company_service_trace_report_with_candidate_consumers() {
.iter()
.any(|line| line.contains("0x00443601") && line.contains("0 -> 2"))
);
assert_eq!(
trace
.near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters
.len(),
4
);
let top_cluster =
&trace.near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters[0];
assert_eq!(
top_cluster.cluster_key,
"nondirect-ge1e-h0001-0360-0004-0100-0200-p0000-0000-0000-ffff :: [864:4]"
);
assert_eq!(top_cluster.occurrence_count, 36);
assert_eq!(top_cluster.map_count, 18);
assert!(
top_cluster
.descriptor_keys
.iter()
.any(|key| key == "8 Economic Status")
);
assert!(
top_cluster
.sample_map_paths
.iter()
.any(|path| path.ends_with("Britain.gmp"))
);
let mixed_cluster =
&trace.near_city_acquisition_nontransport_top_dispatch_signature_condition_clusters[1];
assert_eq!(
mixed_cluster.cluster_key,
"nondirect-ge1e-h0001-ffff-0004-0000-0200-p0000-0000-0000-ffff :: [-1:4]"
);
assert_eq!(mixed_cluster.occurrence_count, 27);
assert_eq!(mixed_cluster.map_count, 14);
assert!(
mixed_cluster
.descriptor_keys
.iter()
.any(|key| key == "506 Add Building Barracks")
);
assert!(
mixed_cluster
.sample_map_paths
.iter()
.any(|path| path.ends_with("Alternate USA.gmp"))
);
assert_eq!(
trace
.near_city_acquisition_nontransport_add_building_descriptor_map_paths