From 7cb9edcf42bc549836c039094b308702aafa2003 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sat, 18 Apr 2026 22:32:13 -0700 Subject: [PATCH] Extract acquisition tri-lane formula inputs --- crates/rrt-runtime/src/smp.rs | 55 +++++++++++++++++++++++++++++++++++ docs/rehost-queue.md | 12 ++++++++ 2 files changed, 67 insertions(+) diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index 9b2f6a4..c892ac3 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -3689,6 +3689,8 @@ pub struct SmpPeriodicCompanyServiceTraceReport { #[serde(default)] pub near_city_acquisition_tri_lane_direct_caller_families: Vec, #[serde(default)] + pub near_city_acquisition_tri_lane_formula_input_lanes: Vec, + #[serde(default)] pub near_city_acquisition_projection_hypotheses: Vec, #[serde(default)] pub near_city_acquisition_remaining_owner_gaps: Vec, @@ -4693,6 +4695,13 @@ fn build_periodic_company_service_trace_report( "0x0044b81a is an owner-company-aware 0x0040d540 caller that also reaches 0x0040cb70 and 0x00436590 news/event id 0x65".to_string(), "0x004b70f5 / 0x004b7979 are broader 0x0040d540 callers routing through 0x004337a0 and downstream 0x00540120 / 0x00518140 state consumers".to_string(), ]; + let near_city_acquisition_tri_lane_formula_input_lanes = vec![ + "0x00412560 uses candidate-row time window [+0x20/+0x22], owner/absence booleans [+0x24/+0x28], list count [+0x2c], and membership list [+0x44]".to_string(), + "0x00412560 consumes world date and policy flags through 0x006cec78 fields [world+0x0d] and [world+0x4afb]".to_string(), + "0x0040d450 combines helper outputs 0x00455810 / 0x00455800 / 0x0044ad60 with owner-company lane [site+0x276] and world event sink 0x00436590 ids 0x66/0x68".to_string(), + "0x00410b30..0x004118f4 consumes candidate-row fields [+0x18/+0x1c/+0x2a/+0x2c/+0x44], subject latch [site+0x78c], and personality byte [site+0x391]".to_string(), + "0x00410b30..0x004118f4 also feeds world-side scalar [world+0x4caa], owner-company scalar [company+0x0d5d] through 0x0040d210, and the local cache bands [site+0x2e8], [site+0x310], [site+0x338], and [site+0x360]".to_string(), + ]; let near_city_acquisition_projection_hypotheses = vec![ SmpServiceConsumerHypothesis { label: "site_owner_replay_from_post_load_refresh_self_id_reconstructible".to_string(), @@ -5175,6 +5184,7 @@ fn build_periodic_company_service_trace_report( near_city_acquisition_tri_lane_candidate_gate_fields, near_city_acquisition_tri_lane_runtime_writer_roles, near_city_acquisition_tri_lane_direct_caller_families, + near_city_acquisition_tri_lane_formula_input_lanes, near_city_acquisition_projection_hypotheses, near_city_acquisition_remaining_owner_gaps, near_city_acquisition_region_lane_statuses, @@ -28230,6 +28240,12 @@ mod tests { .len(), 5 ); + assert_eq!( + trace + .near_city_acquisition_tri_lane_formula_input_lanes + .len(), + 5 + ); assert_eq!(trace.near_city_acquisition_projection_hypotheses.len(), 3); assert_eq!( trace.near_city_acquisition_projection_hypotheses[0].label, @@ -28609,6 +28625,45 @@ mod tests { && line.contains("0x004337a0") && line.contains("0x00540120 / 0x00518140")) ); + assert!( + trace + .near_city_acquisition_tri_lane_formula_input_lanes + .iter() + .any(|line| line.contains("[+0x20/+0x22]") + && line.contains("[+0x24/+0x28]") + && line.contains("[+0x44]")) + ); + assert!( + trace + .near_city_acquisition_tri_lane_formula_input_lanes + .iter() + .any(|line| line.contains("[world+0x0d]") && line.contains("[world+0x4afb]")) + ); + assert!( + trace + .near_city_acquisition_tri_lane_formula_input_lanes + .iter() + .any(|line| line.contains("0x00455810 / 0x00455800 / 0x0044ad60") + && line.contains("[site+0x276]") + && line.contains("0x66/0x68")) + ); + assert!( + trace + .near_city_acquisition_tri_lane_formula_input_lanes + .iter() + .any(|line| line.contains("[+0x18/+0x1c/+0x2a/+0x2c/+0x44]") + && line.contains("[site+0x78c]") + && line.contains("[site+0x391]")) + ); + assert!( + trace + .near_city_acquisition_tri_lane_formula_input_lanes + .iter() + .any(|line| line.contains("[world+0x4caa]") + && line.contains("[company+0x0d5d]") + && line.contains("[site+0x310]") + && line.contains("[site+0x360]")) + ); assert!( trace .near_city_acquisition_remaining_owner_gaps diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index f9f60fc..279e74c 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -179,6 +179,18 @@ Working rule: `0x0040cb70` and news/event id `0x65`, and `0x004b70f5 / 0x004b7979` are broader sibling `0x0040d540` callers routing through `0x004337a0` and downstream `0x00540120 / 0x00518140` + - formula input lanes are now structured too: + `0x00412560` uses candidate-row time window `+0x20/+0x22`, + owner/absence booleans `+0x24/+0x28`, + list count `+0x2c`, + and membership list `+0x44`, + while the wider `0x00410b30..0x004118f4` loop consumes candidate-row + `+0x18/+0x1c/+0x2a/+0x2c/+0x44`, + subject latch `[site+0x78c]`, + personality byte `[site+0x391]`, + world lanes `[world+0x0d]`, `[world+0x4afb]`, `[world+0x4caa]`, + owner-company scalar `[company+0x0d5d]`, + and the local cache bands `[site+0x2e8]`, `[site+0x310]`, `[site+0x338]`, `[site+0x360]` - the direct writer census now narrows the remaining owner-company question too: grounded `[site+0x276]` writes cluster under create-side and live mutation families such as `0x004269b0 / 0x00426a10`, the create-side `0x0040ef10 / 0x0040f6d0` strip, and the bulk