From afff8de214f27b31abb606f6c20d26602ada3f78 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sat, 18 Apr 2026 23:03:30 -0700 Subject: [PATCH] Rule down triplet collection owner in acquisition trace --- crates/rrt-runtime/src/smp.rs | 32 ++++++++++++++++++++++++++++++-- docs/rehost-queue.md | 4 ++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index 5770519..ae2aa39 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -4653,6 +4653,8 @@ fn build_periodic_company_service_trace_report( .to_string(), "the remaining direct [site+0x276] store census is bounded away from persisted replay too: 0x0042128d is broad zero-init in the 0x00421430 constructor neighborhood, 0x00422305 computes a live score/category lane before publishing 0x7, 0x004269c9/0x00426a2a are acquisition commit and clear helpers, and 0x004282a9/0x004300d6 are bulk owner-transfer writes" .to_string(), + "the paired collection-side loader 0x00413440 is bounded away too: it owns the tagged 0x36b1/0x36b2/0x36b3 triplet load path, dispatches each live record through vtable slot +0x44, and keeps that seam on the already-grounded triplet payload rather than the missing [site+0x276] replay owner" + .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" @@ -4754,6 +4756,7 @@ fn build_periodic_company_service_trace_report( "the remaining 0x00508fd1 / 0x005098eb strip is bounded away from persisted restore too: 0x00508fd1 stores the new row id in [this+0x7c], immediately configures the live row through vtable slot +0x58 plus 0x00507cf0, and 0x005098eb later re-enters 0x0040ef10 with arg3 forced to zero, so this family is another live controller path rather than the missing persisted owner seam".to_string(), "the adjacent 0x00473c20 family is bounded away too: it drains queued site ids and coordinate pairs from scratch band 0x006ce808..0x006ce988, re-enters 0x0040eba0 at 0x00473c98 for each live row, and then clears the queued id slot, so it is a local post-create refresh path rather than the missing persisted owner seam".to_string(), "the remaining direct [site+0x276] store census is bounded away too: 0x0042128d is broad zero-init in the 0x00421430 constructor neighborhood, 0x00422305 computes a live score/category lane before publishing event 0x7, 0x004269c9/0x00426a2a are acquisition commit and clear helpers, and 0x004282a9 / 0x004300d6 are bulk owner-transfer writes rather than ordinary restored-row replay".to_string(), + "the paired collection-side load owner 0x00413440 is bounded away too: it opens tagged families 0x36b1 / 0x36b2 / 0x36b3, routes each live record through per-entry vtable slot +0x44, and keeps that seam on the already-grounded triplet payload/load-save strip rather than the missing [site+0x276] replay owner".to_string(), "inside 0x0040ef10 the [site+0x276] write at 0x0040f047 only clears owner-company under a world-flag branch, while the paired [site+0x276]/[site+0x27a] write at 0x0040f5d4 follows a 0x00436590 event/scalar path and is not the generic post-load republisher".to_string(), "direct local writer census now shows the grounded [site+0x276] write side clustering under live mutation families such as 0x004269b0 / 0x00426a10, the create-side 0x0040ef10 / 0x0040f6d0 strip, and the bulk reassignment families 0x00426dce..0x00426ea1 and 0x00430040..0x004300d6 rather than under the known replay strip".to_string(), "direct local control-flow reconstruction now shows those same writer families hanging under the 0x00431b20 opcode dispatcher over 0x0061039c: opcodes 0x04..0x07 dispatch to 0x00430040, opcodes 0x08/0x10..0x13 dispatch to 0x00426d60, and opcodes 0x0d/0x16 dispatch to 0x0042fc90".to_string(), @@ -4926,6 +4929,7 @@ fn build_periodic_company_service_trace_report( "0x00422305 live score/category publisher writing [site+0x276] before event 0x7 dispatch, not ordinary restore".to_string(), "0x004269c9 / 0x00426a2a acquisition commit and clear helpers mutating [site+0x276]/[site+0x27a] on chosen live rows".to_string(), "0x004282a9 / 0x004300d6 bulk owner-transfer writes over existing live placed-structure rows".to_string(), + "0x00413440 paired tagged 0x36b1/0x36b2/0x36b3 collection loader dispatching each live record through vtable slot +0x44".to_string(), "0x004134d0 / 0x0040ef10 shared placed-structure allocator and finalize-or-rebuild lane for newly created or tuple-loaded site rows" .to_string(), "0x00481430 / 0x0047d8e0 dynamic side-buffer stream-load owner repopulating route-entry lists, three byte arrays, five proximity buckets, and trailing scratch band" @@ -28162,7 +28166,7 @@ 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(), 9); - assert_eq!(trace.known_bridge_helpers.len(), 83); + assert_eq!(trace.known_bridge_helpers.len(), 84); assert_eq!(trace.next_owner_questions.len(), 5); assert_eq!(trace.companies.len(), 1); assert_eq!( @@ -28454,6 +28458,14 @@ mod tests { && line.contains("0x004269c9/0x00426a2a") && line.contains("0x004282a9 / 0x004300d6")) ); + assert!( + trace.near_city_acquisition_projection_hypotheses[0] + .evidence + .iter() + .any(|line| line.contains("0x00413440") + && line.contains("0x36b1 / 0x36b2 / 0x36b3") + && line.contains("slot +0x44")) + ); assert!( trace.near_city_acquisition_projection_hypotheses[0] .evidence @@ -28549,7 +28561,7 @@ mod tests { trace .near_city_acquisition_runtime_backed_input_families .len(), - 24 + 25 ); assert_eq!(trace.near_city_acquisition_remaining_owner_gaps.len(), 2); assert_eq!(trace.near_city_acquisition_region_lane_statuses.len(), 4); @@ -28690,6 +28702,14 @@ mod tests { && line.contains("0x004269c9/0x00426a2a") && line.contains("0x004282a9/0x004300d6")) ); + assert!( + trace + .near_city_acquisition_runtime_backed_input_families + .iter() + .any(|line| line.contains("0x00413440") + && line.contains("0x36b1/0x36b2/0x36b3") + && line.contains("slot +0x44")) + ); assert!( trace .near_city_acquisition_runtime_backed_input_families @@ -29211,6 +29231,14 @@ mod tests { && line.contains("owner-transfer") && line.contains("placed-structure")) ); + assert!( + trace + .known_bridge_helpers + .iter() + .any(|line| line.contains("0x00413440") + && line.contains("0x36b1/0x36b2/0x36b3") + && line.contains("slot +0x44")) + ); assert!( trace .known_bridge_helpers diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index ac4d809..2f98509 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -152,6 +152,10 @@ Working rule: `0x00422305` computes a live score/category lane before publishing event `0x7`, `0x004269c9/0x00426a2a` are acquisition commit/clear helpers, and `0x004282a9/0x004300d6` are bulk owner-transfer writes + - the paired tagged collection loader is bounded away too: + `0x00413440` owns the tagged `0x36b1/0x36b2/0x36b3` triplet load path, dispatches each live + record through vtable slot `+0x44`, and keeps that seam on the already-grounded triplet + payload rather than the missing `[site+0x276]` replay owner - the remaining owner-company question is therefore narrower than “find any replay seam”: identify which non-transport persisted source family outside the currently bounded direct allocator/finalize/store families feeds that tuple and which companion restore/finalize calls