Compare add-building cluster exclusivity

This commit is contained in:
Jan Petykiewicz 2026-04-19 10:21:45 -07:00
commit 2fbc0bd7e7
2 changed files with 51 additions and 0 deletions

View file

@ -347,6 +347,9 @@ struct RuntimeCompactEventDispatchClusterReport {
add_building_condition_tuple_map_counts: BTreeMap<String, usize>, add_building_condition_tuple_map_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_occurrence_counts: BTreeMap<String, usize>, add_building_signature_condition_cluster_occurrence_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_map_counts: BTreeMap<String, usize>, add_building_signature_condition_cluster_map_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_descriptor_keys: BTreeMap<String, Vec<String>>,
add_building_signature_condition_cluster_non_add_building_descriptor_keys:
BTreeMap<String, Vec<String>>,
} }
#[derive(Debug, Serialize)] #[derive(Debug, Serialize)]
@ -373,6 +376,9 @@ struct RuntimeCompactEventDispatchClusterCountsReport {
add_building_condition_tuple_map_counts: BTreeMap<String, usize>, add_building_condition_tuple_map_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_occurrence_counts: BTreeMap<String, usize>, add_building_signature_condition_cluster_occurrence_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_map_counts: BTreeMap<String, usize>, add_building_signature_condition_cluster_map_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_descriptor_keys: BTreeMap<String, Vec<String>>,
add_building_signature_condition_cluster_non_add_building_descriptor_keys:
BTreeMap<String, Vec<String>>,
} }
#[derive(Debug, Clone, Serialize)] #[derive(Debug, Clone, Serialize)]
@ -1858,6 +1864,10 @@ fn run_runtime_inspect_compact_event_dispatch_cluster_counts(
.add_building_signature_condition_cluster_occurrence_counts, .add_building_signature_condition_cluster_occurrence_counts,
add_building_signature_condition_cluster_map_counts: report add_building_signature_condition_cluster_map_counts: report
.add_building_signature_condition_cluster_map_counts, .add_building_signature_condition_cluster_map_counts,
add_building_signature_condition_cluster_descriptor_keys: report
.add_building_signature_condition_cluster_descriptor_keys,
add_building_signature_condition_cluster_non_add_building_descriptor_keys: report
.add_building_signature_condition_cluster_non_add_building_descriptor_keys,
}, },
}; };
println!("{}", serde_json::to_string_pretty(&output)?); println!("{}", serde_json::to_string_pretty(&output)?);
@ -1891,6 +1901,9 @@ fn build_runtime_compact_event_dispatch_cluster_report(
let mut add_building_signature_condition_cluster_occurrence_counts = let mut add_building_signature_condition_cluster_occurrence_counts =
BTreeMap::<String, usize>::new(); BTreeMap::<String, usize>::new();
let mut add_building_signature_condition_cluster_map_counts = BTreeMap::<String, usize>::new(); let mut add_building_signature_condition_cluster_map_counts = BTreeMap::<String, usize>::new();
let mut signature_condition_cluster_descriptor_keys =
BTreeMap::<String, BTreeSet<String>>::new();
let mut add_building_signature_condition_clusters = BTreeSet::<String>::new();
let mut dispatch_descriptor_occurrences = let mut dispatch_descriptor_occurrences =
BTreeMap::<String, Vec<RuntimeCompactEventDispatchClusterOccurrence>>::new(); BTreeMap::<String, Vec<RuntimeCompactEventDispatchClusterOccurrence>>::new();
let mut unknown_descriptor_occurrences = let mut unknown_descriptor_occurrences =
@ -1976,12 +1989,18 @@ fn build_runtime_compact_event_dispatch_cluster_report(
rows: rows.clone(), rows: rows.clone(),
}; };
let descriptor_key = compact_event_dispatch_descriptor_key(descriptor_id, &rows); let descriptor_key = compact_event_dispatch_descriptor_key(descriptor_id, &rows);
signature_condition_cluster_descriptor_keys
.entry(signature_condition_cluster_key.clone())
.or_default()
.insert(descriptor_key.clone());
*dispatch_descriptor_occurrence_counts *dispatch_descriptor_occurrence_counts
.entry(descriptor_key.clone()) .entry(descriptor_key.clone())
.or_insert(0) += 1; .or_insert(0) += 1;
map_descriptor_keys.insert(descriptor_key.clone()); map_descriptor_keys.insert(descriptor_key.clone());
if compact_event_dispatch_add_building_descriptor_id(descriptor_id) { if compact_event_dispatch_add_building_descriptor_id(descriptor_id) {
record_has_add_building = true; record_has_add_building = true;
add_building_signature_condition_clusters
.insert(signature_condition_cluster_key.clone());
*add_building_descriptor_occurrence_counts *add_building_descriptor_occurrence_counts
.entry(descriptor_key.clone()) .entry(descriptor_key.clone())
.or_insert(0) += 1; .or_insert(0) += 1;
@ -2063,6 +2082,29 @@ fn build_runtime_compact_event_dispatch_cluster_report(
.map(|label| format!("{descriptor_id} -> {label}")) .map(|label| format!("{descriptor_id} -> {label}"))
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let add_building_signature_condition_cluster_descriptor_keys =
add_building_signature_condition_clusters
.iter()
.map(|cluster| {
let keys = signature_condition_cluster_descriptor_keys
.get(cluster)
.map(|keys| keys.iter().cloned().collect::<Vec<_>>())
.unwrap_or_default();
(cluster.clone(), keys)
})
.collect::<BTreeMap<_, _>>();
let add_building_signature_condition_cluster_non_add_building_descriptor_keys =
add_building_signature_condition_cluster_descriptor_keys
.iter()
.map(|(cluster, keys)| {
let filtered = keys
.iter()
.filter(|key| !key.contains("Add Building"))
.cloned()
.collect::<Vec<_>>();
(cluster.clone(), filtered)
})
.collect::<BTreeMap<_, _>>();
Ok(RuntimeCompactEventDispatchClusterReport { Ok(RuntimeCompactEventDispatchClusterReport {
maps_scanned: input_paths.len(), maps_scanned: input_paths.len(),
@ -2089,6 +2131,8 @@ fn build_runtime_compact_event_dispatch_cluster_report(
add_building_condition_tuple_map_counts, add_building_condition_tuple_map_counts,
add_building_signature_condition_cluster_occurrence_counts, add_building_signature_condition_cluster_occurrence_counts,
add_building_signature_condition_cluster_map_counts, add_building_signature_condition_cluster_map_counts,
add_building_signature_condition_cluster_descriptor_keys,
add_building_signature_condition_cluster_non_add_building_descriptor_keys,
}) })
} }

View file

@ -313,6 +313,13 @@ Working rule:
`FarmGrain`/`Logging Camp` clusters on `nondirect-ge34-h0002-0007-0004-73|75|7b|85...` with `FarmGrain`/`Logging Camp` clusters on `nondirect-ge34-h0002-0007-0004-73|75|7b|85...` with
condition family `[7:4,42:0]`; that narrows the remaining trigger-kind/source question to a condition family `[7:4,42:0]`; that narrows the remaining trigger-kind/source question to a
small set of compact subfamilies rather than a single undifferentiated add-building carrier small set of compact subfamilies rather than a single undifferentiated add-building carrier
- the first exclusivity pass is positive too:
the widened cluster-counts report now surfaces, for each add-building
signature/condition cluster, the descriptor keys that share it plus the
non-add-building subset. Current targeted checks on `Texas Tea.gmp` and `Alternate USA.gmp`
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 same probe now narrows the candidate runtime-effect set too: - the same probe now narrows the candidate runtime-effect set too:
it reports which decoded records already carry grouped opcodes in the grounded 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 `0x00431b20` dispatch strip; real `War Effort.gmp` currently narrows that to record indexes