diff --git a/crates/rrt-cli/src/main.rs b/crates/rrt-cli/src/main.rs index 40de4ac..1c71a5a 100644 --- a/crates/rrt-cli/src/main.rs +++ b/crates/rrt-cli/src/main.rs @@ -347,6 +347,9 @@ struct RuntimeCompactEventDispatchClusterReport { add_building_condition_tuple_map_counts: BTreeMap, add_building_signature_condition_cluster_occurrence_counts: BTreeMap, add_building_signature_condition_cluster_map_counts: BTreeMap, + add_building_signature_condition_cluster_descriptor_keys: BTreeMap>, + add_building_signature_condition_cluster_non_add_building_descriptor_keys: + BTreeMap>, } #[derive(Debug, Serialize)] @@ -373,6 +376,9 @@ struct RuntimeCompactEventDispatchClusterCountsReport { add_building_condition_tuple_map_counts: BTreeMap, add_building_signature_condition_cluster_occurrence_counts: BTreeMap, add_building_signature_condition_cluster_map_counts: BTreeMap, + add_building_signature_condition_cluster_descriptor_keys: BTreeMap>, + add_building_signature_condition_cluster_non_add_building_descriptor_keys: + BTreeMap>, } #[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_map_counts: report .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)?); @@ -1891,6 +1901,9 @@ fn build_runtime_compact_event_dispatch_cluster_report( let mut add_building_signature_condition_cluster_occurrence_counts = BTreeMap::::new(); let mut add_building_signature_condition_cluster_map_counts = BTreeMap::::new(); + let mut signature_condition_cluster_descriptor_keys = + BTreeMap::>::new(); + let mut add_building_signature_condition_clusters = BTreeSet::::new(); let mut dispatch_descriptor_occurrences = BTreeMap::>::new(); let mut unknown_descriptor_occurrences = @@ -1976,12 +1989,18 @@ fn build_runtime_compact_event_dispatch_cluster_report( rows: rows.clone(), }; 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 .entry(descriptor_key.clone()) .or_insert(0) += 1; map_descriptor_keys.insert(descriptor_key.clone()); if compact_event_dispatch_add_building_descriptor_id(descriptor_id) { record_has_add_building = true; + add_building_signature_condition_clusters + .insert(signature_condition_cluster_key.clone()); *add_building_descriptor_occurrence_counts .entry(descriptor_key.clone()) .or_insert(0) += 1; @@ -2063,6 +2082,29 @@ fn build_runtime_compact_event_dispatch_cluster_report( .map(|label| format!("{descriptor_id} -> {label}")) }) .collect::>(); + 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::>()) + .unwrap_or_default(); + (cluster.clone(), keys) + }) + .collect::>(); + 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::>(); + (cluster.clone(), filtered) + }) + .collect::>(); Ok(RuntimeCompactEventDispatchClusterReport { 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_signature_condition_cluster_occurrence_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, }) } diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 181312e..1cffb42 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -313,6 +313,13 @@ Working rule: `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 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: 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