Extract acquisition tri-lane formula inputs

This commit is contained in:
Jan Petykiewicz 2026-04-18 22:32:13 -07:00
commit 7cb9edcf42
2 changed files with 67 additions and 0 deletions

View file

@ -3689,6 +3689,8 @@ pub struct SmpPeriodicCompanyServiceTraceReport {
#[serde(default)]
pub near_city_acquisition_tri_lane_direct_caller_families: Vec<String>,
#[serde(default)]
pub near_city_acquisition_tri_lane_formula_input_lanes: Vec<String>,
#[serde(default)]
pub near_city_acquisition_projection_hypotheses: Vec<SmpServiceConsumerHypothesis>,
#[serde(default)]
pub near_city_acquisition_remaining_owner_gaps: Vec<String>,
@ -4693,6 +4695,13 @@ fn build_periodic_company_service_trace_report(
"0x0044b81a is an owner-company-aware 0x0040d540 caller that also reaches 0x0040cb70 and 0x00436590 news/event id 0x65".to_string(),
"0x004b70f5 / 0x004b7979 are broader 0x0040d540 callers routing through 0x004337a0 and downstream 0x00540120 / 0x00518140 state consumers".to_string(),
];
let near_city_acquisition_tri_lane_formula_input_lanes = vec![
"0x00412560 uses candidate-row time window [+0x20/+0x22], owner/absence booleans [+0x24/+0x28], list count [+0x2c], and membership list [+0x44]".to_string(),
"0x00412560 consumes world date and policy flags through 0x006cec78 fields [world+0x0d] and [world+0x4afb]".to_string(),
"0x0040d450 combines helper outputs 0x00455810 / 0x00455800 / 0x0044ad60 with owner-company lane [site+0x276] and world event sink 0x00436590 ids 0x66/0x68".to_string(),
"0x00410b30..0x004118f4 consumes candidate-row fields [+0x18/+0x1c/+0x2a/+0x2c/+0x44], subject latch [site+0x78c], and personality byte [site+0x391]".to_string(),
"0x00410b30..0x004118f4 also feeds world-side scalar [world+0x4caa], owner-company scalar [company+0x0d5d] through 0x0040d210, and the local cache bands [site+0x2e8], [site+0x310], [site+0x338], and [site+0x360]".to_string(),
];
let near_city_acquisition_projection_hypotheses = vec![
SmpServiceConsumerHypothesis {
label: "site_owner_replay_from_post_load_refresh_self_id_reconstructible".to_string(),
@ -5175,6 +5184,7 @@ fn build_periodic_company_service_trace_report(
near_city_acquisition_tri_lane_candidate_gate_fields,
near_city_acquisition_tri_lane_runtime_writer_roles,
near_city_acquisition_tri_lane_direct_caller_families,
near_city_acquisition_tri_lane_formula_input_lanes,
near_city_acquisition_projection_hypotheses,
near_city_acquisition_remaining_owner_gaps,
near_city_acquisition_region_lane_statuses,
@ -28230,6 +28240,12 @@ mod tests {
.len(),
5
);
assert_eq!(
trace
.near_city_acquisition_tri_lane_formula_input_lanes
.len(),
5
);
assert_eq!(trace.near_city_acquisition_projection_hypotheses.len(), 3);
assert_eq!(
trace.near_city_acquisition_projection_hypotheses[0].label,
@ -28609,6 +28625,45 @@ mod tests {
&& line.contains("0x004337a0")
&& line.contains("0x00540120 / 0x00518140"))
);
assert!(
trace
.near_city_acquisition_tri_lane_formula_input_lanes
.iter()
.any(|line| line.contains("[+0x20/+0x22]")
&& line.contains("[+0x24/+0x28]")
&& line.contains("[+0x44]"))
);
assert!(
trace
.near_city_acquisition_tri_lane_formula_input_lanes
.iter()
.any(|line| line.contains("[world+0x0d]") && line.contains("[world+0x4afb]"))
);
assert!(
trace
.near_city_acquisition_tri_lane_formula_input_lanes
.iter()
.any(|line| line.contains("0x00455810 / 0x00455800 / 0x0044ad60")
&& line.contains("[site+0x276]")
&& line.contains("0x66/0x68"))
);
assert!(
trace
.near_city_acquisition_tri_lane_formula_input_lanes
.iter()
.any(|line| line.contains("[+0x18/+0x1c/+0x2a/+0x2c/+0x44]")
&& line.contains("[site+0x78c]")
&& line.contains("[site+0x391]"))
);
assert!(
trace
.near_city_acquisition_tri_lane_formula_input_lanes
.iter()
.any(|line| line.contains("[world+0x4caa]")
&& line.contains("[company+0x0d5d]")
&& line.contains("[site+0x310]")
&& line.contains("[site+0x360]"))
);
assert!(
trace
.near_city_acquisition_remaining_owner_gaps

View file

@ -179,6 +179,18 @@ Working rule:
`0x0040cb70` and news/event id `0x65`,
and `0x004b70f5 / 0x004b7979` are broader sibling `0x0040d540` callers routing through
`0x004337a0` and downstream `0x00540120 / 0x00518140`
- formula input lanes are now structured too:
`0x00412560` uses candidate-row time window `+0x20/+0x22`,
owner/absence booleans `+0x24/+0x28`,
list count `+0x2c`,
and membership list `+0x44`,
while the wider `0x00410b30..0x004118f4` loop consumes candidate-row
`+0x18/+0x1c/+0x2a/+0x2c/+0x44`,
subject latch `[site+0x78c]`,
personality byte `[site+0x391]`,
world lanes `[world+0x0d]`, `[world+0x4afb]`, `[world+0x4caa]`,
owner-company scalar `[company+0x0d5d]`,
and the local cache bands `[site+0x2e8]`, `[site+0x310]`, `[site+0x338]`, `[site+0x360]`
- the direct writer census now narrows the remaining owner-company question too:
grounded `[site+0x276]` writes cluster under create-side and live mutation families such as
`0x004269b0 / 0x00426a10`, the create-side `0x0040ef10 / 0x0040f6d0` strip, and the bulk