Ground infrastructure child construction strip

This commit is contained in:
Jan Petykiewicz 2026-04-18 15:29:56 -07:00
commit e80f7333f0
3 changed files with 156 additions and 78 deletions

View file

@ -1989,7 +1989,8 @@ pub struct SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanClassSummar
#[serde(default)]
pub sample_rows: Vec<SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanSample>,
#[serde(default)]
pub name_pair_summaries: Vec<SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanNamePairSummary>,
pub name_pair_summaries:
Vec<SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanNamePairSummary>,
#[serde(default)]
pub compact_prefix_pattern_summaries:
Vec<SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanPrefixSummary>,
@ -4296,9 +4297,11 @@ fn build_infrastructure_asset_trace_report(
"0x004a2c80/0x004a34e0 paired upstream infrastructure composition choosers with decoded DT/ST table families plus BallastCap/Overpass literals".to_string(),
"0x0048a340 infrastructure chooser selector setter for [0x226]/[0x219]/[0x251]/bit 0x20".to_string(),
"0x0048a6c0 per-entry serializer for outer child-count / primary-child prelude and child payload callbacks".to_string(),
"0x00490960 infrastructure child constructor / selector propagator".to_string(),
"0x00455a40 raw vtable slot +0x44 dispatch wrapper".to_string(),
"0x00455a50 raw vtable slot +0x40 dispatch wrapper with global bridge reset".to_string(),
"0x004559d0 tagged child payload serializer for 0x55f1/0x55f2/0x55f3".to_string(),
"0x00490200 infrastructure seeded-lane route/link comparator".to_string(),
"0x00518140 indexed_collection_resolve_live_entry_payload_pointer_by_live_id".to_string(),
"0x005181f0 indexed_collection_unlink_non_direct_live_entry".to_string(),
"0x00518260 indexed_collection_link_non_direct_live_entry".to_string(),
@ -4313,7 +4316,7 @@ fn build_infrastructure_asset_trace_report(
"0x0048e140 / 0x0048e160 / 0x0048e180 route-entry resolver helpers".to_string(),
];
let next_owner_questions = vec![
"With 0x00491c60, 0x0048a6c0, 0x00455a40, and 0x004559d0 now grounded as the full write-side dispatch chain for the `0x38a5/0x38a6/0x38a7` family, how do the selector values set by 0x0048a340 surface in the seeded string lanes [this+0x206/+0x20a/+0x20e], the vtable slot +0x4c serializer, and the trailing 0x52ec50 footer path before the grounded pure bridge-section class 0x0002/0xff reaches the two-child clone-path above 0x0048a1e0 and 0x0048dcf0?".to_string(),
"With 0x00491c60, 0x0048a6c0, 0x00490960, 0x00455a40, and 0x004559d0 now grounded as the full child-construction and write-side dispatch chain for the `0x38a5/0x38a6/0x38a7` family, which chooser branches feed 0x00490960 its caller-supplied stem and selector arguments before they surface in the seeded lanes [this+0x206/+0x20a/+0x20e], the slot +0x4c serializer, and the trailing 0x52ec50 footer path?".to_string(),
"Inside the grounded overpass/ballast branch ([this+0x226]==3) of the paired chooser siblings, when do the fixed BallastCap and Overpass literals (0x5cb138/0x5cb150 and 0x5cb168/0x5cb180) fire, and does the pure BallastCap class 0x0055/0x00 stay a boundary artifact or become a real outer prelude consumed by 0x0048dcf0?".to_string(),
"Which 0x38a5 embedded name-pair groups survive into the per-child vtable +0x40 payload callbacks dispatched through 0x00455a50?".to_string(),
"Is cached primary-child slot [this+0x248] the first owner-visible bridge from the restored child stream into route-entry rebuild once the bridge two-child class is isolated?".to_string(),
@ -4351,6 +4354,9 @@ fn build_infrastructure_asset_trace_report(
"direct disassembly now also shows 0x0048a6c0 serializing the outer per-record prelude directly: it writes the current child count as a u16, writes the saved primary-child ordinal byte derived from [this+0x248], and then serializes each child through 0x00455a40".to_string(),
"local .rdata at 0x005cfd00 now also proves the missing write-side slot directly: for Infrastructure children, 0x00455a40 lands on vtable slot +0x44 = 0x004559d0, alongside +0x40 = 0x00455fc0, +0x48 = 0x00455870, and +0x4c = 0x00455930".to_string(),
"direct disassembly now also shows 0x004559d0 writing 0x55f1, serializing the three string lanes [this+0x206/+0x20a/+0x20e], writing 0x55f2, dispatching slot +0x4c, re-entering 0x52ec50, and then writing the closing 0x55f3 tag".to_string(),
"direct disassembly now also shows the paired chooser siblings calling 0x00490960 directly on the child-construction side, alongside 0x0048a340, 0x0048f4c0, and 0x00490200".to_string(),
"direct disassembly now also shows 0x00490960 copying selector fields into the child object ([this+0x219], [this+0x251], bit 0x20 in [this+0x24c], and [this+0x226]), allocating a fresh 0x23a Infrastructure child, seeding it through 0x00455b70 with caller-supplied stem input plus fixed literal Infrastructure at 0x005cfd74, attaching it through 0x005395d0, seeding position lanes through 0x00539530/0x0053a5b0, and optionally caching it as primary child in [this+0x248]".to_string(),
"direct disassembly now also shows 0x00490200 reading the seeded lanes [this+0x206/+0x20a/+0x20e] back through the live route collection at 0x006cfca8, classifying peer relationships with [this+0x216/+0x218/+0x201/+0x202], and therefore acting as a route/link comparator above the same child payload fields that 0x004559d0 later serializes".to_string(),
"the chooser tables now decode to concrete asset families too: 0x621a44/0x621a54 feed BridgeST caps/sections, 0x621a64 feeds TunnelST cap/section variants, 0x621a74/0x621a84 feed BridgeDT caps/sections, and 0x621a94 feeds TunnelDT variants; fixed literals 0x5cb138/0x5cb150 are BallastCapDT/ST and 0x5cb168/0x5cb180 are OverpassDT/ST".to_string(),
"the top-level chooser branches are grounded now too: [this+0x226]==1 routes bridge families, [this+0x226]==2 routes tunnel families, [this+0x226]==3 routes overpass/ballast families, and bit 0x20 in [this+0x24c] selects the cap-oriented side over the section-oriented side inside those DT/ST siblings".to_string(),
"direct disassembly now also shows 0x0048a340 as the exact chooser-state setter: its dword argument writes [this+0x226], its next two byte arguments write [this+0x219] and [this+0x251], and its final byte argument toggles bit 0x20 in [this+0x24c]".to_string(),
@ -4682,10 +4688,10 @@ fn build_infrastructure_asset_trace_report(
"the smaller attach primitive 0x00490a3c no longer looks like the semantic fork by itself: it just allocates one literal Infrastructure child, seeds it through 0x455b70 with caller-provided stem input, attaches it through 0x5395d0, seeds position lanes through 0x539530/0x53a5b0, and optionally caches it as primary child".to_string(),
],
blockers: vec![
"how the selector values written through the exact setter 0x0048a340 to [this+0x226]/[this+0x219]/[this+0x251]/bit 0x20 surface in the concrete 0x004559d0 child payload serializer through the seeded string lanes [this+0x206/+0x20a/+0x20e], slot +0x4c, and the trailing 0x52ec50 footer path, and therefore in the save-side 0x38a5 compact-prefix and name-pair classes, especially the bridge-only 0x0002/0xff class and the BallastCap-only 0x0055/0x00 class, now that [this+0x252] is partly grounded as the suspension-cap radius/handedness selector".to_string(),
"which exact chooser branches and caller-supplied stem arguments feed 0x00490960 before the exact setter 0x0048a340 values ([this+0x226]/[this+0x219]/[this+0x251]/bit 0x20) surface in the concrete 0x004559d0 child payload serializer through the seeded lanes [this+0x206/+0x20a/+0x20e], slot +0x4c, and the trailing 0x52ec50 footer path, and therefore in the save-side 0x38a5 compact-prefix and name-pair classes, especially the bridge-only 0x0002/0xff class and the BallastCap-only 0x0055/0x00 class, now that [this+0x252] is partly grounded as the suspension-cap radius/handedness selector".to_string(),
"how the payload streams reached through 0x00518380 -> 0x00518140 align with the embedded 0x55f1 name-pair groups and compact-prefix regimes surfaced by the save-side probe".to_string(),
"how the observed 0x55f3-to-next-0x55f1 gaps partition between the two 0x52ebd0 flag bytes and the next-record prelude now that 0x0048a6c0 is grounded as the writer for the outer child-count / primary-child prelude".to_string(),
"which fields written through the grounded 0x004559d0 -> slot +0x4c -> 0x52ec50 chain retain the 0x38a5 embedded name-pair semantics before route/local-runtime follow-ons take over".to_string(),
"which fields written through the grounded 0x00490960 -> 0x004559d0 -> slot +0x4c -> 0x52ec50 chain retain the 0x38a5 embedded name-pair semantics before route/local-runtime follow-ons take over".to_string(),
],
},
SmpServiceConsumerHypothesis {
@ -4797,7 +4803,7 @@ fn build_infrastructure_asset_trace_report(
),
];
let notes = vec![
"Infrastructure asset trace now makes the side-buffer-versus-triplet split explicit: owner seam identity is grounded, the pure bridge-only 0x0002/0xff candidate class is grounded save-side, the upstream chooser above the child attach path is grounded as paired DT/ST siblings at 0x004a2c80 and 0x004a34e0 with decoded Bridge/Tunnel/BallastCap/Overpass families, grounded top-level branch meaning, and grounded bridge/tunnel material selector roles, and the writer side is now grounded through 0x00491c60, 0x0048a6c0, 0x00455a40, and concrete child serializer 0x004559d0; the remaining unknown is how those selector values surface in the seeded string lanes, slot +0x4c payload, and trailing footer path inside the save-side classes.".to_string(),
"Infrastructure asset trace now makes the side-buffer-versus-triplet split explicit: owner seam identity is grounded, the pure bridge-only 0x0002/0xff candidate class is grounded save-side, the upstream chooser above the child attach path is grounded as paired DT/ST siblings at 0x004a2c80 and 0x004a34e0 with decoded Bridge/Tunnel/BallastCap/Overpass families, grounded top-level branch meaning, grounded bridge/tunnel material selector roles, and a concrete child-construction/write-side chain through 0x00490960, 0x00491c60, 0x0048a6c0, 0x00455a40, and 0x004559d0; the remaining unknown is which chooser branches and caller-supplied stem values feed that chain before the seeded lanes, slot +0x4c payload, and trailing footer path collapse into the save-side classes.".to_string(),
if st_only_name_pair_corpus {
"The current save-side side-buffer corpus is ST-only, so this trace directly exercises the ST chooser sibling while the DT sibling remains grounded statically but unexercised in this save.".to_string()
} else {
@ -13217,13 +13223,11 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
row.secondary_name.clone(),
child_count_candidate,
saved_primary_child_byte_candidate,
row_index
.checked_sub(1)
.and_then(|previous_index| {
payload_envelope_rows
.get(previous_index)
.and_then(|row| row.profile_chunk_len_to_next_name_or_end)
}),
row_index.checked_sub(1).and_then(|previous_index| {
payload_envelope_rows
.get(previous_index)
.and_then(|row| row.profile_chunk_len_to_next_name_or_end)
}),
))
})
.collect::<Vec<_>>();
@ -13279,8 +13283,10 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
.then_with(|| right_key.cmp(left_key))
})
.map(|(value, count)| (*value, *count));
let mut name_prelude_pattern_groups =
BTreeMap::<(u16, u8), Vec<(usize, Option<String>, Option<String>, Option<usize>)>>::new();
let mut name_prelude_pattern_groups = BTreeMap::<
(u16, u8),
Vec<(usize, Option<String>, Option<String>, Option<usize>)>,
>::new();
for (
name_tag_relative_offset,
primary_name,
@ -13398,8 +13404,7 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
)
.take(8)
.collect::<Vec<_>>();
let mut name_prelude_profile_span_groups =
BTreeMap::<usize, Vec<(u16, u8)>>::new();
let mut name_prelude_profile_span_groups = BTreeMap::<usize, Vec<(u16, u8)>>::new();
for (_, _, _, child_count_candidate, saved_primary_child_byte_candidate, previous_span) in
&name_prelude_candidate_rows
{
@ -13420,7 +13425,9 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
*pattern_counts
.entry((*child_count_candidate, *saved_primary_child_byte_candidate))
.or_default() += 1;
*child_count_counts.entry(*child_count_candidate).or_default() += 1;
*child_count_counts
.entry(*child_count_candidate)
.or_default() += 1;
*saved_primary_counts
.entry(*saved_primary_child_byte_candidate)
.or_default() += 1;
@ -13436,9 +13443,7 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
|((child_count_candidate, saved_primary_child_byte_candidate), count)| {
SmpSavePlacedStructureDynamicSideBufferNamePreludeCandidatePattern {
child_count_candidate: *child_count_candidate,
child_count_candidate_hex: format!(
"0x{child_count_candidate:04x}"
),
child_count_candidate_hex: format!("0x{child_count_candidate:04x}"),
saved_primary_child_byte_candidate:
*saved_primary_child_byte_candidate,
saved_primary_child_byte_candidate_hex: format!(
@ -13483,8 +13488,8 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
})
.take(8)
.collect::<Vec<_>>();
let name_prelude_candidate_summary =
Some(SmpSavePlacedStructureDynamicSideBufferNamePreludeCandidateSummary {
let name_prelude_candidate_summary = Some(
SmpSavePlacedStructureDynamicSideBufferNamePreludeCandidateSummary {
row_count_with_candidate_window: name_prelude_candidate_rows.len(),
unique_candidate_pattern_count: name_prelude_candidate_pattern_counts.len(),
dominant_child_count_candidate: dominant_name_prelude_child_count
@ -13492,11 +13497,10 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
dominant_child_count_candidate_count: dominant_name_prelude_child_count
.map(|(_, count)| count)
.unwrap_or_default(),
dominant_saved_primary_child_byte_candidate:
dominant_name_prelude_saved_primary.map(|(value, _)| value),
dominant_saved_primary_child_byte_candidate: dominant_name_prelude_saved_primary
.map(|(value, _)| value),
dominant_saved_primary_child_byte_candidate_hex:
dominant_name_prelude_saved_primary
.map(|(value, _)| format!("0x{value:02x}")),
dominant_name_prelude_saved_primary.map(|(value, _)| format!("0x{value:02x}")),
dominant_saved_primary_child_byte_candidate_count:
dominant_name_prelude_saved_primary
.map(|(_, count)| count)
@ -13526,9 +13530,7 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
primary_name: primary_name.clone(),
secondary_name: secondary_name.clone(),
child_count_candidate: *child_count_candidate,
child_count_candidate_hex: format!(
"0x{child_count_candidate:04x}"
),
child_count_candidate_hex: format!("0x{child_count_candidate:04x}"),
saved_primary_child_byte_candidate:
*saved_primary_child_byte_candidate,
saved_primary_child_byte_candidate_hex: format!(
@ -13540,7 +13542,8 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe(
},
)
.collect(),
});
},
);
let dominant_profile_span_class_summary = dominant_profile_chunk_len
.map(|(dominant_profile_span_len, _)| {
let dominant_rows = embedded_name_rows
@ -24385,35 +24388,50 @@ mod tests {
assert!(trace.side_buffer_present);
assert_eq!(trace.triplet_alignment_overlap_count, 0);
assert_eq!(trace.known_owner_bridge_fields.len(), 7);
assert_eq!(trace.known_bridge_helpers.len(), 19);
assert_eq!(trace.known_bridge_helpers.len(), 21);
assert_eq!(trace.next_owner_questions.len(), 4);
assert!(trace
.next_owner_questions
.iter()
.any(|line| line.contains("selector values set by 0x0048a340")
assert!(trace.next_owner_questions.iter().any(|line| {
line.contains("0x00490960")
&& line.contains("0x004559d0")
&& line.contains("0x0002/0xff")
&& line.contains("two-child clone-path")));
assert!(trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x004a2c80/0x004a34e0")
&& line.contains("[this+0x206/+0x20a/+0x20e]")
&& line.contains("0x52ec50")
}));
assert!(trace.known_bridge_helpers.iter().any(
|line| line.contains("0x004a2c80/0x004a34e0")
&& line.contains("paired upstream infrastructure composition choosers")
&& line.contains("BallastCap/Overpass")));
assert!(trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x0048a340")
&& line.contains("[0x226]/[0x219]/[0x251]/bit 0x20")));
assert!(trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x00455a40") && line.contains("slot +0x44")));
assert!(trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x004559d0")
&& line.contains("0x55f1/0x55f2/0x55f3")));
&& line.contains("BallastCap/Overpass")
));
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x0048a340")
&& line.contains("[0x226]/[0x219]/[0x251]/bit 0x20"))
);
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x00455a40") && line.contains("slot +0x44"))
);
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x004559d0") && line.contains("0x55f1/0x55f2/0x55f3"))
);
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x00490960") && line.contains("selector propagator"))
);
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x00490200") && line.contains("route/link comparator"))
);
assert_eq!(trace.candidate_consumer_hypotheses.len(), 3);
assert_eq!(
trace.candidate_consumer_hypotheses[0].status,
@ -24440,28 +24458,34 @@ mod tests {
trace.candidate_consumer_hypotheses[0]
.evidence
.iter()
.any(|line| line.contains("[this+0x226]==1 routes bridge families")
&& line.contains("[this+0x226]==2 routes tunnel families")
&& line.contains("[this+0x226]==3 routes overpass/ballast families")
&& line.contains("bit 0x20 in [this+0x24c]"))
.any(
|line| line.contains("[this+0x226]==1 routes bridge families")
&& line.contains("[this+0x226]==2 routes tunnel families")
&& line.contains("[this+0x226]==3 routes overpass/ballast families")
&& line.contains("bit 0x20 in [this+0x24c]")
)
);
assert!(
trace.candidate_consumer_hypotheses[0]
.evidence
.iter()
.any(|line| line.contains("0x0048a340 as the exact chooser-state setter")
&& line.contains("[this+0x226]")
&& line.contains("[this+0x219]")
&& line.contains("[this+0x251]")
&& line.contains("[this+0x24c]"))
.any(
|line| line.contains("0x0048a340 as the exact chooser-state setter")
&& line.contains("[this+0x226]")
&& line.contains("[this+0x219]")
&& line.contains("[this+0x251]")
&& line.contains("[this+0x24c]")
)
);
assert!(
trace.candidate_consumer_hypotheses[0]
.evidence
.iter()
.any(|line| line.contains("[this+0x219] indexes Steel/Stone/Wood tables")
&& line.contains("value 2 takes the special suspension-cap path")
&& line.contains("[this+0x251] selects Brick versus Concrete"))
.any(
|line| line.contains("[this+0x219] indexes Steel/Stone/Wood tables")
&& line.contains("value 2 takes the special suspension-cap path")
&& line.contains("[this+0x251] selects Brick versus Concrete")
)
);
assert!(
trace.candidate_consumer_hypotheses[0]
@ -24485,9 +24509,11 @@ mod tests {
trace.candidate_consumer_hypotheses[0]
.evidence
.iter()
.any(|line| line.contains("bridge-only two-child class is now grounded save-side")
&& line.contains("0x0002")
&& line.contains("BridgeSTWood_Section.3dp"))
.any(
|line| line.contains("bridge-only two-child class is now grounded save-side")
&& line.contains("0x0002")
&& line.contains("BridgeSTWood_Section.3dp")
)
);
assert!(
trace.candidate_consumer_hypotheses[0]
@ -24506,6 +24532,32 @@ mod tests {
&& line.contains("0x52ec50")
&& line.contains("0x55f3"))
);
assert!(
trace.candidate_consumer_hypotheses[0]
.evidence
.iter()
.any(|line| line.contains("chooser siblings calling 0x00490960 directly")
&& line.contains("0x0048a340")
&& line.contains("0x0048f4c0")
&& line.contains("0x00490200"))
);
assert!(
trace.candidate_consumer_hypotheses[0]
.evidence
.iter()
.any(|line| line.contains("0x00490960 copying selector fields into the child object")
&& line.contains("0x00455b70")
&& line.contains("0x005cfd74")
&& line.contains("[this+0x248]"))
);
assert!(
trace.candidate_consumer_hypotheses[0]
.evidence
.iter()
.any(|line| line.contains("0x00490200 reading the seeded lanes")
&& line.contains("0x006cfca8")
&& line.contains("[this+0x216/+0x218/+0x201/+0x202]"))
);
assert!(
trace.candidate_consumer_hypotheses[0]
.evidence
@ -24534,14 +24586,12 @@ mod tests {
&& line.contains("paired DT/ST siblings at 0x004a2c80 and 0x004a34e0")
&& line.contains("grounded top-level branch meaning")
&& line.contains("grounded bridge/tunnel material selector roles")
&& line.contains("writer side is now grounded through 0x00491c60, 0x0048a6c0, 0x00455a40, and concrete child serializer 0x004559d0")
&& line.contains("concrete child-construction/write-side chain through 0x00490960")
&& line.contains("0x004559d0")
}));
assert!(trace
.notes
.iter()
.any(|line| line.contains("ST-only")
&& line.contains("ST chooser sibling")
&& line.contains("DT sibling remains grounded statically")));
assert!(trace.notes.iter().any(|line| line.contains("ST-only")
&& line.contains("ST chooser sibling")
&& line.contains("DT sibling remains grounded statically")));
assert!(
trace.candidate_consumer_hypotheses[0]
.evidence

View file

@ -3057,6 +3057,19 @@ The low helper strip beneath that shared family is tighter now too: `0x0052ecd0`
then closes `0x55f3`. So the remaining infrastructure problem is row-to-record mapping inside
the `0x38a5` stream and which chooser/seed values reach those string lanes and footer bytes, not
identifying the per-child loader family.
The source side is tighter now too. The paired chooser siblings already bounded above this seam
call `0x00490960` directly beside `0x0048a340/0x0048f4c0/0x00490200`, and `0x00490960` copies
selector fields into the child object (`[this+0x219]`, `[this+0x251]`, bit `0x20` in
`[this+0x24c]`, and `[this+0x226]`), allocates a fresh `0x23a` `Infrastructure` child, seeds it
through `0x00455b70` with caller-supplied stem input plus fixed literal `Infrastructure` at
`0x005cfd74`, attaches it through `0x005395d0`, seeds position lanes through
`0x00539530/0x0053a5b0`, and can cache it as primary child in `[this+0x248]`. The sibling
`0x00490200` then reads the same seeded lanes `[this+0x206/+0x20a/+0x20e]` back through the live
route collection at `0x006cfca8`, compares them against the current owner using
`[this+0x216/+0x218/+0x201/+0x202]`, and behaves like a route/link comparator layered above the
same child payload fields that `0x004559d0` later serializes. So the remaining infrastructure
problem is which chooser branches feed `0x00490960` which stem/selector tuples for each
grounded save-side class, not where the child payload lanes come from at all.
The smaller attach helper `0x00490a3c` is now bounded too: it conditionally allocates one
`Infrastructure` child from a caller-supplied payload stem, attaches it to the current owner, and
then seeds three caller-supplied position lanes through `0x00539530` and `0x0053a5b0`. The

View file

@ -83,6 +83,21 @@ Working rule:
dispatch slot `+0x4c`, run `0x0052ec50`, and close `0x55f3`. So the remaining infrastructure
frontier is no longer “which slot does `0x00455a40` jump to?”; it is which chooser/seed values
reach those string lanes and the trailing footer path.
- That source side is narrower now too: direct disassembly shows the paired chooser siblings
calling `0x00490960` directly beside `0x0048a340/0x0048f4c0/0x00490200`, and `0x00490960`
copies selector fields into the child object (`[this+0x219]`, `[this+0x251]`, bit `0x20` in
`[this+0x24c]`, and `[this+0x226]`), allocates a fresh `0x23a` `Infrastructure` child, seeds it
through `0x00455b70` with caller-supplied stem input plus fixed literal `Infrastructure` at
`0x005cfd74`, attaches it through `0x005395d0`, seeds position lanes through
`0x00539530/0x0053a5b0`, and can cache it as primary child in `[this+0x248]`. The remaining
problem is no longer “where do the child payload lanes come from?” but “which chooser branches
feed `0x00490960` which caller stem and selector tuple for each grounded save-side class?”.
- The sibling `0x00490200` is tighter now too: it reads the seeded lanes
`[this+0x206/+0x20a/+0x20e]` back through the live route collection at `0x006cfca8`, compares
them against the current owner using `[this+0x216/+0x218/+0x201/+0x202]`, and behaves like a
route/link comparator layered above the same child payload lanes that `0x004559d0` later
serializes. So the next infrastructure pass should treat `0x00490960` as the source owner and
`0x00490200` as a consumer of the same seeded lanes, not as separate unexplained seams.
- The smaller helper `0x00490a3c` is narrower now too: it allocates one literal `Infrastructure`
child, seeds it through `0x00455b70` with caller-provided stem input, attaches it through
`0x005395d0`, seeds position lanes through `0x00539530/0x0053a5b0`, and optionally caches it as