Promote Tier2 row and trailer crossover matrix

This commit is contained in:
Jan Petykiewicz 2026-04-21 18:33:13 -07:00
commit 08819c19a4
6 changed files with 139 additions and 11 deletions

View file

@ -2397,5 +2397,58 @@
"rt3_wineprefix/drive_c/rt3/maps/State of Germany.gmp",
"rt3_wineprefix/drive_c/rt3/maps/War Effort.gmp"
]
},
"row_pair_and_numbered_trailer_family_map_counts": {
"10/18 :: 0x00000000": 4,
"10/18 :: 0x00000001": 3,
"35/43 :: 0x00000000": 5,
"35/43 :: 0x00000001": 25
},
"row_pair_and_numbered_trailer_family_map_paths": {
"10/18 :: 0x00000000": [
"rt3_wineprefix/drive_c/rt3/maps/East Coast, USA.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Germany.gmp",
"rt3_wineprefix/drive_c/rt3/maps/State of Germany.gmp",
"rt3_wineprefix/drive_c/rt3/maps/War Effort.gmp"
],
"10/18 :: 0x00000001": [
"rt3_wineprefix/drive_c/rt3/maps/Crossing the Alps.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Go West!.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Rhodes Unfinished.gmp"
],
"35/43 :: 0x00000000": [
"rt3_wineprefix/drive_c/rt3/maps/Britain.gmp",
"rt3_wineprefix/drive_c/rt3/maps/British Isles.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Greenland Growing.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Ireland.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Spanish Mainline.gmp"
],
"35/43 :: 0x00000001": [
"rt3_wineprefix/drive_c/rt3/maps/Alternate USA.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Argentina Opens Up.gmp",
"rt3_wineprefix/drive_c/rt3/maps/California Island.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Chicago to New York.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Coast to Coast.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Dutchlantis.gmp",
"rt3_wineprefix/drive_c/rt3/maps/East of Mississippi.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Eastern Canada.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Eastern China.gmp",
"rt3_wineprefix/drive_c/rt3/maps/France.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Germantown.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Japan Trembles.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Louisiana.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Mexico.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Mississippi Valley.gmp",
"rt3_wineprefix/drive_c/rt3/maps/New Beginnings.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Orient Express.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Pacific Coastal.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Pacific NW.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Poland.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Russia.gmp",
"rt3_wineprefix/drive_c/rt3/maps/South East Australia.gmp",
"rt3_wineprefix/drive_c/rt3/maps/South East USA.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Southern Pacific.gmp",
"rt3_wineprefix/drive_c/rt3/maps/Third Republic.gmp"
]
}
}

View file

@ -84,6 +84,11 @@ Taken together they keep the current frontier narrow and concrete:
split visible directly, `port00_warehouse00_row_pair_map_paths` keeps the carrier maps checked
in, and the same export also keeps `files_with_port01_11_run_at_45_55_count = 37` plus
`files_with_warehouse01_11_run_at_56_66_count = 37` across the whole probe-bearing corpus.
- the same export now keeps the row/trailer crossover explicit too:
`row_pair_and_numbered_trailer_family_map_counts` records
`35/43 :: 0x00000001 -> 25 maps`, `35/43 :: 0x00000000 -> 5 maps`,
`10/18 :: 0x00000000 -> 4 maps`, and `10/18 :: 0x00000001 -> 3 maps`, so the off-row family
does not collapse to one numbered trailer lane.
So the open question is no longer whether the numbered families exist in stock assets, bindings,
or shipped candidate tables. The real remaining question is which earlier seed/projection seam

View file

@ -67,6 +67,8 @@ pub(crate) struct RuntimeCandidateTableNamedRunScanReport {
pub(crate) port00_warehouse00_row_pair_map_paths: BTreeMap<String, Vec<String>>,
pub(crate) numbered_port_warehouse_trailer_family_map_counts: BTreeMap<String, usize>,
pub(crate) numbered_port_warehouse_trailer_family_map_paths: BTreeMap<String, Vec<String>>,
pub(crate) row_pair_and_numbered_trailer_family_map_counts: BTreeMap<String, usize>,
pub(crate) row_pair_and_numbered_trailer_family_map_paths: BTreeMap<String, Vec<String>>,
pub(crate) skipped_file_count: usize,
pub(crate) samples: Vec<RuntimeCandidateTableNamedRunScanSample>,
}
@ -79,6 +81,8 @@ struct RuntimeCandidateTableNamedRunAggregates {
port00_warehouse00_row_pair_map_paths: BTreeMap<String, Vec<String>>,
numbered_port_warehouse_trailer_family_map_counts: BTreeMap<String, usize>,
numbered_port_warehouse_trailer_family_map_paths: BTreeMap<String, Vec<String>>,
row_pair_and_numbered_trailer_family_map_counts: BTreeMap<String, usize>,
row_pair_and_numbered_trailer_family_map_paths: BTreeMap<String, Vec<String>>,
}
pub(crate) fn scan_candidate_table_headers(
@ -227,6 +231,10 @@ pub(crate) fn scan_candidate_table_named_runs(
.numbered_port_warehouse_trailer_family_map_counts,
numbered_port_warehouse_trailer_family_map_paths: aggregates
.numbered_port_warehouse_trailer_family_map_paths,
row_pair_and_numbered_trailer_family_map_counts: aggregates
.row_pair_and_numbered_trailer_family_map_counts,
row_pair_and_numbered_trailer_family_map_paths: aggregates
.row_pair_and_numbered_trailer_family_map_paths,
skipped_file_count,
samples,
};
@ -435,22 +443,24 @@ fn build_named_run_aggregates(
aggregates.files_with_warehouse01_11_run_at_56_66_count += 1;
}
if let (Some(port00_run), Some(warehouse00_run)) = (
let row_pair_key = if let (Some(port00_run), Some(warehouse00_run)) = (
find_named_run_by_names(&sample.port_runs, "Port00", "Port00", 1),
find_named_run_by_names(&sample.warehouse_runs, "Warehouse00", "Warehouse00", 1),
) {
let row_pair_key =
format!("{}/{}", port00_run.start_index, warehouse00_run.start_index);
let row_pair_key = format!("{}/{}", port00_run.start_index, warehouse00_run.start_index);
*aggregates
.port00_warehouse00_row_pair_map_counts
.entry(row_pair_key.clone())
.or_insert(0) += 1;
aggregates
.port00_warehouse00_row_pair_map_paths
.entry(row_pair_key)
.entry(row_pair_key.clone())
.or_default()
.push(sample.path.clone());
}
Some(row_pair_key)
} else {
None
};
if let (Some(port_run), Some(warehouse_run)) = (
find_named_run(&sample.port_runs, "Port01", "Port11", 45, 55, 11),
@ -476,9 +486,22 @@ fn build_named_run_aggregates(
.or_insert(0) += 1;
aggregates
.numbered_port_warehouse_trailer_family_map_paths
.entry(trailer_family_key)
.entry(trailer_family_key.clone())
.or_default()
.push(sample.path.clone());
if let Some(row_pair_key) = &row_pair_key {
let combined_key = format!("{row_pair_key} :: {trailer_family_key}");
*aggregates
.row_pair_and_numbered_trailer_family_map_counts
.entry(combined_key.clone())
.or_insert(0) += 1;
aggregates
.row_pair_and_numbered_trailer_family_map_paths
.entry(combined_key)
.or_default()
.push(sample.path.clone());
}
}
}
@ -494,6 +517,12 @@ fn build_named_run_aggregates(
{
paths.sort();
}
for paths in aggregates
.row_pair_and_numbered_trailer_family_map_paths
.values_mut()
{
paths.sort();
}
aggregates
}
@ -614,6 +643,26 @@ mod tests {
.unwrap_or_default(),
vec!["State of Germany.gmp".to_string()]
);
assert_eq!(
aggregates
.row_pair_and_numbered_trailer_family_map_counts
.get("35/43 :: 0x00000001"),
Some(&1)
);
assert_eq!(
aggregates
.row_pair_and_numbered_trailer_family_map_counts
.get("10/18 :: 0x00000000"),
Some(&1)
);
assert_eq!(
aggregates
.row_pair_and_numbered_trailer_family_map_paths
.get("35/43 :: 0x00000001")
.cloned()
.unwrap_or_default(),
vec!["Louisiana.gmp".to_string()]
);
}
fn sample_run(

View file

@ -1253,7 +1253,11 @@
`files_with_warehouse01_11_run_at_56_66_count = 37` keep the `Port01..11` / `Warehouse01..11`
runs fixed at rows `45..55` and `56..66` in every probe-bearing map. Trailer families split
independently too: `numbered_port_warehouse_trailer_family_map_counts` keeps the fixed numbered
rows on `0x00000001 -> 28 maps` versus `0x00000000 -> 9 maps`.
rows on `0x00000001 -> 28 maps` versus `0x00000000 -> 9 maps`. The new crossover field
`row_pair_and_numbered_trailer_family_map_counts` keeps that interaction explicit too:
`35/43 :: 0x00000001 -> 25 maps`, `35/43 :: 0x00000000 -> 5 maps`,
`10/18 :: 0x00000000 -> 4 maps`, and `10/18 :: 0x00000001 -> 3 maps`, so the off-row `10/18`
subset still stays mixed instead of collapsing to one numbered trailer family.
The checked-in evidence join is explicit now too:
`artifacts/exports/rt3-1.06/building-type-sources.json` still bounds the stock side to bare
`port` / `warehouse`, `artifacts/exports/rt3-1.06/event-effects-building-bindings.json` keeps

View file

@ -14,7 +14,7 @@ This file is the short active queue for the current runtime and reverse-engineer
The checked `rt3_105/maps` compact-dispatch corpus is now exported directly and partially mirrored into the periodic-company trace: `41` maps scanned, `38` with dispatch-strip rows, `318` nondirect rows total, the add-building subset is only `10` grouped occurrences across `7` descriptor keys, and the strongest broader nondirect families are now bounded too at `36` grouped occurrences across `18` maps for `nondirect-ge1e-h0001-0360-0004-0100-0200-p0000-0000-0000-ffff :: [864:4]` plus `27` across `14` maps for the mixed `[-1:4]` cluster. All of those checked rows still lack recovered trigger kind. The active open question is therefore which ordinary loaded rows acquire or bypass the missing trigger-kind control lane before they can reach placed-structure mutation opcodes.
Preserved checked control-lane detail now lives in [Periodic company control lane](rehost-queue/periodic-company-control-lane-2026-04-21.md).
- Keep the next static Tier-2 building pass focused on the earlier seed/projection seam into `0x00412d70`, not another broad `BuildingTypes` sweep.
The grounded owner strip is `0x004196c0 -> 0x00414490 -> 0x00416ce0 -> 0x00419230`, and the checked candidate-table export now keeps the concrete row families explicit too: among the `37` probe-bearing maps, `Port00/Warehouse00` stay at `35/43` on `30` maps and shift earlier to `10/18` on `7`, while `Port01..11` / `Warehouse01..11` stay fixed at `45..55` / `56..66` and the numbered trailer family splits independently at `0x00000001 -> 28 maps` versus `0x00000000 -> 9 maps`. The stock `BuildingTypes` side is narrower too: across `77` checked `.bca` files only `MachineShop.bca` carries nonzero selector bytes at `0xb8..0xbb`, while the broader nonzero stock signal lives in the `22`-file `.bty` alias-root family with `dword_0xbb = 0x000001f4`, especially the `TextileMill` branch that already covers `Port.bty` and `Warehouse.bty`. The active open question is therefore which earlier seed/projection path lifts that narrow stock-side signal and the fixed numbered cluster into nonzero live `[candidate+0xba/+0xbb]` before `0x00412d70` and `0x00419230` consume it.
The grounded owner strip is `0x004196c0 -> 0x00414490 -> 0x00416ce0 -> 0x00419230`, and the checked candidate-table export now keeps the concrete row families explicit too: among the `37` probe-bearing maps, `Port00/Warehouse00` stay at `35/43` on `30` maps and shift earlier to `10/18` on `7`, while `Port01..11` / `Warehouse01..11` stay fixed at `45..55` / `56..66` and the numbered trailer family splits independently at `0x00000001 -> 28 maps` versus `0x00000000 -> 9 maps`. The new crossover matrix stays mixed rather than collapsing to one side too: `35/43 :: 0x00000001 -> 25 maps`, `35/43 :: 0x00000000 -> 5 maps`, `10/18 :: 0x00000000 -> 4 maps`, and `10/18 :: 0x00000001 -> 3 maps`. The stock `BuildingTypes` side is narrower too: across `77` checked `.bca` files only `MachineShop.bca` carries nonzero selector bytes at `0xb8..0xbb`, while the broader nonzero stock signal lives in the `22`-file `.bty` alias-root family with `dword_0xbb = 0x000001f4`, especially the `TextileMill` branch that already covers `Port.bty` and `Warehouse.bty`. The active open question is therefore which earlier seed/projection path lifts that narrow stock-side signal and the fixed numbered cluster into nonzero live `[candidate+0xba/+0xbb]` before `0x00412d70` and `0x00419230` consume it.
Preserved checked row-family detail now lives in [Tier2 candidate row families](rehost-queue/tier2-candidate-row-families-2026-04-21.md).
Preserved checked stock selector-byte detail now lives in [Tier2 selector-byte sources](rehost-queue/tier2-selector-byte-sources-2026-04-21.md).

View file

@ -18,6 +18,11 @@ samples:
- `numbered_port_warehouse_trailer_family_map_counts`
- `0x00000001 -> 28`
- `0x00000000 -> 9`
- `row_pair_and_numbered_trailer_family_map_counts`
- `35/43 :: 0x00000001 -> 25`
- `35/43 :: 0x00000000 -> 5`
- `10/18 :: 0x00000000 -> 4`
- `10/18 :: 0x00000001 -> 3`
## Off-Row Carrier Maps
@ -34,6 +39,17 @@ The earlier `10/18` family is narrow and fully enumerated in the checked export:
Everything else in the current probe-bearing corpus keeps the `35/43` `Port00` / `Warehouse00`
pair while still preserving the fixed numbered runs at `45..55` and `56..66`.
## Crossover Reading
The new crossover field keeps the row-family and trailer-family interaction explicit too:
- the dominant family is still the ordinary `35/43 :: 0x00000001` case on `25` maps
- the off-row `10/18` family stays mixed, splitting `4` maps on trailer `0x00000000` and `3`
maps on trailer `0x00000001`
- the ordinary `35/43` family is mixed too, with a smaller `5`-map `0x00000000` subset
So the row shift and numbered trailer split do not collapse to one underlying map family.
## Immediate Reading
This keeps the Tier-2 frontier narrower than a generic “candidate table varies by scenario” claim:
@ -41,6 +57,7 @@ This keeps the Tier-2 frontier narrower than a generic “candidate table varies
- the `Port01..11` / `Warehouse01..11` numbered families are structurally fixed across all `37`
probe-bearing maps
- only the `00` pair moves, and it does so in one small `7`-map family
- the numbered trailer split is independent of the row-pair split, so the next owner question is
still the earlier seed or projection seam that feeds nonzero `[candidate+0xba/+0xbb]` into
`0x00412d70`, not the mere existence of the stable named rows themselves
- the numbered trailer split stays mixed across both row-pair families instead of collapsing to
the off-row subset, so the next owner question is still the earlier seed or projection seam
that feeds nonzero `[candidate+0xba/+0xbb]` into `0x00412d70`, not the mere existence of the
stable named rows themselves