rrt/docs/rehost-queue.md

7.9 KiB

Rehost Queue

This file is the short active queue for the current runtime and reverse-engineering frontier.

Working Rule

  • Continue after each commit unless the queue is empty, a real blocker remains, or approval is needed.
  • Keep detailed branch notes, long evidence dumps, and retired queue state in docs/rehost-queue/.
  • Prefer linking to preserved notes instead of growing this file into another worklog.

Current Active Items

  • The active static parser head is now the engine_types semantics frontier. The repo now has structural inspectors for .car, .lco, .cgo, and .cct, but the binary side is still only partially semantic: the checked 1.05 corpus grounds .car fixed strings at 0x0c / 0x48 / 0x84 plus a second fixed stem slot at 0xa2 and a side-view resource name at 0xc0, while .lco carries a stable primary stem at 0x04 and only conditional companion/body slots at 0x0c and 0x12 when the leading stem slot is padded. The checked 1.05 corpus now also splits .car auxiliary stems into 126 direct matches, 14 role-neutral roots, and only 5 truly distinct cases, with those five exact internal-to-auxiliary pairs now preserved directly in the report surface. That distinct cohort is narrower than it first looked: 3 of the 5 are just opposite-role tender-to-loco pairings (ClassA1T -> ClassA1L, CramptonT -> CramptonL, WhaleT -> WhaleL), and only the two QJ rows remain as reordered alias roots. On the cargo side, .cgo now collapses into five stable scalar ladders instead of arbitrary floats. The early .lco lane block is now partially partitioned too: only offsets 0x20, 0x34, 0x38, 0x3c, 0x44, 0x48, and 0x54 behave like low-cardinality buckets, while the other early lanes still look high-variance. The side-view resource path is now grounded into Data/2D/rt3_2IMB.PK4, and the .imb parser now decodes shipped comment-suffixed numeric rows plus _NE profile fields such as HorizontalScaleModifier and ImageWHScaled. The checked PK4 linkage split is now explicit too: the side-view slot at 0xc0 is a shipped multi-package seam, not just a single rt3_2IMB.PK4 lookup. In 1.05, 132 / 145 side-view resource names still resolve through rt3_2IMB.PK4, but the remaining 13 CarSideView_3.imb families resolve through Data/2D/RT3_CoastToCoast.PK4, and the same CoastToCoast package also contributes 4 extra _NE.imb hits for the unmatched display tail (242 A1, Class 460, Class A1, Class P8) while Class QJ remains the only unmatched display family without a packaged _NE profile. The parser now preserves that CarSideView_3 CoastToCoast cohort exactly, and it also preserves the tiny conditional .lco companion-profile seam directly: in 1.05 the padded .lco companion/body slots collapse to Zephyr / (none) / CarSideView_3 for 242_a1_l, gp35l, u1l, and zephyrl, and to VL80T / Loco / CarSideView_{1,2} for be 5-7, f3 loco, and gp7. The classic install widens the same 0xc0 seam further: the side-view slot is not only CarSideView_* but also a larger *_Profile.imb family, and those profile references are now grounded into shipped Data/PopTopExtraContent/*.pk4 packages instead of staying unresolved. Only Eurostar_Profile.imb and ICE_Profile.imb remain missing from the checked classic shipped PK4 set. A whole-tree file census also rules out the old loose-file fallback: none of those *_Profile.imb names, and no CarSideView_3.imb, exists as a loose file anywhere in the checked rt3/ or rt3_105/ trees. The packaged profile metadata is stable enough to summarize: CarSideView_1 is 512x512 at 0.04 VRAM, CarSideView_2 is 512x256 at 0.02, and every packaged _NE profile is 512x128 with HorizontalScaleModifier = 0.75 and MaxPercentOfInterfaceVRAM = 0.09. The _NE split is now aligned with the locomotive display census too: all 43 packaged _NE hits live inside the grounded display prefix, and all 5 unmatched display-tail families are still missing packaged _NE profiles. The cargo side is partially linked now as well: the .cgo ladder families and .cct sidecar identifiers share the same cargo-family keys for ten checked families, with Troop left as the only .cct-only outlier. The next honest static work is to decide whether the two remaining reordered QJ auxiliary roots are just alternate content aliases or evidence of a narrower foreign-display/image root, explain the residual classic Eurostar_Profile.imb and ICE_Profile.imb misses, and decide how far the .cgo ladders plus the low-cardinality .lco lanes can be grounded without overclaiming semantics. The latest corpus check did narrow one point already: the low-cardinality .lco lanes do not split cleanly on _NE presence, so that branch now wants binary/code correlation rather than more aggregate-only counting. Preserved checked parser detail now lives in EngineTypes parser semantics. Preserved checked format inventory detail now lives in RT3 format inventory.

Preserved External And Dynamic Blockers

  • The locomotives-page tail remains preserved as an external-corpus blocker. Static repo-local work on this head is now exhausted: the local 29-save .gms + .gmx census proves the stable prefix through 58, proves the same two scenario-dependent 59+ tail families, and still finds no Class QJ placement plus no descriptor carriers in 452 or 457..502. The next honest non-hook step requires a broader save corpus; the next non-static step requires dynamic tracing. Preserved checked blocker detail now lives in Locomotive descriptor tails.
  • The periodic-company control-lane head remains preserved as a dynamic blocker around the ordinary loaded runtime-effect strip 0x00444d92 -> 0x00432f40(kind 8) -> 0x004323a0 -> 0x00431b20. Static progress on this head now appears genuinely blocked: the whole-binary [...+0x7ef] reference census still collapses to the grounded writer set plus the already-known compare and copy helpers, so the next honest step likely requires hook-side or runtime tracing between reload 0x00433130 and the world-entry kind-8 sweep at 0x00444d92. Preserved checked control-lane detail now lives in Periodic company control lane.
  • The Tier-2 building head remains preserved as a dynamic blocker around the seed/projection seam into 0x00412d70. The stock decode chain, the bare-name remap callback, the rebank-or-clone owner, and the earlier suspected mid-range replay strip are all now grounded, so the next honest step likely requires runtime tracing of which source rows actually enter the live bank-qualified seed set. Preserved checked row-family detail now lives in Tier2 candidate row families. Preserved checked stock selector-byte detail now lives in Tier2 selector-byte sources. Preserved checked rebuild sequencing detail now lives in Tier2 rebuild sequencing.

Preserved Detail