diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index bf10a64..de8064c 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -2221,9 +2221,21 @@ pub struct SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixCorrel pub mode_family_counts: Vec, #[serde(default)] + pub name_pair_summaries: + Vec, + #[serde(default)] + pub profile_span_counts: + Vec, + #[serde(default)] pub sample_rows: Vec, } +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub struct SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixProfileSpanCount { + pub previous_profile_chunk_len_to_next_name_or_end: usize, + pub count: usize, +} + #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixSample { pub sample_index: usize, @@ -4862,12 +4874,34 @@ fn build_infrastructure_asset_trace_report( }) .map(|correlation| { format!( - "the exact 0xff0000ff/0x0001/0xff compact-prefix class is now explicit: dominant name={:?}/{:?} x{}, dominant span={:?} x{}, and sample rows={:?}", + "the exact 0xff0000ff/0x0001/0xff compact-prefix class is now explicit: dominant name={:?}/{:?} x{}, dominant span={:?} x{}, mode counts={:?}, name-pair counts={:?}, span counts={:?}, and sample rows={:?}", correlation.dominant_primary_name, correlation.dominant_secondary_name, correlation.dominant_name_pair_count, correlation.dominant_profile_span, correlation.dominant_profile_span_count, + correlation + .mode_family_counts + .iter() + .map(|mode| format!("{}:{}", mode.mode_family, mode.count)) + .collect::>(), + correlation + .name_pair_summaries + .iter() + .map(|entry| format!( + "{:?}/{:?}:{}", + entry.primary_name, entry.secondary_name, entry.count + )) + .collect::>(), + correlation + .profile_span_counts + .iter() + .map(|entry| format!( + "0x{:x}:{}", + entry.previous_profile_chunk_len_to_next_name_or_end, + entry.count + )) + .collect::>(), correlation .sample_rows .iter() @@ -4895,12 +4929,26 @@ fn build_infrastructure_asset_trace_report( }) .map(|correlation| { format!( - "the exact 0xff0000ff/0x0002/0xff compact-prefix class is now explicit too: dominant name={:?}/{:?} x{}, dominant span={:?} x{}, and sample rows={:?}", + "the exact 0xff0000ff/0x0002/0xff compact-prefix class is now explicit too: dominant name={:?}/{:?} x{}, dominant span={:?} x{}, mode counts={:?}, span counts={:?}, and sample rows={:?}", correlation.dominant_primary_name, correlation.dominant_secondary_name, correlation.dominant_name_pair_count, correlation.dominant_profile_span, correlation.dominant_profile_span_count, + correlation + .mode_family_counts + .iter() + .map(|mode| format!("{}:{}", mode.mode_family, mode.count)) + .collect::>(), + correlation + .profile_span_counts + .iter() + .map(|entry| format!( + "0x{:x}:{}", + entry.previous_profile_chunk_len_to_next_name_or_end, + entry.count + )) + .collect::>(), correlation .sample_rows .iter() @@ -14189,6 +14237,27 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe( } }) .collect(), + name_pair_summaries: name_pair_counts + .into_iter() + .map(|((primary_name, secondary_name), count)| { + SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanNamePairSummary { + primary_name, + secondary_name, + count, + } + }) + .collect(), + profile_span_counts: profile_span_counts + .into_iter() + .map( + |(previous_profile_chunk_len_to_next_name_or_end, count)| { + SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixProfileSpanCount { + previous_profile_chunk_len_to_next_name_or_end, + count, + } + }, + ) + .collect(), sample_rows: rows .iter() .take(8) @@ -25321,6 +25390,24 @@ mod tests { count: 15, }, ], + name_pair_summaries: vec![ + SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanNamePairSummary { + primary_name: Some("TunnelSTBrick_Section.3dp".to_string()), + secondary_name: Some("Infrastructure".to_string()), + count: 15, + }, + SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanNamePairSummary { + primary_name: Some("TrackCapST_Cap.3dp".to_string()), + secondary_name: Some("Infrastructure".to_string()), + count: 2, + }, + ], + profile_span_counts: vec![ + SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixProfileSpanCount { + previous_profile_chunk_len_to_next_name_or_end: 3, + count: 17, + }, + ], sample_rows: vec![ SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixSample { sample_index: 0, @@ -25367,6 +25454,19 @@ mod tests { count: 1, }, ], + name_pair_summaries: vec![ + SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanNamePairSummary { + primary_name: Some("TunnelSTBrick_Section.3dp".to_string()), + secondary_name: Some("Infrastructure".to_string()), + count: 1, + }, + ], + profile_span_counts: vec![ + SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixProfileSpanCount { + previous_profile_chunk_len_to_next_name_or_end: 0x27, + count: 1, + }, + ], sample_rows: vec![ SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixSample { sample_index: 0, @@ -25413,6 +25513,19 @@ mod tests { count: 2, }, ], + name_pair_summaries: vec![ + SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanNamePairSummary { + primary_name: Some("BridgeSTWood_Section.3dp".to_string()), + secondary_name: Some("Infrastructure".to_string()), + count: 2, + }, + ], + profile_span_counts: vec![ + SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixProfileSpanCount { + previous_profile_chunk_len_to_next_name_or_end: 0x27, + count: 2, + }, + ], sample_rows: vec![ SmpSavePlacedStructureDynamicSideBufferNamePreludeCompactPrefixSample { sample_index: 0, diff --git a/docs/control-loop-atlas/runtime-roots-camera-and-support-families.md b/docs/control-loop-atlas/runtime-roots-camera-and-support-families.md index 89117c0..8941671 100644 --- a/docs/control-loop-atlas/runtime-roots-camera-and-support-families.md +++ b/docs/control-loop-atlas/runtime-roots-camera-and-support-families.md @@ -2986,12 +2986,19 @@ The low helper strip beneath that shared family is tighter now too: `0x0052ecd0` next infrastructure pass should stop treating all short rows as equally ambiguous and focus on the smaller outlier families inside that class, especially the `BallastCap`-style zero-like rows and any remaining non-`0x0001 / 0xff` prelude candidates. - Those outliers are explicit now too: the remaining `10` short-span rows on grounded `q.gms` - break into `9` `BallastCapST_Cap.3dp / Infrastructure` rows with compact prefix - `0xf3010100 / 0x0055 / 0x00` and candidate pattern `0x0055 / 0x00`, plus `1` - `TrackCapST_Cap.3dp / Infrastructure` row with compact prefix `0xff0000ff / 0x0001 / 0xff`. - So the next infrastructure pass should target the `BallastCap` outlier family first instead of - spending time on the already-dominant bridge-section class. + The exact compact-prefix classes are explicit now too: + `0xff0000ff / 0x0002 / 0xff` is a pure bridge class, `0xff000000 / {0x0001,0x0002} / 0xff` + are pure bridge classes, `0xf3010100 / 0x0055 / 0x00` is a pure `BallastCap` class, and + `0x0005d368 / 0x0001 / 0xff` is a pure one-row `TrackCap` class. + That sharpens the remaining infrastructure unknowns considerably: the only mixed exact + compact-prefix classes left on grounded `q.gms` are `0x000055f3 / 0x0001 / 0xff` and + `0xff0000ff / 0x0001 / 0xff`. + The current `0x000055f3 / 0x0001 / 0xff` class is tunnel-dominant and stays entirely on prior + profile span `0x03`, while the current `0xff0000ff / 0x0001 / 0xff` class is `TrackCap`- + dominant but still carries `4` tunnel rows spread across many spans. + So the next infrastructure pass should stop treating the remaining frontier as a generic + “mixed 0x06/outlier” problem and instead target the owning constructor/restore semantics for + those two exact mixed compact-prefix classes. The candidate-pattern classes are explicit now too: `0x0055 / 0x00` is a pure `BallastCapST_Cap.3dp / Infrastructure` class across `18` rows, always preceded by a zero-length prior profile span, while `0x0002 / 0xff` is a pure diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 40e27bd..f736298 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -180,12 +180,26 @@ Working rule: next infrastructure slice should stop treating the `0x06` class as uniformly ambiguous and focus on the smaller outlier families inside that class, especially the zero-like `BallastCap`-style rows and any remaining non-`0x0001 / 0xff` prelude candidates. -- Those outliers are explicit now too: the remaining `10` short-span rows on grounded `q.gms` - break into `9` `BallastCapST_Cap.3dp / Infrastructure` rows with compact prefix - `0xf3010100 / 0x0055 / 0x00` and candidate pattern `0x0055 / 0x00`, plus `1` - `TrackCapST_Cap.3dp / Infrastructure` row with compact prefix `0xff0000ff / 0x0001 / 0xff`. - So the next infrastructure slice should target the `BallastCap` outlier family first, not the - already-dominant bridge-section class. +- The exact compact-prefix classes are explicit across the whole prelude now too: + `0xff0000ff / 0x0002 / 0xff` is a pure bridge class, `0xff000000 / {0x0001,0x0002} / 0xff` + are pure bridge classes, `0xf3010100 / 0x0055 / 0x00` is a pure `BallastCap` class, and + `0x0005d368 / 0x0001 / 0xff` is a pure one-row `TrackCap` class. +- That sharpens the remaining infrastructure unknowns considerably: the only mixed exact + compact-prefix classes left on grounded `q.gms` are `0x000055f3 / 0x0001 / 0xff` and + `0xff0000ff / 0x0001 / 0xff`. +- The current `0x000055f3 / 0x0001 / 0xff` class is tunnel-dominant: + `TunnelSTBrick_Section.3dp / Infrastructure:13`, `TunnelSTBrick_Cap.3dp / Infrastructure:4`, + `TrackCapST_Cap.3dp / Infrastructure:0` in the exact-prefix correlation, with all `17` rows + staying on prior profile span `0x03`. +- The current `0xff0000ff / 0x0001 / 0xff` class is `TrackCap`-dominant but still carries `4` + tunnel rows: + `TrackCapST_Cap.3dp / Infrastructure:18`, + `TunnelSTBrick_Cap.3dp / Infrastructure:2`, + `TunnelSTBrick_Section.3dp / Infrastructure:2`. + Its rows are spread across many spans rather than one dominant restore span. +- So the next infrastructure slice should stop treating the remaining frontier as a generic + “mixed 0x06/outlier” problem and instead target the owning constructor/restore semantics for + those two exact mixed compact-prefix classes. - The candidate-pattern classes are now explicit across the whole stream too: `0x0055 / 0x00` is a pure `BallastCapST_Cap.3dp / Infrastructure` class across `18` rows, always preceded by a zero-length prior profile span, while `0x0002 / 0xff` is a pure