Narrow peer-site replay owner questions

This commit is contained in:
Jan Petykiewicz 2026-04-18 18:30:28 -07:00
commit d96bc47a98
2 changed files with 41 additions and 20 deletions

View file

@ -4084,9 +4084,13 @@ fn build_periodic_company_service_trace_report(
.to_string(),
"0x0040d540 weighted region-to-company proximity scorer with pending-bonus context"
.to_string(),
"0x0040f6d0 subtype-1 placed-structure constructor writing linked peer id via 0x00481390"
.to_string(),
"0x00481390 / 0x00480210 subtype-1 linked-site allocation and constructor".to_string(),
"0x00480710 linked-site runtime side-buffer and route-entry-anchor refresh owner"
.to_string(),
"0x0040df27 / 0x0040e00a / 0x0040edf6 concrete linked-site side-refresh callers of 0x00480710"
.to_string(),
"0x0048abc0 / 0x00493cf0 route-entry-anchor rebind and synthesis strip".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(),
@ -4095,8 +4099,8 @@ fn build_periodic_company_service_trace_report(
"0x00409950 linked-transit roster sibling owner".to_string(),
];
let next_owner_questions = vec![
"Which rebuild or restore owner re-seeds the live peer-site backing-record selector at [site+0x04] once the direct 0x36b1 load and 0x4a9d side-buffer load complete, now that 0x0047efe0 and 0x0047fd50 both consume that lane directly?".to_string(),
"How far do the subtype-1 linked-site constructor strip 0x0040f6d0 -> 0x00481390 -> 0x00480210 and the refresh/rebind strip 0x00480710 -> 0x0048abc0 / 0x00493cf0 replay [site+0x2a8] and [peer+0x08] shelllessly after load?".to_string(),
"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(),
"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(),
"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(),
];
@ -4211,15 +4215,17 @@ fn build_periodic_company_service_trace_report(
"0x00425b90 pending-bonus/company-state gate",
"0x0040d360 region type/class filter",
"0x0040d540 weighted region-to-company proximity scorer",
"0x0040f6d0 subtype-1 placed-structure constructor",
"0x00481390 / 0x00480210 subtype-1 linked-site allocation and constructor",
"0x00480710 linked-site runtime side-buffer and route-entry-anchor refresh owner",
"0x0040df27 / 0x0040e00a / 0x0040edf6 linked-site side-refresh callers",
"0x0048abc0 / 0x00493cf0 route-entry-anchor rebind and synthesis strip",
"0x0047dda0 linked-peer route-entry-anchor validator",
"0x00420030 / 0x00420280 peer-site boolean/selector pair",
"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: [site+0x04] is a live backing-record selector consumed by 0x0047efe0 and 0x0047fd50, [site+0x2a8] is still the linked peer id written by the subtype-1 construction strip 0x0040f6d0 -> 0x00481390 -> 0x00480210, 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, and [peer+0x08] remains the route-entry anchor id validated by 0x0047dda0 and rebound through 0x00480710 -> 0x0048abc0 / 0x00493cf0.",
],
));
SmpPeriodicCompanyServiceTraceEntry {
@ -4253,7 +4259,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(),
);
notes.push(
"So the acquisition frontier is no longer a generic near-city owner gap or a collection-identity question. The next non-hook target is the rebuild strip that repopulates those peer-site identity fields shelllessly: the subtype-1 linked-site constructor 0x0040f6d0 -> 0x00481390 -> 0x00480210, the linked-site side-buffer and route-entry-anchor refresh owner 0x00480710, the route-entry rebind/synthesis pair 0x0048abc0 / 0x00493cf0, and whichever upstream owner re-seeds the live backing-record selector [site+0x04] before 0x00420030 / 0x00420280 / 0x0047efe0 / 0x0047fd50 consume it.".to_string(),
"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(),
);
SmpPeriodicCompanyServiceTraceReport {
@ -25914,7 +25920,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(), 7);
assert_eq!(trace.known_bridge_helpers.len(), 20);
assert_eq!(trace.known_bridge_helpers.len(), 22);
assert_eq!(trace.next_owner_questions.len(), 4);
assert_eq!(trace.companies.len(), 1);
assert!(trace.atlas_candidate_consumers.iter().any(|line| {
@ -25923,13 +25929,13 @@ mod tests {
&& line.contains("peer-site boolean/selector pair")
}));
assert!(trace.next_owner_questions.iter().any(|line| {
line.contains("[site+0x04]")
&& line.contains("0x0047efe0")
&& line.contains("0x0047fd50")
line.contains("0x00480210")
&& line.contains("[peer+0x04]")
&& line.contains("[site+0x2a8]")
}));
assert!(trace.next_owner_questions.iter().any(|line| {
line.contains("0x0040f6d0 -> 0x00481390 -> 0x00480210")
&& line.contains("[site+0x2a8]")
line.contains("0x0040df27 / 0x0040e00a / 0x0040edf6")
&& line.contains("0x00480710")
&& line.contains("[peer+0x08]")
}));
let acquisition_branch = trace.companies[0]
@ -25983,6 +25989,18 @@ mod tests {
.iter()
.any(|line| line.contains("0x00480710") && line.contains("route-entry-anchor"))
);
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x0040f6d0") && line.contains("0x00481390"))
);
assert!(
trace
.known_bridge_helpers
.iter()
.any(|line| line.contains("0x0040df27 / 0x0040e00a / 0x0040edf6"))
);
let city_branch = trace.companies[0]
.branches
.iter()

View file

@ -45,8 +45,8 @@ Working rule:
`0x0042b2d0`, the optional company filter through `0x0047efe0`, the station-or-transit gate
`0x0047fd50`, and the status branch `0x0047de00 -> 0x0040c990`
- `0x0047efe0` and `0x0047fd50` both consume `[site+0x04]` as the live backing-record selector
- the subtype-`1` constructor strip `0x0040f6d0 -> 0x00481390 -> 0x00480210` is still the only
grounded writer of linked peer id `[site+0x2a8]`
- `0x00480210` writes linked-peer row `[peer+0x04]` from the anchor-site id argument
- `0x0040f6d0 -> 0x00481390` writes the anchor-site linked peer id back into `[site+0x2a8]`
- `0x0047dda0` consumes `[peer+0x08]` as the linked route-entry anchor id
- `0x00480710 -> 0x0048abc0 / 0x00493cf0` is the linked-site refresh and route-entry rebind or
synthesis strip above that anchor lane
@ -56,16 +56,19 @@ Working rule:
five proximity buckets, and the sampled-cell list
- 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
rebuild owner repopulates the live peer-site identity lanes `[site+0x04]`, `[site+0x2a8]`, and
`[peer+0x08]` once those two save-owner seams finish?”
post-load owner replays the subtype-`1` constructor or linked-site refresh paths for existing
saves once those two save-owner seams finish?”
- Make the next static/rehost slice the peer-site rebuild seam above persistence, not another save
scan:
- rehost or bound how far `0x0040f6d0 -> 0x00481390 -> 0x00480210` already recreates linked
peer id `[site+0x2a8]` and route-entry anchor `[peer+0x08]`
- rehost or bound how `0x00480710 -> 0x0048abc0 / 0x00493cf0` refreshes or synthesizes the
linked route-entry anchor after load
- find the first upstream non-hook owner that reseeds `[site+0x04]` before
`0x00420030 / 0x00420280 / 0x0047efe0 / 0x0047fd50` consume it
- find which post-load non-hook owner actually replays
`0x0040f6d0 -> 0x00481390 -> 0x00480210` for existing saves, now that the concrete writes to
`[peer+0x04]` and `[site+0x2a8]` are grounded
- bound how far the concrete side-refresh callers
`0x0040df27 / 0x0040e00a / 0x0040edf6 -> 0x00480710 -> 0x0048abc0 / 0x00493cf0`
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
from the constructor replay path
- Use the higher-layer probes as the standard entry point for the current blocked frontier instead
of generic save scans:
`runtime inspect-periodic-company-service-trace <save.gms>`,