From a120053d2fd40b5ca35bd344ee3454fc5195fbd2 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sat, 18 Apr 2026 21:42:21 -0700 Subject: [PATCH] Ground acquisition create-side constructor family --- crates/rrt-runtime/src/smp.rs | 38 ++++++++++++++++++++++++++++++++--- docs/rehost-queue.md | 9 +++++++-- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index 1fb978c..5cb4c32 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -4582,6 +4582,8 @@ fn build_periodic_company_service_trace_report( .to_string(), "station-detail mutation path 0x0040dc40 already consumes [site+0x276], company stat-family 0x2329/0x0d, and candidate field [candidate+0x22], then commits linked-site side-state rebuild through 0x0040d1f0 / 0x00480710 / 0x0045b160 / 0x0045b9b0 / 0x00418be0 / 0x0040cd70" .to_string(), + "city-connection direct-placement family 0x00402cb0 -> 0x00403ed5/0x0040446b -> 0x004134d0 -> 0x0040ef10 already grounds the shared allocator/finalize path for newly created site rows" + .to_string(), "company stat-family lane 0x2329/0x0d already rehosted in runtime company state".to_string(), "company market state now carries the save-native linked-transit route-anchor tuple [company+0x0d35] and [company+0x7664/+0x7668/+0x766c]" .to_string(), @@ -4674,6 +4676,7 @@ fn build_periodic_company_service_trace_report( let atlas_candidate_consumers = vec![ "0x004019e0 periodic company outer service owner".to_string(), "0x00406050 city-connection bonus/news owner".to_string(), + "0x00402cb0 city-connection direct-placement builder owner".to_string(), "0x00409950 linked-transit train-roster balancer".to_string(), "0x004014b0 near-city industry acquisition and news owner".to_string(), "0x0040dc40 station-detail linked-site mutation validator/apply owner".to_string(), @@ -4733,6 +4736,10 @@ fn build_periodic_company_service_trace_report( .to_string(), "0x0040d1f0 / 0x00480710 / 0x0045b160 / 0x0045b9b0 / 0x00418be0 / 0x0040cd70 linked-site mutation-side side-state rebuild strip" .to_string(), + "0x00402cb0 / 0x00403ed5 / 0x0040446b city-connection direct-placement commit family" + .to_string(), + "0x004134d0 / 0x0040ef10 shared placed-structure allocator and finalize-or-rebuild lane for newly created site rows" + .to_string(), "0x0052edf0 generic base constructor seeding [this+0x04] from caller arg 1".to_string(), "0x00455b70 placed-structure specialization constructor feeding 0x0052edf0 arg 3 as the primary selector and arg 1 as fallback" .to_string(), @@ -4918,6 +4925,9 @@ fn build_periodic_company_service_trace_report( notes.push( "The acquisition-side consumer family is tighter now too. The checked-in station-detail action path 0x0040dc40 already consumes live owner company [site+0x276], candidate field [candidate+0x22], company stat-family 0x2329/0x0d, projected-cell validation 0x00417840 -> 0x004197e0, and compact-grid replay 0x004142c0/0x004142d0 before it commits the linked-site mutation through 0x0040d1f0 -> 0x00480710 -> 0x0045b160 / 0x0045b9b0 / 0x00418be0 / 0x0040cd70. That means these lanes are already grounded as live preconditions and mutation-side rebuild inputs, even though the save or replay owner that populates them for shellless acquisition is still the open question.".to_string(), ); + notes.push( + "The create-side family is grounded separately too. City-connection direct placement already reaches the shared constructor/finalize strip 0x00402cb0 -> 0x00403ed5/0x0040446b -> 0x004134d0 -> 0x0040ef10, so the remaining shellless gap is no longer 'how are new placed structures finalized?' It is specifically how restored existing rows regain the owner-company lane, self-id lane, cached tri-lane, and cached candidate bridge before acquisition-style consumers run.".to_string(), + ); notes.push( "Direct disassembly now tightens the remaining placed-structure lanes too: 0x0040cac0 is only the raw tri-lane delta reader over [site+0x310/+0x338/+0x360]; 0x0040d360 is only the exact subtype test [candidate+0x32] == 4; and the current binary write scan finds no direct placed-structure runtime writer for either [site+0x2a4] or [site+0x310/+0x338/+0x360], which now makes both lanes look payload/restore-owned rather than service-produced.".to_string(), ); @@ -27922,8 +27932,8 @@ mod tests { let trace = build_periodic_company_service_trace_report(&analysis); assert_eq!(trace.selected_company_id, Some(7)); - assert_eq!(trace.atlas_candidate_consumers.len(), 8); - assert_eq!(trace.known_bridge_helpers.len(), 47); + assert_eq!(trace.atlas_candidate_consumers.len(), 9); + assert_eq!(trace.known_bridge_helpers.len(), 49); assert_eq!(trace.next_owner_questions.len(), 4); assert_eq!(trace.companies.len(), 1); assert_eq!( @@ -28064,7 +28074,7 @@ mod tests { trace .near_city_acquisition_runtime_backed_input_families .len(), - 11 + 12 ); assert_eq!(trace.near_city_acquisition_remaining_owner_gaps.len(), 4); assert_eq!(trace.near_city_acquisition_region_lane_statuses.len(), 4); @@ -28077,6 +28087,9 @@ mod tests { line.contains("0x0040dc40") && line.contains("linked-site mutation validator/apply owner") })); + assert!(trace.atlas_candidate_consumers.iter().any(|line| { + line.contains("0x00402cb0") && line.contains("direct-placement builder owner") + })); assert!(trace.next_owner_questions.iter().any(|line| { line.contains("remaining placed-structure-side 0x004014b0 inputs") && line.contains("0x004014b0") @@ -28149,6 +28162,13 @@ mod tests { && line.contains("[site+0x276]") && line.contains("0x0040d1f0 / 0x00480710")) ); + assert!( + trace + .near_city_acquisition_runtime_backed_input_families + .iter() + .any(|line| line + .contains("0x00402cb0 -> 0x00403ed5/0x0040446b -> 0x004134d0 -> 0x0040ef10")) + ); assert!( trace .near_city_acquisition_runtime_backed_input_families @@ -28318,6 +28338,18 @@ mod tests { assert!(trace.known_bridge_helpers.iter().any(|line| line.contains( "0x0040d1f0 / 0x00480710 / 0x0045b160 / 0x0045b9b0 / 0x00418be0 / 0x0040cd70" ))); + assert!( + trace + .known_bridge_helpers + .iter() + .any(|line| line.contains("0x00402cb0 / 0x00403ed5 / 0x0040446b")) + ); + assert!( + trace + .known_bridge_helpers + .iter() + .any(|line| line.contains("0x004134d0 / 0x0040ef10")) + ); let city_branch = trace.companies[0] .branches .iter() diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index c16f31f..4e908c2 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -121,9 +121,14 @@ Working rule: `0x2329/0x0d`, candidate field `[candidate+0x22]`, and the projected-cell validation strip `0x00417840 -> 0x004197e0`, then commits the linked-site mutation through `0x0040d1f0 / 0x00480710 / 0x0045b160 / 0x0045b9b0 / 0x00418be0 / 0x0040cd70` + - the create-side family is grounded separately too: + city-connection direct placement already reaches + `0x00402cb0 -> 0x00403ed5/0x0040446b -> 0x004134d0 -> 0x0040ef10` + as the shared constructor/finalize strip for newly created site rows - so the acquisition blocker is no longer “is there any real consumer family above these - lanes?”; it is specifically the restore or replay owner that populates those live preconditions - for shellless acquisition + lanes?” or “how do new placed structures finalize?”; it is specifically the restore or replay + owner that populates those live preconditions for already-restored rows before shellless + acquisition runs - 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