From 2998d93615393eb08f2662712c2c06502820559d Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sun, 19 Apr 2026 09:52:37 -0700 Subject: [PATCH] Split peer-site persisted and rebuild inputs --- crates/rrt-runtime/src/smp.rs | 56 +++++++++++++++++++++++++++++++++++ docs/rehost-queue.md | 8 +++++ 2 files changed, 64 insertions(+) diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index c5df9ff..044d0e6 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -3768,6 +3768,13 @@ pub struct SmpPeriodicCompanyServiceTraceReport { pub peer_site_selector_candidate_saved_nonzero_companion_name_pair_summaries: Vec, #[serde(default)] + pub peer_site_persisted_selector_bundle_fields: Vec, + #[serde(default)] + pub peer_site_rebuilt_transient_followon_fields: Vec, + pub peer_site_shellless_minimum_persisted_identity_status: String, + #[serde(default)] + pub peer_site_shellless_minimum_persisted_identity_inputs: Vec, + #[serde(default)] pub peer_site_restore_input_fields: Vec, #[serde(default)] pub peer_site_runtime_input_fields: Vec, @@ -4704,6 +4711,35 @@ fn build_periodic_company_service_trace_report( summarize_peer_site_selector_candidate_saved_policy_trailing_words(analysis); let peer_site_selector_candidate_saved_nonzero_companion_name_pair_summaries = summarize_peer_site_selector_candidate_saved_nonzero_companion_name_pairs(analysis); + let peer_site_persisted_selector_bundle_fields = vec![ + "0x5dc1 payload lane [owner+0x23e] restored by 0x0045c150 and later fed into 0x0045c36e" + .to_string(), + "0x5dc1 payload lane [owner+0x242] restored by 0x0045c150 as the repeated secondary payload string" + .to_string(), + "0x5dc1 post-secondary one-byte residue after the repeated secondary payload string" + .to_string(), + "broader saved child/runtime selector bundle [owner+0x246/+0x24e/+0x252] emitted by 0x0040c980 -> 0x0045b560" + .to_string(), + ]; + let peer_site_rebuilt_transient_followon_fields = vec![ + "[owner+0x246] primary transient handle rebuilt from payload strings by 0x0045c310" + .to_string(), + "[owner+0x24a] ambient transient rebuilt through 0x0045b210 after 0x0045b5f0 refreshes the current derived position scalar" + .to_string(), + "transient roots [owner+0x24e/+0x256/+0x25a/+0x25e] cleared by 0x0045c150 before 0x0045b5f0 / 0x0045b6f0 rebuild follow-on variant state" + .to_string(), + "larger animation/light/random-sound variant family rooted in [owner+0x23e] rebuilt through 0x0045b6f0 / 0x0045b760 / 0x0045baf0" + .to_string(), + ]; + let peer_site_shellless_minimum_persisted_identity_status = + "name_pair_and_post_secondary_byte_minimum_identity_subset_child_runtime_bundle_rebuild_followon".to_string(); + let peer_site_shellless_minimum_persisted_identity_inputs = vec![ + "[site+0x3cc] cached source placed-structure id".to_string(), + "[site+0x3d0] cached companion candidate/profile id".to_string(), + "0x5dc1 payload lane [owner+0x23e]".to_string(), + "0x5dc1 payload lane [owner+0x242]".to_string(), + "0x5dc1 post-secondary one-byte residue".to_string(), + ]; let peer_site_restore_input_fields = vec![ "[site+0x3cc] saved placed-structure id feeding 0x62b2fc".to_string(), "[site+0x3d0] saved companion-region id from [placed+0x173] feeding 0x62b268".to_string(), @@ -5432,6 +5468,10 @@ fn build_periodic_company_service_trace_report( "The same persisted selector seam is broader than just the two strings. Atlas-backed recovery now bounds 0x0040c980 -> 0x0045b560 as the derived serializer over [site+0x23e/+0x242/+0x246/+0x24e/+0x252], so the remaining restore-owner search should treat that 0x5dc1/0x5dc2 selector/child/runtime bundle as one persisted field family rather than only [site+0x23e/+0x242]." .to_string(), ); + notes.push( + "The loader-side counterpart now narrows the shellless minimum persisted subset too. 0x0045c150 restores [owner+0x23e] and [owner+0x242], clears the transient roots, and then hands off to 0x0045c310 / 0x0045b5f0 / 0x0045b6f0 to rebuild the primary child handle and larger ambient/animation/light/random-sound family. That means the broader 0x5dc1/0x5dc2 bundle should be treated as one persisted owner seam, but current shellless planning can keep the minimum identity subset at the cached ids [site+0x3cc/+0x3d0], the restored name-pair [owner+0x23e/+0x242], and the post-secondary discriminator byte while the child/runtime follow-ons stay on the rebuild side." + .to_string(), + ); SmpPeriodicCompanyServiceTraceReport { profile_family, @@ -5454,6 +5494,10 @@ fn build_periodic_company_service_trace_report( peer_site_selector_candidate_saved_companion_byte_summaries, peer_site_selector_candidate_saved_policy_trailing_word_summaries, peer_site_selector_candidate_saved_nonzero_companion_name_pair_summaries, + peer_site_persisted_selector_bundle_fields, + peer_site_rebuilt_transient_followon_fields, + peer_site_shellless_minimum_persisted_identity_status, + peer_site_shellless_minimum_persisted_identity_inputs, peer_site_restore_input_fields, peer_site_runtime_input_fields, peer_site_runtime_reconstruction_status, @@ -30179,6 +30223,18 @@ mod tests { .primary_name, "StationA" ); + assert_eq!(trace.peer_site_persisted_selector_bundle_fields.len(), 4); + assert_eq!(trace.peer_site_rebuilt_transient_followon_fields.len(), 4); + assert_eq!( + trace.peer_site_shellless_minimum_persisted_identity_status, + "name_pair_and_post_secondary_byte_minimum_identity_subset_child_runtime_bundle_rebuild_followon" + ); + assert_eq!( + trace + .peer_site_shellless_minimum_persisted_identity_inputs + .len(), + 5 + ); assert_eq!(trace.peer_site_restore_input_fields.len(), 5); assert_eq!(trace.peer_site_runtime_input_fields.len(), 3); assert_eq!( diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 0566134..dd88440 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -100,6 +100,14 @@ Working rule: `[site+0x23e/+0x242/+0x246/+0x24e/+0x252]`, so the remaining restore-owner question should treat that persisted selector/child/runtime bundle as one seam rather than only `[site+0x23e/+0x242]` + - the loader-side counterpart narrows the minimum shellless identity subset too: + `0x0045c150` restores `[owner+0x23e/+0x242]`, clears the transient roots, and then hands off + to `0x0045c310 / 0x0045b5f0 / 0x0045b6f0` to rebuild the primary child handle plus the larger + ambient/animation/light/random-sound family, so current shellless planning can keep the + minimum persisted subset at cached ids `[site+0x3cc/+0x3d0]`, restored name-pair + `[owner+0x23e/+0x242]`, and the post-secondary discriminator byte while treating + `[owner+0x246/+0x24e/+0x252]` as part of the broader saved bundle that still flows through the + rebuild side - Direct disassembly now narrows that acquisition strip further: - `0x004014b0` scans the live placed-structure collection at `0x0062b26c` - `0x0041f6e0 -> 0x0042b2d0` is the center-cell token gate over the current region