Ground placed-structure replay owner flow

This commit is contained in:
Jan Petykiewicz 2026-04-18 18:33:50 -07:00
commit e1ef9186bf
2 changed files with 56 additions and 22 deletions

View file

@ -4087,10 +4087,16 @@ fn build_periodic_company_service_trace_report(
"0x0040f6d0 subtype-1 placed-structure constructor writing linked peer id via 0x00481390" "0x0040f6d0 subtype-1 placed-structure constructor writing linked peer id via 0x00481390"
.to_string(), .to_string(),
"0x00481390 / 0x00480210 subtype-1 linked-site allocation and constructor".to_string(), "0x00481390 / 0x00480210 subtype-1 linked-site allocation and constructor".to_string(),
"0x00444690 late world bring-up caller of 0x004133b0 placed-structure local-runtime replay"
.to_string(),
"0x004133b0 placed-structure local-runtime replay owner draining queued site ids through 0x0040e450 and sweeping live sites through 0x0040ee10".to_string(),
"0x0040e450 queued site-id cloned local-runtime replay helper".to_string(),
"0x0040ee10 live-site position/scalar refresh helper reaching 0x0040edf6 -> 0x00480710 and 0x0040e360".to_string(),
"0x00480710 linked-site runtime side-buffer and route-entry-anchor refresh owner" "0x00480710 linked-site runtime side-buffer and route-entry-anchor refresh owner"
.to_string(), .to_string(),
"0x0040df27 / 0x0040e00a / 0x0040edf6 concrete linked-site side-refresh callers of 0x00480710" "0x0040df27 / 0x0040e00a / 0x0040edf6 concrete linked-site side-refresh callers of 0x00480710"
.to_string(), .to_string(),
"0x004160aa non-bring-up runtime caller of 0x0040ee10".to_string(),
"0x0048abc0 / 0x00493cf0 route-entry-anchor rebind and synthesis strip".to_string(), "0x0048abc0 / 0x00493cf0 route-entry-anchor rebind and synthesis strip".to_string(),
"0x0047dda0 linked-peer route-entry-anchor validator".to_string(), "0x0047dda0 linked-peer route-entry-anchor validator".to_string(),
"0x00420030 / 0x00420280 peer-site boolean/selector pair over the placed-structure collection".to_string(), "0x00420030 / 0x00420280 peer-site boolean/selector pair over the placed-structure collection".to_string(),
@ -4099,8 +4105,8 @@ fn build_periodic_company_service_trace_report(
"0x00409950 linked-transit roster sibling owner".to_string(), "0x00409950 linked-transit roster sibling owner".to_string(),
]; ];
let next_owner_questions = vec![ let next_owner_questions = vec![
"Which non-hook post-load owner actually replays the subtype-1 linked-site constructor path for existing saves, now that 0x00480210 is grounded as the writer of linked-peer row [peer+0x04] = anchor-site id and 0x0040f6d0 is grounded as the writer of anchor-site [site+0x2a8] via 0x00481390?".to_string(), "Which non-hook owner reseeds the live peer-site backing-record selector [site+0x04], now that late world bring-up 0x00444690 -> 0x004133b0 is grounded as the post-load replay owner for queued cloned local-runtime rebuilds and live-site sweeps but still only reaches [site+0x3cc], [site+0x2a8], and [peer+0x08] directly?".to_string(),
"How far do the concrete side-refresh callers 0x0040df27 / 0x0040e00a / 0x0040edf6 rerun 0x00480710 -> 0x0048abc0 / 0x00493cf0 shelllessly after load, and do they suffice to rebuild [peer+0x08] without replaying the full constructor family?".to_string(), "How much of the linked-peer refresh path is strictly post-load versus recurring runtime maintenance now that 0x004133b0 reaches 0x0040ee10 -> 0x0040edf6 -> 0x00480710 during bring-up and 0x004160aa also re-enters 0x0040ee10 later?".to_string(),
"Which persisted linkage fields behind 0x0047efe0, [region+0x2a4], and [region+0x276] are sufficient to rehost the 0x004014b0 proximity-and-news branch without shell state?".to_string(), "Which persisted linkage fields behind 0x0047efe0, [region+0x2a4], and [region+0x276] are sufficient to rehost the 0x004014b0 proximity-and-news branch without shell state?".to_string(),
"Which infrastructure consumer above the grounded 0x38a5 seam actually drives the linked-transit branch that 0x00409950 follows?".to_string(), "Which infrastructure consumer above the grounded 0x38a5 seam actually drives the linked-transit branch that 0x00409950 follows?".to_string(),
]; ];
@ -4217,15 +4223,20 @@ fn build_periodic_company_service_trace_report(
"0x0040d540 weighted region-to-company proximity scorer", "0x0040d540 weighted region-to-company proximity scorer",
"0x0040f6d0 subtype-1 placed-structure constructor", "0x0040f6d0 subtype-1 placed-structure constructor",
"0x00481390 / 0x00480210 subtype-1 linked-site allocation and constructor", "0x00481390 / 0x00480210 subtype-1 linked-site allocation and constructor",
"0x00444690 late world bring-up caller of 0x004133b0",
"0x004133b0 placed-structure local-runtime replay owner",
"0x0040e450 queued site-id cloned local-runtime replay helper",
"0x0040ee10 live-site position/scalar refresh helper",
"0x00480710 linked-site runtime side-buffer and route-entry-anchor refresh owner", "0x00480710 linked-site runtime side-buffer and route-entry-anchor refresh owner",
"0x0040df27 / 0x0040e00a / 0x0040edf6 linked-site side-refresh callers", "0x0040df27 / 0x0040e00a / 0x0040edf6 linked-site side-refresh callers",
"0x004160aa non-bring-up runtime caller of 0x0040ee10",
"0x0048abc0 / 0x00493cf0 route-entry-anchor rebind and synthesis strip", "0x0048abc0 / 0x00493cf0 route-entry-anchor rebind and synthesis strip",
"0x0047dda0 linked-peer route-entry-anchor validator", "0x0047dda0 linked-peer route-entry-anchor validator",
"0x00420030 / 0x00420280 peer-site boolean/selector pair", "0x00420030 / 0x00420280 peer-site boolean/selector pair",
"0x00406050 city-connection bonus/news sibling owner", "0x00406050 city-connection bonus/news sibling owner",
], ],
&[ &[
"Direct disassembly now shows this branch iterating the live class-0 region collection, skipping regions with pending amount [region+0x276], reusing the center-cell token gate 0x0041f6e0 -> 0x0042b2d0, reusing the linked-region status branch 0x0047de00 -> 0x0040c990, checking candidate reachability through 0x004801a0, consulting the placed-structure peer-site boolean/selector pair 0x00420030 / 0x00420280 over 0x006cec20, scoring regions against company proximity and aging through 0x0040d540 and 0x0040cac0, and then publishing the winning linked company id from [region+0x2a4]. The remaining peer-site identity gap is now narrower too: the linked-peer row's [peer+0x04] is written by 0x00480210 as the anchor-site id, the anchor-site row's [site+0x2a8] is written by 0x0040f6d0 after 0x00481390 returns the linked peer id, and [peer+0x08] remains the route-entry anchor id validated by 0x0047dda0 and rebound through 0x00480710 -> 0x0048abc0 / 0x00493cf0.", "Direct disassembly now shows this branch iterating the live class-0 region collection, skipping regions with pending amount [region+0x276], reusing the center-cell token gate 0x0041f6e0 -> 0x0042b2d0, reusing the linked-region status branch 0x0047de00 -> 0x0040c990, checking candidate reachability through 0x004801a0, consulting the placed-structure peer-site boolean/selector pair 0x00420030 / 0x00420280 over 0x006cec20, scoring regions against company proximity and aging through 0x0040d540 and 0x0040cac0, and then publishing the winning linked company id from [region+0x2a4]. The remaining peer-site identity gap is now narrower too: the linked-peer row's [peer+0x04] is written by 0x00480210 as the anchor-site id, the anchor-site row's [site+0x2a8] is written by 0x0040f6d0 after 0x00481390 returns the linked peer id, late world bring-up 0x00444690 -> 0x004133b0 already replays queued clone refresh through 0x0040e450 and live-site sweeps through 0x0040ee10, and [peer+0x08] is refreshed from there through 0x0040edf6 -> 0x00480710 -> 0x0048abc0 / 0x00493cf0.",
], ],
)); ));
SmpPeriodicCompanyServiceTraceEntry { SmpPeriodicCompanyServiceTraceEntry {
@ -4259,7 +4270,7 @@ fn build_periodic_company_service_trace_report(
"Direct disassembly now closes the negative persistence side too: the direct 0x36b1 per-record callbacks serialize the shared base scalar triplets rooted at [this+0x206/+0x20a/+0x20e] plus the subordinate payload callback strip, while the 0x4a9d/0x4a3a/0x4a3b side-buffer owner only persists route-entry lists, three byte arrays, five proximity buckets, and the sampled-cell list. That means neither checked-in save owner seam currently persists the core peer-site identity fields [site+0x04], [site+0x2a8], or [peer+0x08] directly.".to_string(), "Direct disassembly now closes the negative persistence side too: the direct 0x36b1 per-record callbacks serialize the shared base scalar triplets rooted at [this+0x206/+0x20a/+0x20e] plus the subordinate payload callback strip, while the 0x4a9d/0x4a3a/0x4a3b side-buffer owner only persists route-entry lists, three byte arrays, five proximity buckets, and the sampled-cell list. That means neither checked-in save owner seam currently persists the core peer-site identity fields [site+0x04], [site+0x2a8], or [peer+0x08] directly.".to_string(),
); );
notes.push( notes.push(
"The rebuild strip is narrower now too. 0x00480210 seeds the linked-peer row [peer+0x04] from the anchor-site id argument, 0x0040f6d0 writes the anchor-site linked peer id back into [site+0x2a8] after 0x00481390 returns, and the later side-refresh callers 0x0040df27 / 0x0040e00a / 0x0040edf6 rerun 0x00480710 to refresh [peer+0x08] through 0x0048abc0 / 0x00493cf0. So the next non-hook target is not a generic field writer hunt; it is whichever post-load owner replays those constructor or refresh paths for existing saves.".to_string(), "The replay strip is tighter now too. 0x00444690 is the current late world bring-up caller of 0x004133b0, that outer owner drains queued site ids through 0x0040e450 and then sweeps every live placed structure through 0x0040ee10, and 0x0040ee10 itself reaches 0x0040edf6 -> 0x00480710 plus the later 0x0040e360 follow-on. A separate runtime path at 0x004160aa also re-enters 0x0040ee10 later. So [peer+0x08] replay is no longer the open question; the remaining non-hook target is whichever owner reseeds the live backing-record selector [site+0x04] before 0x00420030 / 0x00420280 / 0x0047efe0 / 0x0047fd50 consume it.".to_string(),
); );
SmpPeriodicCompanyServiceTraceReport { SmpPeriodicCompanyServiceTraceReport {
@ -25920,7 +25931,7 @@ mod tests {
let trace = build_periodic_company_service_trace_report(&analysis); let trace = build_periodic_company_service_trace_report(&analysis);
assert_eq!(trace.selected_company_id, Some(7)); assert_eq!(trace.selected_company_id, Some(7));
assert_eq!(trace.atlas_candidate_consumers.len(), 7); assert_eq!(trace.atlas_candidate_consumers.len(), 7);
assert_eq!(trace.known_bridge_helpers.len(), 22); assert_eq!(trace.known_bridge_helpers.len(), 27);
assert_eq!(trace.next_owner_questions.len(), 4); assert_eq!(trace.next_owner_questions.len(), 4);
assert_eq!(trace.companies.len(), 1); assert_eq!(trace.companies.len(), 1);
assert!(trace.atlas_candidate_consumers.iter().any(|line| { assert!(trace.atlas_candidate_consumers.iter().any(|line| {
@ -25929,14 +25940,14 @@ mod tests {
&& line.contains("peer-site boolean/selector pair") && line.contains("peer-site boolean/selector pair")
})); }));
assert!(trace.next_owner_questions.iter().any(|line| { assert!(trace.next_owner_questions.iter().any(|line| {
line.contains("0x00480210") line.contains("[site+0x04]")
&& line.contains("[peer+0x04]") && line.contains("0x00444690 -> 0x004133b0")
&& line.contains("[site+0x2a8]") && line.contains("[peer+0x08]")
})); }));
assert!(trace.next_owner_questions.iter().any(|line| { assert!(trace.next_owner_questions.iter().any(|line| {
line.contains("0x0040df27 / 0x0040e00a / 0x0040edf6") line.contains("0x004160aa")
&& line.contains("0x00480710") && line.contains("0x0040ee10")
&& line.contains("[peer+0x08]") && line.contains("0x0040edf6")
})); }));
let acquisition_branch = trace.companies[0] let acquisition_branch = trace.companies[0]
.branches .branches
@ -26001,6 +26012,24 @@ mod tests {
.iter() .iter()
.any(|line| line.contains("0x0040df27 / 0x0040e00a / 0x0040edf6")) .any(|line| line.contains("0x0040df27 / 0x0040e00a / 0x0040edf6"))
); );
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x00444690") && line.contains("0x004133b0"))
);
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x0040e450") && line.contains("queued site-id"))
);
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x004160aa") && line.contains("0x0040ee10"))
);
let city_branch = trace.companies[0] let city_branch = trace.companies[0]
.branches .branches
.iter() .iter()

View file

@ -50,25 +50,30 @@ Working rule:
- `0x0047dda0` consumes `[peer+0x08]` as the linked route-entry anchor id - `0x0047dda0` consumes `[peer+0x08]` as the linked route-entry anchor id
- `0x00480710 -> 0x0048abc0 / 0x00493cf0` is the linked-site refresh and route-entry rebind or - `0x00480710 -> 0x0048abc0 / 0x00493cf0` is the linked-site refresh and route-entry rebind or
synthesis strip above that anchor lane synthesis strip above that anchor lane
- late world bring-up `0x00444690` is the current caller of
`0x004133b0 placed_structure_collection_refresh_local_runtime_records_and_position_scalars`
- `0x004133b0` drains queued site ids through `0x0040e450` and then sweeps all live sites
through `0x0040ee10`
- `0x0040ee10` reaches `0x0040edf6 -> 0x00480710` for linked-peer refresh and then the later
`0x0040e360` follow-on
- `0x004160aa` is a separate non-bring-up runtime caller of `0x0040ee10`
- the direct `0x36b1` per-record callbacks serialize base scalar triplets - the direct `0x36b1` per-record callbacks serialize base scalar triplets
`[this+0x206/+0x20a/+0x20e]` plus the subordinate payload callback strip, and the `[this+0x206/+0x20a/+0x20e]` plus the subordinate payload callback strip, and the
`0x4a9d/0x4a3a/0x4a3b` side-buffer owner only persists route-entry lists, three byte arrays, `0x4a9d/0x4a3a/0x4a3b` side-buffer owner only persists route-entry lists, three byte arrays,
five proximity buckets, and the sampled-cell list five proximity buckets, and the sampled-cell list
- the winning linked company id comes from `[region+0x2a4]` - the winning linked company id comes from `[region+0x2a4]`
So the next owner question is no longer “what does the acquisition branch do?” but “which So the next owner question is no longer “what does the acquisition branch do?” or “which post-
post-load owner replays the subtype-`1` constructor or linked-site refresh paths for existing load owner replays linked-site refresh?” but “which remaining owner reseeds the live backing-
saves once those two save-owner seams finish?” record selector `[site+0x04]` once the existing bring-up replay finishes?”
- Make the next static/rehost slice the peer-site rebuild seam above persistence, not another save - Make the next static/rehost slice the peer-site rebuild seam above persistence, not another save
scan: scan:
- find which post-load non-hook owner actually replays - treat `0x00444690 -> 0x004133b0 -> 0x0040e450 / 0x0040ee10 -> 0x0040edf6 -> 0x00480710` as
`0x0040f6d0 -> 0x00481390 -> 0x00480210` for existing saves, now that the concrete writes to the checked-in bring-up replay path for existing saves
`[peer+0x04]` and `[site+0x2a8]` are grounded - treat `0x004160aa -> 0x0040ee10` as the checked-in recurring runtime maintenance entry into the
- bound how far the concrete side-refresh callers same linked-peer refresh strip
`0x0040df27 / 0x0040e00a / 0x0040edf6 -> 0x00480710 -> 0x0048abc0 / 0x00493cf0` - find the remaining owner that reseeds `[site+0x04]` before
refresh or synthesize `[peer+0x08]` after load
- find the first upstream post-load owner that reseeds `[site+0x04]` before
`0x00420030 / 0x00420280 / 0x0047efe0 / 0x0047fd50` consume it, if that owner is distinct `0x00420030 / 0x00420280 / 0x0047efe0 / 0x0047fd50` consume it, if that owner is distinct
from the constructor replay path from the bring-up replay path
- Use the higher-layer probes as the standard entry point for the current blocked frontier instead - Use the higher-layer probes as the standard entry point for the current blocked frontier instead
of generic save scans: of generic save scans:
`runtime inspect-periodic-company-service-trace <save.gms>`, `runtime inspect-periodic-company-service-trace <save.gms>`,