{ "_note": "Lane L3 (2026-09-08). Every entry here was trapped LIVE with hardware data-write watchpoints on the spy-program vector's _Myfirst/_Mylast, on the first turn in this campaign on which a spy craft was ever created, and then resolved to a function start against dumps/functions.json. ReVa/CT111 was unreachable this session (ReVa CONNECTION_CLOSED), so no body was read in Ghidra and every prototype below states only what the trap measured plus what an already-verified neighbour entry establishes. Status is `mapped`, not `verified`, for exactly that reason. Evidence: verify/results/shim/l3/l3-spy-run-watch.txt, findings/subsystems/trade-and-spy-workload.md.", "entries": [ { "name": "ShipAction_BuildSpy", "addr": "0x00789620", "convention": "__thiscall", "prototype": "void (ShipAction* this, ...) /* THE `Build Spy` SHIP-ACTION HANDLER -- the writer at the top of the only call chain that has ever grown Game::ServerSpyManager's spy vector. Trapped live: with a debug breakpoint on spyManager+0x10/+0x14 and a `Build Spy` order issued from the fleet panel's Special menu, the single allocation of that vector arrived as 0x00789620+0x53 -> 0x008383c0+0x9c -> 0x0059f1a0+0x5f -> 0x00483410+0x7c/+0x82, on the turn thread, inside the End Turn that applied the order. REACHABILITY: same indirection class as its sibling ShipBorneBuildQueue_ProcessTurn 0x00789500 (lane B6) -- 0x120 bytes away, zero direct call sites, no vtable slot; both are entries in the STACK-BUILT function-pointer table the ship-action dispatcher (lane T's 0x007b9c4b site, dispatched from StrategyServer 0x007dc92b/0x007dc952/0x007dcb0c) indexes by action type. NOT READ IN GHIDRA: the body, the action-type index and the argument list are unknown; what is measured is the entry's position in the chain and the fact that no other path grew the container across 7 instrumented turns */", "status": "mapped", "source": "findings/subsystems/trade-and-spy-workload.md (lane L3 2026-09-08)" }, { "name": "ServerSpyManager_CreateSpyCraft", "addr": "0x008383c0", "convention": "__thiscall", "prototype": "void (Game::ServerSpyManager* this, ...) /* The spy-craft creator: the only frame between the Build Spy ship action and the push_back that grows the manager's vector at this+0x10..0x18. Trapped at +0x9c calling 0x0059f1a0 with that vector; the element it appends is the Game::SpyCraft whose serialized record then appears under `spymgr`/`spy` with sid=1, sown=, atto=, tdep=-1. NOT READ IN GHIDRA: whether it also does the payment, the tender bookkeeping and the event post, or delegates them */", "status": "mapped", "source": "findings/subsystems/trade-and-spy-workload.md (lane L3 2026-09-08)" } ] }