diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index 6b01e23..a96c82e 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -3708,6 +3708,10 @@ pub struct SmpPeriodicCompanyServiceTraceReport { pub next_owner_questions: Vec, pub linked_transit_shellless_readiness_status: String, #[serde(default)] + pub linked_transit_minimum_persisted_identity_inputs: Vec, + #[serde(default)] + pub linked_transit_live_rebuilt_cache_lanes: Vec, + #[serde(default)] pub linked_transit_runtime_backed_input_families: Vec, #[serde(default)] pub linked_transit_remaining_owner_gaps: Vec, @@ -4982,6 +4986,20 @@ fn build_periodic_company_service_trace_report( ]; let linked_transit_shellless_readiness_status = "timed_cache_and_train_side_followons_grounded_site_cache_input_owners_missing".to_string(); + let linked_transit_minimum_persisted_identity_inputs = vec![ + "save-backed company identity, current company id, and linked-transit latch [company+0x0d56] selecting one per-company cache cell root beneath [site+0x5bd][company_id]".to_string(), + "save-backed linked-transit route-anchor tuple [company+0x0d35] and fallback count lanes [company+0x7664/+0x7668/+0x766c] feeding the reachable-site strip above 0x00401860 / 0x004801a0".to_string(), + "save-backed placed-structure owner and class identity lanes [site+0x276] and [site+0x04] consumed by 0x0047efe0 / 0x0047fd50 before any linked-transit site is marked eligible".to_string(), + "save-backed placed-structure and peer identity lanes [site+0x2a4], [site+0x2a8], and [peer+0x04/+0x08] giving the live site and linked-peer ids that the cache rebuilds query".to_string(), + "save-backed world calendar lanes [world+0x15] and [world+0x0d] driving refresh cadence, age stamping, and the year-banded policy table used by 0x00408380".to_string(), + ]; + let linked_transit_live_rebuilt_cache_lanes = vec![ + "0x004093d0 stamps [company+0x0d3e], clears each selected [site+0x5bd][company_id] cell, frees and reallocates its peer table at +0x06, repopulates +0x02/+0x06/+0x0a, and marks bytes +0x00/+0x01 from the live site filter".to_string(), + "0x004093d0 fills each 0x0d-stride peer row from 0x004a6630, so peer-table dword +0x05 step count and float +0x09 normalized continuity share are rebuilt scratch from live route-entry tracker results".to_string(), + "0x00407bd0 clears [site+0x0e/+0x12/+0x16] before folding the rebuilt peer rows plus candidate tables back into weighted/raw/final per-site score lanes".to_string(), + "0x00481910 and 0x004819b0 rebuild the local occupancy/count lane [site+0x5c1] from current-site-id resolver 0x004a9340 rather than from any serialized cache blob".to_string(), + "0x004aee2b rewrites [site+0x5c5] from world counter [world+0x15], making the chooser age bonus a live rebuilt lane rather than persisted cache state".to_string(), + ]; let linked_transit_runtime_backed_input_families = vec![ "company linked-transit route-anchor tuple [company+0x0d35] and fallback count lanes [company+0x7664/+0x7668/+0x766c] through 0x00401860".to_string(), "company linked-transit peer-cache refresh absolute counter [company+0x0d3e] driving the shorter 0x00409720 -> 0x004093d0 cadence".to_string(), @@ -4999,8 +5017,8 @@ fn build_periodic_company_service_trace_report( "linked-transit train-side autoroute append / rotate strip 0x00409770 plus add-train owner 0x00409830 beneath roster balancer 0x00409950".to_string(), ]; let linked_transit_remaining_owner_gaps = vec![ - "which persisted site-side inputs are sufficient to repopulate the 0x1a-byte per-company cache cells rooted at [site+0x5bd], the local occupancy/age lanes [site+0x5c1/+0x5c5], and the weighted site-score lanes [site+0x0e/+0x12/+0x16] without relying on shell-owned layout or route refresh follow-ons".to_string(), - "which placed-structure-side restore or service owner above 0x00407780 / 0x004077e0 / 0x004093d0 / 0x00407bd0 guarantees those repopulated cache lanes are trustworthy before 0x00408280 / 0x00408380 / 0x00409770 run shelllessly".to_string(), + "which placed-structure-side restore or service owner guarantees that the save-backed identity inputs [site+0x276], [site+0x04], [site+0x2a4], [site+0x2a8], and [peer+0x04/+0x08] have already rehydrated the live site and peer tables before 0x004093d0 / 0x00407bd0 rebuild their scratch cache lanes".to_string(), + "which higher-layer non-hook owner above 0x00407780 / 0x004077e0 / 0x004093d0 / 0x00407bd0 / 0x004a6630 provides the live route-entry tracker and candidate-table inputs that make those rebuilt lanes trustworthy before 0x00408280 / 0x00408380 / 0x00409770 run shelllessly".to_string(), ]; let companies = analysis @@ -5311,6 +5329,8 @@ fn build_periodic_company_service_trace_report( known_bridge_helpers, next_owner_questions, linked_transit_shellless_readiness_status, + linked_transit_minimum_persisted_identity_inputs, + linked_transit_live_rebuilt_cache_lanes, linked_transit_runtime_backed_input_families, linked_transit_remaining_owner_gaps, companies, @@ -28255,6 +28275,11 @@ mod tests { trace.linked_transit_shellless_readiness_status, "timed_cache_and_train_side_followons_grounded_site_cache_input_owners_missing" ); + assert_eq!( + trace.linked_transit_minimum_persisted_identity_inputs.len(), + 5 + ); + assert_eq!(trace.linked_transit_live_rebuilt_cache_lanes.len(), 5); assert_eq!(trace.linked_transit_runtime_backed_input_families.len(), 14); assert_eq!(trace.linked_transit_remaining_owner_gaps.len(), 2); assert_eq!(trace.companies.len(), 1); @@ -28683,6 +28708,53 @@ mod tests { && line.contains("0x00412560") && line.contains("[site+0x2b4/+0x2b8/+0x2bc]") })); + assert!( + trace + .linked_transit_minimum_persisted_identity_inputs + .iter() + .any(|line| line.contains("[site+0x276]") + && line.contains("[site+0x04]") + && line.contains("0x0047efe0 / 0x0047fd50")) + ); + assert!( + trace + .linked_transit_minimum_persisted_identity_inputs + .iter() + .any(|line| line.contains("[site+0x2a4]") + && line.contains("[site+0x2a8]") + && line.contains("[peer+0x04/+0x08]")) + ); + assert!( + trace + .linked_transit_live_rebuilt_cache_lanes + .iter() + .any(|line| line.contains("0x004093d0") + && line.contains("[company+0x0d3e]") + && line.contains("+0x02/+0x06/+0x0a")) + ); + assert!( + trace + .linked_transit_live_rebuilt_cache_lanes + .iter() + .any(|line| line.contains("0x00407bd0") + && line.contains("[site+0x0e/+0x12/+0x16]")) + ); + assert!( + trace + .linked_transit_live_rebuilt_cache_lanes + .iter() + .any(|line| line.contains("0x00481910") + && line.contains("0x004819b0") + && line.contains("0x004a9340")) + ); + assert!( + trace + .linked_transit_live_rebuilt_cache_lanes + .iter() + .any(|line| line.contains("0x004aee2b") + && line.contains("[site+0x5c5]") + && line.contains("[world+0x15]")) + ); assert!( trace .linked_transit_runtime_backed_input_families @@ -28744,10 +28816,19 @@ mod tests { trace .linked_transit_remaining_owner_gaps .iter() - .any(|line| line.contains("0x1a-byte per-company cache cells") - && line.contains("[site+0x5bd]") - && line.contains("[site+0x5c1/+0x5c5]") - && line.contains("[site+0x0e/+0x12/+0x16]")) + .any(|line| line.contains("[site+0x276]") + && line.contains("[site+0x04]") + && line.contains("[site+0x2a4]") + && line.contains("[peer+0x04/+0x08]")) + ); + assert!( + trace + .linked_transit_remaining_owner_gaps + .iter() + .any(|line| line.contains("0x00407780") + && line.contains("0x004093d0") + && line.contains("0x00407bd0") + && line.contains("0x004a6630")) ); assert!( trace diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 3ac61cf..b0755cf 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -40,11 +40,17 @@ Working rule: bytes `+0x00/+0x01` gate participation, dwords `+0x02/+0x06/+0x0a` hold peer count, peer pointer, and peer-cache refresh stamp, and floats `+0x0e/+0x12/+0x16` are the weighted/raw/final score lanes + - the persisted-vs-live split is tighter now too: + the minimal save-backed identity set is `[site+0x276]`, `[site+0x04]`, `[site+0x2a4]`, + `[site+0x2a8]`, `[peer+0x04/+0x08]`, `[company+0x0d35/+0x0d56/+0x7664/+0x7668/+0x766c]`, + and world calendar lanes `[world+0x15/+0x0d]`, while the actual cache contents at + `[site+0x5bd]`, `[site+0x5c1/+0x5c5]`, and `[site+0x0e/+0x12/+0x16]` are live rebuilt scratch + lanes under `0x004093d0 / 0x00407bd0 / 0x00481910 / 0x004819b0 / 0x004aee2b` - that makes the next linked-transit question narrower: - identify which persisted site-side inputs are sufficient to repopulate the per-company cache - cells, occupancy/age lanes, and weighted site-score lanes consumed by - `0x00408280 / 0x00408380`, because the bounded train-side strip - `0x00409770 / 0x00409830 / 0x00409950` is no longer the blocker + identify which restore or service owner guarantees those save-backed site/peer/company identity + lanes have already rebuilt the live placed-structure, peer, route-entry tracker, and candidate + tables consumed by `0x004093d0 / 0x00407bd0 / 0x004a6630`, because the bounded train-side strip + `0x00409770 / 0x00409830 / 0x00409950` and the cache-cell semantics are no longer the blocker - Make the next static/rehost slice the near-city industry acquisition owner seam under `0x004014b0`, not another generic infrastructure pass. The concrete questions are: - which minimum persisted peer-site fields on the already-grounded `0x006cec20` placed-structure