diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index c38bf7d..991be09 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -3671,6 +3671,8 @@ pub struct SmpPeriodicCompanyServiceTraceReport { pub near_city_acquisition_candidate_subtype_projection_status: String, pub near_city_acquisition_backing_record_projection_status: String, #[serde(default)] + pub near_city_acquisition_projection_hypotheses: Vec, + #[serde(default)] pub near_city_acquisition_remaining_owner_gaps: Vec, #[serde(default)] pub near_city_acquisition_region_lane_statuses: Vec, @@ -4597,6 +4599,60 @@ fn build_periodic_company_service_trace_report( let near_city_acquisition_backing_record_projection_status = "selector_owner_grounded_projection_sufficient_for_peer_helpers_not_candidate_row" .to_string(); + let near_city_acquisition_projection_hypotheses = vec![ + SmpServiceConsumerHypothesis { + label: "site_owner_and_self_id_replay_from_post_load_refresh".to_string(), + status: "bounded_candidate".to_string(), + candidate_consumers: vec![ + "0x00444690 late world bring-up caller".to_string(), + "0x004133b0 placed-structure local-runtime replay owner".to_string(), + "0x0040ee10 live-site position/scalar refresh helper".to_string(), + "0x00480710 linked-site runtime side-buffer and route-entry refresh".to_string(), + ], + evidence: vec![ + "[site+0x276] live owner-company meaning is grounded through 0x0047efe0 / 0x0040d210".to_string(), + "[site+0x2a4] self-id meaning is grounded through 0x0041f7e0 / 0x0041f810 / 0x0041f850".to_string(), + "0x00444690 -> 0x004133b0 -> 0x0040ee10 is the current checked-in replay family above live placed structures".to_string(), + ], + blockers: vec![ + "no checked-in replay write ownership yet ties 0x004133b0 / 0x0040ee10 directly to [site+0x276] or [site+0x2a4]".to_string(), + ], + }, + SmpServiceConsumerHypothesis { + label: "site_cached_tri_lane_payload_or_restore_owner".to_string(), + status: "bounded_candidate".to_string(), + candidate_consumers: vec![ + "0x36b1/0x36b2/0x36b3 placed-structure triplet owner".to_string(), + "0x00455fc0 shared tagged payload loader".to_string(), + "0x00444690 -> 0x004133b0 replay strip".to_string(), + ], + evidence: vec![ + "0x0040cac0 is only the exact raw delta reader over [site+0x310/+0x338/+0x360]".to_string(), + "the current binary write scan finds no direct placed-structure runtime writer for [site+0x310/+0x338/+0x360]".to_string(), + "current checked-in save owners still do not serialize those lanes directly, which keeps payload or restore ownership as the leading hypothesis".to_string(), + ], + blockers: vec![ + "no checked-in triplet or side-buffer payload field is yet tied directly to the tri-lane".to_string(), + ], + }, + SmpServiceConsumerHypothesis { + label: "backing_record_selector_to_candidate_subtype_projection".to_string(), + status: "bounded_candidate".to_string(), + candidate_consumers: vec![ + "0x0045c150 -> 0x0045c310 -> 0x0045c36e -> 0x00456100 -> 0x00455b70".to_string(), + "0x0052edf0 base constructor seeding [site+0x04]".to_string(), + "0x004131f0 -> 0x00412fb0 -> 0x004120b0 -> 0x00412ab0 aux-candidate load chain".to_string(), + ], + evidence: vec![ + "[site+0x04] backing-record selector owner is grounded".to_string(), + "candidate subtype ownership is bounded under the aux-candidate load and stem-policy chain".to_string(), + "0x0040d360 only consumes the loaded candidate subtype byte [candidate+0x32] == 4".to_string(), + ], + blockers: vec![ + "no checked-in bridge yet maps one restored [site+0x04] selector value back onto the loaded aux-candidate row used by 0x0040d360".to_string(), + ], + }, + ]; let near_city_acquisition_remaining_owner_gaps = vec![ "save-native or replay projection of placed-structure owner-company field [site+0x276] for the acquisition-side owner-present gate; the live meaning is already grounded through 0x0047efe0".to_string(), "save or replay projection of [site+0x2a4] as the current record's placed-structure id lane before 0x004269b0 commits the chosen site".to_string(), @@ -4927,6 +4983,7 @@ fn build_periodic_company_service_trace_report( near_city_acquisition_site_cached_tri_lane_projection_status, near_city_acquisition_candidate_subtype_projection_status, near_city_acquisition_backing_record_projection_status, + near_city_acquisition_projection_hypotheses, near_city_acquisition_remaining_owner_gaps, near_city_acquisition_region_lane_statuses, atlas_candidate_consumers, @@ -27944,6 +28001,39 @@ mod tests { trace.near_city_acquisition_backing_record_projection_status, "selector_owner_grounded_projection_sufficient_for_peer_helpers_not_candidate_row" ); + assert_eq!(trace.near_city_acquisition_projection_hypotheses.len(), 3); + assert_eq!( + trace.near_city_acquisition_projection_hypotheses[0].label, + "site_owner_and_self_id_replay_from_post_load_refresh" + ); + assert_eq!( + trace.near_city_acquisition_projection_hypotheses[1].label, + "site_cached_tri_lane_payload_or_restore_owner" + ); + assert_eq!( + trace.near_city_acquisition_projection_hypotheses[2].label, + "backing_record_selector_to_candidate_subtype_projection" + ); + assert!( + trace.near_city_acquisition_projection_hypotheses[0] + .candidate_consumers + .iter() + .any(|line| line.contains("0x004133b0")) + ); + assert!( + trace.near_city_acquisition_projection_hypotheses[1] + .candidate_consumers + .iter() + .any(|line| line.contains("0x36b1/0x36b2/0x36b3")) + ); + assert!( + trace.near_city_acquisition_projection_hypotheses[2] + .candidate_consumers + .iter() + .any(|line| line.contains( + "0x0045c150 -> 0x0045c310 -> 0x0045c36e -> 0x00456100 -> 0x00455b70" + )) + ); assert_eq!( trace .near_city_acquisition_runtime_backed_input_families diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 3a9738e..28216b0 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -95,6 +95,10 @@ Working rule: - site cached tri-lane = `delta_reader_grounded_projection_missing` - candidate subtype lane = `owner_strip_grounded_backing_record_projection_missing` - backing-record selector bridge = `selector_owner_grounded_projection_sufficient_for_peer_helpers_not_candidate_row` + - the same trace now also carries three explicit projection hypotheses for the next pass: + - `site_owner_and_self_id_replay_from_post_load_refresh` + - `site_cached_tri_lane_payload_or_restore_owner` + - `backing_record_selector_to_candidate_subtype_projection` - direct disassembly now shows the generic base constructor `0x0052edf0` clearing base state through `0x0052ecd0` and then writing `[this+0x04]` from caller arg `1` - `0x00455b70` is the concrete placed-structure specialization constructor feeding