Separate peer-site class gate from post-byte

This commit is contained in:
Jan Petykiewicz 2026-04-18 20:33:12 -07:00
commit c53b4d482e
2 changed files with 12 additions and 2 deletions

View file

@ -4535,6 +4535,7 @@ fn build_periodic_company_service_trace_report(
let near_city_acquisition_peer_input_fields = vec![
"center-cell token gate 0x0041f6e0 -> 0x0042b2d0 over the current region".to_string(),
"[site+0x04] live backing-record selector consumed by 0x0047efe0 / 0x0047fd50".to_string(),
"0x0047fd50 linked-peer candidate-class gate over [candidate+0x8c] accepting only 0/1/2".to_string(),
"[site+0x2a8] linked peer-site id consumed by 0x0040d1f0".to_string(),
"[peer+0x08] route-entry anchor id consumed by 0x0047dda0".to_string(),
"linked-region status branch 0x0047de00 -> 0x0040c990".to_string(),
@ -4616,6 +4617,7 @@ fn build_periodic_company_service_trace_report(
"0x0047dda0 linked-peer route-entry-anchor validator".to_string(),
"0x00420030 / 0x00420280 peer-site boolean/selector pair over the placed-structure collection".to_string(),
"0x0047efe0 placed-structure linked-company resolver".to_string(),
"0x0047fd50 linked-peer candidate-class gate returning true only for class-byte values 0/1/2 at [candidate+0x8c]".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(),
@ -4838,6 +4840,9 @@ fn build_periodic_company_service_trace_report(
dominant_nonzero_companion.count
));
}
notes.push(
"Direct disassembly now also separates the narrower peer-class gate from that payload residue: 0x0047fd50 resolves the linked peer through [site+0x04], reads candidate class byte [candidate+0x8c], and returns true only for values 0/1/2 while rejecting 3/4 and above. That means the newly isolated post-secondary byte is not the already-grounded station-or-transit class gate itself; it remains a separate saved discriminator above the restored name-pair payload.".to_string(),
);
notes.push(
"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, and [site+0x04] is no longer an owner mystery either: the local linked-site helper strip seeds [site+0x3cc/+0x3d0] from 0x62b2fc / 0x62b268, reaches the save-backed 0x0045c150 / 0x0045c310 owner directly, that owner fills [owner+0x23e/+0x242] from tagged payload 0x5dc1, and 0x0045c36e then feeds [owner+0x23e] through 0x00456100 -> 0x00455b70 -> 0x0052edf0 into [site+0x04]. The remaining non-hook target is now the smaller shellless-simulation question: which subset of those persisted site/peer fields is actually sufficient to run 0x004014b0 and its city-connection sibling without shell state.".to_string(),
);
@ -27608,7 +27613,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(), 38);
assert_eq!(trace.known_bridge_helpers.len(), 39);
assert_eq!(trace.next_owner_questions.len(), 4);
assert_eq!(trace.companies.len(), 1);
assert_eq!(
@ -27676,7 +27681,7 @@ mod tests {
);
assert_eq!(trace.peer_site_runtime_reconstruction_steps.len(), 3);
assert_eq!(trace.near_city_acquisition_region_input_fields.len(), 5);
assert_eq!(trace.near_city_acquisition_peer_input_fields.len(), 5);
assert_eq!(trace.near_city_acquisition_peer_input_fields.len(), 6);
assert_eq!(trace.near_city_acquisition_company_input_fields.len(), 4);
assert_eq!(
trace.near_city_acquisition_shellless_readiness_status,

View file

@ -140,6 +140,11 @@ Working rule:
exposes `TextileMill x9`, `Toolndie x2`, and singleton `Brewery`, `MeatPackingPlant`, and
`MunitionsFactory` rows, so the next peer-site slice should treat nonzero post-secondary-byte
rows as a likely industry-like subset rather than a generic placed-structure mode split
- keep the already-grounded `0x0047fd50` class gate separate from that byte: direct disassembly
now says `0x0047fd50` resolves the linked peer through `[site+0x04]`, reads candidate class
byte `[candidate+0x8c]`, and returns true only for `0/1/2` while rejecting `3/4` and above,
so the next slice should not conflate the post-secondary byte with the existing
station-or-transit gate
- treat the peer-site selector seam itself as grounded enough for planning purposes
- use the new structured restore/runtime field split in the same trace:
restore subset