From 082052a4da2b983ff633e40eabaf7f8337566458 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sat, 18 Apr 2026 21:37:57 -0700 Subject: [PATCH] Ground acquisition mutation-side consumer bridge --- crates/rrt-runtime/src/smp.rs | 47 ++++++++++++++++++++++++++++++++--- docs/rehost-queue.md | 12 +++++++-- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index 6dfac18..3258fdc 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -4580,6 +4580,8 @@ fn build_periodic_company_service_trace_report( .to_string(), "aux-candidate stream-load and stem-policy chain 0x004131f0 -> 0x00412fb0 -> 0x004120b0 -> 0x00412ab0 already grounds the subtype byte consumed as [candidate+0x32]" .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(), "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( "0x00406050 city-connection bonus/news 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(), "0x00401c50 annual finance-policy owner".to_string(), "0x00420030 / 0x00420280 peer-site boolean/selector pair over 0x006cec20".to_string(), "0x004093d0 / 0x00407bd0 linked-transit refresh tails".to_string(), @@ -4724,6 +4727,12 @@ fn build_periodic_company_service_trace_report( "0x0047efe0 placed_structure_query_linked_company_id returning owner company id from [site+0x276]".to_string(), "0x0047fd50 linked-peer candidate-class gate returning true only for class-byte values 0/1/2 at [candidate+0x8c]".to_string(), "0x004131f0 / 0x00412fb0 / 0x004120b0 / 0x00412ab0 aux-candidate load and stem-policy chain owning subtype byte [candidate+0x32]".to_string(), + "0x0040dc40 station-detail linked-site mutation validator/apply path consuming [site+0x276], candidate field [candidate+0x22], and company stat-family 0x2329/0x0d" + .to_string(), + "0x00417840 / 0x004197e0 / 0x004142c0 / 0x004142d0 projected-cell validation and compact-grid replay strip ahead of the linked-site mutation" + .to_string(), + "0x0040d1f0 / 0x00480710 / 0x0045b160 / 0x0045b9b0 / 0x00418be0 / 0x0040cd70 linked-site mutation-side side-state rebuild strip" + .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(), @@ -4906,6 +4915,9 @@ fn build_periodic_company_service_trace_report( notes.push( "The shellless acquisition frontier is narrower now too: the peer-site selector/linked-peer seam is grounded enough to plan around, the company/chairman side now includes the save-native route-anchor tuple used by 0x00401860, the live owner-company meaning of [site+0x276] is grounded through 0x0047efe0 / 0x0040d210, the self-id meaning of [site+0x2a4] is grounded through 0x0041f7e0 / 0x0041f810 / 0x0041f850, and the subtype owner strip is bounded under the aux-candidate load chain 0x004131f0 -> 0x00412fb0 -> 0x004120b0 -> 0x00412ab0. The remaining blocker is the placed-structure-side restore or replay ownership for [site+0x276], [site+0x2a4], and the cached tri-lane [site+0x310/+0x338/+0x360], plus the projection from [site+0x04] back into the loaded candidate subtype row.".to_string(), ); + 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( "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(), ); @@ -27910,8 +27922,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(), 7); - assert_eq!(trace.known_bridge_helpers.len(), 44); + assert_eq!(trace.atlas_candidate_consumers.len(), 8); + assert_eq!(trace.known_bridge_helpers.len(), 47); assert_eq!(trace.next_owner_questions.len(), 4); assert_eq!(trace.companies.len(), 1); assert_eq!( @@ -28052,7 +28064,7 @@ mod tests { trace .near_city_acquisition_runtime_backed_input_families .len(), - 10 + 11 ); assert_eq!(trace.near_city_acquisition_remaining_owner_gaps.len(), 4); assert_eq!(trace.near_city_acquisition_region_lane_statuses.len(), 4); @@ -28061,6 +28073,10 @@ mod tests { && line.contains("0x006cec20") && line.contains("peer-site boolean/selector pair") })); + assert!(trace.atlas_candidate_consumers.iter().any(|line| { + line.contains("0x0040dc40") + && line.contains("linked-site mutation validator/apply owner") + })); assert!(trace.next_owner_questions.iter().any(|line| { line.contains("remaining placed-structure-side 0x004014b0 inputs") && line.contains("0x004014b0") @@ -28125,6 +28141,14 @@ mod tests { && line.contains("[candidate+0x32]") ) ); + assert!( + trace + .near_city_acquisition_runtime_backed_input_families + .iter() + .any(|line| line.contains("0x0040dc40") + && line.contains("[site+0x276]") + && line.contains("0x0040d1f0 / 0x00480710")) + ); assert!( trace .near_city_acquisition_runtime_backed_input_families @@ -28273,6 +28297,23 @@ mod tests { .iter() .any(|line| line.contains("0x004160aa") && line.contains("0x0040ee10")) ); + assert!( + trace + .known_bridge_helpers + .iter() + .any(|line| line.contains("0x0040dc40") + && line.contains("[site+0x276]") + && line.contains("0x2329/0x0d")) + ); + assert!( + trace + .known_bridge_helpers + .iter() + .any(|line| line.contains("0x00417840 / 0x004197e0 / 0x004142c0 / 0x004142d0")) + ); + assert!(trace.known_bridge_helpers.iter().any(|line| line.contains( + "0x0040d1f0 / 0x00480710 / 0x0045b160 / 0x0045b9b0 / 0x00418be0 / 0x0040cd70" + ))); let city_branch = trace.companies[0] .branches .iter() diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index e96ab76..871f015 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -93,8 +93,8 @@ Working rule: - site owner-company lane = `live_meaning_grounded_projection_missing` - site self-id lane = `live_meaning_grounded_projection_missing` - site cached tri-lane = `delta_reader_grounded_projection_missing` - - candidate subtype lane = `owner_strip_grounded_backing_record_projection_missing` - - backing-record selector bridge = `selector_owner_grounded_projection_sufficient_for_peer_helpers_not_candidate_row` + - candidate subtype lane = `cached_candidate_id_bridge_grounded_projection_missing` + - backing-record selector bridge = `cached_source_candidate_bridge_grounded_projection_missing` - the same trace now also carries three explicit projection hypotheses for the next pass: - `site_owner_and_self_id_replay_from_post_load_refresh` - `site_cached_tri_lane_payload_or_restore_owner` @@ -115,6 +115,14 @@ Working rule: - that leaves the remaining subtype blocker narrower: no checked-in replay or restore owner yet guarantees `[site+0x3d0]` is populated for the acquisition-side rows before `0x0040d360` consumes candidate subtype byte `[candidate+0x32]` + - the checked-in consumer side is tighter too: + `0x0040dc40` already consumes live owner company `[site+0x276]`, company stat-family + `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` + - 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 - 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