diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index fe5870e..f13d050 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -4942,6 +4942,7 @@ fn build_region_service_trace_report( let next_owner_questions = vec![ "Which restore seam re-seeds [region+0x25e] and clears [region+0x302/+0x316] before the grounded 0x00422100 -> 0x004358d0 producer/consumer cycle runs again?".to_string(), "Which stable region id or class discriminator survives save/load strongly enough to drive 0x004358d0 after the class-0 raster/id rebuilds are ruled out?".to_string(), + "Which later global restore continuation after 0x00444887 rehydrates [region+0x2a4] and [region+0x310/+0x338/+0x360] once the 0x00421510 -> 0x0041f5c0 -> 0x00455fc0 path and the 0x00444b90 -> 0x00420560 per-region follow-on are both ruled down?".to_string(), "How far can the grounded 0x00420030/0x00420280 plus 0x0047efe0 connection chain be rehosted directly before the transient queued-notice family matters again?".to_string(), ]; let candidate_consumer_hypotheses = vec![ @@ -5025,6 +5026,27 @@ fn build_region_service_trace_report( "needs the upstream restore seam for [region+0x25e/+0x302/+0x316] rather than more queue-side probing".to_string(), ], }, + SmpServiceConsumerHypothesis { + label: "later global restore continuation".to_string(), + status: "next_global_restore_handoff_target".to_string(), + candidate_consumers: vec![ + "0x00444887 broader restore continuation after region refresh".to_string(), + "0x00487c20 territory_collection_refresh_records_from_tagged_bundle".to_string(), + "0x0040b5d0 support_collection_refresh_records_from_tagged_bundle".to_string(), + "0x00444b90 later per-region restore follow-on loop".to_string(), + "0x00420560 region profile-derived scalar refresh helper".to_string(), + ], + evidence: vec![ + "the checked-in region trace already grounds 0x00444887 as the first caller-side checkpoint above 0x00421510: it refreshes the region collection and then immediately advances into the territory and support collection refresh owners".to_string(), + "the same grounded evidence already narrows the later per-region follow-on too: 0x00444b90 dispatches 0x00420560 over each live region after the broader restore continuation has already advanced".to_string(), + "direct disassembly already rules that per-region follow-on down as a latch owner: 0x00420560 only zeroes and recomputes [region+0x312] from the embedded profile collection [region+0x37f]/[region+0x383] and lazily seeds the year-driven [region+0x317/+0x31b] band through 0x00420350, not [region+0x276/+0x302/+0x316]".to_string(), + "that leaves the broader 0x00444887 continuation as the next structured restore seam above the ruled-down 0x00421510 -> 0x0041f5c0 -> 0x00455fc0 path when chasing acquisition-side lanes [region+0x2a4] and [region+0x310/+0x338/+0x360]".to_string(), + ], + blockers: vec![ + "the concrete later-global restore owner that rehydrates [region+0x2a4] and [region+0x310/+0x338/+0x360] is still not grounded below the 0x00444887 continuation".to_string(), + "territory and support collection refresh owners are adjacent in the same continuation and may still carry shared prerequisites before the region-side rebuild resumes".to_string(), + ], + }, SmpServiceConsumerHypothesis { label: "queued kind-7 modal dispatch path".to_string(), status: "shell_adjacent_reference_only".to_string(), @@ -27386,8 +27408,8 @@ mod tests { assert!(!trace.atlas_candidate_consumers.is_empty()); assert_eq!(trace.known_owner_bridge_fields.len(), 6); assert_eq!(trace.known_bridge_helpers.len(), 14); - assert_eq!(trace.next_owner_questions.len(), 3); - assert_eq!(trace.candidate_consumer_hypotheses.len(), 4); + assert_eq!(trace.next_owner_questions.len(), 4); + assert_eq!(trace.candidate_consumer_hypotheses.len(), 5); assert_eq!( trace.candidate_consumer_hypotheses[0].status, "highest_priority_static_mapping_target" @@ -27396,6 +27418,10 @@ mod tests { trace.candidate_consumer_hypotheses[2].status, "secondary_candidate_after_pending_service" ); + assert_eq!( + trace.candidate_consumer_hypotheses[3].status, + "next_global_restore_handoff_target" + ); assert_eq!( trace.candidate_consumer_hypotheses[1].status, "parallel_static_mapping_target" @@ -27462,6 +27488,38 @@ mod tests { && line.contains("0x00455f60") && line.contains("bit 0x10")) ); + assert!( + trace.candidate_consumer_hypotheses[3] + .candidate_consumers + .iter() + .any(|line| line.contains("0x00444887")) + ); + assert!( + trace.candidate_consumer_hypotheses[3] + .candidate_consumers + .iter() + .any(|line| line.contains("0x00487c20")) + ); + assert!( + trace.candidate_consumer_hypotheses[3] + .candidate_consumers + .iter() + .any(|line| line.contains("0x0040b5d0")) + ); + assert!( + trace.candidate_consumer_hypotheses[3] + .evidence + .iter() + .any(|line| line.contains("0x00444887") + && line.contains("0x00421510")) + ); + assert!( + trace.candidate_consumer_hypotheses[3] + .evidence + .iter() + .any(|line| line.contains("0x00444b90") + && line.contains("0x00420560")) + ); assert!( trace.candidate_consumer_hypotheses[1] .evidence