use crate::inspect::smp::services::SmpServiceConsumerHypothesis;

pub(super) fn build_post_load_generation_hypothesis() -> SmpServiceConsumerHypothesis {
    SmpServiceConsumerHypothesis {
        label: "post-load generation pipeline handoff".to_string(),
        status: "next_post_load_owner_family".to_string(),
        candidate_consumers: vec![
            "0x004384d0 world_run_post_load_generation_pipeline".to_string(),
            "0x004133b0 placed_structure_collection_refresh_local_runtime_records_and_position_scalars".to_string(),
            "0x00421c20 world_region_collection_run_building_population_pass".to_string(),
            "0x004235c0 world_region_balance_structure_demand_and_place_candidates".to_string(),
            "0x00423d30 world_region_refresh_cached_category_totals_and_weight_slots".to_string(),
            "0x00437b20 simulation_run_chunked_fast_forward_burst".to_string(),
        ],
        evidence: vec![
            "the checked-in shell-load subgraph and function map now place world_load_saved_runtime_state_bundle 0x00446d40 directly ahead of world_run_post_load_generation_pipeline 0x004384d0, so the first later non-hook owner family after the ruled-down 0x00444887 continuation is the post-load generation strip rather than another tagged region payload callback".to_string(),
            "0x004384d0 already exposes the stage ordering tightly enough to subdivide the next search: id 319 refreshes the route-entry collection, auxiliary route trackers, and then 0x004133b0 placed-structure local-runtime replay; id 320 runs 0x00421c20(1.0, 1) for the region-owned building setup strip; id 321 runs 0x00437b20 and then sweeps regions through 0x00423d30".to_string(),
            "direct disassembly now tightens the early 0x004384d0 setup strip too: before the conditional 320/321 gates it always runs 0x0044fb70 transport/pricing-grid setup and 0x0041ea50 candidate-local-service setup, and the extra arg-guarded 0x00421b60 -> 0x004882e0 default-region pair sits beside them as the last pre-320/321 setup branch. Those owners are therefore setup-side world-grid, candidate-table, and border-refresh work rather than the missing [region+0x2a4] / [region+0x310/+0x338/+0x360] republisher".to_string(),
            "the neighboring 319 helpers are ruled down more tightly now too: 0x004377a0 stays on chairman-slot/profile materialization by normalizing the 16 slot bundles at [world+0x69da], republishing selector bytes into [0x006cec7c+0x87], populating the live chairman-profile collection 0x006ceb9c, and clearing selected company/chairman bytes [world+0x21/+0x25]; 0x004348e0 only gates the transient list at [world+0x66a6]; 0x00437c00 is that list's typed dispatcher over queue-node kind byte [node+0x08]; and the later 0x0044d410 calls are world-rect/grid refresh work. None of those helpers republish [region+0x2a4] or [region+0x310/+0x338/+0x360]".to_string(),
            "the 319 placed-structure replay strip is now grounded as more than generic setup glue: 0x004133b0 drains queued site ids through 0x0040e450, sweeps every live placed structure through 0x0040ee10, and then reaches the already-grounded linked-site follow-on 0x00480710, which is a stronger structural bridge into acquisition-side site or peer state than the ruled-down territory/support loaders".to_string(),
            "the surrounding 319 helpers are ruled down further now too: 0x00437220 and 0x004377a0 stay on chairman-slot selector/profile materialization over [world+0x69d8/+0x69db] and scenario selector bytes [0x006cec7c+0x87], while 0x00434d40 only seeds the subtype-2 candidate runtime latch [candidate+0x7b0] after the later burst".to_string(),
            "the 320 building setup strip is narrower but still relevant: 0x00421c20 dispatches every live region into 0x004235c0, and that worker consults the region profile collection [region+0x37f], the placed-instance registry 0x0062b26c, and demand-balancing helpers like 0x00422900/0x00422be0/0x00422ee0, so current evidence keeps it in the same acquisition-adjacent owner family even though it is not yet a direct writer to [region+0x2a4] or [region+0x310/+0x338/+0x360]".to_string(),
            "direct worker recovery now narrows 0x004235c0 further: it stays inside the live region demand-and-placement family by routing through 0x00422900 cached category accumulation, 0x004234e0 projected structure-count scalars, 0x00422be0 placed-count subtraction, and 0x00422ee0 placement attempts over 0x0062b26c rather than any restore-time field republisher".to_string(),
            "the 321 economy-seeding tail is also now bounded as a narrower cache refresh rather than generic noise: 0x00437b20 only stages a fast-forward guard and then sweeps 0x0062bae0 through 0x00423d30, which refreshes the cached category band [region+0x27a/+0x27e/+0x282/+0x286], so it remains a weaker but still explicit post-load owner family to rule in or out before returning to the deeper 0x00446d40 continuation".to_string(),
            "direct local disassembly now narrows 0x00423d30 as well: it only republishes [region+0x27a/+0x27e/+0x282/+0x286] through 0x00422900 after the 0x00437b20 burst and does not touch [region+0x2a4] or [region+0x310/+0x338/+0x360]".to_string(),
        ],
        blockers: vec![
            "current grounded evidence still does not show which post-load subphase actually republishes [region+0x2a4] or the cached tri-lane [region+0x310/+0x338/+0x360]".to_string(),
            "0x00421c20 -> 0x004235c0 and 0x00437b20 -> 0x00423d30 are still grounded as region-side demand and cache refresh passes rather than direct restore writers, so the next static pass still needs the exact later field bridge".to_string(),
        ],
    }
}
