9.7 KiB
Runtime Effect Kind-8 Late Bringup Note
This note extracts the current grounded late-bringup facts for the ordinary startup runtime-effect lane, so the remaining recovery work does not have to keep jumping between the queue, the large function map note, and the broader subgraph artifacts.
Grounded Ordering
world_load_saved_runtime_state_bundle0x00446d40directly reachesscenario_event_collection_refresh_runtime_records_from_packed_state0x00433130.- The same loader does not directly reach
scenario_event_collection_service_runtime_effect_records_for_trigger_kind0x00432f40. world_entry_transition_and_runtime_bringup0x00443a50is the owner above both restore and service.- Current
function-map.csvnotes for0x00443a50already state that:- the tagged load phase reloads event runtime records through
0x00433130 - the one-shot kind-
8service through0x00432f40only runs much later in the final reactivation tail - shell-profile latch
[0x006cec7c+0x97]is cleared after that late kind-8service
- the tagged load phase reloads event runtime records through
Late-Tail Candidate Branches
- The remaining unknown is therefore no longer abstract restore-vs-service ordering.
- The remaining unknown is:
- which late bringup branch or retagger between
0x00433130reload and final kind-80x00432f40service materializes the live mutation-capable records
- which late bringup branch or retagger between
Checked Corpus Counts
- The checked export
artifacts/exports/rt3-1.06/compact-event-dispatch-cluster-counts.jsonnow keeps the ordinaryrt3_105/mapscompact-dispatch corpus grounded without re-running the wider inspection command. - Current corpus totals are:
41maps scanned38maps with dispatch-strip rows318nondirect compact dispatch-strip rows total0rows with recovered trigger kind10add-building grouped occurrences across7descriptor keys (Barracks,Bauxite Mine,FarmGrain,Furniture Factory,Logging Camp,Port01,Warehouse05)
- The same export now also carries the concrete carrier-map paths directly through
add_building_descriptor_map_pathsandadd_building_signature_condition_cluster_map_paths, including:Texas Tea.gmpfor548 Add Building Port01Louisiana.gmpfor563 Add Building Warehouse05Alternate USA.gmpfor the repeatedFarmGrain/Logging Campge34familyChicago to New York.gmpandPacific Coastal.gmpfor the mixed[-1:4]cluster
- The widened counts surface now also keeps the strongest full nondirect families visible beyond
the add-building subset:
dispatch_signature_condition_cluster_occurrence_countsnow shows the broadest checked family isnondirect-ge1e-h0001-0360-0004-0100-0200-p0000-0000-0000-ffff :: [864:4]at36grouped occurrences across18maps- the next family remains the mixed
[-1:4]cluster at27grouped occurrences across14maps dispatch_signature_condition_cluster_descriptor_keyskeeps the first cluster grounded on the variable/status descriptor family (Economic Status,Game Variable 1..4,Company Variable 1..4) and keeps the second cluster grounded on that same family plus the two checked add-building descriptorsBarracksandBauxite Mine
- That keeps the remaining late-bringup/control-lane question narrow:
- ordinary loaded nondirect rows already reach the
0x00431b20mutation strip at scale - but the missing trigger-kind lane is still the blocker above the already-grounded descriptor bridge
- ordinary loaded nondirect rows already reach the
Direct Trigger-Kind Gate
Fresh direct disassembly now keeps that control lane explicit rather than inferred:
0x00444d92- calls
0x00432f40with trigger kind8 - then clears shell-profile latch
[0x006cec7c+0x97]
- calls
0x00432f40- iterates the live runtime-effect collection
- calls
0x004323a0for each row with the requested trigger kind - records whether any row fired
- if collection flag
[this+0x88]is raised, reruns the same service loop with trigger kind0x0a
0x004323a0- returns immediately unless
[event+0x81f] == 0 - returns immediately unless
[event+0x7ef] == trigger_kind - only after that exact compare does it continue into the compact dispatch body
- returns immediately unless
So the active question is no longer whether the trigger kind is a direct row gate. It is where the
ordinary loaded rows get a nonzero [event+0x7ef] that matches the later kind-8 or follow-on
kind-0x0a service.
Reload-Side Boundary
The ordinary reload strip is bounded in the same negative way now:
0x00433130- restores tagged record families
0x4e99,0x4e9a, and0x4e9b - reads one fixed
4-byte scalar block through0x00531150 - loops live rows through per-record restore helper
0x0042db20 - clears collection flag
[this+0x88] = 0before returning
- restores tagged record families
- that reload path does not pass any trigger-kind argument analogous to the later
0x00432f40(kind)service - and the per-record helper
0x0042db20is narrower than a full metadata restore:- it conditionally rebuilds the six fixed text bands and the linked
0x1e/0x28row families - it does not restore the event metadata band
+0x7ee..+0x80e, including[event+0x7ef]
- it conditionally rebuilds the six fixed text bands and the linked
- the save-side companion
0x00430d70matches that same omission:- it writes the fixed text bands plus the linked condition/effect rows
- it does not serialize the metadata band
+0x7ee..+0x80e
So the remaining late-bringup/control-lane frontier stays between reload and service rather than inside the already-bounded restore loop itself.
Current Writer Census
The direct writer set for [event+0x7ef] is narrower now too:
0x0042d5a0- zero-initializes the live runtime-effect record control band
- clears
[event+0x7ee],[event+0x7ef],[event+0x7f4],[event+0x81f],[event+0x823], and[event+0x82b]
0x0042e11a- straight copy helper over the same control band
- copies
[event+0x7ee/+0x7ef/+0x7f0/+0x7f4...]from one live row into another
0x00430b50- the already-grounded follow-on runtime-effect builder
- reaches the fresh live row through
0x00432ea0 -> 0x0042d5a0 - then seeds
[event+0x7ef]to2or3from the current[world+0x11]threshold - also sets
[event+0x7f5] = 1
0x00443526and0x00443601- the already-grounded late retags to
5and2
- the already-grounded late retags to
So the active periodic-company/control-lane question narrows again:
- ordinary reload
0x00433130 -> 0x0042db20does not itself pass a trigger kind - the late service strip gates strictly on
[event+0x7ef] - and the currently grounded nonzero seed outside the scenario-name retags is the follow-on builder reached from the service/dispatch family rather than from the reload loop itself
The direct-write census is tighter than that summary alone:
- current whole-binary
objdumpsearch formov BYTE PTR [...+0x7ef], imm/reggrounds only:- zero-init
0x0042d5a0 - copy helper
0x0042e11a - follow-on builder
0x00430b50 - late retags
0x00443526and0x00443601 - shell editor selector table
0x004d8ea0
- zero-init
- the only grounded explicit
kind 8write is0x004d91b3, inside the shell-side selector table for controls0x4e98..0x4ea2 - no grounded shellless runtime-side direct writer currently seeds
8into[event+0x7ef]
Ruled-Out Shell Seed Table
The large remaining direct writer table is bounded now too:
0x004d8ea0- is the shell-side
EventConditions.wincommit helper already grounded infunction-map.csv - resolves the currently selected live event from the editor window
- writes
[event+0x7ef] = 0..10from controls0x4e98..0x4ea2 - also commits neighboring editor-strip fields
[event+0x7f9],[event+0x7fa],[event+0x7f5], and[event+0x7f0]
- is the shell-side
0x004db120- is the paired shell refresh helper
- republishes that same
0x4e98..0x4ea2selector band one-to-one from stored[event+0x7ef]
So the broadest direct 0..10 trigger-kind seed family is real, but it belongs to the shell
editor strip rather than to ordinary post-load simulation bringup.
Post-Load Scenario Fixup
shell_apply_scenario_name_specific_post_load_world_and_object_fixups0x00442c30is called from0x00443a50at0x00444b50.- This branch is currently prose-first, not graph-first:
- a direct subgraph export on
0x00442c30collapses to the seed node - the useful evidence lives in the grounded function-map note rather than note-reference edges
- a direct subgraph export on
- The function-map note grounds several concrete mutations across collections rooted at:
0x0062be180x0062bae00x006ada800x0062b268
- The event-side trigger-kind boundary is narrower now too:
- grounded
[event+0x7ef]writes inside0x00442c30are still only:0x00443526: event row1,1 -> 50x00443601: event row0x0d,0 -> 2
- the surrounding surfaced event branches only patch modifier bytes
[event+0x7f9/+0x7fa]or nested payload dwords under already-existing kinds6,5,1,2,3, or9 - no grounded branch in
0x00442c30seeds[event+0x7ef] = 8
- grounded
Explicit Trigger-Kind Retags Already Grounded
SP - GOLDbranch at0x00443526- rewrites
[event+0x7ef]from1 -> 5 - live runtime-event id
1 - gated by
[world+0x66de] - checked payload root kind
7with subtype byte5
- rewrites
Laborbranch at0x00443601- rewrites
[event+0x7ef]from0 -> 2 - live runtime-event id
0x0d - gated by
[world+0x66de] - checked
0x3c -> 0x3dchild payload pair with the matched negative scalar sentinel
- rewrites
Current Best Next Recovery Question
- Which late bringup branch between:
0x00433130reload0x00442c30scenario-name post-load fixups- and final kind-
80x00432f40
- is responsible for the live kind-
8records that already carry mutation-capable compact payloads in ordinary nondirect bundles.