From e80f7333f08081ffc3407e4d7a72ebe393e23536 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sat, 18 Apr 2026 15:29:56 -0700 Subject: [PATCH] Ground infrastructure child construction strip --- crates/rrt-runtime/src/smp.rs | 206 +++++++++++------- ...ntime-roots-camera-and-support-families.md | 13 ++ docs/rehost-queue.md | 15 ++ 3 files changed, 156 insertions(+), 78 deletions(-) diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index f2dda8d..aeb5d85 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -1989,7 +1989,8 @@ pub struct SmpSavePlacedStructureDynamicSideBufferDominantProfileSpanClassSummar #[serde(default)] pub sample_rows: Vec, #[serde(default)] - pub name_pair_summaries: Vec, + pub name_pair_summaries: + Vec, #[serde(default)] pub compact_prefix_pattern_summaries: Vec, @@ -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::>(); @@ -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, Option, Option)>>::new(); + let mut name_prelude_pattern_groups = BTreeMap::< + (u16, u8), + Vec<(usize, Option, Option, Option)>, + >::new(); for ( name_tag_relative_offset, primary_name, @@ -13398,8 +13404,7 @@ fn parse_save_placed_structure_dynamic_side_buffer_probe( ) .take(8) .collect::>(); - let mut name_prelude_profile_span_groups = - BTreeMap::>::new(); + let mut name_prelude_profile_span_groups = BTreeMap::>::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::>(); - 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 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 da605aa..4896d1a 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 @@ -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 diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 8c4fb7c..c0332e4 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -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