131 KiB
Rehost Queue
Working rule:
- Do not stop after commits.
- After each commit, check this queue and continue.
- Only stop if the queue is empty, the remaining work cannot be advanced by any further non-hook work without guessing, or you need approval.
- Before any final response, state which stop condition is true. If none is true, continue.
Next
-
Treat the periodic-company trace as the main shellless simulation frontier now that the infrastructure footer-bit residue is layout/presentation-owned. The checked-in
runtime inspect-periodic-company-service-trace <save.gms>report now exposes concrete branch owners instead of generic blockers:industry_acquisition_side_branchcarries0x004019e0 -> 0x004014b0with the city-connection sibling0x00406050city_connection_announcementcarries0x004019e0 -> 0x00406050plus peer helpers0x00420030 / 0x00420280 / 0x0047efe0linked_transit_roster_maintenancecarries0x004019e0 -> 0x00409720 -> 0x004093d0 / 0x00407bd0 -> 0x00408f70 -> 0x00409950- the linked-transit timing seam is now grounded save-side too:
[company+0x0d3e]is the shorter peer-cache refresh counter,[company+0x0d3a]is the heavier autoroute site-score refresh counter, and the route-anchor tuple[company+0x0d35] / [company+0x7664/+0x7668/+0x766c]remains save-native - the train-side follow-ons are bounded too:
0x00408280 / 0x00408380are the ranked-site chooser and staged autoroute-entry builder above the rebuilt site caches, and0x00409770 / 0x00409830 / 0x00409950are the append/add/balance strip above that - the chooser-local cache words are bounded too:
[site+0x5c1]is a live occupancy/count lane reset by0x00481910and adjusted by0x004819b0, with counts sourced from current-site-id resolver0x004a9340; meanwhile[site+0x5c5]is a world-counter age lane stamped at0x004aee2b - the per-company cache root is bounded too:
[site+0x5bd]is allocated by0x00407780as a 0x20-entry table of 0x1a-byte per-company cache cells and freed by0x004077e0 - the per-company cache-cell layout is bounded too:
bytes
+0x00/+0x01gate participation, dwords+0x02/+0x06/+0x0ahold peer count, peer pointer, and peer-cache refresh stamp, and floats+0x0e/+0x12/+0x16are the weighted/raw/final score lanes - the persisted-vs-live split is tighter now too:
the minimal save-backed identity set is
[site+0x276],[site+0x04],[site+0x2a4],[site+0x2a8],[peer+0x04/+0x08],[company+0x0d35/+0x0d56/+0x7664/+0x7668/+0x766c], and world calendar lanes[world+0x15/+0x0d], while the actual cache contents at[site+0x5bd],[site+0x5c1/+0x5c5], and[site+0x0e/+0x12/+0x16]are live rebuilt scratch lanes under0x004093d0 / 0x00407bd0 / 0x00481910 / 0x004819b0 / 0x004aee2b - the upstream live-table owners are tighter now too:
active-company refresh owner
0x00429c10walks the live company roster and re-enters0x004093d0; candidate table root0x0062ba8cis world-load owned by0x0041f4e0 -> 0x0041ede0 -> 0x0041e970; and route-entry tracker compatibility / chooser helpers0x004a6360 / 0x004a6630already sit under owner-notify refresh0x00494fb0 - the placed-structure replay strip is tighter now too:
0x00444690 -> 0x004133b0 -> 0x0040ee10 -> 0x0040edf6 -> 0x00480710already republishes anchor-side linked-peer ids, route-entry anchors, and world-cell owner chains, and later runtime path0x004160aa -> 0x0040ee10re-enters the same family outside bring-up - the subtype-
4follow-on is tighter now too:0x0040eba0already republishes[site+0x2a4]through0x004814c0 / 0x00481480plus world-cell chain helpers0x0042c9f0 / 0x0042c9a0, so self-id replay is no longer the open linked-transit blocker - the owner-company branch is tighter now too:
direct inspection of
0x0040ea96..0x0040eb65shows that it consumes[site+0x276]and branches through owner/company helpers, but does not itself rehydrate[site+0x276] - that makes the next linked-transit question narrower:
identify which earlier restore or service owner feeds
[site+0x276]and the live linked-peer rows before replay continuation0x0040e360..0x0040edf6, beyond the already-grounded0x00480710anchor-side refresh, before0x004093d0 / 0x00407bd0 / 0x004a6630, because the candidate table, route-entry-tracker owners, replay-strip framing, subtype-4self-id replay, bounded train-side strip0x00409770 / 0x00409830 / 0x00409950, and cache-cell semantics are no longer the blocker
-
Make the next static/rehost slice the near-city industry acquisition owner seam under
0x004014b0, not another generic infrastructure pass. The concrete questions are:- which minimum persisted peer-site fields on the already-grounded
0x006cec20placed-structure collection feed near-city unowned-industry candidates - which placed-structure, city-or-region, and company linkage survives save/load strongly enough to drive the proximity scan
- whether the acquisition branch can be rehosted as a shellless sibling beside the already grounded annual-finance helper
- the save-side
0x36b1/0x36b2/0x36b3triplet seam is now also loaded into the checked-in save-slice model as first-classplaced_structure_collectioncontext, carrying stem pairs plus grounded footer/policy status lanes instead of remaining inspection-only evidence - the separate
0x38a5/0x38a6/0x38a7side-buffer seam is now also loaded into the save-slice model as first-classplaced_structure_dynamic_side_buffer_summarycontext, carrying the grounded owner-shared dword, compact-prefix summaries, name-pair summaries, and overlap counts against the triplet corpus instead of remaining trace-only evidence - the save-side
0x55f1/0x55f2/0x55f3region triplet seam is now also loaded into the save-slice model as first-classregion_collectioncontext, carrying region names, the grounded policy lanes, reserved-policy dwords, and embedded profile rows instead of leaving region triplets inspection-only - the save-side fixed-row run candidate family is now also the next save-slice seam to keep
first-class once grounded, because it is the closest save-native candidate family to the
still-missing cached tri-lane inputs behind
[site+0x310/+0x338/+0x360] - cross-save fixed-row comparison is tighter now too:
runtime compare-region-fixed-row-runs p.gms q.gmsshows shared shape-family matches even though the best rawrows_offsetdrifts between saves, so the tri-lane-adjacent row family should be treated as a stable shape-family seam rather than a fixed-offset seam - the periodic-company trace now carries that save-native seam directly too: it exposes the current top tri-lane-adjacent fixed-row shape-family candidates with row-count, stride, rows-offset, and probable-density-lane hints, so the tri-lane frontier is now structured as “save shape-family candidates present, fixed offset ruled down” instead of only a prose note
- the
0x5dc1/0x5dc2serializer bundle is tighter now too: atlas-backed recovery bounds0x0040c980 -> 0x0045b560as emitting the derived payload over[site+0x23e/+0x242/+0x246/+0x24e/+0x252], so the remaining restore-owner question should treat that persisted selector/child/runtime bundle as one seam rather than only[site+0x23e/+0x242] - the loader-side counterpart narrows the minimum shellless identity subset too:
0x0045c150restores[owner+0x23e/+0x242], clears the transient roots, and then hands off to0x0045c310 / 0x0045b5f0 / 0x0045b6f0to rebuild the primary child handle plus the larger ambient/animation/light/random-sound family, so current shellless planning can keep the minimum persisted subset at cached ids[site+0x3cc/+0x3d0], restored name-pair[owner+0x23e/+0x242], and the post-secondary discriminator byte while treating[owner+0x246/+0x24e/+0x252]as part of the broader saved bundle that still flows through the rebuild side - the periodic-company trace now surfaces the strongest non-transport owner-company candidate
family directly too:
ordinary loaded runtime-effect lane
0x00444d92 -> 0x00432f40(kind 8) -> 0x004323a0 -> 0x00431b20above the non-direct0x4e99/0x4e9a/0x4e9bbundle, with the remaining gap narrowed to the control-lane mapping from loaded rows into trigger kind8and then into the placed-structure mutation opcodes
- which minimum persisted peer-site fields on the already-grounded
-
Direct disassembly now narrows that acquisition strip further:
0x004014b0scans the live placed-structure collection at0x0062b26c0x0041f6e0 -> 0x0042b2d0is the center-cell token gate over the current region0x0047de00 -> 0x0040c990is the linked-region status branch reused from the city-connection helper strip0x004801a0is the route-anchor reachability gate for one candidate site through0x00401860 -> 0x0048e3c0- the company-side half of that gate is now explicit too:
0x00401860validates or rebuilds the cached linked-transit route-anchor entry id[company+0x0d35]from the live route-entry collection using fallback count lanes[company+0x7664/+0x7668/+0x766c] - those four company lanes are now threaded into save-native company market state, so the route-anchor side of the acquisition gate is no longer just a trace-only blocker
0x0040d360is the subtype-4predicate over the current placed-structure subject's candidate byte[candidate+0x32]0x0040d540scores site/company proximity with pending-bonus context0x0040cac0samples the cached site tri-lane at[site+0x310/+0x338/+0x360]0x00405920walks same-company linked site peers above the live placed-structure / peer-site collection seam0x00420030 / 0x00420280is the boolean/selector peer-site pair over0x006cec20, combining0x0042b2d0, the optional company filter through0x0047efe0, the station-or-transit gate0x0047fd50, and the status branch0x0047de00 -> 0x0040c9900x0047efe0and0x0047fd50both consume[site+0x04]as the live backing-record selector0x00480210writes linked-peer row[peer+0x04]from the anchor-site id argument0x0040f6d0 -> 0x00481390writes the anchor-site linked peer id back into[site+0x2a8]0x0047dda0consumes[peer+0x08]as the linked route-entry anchor id0x0041f7e0 / 0x0041f810 / 0x0041f850already ground[site+0x2a4]as the record's own placed-structure id lane beneath the peer-chain helpers0x0040d210is the owner-side placed-structure resolver from[site+0x276]through0x0062be100x00480710 -> 0x0048abc0 / 0x00493cf0is the linked-site refresh and route-entry rebind or synthesis strip above that anchor lane- the same
0x00480710replay strip now also republishes the concrete world-cell owner chains:0x0042bbf0 / 0x0042bbb0remove or prepend the current site in the owner chain rooted at[cell+0xd4], while0x0042c9f0 / 0x0042c9a0remove or prepend it in the linked-site chain rooted at[cell+0xd6] - late world bring-up
0x00444690is the current caller of0x004133b0 placed_structure_collection_refresh_local_runtime_records_and_position_scalars 0x004133b0drains queued site ids through0x0040e450and then sweeps all live sites through0x0040ee100x0040ee10reaches0x0040edf6 -> 0x00480710for linked-peer refresh and then the later0x0040e360follow-on0x004160aais a separate non-bring-up runtime caller of0x0040ee10- the direct
0x36b1per-record callbacks serialize base scalar triplets[this+0x206/+0x20a/+0x20e]plus the subordinate payload callback strip, and the0x4a9d/0x4a3a/0x4a3bside-buffer owner only persists route-entry lists, three byte arrays, five proximity buckets, and the sampled-cell list 0x004269b0consumes the chosen site's own placed-structure id lane[site+0x2a4]
-
That leaves the acquisition blocker set tighter than before:
- peer-site and linked-site replay seams are grounded enough for planning
- the live owner-company meaning of
[site+0x276]is already grounded through0x0047efe0, with the direct owner-side resolver bounded at0x0040d210 [site+0x2a4]is already grounded as the record's own placed-structure id lane through the peer-chain helpers0x0041f7e0 / 0x0041f810 / 0x0041f850, and constructor-side0x00480210already seeds that lane for new linked-site rows- direct disassembly now also shows
0x004269b0resolving one chosen site id through live placed-structure collection0x0062b26cbefore mutating[site+0x276], so the[site+0x2a4]self-id lane is reconstructible from collection identity rather than needing a separate serializer-owned projection - the subtype byte consumed as
[candidate+0x32] == 4is already bounded under the aux-candidate load/stem-policy chain0x004131f0 -> 0x00412fb0 -> 0x004120b0 -> 0x00412ab0 - remaining non-hook gaps are the save or replay projection of
[site+0x276]and the cached tri-lane[site+0x310/+0x338/+0x360] - the checked-in periodic-company trace now exposes those gaps as structured statuses instead of
only prose:
- site owner-company lane =
live_meaning_grounded_projection_missing - site self-id lane =
live_meaning_grounded_reconstructible_from_collection_identity - site cached tri-lane =
delta_reader_grounded_projection_missing - candidate subtype lane =
cached_candidate_id_bridge_grounded_via_stream_load - backing-record selector bridge =
stream_load_callback_grounded_via_0x40ce60
- site owner-company lane =
- the same trace now also carries three explicit projection hypotheses for the next pass:
site_owner_replay_from_post_load_refresh_self_id_reconstructiblesite_cached_tri_lane_payload_or_restore_ownercached_source_candidate_id_to_subtype_projection
- the first of those is now bounded more tightly:
0x004133b0 -> 0x0040e450 / 0x0040ee10rebuilds cloned local-runtime records and local position/scalar triplets, but direct constructor and caller recovery now shows the owner-company lane also living under the create-side allocator/finalize family0x004134d0 -> 0x0040f6d0 -> 0x0040ef10, plus data-driven loader callers0x0046f073 / 0x004707ff -> 0x0040ef10 - the checked-in replay strip is narrower than before now:
direct local inspection now splits it more precisely:
0x0040ee10itself only reads cached source lane[site+0x3cc]in the checked range, and the bounded0x00480710neighborhood is working from[site+0x04],[site+0x08], and[site+0x3cc]; but the broader immediate continuation0x0040e360..0x0040edf6still consumes[site+0x2a8],[site+0x2a4], and[site+0x276]around0x0040d230 / 0x0040d1f0 / 0x00480710 / 0x00426b10 / 0x00455860, so the replay family is narrowed rather than ruled out for owner-company rehydration; in the checked range those[site+0x276]uses are still reads/queries rather than a direct rehydrating store - the create-side owner family is grounded too now:
0x004134d0allocates a new row through0x00518900,0x0040f6d0seeds[site+0x2a4], copied name bytes,[site+0x276],[site+0x3d4/+0x3d5], and cleared local caches, and the shared finalize helper0x0040ef10has both create-side callers0x00403ef3 / 0x00404489and data-driven loader callers0x0046f073 / 0x004707ff - one persisted tuple path is grounded too now:
the data-driven loader callers
0x0046f073 / 0x004707ffpush tuple fields[+0x00/+0x04/+0x0c]into0x0040ef10, and inside that helper arg3 becomesebxand then[site+0x276]at0x0040f5d4 - that tuple path is classified further now too:
the checked-in atlas ties
0x004707ffto multiplayer transport selector-0x13body0x004706b0, which attempts the placed-structure apply path through0x004197e0 / 0x004134d0 / 0x0040eba0 / 0x0052eb90 / 0x0040ef10 - the neighboring batch builder is classified too:
0x00472b40is the multiplayer transport selector-0x72counted live-world apply path, and its inner builders0x00472bef / 0x00472d03reach0x004134d0from counted transport records rather than ordinary save-load restore - one surviving non-transport
0x004134d0caller is bounded away from persisted restore too:0x00422bb4pushes one live0x0062b2fcrecord plus local args and literal flags1/0into0x004134d0, then returns the created row id through an out-param instead of feeding the tuple-backed finalize path - the remaining
0x00508fd1 / 0x005098ebfamily is bounded away too: it caches the created site id in[this+0x7c], re-enters0x0040eba0with immediate coords, and later calls0x0040ef10with a hard zero third arg, so it reads as another live controller path rather than the missing persisted owner seam - the adjacent
0x00473c20family is bounded away too: it drains queued site ids and coordinate pairs from scratch band0x006ce808..0x006ce988, re-enters0x0040eba0at0x00473c98, and clears each queued id slot, so it is a local post-create refresh path rather than a persisted replay owner - the remaining direct
[site+0x276]store census is bounded away too:0x0042128dis broad zero-init in the0x00421430constructor neighborhood,0x00422305computes a live score/category lane before publishing event0x7,0x004269c9/0x00426a2aare acquisition commit/clear helpers, and0x004282a9/0x004300d6are bulk owner-transfer writes - the paired tagged triplet serializer is bounded away too:
0x00413440is the save-side0x36b1/0x36b2/0x36b3serializer, dispatches each live record through vtable slot+0x44, and keeps that seam on the already-grounded triplet payload rather than the missing[site+0x276]replay owner - the ordinary bring-up strip is narrower too:
0x00444690 -> 0x004133b0is still the checked ordinary restore-side replay owner above live placed structures, but it only drains queued local-runtime ids through0x0040e450and then sweeps live rows through0x0040ee10; after that, bring-up proceeds into later route-entry, grid, and tagged refresh owners rather than re-entering the constructor/finalize family0x004134d0 / 0x0040f6d0 / 0x0040ef10 - the ordinary restore staging order is explicit now too:
world bring-up calls the tagged
0x36b1/0x36b2/0x36b3stream-load owner0x00413280at0x00444467, refreshes the placed-structure dynamic side buffers through0x00481210at0x004444d8, and only later enters the queued local-runtime replay owner0x00444690 -> 0x004133b0 -> 0x0040ee10 - the broader load-side stream owner is separate too:
0x00413280is the actual tagged0x36b1/0x36b2/0x36b3stream-load owner, dispatching per-entry vtable slot+0x40; current local recovery still only grounds that seam through the cached-source bridge0x0040ce60 -> 0x0040cd70 / 0x0045c150, not through a direct[site+0x276]republisher - the grouped-opcode family is narrower rather than fully ruled down:
0x00431b20is still only reached through scenario runtime-effect service0x004323a0 -> 0x00432f40via direct call0x00432317, but that service loop is itself called from world bring-up at0x00444d92with trigger kind8under shell-profile latch[0x006cec7c+0x97]; so0x0061039ccurrently reads as a startup-time live runtime-effect application lane rather than an ordinary tagged restore owner - that
kind 8branch is ordinary in one important way now too: restore-side loader0x00433130repopulates the live event collection0x0062be18from packed chunk family0x4e21/0x4e22, and the event-detail editor strip0x004d90ba..0x004d91edwrites trigger field[event+0x7ef]across the full0x00..0x0arange through controls0x4e98..0x4ea2, including kind8at0x004d91b3; so the remaining startup compact-effect question is no longer whether kind8is a special synthetic class, but which loaded kind-8rows in0x0062be18can actually reach the placed-structure mutation opcode families under0x00431b20 - the event-detail editor family tightens that one step further too:
selected-event control root
0x4e84and refresh strip0x004db02a / 0x004db1b8..0x004db309mirror current trigger field[event+0x7ef]back into those same0x4e98..0x4ea2controls, while editor-side builder0x004db9e5..0x004db9f1allocates an ordinary runtime-effect row into0x0062be18through0x00432ea0; so the remaining startup compact-effect question is no longer whether kind8lives on a separate editor/build class either, but which loaded kind-8rows actually carry the mutation-capable compact payloads - bundle-side inspection now grounds the startup collection itself:
sampled maps such as
War Effort.gmp,British Isles.gmp,Germany.gmp, andTexas Tea.gmpexpose non-direct0x4e99/0x4e9a/0x4e9bruntime-event collections, and the compact0x526f/0x4eb8/0x4eb9row family is now decoded into actual condition/grouped row summaries rather than opaque slices - the rehosted collection summary now makes the remaining control-lane gap explicit too:
it reports
records_with_trigger_kind,records_missing_trigger_kind,nondirect_compact_record_count,nondirect_compact_records_missing_trigger_kind, andcontrol_lane_notes; realWar Effort.gmpoutput currently shows24/24compact non-direct rows still missing decoded trigger kind, which narrows the next owner question to the non-row-body control lane rather than the compact row framing itself - the same per-map summary now surfaces the add-building subset directly too:
it reports
add_building_dispatch_strip_record_indexes,add_building_dispatch_strip_descriptor_labels, and the matchingadd_building_dispatch_strip_records_with_trigger_kind/add_building_dispatch_strip_records_missing_trigger_kindcounts, so inspected maps can now show whetherAdd Buildingrows are present and still null-trigger without a separate cluster pass - that add-building subset is structured one layer deeper now too: the per-map summary and the compact-dispatch cluster/counts reports both surface add-building signature families, condition-tuple families, and combined signature/condition clusters, so the remaining trigger-kind/source question can compare exact compact subfamilies instead of only raw descriptor hits
- the first concrete add-building cluster split is now visible too:
targeted map inspections show
Texas Tea.gmpcarrying a one-rowPort01cluster on signature familynondirect-ge1e-h0001-0007-0000-6d00-0200-p0000-0000-0000-ffffwith condition family[7:0], whileAlternate USA.gmpcarries repeated three-rowFarmGrain/Logging Campclusters onnondirect-ge34-h0002-0007-0004-73|75|7b|85...with condition family[7:4,42:0]; that narrows the remaining trigger-kind/source question to a small set of compact subfamilies rather than a single undifferentiated add-building carrier - the first exclusivity pass is positive too:
the widened cluster-counts report now surfaces, for each add-building
signature/condition cluster, the descriptor keys that share it plus the
non-add-building subset. Current targeted checks on
Texas Tea.gmpandAlternate USA.gmpshow those observed add-building clusters have empty non-add-building companions, which biases the next source/trigger-kind pass toward a distinct add-building compact subfamily rather than a generic dispatch carrier reused by variable-band rows - the descriptor-independent row-shape split is explicit now too:
the same cluster-counts surface reports normalized add-building row shapes.
Current targeted checks show
Texas Tea.gmpon the one-row shape[0:8:0], whileAlternate USA.gmpsits on the repeated three-row shape[0:8:-25,0:8:0,0:8:0]; that gives the next pass a simpler shape-level discriminator even when descriptor labels differ - the shipped-map corpus is checked in now too:
artifacts/exports/rt3-1.05/add-building-compact-dispatch-corpus.jsonrecords the full six-map add-building carrier set in bundled RT3 1.05 maps:Alternate USA,Chicago to New York,Louisiana,Pacific Coastal,Rhodes Unfinished, andTexas Tea. Across that corpus the normalized row-shape totals are only four families:[0:8:-25,0:8:0,0:8:0] = 4,[0:8:0,0:8:0,0:8:0,0:8:0] = 1,[0:8:0,0:8:0,0:8:0] = 1,[0:8:0] = 4. The accompanying signature/condition cluster totals now show the add-building carrier set is broader than the first two sampled maps but still small enough to treat as a bounded compact subfamily frontier rather than a diffuse generic event carrier. - the same probe now narrows the candidate runtime-effect set too:
it reports which decoded records already carry grouped opcodes in the grounded
0x00431b20dispatch strip; realWar Effort.gmpcurrently narrows that to record indexes[1, 9, 12, 13, 14, 15, 16, 17, 22], all through opcode4, with descriptor labelsGame Variable 1,Company Variable 1..4, andPlayer Variable 1, so the next pass can focus on that smaller subset instead of the full 24-row compact collection while avoiding the earlier overclaim that opcode4alone already proves a placed-structure mutation row - the sampled-map framing split is narrower now too:
targeted real-map inspections of
Texas Tea.gmp,British Isles.gmp, andGermany.gmpstill show their entire event-runtime collections as nondirect compact0x4e99/0x4e9a/0x4e9brows withrecords_with_trigger_kind = 0, even when grouped rows already reach the grounded0x00431b20dispatch strip. That means the direct full-record0x4e21/0x4e22parser path is not currently bridging[event+0x7ef]for the ordinary mutation-capable rows in those sampled maps. - the widened compact-cluster probe now makes that same gap first-class too:
runtime inspect-compact-event-dispatch-cluster <map-or-dir>now reports all dispatch-strip descriptor occurrences, theirtrigger_kind, payload family, and the aggregateddispatch_descriptor_occurrence_counts/dispatch_descriptor_map_countssummaries instead of only unknown descriptor ids. OnTexas Tea.gmp, the widened report now shows548 Add Building Port01,8 Economic Status, and43 Company Variable 1all arriving onreal_packed_nondirect_compact_v1rows withtrigger_kind = null, while the count summary reportsCompany Variable 1 = 4occurrences and the other two once each, so the next pass can work from a checked scalable probe rather than ad hocinspect-smpscrapes. - the scalable summary sibling is grounded too:
runtime inspect-compact-event-dispatch-cluster-counts <map-or-dir>reuses the same analysis but emits only the corpus-level count fields, so the next broader map-install pass no longer needs to wade through every occurrence payload just to compare descriptor or trigger-kind coverage; the same counts output now also carries an explicit add-building subset so the acquisition-side branch can compareAdd Buildingrecords and their still-missing trigger-kind coverage without grepping the full occurrence dump. - the installed-map totals are grounded now too:
current
rt3_105/mapscorpus gives41bundled maps,38maps with dispatch-strip rows, and318dispatch-strip records total, all onreal_packed_nondirect_compact_v1withdispatch_strip_records_with_trigger_kind = 0; the add-building subset inside that corpus is only10grouped occurrences across7recovered descriptor keys (Barracks,Bauxite Mine,FarmGrain,Furniture Factory,Logging Camp,Port01,Warehouse05), again all still missing trigger kind - the per-record trigger gate is explicit now too:
direct disassembly of
0x004323a0shows the service returns before dispatch unless one-shot latch[event+0x81f]is clear, mode byte[event+0x7ef]matches the selected trigger-kind argument from0x00432f40, and the compact chain root[event+0x00]is nonzero. The kind-8side path at0x00432ca1..0x00432cb0only calls0x00438710on already-live records carrying[event+0x7ef] == 8. So the remaining ordinary bundle question is no longer “does the service loop itself bypass the per-record trigger byte?”; it is which later owner, if any, materializes or retags[event+0x7ef]for the nondirect compact rows. - the post-load retagger is narrower than that missing owner too:
direct disassembly of
0x00442c30(called from0x00443a50at0x00444b50) shows a hardcoded scenario-name patch table over already-live records in0x0062be18/0x0062bae0. The checked cases mostly tweak modifier bytes[event+0x7f9/+0x7fa]or nested payload scalars on records that already carry concrete kinds such as7(Open Aus,The American),6(Test connections),5(Win - Gold), and1(Win - Silver/Win - Bronze). So the remaining trigger-kind frontier is no longer “maybe the name sweep bulk-materializes null - the startup kind-
8owner strip has a dedicated checked artifact now too:artifacts/exports/rt3-1.06/runtime-effect-kind8-startup-subgraph.{dot,md}seeds0x00444d92,0x00432f40,0x004323a0,0x00431b20, and0x00433130at depth5, giving the current ordinary bring-up path a reusable static-analysis surface instead of only scattered queue prose - that artifact narrows the immediate owner one step higher too:
the ordinary restore/service pair
0x00433130and0x00432f40now sit directly underworld_entry_transition_and_runtime_bringup0x00443a50in the checked subgraph, alongside0x004133b0placed-structure refresh,0x00421510region refresh, and the0x00433bd0/0x00434130/0x004354a0/0x00435603year-band/state refresh strip. That means the next static recovery pass can focus on0x00443a50ordering and preconditions instead of treating0x00444d92as a floating standalone caller. - there is now a smaller checked artifact for that owner too:
artifacts/exports/rt3-1.06/world-entry-bringup-refresh-subgraph.{dot,md}seeds only0x00443a50at depth3, giving a 343-node / 989-edge bringup-refresh surface that is easier to work from than the broader kind-8startup export when the immediate question is just ordering and neighboring refresh owners. - the saved-runtime-state loader is boxed in one step lower now too:
artifacts/exports/rt3-1.06/world-load-saved-runtime-state-subgraph.{dot,md}seeds0x00446d40at depth3and shows the loader directly reaches0x00433130 scenario_event_collection_refresh_runtime_records_from_packed_state, but not0x00432f40. That shifts the remaining ordinary kind-8question upward: the unresolved service-vs-restore ordering is now specifically inside0x00443a50, not inside the loader itself. - the bringup owner note now supplies the high-level ordering too:
current
function-map.csvnotes forworld_entry_transition_and_runtime_bringup0x00443a50already state that the tagged load phase reloads event runtime records through0x00433130, while the one-shot kind-8runtime-effect service through0x00432f40only runs much later in the final reactivation tail, after the candidate/region/year-band refresh strip and before shell-profile latch[0x006cec7c+0x97]is cleared. That means the remaining unknown is no longer restore-vs-service ordering in the abstract; it is which late bringup branch or retagger between those two points materializes the live kind-8records that carry the mutation-capable compact payloads. - the late retagger remains a prose-first seam:
a direct
0x00442c30subgraph export currently collapses to the seed node only, because the grounded function-map note carries the useful scenario-title and collection-mutation detail but not many mapped-address backrefs. So the post-load scenario-fixup branch should currently be treated as a manual-note recovery seam rather than one the generic subgraph exporter can answer by itself. - the relevant prose is checked in separately now too:
artifacts/exports/rt3-1.06/runtime-effect-kind8-late-bringup-note.mdextracts the current late-bringup facts for0x00446d40,0x00443a50,0x00442c30, and the explicitSP - GOLD/Labortrigger-kind rewrites, so the next pass can work from one bounded note instead of stitching the same ordering back together from the queue plus function-map prose. - the shipped add-building carrier corpus no longer supports the older filename-mismatch bias:
the checked report
artifacts/exports/rt3-1.05/add-building-map-title-hints.jsonnow scans the six bundled carrier maps inartifacts/exports/rt3-1.05/add-building-compact-dispatch-corpus.jsonagainst the grounded0x00442c30title set (Go West!,Germany,France,State of Germany,New Beginnings,Dutchlantis,Britain,New Zealand,South East Australia,Tex-Mex,Germantown,The American,Central Pacific,Orient Express). - the new title-hint probe narrows that evidence precisely:
five of the six shipped carrier maps now show at least one grounded retagger-title hit,
but only one map currently shows an adjacent embedded
.gmpreference plus grounded title and only one shows a same-stem pair.Louisiana.gmpcarriesDutchlantis.gmp/Dutchlantisat offset0x73d0with zero byte distance, while the other current carrier-map hits stay weaker (Alternate USA.gmplateGermany/France/Britain,Chicago to New York.gmplateGermany/France,Pacific Coastal.gmplaterCentral Pacific,Texas Tea.gmplaterGermany,Rhodes Unfinished.gmpno current hit). - that keeps the title-fixup branch alive but no longer as a broad filename-level explanation:
the evidence now supports a narrow “one strong
Louisiana -> Dutchlantisoverlap plus several weaker prose-only or late-string overlaps” reading rather than a clean one-to-one mapping from the shipped add-building carrier filenames to the grounded0x00442c30scenario-title set. - the direct runtime-event comparison narrows it further too:
the checked note
artifacts/exports/rt3-1.06/runtime-effect-kind8-title-overlap-note.mdshows thatLouisiana.gmpis the only carrier with a same-stemDutchlantis.gmp/Dutchlantispair, butDutchlantis.gmpitself still has no current add-building dispatch rows whileLouisiana.gmpkeeps the one-rowAdd Building Warehouse05cluster onnondirect-ge1e-h0001-0007-0000-5200-0200-p0000-0000-0000-ffff :: [7:0]. So the strongest current title overlap still does not reproduce the actual shipped add-building row family. - the post-reload candidate set is checked in now too:
artifacts/exports/rt3-1.06/runtime-effect-kind8-post-reload-candidates.mdextracts the currently plausible late0x00443a50branches between ordinary reload and final kind-8service, with the current bias explicitly shifted away from the known title-fixup branch and toward the Tier 2 candidate/world-state rebuild owners rather than the Tier 3 shell-progress/year-scalar refresh strip. - the Tier 2 owner strip is checked in separately now too:
artifacts/exports/rt3-1.06/runtime-effect-kind8-tier2-candidate-rebuild-subgraph.mdshows the current bounded rebuild band rooted at0x00412c10 / 0x00412bd0 / 0x00437737reaching candidate runtime-record rebuild0x00412d70 / 0x00412fb0, named-availability query/upsert0x00434ea0 / 0x00434f20, cargo-economy filter refresh0x0041eac0, port/warehouse recipe rebuild0x00435630, and only then the later world bringup / event-service neighborhood0x004384d0 / 0x00443a50 / 0x00432f40. - the strongest same-stem title pair has a Tier 2 availability note now too:
artifacts/exports/rt3-1.06/runtime-effect-kind8-tier2-named-availability-note.mdshowsLouisiana.gmpandDutchlantis.gmpshare the direct named-availability bit forWarehouse05(1/1), as well asPort01,Furniture Factory,FarmGrain, andLogging Camp; their current18named-availability differences fall elsewhere (Bauxite Mine,AluminumMill,Farm Corn,FarmCotton,FarmRice,FarmSugar, etc.). The same note now folds in two deeper grounded constraints too:0x00412d70does not consult the scenario-side recipe-book name at[state+0x0fe8], and0x00434f20writes only a boolean availability override bit. So the current Tier 2 question is no longer “isWarehouse05simply toggled differently?” or “is a recipe-book display name leaking through?” but “which broader candidate-state rebuild or latch sequencing difference above0x00437737 / 0x00412c10 / 0x00412bd0 / 0x00412d70 / 0x00412fb0leads to the shippedAdd Building Warehouse05row inLouisiana.gmp?” The broadercompare-candidate-tablesurface now reinforces the same point too:Louisiana.gmpversusDutchlantis.gmpstays on the samescenario-named-candidate-availability-tablesemantic family, still keepsWarehouse05 = 1/1, and moves the actualdifference_count = 43into the wider industry mix and zero-trailer-name set rather than a uniqueWarehouse05gate. - that sequencing question is checked in directly now too:
artifacts/exports/rt3-1.06/runtime-effect-kind8-tier2-sequencing-note.mdextracts the current late order around the explicit0x197checkpoint: the earlier0x00443ebcrecipe-runtime rebuild still sits before0x00412c10 / 0x00412bd0 / 0x00434130 / 0x00436af0, while the later0x00444ac1checkpoint runs after0x004354a0 / 0x00487de0and then falls through into0x00437737 -> 0x00434f20 -> 0x00412c10, with the separate recipe-runtime side re-entering0x00435630 -> 0x00412d70. That keeps the next recovery pass focused on Tier 2 sequencing interactions instead of title strings or directWarehouse05availability bits. - the strongest title-overlap pair now has a recipe-book note too:
artifacts/exports/rt3-1.06/runtime-effect-kind8-tier2-recipe-book-note.mdshowsLouisiana.gmpandDutchlantis.gmpdiverge heavily on the recipe-book surface even thoughWarehouse05stays1 / 1in the named-availability table.Louisiana.gmpis sparse there (currently onlybook00.line02stays nonzero), whileDutchlantis.gmpkeeps multiple later mixed lines and mode words. That shifts the current Tier 2 bias further toward the0x00435630 -> 0x00412d70rebuild side rather than the direct0x00437737 -> 0x00412c10availability side. The same note now also boxes in the same-condition-family counterexample:Louisiana.gmpandTexas Tea.gmpboth sit on[7:0], butLouisiana.gmpkeeps the one-rowWarehouse05cluster with onlybook00.line02 = 0x00080000, whileTexas Tea.gmpkeeps the one-rowPort01cluster with a broader four-book nonzero mode strip. So the current evidence no longer supports “shared[7:0]family implies one shared Tier 2 recipe/runtime shape.” - the bundled add-building carrier set now has a checked recipe-book corpus too:
artifacts/exports/rt3-1.05/add-building-carriers-recipe-book-scan.jsonshows the six carrier maps split into two recipe families:Alternate USA.gmpstands alone with the richer five-book nonzero mode strip, while the other five carrier maps fall into one broader family but still diverge sharply inside it. Among that five-map family,Louisiana.gmpis currently the sparsest nonzero profile (onlybook00.line02 = 0x00080000plus the pairedbook00token lanes), whileChicago to New York.gmp,Rhodes Unfinished.gmp, andTexas Tea.gmpeach keep broader multi-book nonzero mode strips andPacific Coastal.gmpkeeps supplied-token-only activity. That makesLouisiana.gmplook less like a generic carrier-map recipe pattern and more like a genuinely narrow Tier 2 recipe/runtime-record case. - the recipe/runtime owner strip is checked in separately now too:
artifacts/exports/rt3-1.06/runtime-effect-kind8-tier2-recipe-runtime-note.mdsummarizes the new subgraph rooted at0x00435630 / 0x00412d70 / 0x00412fb0. The current bounded shape is a coupled rebuild family rather than a one-way ladder:0x00435630re-enters0x00412d70,0x00412d70re-enters0x00435630plus0x00411ce0 / 0x00411ee0, and0x00412fb0re-enters0x004120b0 -> 0x00412d70 -> 0x00412ab0 -> 0x00412c10. That keeps the next pass focused on the internal sequencing and handoff across the coupled recipe/runtime/availability rebuild strip, not on one isolated helper. The same note now carries the first upstream feed-in difference too:compare-setup-payload-core Louisiana.gmp Dutchlantis.gmpalready differs onpayload_word_0x14(1870vs2025),payload_byte_0x20(0x3avs0xfd),payload_word_0x3b2(2vs1), and the candidate-header words (0xcdcdcdcdvs0x00000000). So the next pass can now work on both sides of the coupled Tier 2 strip: the upstream setup payload core and the downstream recipe/runtime rebuild loop. - the carrier-set setup-core comparison is checked in now too:
artifacts/exports/rt3-1.06/runtime-effect-kind8-tier2-setup-core-note.mdwidens that upstream comparison across all six bundled add-building carriers. It showsLouisiana.gmpis not unique onpayload_word_0x3b2(Chicago to New York.gmpalso has2) and showsLouisiana.gmpis unique among that six-map carrier subset on the candidate-header sentinel pair0xcdcdcdcd / 0xcdcdcdcd, whileAlternate USA.gmpstays separately unique on the recognizedrt3-105-map-container-v1header pair. The same note now widens further across all 41 bundledrt3_105maps and shows the candidate-header pair is not actuallyLouisiana-specific in the full corpus at all: nine maps share0xcdcdcdcd / 0xcdcdcdcd, matching the older atlas read that this looks like coarse scenario-family framing instead of a direct Tier 2 trigger. That trims the next upstream Tier 2 question again: focus on the more specific remaining setup-core combination (payload_word_0x14,payload_byte_0x20, plus the sparse recipe/runtime profile), not on the candidate-header class by itself. The same widened note now records that the full currentLouisiana.gmptuple (payload_word_0x14 = 1870,payload_byte_0x20 = 0x3a,payload_word_0x3b2 = 2,candidate_header = 0xcdcdcdcd / 0xcdcdcdcd) is still unique across the 41-map corpus even after the coarse header class is demoted, so the next pass should compare that tighter tuple to the sparse recipe/runtime family rather than reopening the broad header-pair question. The same note now also carries the grounded owner bridge for those compared setup-core fields. The early copy path is still0x00442400 -> 0x00502220 -> 0x0047be50, but the later reset or reactivation owners are now bounded too:0x00436d10and0x00443a50both reimport the staged subset[profile+0x77/+0xc5]before rerunning the same rebuild family that includes0x00435603,0x00435630,0x0041e970,0x00412bd0,0x00434130, and0x00436af0. That narrows the open question again:+0x14/+0x20now have one real bridge into the Tier 2 strip through[profile+0x77/+0xc5], while+0x3b2/+0x3bastill stop on the setup-panel threshold or scroll path. The next pass should therefore test whether the uniqueLouisiana.gmp+0x14/+0x20pair is enough to explain its Tier 2 runtime shape through that grounded bridge, or whether the sparse recipe/runtime side is still the more plausible differentiator. One adjacentcompare-setup-launch-payloadcheck now sharpens that too:Louisiana.gmpdoes not collapse into the nearest setup-core peers on the launch-token side either, but that band is still not part of the currently grounded Tier 2 bridge. So the next pass should keep launch tokens as supporting context while testing the already-grounded+0x14/+0x20 -> [profile+0x77/+0xc5]bridge against the sparse recipe/runtime family. The same widened setup-core note now shows the split inside that bridge too:payload_byte_0x20 = 0x3ais unique toLouisiana.gmpacross all 41 bundledrt3_105maps, whilepayload_word_0x14 = 1870has only one peer (Mexico). That makes the campaign/setup-byte side of the bridge the strongest remaining setup-core differentiator, with the year-word side a secondary companion rather than a full peer-group collapse. kinds”; it is the smaller set of scenario-specific records where that sweep explicitly writes[event+0x7ef]itself or a still-later owner does. - two explicit trigger-kind materializations are now grounded inside that retagger:
the
SP - GOLDbranch at0x00443526rewrites[event+0x7ef]from1 -> 5on live runtime-event id1when[world+0x66de]is set and the checked root payload is kind7with subtype byte5, while theLaborbranch at0x00443601rewrites[event+0x7ef]from0 -> 2on live runtime-event id0x0dwhen the same scenario flag is set and the checked0x3c -> 0x3dchild payload pair carries the matching negative scalar sentinel. - cross-map probing now gives a better static-analysis lead too:
British Isles.gmpshows no current0x00431b20dispatch-strip rows,Germany.gmpstays onGame Variable 1plusCompany Variable 3..4, whileTexas Tea.gmpaddsEconomic Statusand one still-unlabeled grouped descriptor id548; that makes descriptor548plus theopcode 8branch on record7the next concrete non-hook analysis target above the compact runtime-event loader - the checked-in function map now sharpens that
Texas Tea.gmpbranch too: opcode0x08in the grounded0x00431b20dispatch strip lands on0x00426d60 company_deactivate_and_clear_chairman_share_links, so the open question is whether grouped descriptor id548is the missing compact-event label for that destructive company-clear path or a neighboring unmapped id-space entry in the same branch family - the broader installed-map sweep narrows that question further:
across all
41bundled.gmpfiles in the currentrt3_105/mapsinstall, grouped descriptor id548currently appears only once, inTexas Tea.gmprecord7, withopcode 8,scalar 0, standalone condition tuple(7, subtype 0), and compact signature familynondirect-ge1e-h0001-0007-0000-6d00-0200-p0000-0000-0000-ffff - the same wider sweep also rules out the simplest alias theory:
the ordinary checked-in
Deactivate Companydescriptor13does appear in real map bundles, but only onopcode 1with scalar1inBritish Isles.gmp,Chicago to New York.gmp,East Coast, USA.gmp,Japan Trembles.gmp, andState of Germany.gmp; it does not appear on theopcode 8deactivation branch, so grouped descriptor id548is not just the obvious compact stand-in for ordinary descriptor13 - that compact opcode-
8cluster is now grounded as an artifact-boundary problem rather than a mysterious compact-only id family: direct binary inspection of the0x00610398EventEffects table shows the contiguous table does not stop at row519; it continues cleanly through row613, with the extractor-side sequential descriptor invariant still holding. The checked-in extractor and semantic catalog now cover the full614-row export instead of the old truncated520-row slice - that closes the earlier unlabeled cluster:
grouped descriptor ids
521,526,528,548, and563are now recovered asAdd Building FarmGrain,Add Building Furniture Factory,Add Building Logging Camp,Add Building Port01, andAdd Building Warehouse05respectively. The checked-inevent-effects-building-bindings.jsonnow carries the full descriptor-side candidate bridge across all111add-building rows (503..613) through the directdescriptor_id - 503mapping in0x00430270, while concrete candidate names remain grounded only for the stable RT3 1.05 live-catalog run0..66exposed by0x0041ede0and the checked candidate-table corpus - the earlier
label_id - 2000bridge for548and563is now known to be a false lead: those numeric collisions hit the special-condition label table (Disable Building Stations,Completely Disable Money-Related Things), but the extended EventEffects table proves the actual grouped descriptors are add-building slots, not special-condition verbs - the compact opcode-
8frontier therefore shifts: direct disassembly of0x00430270now shows that the add-building consumer does not branch on grouped opcode at all for descriptor strip503..613; it consumes the descriptor-derived candidate id, placement count byte0x11, center words0x12/0x14, and radius word0x16, clamps that radius to at least1, and retries randomized placements up to200times. The next static-analysis pass should therefore target the remaining span-field meaning and shell-owned placement-flow ownership on that strip, not more missing-label recovery: the descriptor-side candidate bridge is now checked in across503..613, and the honest remaining boundary is the missing non-hook name catalog for candidate ids67..110 - the new offline
BuildingTypessource report sharpens that missing name-catalog boundary too:runtime inspect-building-type-sources rt3_wineprefix/drive_c/rt3/Data/BuildingTypes artifacts/exports/rt3-1.06/event-effects-building-bindings.jsonnow reports77.bcafiles,200.btyfiles, and208canonical asset stems. Against the checked-in named add-building bindings it finds exactly43shared canonical stems,24binding-only stems (Port00..11andWarehouse00..11), and165broader asset-only stems. The numbered livePort00..11andWarehouse00..11names therefore collapse to generic asset stemsPortandWarehouseon disk, so theBuildingTypesdirectory is now grounded as a wider offline source catalog, but not yet as a direct second live candidate-name owner for descriptor-side ids67..110 - the local-runtime builder strip now reinforces that same boundary:
direct disassembly of
0x00418be0shows the broader placed-structure rebuild lane resolving its caller-supplied stem only through0x00416e20 indexed_collection_resolve_live_entry_id_by_stem_stringagainst the current live candidate collection, then projecting runtime scratch through0x00416ec0and0x00418610. So the broaderBuildingTypesasset pool is not yet a proven alternate live owner for descriptor-side add-building candidate ids; current non-hook evidence still routes stem resolution back through the live candidate collection that tops out at the contiguous named run0..66 - the shipped-map compact-dispatch corpus is narrower than the descriptor strip too:
runtime inspect-compact-event-dispatch-cluster-counts rt3_wineprefix/drive_c/rt3_105/mapsscans all41bundled maps and finds add-building dispatch occurrences only for descriptors506,507,521,526,528,548, and563. No bundled-map dispatch rows currently exercise descriptor ids570..613, so the back half of the widened add-building strip is now bounded as descriptor-grounded but latent in the shipped compact-event corpus - the concrete owner strip above that bundle is grounded now too:
0x00433060is the direct non-direct serializer loop that writes0x4e99/0x4e9a/0x4e9b, calls0x00430d70per live collection row, and sits beside the sibling0x00433130size/load family rather than behind an unknown blob writer - those non-direct rows still carry stable structural family ids in the inspection notes:
the row probe emits
compact signature family = nondirect-...keys alongside decoded grouped descriptors, so repeated compact families can still be compared across maps without scraping raw bytes - that moves the startup compact-effect blocker again:
the remaining question is no longer compact row framing, but which serialized/live rows in this
now-decoded non-direct bundle correlate to loaded trigger-kind
8rows and which of those can reach the placed-structure mutation opcodes under0x00431b20 - the
[site+0x27a]companion lane is grounded now too: it is a live signed scalar accumulator rather than a second owner-identity seam, with zero-init at0x0042125dand0x0040f793, accumulation at0x0040dfecand0x00426ad8, direct set on acquisition commit at0x004269e4, and negated clear at0x00426a44..0x00426a90 - the remaining owner-company question is therefore narrower than “find any replay seam”:
identify which non-transport persisted source family outside the currently bounded direct
allocator/finalize/store families, the save-side
0x00413440serializer, the load-side0x00413280cached-source bridge, the checked ordinary replay strip0x00444690 -> 0x004133b0 -> 0x0040ee10, and the already-bounded loaded runtime-effect lane0x00444d92 -> 0x00432f40(kind 8) -> 0x004323a0 -> 0x00431b20feed the tuple or companion restore calls that are sufficient to repopulate[site+0x276]for shellless acquisition; the remaining runtime-effect subquestion is now which loaded kind-8rows can carry the placed-structure mutation opcodes rather than whether kind8is synthetic - the ordinary restore-vs-finalize split is tighter now too:
direct disassembly shows
0x00413280stream-loading0x36b1/0x36b2/0x36b3through per-entry vtable slot+0x40, and0x00444690simply enters0x004133b0before continuing into later grid/world refresh owners; neither ordinary bring-up owner re-enters0x004134d0 / 0x0040f6d0 / 0x0040ef10for already-restored rows. The positive[site+0x276]store at0x0040f5d4therefore remains grounded only on explicit tuple/create paths, so the next non-hook pass should look for a non-transport persisted tuple family or a later ordinary restore owner rather than another generic replay scan. - the loaded runtime-effect lane is narrower now too:
real map inspections already show decoded
0x00431b20grouped-descriptor content inside the ordinary non-direct bundle without any recovered trigger-kind metadata in the current surface:Texas Tea.gmpreportsAdd Building Port01,Alternate USA.gmpreportsAdd Building FarmGrainandAdd Building Logging Camp, andWar Effort.gmpreports only variable bands, while all three currently summarizetrigger_kinds_present = []andrecords_with_trigger_kind = 0. That means the next non-hook pass on this branch is no longer “do ordinary loaded rows reach0x00431b20?”; it is “where is trigger-kind represented or bypassed for those already-decoded ordinary compact rows?” - the adjacent control-lane inheritance path is narrower now too:
direct disassembly shows
0x0042db20loading only the linked0x1e/0x28row bodies from0x4e9a, while the separate deep-copy helper0x0042e050copies text bands plus the full[event+0x7ee..0x7fa]block. Current caller census shows that deep-copy seam reached from the event-editor duplication path at0x004dba23, not from the ordinary0x00433130restore strip. So the next non-hook question is not “maybe load inherits trigger kind through 0x0042e050”; it is which other ordinary owner, if any, seeds[event+0x7ef]for these already-decoded non-direct rows. - the first non-editor positive control-lane writer is bounded away from restore too:
direct disassembly now shows
0x00430b50allocating a fresh live runtime-effect row through0x00432ea0 -> 0x0042d5a0, zero-initializing the full[event+0x7ee..0x7fa]block, then seeding[event+0x7ef]to2or3plus adjacent control bytes. That builder is reached from the0x004323a0follow-on service strip at0x0043232e, not from0x00433130restore. So the remaining ordinary-owner question is narrower again: neither deep-copy inheritance nor the first positive control-lane builder currently belongs to the non-direct0x4e9aload path. - the remaining non-editor control-lane mutators are bounded away from restore too:
direct disassembly of
0x00443200..0x004436e3shows a name-driven live retagger sweep over the already-materialized event collection0x0062be18, matching text bands through0x005a57cfagainst scenario strings such asNew Beginnings,Chicago to New York,The American, andLabor, then mutating[event+0x7ef/+0x7f9/+0x7fa]on those live records. That is now a grounded post-load live-maintenance seam, not the missing ordinary0x4e9acontrol-lane owner. - the positive-path caller census is effectively boxed in now too:
direct
0x0040ef10callers are the create-side pair0x00403ef3 / 0x00404489, the transport tuple pair0x0046f073 / 0x004707ff, and the already-ruled-down live controller0x005098eb; direct0x004134d0callers are the create-side pair0x00403ed5 / 0x0040446b, the transport-side pair0x0046efbf / 0x0047074b, the counted transport builders0x00472bef / 0x00472d03, plus live/controller callers0x00422bb4and0x00508fd1. That means the still-missing owner seam is no longer “find another obvious constructor/finalize caller”; it is specifically a non-transport persisted tuple family or a later ordinary restore owner outside this boxed caller set. - the second is narrower in the same way:
the checked-in
0x36b1/0x36b2/0x36b3triplet seam and the0x4a9d/0x4a3a/0x4a3bside-buffer seam still do not serialize[site+0x310/+0x338/+0x360]directly, so the known save seams are ruled down even though a later restore family is still open - the dynamic side-buffer load seam is ruled down too:
0x00481430 -> 0x0047d8e0repopulates the route-entry list, three byte arrays, five proximity buckets, and the trailing scratch band from stream, but still does not claim the cached tri-lane - the tri-lane now has one real runtime accumulator too:
direct local binary inspection shows
0x0040c9a0folding[site+0x310/+0x338/+0x360]into[site+0x2b4/+0x2b8/+0x2bc], mirroring the nine-dword side array rooted at[site+0x2e4], and then clearing the tri-lane - caller census keeps that tri-lane role narrow:
0x0040c9a0only appears under the broad live-collection sweep0x0040a3a1..0x0040a4d3, while0x0040cac0stays under weighted scoring or evaluation families such as0x0040fcc0..0x0040fe28and0x00422c62..0x00422d3c - direct local binary inspection now rules out the old “no live writer” hypothesis too:
0x0040d4aa/0x0040d4b0add into[site+0x310],0x0041114a7/0x004111572add into[site+0x310],0x0041114b7/0x004111582add into[site+0x338], and0x0041118aa/0x0041118f4add into[site+0x360] - the writer family is now bounded one level higher:
0x0040d450is a small owner-company-aware producer over[site+0x276],0x00455810/0x00455800/0x0044ad60, and0x00436590ids0x66/0x68, while0x00410b30..0x004118f4is a broader candidate-processing loop walking0xbc-stride rows, gating them through0x00412560, and then accumulating both stack temporaries and direct writes into[site+0x310/+0x338/+0x360] 0x00412560is now bounded as the shared candidate/admissibility gate above that loop: it checks candidate-row fields+0x20/+0x22/+0x24/+0x28/+0x2c/+0x44, world date/flags via0x006cec78, and the candidate table0x0062ba8c- the cached source/candidate bridge is now grounded on stream load too:
direct local binary inspection shows
0x00413280dispatching per-entry vtable slot+0x40on the0x005c8c50specialization table, that slot resolving to0x0040ce60, and0x0040ce60immediately re-entering0x0040cd70plus0x0045c150 - the third hypothesis is now a cached source/candidate bridge question, not just a raw
[site+0x04]selector question:0x0040cd70seeds[site+0x3cc/+0x3d0]from0x62b2fc / 0x62b268,0x0040cee0resolves cached candidate id[site+0x3d0]back into the live candidate pool, and0x004138f0already counts live placed structures by that cached candidate id - the checked-in consumer side is tighter too:
0x0040dc40already consumes live owner company[site+0x276], company stat-family0x2329/0x0d, candidate field[candidate+0x22], and the projected-cell validation strip0x00417840 -> 0x004197e0, then commits the linked-site mutation through0x0040d1f0 / 0x00480710 / 0x0045b160 / 0x0045b9b0 / 0x00418be0 / 0x0040cd70 - the periodic-company trace now carries the tri-lane live-service family as structured fields,
not just prose:
- site cached tri-lane status =
live_writer_family_grounded_semantics_and_persisted_inputs_missing - tri-lane live service status =
candidate_gate_and_live_writer_family_grounded_exact_formula_and_persisted_inputs_missing - tri-lane live owners include:
0x0040d450,0x00410b30..0x004118f4,0x00412560,0x0040c9a0, and the downstream0x0040fcc0..0x0040fe28 / 0x00422c62..0x00422d3cconsumers - tri-lane gate fields include:
candidate-row fields
+0x20/+0x22/+0x24/+0x28/+0x2c/+0x44, world date/flags via0x006cec78, candidate table0x0062ba8c, and caller-provided subject vtable slot+0x80plus owner-present flag[site+0x246] - tri-lane writer roles are now split explicitly between:
one owner-company-aware local scorer
0x0040d450, the broader0x00410b30..0x004118f4candidate loop, and the later0x0040c9a0accumulator/reset - direct caller families are now split explicitly too:
0x0040fb70is the small wrapper into0x00412560,0x004b4052 / 0x004b46ecare collection-wide0x0040fb70census callers over0x0062b26c,0x00401633is an acquisition-adjacent0x0040d540caller that immediately feeds company stat-family0x2329/0x0d,0x0044b81ais an owner-company-aware0x0040d540caller that also reaches0x0040cb70and news/event id0x65, and0x004b70f5 / 0x004b7979are broader sibling0x0040d540callers routing through0x004337a0and downstream0x00540120 / 0x00518140 - formula input lanes are now structured too:
0x00412560uses candidate-row time window+0x20/+0x22, owner/absence booleans+0x24/+0x28, list count+0x2c, and membership list+0x44, while the wider0x00410b30..0x004118f4loop consumes candidate-row+0x18/+0x1c/+0x2a/+0x2c/+0x44, subject latch[site+0x78c], personality byte[site+0x391], world lanes[world+0x0d],[world+0x4afb],[world+0x4caa], owner-company scalar[company+0x0d5d], and the local cache bands[site+0x2e8],[site+0x310],[site+0x338],[site+0x360]
- site cached tri-lane status =
- the direct writer census now narrows the remaining owner-company question too:
grounded
[site+0x276]writes cluster under create-side and live mutation families such as0x004269b0 / 0x00426a10, the create-side0x0040ef10 / 0x0040f6d0strip, and the bulk reassignment families0x00426dce..0x00426ea1and0x00430040..0x004300d6, not under the known0x00444690 -> 0x004133b0 -> 0x0040ee10replay strip - the same write side is now grounded one level higher too:
direct local control-flow reconstruction shows those families hanging under the grouped opcode
dispatcher
0x00431b20over0x0061039c, with opcodes0x04..0x07dispatching to0x00430040, opcodes0x08/0x10..0x13dispatching to0x00426d60, and opcodes0x0d/0x16dispatching to0x0042fc90 0x0042fc90itself is now ruled onto the live mutation side too: it iterates the live placed-structure collection0x0062b26c, filters rows through0x0040c990, optional owner-company match[site+0x276], and row vtable slot+0x70, which keeps that branch on the live application side rather than replay- the focused save-side triplet probe is now available directly too:
runtime inspect-save-placed-structure-triplets <save.gms>dumps the grounded0x36b1/0x55f1/0x55f2/0x55f3rows without the wider periodic trace wrapper - real-save output from that focused probe rules the checked-in triplet seam down further:
on grounded
p.gms, all 2026 rows keep policy trailing word0x0101, the profile side is dominated by companion byte0x00with statusunset(1885rows) plus farm-growth buckets (138rows), and the only nonzero companion-byte residue is3TextileMillrows - the create-side family is grounded separately too:
city-connection direct placement already reaches
0x00402cb0 -> 0x00403ed5/0x0040446b -> 0x004134d0 -> 0x0040ef10as the shared constructor/finalize strip for newly created site rows - so the acquisition blocker is no longer “is there any real consumer family above these
lanes?”, “how do new placed structures finalize?”, “is
[site+0x2a4]still missing?”, or “does the tri-lane even have live writers?”; it is now specifically the persisted inputs and exact shellless service semantics above the grounded live tri-lane scorer family, plus the save-native or replay owner that populates[site+0x276]for already-restored rows before shellless acquisition runs - direct disassembly now shows the generic base constructor
0x0052edf0clearing base state through0x0052ecd0and then writing[this+0x04]from caller arg1 0x00455b70is the concrete placed-structure specialization constructor feeding0x0052edf0, with arg3as the primary selector and arg1as fallback0x00455c62is the direct in-body call from that specialization constructor into0x0052edf00x00456100is a local wrapper that duplicates its first incoming arg across the selector/fallback bundle before calling0x00455b700x00456072is a fixed0x55f2callback that forwards three local dwords plus unit scalars into0x00455b700x0045c36e / 0x0045da65 / 0x0045e0fcare concrete callers of0x00456100, repeatedly allocating0x23arows, forwarding stack-backed buffers, and using the same default scalar lanes- the
0x00456100 -> 0x00455b70wrapper mapping is now grounded far enough to say the sampled selector-source lanes are[owner+0x23e]at0x0045c36e, literal zero at0x0045da65, and[ebp+0x08]at0x0045e0fc - direct disassembly now shows
0x0045c150as a save-backed loader for[owner+0x23e/+0x242]: it zeroes those fields, runs the shared tagged loader0x00455fc0, reads tagged payload0x5dc1, and copies the two recovered lanes into[owner+0x23e/+0x242]before0x0045c310 -> 0x0045c36elater feeds[owner+0x23e]into0x00456100 - the local linked-site helper neighborhood now reaches that same owner strip directly:
0x0040ceabcalls0x0045c150, and0x0040d1a1jumps straight into0x0045c310 0x00485819is one typed placed-structure caller of0x0052edf0through the generic three-arg wrapper0x005306400x00490a79is one chooser-side caller of0x00455b70, feeding literal selector0x005cfd74with fallback seed0x005c87a8- the periodic-company trace now also surfaces the save-side
0x5dc1payload/status summaries already parsed from the0x36b1triplet seam; on groundedp.gmsthe payload dword lane is almost entirely unique while the status kind staysunset, and the dominant adjacent payload delta is0x00000780across1908steps; groundedq.gmsshows the same dominant adjacent delta0x00000780across1868steps - the same trace now also promotes the one-byte
0x5dc1post-secondary discriminator explicitly: groundedp.gmsshows dominant companion byte0x00on2023rows with only30x01rows, and groundedq.gmsshows dominant companion byte0x00on2043rows with only140x01rows; the old “pre-footer padding” hypothesis is now better understood as a separate post-secondary discriminator byte after the repeated secondary payload string, not as the[owner+0x242]field itself So the next owner question is no longer “what does the acquisition branch do?” or “which post- load owner replays linked-site refresh?” but “which concrete0x00455b70caller family applies to the live site rows, and which persisted lane becomes the selector bundle that ultimately seeds[site+0x04]?” The current strongest restore-family hypothesis is now the save-backed0x0045c150 -> 0x0045c310 -> 0x0045c36e -> 0x00456100 -> 0x00455b70strip.
-
Make the next static/rehost slice the peer-site rebuild seam above persistence, not another save scan:
- treat
0x00444690 -> 0x004133b0 -> 0x0040e450 / 0x0040ee10 -> 0x0040edf6 -> 0x00480710as the checked-in bring-up replay path for existing saves - treat
0x004160aa -> 0x0040ee10as the checked-in recurring runtime maintenance entry into the same linked-peer refresh strip - treat
0x0052edf0as the checked-in field owner for[site+0x04] - treat
0x00455b70as the checked-in specialization constructor that maps selector/fallback bundle lanes into that field owner - distinguish which
0x00455b70caller family actually seeds the live site rows before0x00420030 / 0x00420280 / 0x0047efe0 / 0x0047fd50consume the resulting selector, with the current first target being the save-backed0x0045c150 -> 0x0045c310 -> 0x0045c36e -> 0x00456100family - use the structured periodic-company trace selector fields now checked into
inspect-periodic-company-service-trace: owner strip0x0045c150 -> 0x0045c310 -> 0x0045c36e -> 0x00456100 -> 0x00455b70, persisted tag0x5dc1, selector lane[owner+0x23e], class-identity statusgrounded_direct_local_helper_strip, and helper linkage0x0040ceab -> 0x0045c150/0x0040d1a1 -> 0x0045c310/0x0040cd70 seeds [site+0x3cc/+0x3d0] from 0x62b2fc / 0x62b268 - use the new
0x5dc1payload/status summary in the same trace as negative evidence too: the currentprofile_payload_dwordlane behaves like a save-invariant monotone ladder (dominant adjacent delta 0x780on bothp.gmsandq.gms) rather than a compact selector family, so the next peer-site slice should treat that raw dword as a likely allocator/offset lane until a stronger selector interpretation appears - use the new
0x5dc1post-secondary-byte summary in the same trace as positive evidence: that byte is overwhelmingly0x00with a tiny0x01residue on both grounded saves, so the next peer-site slice should treat it as a real typed discriminator after the restored[owner+0x23e]/[owner+0x242]payload strings and ask which later0x004014b0/0x00406050predicates actually consume it - use the new nonzero-companion name-pair summary in the same trace as a narrower acquisition
clue too: grounded
p.gmsexposes onlyTextileMill/TextileMill x3, while groundedq.gmsexposesTextileMill x9,Toolndie x2, and singletonBrewery,MeatPackingPlant, andMunitionsFactoryrows, so the next peer-site slice should treat nonzero post-secondary-byte rows as a likely industry-like subset rather than a generic placed-structure mode split - keep the already-grounded
0x0047fd50class gate separate from that byte: direct disassembly now says0x0047fd50resolves the linked peer through[site+0x04], reads candidate class byte[candidate+0x8c], and returns true only for0/1/2while rejecting3/4and above, so the next slice should not conflate the post-secondary byte with the existing station-or-transit gate - treat the peer-site selector seam itself as grounded enough for planning purposes
- use the new structured restore/runtime field split in the same trace:
restore subset
[site+0x3cc/+0x3d0]plus0x5dc1-backed[owner+0x23e/+0x242], and runtime subset[site+0x04],[site+0x2a8],[peer+0x08] - use the new structured reconstruction status in the same trace:
restore_subset_and_bring_up_reconstruct_runtime_subset - treat the runtime subset as reconstructible from the restore subset plus the already-grounded bring-up path for planning purposes
- use the new structured acquisition input families in the same trace:
region subset
[region+0x276], region vtable+0x80byte-0x32,[region+0x3d5],[region+0x310/+0x338/+0x360],[region+0x2a4]; peer subset center-cell token gate,[site+0x04],[site+0x2a8],[peer+0x08], linked-region status; company subset stat-family reader0x2329/0x0d, chairman byte[profile+0x291], company byte[company+0x5b]plus indexed lane[company+0x67 + 12*0x0042a0e0()], and the company-root argument passed into0x0040d540 / 0x00455f60 - use the new shellless-readiness split in the same trace:
runtime-backed families
peer-site restore subset plus bring-up reconstruction, company stat-family
0x2329/0x0d, chairman byte[profile+0x291], and save-native company/chairman identity; remaining owner gaps[region+0x276],[region+0x2a4],[region+0x310/+0x338/+0x360], and the stable region class/type discriminator consumed through0x0040d360 - use the new per-lane region status split in the same trace:
[region+0x276]already has a grounded runtime producer at0x00422100and is now only an ordinary-save restore gap;[region+0x2a4]currently has no region-class runtime writer in the binary scan and now looks payload/restore-owned;[region+0x310/+0x338/+0x360]has an exact raw delta reader at0x0040cac0and likewise no direct region-class runtime writer in the current binary scan, so it now also looks payload/restore-owned;0x0040d360is now exact as[owner_vtable+0x80+0x32] == 4, so the remaining gap there is only the save-native projection of that byte - make the next periodic-company slice about the smaller shellless-simulation question instead:
which later save payload or restore owner rehydrates the remaining region-side
0x004014b0inputs[region+0x2a4]and[region+0x310/+0x338/+0x360]once the peer/company inputs are treated as grounded and[region+0x276]is treated as a producer-known ordinary-save restore gap
- treat
-
Use the higher-layer probes as the standard entry point for the current blocked frontier instead of generic save scans:
runtime inspect-periodic-company-service-trace <save.gms>,runtime inspect-region-service-trace <save.gms>, andruntime inspect-infrastructure-asset-trace <save.gms>. -
Follow the new higher-layer probe outputs instead of another blind save scan:
runtime inspect-infrastructure-asset-trace <save.gms>now shows that the0x38a5infrastructure-asset seam is grounded and the old alias hypothesis is disproved onq.gms, so the next placed-structure slice should target the consumer mapping above that seam rather than more collection discovery; the same trace now also carries atlas-backed candidate consumers (0x0048a1e0,0x0048dd50,0x00490a3c,0x004559d0,0x00455870,0x00455930,0x00448a70/0x00493660/0x0048b660,0x004133b0) plus bridge/tunnel/track-cap name-family counts, so the next pass can start at those concrete owners instead of the whole placed-structure family. -
Rehost or bound the next concrete
Infrastructureconsumer above0x38a5instead of treating “consumer mapping missing” as a stop: start with the checked-in candidate strip0x0048a1e0,0x0048dd50,0x00490a3c,0x004559d0,0x00455870,0x00455930,0x00448a70/0x00493660/0x0048b660,0x004133b0, and narrow that list to the first true shellless owner that consumes the side-buffer seam. The infrastructure trace now ranks the current best hypothesis as the child attach/rebuild strip (0x0048a1e0,0x0048dd50,0x00490a3c), with the serializer/load companions next and the route/local-runtime follow-on family explicitly secondary. -
For that top-ranked infrastructure strip, treat the next pass as three exact owner questions rather than a general “map the consumer” task: whether the
0x38a5compact-prefix/name-pair groups feed the first-child triplet clone lane, the caller-supplied payload-stem lane, or only a later route/local-runtime refresh lane; which child fields or grouped rows absorb the side-buffer payload before0x00448a70/0x00493660/0x0048b660become relevant; and, now that the direct route-entry bridge helpers over[this+0x206/+0x20a/+0x20e]are grounded, which later route/local-runtime owner still carries the remaining mixed exact classes once cached primary-child slot[this+0x248]is demoted to child-list cache/cleanup state. -
Targeted disassembly now tightens that strip further:
0x0048a1e0clones the first child through0x0052e880/0x0052e720, destroys the prior child, seeds a literalInfrastructurechild through0x00455b70with payload seed0x005c87a8, and republishes the two sampled bands through0x0052e8b0/0x00530720after attaching through0x005395d0; the non-clone branch attaches through0x0053a5d0. So the next unknown is no longer whether this strip owns the child/rebuild seam, but which0x38a5compact-prefix groups drive the clone-vs-payload choice. -
The outer rebuild owner is tighter now too:
0x0048dcf0reads a child count plus optional primary-child ordinal from the tagged stream through0x00531150, zeroes[this+0x08], dispatches each fresh child through0x00455a50 -> vtable slot +0x40, culls ordinals above5, and restores cached primary-child slot[this+0x248]from the saved ordinal. That means the child/rebuild loop is consuming an already-materialized child stream rather than parsing the0x38a5compact-prefix seam directly. -
The upstream handoff is grounded now too:
0x00493be0is the tagged collection load owner over0x38a5/0x38a6/0x38a7, and it feeds each live infrastructure record straight into0x0048dcf0after restoring one shared owner-local dword into the0x90/0x94lane. So the remaining infrastructure question is no longer whether0x38a5reaches the child-stream restore path at all. Direct disassembly now also shows0x00518140resolving a non-direct live entry by tombstone bitset and then returning the first dword of a12-byte row from[collection+0x3c], while0x00518680loads that non-direct table family before0x00493be0starts iterating, and0x00493be0itself now reads as an ordinal-to-live-id-to-payload-pointer walk through0x00518380(ordinal, 0)then0x00518140(live_id). So the next infrastructure question is no longer “which row owns the payload pointer?”. Direct disassembly of0x005181f0/0x00518260now also treats those12-byte rows as a live-entry directory with(payload pointer, previous live id, next live id), so the next infrastructure question is only how those payload streams align with the embedded0x55f1name-pair groups and compact-prefix regimes, and which tagged values inside each payload stream become the child count, optional primary-child ordinal, and per-child callback sequence that0x0048dcf0consumes. Direct disassembly now also shows the shared child payload callback0x00455fc0opening0x55f1 -> 0x55f2 -> 0x55f3, parsing three0x55f1strings through0x00531380, seeding the child through0x00455b70, and then dispatching slot+0x48; the widened save-side probe currently sees0third0x55f1strings on groundedq.gms. That now looks less like a probe failure and more like an ordinary fallback path, because direct disassembly of0x00455b70stores the three payload strings into[this+0x206/+0x20a/+0x20e], defaulting the second lane through a fixed literal when absent and defaulting the third lane back to the first string when absent. So the next pass should stay focused on payload-stream grouping and tagged value roles, not on rediscovering a missing third-string encoding. -
The child loader identity is tighter now too: local
.rdataat0x005cfd00proves theInfrastructurechild vtable uses the shared tagged callback strip directly, with+0x40 = 0x00455fc0,+0x44 = 0x004559d0,+0x48 = 0x00455870, and+0x4c = 0x00455930. Direct disassembly of0x004559d0then shows the concrete write-side chain for the child payload: write0x55f1, serialize string lanes[this+0x206/+0x20a/+0x20e], write0x55f2, dispatch slot+0x4c, run0x0052ec50, and close0x55f3. So the remaining infrastructure frontier is no longer “which slot does0x00455a40jump to?”; it is which chooser/seed values reach those string lanes and the trailing footer path. -
That source side is narrower now too: direct disassembly shows the paired chooser siblings calling
0x00490960directly beside0x0048a340/0x0048f4c0/0x00490200, and0x00490960copies selector fields into the child object ([this+0x219],[this+0x251], bit0x20in[this+0x24c], and[this+0x226]), allocates a fresh0x23aInfrastructurechild, seeds it through0x00455b70with caller-supplied stem input plus fixed literalInfrastructureat0x005cfd74, attaches it through0x005395d0, seeds position lanes through0x00539530/0x0053a5b0, and can cache it as primary child in[this+0x248]. The remaining problem is no longer “where do the child payload lanes come from?” but “which chooser branches feed0x00490960which caller stem and selector tuple for each grounded save-side class?”. -
One direct branch is grounded now too: the repeated chooser calls at
0x004a2eba/0x004a30f9/0x004a339call feed0x00490960with mode arg0x0aand stem arg0x005cb138 = BallastCapDT_Cap.3dp, which means they bypass the selector-copy block at0x004909e2and go straight into fresh child allocation/seeding. So the remaining source-side mapping problem is no longer generic BallastCap coverage; it is the other constructor branches, especially the ones with mode< 4that actually populate the selector-byte copy block. -
The broader mode family is grounded now too. A wider static callsite sweep shows:
- mode
0x0bwith fixedTrackCapDT_Cap.3dp/TrackCapST_Cap.3dp - mode
0x03withOverpassST_section.3dp - mode
0x02with decoded tunnel table stems plus zero-stem fallbacks - mode
0x01with decoded bridge table stems plus zero-stem fallbacks
The current grounded
q.gmsname corpus now also maps directly onto most of those families:BridgeSTWood_Section.3dp -> mode 0x01,TunnelSTBrick_* -> mode 0x02,BallastCapST_Cap.3dp -> mode 0x0a, andTrackCapST_Cap.3dp -> mode 0x0b, with onlyOverpassstill static-only in the current save corpus.So the remaining infrastructure question is no longer “what does
0x00490960build?” or even “which family is this name row?” but “how do the surviving compact-prefix regimes subdivide those already-mapped families, especially inside bridge mode0x01and track-cap mode0x0b?”. - mode
-
The direct route-side bridge is grounded now too:
0x0048e140/0x0048e160/0x0048e180simply resolve[this+0x206/+0x20a/+0x20e]through live route collection0x006cfca8, and0x0048e1a0compares those resolved peers against[this+0x202]. The neighboring0x0048ed30path is now also narrower: it only tears down child list[this+0x08], clearing cached primary-child slot[this+0x248]when needed, so[this+0x248]is no longer the first route bridge to chase. -
The later route/local-runtime follow-on family is tighter now too:
0x00448a70is a world-overlay helper over[world+0x15e1/+0x162d],0x00493660is a counter-plus-companion- region follow-on keyed by[child+0x218],[child+0x226],[child+0x44], and0x0048dcb0,0x0048b660is a presentation-color/style owner over[child+0x216/+0x218/+0x226/+0x44]and bit0x40in[child+0x201], and0x0048e2c0/0x0048e330/0x0048e3c0now read as flag / route- tracker / region-test helpers rather than hidden payload decoders. So the next infrastructure slice should stay focused on the remaining mixed exact compact-prefix classes and earlier child-stream semantics, not on rediscovering the already-bounded presentation owners. -
The new probe correlation now makes that residual even more concrete: on grounded
q.gms, the dominant mixed0x0001/0xffclass splits asbridge:62 / track_cap:21 / tunnel:19, while the pure0x0002/0xffclass is all bridge and the pure0x0055/0x00class is all ballast-cap. So the next infrastructure slice should focus on subdividing the mixed one-child0x0001/0xffclass rather than revisiting the already-grounded pure classes. -
The sibling
0x00490200is tighter now too: it reads the seeded lanes[this+0x206/+0x20a/+0x20e]back through the live route collection at0x006cfca8, compares them against the current owner using[this+0x216/+0x218/+0x201/+0x202], and behaves like a route/link comparator layered above the same child payload lanes that0x004559d0later serializes. So the next infrastructure pass should treat0x00490960as the source owner and0x00490200as a consumer of the same seeded lanes, not as separate unexplained seams. -
The smaller helper
0x00490a3cis narrower now too: it allocates one literalInfrastructurechild, seeds it through0x00455b70with caller-provided stem input, attaches it through0x005395d0, seeds position lanes through0x00539530/0x0053a5b0, and optionally caches it as the primary child. So the next concrete infrastructure question is which upstream owner maps the direct0x38a5rows into the child count, primary-child ordinal, and per-child payload callbacks consumed by0x0048dcf0, and which restored child fields still retain those embedded name-pair semantics before route/local-runtime follow-ons take over. -
The save-side
0x38a5probe is now tighter at the payload-envelope level too: groundedq.gmsshows all138embedded0x55f1rows already live inside complete0x55f1 -> 0x55f2 -> 0x55f3envelopes before the next name row, every embedded0x55f2chunk is the fixed0x1abytes that0x00455fc0expects, and the dominant embedded0x55f3payload-to-next-name span is the short0x06-byte form across72rows. So the next infrastructure pass should stop asking whether the shared tagged callback sequence is present at all and instead decode the short0x55f3payload role and its relation to the compact-prefix regimes and primary-child restore path. -
That short trailing lane is tighter now too: direct disassembly of
0x0052ebd0/0x0052ec50shows the post-+0x48helper pair loading and serializing two single-byte lanes that fold into bits0x20and0x40of[this+0x20], and the save-side probe now shows the dominant0x06-byte rows all carrying the same grounded flag pair0x00/0x00onq.gms. So the next concrete infrastructure question is no longer “is there a short trailing flag lane?”; it is how the compact-prefix regimes and those flag-byte pairs feed the child-count / primary-child restore state above0x0048dcf0. -
The fixed
0x55f2lane is tighter now too: direct disassembly of0x00455870/0x00455930shows the+0x48/+0x4cstrip loading and serializing sixu32lanes from the fixed0x1achunk, forwarding them through0x00530720and0x0052e8b0. Groundedq.gmsprobes now show every embedded0x55f2row using the same trailing word0x0101while those six dword lanes vary by asset row. So the next infrastructure question is no longer whether0x55f2is a fixed-format child lane; it is which of those two dword triplets correspond to child-count / primary-child restore state and which only seed published anchor or position bands. -
That split is tighter now too: direct disassembly of
0x00530720/0x0052e8b0shows the first fixed0x55f2triplet landing in[this+0x1e2/+0x1e6/+0x1ea]and the second in[this+0x4b/+0x4f/+0x53], with the companion setter also forcing bit0x02. So the next infrastructure question is no longer whether the fixed0x55f2row hides the child count or primary-child ordinal at all; those outer-header values now have to live outside the fixed row, most likely in the surrounding payload-stream header or compact-prefix regime above0x0048dcf0. -
The outer prelude itself is tighter now too: direct disassembly of
0x0048dcf0shows it reading oneu16child count through0x00531150, zeroing[this+0x08], and conditionally reading one saved primary-child byte before the per-child callback loop runs. Groundedq.gmsbytes now also show the first0x38a6record starting immediately after the shared owner-local dword withchild_count = 1,saved_primary_child_byte = 0xff, and the first child0x55f1opening at offset+0x3. So the next infrastructure question is no longer “what kind of values are we looking for above the fixed rows?”; it is the narrower partitioning problem of how the observed0x55f3-to-next-0x55f1gaps divide between the two0x52ebd0flag bytes and the next record’su16 + byteprelude. -
The widened prelude correlation closes part of that partitioning too: grounded
q.gmsrows with a0x03post-profile gap now collapse cleanly to the next-record prelude pattern0x0001 / 0xffacross17/17rows, while the zero-length class is a separate grounded outlier with dominant pattern0x0055 / 0x00across18/18rows and the0x06class remains the only large mixed frontier. So the next infrastructure slice should focus on classifying the mixed0x06rows, not on rediscovering the already-grounded pure-prelude0x03rows. -
That
0x06class is now narrower too: groundedq.gmsshows the dominant short-span class asBridgeSTWood_Section.3dp / Infrastructurewith compact prefix0xff000000 / 0x0001 / 0xffacross62/72rows and dominant prelude candidate0x0001 / 0xffacross63/72rows. So the next infrastructure slice should stop treating the0x06class as uniformly ambiguous and focus on the smaller outlier families inside that class, especially the zero-likeBallastCap-style rows and any remaining non-0x0001 / 0xffprelude candidates. -
The exact compact-prefix classes are explicit across the whole prelude now too:
0xff0000ff / 0x0002 / 0xffis a pure bridge class,0xff000000 / {0x0001,0x0002} / 0xffare pure bridge classes,0xf3010100 / 0x0055 / 0x00is a pureBallastCapclass, and0x0005d368 / 0x0001 / 0xffis a pure one-rowTrackCapclass. -
That sharpens the remaining infrastructure unknowns considerably: the only mixed exact compact-prefix classes left on grounded
q.gmsare0x000055f3 / 0x0001 / 0xffand0xff0000ff / 0x0001 / 0xff. -
The current
0x000055f3 / 0x0001 / 0xffclass is tunnel-dominant:TunnelSTBrick_Section.3dp / Infrastructure:13,TunnelSTBrick_Cap.3dp / Infrastructure:4,TrackCapST_Cap.3dp / Infrastructure:0in the exact-prefix correlation, with all17rows staying on prior profile span0x03. -
The current
0xff0000ff / 0x0001 / 0xffclass isTrackCap-dominant but still carries4tunnel rows:TrackCapST_Cap.3dp / Infrastructure:18,TunnelSTBrick_Cap.3dp / Infrastructure:2,TunnelSTBrick_Section.3dp / Infrastructure:2. Its rows are spread across many spans rather than one dominant restore span. -
Cross-save
q.gms/p.gmstraces sharpen that split further without changing it:0x000055f3 / 0x0001 / 0xffstays on prelude0x0001 / 0xff, fixed short-flag pair0x01 / 0x00, and fixed prior profile span0x03in both saves, while0xff0000ff / 0x0001 / 0xffstays on prelude0x0001 / 0xff, fixed short-flag pair0x00 / 0x00, and widely scattered prior profile spans in both saves. -
Direct consumers of those footer bits are grounded now too:
0x00528d90only admits the child when the explicit caller override is set, the surrounding global override byte[owner+0x3692]is set, or bit0x20in[child+0x20]is set; the sibling loop0x00529730only takes the later0x530280follow-on when bit0x40in[child+0x20]is set. -
That footer-bit consumer strip is tied to a broader higher-layer owner family now too:
0x005295f0..0x005297b7repopulates candidate cells through0x00533ba0, walks candidate child lists through0x00556ef0/0x00556f00, and honors the same controller mode byte[owner+0x3692]that the atlas already places under the world-window presentation dispatcher. -
The neighboring helpers tighten that owner family further: atlas-backed
0x00533ba0is the nearby-presentation cell-table helper under the layout/presenter strip, direct disassembly shows0x00548da0walking layout list root[layout+0x2593], and direct disassembly of0x0054bab0mutates layout slots[layout+0x2637/+0x263b/+0x2643]. -
That means the remaining infrastructure question is no longer both footer bytes. It is specifically why the stable
0x000055f3 / 0x0001 / 0xfftunnel family sets the first footer byte / bit-0x20admission gate while the sparse0xff0000ff / 0x0001 / 0xffoutlier class clears it, inside that layout/presentation owner family rather than at the serializer layer. -
Source-side constructor analysis is narrower now too.
0x00490960takes:- mode at stack arg 1
- stem at stack arg 2
- args 3/4 into
0x539530 - arg 5 into
0x53a5b0 - arg 10 as the primary-child cache gate for
[this+0x248] - args 7/8/9 into the selector-copy block for
[this+0x219],[this+0x251], and bit0x20in[this+0x24c]whenmode < 4
-
That already separates the remaining mixed classes:
- fixed
TrackCapmode0x0bcallers at0x0048ed01/0x0048ed20push arg7/arg8/arg9 as-1 / -1 / 0and bypass selector-copy entirely becausemode >= 4 - tunnel mode
0x02callers at0x004a17eb / 0x004a1995 / 0x004a1b44 / 0x004a1b7d / 0x004a1b95necessarily flow through selector-copy becausemode < 4, with arg8 fixed at1, arg9 fixed at0, and only arg7 varying through a branch-local one-bit register
- fixed
-
So the next infrastructure slice should stop treating the remaining frontier as a generic “mixed 0x06/outlier” problem and instead target the owning constructor/restore semantics for those two exact mixed compact-prefix classes, especially how tunnel arg7 and the fixed
TrackCapno-selector bundle both still collapse into the observed mixed save-side prefixes. -
The candidate-pattern classes are now explicit across the whole stream too:
0x0055 / 0x00is a pureBallastCapST_Cap.3dp / Infrastructureclass across18rows, always preceded by a zero-length prior profile span, while0x0002 / 0xffis a pureBridgeSTWood_Section.3dp / Infrastructureclass across18rows with dominant prior profile span0x06(10rows). So the next infrastructure pass should split its owner questions: treat0x0055 / 0x00as aBallastCap-specific boundary artifact class, and treat0x0002 / 0xffas the grounded save-side bridge-specific two-child candidate class above0x0048a1e0/0x0048dcf0, with the remaining unknown narrowed to the upstream chooser that emits that class before the attach/rebuild path runs. -
That upstream chooser is grounded now too as paired siblings: direct disassembly shows
0x004a2c80routing theDTfamily and0x004a34e0routing theSTfamily, with both repeatedly calling0x0048a1e0, branching on[this+0x226], selector bytes[this+0x219]/[this+0x251], bit0x20in[this+0x24c], and lookup tables0x621a44..0x621a9c, then routing follow-on through0x0048a340/0x0048f4c0/0x00490200/0x00490960. So the remaining infrastructure question is no longer “is there an upstream chooser?” but “how do the save-side classes select theDTversusSTchooser sibling, and then which lookup-table families inside that sibling map to the grounded0x0002 / 0xffbridge class and the0x0055 / 0x00BallastCap class?”. -
Those lookup tables are decoded now too:
0x621a44/0x621a54feedBridgeSTcaps/sections,0x621a64feedsTunnelSTcap/section variants,0x621a74/0x621a84feedBridgeDTcaps/sections, and0x621a94feedsTunnelDTvariants, while fixed literals0x5cb138/0x5cb150areBallastCapDT/STand0x5cb168/0x5cb180areOverpassDT/ST. So the remaining infrastructure question is no longer table discovery; it is the selector-byte mapping from[this+0x219]/[this+0x251]/[this+0x252]onto those decoded families and then onto the grounded0x38a5prefix classes. -
The top-level chooser meaning is grounded now too: within those paired DT/ST siblings,
[this+0x226]==1routes the bridge families,[this+0x226]==2routes the tunnel families, and[this+0x226]==3routes the overpass/ballast family, while bit0x20in[this+0x24c]selects the cap-oriented side over the section-oriented side. So the remaining infrastructure selector problem is below that top-level split: the exact[this+0x219]/[this+0x251]values that choose the decoded family entries and how those values surface in the save-side0x38a5classes. -
Those material selectors are grounded now too: within the bridge branch,
[this+0x219]selectssteel,stone,suspension, orwood, with value2taking the special suspension-cap path through[this+0x252]; within the tunnel branch,[this+0x251]selectsbrickversusconcrete, while bit0x20chooses cap versus section by switching between the base and+0x8table entry families. So the remaining infrastructure selector problem is no longer “what do these bytes mean?” but “how do those already-grounded selector values surface in the save-side0x38a5classes, especially the0x0002 / 0xffbridge class and the0x0055 / 0x00BallastCap class?”. -
The exact setter seam is grounded now too: direct disassembly of
0x0048a340shows its dword argument writing[this+0x226], its next two byte arguments writing[this+0x219]and[this+0x251], and its final byte argument toggling bit0x20in[this+0x24c]. So the remaining infrastructure selector problem is no longer about hidden intermediate state; it is specifically how those already-grounded setter values are serialized or rebuilt into the save-side0x38a5prefix classes. -
One selector byte is partly grounded now too: when
[this+0x219]==2, the chooser jump tables stop using the general bridge families and instead route[this+0x252]through fixedBridgeDT/BridgeSTsuspension-cap literals forR10,L10,12,14,16, and18. So the remaining infrastructure selector problem is mostly[this+0x219]/[this+0x251]family choice plus the exact save-side class mapping for the BallastCap branch. -
The current real-save corpus also narrows the active side further: grounded
q.gms,p.gms,g.gms, andnom.gmsonly exposeST-family side-buffer names, while classicrt3/saves in this workspace currently expose no0x38a5side-buffer seam at all. So the save-driven part of the next infrastructure slice should assume it is exercising theSTchooser sibling directly, withDTstill grounded statically but not yet exercised by the current save corpus. -
Reconstruct the save-side region record body on top of the newly corrected non-direct tagged region seam (
0x5209/0x520a/0x520b, stride hint0x06,Marker09record stems) now that the0x55f3payload is known to be fully consumed by the embedded profile collection on grounded real saves: the remaining blocker is no longer a hidden trailing payload tail, but finding the separate save-owner seam for the pending bonus lane[region+0x276], completion latch[region+0x302], one-shot notice latch[region+0x316], severity/source lane[region+0x25e], and any stable region-id or class discriminator that can drive shellless city-connection service. The newly grounded queue-node probe for the atlas-backed kind-7notice records is a negative result onq.gms,p.gms, andAutosave.gms, so the next region pass should not assume that the transient[world+0x66a6]queue family is persisted in ordinary saves; the region trace now also carries the concrete queued/service owners (0x00422100,0x004337c0,0x00437c00,0x004c7520,0x004358d0,0x00438710,0x00420030/0x00420280,0x0047efe0) so the next pass can focus on the missing saved latches and stable region id/class rather than on rediscovering the outer service family. -
Rehost or bound the next concrete region owner above the missing latches instead of treating the absent persisted queue as a stop: start with the checked-in owner strip
0x00422100,0x004337c0,0x00437c00,0x004c7520,0x004358d0,0x00438710,0x00420030/0x00420280,0x0047efe0, and reduce it to the first true save-owned or rebuild owner that can explain[region+0x25e/+0x276/+0x302/+0x316]plus a stable region id/class. The region trace now ranks the current best hypothesis as the pending bonus service owner (0x004358d0) plus the peer/linkage strip (0x00420030/0x00420280,0x0047efe0), with the transient producer/queue family explicitly secondary and the queued kind-7modal dispatch kept as shell-adjacent reference only. -
For that top-ranked region strip, treat the next pass as three exact owner questions too: which restore seam re-seeds
[region+0x25e]and clears[region+0x302/+0x316]before the grounded0x00422100 -> 0x004358d0producer/consumer cycle runs again, which stable region id or class discriminator survives save/load strongly enough to drive0x004358d0, and how far the grounded city-connection peer/linkage helpers (0x00420030/0x00420280,0x0047efe0) can be reused directly before the transient queued-notice family matters again. -
Targeted disassembly now tightens that strip too:
0x004358d0calls0x00420030twice plus0x00420280, then resolves the linked company through0x0047efe0, posts company stat slot4on success, and stamps[region+0x302]or[region+0x316]while clearing[region+0x276].0x00420030itself now reads as the real peer gate over collection0x006cec20, combining0x0042b2d0, the optional company filter through0x0047efe0, the station-or-transit gate0x0047fd50, and the status branch0x0047de00 -> 0x0040c990;0x00420280is the same scan returning the first matching site id. So the remaining unknown is the persisted latch/id seam, not the live peer/service logic. -
The producer half is grounded now too:
0x00422100filters for class-0regions with[region+0x276]==0and[region+0x302]==0, rejects already-connected pairs through0x00420030(1,1,0,0), chooses one eligible candidate, buckets severity/source lane[region+0x25e]against the three checked thresholds, writes the resulting amount to[region+0x276], and appends the kind-7queued notice through0x004337c0. That means the remaining region gap is now explicitly the upstream restore seam for[region+0x25e]and the completion/fallback latch clear, not either side of the producer/consumer service pair. -
The severity/source lane itself is narrower now too:
0x004cc930is a selected-region editor helper that writes[region+0x25a]and[region+0x25e]together from one integer input, while0x00438150and0x00442cc0are fixed-region global reseed/clamp owners over collection0x0062bae0that adjust the same mirrored pair for hardcoded region ids. So the remaining region restore question is no longer “what does[region+0x25e]mean?” but “which load/reseed seam restores the mirrored severity pair before the producer runs?” -
Two more direct-hit writer bands are now explicitly ruled out too:
0x0043a5a0is a separate constructor under vtable root0x005ca078that zeroes its own[this+0x302/+0x316]fields during local object setup, and0x0045c460/0x0045c8xxis a separate vtable-0x005cb5e8helper family whose[this+0x316]is a child-array pointer serialized through0x61a9/0x61aa/0x61ab. So those offset-collision classes should stay out of the remaining region restore search. -
The direct writer census is tighter now too: the other apparent
0x302/0x316writer bands (0x0043dd45,0x0043de19,0x0043e0a7,0x0043f5bc) all hang off that same non-region0x005ca078family through helpers0x0043af60and0x0043b030. So the only grounded region-owned literal writes left are the constructor0x00421200plus the producer/consumer pair0x00422100and0x004358d0, which means the remaining region seam should now be treated as an indirect restore/rebuild path rather than another direct offset writer hunt. -
The later post-load per-region sweep is narrowed too: in the broader
0x00444887restore strip, the follow-on loop at0x00444b90dispatches0x00420560over each live region, but that helper only zeroes and recomputes[region+0x312]from the embedded profile collection[region+0x37f]/[region+0x383]and lazily seeds the year-driven[region+0x317/+0x31b]band through0x00420350. It still does not touch[region+0x276/+0x302/+0x316], so that whole follow-on branch should stay out of the remaining latch-restore search too. -
The checked-in constructor owner
0x00421200world_region_construct_entry_with_id_class_and_default_marker09_profile_seednow also grounds the initialization side of this family: it clears[region+0x276],[region+0x302],[region+0x316], and neighboring cached bands at construction time while seeding[region+0x25a/+0x25e] = 100.0fand[region+0x31b] = 1.0f. That means the remaining queue item is specifically post-construction restore or rebuild of the same latches, not their basic field identity. -
The next restore-side target is explicit now too: the checked-in function map already grounds
0x00421510as the tagged region-collection load owner that dispatches each live region through vtable slot+0x40, and0x0041f5c0as the per-record load slot that reloads the tagged payload through0x00455fc0before rebuilding profile collection[region+0x37f]. So the next region pass should ask whether[region+0x276/+0x302/+0x316]are restored directly inside that payload load or rebuilt immediately after it, rather than treating “restore seam” as a generic unknown. -
Direct disassembly now closes that callback identity too:
0x0041f590/0x0041f5b0prove the world-region vtable root is0x005c9a28, so the0x00455fc0dispatch at slot+0x48lands on0x00455870and the serializer sibling at+0x4clands on0x00455930. Those two callbacks only restore and serialize two helper-local three-lane scalar bands:0x00455870reads six dwords through0x00531150and forwards them to0x00530720 -> [helper+0x1e2/+0x1e6/+0x1ea]and0x0052e8b0 -> [helper+0x4b/+0x4f/+0x53], while0x00455930writes that same pair back through0x00531030; they still do not touch acquisition-side lanes[region+0x2a4]or[region+0x310/+0x338/+0x360], and they still do not touch[region+0x276/+0x302/+0x316]. That means the remaining region restore target is now the later owner that rebuilds those latches or the separate tagged body seam that persists them. -
The save-side region payload probe is wider now too: the checked-in
region_record_tripletssurface no longer stops at raw pre-name prefix bytes and now also emits structured prefix dword candidates per record, and the fixed0x55f2policy chunk now also carries structured reserved dword candidates instead of raw integers only. That gives the next region payload pass a direct way to compare both opaque payload bands against the remaining acquisition-side lane shapes instead of redoing raw hex inspection by hand. -
Grounded real-save output now narrows that new probe two steps further: on both
p.gmsandq.gms, every decoded region triplet currently still haspre_name_prefix_len = 0, an emptypre_name_prefix_dword_candidatesvector, andfixed 0x55f2 policy reserved dwords are nonzero on 0 of 145 decoded region records. So the remaining acquisition-side payload target does not appear to live in either the pre-0x55f1prefix band or the fixed0x55f2reserved dword band on grounded ordinary saves. That shifts the next region payload-comparison pass onto later body seams, not back onto the prefix or fixed-policy chunk. -
The new fixed-row run candidate probe pushes that same payload search one seam later, but it is not grounded yet: on both
p.gmsandq.gmsit finds high-signal counted runs keyed to the live region count145with fixed row stride0x29before the tagged0x5209/0x520a/0x520bregion collection, yet the top candidate offset is not stable (p.gms = 0xd13239,q.gms = 0xd2d7d7). So the next region payload pass should compare candidate lane-shape fingerprints across saves rather than promoting any one absolute pre-header offset as the fixed restore seam. -
The new two-save
runtime compare-region-fixed-row-runs <left.gms> <right.gms>report now does that comparison directly. Current result:p.gmsvsq.gmshas0exact shape overlaps, and the only coarse family overlaps are lower-ranked fully mixed candidates where every dword lane is still simultaneously small-nonzero and partially-zero. That means the fixed-row scan remains useful negative evidence, but it is still not honest to promote as the missing region restore seam; the next region pass should stay focused on later restore owners or a more selective row family discriminator above this mixed pre-header corpus. -
The rest of
0x00455fc0is ruled down further now too: after the+0x48callback it only runs0x0052ebd0, which reads two one-byte generic flags through0x531150into base object bytes[this+0x20],[this+0x8d],[this+0x5c..+0x61],[this+0x1ee],[this+0x1fa], and[this+0x3e], and then it opens0x55f3only for span accounting before returning. So the missing region latches are not hiding in the remainder of0x00455fc0either. -
The next restore-handoff strip is explicit now too: the region trace now carries a dedicated later-global-restore hypothesis for
0x00444887, because that continuation is the first caller checkpoint above the ruled-down0x00421510 -> 0x0041f5c0 -> 0x00455fc0path. It immediately advances into0x00487c20territory refresh and0x0040b5d0support refresh, then later re-enters the per-region follow-on loop at0x00444b90 -> 0x00420560. Current disassembly keeps0x00420560on the profile/class-mix scalar side only: it recomputes[region+0x312]from the embedded profile collection and linked placed-structure class mix, then seeds the year-driven[region+0x317/+0x31b]band through0x00420350. So the next region pass should treat the broader0x00444887continuation as the live handoff seam when chasing[region+0x2a4]and[region+0x310/+0x338/+0x360], not as just another generic restore note. -
That same continuation is slightly less symmetric now too: the atlas-backed territory side at
0x00487c20currently restores only collection metadata/live ids and still uses no-op per-entry load/save callbacks0x00487670/0x00487680, so the next pass should bias more heavily toward support refresh0x0040b5d0or the later region-local rebuild than toward territory payload as the hidden source of[region+0x2a4]and[region+0x310/+0x338/+0x360]. -
The support side is less opaque now too: the same atlas already bounds
0x0040b5d0above support collection0x0062b244, whose grounded live owners maintain goose-entry counters, neighboring world support lanes[world+0x4c9a/+0x4c9e/+0x4ca6/+0x4caa], and selected support-entry state rather than an obvious per-region acquisition latch family. So the next pass should now bias even more toward the later region-local rebuild beneath the0x00444887continuation, while still keeping0x0040b5d0as a weaker adjacent prerequisite rather than treating it as the primary hidden owner. -
The next owner family is narrower now too: the checked-in shell-load subgraph and function map place
world_load_saved_runtime_state_bundle0x00446d40directly ahead of the post-load generation pipeline0x004384d0, which is now the first explicit non-hook owner family above the ruled-down0x00444887continuation. The current grounded stage order is concrete enough to split the next static pass:319refreshes route entries, auxiliary route trackers, and then the placed-structure replay strip0x004133b0;320runs the region-owned building setup strip0x00421c20 -> 0x004235c0; and321runs the economy-seeding burst0x00437b20plus the cached region summary refresher0x00423d30. That means the next region closure pass should chase this0x004384d0handoff family directly instead of treating the remaining[region+0x2a4]/[region+0x310/+0x338/+0x360]gap as a generic continuation below0x00444887. -
The
319lane is the strongest bridge inside that family:0x004133b0drains queued placed-structure ids through0x0040e450, sweeps every live site through0x0040ee10, and then reaches the already-grounded linked-site follow-on0x00480710. The320and321lanes are still explicit but weaker:0x00421c20 -> 0x004235c0stays on region-side demand balancing and structure placement, while0x00437b20 -> 0x00423d30only refreshes the cached category band[region+0x27a/+0x27e/+0x282/+0x286]. So the next non-hook region work should start from the post-load319placed-structure replay seam and only then revisit the narrower region-side320/321branches if the exact field bridge is still missing. -
The later restore-side region owners are narrowed further now too: the
0x00421ce0 -> 0x0041fb00 -> 0x00421730sweep is class-0raster/id rebuild,0x004881b0is a companion region-set cell-count rebuild over[region+0x3d/+0x41],0x00487de0is a border-segment emitter over the world raster, and0x0044c4b0is the center-cell bit-0x10reseed pass. So the next region slice should stop revisiting those later owners and stay focused on the still- missing save-owned latch / severity / stable-id seam. -
The later class-
0batch at0x00438087is narrowed now too: it walks live class-0regions through0x0062bae0, rescales the mirrored severity/source pair[region+0x25a/+0x25e]from the current value using world-side factors, clamps the result, and then hands the collection to0x00421c20; it still does not touch[region+0x276/+0x302/+0x316]. -
Its follow-on
0x00421c20is bounded as a parameterized region-collection helper rather than a latch owner: it loops the same collection with caller-supplied scalar arguments, dispatches each record through0x004235c0, and does not write the pending/completion/one-shot lanes directly. -
The subsequent world follow-ons are narrower too:
0x00437b20only stages a world-side reentry guard at[world+0x46c38], iterates the live region collection through0x00423d30, and tails into0x00434d40, while0x00437220rebuilds broader world byte-set state around[world+0x66be/+0x69db]and other global collections. Those later branches should stay out of the remaining region latch-restore search too. -
The widened real-save region trace rules out one more false lead too: on grounded saves the
0x55f2fixed-policy chunk keeps all three reserved dwords at0x00000000and the trailing word at invariant0x0001, so that fixed chunk is not currently carrying the missing latch or stable region id/class discriminator either. -
Reconstruct the save-side placed-structure collection body on top of the newly grounded
0x36b1/0x36b2/0x36b3header seam so the blocked city-connection / linked-transit branch can stop depending on atlas-only placed-structure and local-runtime refresh notes, especially the semantics of the now-grounded compact0x55f3footer dword/status lane and the newly exposed separate tagged side-buffer seam candidates, especially the exact0x38a5/0x38a6/0x38a7family whose compact6-byte header pattern and embedded placed-structure-style0x55f1name rows now make it the grounded placed-structure dynamic side-buffer owner; the remaining blocker is semantic closure of the compact prefix regimes now summarized in real saves as seven stable patterns onq.gmsand their relation to the embedded0x55f1/0x55f2/0x55f3row subset, especially now that the side-buffer name-pair corpus is proven disjoint from the grounded0x36b1triplet name-pair corpus onq.gms; the next pass should treat0x38a5as a separate infrastructure-asset owner seam, not a compact alias over the triplet records. -
Extend shellless clock advancement so more periodic-company service branches consume owned runtime time state directly instead of only the explicit periodic service command.
-
Keep widening selected-year world-owner state only when a full owning reader/rebuild family is grounded strongly enough to avoid one-off leaf guesses.
In Progress
- Widen shellless simulation from explicit service commands toward “advance the runtime clock and the simulation-owned services advance with it.”
Queued
- Rehost additional periodic finance/service branches that still depend on frozen world restore fields instead of advanced runtime-owned time state.
- Reduce remaining company/chairman save-native gaps that still block standalone simulation quality, especially controller-kind closure and any deeper finance/state fields that still rely on conservative defaults.
- Rehost bounded live economy owner state beyond selector/catalog/override surfaces when a concrete non-shell-owned seam is grounded.
- Keep tightening shell-owned parity families only when that directly supports later rehosting.
Blocked
- Full shell/dialog ownership remains intentionally out of scope.
- Any candidate slice that requires guessing rather than rehosting owning state or real reader/setter families stays blocked until a better owner seam is grounded.
- Missing owner seams or dispatch mappings are not by themselves a stop condition when a targeted static-mapping pass or a higher-layer rehosted trace/evaluator surface can still narrow them further without guessing.
- The city-connection announcement / linked-transit roster-maintenance branch is still blocked at the record-body level, not the collection-identity level: the runtime now has a corrected non-direct tagged region seam, a tagged train header-plus-directory seam, and a tagged placed-structure header seam, but it does not yet reconstruct the live region or placed-structure record bodies those service owners need.
Recently Done
rrt-runtimenow exposes three higher-layer probe surfaces and matching CLI inspectors:runtime inspect-periodic-company-service-trace <save.gms>,runtime inspect-region-service-trace <save.gms>, andruntime inspect-infrastructure-asset-trace <save.gms>. These reports separate grounded outer owner inputs, runnable shellless branches, and explicit missing owner seams instead of leaving the current city-connection / linked-transit frontier as an opaque blocker.- Those same probes now also sharpen the next queue choice on grounded real saves: the periodic
company outer owner shows annual finance and route-preference override as grounded shellless
branches while city-connection and linked-transit stay blocked on region/infrastructure owner
seams; the region trace keeps the queued kind-
7notice family on the transient side; and the infrastructure trace now makes the0x38a5consumer-mapping blocker first-class after disproving any alias to the0x36b1placed-structure triplet corpus. - The infrastructure trace now also carries one small atlas-backed static-analysis layer above that
seam: bridge/tunnel/track-cap name-family counts from the real side-buffer corpus plus concrete
consumer candidates rooted at the
Infrastructurechild attach/rebuild/serializer helpers and the later route/local-runtime follow-on owners. That means the next0x38a5pass can be targeted static mapping instead of another generic scan. - The same
0x38a5probe now also exports payload-envelope summaries directly instead of only flat name rows: policy/profile tag presence, dominant embedded0x55f2and0x55f3span lengths, and sampled row boundaries. That means the next pass can decode the short embedded0x55f3payload lane on top of already grounded row boundaries instead of rediscovering the same envelopes again. - That same probe now also exports the grounded short trailing flag-byte pair summary for the
dominant
0x06-byte rows, while the infrastructure trace carries the matching0x0052ebd0/0x0052ec50helper seam. That means the next pass can aim directly at how those flags combine with compact-prefix regimes and primary-child restore state instead of treating the short lane as anonymous payload. - That same probe now also exports the fixed
0x55f2six-dword policy samples and the grounded shared trailing word0x0101for all embedded rows, while the infrastructure trace carries the matching0x00455870/0x00455930helper seam. That means the next pass can focus on which of the two restored dword triplets actually bridge into child-count / primary-child state instead of rediscovering the fixed0x55f2row shape. - The infrastructure trace now also carries the deeper
0x00530720/0x0052e8b0bridge, so the next pass can focus on the outer payload-stream header and compact-prefix regimes instead of revisiting the fixed0x55f2six-dword row. - That same trace now also ranks those consumers into explicit hypotheses, so the next infrastructure pass should start with the attach/rebuild strip instead of treating all candidate owners as equally likely.
- The region trace now also carries the corresponding atlas-backed candidate owner strip above the
unresolved save latches, so the region frontier is now explicitly “missing persisted owner seam
for
[region+0x25e/+0x276/+0x302/+0x316]and stable region id/class,” not “unknown service family.” - That same trace now also ranks those owners into explicit hypotheses, so the next region pass should start with the pending bonus service owner and peer/linkage strip rather than the queued modal family.
- Save inspection now splits the shared
0x5209/0x520a/0x520bfamily correctly: the smaller direct0x1d5collection is the live train family and now exposes a live-entry directory rooted at metadata dword16, while the actual region family is the larger non-directMarker09collection with live_id/count0x96/0x91; the tagged placed-structure header (0x36b1/0x36b2/0x36b3) remains grounded alongside them. - That same corrected region seam now also exposes repeated
0x55f1/0x55f2/0x55f3serialized record triplets with len-prefixed names plus fixed policy/profile chunk lengths, so the next city-connection pass can target the real record envelope instead of another blind scan. - The fixed
0x55f2row inside each region triplet is now decoded structurally as three leadingf32lanes, three reservedu32lanes, and a trailingu16word, so the next save-region slice can focus on the larger0x55f3payload where the pending/completion/one-shot latches are most likely to live. - The larger
0x55f3payload now also exposes an embedded direct profile collection with grounded live-id/count headers, fixed0x22-byte rows, profile names, and trailing weight scalars, so the remaining region work is on the unresolved payload fields above that collection rather than on the profile subcollection itself. - Grounded real saves now also show that the region-side
0x55f3payload has zero trailing padding beyond that embedded profile collection, so the remaining region blocker has shifted from “find the hidden tail inside this payload” to “find the separate owner seam that backs the runtime latches the city-connection branch still reads.” - Save inspection now also exports a generic low-tag unclassified collection scan over plausible indexed-collection headers, now through a lightweight CLI path that does not require full bundle inspection and now filters out candidates nested inside already-grounded company/chairman/train/ region/placed-structure spans.
- That lightweight scan now also narrows the real save frontier to a much smaller stable candidate
set across
p.gms,q.gms, andAutosave.gms, with the exact0x38a5/0x38a6/0x38a7family standing out as the strongest current placed-structure dynamic side-buffer candidate. - The
0x38a5/0x38a6/0x38a7family now also has a first dedicated parser scaffold inrrt-runtime: its synthetic regression is grounded, its header shape is checked in, and the parser now expects a compact 6-byte prefix plus separator byte before an embedded placed-structure-style dual-name row rather than treating the family as anonymous residue. - That exact
0x38a5/0x38a6/0x38a7parser is now also wired through a lightweight CLI inspector and the normal save company/chairman analysis output, and grounded real saves now prove the same seam directly:q.gmsexposeslive_record_count=3865, prefix0x0005d368/0x0001/0xff, and first embedded namesTrackCapST_Cap.3dp/Infrastructure;p.gmsexposes the same structure withlive_record_count=2467. - That same direct
0x38a5probe now also samples multiple embedded name rows with their preceding compact prefixes, showing that the seam is not a one-off wrapper: groundedq.gmssamples include repeatedTunnelSTBrick_*names underInfrastructurewith compact leading dwords like0x000055f3and0xff0000ff, so the next pass can target the semantics of those compact prefix patterns instead of hunting the owner seam itself. - The
0x38a5probe now also summarizes all embedded compact prefix regimes instead of just the first few samples: groundedq.gmscurrently exposes seven stable pattern groups across 138 embedded rows, with the dominant0xff000000/0x0001/0xffgroup carrying 62 bridge-section rows, the0xff0000ff/0x0001/0xffand0xf3010100/0x0055/0x00groups concentrating cap-like rows, and a smaller0x000055f3/0x0001/0xffgroup carrying 17 tunnel-section / cap rows whose leading dword matches the embedded placed-structure profile tag directly. - The save-company/chairman analysis path now also compares that grounded
0x38a5side-buffer name-pair corpus against the grounded0x36b1triplet name-pair corpus directly; onq.gmsthe overlap is currently zero (0/138decoded side-buffer rows and0/5unique side-buffer name pairs match the 56-triplet corpus), which shifts the remaining placed-structure work away from “prove these are aliases” toward “find how the separate infrastructure-asset owner seam is consumed by city-connection / linked-transit service.” - Save inspection now also has a dedicated probe for the atlas-backed region queued-notice node
shape (
payload seed 0x005c87a8, kind7, zero promotion latch, region id, amount,-1/-1tails), plus a matching lightweight CLI inspector. Groundedq.gms,p.gms, andAutosave.gmsall currently returnnull, which is useful negative evidence: the transient region notice queue is not obviously persisted in these ordinary saves. - The placed-structure tagged save stream now also exposes repeated
0x55f1/0x55f2/0x55f3triplets with dual name stems, a fixed five-f32policy row, and a compact0x5dc1...0x5dc2footer carrying one rawu32payload lane plus one livei32status lane, so the remaining placed-structure work is semantic closure of those owned fields rather than envelope discovery. - That compact placed-structure
i32footer status lane is now partially grounded as owned semantics too: observed non-farm families stay at-1, while farm families use nonnegative0..11buckets that are now exported as farm growth-stage indices instead of opaque raw status residue. - Stepped calendar progression now also refreshes save-world owner time fields, including packed year, packed tuple words, absolute counter, and the derived selected-year gap scalar.
- Automatic year-rollover calendar stepping now invokes periodic-boundary service.
- Save-native world locomotive policy owner state now flows through runtime restore state,
summaries, and keyed world-flag execution for the grounded
All Steam/Diesel/Electric Locos Avail.descriptor strip plus the cached available-locomotive rating. - The selected-year bucket ladder rooted in
0x00433bd0is now checked in as a static artifact, and runtime restore state now derives both the selected-year bucket scalar and the[world+0x0bde]economic-tuning mirror from owner-family inputs instead of preserving stale load-time residue. - That same selected-year owner family now also rebuilds the direct bucket trio
[world+0x65/+0x69/+0x6d], the complement trio[world+0x71/+0x75/+0x79], and the scaled companion trio[world+0x7d/+0x81/+0x85]from the checked-in0x00433bd0artifact instead of preserving stale save-time residue. - The save-native company direct-record seam now also carries the full outer periodic-company
side-latch trio rooted at
0x0d17/0x0d18/0x0d56, including the preferred-locomotive engine-type chooser byte beside the city-connection and linked-transit finance gates. - That same side-latch trio now also has a runtime-owned service-state map and summary surface, so later periodic company-service work can stop reading those lanes directly from imported market/cache residue.
- The periodic-boundary owner now also clears the transient preferred-locomotive side latch every cycle and reseeds the finance latches from market state where present, while preserving side-latch-only company context when no market projection exists.
- The outer periodic-company seam now also has a first-class runtime reader:
selected-company summaries and finance readers can resolve the base
[world+0x4c74]route-preference byte, the effective electric-only override fed by0x0d17, and the matching1.4xversus1.8xroute-quality multiplier through owned periodic-service state instead of leaving that bridge in atlas notes. - That same periodic-company seam now also owns a first-class route-preference apply/restore
mutation lane: runtime service state tracks the active and last electric override, beginning the
override rewrites
[world+0x4c74]to the effective route preference for the selected company service pass, and ending the override restores the base world byte instead of leaving the seam as a pure reader bridge. - The same route-preference mutation seam now also carries explicit apply/restore service counters through runtime service state and summaries, so later periodic-company branches can assert that override activity happened even before the missing city-connection / linked-transit service owners are fully rehosted.
- Company cash, confiscation, and major governance effects now write through owner state instead of drifting from market/cache readers.
- Company credit rating, prime rate, book value per share, investor confidence, and management attitude now refresh from grounded owner-state readers.
- Annual finance service persists structured news events and grounded debt/share flow totals.