8 KiB
8 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
- Keep the periodic-company trace as the main shellless simulation frontier, with the next concrete control-lane pass focused on the ordinary loaded runtime-effect strip
0x00444d92 -> 0x00432f40(kind 8) -> 0x004323a0 -> 0x00431b20. The checkedrt3_105/mapscompact-dispatch corpus is now exported directly and partially mirrored into the periodic-company trace:41maps scanned,38with dispatch-strip rows,318nondirect rows total, the add-building subset is only10grouped occurrences across7descriptor keys, and the strongest broader nondirect families are now bounded too at36grouped occurrences across18maps fornondirect-ge1e-h0001-0360-0004-0100-0200-p0000-0000-0000-ffff :: [864:4]plus27across14maps for the mixed[-1:4]cluster. All of those checked rows still lack recovered trigger kind. The packed-state bridge is narrower than that queue head used to allow too:0x0042db20/0x00430d70rebuild and serialize only the fixed text bands plus the standalone and grouped row lists, while the metadata band+0x7ee..+0x80eis only mirrored by deep-copy helper0x0042e050. 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. The dispatcher-side caller census is wider in a way that makes the remaining blocker sharper:0x00432f40is already driven shelllessly for kinds1/0/3/2and then5/4from the recurring simulation-maintenance strip0x0040a220..0x0040a9ac, for kind7from the grounded company-startup family, and for kind6from the placed-structure post-create, startup-refresh, and route-entry post-change tails, whileLoadScreen.winstill owns kind9. So the missing piece is no longer “find another shellless dispatcher entrypoint.” It is why ordinary loaded rows still fail to present a matching nonzero[event+0x7ef]when the later world-entry one-shot at0x00444d92requests kind8. The largest direct writer table is ruled out now too:0x004d8ea0is the shell-sideEventConditions.wincommit helper, where controls0x4e98..0x4ea2write[event+0x7ef] = 0..10on the currently selected live event, so that seed family does not explain shellless post-load bringup. The broad scenario-name fixup owner is narrower in the same direction:0x00442c30really does mutate live event rows after reload, but its grounded trigger-kind writes still only retag1 -> 5and0 -> 2, while the surrounding event-side branches only patch modifier bytes or nested payload dwords under already-existing kinds. No grounded branch there seeds kind8. The metadata-copy helper is ruled out in the same way:0x0042e050really does clone[event+0x7ef], but the current whole-binary caller search still finds only the shell-side selected-event clone path0x004db8b0, not any shellless post-load or periodic caller. The direct write census is tighter in the same direction: the only grounded explicit write of value8into[event+0x7ef]is0x004d91b3inside that same shell helper, while the runtime-side grounded writers still only cover zero-init, copy,2/3follow-on seeds, and the later5/2retags. Static progress on this head now appears genuinely blocked: the whole-binary[...+0x7ef]reference census still collapses to that same grounded writer set plus the already-known compare and copy helpers, so the next honest step likely requires hook-side or runtime tracing between reload0x00433130and the world-entry kind-8sweep at0x00444d92. Preserved checked control-lane detail now lives in Periodic company control lane. - Keep the next static Tier-2 building pass focused on the earlier seed/projection seam into
0x00412d70, not another broadBuildingTypessweep. The grounded owner strip is0x004196c0 -> 0x00414490 -> 0x00416ce0 -> 0x00419230, and the checked candidate-table exports now keep the concrete scenario-side families explicit too: among the37probe-bearing maps,Port00/Warehouse00stay at35/43on30maps and shift earlier to10/18on7, whilePort01..11/Warehouse01..11stay fixed at45..55/56..66and the numbered trailer family splits independently at0x00000001 -> 28 mapsversus0x00000000 -> 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, and10/18 :: 0x00000001 -> 3 maps. The checked header-cluster export keeps the same root scan bounded to only3families:0x00000000 / 0x00000000 -> 27 maps,0xcdcdcdcd / 0xcdcdcdcd -> 9 maps, and0x10000000 / 0x00009000 -> 1 map(Alternate USA.gmp). The load-side handoff is narrower now too:0x004120b0explicitly reads[candidate+0xba]and[candidate+0xbb]as one-byte stream fields, and the very next projection owner0x00412d70immediately consumes those bytes in two passes, first+0xbaand then+0xbb, to pick one seed row whose full0x1f2-dword body will be cloned or reused for each numbered runtime record. The stock decode side is narrower in the same direction:0x00414490does not just copy the0xb8..0xbbtail, it already derives the optional plane size from[record+0xb8] * [record+0xb9] << 5and uses the high nibble of[record+0xba]while materializing the four optional plane buffers at[record+0xcf/+0xd3/+0xd7/+0xdb], before0x00416ce0remaps only the bareport/warehousenames and the later0x00419230rebank-or-clone pass consumes any bank-qualified owners. The same static pass rules out one lingering false lead too: the earlier suspected0x00414500..0x00414b14replay strip is not a separate serializer or import family at all, just the interior plane-decode band of0x00414490. The stockBuildingTypescorpus is narrower too: across77checked.bcafiles onlyMachineShop.bcacarries nonzero selector bytes at0xb8..0xbb, while the broader nonzero stock signal lives in the22-file.btyalias-root family withdword_0xbb = 0x000001f4, especially theTextileMillbranch that already coversPort.btyandWarehouse.bty. The active open question is therefore which later seed or projection seam turns that already-decoded stock-side shape or selector state together with the fixed numbered cluster into nonzero live[candidate+0xba/+0xbb]before0x00412d70and0x00419230consume it. Static progress on this head is close to the same boundary now: the stock decode chain, the bare-name remap callback, the rebank-or-clone owner, and the earlier suspected mid-range replay strip are all 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.