Decode infrastructure short trailing flag lane

This commit is contained in:
Jan Petykiewicz 2026-04-18 14:11:14 -07:00
commit 9f43a27e07
3 changed files with 312 additions and 10 deletions

View file

@ -1932,9 +1932,55 @@ pub struct SmpSavePlacedStructureDynamicSideBufferPayloadEnvelopeSummary {
pub dominant_profile_chunk_len: Option<usize>,
pub dominant_profile_chunk_len_count: usize,
#[serde(default)]
pub short_profile_flag_pair_summary:
Option<SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPairSummary>,
#[serde(default)]
pub sample_rows: Vec<SmpSavePlacedStructureDynamicSideBufferPayloadEnvelopeSample>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPairSummary {
pub row_count_with_0x06_profile_span: usize,
pub unique_flag_pair_count: usize,
#[serde(default)]
pub dominant_first_flag_byte: Option<u8>,
#[serde(default)]
pub dominant_first_flag_byte_hex: Option<String>,
pub dominant_first_flag_byte_count: usize,
#[serde(default)]
pub dominant_second_flag_byte: Option<u8>,
#[serde(default)]
pub dominant_second_flag_byte_hex: Option<String>,
pub dominant_second_flag_byte_count: usize,
#[serde(default)]
pub dominant_flag_pair: Option<SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPair>,
#[serde(default)]
pub sample_rows: Vec<SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPairSample>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPair {
pub first_flag_byte: u8,
pub first_flag_byte_hex: String,
pub second_flag_byte: u8,
pub second_flag_byte_hex: String,
pub count: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPairSample {
pub sample_index: usize,
pub name_tag_relative_offset: usize,
#[serde(default)]
pub primary_name: Option<String>,
#[serde(default)]
pub secondary_name: Option<String>,
pub first_flag_byte: u8,
pub first_flag_byte_hex: String,
pub second_flag_byte: u8,
pub second_flag_byte_hex: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpSavePlacedStructureDynamicSideBufferPayloadEnvelopeSample {
pub sample_index: usize,
@ -4035,6 +4081,33 @@ fn build_infrastructure_asset_trace_report(
.and_then(|summary| summary.dominant_profile_chunk_len)
.unwrap_or_default()
),
"direct disassembly now also shows the post-+0x48 helper pair 0x52ebd0/0x52ec50 loading and serializing two single-byte lanes around the trailing 0x55f3 tag while folding them into bits 0x20 and 0x40 of [this+0x20]".to_string(),
format!(
"current save-side probe reports {} rows with the short 0x06-byte trailing span; dominant short flag pair is {}/{} x{}",
side_buffer
.and_then(|probe| probe.payload_envelope_summary.as_ref())
.and_then(|summary| summary.short_profile_flag_pair_summary.as_ref())
.map(|summary| summary.row_count_with_0x06_profile_span)
.unwrap_or_default(),
side_buffer
.and_then(|probe| probe.payload_envelope_summary.as_ref())
.and_then(|summary| summary.short_profile_flag_pair_summary.as_ref())
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.first_flag_byte_hex.as_str())
.unwrap_or("0x00"),
side_buffer
.and_then(|probe| probe.payload_envelope_summary.as_ref())
.and_then(|summary| summary.short_profile_flag_pair_summary.as_ref())
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.second_flag_byte_hex.as_str())
.unwrap_or("0x00"),
side_buffer
.and_then(|probe| probe.payload_envelope_summary.as_ref())
.and_then(|summary| summary.short_profile_flag_pair_summary.as_ref())
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.count)
.unwrap_or_default()
),
"local .rdata at 0x005cfd00 now also proves the infrastructure child table uses the shared tagged callback strip directly: slot +0x40 = 0x455fc0, slot +0x48 = 0x455870, and slot +0x4c = 0x455930".to_string(),
"direct disassembly now shows 0x0048a1e0 cloning the first child triplet bands through 0x52e880/0x52e720, destroying the prior child, seeding a new literal Infrastructure child through 0x455b70 with payload seed 0x5c87a8, attaching through 0x5395d0 or 0x53a5d0, and republishing the two bands through 0x52e8b0/0x530720".to_string(),
"direct disassembly now also shows the outer owner at 0x0048dcf0 reading a child count plus optional primary-child ordinal from the tagged stream through 0x531150, zeroing [this+0x08], dispatching each fresh child through 0x455a50 -> vtable slot +0x40, culling ordinals above 5, and restoring cached primary-child slot [this+0x248] from the saved ordinal".to_string(),
@ -4511,8 +4584,10 @@ pub fn load_save_slice_from_report(
if let Some(probe) = &placed_structure_dynamic_side_buffer_probe {
let dominant_pattern = probe.compact_prefix_pattern_summaries.first();
let payload_envelope_summary = probe.payload_envelope_summary.as_ref();
let short_profile_flag_pair_summary = payload_envelope_summary
.and_then(|summary| summary.short_profile_flag_pair_summary.as_ref());
notes.push(format!(
"Raw save also exposes the separate placed-structure dynamic-side-buffer candidate 0x38a5/0x38a6/0x38a7: live_record_count={}, owner-shared 0x38a6 dword={} at relative offset 0x{:x}, first compact prefix=({},{},{}), first embedded names={:?}/{:?}/{:?}, embedded 0x55f1 row count={}, rows with tertiary 0x55f1 string={}, unique compact prefix patterns={}, 0x55f3-leading rows={}, complete 0x55f1/0x55f2/0x55f3 envelopes={}, dominant 0x55f2 chunk len=0x{:x} x{}, dominant 0x55f3 span=0x{:x} x{}, dominant compact pattern={}/{}/{} x{}.",
"Raw save also exposes the separate placed-structure dynamic-side-buffer candidate 0x38a5/0x38a6/0x38a7: live_record_count={}, owner-shared 0x38a6 dword={} at relative offset 0x{:x}, first compact prefix=({},{},{}), first embedded names={:?}/{:?}/{:?}, embedded 0x55f1 row count={}, rows with tertiary 0x55f1 string={}, unique compact prefix patterns={}, 0x55f3-leading rows={}, complete 0x55f1/0x55f2/0x55f3 envelopes={}, dominant 0x55f2 chunk len=0x{:x} x{}, dominant 0x55f3 span=0x{:x} x{}, dominant short 0x55f3 flag pair={}/{} x{}, dominant compact pattern={}/{}/{} x{}.",
probe.live_record_count,
probe.owner_shared_dword_hex,
probe.owner_shared_dword_relative_offset,
@ -4541,6 +4616,18 @@ pub fn load_save_slice_from_report(
payload_envelope_summary
.map(|summary| summary.dominant_profile_chunk_len_count)
.unwrap_or_default(),
short_profile_flag_pair_summary
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.first_flag_byte_hex.as_str())
.unwrap_or("0x00"),
short_profile_flag_pair_summary
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.second_flag_byte_hex.as_str())
.unwrap_or("0x00"),
short_profile_flag_pair_summary
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.count)
.unwrap_or_default(),
dominant_pattern
.map(|pattern| pattern.prefix_leading_dword_hex.as_str())
.unwrap_or("0x00000000"),
@ -5025,8 +5112,10 @@ pub fn inspect_save_company_and_chairman_analysis_bytes(
if let Some(side_buffer) = placed_structure_dynamic_side_buffer.as_ref() {
let dominant_pattern = side_buffer.compact_prefix_pattern_summaries.first();
let payload_envelope_summary = side_buffer.payload_envelope_summary.as_ref();
let short_profile_flag_pair_summary = payload_envelope_summary
.and_then(|summary| summary.short_profile_flag_pair_summary.as_ref());
notes.push(format!(
"Placed-structure analysis now also exports the separate 0x38a5 dynamic side-buffer owner seam with {} embedded name rows, {} decoded rows across {} unique name pairs, {} rows with a tertiary 0x55f1 string, {} unique compact prefix patterns, {} rows whose leading dword matches 0x55f3, {} complete 0x55f1/0x55f2/0x55f3 envelopes, dominant 0x55f2 chunk len=0x{:x} x{}, dominant 0x55f3 span=0x{:x} x{}, and dominant compact pattern={}/{}/{} x{}.",
"Placed-structure analysis now also exports the separate 0x38a5 dynamic side-buffer owner seam with {} embedded name rows, {} decoded rows across {} unique name pairs, {} rows with a tertiary 0x55f1 string, {} unique compact prefix patterns, {} rows whose leading dword matches 0x55f3, {} complete 0x55f1/0x55f2/0x55f3 envelopes, dominant 0x55f2 chunk len=0x{:x} x{}, dominant 0x55f3 span=0x{:x} x{}, dominant short 0x55f3 flag pair={}/{} x{}, and dominant compact pattern={}/{}/{} x{}.",
side_buffer.embedded_name_tag_count,
side_buffer.decoded_embedded_name_row_count,
side_buffer.unique_embedded_name_pair_count,
@ -5048,6 +5137,18 @@ pub fn inspect_save_company_and_chairman_analysis_bytes(
payload_envelope_summary
.map(|summary| summary.dominant_profile_chunk_len_count)
.unwrap_or_default(),
short_profile_flag_pair_summary
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.first_flag_byte_hex.as_str())
.unwrap_or("0x00"),
short_profile_flag_pair_summary
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.second_flag_byte_hex.as_str())
.unwrap_or("0x00"),
short_profile_flag_pair_summary
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| pair.count)
.unwrap_or_default(),
dominant_pattern
.map(|pattern| pattern.prefix_leading_dword_hex.as_str())
.unwrap_or("0x00000000"),
@ -11833,6 +11934,8 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
prefix_leading_dword: u32,
prefix_trailing_word: u16,
prefix_separator_byte: u8,
name_payload_relative_offset: usize,
name_payload_len: usize,
primary_name: Option<String>,
secondary_name: Option<String>,
tertiary_name: Option<String>,
@ -11868,6 +11971,8 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
name_to_policy_gap_len: Option<usize>,
policy_chunk_len: Option<usize>,
profile_chunk_len_to_next_name_or_end: Option<usize>,
short_profile_first_flag_byte: Option<u8>,
short_profile_second_flag_byte: Option<u8>,
}
if file_extension_hint != Some("gms") {
@ -12007,18 +12112,23 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
else {
continue;
};
if let Some(names) = parse_save_len_prefixed_ascii_name_triplet(name_payload) {
parsed_names = Some(names);
if let Some((names, name_payload_len)) =
parse_save_len_prefixed_ascii_name_triplet_and_consumed_len(name_payload)
{
parsed_names = Some((relative_name_offset, name_payload_len, names));
break;
}
}
let (primary_name, secondary_name, tertiary_name) =
parsed_names.unwrap_or_default();
let (name_payload_relative_offset, name_payload_len, names) =
parsed_names.unwrap_or((4usize, 0usize, Default::default()));
let (primary_name, secondary_name, tertiary_name) = names;
Some(EmbeddedNameRow {
name_tag_relative_offset,
prefix_leading_dword,
prefix_trailing_word,
prefix_separator_byte,
name_payload_relative_offset,
name_payload_len,
primary_name: (!primary_name.is_empty()).then_some(primary_name),
secondary_name: (!secondary_name.is_empty()).then_some(secondary_name),
tertiary_name,
@ -12037,10 +12147,11 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
.get(row_index + 1)
.copied()
.or(Some(records_payload.len()));
let name_payload_end_relative_offset = records_payload
.get(row.name_tag_relative_offset + 4..)
.and_then(parse_save_len_prefixed_ascii_name_triplet_and_consumed_len)
.map(|(_, consumed_len)| row.name_tag_relative_offset + 4 + consumed_len);
let name_payload_end_relative_offset = Some(
row.name_tag_relative_offset
+ row.name_payload_relative_offset
+ row.name_payload_len,
);
let policy_tag_relative_offset =
policy_tag_offsets.iter().copied().find(|offset| {
*offset > row.name_tag_relative_offset
@ -12075,6 +12186,18 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
.checked_sub(profile_tag_relative_offset + 4)
})
});
let short_profile_first_flag_byte =
profile_tag_relative_offset.and_then(|profile_tag_relative_offset| {
records_payload
.get(profile_tag_relative_offset + 4)
.copied()
});
let short_profile_second_flag_byte =
profile_tag_relative_offset.and_then(|profile_tag_relative_offset| {
records_payload
.get(profile_tag_relative_offset + 5)
.copied()
});
PayloadEnvelopeRow {
name_tag_relative_offset: row.name_tag_relative_offset,
primary_name: row.primary_name.clone(),
@ -12086,6 +12209,8 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
name_to_policy_gap_len,
policy_chunk_len,
profile_chunk_len_to_next_name_or_end,
short_profile_first_flag_byte,
short_profile_second_flag_byte,
}
})
.collect::<Vec<_>>();
@ -12305,6 +12430,112 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
.then_with(|| right_len.cmp(left_len))
})
.map(|(len, count)| (*len, *count));
let short_profile_flag_rows = payload_envelope_rows
.iter()
.filter(|row| row.profile_chunk_len_to_next_name_or_end == Some(6))
.filter_map(|row| {
Some((
row.name_tag_relative_offset,
row.primary_name.clone(),
row.secondary_name.clone(),
row.short_profile_first_flag_byte?,
row.short_profile_second_flag_byte?,
))
})
.collect::<Vec<_>>();
let mut short_profile_flag_pair_counts = BTreeMap::<(u8, u8), usize>::new();
let mut short_profile_first_flag_counts = BTreeMap::<u8, usize>::new();
let mut short_profile_second_flag_counts = BTreeMap::<u8, usize>::new();
for (_, _, _, first_flag_byte, second_flag_byte) in &short_profile_flag_rows {
*short_profile_flag_pair_counts
.entry((*first_flag_byte, *second_flag_byte))
.or_default() += 1;
*short_profile_first_flag_counts
.entry(*first_flag_byte)
.or_default() += 1;
*short_profile_second_flag_counts
.entry(*second_flag_byte)
.or_default() += 1;
}
let dominant_short_profile_flag_pair = short_profile_flag_pair_counts
.iter()
.max_by(|(left_pair, left_count), (right_pair, right_count)| {
left_count
.cmp(right_count)
.then_with(|| right_pair.cmp(left_pair))
})
.map(|((first_flag_byte, second_flag_byte), count)| {
SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPair {
first_flag_byte: *first_flag_byte,
first_flag_byte_hex: format!("0x{first_flag_byte:02x}"),
second_flag_byte: *second_flag_byte,
second_flag_byte_hex: format!("0x{second_flag_byte:02x}"),
count: *count,
}
});
let dominant_short_profile_first_flag = short_profile_first_flag_counts
.iter()
.max_by(|(left_byte, left_count), (right_byte, right_count)| {
left_count
.cmp(right_count)
.then_with(|| right_byte.cmp(left_byte))
})
.map(|(byte, count)| (*byte, *count));
let dominant_short_profile_second_flag = short_profile_second_flag_counts
.iter()
.max_by(|(left_byte, left_count), (right_byte, right_count)| {
left_count
.cmp(right_count)
.then_with(|| right_byte.cmp(left_byte))
})
.map(|(byte, count)| (*byte, *count));
let short_profile_flag_pair_summary = Some(
SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPairSummary {
row_count_with_0x06_profile_span: short_profile_flag_rows.len(),
unique_flag_pair_count: short_profile_flag_pair_counts.len(),
dominant_first_flag_byte: dominant_short_profile_first_flag.map(|(byte, _)| byte),
dominant_first_flag_byte_hex: dominant_short_profile_first_flag
.map(|(byte, _)| format!("0x{byte:02x}")),
dominant_first_flag_byte_count: dominant_short_profile_first_flag
.map(|(_, count)| count)
.unwrap_or_default(),
dominant_second_flag_byte: dominant_short_profile_second_flag.map(|(byte, _)| byte),
dominant_second_flag_byte_hex: dominant_short_profile_second_flag
.map(|(byte, _)| format!("0x{byte:02x}")),
dominant_second_flag_byte_count: dominant_short_profile_second_flag
.map(|(_, count)| count)
.unwrap_or_default(),
dominant_flag_pair: dominant_short_profile_flag_pair,
sample_rows: short_profile_flag_rows
.iter()
.take(8)
.enumerate()
.map(
|(
sample_index,
(
name_tag_relative_offset,
primary_name,
secondary_name,
first_flag_byte,
second_flag_byte,
),
)| {
SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPairSample {
sample_index,
name_tag_relative_offset: *name_tag_relative_offset,
primary_name: primary_name.clone(),
secondary_name: secondary_name.clone(),
first_flag_byte: *first_flag_byte,
first_flag_byte_hex: format!("0x{first_flag_byte:02x}"),
second_flag_byte: *second_flag_byte,
second_flag_byte_hex: format!("0x{second_flag_byte:02x}"),
}
},
)
.collect(),
},
);
let payload_envelope_summary = Some(
SmpSavePlacedStructureDynamicSideBufferPayloadEnvelopeSummary {
row_count_with_policy_tag_before_next_name,
@ -12321,6 +12552,7 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
dominant_profile_chunk_len_count: dominant_profile_chunk_len
.map(|(_, count)| count)
.unwrap_or_default(),
short_profile_flag_pair_summary: short_profile_flag_pair_summary.clone(),
sample_rows: payload_envelope_rows
.iter()
.take(8)
@ -12450,6 +12682,24 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
"no dominant embedded 0x55f3 payload-to-next-name span was available"
.to_string()
}),
short_profile_flag_pair_summary
.as_ref()
.and_then(|summary| summary.dominant_flag_pair.as_ref())
.map(|pair| {
format!(
"direct disassembly now bounds the short trailing lane through 0x52ebd0/0x52ec50 as two serialized flag bytes folded into [this+0x20] bits 0x20/0x40; grounded 0x06-byte rows currently favor {}/{} across {} rows ({} rows total with the short span)",
pair.first_flag_byte_hex,
pair.second_flag_byte_hex,
pair.count,
short_profile_flag_pair_summary
.as_ref()
.map(|summary| summary.row_count_with_0x06_profile_span)
.unwrap_or_default()
)
})
.unwrap_or_else(|| {
"no dominant short trailing flag-byte pair was available".to_string()
}),
dominant_compact_prefix_pattern
.map(|pattern| {
format!(
@ -22489,6 +22739,28 @@ mod tests {
dominant_policy_chunk_len_count: 110,
dominant_profile_chunk_len: Some(0x08),
dominant_profile_chunk_len_count: 90,
short_profile_flag_pair_summary: Some(
SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPairSummary {
row_count_with_0x06_profile_span: 72,
unique_flag_pair_count: 2,
dominant_first_flag_byte: Some(0x01),
dominant_first_flag_byte_hex: Some("0x01".to_string()),
dominant_first_flag_byte_count: 60,
dominant_second_flag_byte: Some(0x00),
dominant_second_flag_byte_hex: Some("0x00".to_string()),
dominant_second_flag_byte_count: 55,
dominant_flag_pair: Some(
SmpSavePlacedStructureDynamicSideBufferShortProfileFlagPair {
first_flag_byte: 0x01,
first_flag_byte_hex: "0x01".to_string(),
second_flag_byte: 0x00,
second_flag_byte_hex: "0x00".to_string(),
count: 48,
},
),
sample_rows: Vec::new(),
},
),
sample_rows: Vec::new(),
},
),
@ -22542,6 +22814,15 @@ mod tests {
.any(|line| line.contains("0x005181f0/0x00518260")
&& line.contains("previous live id"))
);
assert!(
trace.candidate_consumer_hypotheses[0]
.evidence
.iter()
.any(|line| {
line.contains("0x52ebd0/0x52ec50")
&& (line.contains("bits 0x20/0x40") || line.contains("bits 0x20 and 0x40"))
})
);
assert_eq!(trace.branches[0].status, "grounded_separate_owner_seam");
assert_eq!(trace.branches[1].status, "disproved_by_grounded_probe");
}

View file

@ -2943,6 +2943,15 @@ The low helper strip beneath that shared family is tighter now too: `0x0052ecd0`
to the first string when absent. So the remaining payload question is no longer “where is the
third string hiding?”; it is how the current dual-name save-side rows align with the full
payload-stream grouping and the later tagged value roles.
That trailing-value strip is tighter now too: direct disassembly of the post-`+0x48` helper pair
`0x0052ebd0/0x0052ec50` shows two serialized single-byte lanes folded into bits `0x20` and
`0x40` of `[this+0x20]`. Grounded `q.gms` side-buffer probes now show that all embedded rows sit
inside complete `0x55f1 -> 0x55f2 -> 0x55f3` envelopes, every embedded `0x55f2` chunk is the
fixed `0x1a` bytes that `0x00455870` expects, and the dominant short trailing `0x55f3` span is
the `0x06`-byte form with flag pair `0x00/0x00` across `72` rows. So the next remaining
infrastructure question is no longer whether a short trailing lane exists; it is how those
compact-prefix regimes and short flag-byte pairs feed the child-count / primary-child restore
state above `0x0048dcf0`.
The child loader family is explicit now too: local `.rdata` at `0x005cfd00` proves the
`Infrastructure` child vtable uses the shared tagged callback strip directly, with
`+0x40 = 0x00455fc0`, `+0x48 = 0x00455870`, and `+0x4c = 0x00455930`. So the remaining

View file

@ -95,6 +95,13 @@ Working rule:
infrastructure pass should stop asking whether the shared tagged callback sequence is present at
all and instead decode the short `0x55f3` payload role and its relation to the compact-prefix
regimes and primary-child restore path.
- That short trailing lane is tighter now too: direct disassembly of `0x0052ebd0/0x0052ec50`
shows the post-`+0x48` helper pair loading and serializing two single-byte lanes that fold into
bits `0x20` and `0x40` of `[this+0x20]`, and the save-side probe now shows the dominant
`0x06`-byte rows all carrying the same grounded flag pair `0x00/0x00` on `q.gms`. So the next
concrete infrastructure question is no longer “is there a short trailing flag lane?”; it is how
the compact-prefix regimes and those flag-byte pairs feed the child-count / primary-child restore
state above `0x0048dcf0`.
- Reconstruct the save-side region record body on top of the newly corrected non-direct tagged
region seam (`0x5209/0x520a/0x520b`, stride hint `0x06`, `Marker09` record stems) now that the
`0x55f3` payload is known to be fully consumed by the embedded profile collection on grounded
@ -227,6 +234,11 @@ Working rule:
and sampled row boundaries. That means the next pass can decode the short embedded `0x55f3`
payload lane on top of already grounded row boundaries instead of rediscovering the same
envelopes again.
- That same probe now also exports the grounded short trailing flag-byte pair summary for the
dominant `0x06`-byte rows, while the infrastructure trace carries the matching
`0x0052ebd0/0x0052ec50` helper seam. That means the next pass can aim directly at how those
flags combine with compact-prefix regimes and primary-child restore state instead of treating the
short lane as anonymous payload.
- That same trace now also ranks those consumers into explicit hypotheses, so the next
infrastructure pass should start with the attach/rebuild strip instead of treating all
candidate owners as equally likely.