Ground placed-structure replay owner flow
This commit is contained in:
parent
d96bc47a98
commit
e1ef9186bf
2 changed files with 56 additions and 22 deletions
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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>`,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue