sots-re/verify/results/standalone/status.json
alex 3b99e255c7 lane C3: ComputeOutput on the turn path -- the money ComputeBudget actually sums
`ServerSystem::ComputeOutput` 0x00751fb0 and the whole of `ComputeOutputFromRates`
0x00751bb0, read from the instruction stream to the next function start. This is the
function lane E1 correctly identified as the real blocker on P01/P02/P03/P05/P06 after
its own chain came out 25/25 on BnkEl and did not unblock them.

The shape, and the fact everything turns on: construction points the build queue and
the ship-repair pass do not spend are redistributed over trade / terraform /
infrastructure, and the TRADE share is added to the money channel. Unspent
infrastructure points cascade into the terraform pool and unspent terraform points
cascade into money -- two hops, not one. So a colony with an empty build queue earns
the same money whichever way its sliders point, which is why the turn path's money
sits within one trade point of the projected path on this corpus.

Eleven addresses, five of them dropped as agreeing duplicates. New: the repair pass
0x00751590 (the B1 double-run side effect, and its round robin is provably a `min`),
the construction-point helper 0x00746830, the queue-demand walker 0x008251e0, the
ideal-suitability resolver 0x00745d60, and two helpers with non-standard conventions
that would be silently wrong read as thiscall -- 0x0074c6f0 takes `this` in ESI and
0x007460b0 takes the system in EBX.

Corrections in place: `income-term.md`'s "leftover science points" are leftover SHIP
CONSTRUCTION points (there is no science channel in this function), its
science-cascade bullet moves from inferred to instruction-verified, and
`output-term.md`'s 0x00751fa8 boundary is padding -- the `ret 8` is at 0x00751fa0.

Measured, with the engine change (sots-engine wip/output2 d3ee453):

    turn1-state -> turn2-state    209 -> 157   closed 52  regressed 0   (was 51 / 0)
    turn2-state -> turn3-state    108 ->  86   closed 22  regressed 0   (was 21 / 0)

Closed 1 per pair, regressed 0. Every prediction in the doc's section 4 held; the one
that was off is named and explained. The strongest check is not the leaf count but
the eleven-save self-check in section 5.3, where every difference between the turn
path and the projected path decomposes to the unit into the build queue's points.
2026-09-08 14:50:50 -04:00

2054 lines
65 KiB
JSON

{
"schema": "sots-standalone-status/1",
"generated": "2026-09-08T18:47:54Z",
"binary": "/home/alex/sots-engine-c3/build-host/src/app/sots_turn",
"reference": {
"input": "turn1-state.sav",
"oracle": "turn2-state.sav",
"baselineDiverging": 209,
"divergingAfterTurn": 157,
"closed": 52,
"regressed": 0,
"byteMatch": false,
"subsystems": {
"/Sim/players": 81,
"/Sim/systems": 34,
"/Sim/turnstats": 24,
"/Sim/SvSctOb": 8,
"/Sim/DesignIDs[]": 1,
"/Sim/FleetIDs[]": 1,
"/Sim/ModCount": 1,
"/Sim/NMnx": 1,
"/Sim/NumFlts": 1,
"/Sim/RNG": 1,
"/Sim/ShipIDs[]": 1,
"/Sim/cmbtid": 1,
"/Sim/fleets": 1,
"/Summary/Checksum": 1
}
},
"phases": {
"total": 44,
"verified": 0,
"implemented": 4,
"partial": 8,
"blocked": 4,
"stub": 28,
"modelled": 16,
"committed": 12
},
"tailPhases": {
"total": 37,
"verified": 0,
"implemented": 1,
"partial": 2,
"blocked": 2,
"stub": 32,
"modelled": 5,
"committed": 3
},
"rng": {
"wordsModelled": 16,
"wordsPerTurnUnattributed": "18-20 (lane Z, in flight)"
},
"pairs": [
{
"input": "turn1-state.sav",
"oracle": "turn2-state.sav",
"note": "real End Turn",
"exit": 0,
"stdout": [
"load: /home/alex/sots-re/verify/results/saves/turn1-state.sav",
" 591376 inflated bytes, 0 error(s), 0 warning(s)",
" turn 1, frame 1, modCount 0, 8 player(s), 28 system(s), 6 fleet(s)",
"roundtrip (untouched): byte-identical (591376 bytes)",
"data: no root given (--data DIR / $SOTS_DATA_DIR); the tail's ship census stays unmodelled",
"",
"phases",
" turn drivers (the milestone's denominator): 16 of 44 modelled, 12 committed",
" verified 0 implemented 4 partial 8 blocked 4 stub 28",
" post-combat tail (written to the autosave, tracked separately): 5 of 37 modelled",
" verified 0 implemented 1 partial 2 blocked 2 stub 32",
"",
"this run",
" leaves written 59",
" leaves NOT written by a blocked phase 73",
" generator words consumed 16 (state loaded, left untouched)",
" generator words NOT accounted (never netted off the above):",
" - encounter detection draws one unit value and one bounded integer per turn on every turn measured (2 words), with no derived rule behind the count -- its bound is the product of the contact and detector counts, so it is left unmodelled",
" - two draws are downstream of the budget's research allocation -- ProcessResearch's completion Chance and the tech-effect callback's own roll (0 or 1 word each). The allocation needs ComputeBudget's per-system money, which is ComputeOutput with the system's OWN rate sliders; the max-income form of that money is now modelled and self-checked (see T31), but it is NOT the one this path takes",
" - a successful raid roll may draw one further word to pick its target; no roll succeeded on any measured turn, so the cost of a success is 0 or 1 and undetermined",
" ! the generator advanced during this run but the save keeps its original state (--commit-rng to write it)",
" ! the modelled words are a LOWER BOUND on the turn's cost, so a committed generator is short by the unaccounted sites below and its drawn VALUES are not the game's",
"",
"wrote /tmp/tmp3mqpqe52/post-turn1-state.sav (65218 bytes gzipped, 591664 inflated)",
"metric -> /tmp/tmp3mqpqe52/metric-turn1-state.sav.json"
],
"coverage": {
"input": true,
"oracle": true,
"ours": true
},
"roots": {
"input": "64b836b966299d9b72fc02244ed31e31",
"oracle": "4bed514f853332b9fa35b388c3aa5558",
"ours": "436ff5f87928966e36bb61318bd0b35f"
},
"baselineDiverging": 209,
"divergingAfterTurn": 157,
"closed": 52,
"regressed": 0,
"closedPaths": [
"/Sim/Frame",
"/Sim/players/Player[576 \"Independent Colony\"]/Sav",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/EPid",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ETS",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/Eid",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/NVE",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ltis",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ntdev",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/EPid",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ETS",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/Eid",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/NVE",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ltis",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ntdev",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/EFlags",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/EPid",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ETS",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/Eid",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/NVE",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ltis",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ntdev",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/EFlags",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/EPid",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/ETS",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/Eid",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/NVE",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/ltis",
"/Sim/systems/Sys[400 \"Markab\"]/EFlags",
"/Sim/systems/Sys[400 \"Markab\"]/EPid",
"/Sim/systems/Sys[400 \"Markab\"]/ETS",
"/Sim/systems/Sys[400 \"Markab\"]/Eid",
"/Sim/systems/Sys[400 \"Markab\"]/NVE",
"/Sim/systems/Sys[400 \"Markab\"]/ltis",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/EFlags",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/EPid",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/ETS",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/Eid",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/NVE",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/ltis",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/EFlags",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/EPid",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/ETS",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/Eid",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/NVE",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/ltis",
"/Sim/systems/Sys[64 \"Hyperion\"]/EFlags",
"/Sim/systems/Sys[64 \"Hyperion\"]/EPid",
"/Sim/systems/Sys[64 \"Hyperion\"]/ETS",
"/Sim/systems/Sys[64 \"Hyperion\"]/Eid",
"/Sim/systems/Sys[64 \"Hyperion\"]/NVE",
"/Sim/systems/Sys[64 \"Hyperion\"]/ltis",
"/Summary/Turn"
],
"regressedPaths": [],
"remainingSample": [
"/Sim/DesignIDs[]: removed [], added [18, 1712] (41 -> 43 entries)",
"/Sim/FleetIDs[]: removed [], added [1744] (6 -> 7 entries)",
"/Sim/ModCount: 2 -> 12",
"/Sim/NMnx: 106 -> 109",
"/Sim/NumFlts: 6 -> 7",
"/Sim/RNG/.: '<raw 2503 B 9e6887688129a8f6>' -> '<raw 2503 B ef4d678696ed4c53>'",
"/Sim/ShipIDs[]: removed [], added [1728] (15 -> 16 entries)",
"/Sim/SvSctOb/EncObj[3]/CDiff: -1 -> 0",
"/Sim/SvSctOb/EncObj[5]/Hives/.: only-in-A",
"/Sim/SvSctOb/EncObj[5]/Hives/.[0]: only-in-B",
"/Sim/SvSctOb/EncObj[5]/Hives/.[1]: only-in-B",
"/Sim/SvSctOb/EncObj[5]/Hives/.[2]: only-in-B",
"/Sim/SvSctOb/EncObj[6]/did: only-in-B",
"/Sim/SvSctOb/EncObj[6]/didc: 0 -> 1",
"/Sim/SvSctOb/EncObj[6]/ini: False -> True",
"/Sim/cmbtid: 1 -> 2",
"/Sim/fleets/Flt[1744 \"Alpha Fleet\"]: only-in-B",
"/Sim/players/Player[16 \"re\"]/BnkEl: -1590613 -> -1594593",
"/Sim/players/Player[16 \"re\"]/BnkPr: -787353 -> -789323",
"/Sim/players/Player[16 \"re\"]/Events/EvNxID: 0 -> 2",
"/Sim/players/Player[16 \"re\"]/Events/Events/.: only-in-A",
"/Sim/players/Player[16 \"re\"]/Events/Events/.[0]: only-in-B",
"/Sim/players/Player[16 \"re\"]/Events/Events/.[EvTurn=2]: only-in-B",
"/Sim/players/Player[16 \"re\"]/Sav: 289092 -> 289688",
"/Sim/players/Player[16 \"re\"]/Status: 0 -> 4",
"/Sim/players/Player[32 \"Fane Lao\"]/BnkEl: -1811273 -> -1815833",
"/Sim/players/Player[32 \"Fane Lao\"]/BnkPr: -896580 -> -898837",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/EvNxID: 0 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.: only-in-A",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.[0]: only-in-B",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.[EvTurn=2]: only-in-B",
"/Sim/players/Player[32 \"Fane Lao\"]/FNG/FNGNum: 0 -> 1",
"/Sim/players/Player[32 \"Fane Lao\"]/Maint: 0 -> 500",
"/Sim/players/Player[32 \"Fane Lao\"]/NumDes: 5 -> 6",
"/Sim/players/Player[32 \"Fane Lao\"]/PvSav: 50000 -> 38100",
"/Sim/players/Player[32 \"Fane Lao\"]/ResRate: 0.25 -> 0.800000011920929 [1.34218e+07 ulp]",
"/Sim/players/Player[32 \"Fane Lao\"]/ResTNm: '' -> 'IND_Waldo'",
"/Sim/players/Player[32 \"Fane Lao\"]/Sav: 297492 -> 92651",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[0]: 0 -> 1",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[3]: only-in-B"
],
"byteMatch": false,
"standalone": {
"schema": "sots-standalone-metric/1",
"input": "/home/alex/sots-re/verify/results/saves/turn1-state.sav",
"output": "/tmp/tmp3mqpqe52/post-turn1-state.sav",
"spine": {
"total": 44,
"verified": 0,
"implemented": 4,
"partial": 8,
"blocked": 4,
"stub": 28,
"modelled": 16,
"committed": 12
},
"tail": {
"total": 37,
"verified": 0,
"implemented": 1,
"partial": 2,
"blocked": 2,
"stub": 32,
"modelled": 5,
"committed": 3
},
"run": {
"leafWrites": 59,
"blockedLeafWrites": 73,
"rngWords": 16,
"rngLoaded": true,
"rngCommitted": false,
"rngUnaccounted": [
"encounter detection draws one unit value and one bounded integer per turn on every turn measured (2 words), with no derived rule behind the count -- its bound is the product of the contact and detector counts, so it is left unmodelled",
"two draws are downstream of the budget's research allocation -- ProcessResearch's completion Chance and the tech-effect callback's own roll (0 or 1 word each). The allocation needs ComputeBudget's per-system money, which is ComputeOutput with the system's OWN rate sliders; the max-income form of that money is now modelled and self-checked (see T31), but it is NOT the one this path takes",
"a successful raid roll may draw one further word to pick its target; no roll succeeded on any measured turn, so the cost of a success is 0 or 1 and undetermined"
]
},
"phases": [
{
"driver": "host turn sequence (outside the two turn drivers)",
"id": "H00",
"name": "BeginProcessTurn",
"status": "implemented",
"ran": 1,
"writes": 1,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S00",
"name": "SnapshotPreviousTurn",
"status": "partial",
"ran": 1,
"writes": 1,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S01",
"name": "SystemPrePassMoraleAndAbandon",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S02",
"name": "TradeManagerTurn",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S03",
"name": "RegisterTradeSystems",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S04",
"name": "RebuildAllianceMasks",
"status": "implemented",
"ran": 8,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S05",
"name": "BuildShipActionTypeSets",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S06",
"name": "ShipActionsExceptType2",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S07",
"name": "NodeSpaceTravel",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S08",
"name": "FleetMovement",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S09",
"name": "ShipActionsType2",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S10",
"name": "ShipUpkeep",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S11",
"name": "SystemTurn",
"status": "partial",
"ran": 28,
"writes": 3,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S12",
"name": "TradeSliderFinalisation",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S13",
"name": "PlayerTurn",
"status": "partial",
"ran": 8,
"writes": 3,
"blockedWrites": 7,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P01",
"name": "ComputeBudget",
"status": "partial",
"ran": 8,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P02",
"name": "ApplyNetToSavings",
"status": "partial",
"ran": 0,
"writes": 3,
"blockedWrites": 3,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P03",
"name": "RecordBudgetDerivedFields",
"status": "blocked",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P04",
"name": "ProcessSpecialProjectsSpend",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P05",
"name": "ProcessResearch",
"status": "blocked",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P06",
"name": "ResearchRefund",
"status": "blocked",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P07",
"name": "ClearTimedResearchAccumulators",
"status": "partial",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P08",
"name": "DecayRebellionOutputModifier",
"status": "implemented",
"ran": 2,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P09",
"name": "AccumulateTimedResearchBonuses",
"status": "implemented",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P10",
"name": "ConsumeResearchRollPending",
"status": "partial",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P11",
"name": "PostNoResearchEvent",
"status": "blocked",
"ran": 4,
"writes": 0,
"blockedWrites": 4,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P12",
"name": "PruneRaidTargets",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S14",
"name": "ProcessMissions",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S15",
"name": "ProcessStations",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S16",
"name": "ProcessDefenceSats",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S17",
"name": "ShipStatCacheRefresh",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S18",
"name": "ShipActionsForceValidate",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S19",
"name": "ProcessAid",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S20",
"name": "ProcessSpecialProjectsServer",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S21",
"name": "ProcessSurrenders",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S22",
"name": "AdvanceAIRebellion",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S23",
"name": "ScriptHookTurnStart",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S24",
"name": "SensorUpdate",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S25",
"name": "ScriptHookPostSensor",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S26",
"name": "RefreshPlayerViews",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S27",
"name": "RecomputePlayerReports",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S28",
"name": "GrantMetSpeciesTechs",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S29",
"name": "SystemObservedStamp",
"status": "implemented",
"ran": 28,
"writes": 8,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S30",
"name": "BuildTeamPartition",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S31",
"name": "EncounterDetectionAndStatusRestore",
"status": "partial",
"ran": 8,
"writes": 0,
"blockedWrites": 2,
"rng": 16
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T00",
"name": "IncrementModCount",
"status": "implemented",
"ran": 1,
"writes": 1,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T01",
"name": "ValidateEncounterResultArity",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T02",
"name": "ResolveFirstContact",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T03",
"name": "AnnounceEncounterSightings",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T04",
"name": "TallyBattlesFought",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T05",
"name": "UpdateDiplomacyStatsFromCombat",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T06",
"name": "ApplyEncounterResults",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T07",
"name": "ClearEncounters",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T08",
"name": "ScriptHookCombatDone",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T09",
"name": "AdvanceAIRebellionPostCombat",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T10",
"name": "NodeSpaceTravelSecondPass",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T11",
"name": "DecayNodeLines",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T12",
"name": "DrainColonyLossQueue",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T13",
"name": "UpdateTreasuryMorale",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T14",
"name": "UpdateForeignFleetMorale",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T15",
"name": "ProcessBankruptcy",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T16",
"name": "ResolveArrivedColonizers",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T17",
"name": "RebuildPlayerViewTree",
"status": "partial",
"ran": 28,
"writes": 32,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T18",
"name": "PostFleetWarnings",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T19",
"name": "DrainInfraTerraformQueue",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T20",
"name": "ScriptHooksTurnEnd",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T21",
"name": "UpdateSurveyAndSystemStats",
"status": "partial",
"ran": 28,
"writes": 6,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T22",
"name": "TradeSliderFinalisationSecondPass",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T23",
"name": "TradeManagerEndOfTurnHooks",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T24",
"name": "RecomputeMaintenanceAndResearchBonus",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T25",
"name": "SensorUpdateSecondPass",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T26",
"name": "ScriptHookPostSensorTail",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T27",
"name": "RefreshPlayerViewsSecondPass",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T28",
"name": "UpdateNodeLineSightingMasks",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T29",
"name": "AbortInvisibleInterceptOrders",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T30",
"name": "RebuildCommunicationMasks",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T31",
"name": "UpdateBankruptcyLimits",
"status": "blocked",
"ran": 8,
"writes": 0,
"blockedWrites": 1,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T32",
"name": "PostIncomingFleetWarnings",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T33",
"name": "ShipManagerEndOfTurnHooks",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T34",
"name": "RecordObservedDesigns",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T35",
"name": "RebuildPlayerReports",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T36",
"name": "FinalizeTurnRecords",
"status": "blocked",
"ran": 8,
"writes": 0,
"blockedWrites": 56,
"rng": 0
},
{
"driver": "host turn sequence (outside the two turn drivers)",
"id": "H01",
"name": "SaveWriterInvariants",
"status": "implemented",
"ran": 1,
"writes": 1,
"blockedWrites": 0,
"rng": 0
}
]
}
},
{
"input": "turn2-state.sav",
"oracle": "turn3-state.sav",
"note": "real End Turn",
"exit": 0,
"stdout": [
"load: /home/alex/sots-re/verify/results/saves/turn2-state.sav",
" 603360 inflated bytes, 0 error(s), 0 warning(s)",
" turn 2, frame 2, modCount 12, 8 player(s), 28 system(s), 7 fleet(s)",
"roundtrip (untouched): byte-identical (603360 bytes)",
"data: no root given (--data DIR / $SOTS_DATA_DIR); the tail's ship census stays unmodelled",
"",
"phases",
" turn drivers (the milestone's denominator): 16 of 44 modelled, 12 committed",
" verified 0 implemented 4 partial 8 blocked 4 stub 28",
" post-combat tail (written to the autosave, tracked separately): 5 of 37 modelled",
" verified 0 implemented 1 partial 2 blocked 2 stub 32",
"",
"this run",
" leaves written 29",
" leaves NOT written by a blocked phase 67",
" generator words consumed 16 (state loaded, left untouched)",
" generator words NOT accounted (never netted off the above):",
" - encounter detection draws one unit value and one bounded integer per turn on every turn measured (2 words), with no derived rule behind the count -- its bound is the product of the contact and detector counts, so it is left unmodelled",
" - two draws are downstream of the budget's research allocation -- ProcessResearch's completion Chance and the tech-effect callback's own roll (0 or 1 word each). The allocation needs ComputeBudget's per-system money, which is ComputeOutput with the system's OWN rate sliders; the max-income form of that money is now modelled and self-checked (see T31), but it is NOT the one this path takes",
" - a successful raid roll may draw one further word to pick its target; no roll succeeded on any measured turn, so the cost of a success is 0 or 1 and undetermined",
" ! the generator advanced during this run but the save keeps its original state (--commit-rng to write it)",
" ! the modelled words are a LOWER BOUND on the turn's cost, so a committed generator is short by the unaccounted sites below and its drawn VALUES are not the game's",
"",
"wrote /tmp/tmp3mqpqe52/post-turn2-state.sav (66882 bytes gzipped, 603360 inflated)",
"metric -> /tmp/tmp3mqpqe52/metric-turn2-state.sav.json"
],
"coverage": {
"input": true,
"oracle": true,
"ours": true
},
"roots": {
"input": "4bed514f853332b9fa35b388c3aa5558",
"oracle": "e9c161e311f8ef8fad6f1aa1903dcf3f",
"ours": "5c5eb87437866b1563ff19ba4702ef32"
},
"baselineDiverging": 108,
"divergingAfterTurn": 86,
"closed": 22,
"regressed": 0,
"closedPaths": [
"/Sim/Frame",
"/Sim/players/Player[576 \"Independent Colony\"]/Sav",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ETS",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ltis",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ntdev",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ETS",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ltis",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ntdev",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ETS",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ltis",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ntdev",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/ETS",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/ltis",
"/Sim/systems/Sys[400 \"Markab\"]/ETS",
"/Sim/systems/Sys[400 \"Markab\"]/ltis",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/ETS",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/ltis",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/ETS",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/ltis",
"/Sim/systems/Sys[64 \"Hyperion\"]/ETS",
"/Sim/systems/Sys[64 \"Hyperion\"]/ltis",
"/Summary/Turn"
],
"regressedPaths": [],
"remainingSample": [
"/Sim/FleetIDs[]: removed [1744], added [34, 1776] (7 -> 8 entries)",
"/Sim/ModCount: 14 -> 24",
"/Sim/NMnx: 109 -> 111",
"/Sim/NumFlts: 7 -> 8",
"/Sim/RNG/.: '<raw 2503 B ef4d678696ed4c53>' -> '<raw 2503 B a80459bfd63a006b>'",
"/Sim/ShipIDs[]: removed [], added [1760] (16 -> 17 entries)",
"/Sim/SvSctOb/EncObj[5]/Hives/.[1]/NextQ: 31 -> 32",
"/Sim/SvSctOb/EncObj[5]/Hives/.[2]/NextQ: 29 -> 30",
"/Sim/cmbtid: 2 -> 3",
"/Sim/fleets/Flt[1744 \"Alpha Fleet\"]: only-in-A",
"/Sim/fleets/Flt[1776 \"Gamma Fleet\"]: only-in-B",
"/Sim/fleets/Flt[34 \"Beta Fleet\"]: only-in-B",
"/Sim/players/Player[16 \"re\"]/BnkEl: -1594593 -> -1598566",
"/Sim/players/Player[16 \"re\"]/BnkPr: -789323 -> -791290",
"/Sim/players/Player[16 \"re\"]/Events/EvNxID: 2 -> 3",
"/Sim/players/Player[16 \"re\"]/Events/Events/.[0]: 1 -> 2",
"/Sim/players/Player[16 \"re\"]/Events/Events/.[EvTurn=3]: only-in-B",
"/Sim/players/Player[16 \"re\"]/PvSav: 50000 -> 289688",
"/Sim/players/Player[16 \"re\"]/Sav: 531773 -> 532369",
"/Sim/players/Player[32 \"Fane Lao\"]/BnkEl: -1815833 -> -1820206",
"/Sim/players/Player[32 \"Fane Lao\"]/BnkPr: -898837 -> -901002",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/EvNxID: 2 -> 4",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.[0]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.[EvTurn=3]: only-in-B",
"/Sim/players/Player[32 \"Fane Lao\"]/FNG/FNGNum: 1 -> 3",
"/Sim/players/Player[32 \"Fane Lao\"]/Maint: 500 -> 1000",
"/Sim/players/Player[32 \"Fane Lao\"]/PvSav: 38100 -> 80751",
"/Sim/players/Player[32 \"Fane Lao\"]/Sav: 142259 -> 135486",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[0]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[3]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/sri[0]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/sri[3]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/TechTree/TResDone[106]: 2879 -> 5768",
"/Sim/players/Player[32 \"Fane Lao\"]/TechTree/Tbd[106]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/lboid: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/odes/.[1]/otnL: 2 -> 3",
"/Sim/players/Player[496 \"Singularity\"]/dipstats/.[1]/lastally: 2 -> 3",
"/Sim/players/Player[512 \"Singularity\"]/dipstats/.[1]/lastally: 2 -> 3",
"/Sim/players/Player[528 \"Alien Menace\"]/dipstats/.[1]/lastnap: 2 -> 3",
"/Sim/players/Player[528 \"Alien Menace\"]/dipstats/.[2]/lastnap: 2 -> 3"
],
"byteMatch": false,
"standalone": {
"schema": "sots-standalone-metric/1",
"input": "/home/alex/sots-re/verify/results/saves/turn2-state.sav",
"output": "/tmp/tmp3mqpqe52/post-turn2-state.sav",
"spine": {
"total": 44,
"verified": 0,
"implemented": 4,
"partial": 8,
"blocked": 4,
"stub": 28,
"modelled": 16,
"committed": 12
},
"tail": {
"total": 37,
"verified": 0,
"implemented": 1,
"partial": 2,
"blocked": 2,
"stub": 32,
"modelled": 5,
"committed": 3
},
"run": {
"leafWrites": 29,
"blockedLeafWrites": 67,
"rngWords": 16,
"rngLoaded": true,
"rngCommitted": false,
"rngUnaccounted": [
"encounter detection draws one unit value and one bounded integer per turn on every turn measured (2 words), with no derived rule behind the count -- its bound is the product of the contact and detector counts, so it is left unmodelled",
"two draws are downstream of the budget's research allocation -- ProcessResearch's completion Chance and the tech-effect callback's own roll (0 or 1 word each). The allocation needs ComputeBudget's per-system money, which is ComputeOutput with the system's OWN rate sliders; the max-income form of that money is now modelled and self-checked (see T31), but it is NOT the one this path takes",
"a successful raid roll may draw one further word to pick its target; no roll succeeded on any measured turn, so the cost of a success is 0 or 1 and undetermined"
]
},
"phases": [
{
"driver": "host turn sequence (outside the two turn drivers)",
"id": "H00",
"name": "BeginProcessTurn",
"status": "implemented",
"ran": 1,
"writes": 1,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S00",
"name": "SnapshotPreviousTurn",
"status": "partial",
"ran": 1,
"writes": 1,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S01",
"name": "SystemPrePassMoraleAndAbandon",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S02",
"name": "TradeManagerTurn",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S03",
"name": "RegisterTradeSystems",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S04",
"name": "RebuildAllianceMasks",
"status": "implemented",
"ran": 8,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S05",
"name": "BuildShipActionTypeSets",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S06",
"name": "ShipActionsExceptType2",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S07",
"name": "NodeSpaceTravel",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S08",
"name": "FleetMovement",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S09",
"name": "ShipActionsType2",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S10",
"name": "ShipUpkeep",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S11",
"name": "SystemTurn",
"status": "partial",
"ran": 28,
"writes": 3,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S12",
"name": "TradeSliderFinalisation",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S13",
"name": "PlayerTurn",
"status": "partial",
"ran": 8,
"writes": 3,
"blockedWrites": 4,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P01",
"name": "ComputeBudget",
"status": "partial",
"ran": 8,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P02",
"name": "ApplyNetToSavings",
"status": "partial",
"ran": 0,
"writes": 3,
"blockedWrites": 3,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P03",
"name": "RecordBudgetDerivedFields",
"status": "blocked",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P04",
"name": "ProcessSpecialProjectsSpend",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P05",
"name": "ProcessResearch",
"status": "blocked",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P06",
"name": "ResearchRefund",
"status": "blocked",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P07",
"name": "ClearTimedResearchAccumulators",
"status": "partial",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P08",
"name": "DecayRebellionOutputModifier",
"status": "implemented",
"ran": 2,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P09",
"name": "AccumulateTimedResearchBonuses",
"status": "implemented",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P10",
"name": "ConsumeResearchRollPending",
"status": "partial",
"ran": 2,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P11",
"name": "PostNoResearchEvent",
"status": "blocked",
"ran": 1,
"writes": 0,
"blockedWrites": 1,
"rng": 0
},
{
"driver": "ServerPlayer::ProcessTurn",
"id": "P12",
"name": "PruneRaidTargets",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S14",
"name": "ProcessMissions",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S15",
"name": "ProcessStations",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S16",
"name": "ProcessDefenceSats",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S17",
"name": "ShipStatCacheRefresh",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S18",
"name": "ShipActionsForceValidate",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S19",
"name": "ProcessAid",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S20",
"name": "ProcessSpecialProjectsServer",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S21",
"name": "ProcessSurrenders",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S22",
"name": "AdvanceAIRebellion",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S23",
"name": "ScriptHookTurnStart",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S24",
"name": "SensorUpdate",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S25",
"name": "ScriptHookPostSensor",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S26",
"name": "RefreshPlayerViews",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S27",
"name": "RecomputePlayerReports",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S28",
"name": "GrantMetSpeciesTechs",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S29",
"name": "SystemObservedStamp",
"status": "implemented",
"ran": 28,
"writes": 8,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S30",
"name": "BuildTeamPartition",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::ProcessTurn",
"id": "S31",
"name": "EncounterDetectionAndStatusRestore",
"status": "partial",
"ran": 8,
"writes": 0,
"blockedWrites": 2,
"rng": 16
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T00",
"name": "IncrementModCount",
"status": "implemented",
"ran": 1,
"writes": 1,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T01",
"name": "ValidateEncounterResultArity",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T02",
"name": "ResolveFirstContact",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T03",
"name": "AnnounceEncounterSightings",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T04",
"name": "TallyBattlesFought",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T05",
"name": "UpdateDiplomacyStatsFromCombat",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T06",
"name": "ApplyEncounterResults",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T07",
"name": "ClearEncounters",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T08",
"name": "ScriptHookCombatDone",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T09",
"name": "AdvanceAIRebellionPostCombat",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T10",
"name": "NodeSpaceTravelSecondPass",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T11",
"name": "DecayNodeLines",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T12",
"name": "DrainColonyLossQueue",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T13",
"name": "UpdateTreasuryMorale",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T14",
"name": "UpdateForeignFleetMorale",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T15",
"name": "ProcessBankruptcy",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T16",
"name": "ResolveArrivedColonizers",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T17",
"name": "RebuildPlayerViewTree",
"status": "partial",
"ran": 28,
"writes": 8,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T18",
"name": "PostFleetWarnings",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T19",
"name": "DrainInfraTerraformQueue",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T20",
"name": "ScriptHooksTurnEnd",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T21",
"name": "UpdateSurveyAndSystemStats",
"status": "partial",
"ran": 28,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T22",
"name": "TradeSliderFinalisationSecondPass",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T23",
"name": "TradeManagerEndOfTurnHooks",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T24",
"name": "RecomputeMaintenanceAndResearchBonus",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T25",
"name": "SensorUpdateSecondPass",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T26",
"name": "ScriptHookPostSensorTail",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T27",
"name": "RefreshPlayerViewsSecondPass",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T28",
"name": "UpdateNodeLineSightingMasks",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T29",
"name": "AbortInvisibleInterceptOrders",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T30",
"name": "RebuildCommunicationMasks",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T31",
"name": "UpdateBankruptcyLimits",
"status": "blocked",
"ran": 8,
"writes": 0,
"blockedWrites": 1,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T32",
"name": "PostIncomingFleetWarnings",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T33",
"name": "ShipManagerEndOfTurnHooks",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T34",
"name": "RecordObservedDesigns",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T35",
"name": "RebuildPlayerReports",
"status": "stub",
"ran": 0,
"writes": 0,
"blockedWrites": 0,
"rng": 0
},
{
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T36",
"name": "FinalizeTurnRecords",
"status": "blocked",
"ran": 8,
"writes": 0,
"blockedWrites": 56,
"rng": 0
},
{
"driver": "host turn sequence (outside the two turn drivers)",
"id": "H01",
"name": "SaveWriterInvariants",
"status": "implemented",
"ran": 1,
"writes": 1,
"blockedWrites": 0,
"rng": 0
}
]
}
}
]
}