rrt/docs/control-loop-atlas/next-mapping-passes.md

17 KiB

Seam Queue

  • done Load/save setup-preview sidecar save split: the atlas now distinguishes the direct package-save 0x00442ba0 -> 0x00441ec0 branch at 0x00444f42/0x00444f47 from the .smp serializer branch at 0x00446312, which writes 0x2ee0 -> 0x403c2 -> 0x2ee1 itself and does not re-enter 0x00441ec0.
  • done Load/save shell status-stack and tool bracketing: the atlas now separates the three grounded branches: .smp save uses wrapper pair 0x004423a0/0x004423d0, world entry 0x00443a50 uses raw 0x004422d0/0x00442330 plus inline TrackLay/StationPlace entry and service calls, and the non-.smp package-save tail under 0x00445de0 uses raw 0x00442330 plus inline recurring tool service; current local evidence does not show 0x00446d40 directly re-entering either pair.
  • done Load/save selected-year launch-policy seam: the split is now grounded: the ordinary saved-profile loader 0x00442400 and package-save prelude 0x00444dd0 remain the two direct writers to stage dword 0x00620e94, while interactive command path 0x00464410 owns direct writes to shell launch-policy [0x006cec74+0x178]; the load or restore consumers are explicit under 0x00436d10, 0x004384d0, 0x00437b20, 0x00437737, and 0x00444dc5.
  • done Runtime/package sidecar gate provenance: the sidecar-gate producer chain is now grounded: settings dispatcher 0x00464c80 owns the shell dwords, package-save coordinator 0x00445de0 reseeds 0x0062bec4, exporter 0x00442ba0 copies those values into payload bytes +0x0a/+0x0b, and the live world bytes [world+0x66c8/+0x66c9] inherit them only through whole-block [world+0x66be] copies on restore, multiplayer mirror, and save/export reuse.
  • done Resolve the owner-side callback roles behind the validated GameSpy packet branches: route constructor 0x0058c9b0 seeds [route+0x9c] from the transport callback table and zeros [route+0xa0/+0xa4/+0xd4]; the transport-owned status/live connect paths then patch [route+0xa0] -> 0x00597330, keep [route+0xa4/+0xd4] null, and therefore make subtype 4 dispatch through 0x005972c0, subtype 6 use the validated extended-payload lane before an optional raw fallback, and semicolon-line parsing remain an inactive optional branch for those routes.
  • done Determine whether later world-mode branches bypass the shell controller input path: current local evidence still keeps the full grounded chain under the same shell-fed roots 0x006d4018 and 0x006d4024, from cursor drag 0x00478cb0, hotspot service 0x004e0780, and camera service 0x0043db00 down through the frame-owned hover or focus-target tail at 0x0043963d; no separate gameplay-only input object or later non-cursor bypass branch is exposed in the current local traces.
  • done Load/save null-cargo fallback boundary in the recipe import bridge: the importer-side 0x004120b0 -> 0x00411ee0 -> 0x00412650 chain is now narrow enough to treat cargo id 0 as a fallback or sentinel lane rather than another ordinary cargo meaning: failed exact matches still land in the first summary-bank bucket, but steady-state callers do not probe cargo id 0 like a normal cargo id and the placed-structure sweep diverts explicit 0 requests into the linked-site classification path instead of the ordinary cargo-reference helper.
  • done Load/save recipe marker-token provenance boundary at [world+0x0fe7]: current local evidence does not surface any in-binary non-editor author for the unmatched marker-like token families. The reset path only seeds names, the editor preserves or rewrites token lanes verbatim, the importer runs only the exact-name match at 0x0041e9f0, and checked map/save pairs preserve those raw marker payloads byte-for-byte. So the load/save seam is closed at the current evidence level as opaque scenario-authored payload preserved through persistence, not as one more hidden runtime decode or writer path inside the local binary.
  • done Load/save clear-only boundary at [world+0x4cae/+0x4cb2]: the current local corpus keeps both dwords on the same negative-evidence boundary: checked save offsets stay zero there, the startup pre-dispatch helper 0x004336d0, shared reset owner 0x00436d10, and post-fast-forward tail around 0x00437120 only clear them, and the current binary still does not expose any direct non-clear readers or writers. That is enough to treat them as a reset-owned structural pair rather than an active unresolved policy lane.
  • done Load/save late-state plateau boundary under [world+0x4cc2..]: the atlas already closes this as a layout seam at the current evidence level: 0x00436d10 is the grounded reset owner, serializer-side evidence jumps from the leading tuning lanes straight to the recipe-book root, and the current binary does not expose direct literal-offset readers or writers for the first dwords in the plateau after the bulk clear. The remaining unknowns there are per-field semantics, not an open load/save ownership seam.
  • done Load/save named-availability header-word framing above [world+0x66b2/+0x66b6]: 0x00517d90 now closes the ownership boundary: those words belong to the generic indexed-collection header path on the package-save branch, while the .smp branch bypasses that header entirely and writes only direct counted fixed-row runs. Their exact semantic names remain ungrounded, but as a load/save seam they are now bounded as outer collection-framing dwords rather than hidden payload fields inside the named-availability row families.
  • done Load/save special-condition tail scalar boundary at [world+0x4b0b..+0x4b3f]: the current corpus and parser notes now close this at the ownership level as one fixed post-sentinel save window that overlaps the aligned scenario-rule band, then continues as a save-only tail into the grounded [world+0x4b47] status-text region. Direct consumers for the intervening dwords remain sparse, but that is now a semantic-naming gap rather than an open load/save seam.
  • done Load/save compact setup-profile slab framing in classic/1.05 saves: the load/save seam is closed at the current evidence level as one serialized setup-profile slab with a grounded runtime-profile core plus serializer-owned framing and scenario-family metadata. The fixed middle bytes, skewed classic front edge, leading dword, and scenario-save-only extra bands remain naming work, not unresolved ownership.
  • done Load/save semantic meaning of recipe-import cargo id 0: the current caller layer narrows cargo id 0 to a linked-site classification sentinel rather than a normal cargo identity. Failed exact-name imports can still land in bucket 0, but steady-state cargo-service callers avoid probing that id and the placed-structure sweep reuses it as the nonstandard linked-site or station-or-transit bypass path instead of the ordinary cargo-reference helper.
  • done Load/save semantic naming of recipe line mode values and token classes: the remaining gap is now bounded tightly enough to carry as naming, not as an open seam. The player-facing mode family is grounded directly from the editor page and importer split as Disabled, Demand Only, Supply Only, and Production Demand->Supply; the recurring saved token families are named conservatively as high16-ascii-stem, high16-numeric, and low16-marker; and the recurring row signatures are named as demand-numeric-entry, demand-stem-entry, supply-numeric-entry, and supply-marker-entry. The unresolved part is only whether some opaque numeric or marker words are literal cargo ids or scenario-authored token codes, not another missing load/save naming boundary.
  • done Load/save semantic naming inside the late-state plateau [world+0x4cc2..]: the family now carries one conservative load/save name. The opening run is the reset-owned late-state scalar plateau immediately ahead of the recipe books, while the grounded neighbors are the support-entry counters [world+0x4c9a/+0x4c9e], pending-plus-accumulated support float pair [world+0x4ca6/+0x4caa], selected-train latch [world+0x4cb6], selected-station latch [world+0x4cba], and cached available-locomotive rating [world+0x4cbe]. What remains missing is only per-dword decode inside the opening unlabeled slice, not load/save naming.
  • done Load/save semantic naming of post-special-conditions tail dwords [world+0x4b0b..+0x4b3f]: the window now carries one conservative family name as the post-sentinel special-condition save tail, with [world+0x4b43] as its grounded trailing scalar and the earlier dwords preserved as opaque tail scalars within the same saved rule-family extension.
  • done Load/save semantic naming of compact setup-profile slab framing bytes: the framing now has conservative names at the family level: one leading serializer-tag dword, one stable presence byte, one skewed classic front edge, one classic fixed middle strip, one scenario-sensitive middle word around +0x80, and one scenario-save-only extra band +0x88..+0x8b, all wrapped around the already-grounded setup-profile core.
  • done Transport selector-request lane semantics around 0x593980/0x593c40/0x59fc80: the old broad request-id note is replaced by the grounded lane split the atlas actually exposes. Outer Multiplayer.win requested actions are bounded at 0x004ef960, with action 1 as the preview-reset/entry lane, action 2 as the staged-text and local-session-slot promotion lane, and action 4 as the committed-text or launch-side promotion lane. Beneath that, the concrete transport submit owners are 0x5959e0 -> 0x593980 for bound-route status requests, 0x593c40 for selector-text route requests, and the second selector-descriptor callback lane rooted at 0x59fc80 for named-selector callback publication.
  • done Transport compact-descriptor auxiliary dword semantics at [descriptor+0x10]: the field now carries one conservative family name as the compact-header auxiliary inline dword. Header bit 0x08 gates its presence, setter 0x58d650 owns the decode-side store, and later descriptor copy or callback-marshaling helpers preserve it without exposing a narrower dedicated reader.
  • done Transport preview-dataset reuse boundary outside Multiplayer.win: the caller set is now broad enough to close the boundary. Beyond the core Multiplayer.win flows, preview submitter 0x00469d30 is reused by the .gmt save-mode branch in 0x00445de0, BuildingDetail.win auxiliary sync, Start New Company... side-owner submission, CompanyDetail.win async multiplayer actions, and multiple dataset-side selector or update owners, while current local evidence still keeps that reuse inside shell-side preview or async families rather than ordinary world or simulation cadence.
  • done StationDetail lower action and special-action semantic naming: the page now carries conservative family names instead of broader residual notes. The ordinary non-scenario branch is the station-summary presentation lane over nearby-site jumps plus To/From hauled-traffic widgets; the lower 0xb3b5..0xb3bf strip is the linked-site mutation action band with affordability notice and validate-or-apply branches; and special control 0xb3f8 is the editor-gated scenario-station special-case affordance.
  • done StationDetail route-list companion payload meaning under [site+0x462/+0x466]: the six-byte list now carries a conservative split as a peer-site route-entry key plus one trailing route-entry companion payload word reserved for non-overlay caller families.
  • done StationDetail linked-instance terrain-class caller meaning: the later consumers are now bounded conservatively as linked-instance secondary-raster class filter families used by world-side and linked-peer gating, rather than as a remaining unnamed caller cloud above the helper strip.
  • done Shell/gameplay cadence handoff across bootstrap, shell command, presentation, map-load, and runtime roots: the repeated atlas-level handoff note is now closed under one conservative current-evidence boundary: long-lived gameplay cadence still rendezvous with the shell-owned frame and bring-up coordinators, and the atlas no longer leaves separate page-local open-question wording across those shell bring-up pages.
  • done Station-detail city-connection caller ladder above the formatter family: the station-detail page now carries the broader caller side conservatively as the city-connection / company-start announcement ladder above the already-grounded peer-selector, route-build, and prime-rate branches.
  • done Editor residual semantic naming for recipe-token provenance and event-validation score bands: editor-breadth.md now carries the supply-marker token family as opaque scenario-authored marker strings, the event-validation score and flag slice as gameplay metric bands, and the placed- structure +0x42 caution as an immediate accessor cluster without extending that evidence to the unrelated later mode-gated byte readers.
  • done Setup payload lower-slab consumer naming around 0x6a70: the lower setup slice is now carried conservatively as a candidate-table slab inside the broader setup payload family, with current named consumers still bounded to earlier setup offsets.
  • done Runtime residual naming for detail-panel modes 0x06/0x0b, mode-gated flag byte +0x42, and PaintTerrain per-mode scalar lanes: the runtime page now carries those families conservatively as the scenario-toggle-gated company-detail mode-0x0b gate, the selected-company-or-editor mode-0x06 gate, one local runtime enable byte, and PaintTerrain per-mode scalar or token bands beneath the grounded shell/world ownership split.
  • done Save/runtime late scalar-family naming around [world+0x4cae/+0x4cb2] and the 1.05-only scalar band: the remaining save/runtime notes now carry those lanes conservatively as startup-dispatch companion dwords inside the reset-owned late save-visible cluster and as the 1.05-only late scalar tail beneath the aligned runtime-rule base.
  • done Function-map structural stub and constant-slot naming families: the remaining pure stub, constant-return, raw-flag, and fixed-value rows now carry bounded structural names without explicit open-work wording.
  • done Function-map shell command, detail-panel mode, and input-registration caption families: the remaining command-side rows now stay at the concrete localized-id, action-id, control-id, or mode-family level instead of carrying unresolved caption or user-facing-verb notes.
  • done Function-map SettingsWindow field and caption families: the remaining settings-page rows now carry bounded page-owned selector, toggle, shell-config, and display-runtime field names instead of open caption or field-meaning notes.
  • done Function-map Trainbuy, paired preview-selector widget, and adjacent shell widget subtype families: the train-side selector strip, paired preview-selector family, adjacent world-surface brush strip, and neighboring shell widget rows now carry conservative family names without explicit subtype uncertainty.
  • done Function-map surface-decoder user-facing format-name families: the decoder rows now carry exact tag, FourCC, aux-mode, stride, packed-YUV, or DXT family names without leaving user-facing pixel-format labels as open work.
  • done Function-map transport residual descriptor and callback-sidecar families: the remaining transport-side rows now keep the staged route descriptor tuple, negative sidecar boundary, callback-table attach, and selector helper wording at bounded structural family names.
  • done Function-map route-entry optional-hook and queued-record prompt naming: the route-entry optional-refresh hook, idle-shell queued-record prompt, and adjacent collection- validation rows now carry bounded family names without explicit residual notes.
  • done Function-map additional CompanyDetail, PaintTerrain callback, display command, UI image-slot, and support-math helper wording: the export sweep also closed the remaining small helper notes encountered during the pass, including the CompanyDetail overview/help formatter strip, the PaintTerrain numeric-updater callback wording, the display-resolution command wrapper, the UI image-slot loader, and the support-math helper rows that previously left axis-order or API-variant wording open.

Queue Rules

  • When a seam closes or narrows materially, move or rewrite the queue item instead of leaving the old gap described only in page-local prose.
  • Prefer queue items that name concrete addresses and payload roots over broad subsystem notes.
  • Keep pending template, transport, and save/load work scoped to the specific atlas edges that remain unresolved.