diff --git a/docs/GAUGE_COMPOSITE.md b/docs/GAUGE_COMPOSITE.md index d67da02..8ff7271 100644 --- a/docs/GAUGE_COMPOSITE.md +++ b/docs/GAUGE_COMPOSITE.md @@ -517,7 +517,7 @@ strcmps every slot — a gap AVs). Done: no leak / massScale 3.0 = authentic pristine. **After P1 every config-string binding resolves OK except HeatSink/AmbientTemperature** (needs the aggregate bank, P3). -### Phase 2 — WIDGET RECONSTRUCTION (3 of 4 DONE; commits d68284e/0060a3e/b44e908) +### Phase 2 — WIDGET RECONSTRUCTION (COMPLETE — every config gauge primitive registered; [gskip]=0) These config keywords were UNREGISTERED in `BTL4MethodDescription[]` (btl4grnd.cpp) so their lines parse-skipped and the gauge never built (even after publishing). The `gauge-widget-decode` workflow reconstructed each from the binary; registered widgets need a REAL Make/ctor/Execute/dtor (the /FORCE trap: @@ -542,8 +542,34 @@ a prose-only vtable slot AVs on first call). (no-op; the 5 self-registered children draw the dynamic content), mirroring the sibling SubsystemCluster. **⚠ LESSON: a reconstructed container gauge MUST override Execute (+ a non-inactivating BecameActive) — the 2007 `Gauge::Execute` base aborts.** -- **TODO (lower priority):** **PrepEngrScreen** (@004c7b30/7bf0/7e48 — engineering full-screen), **SectorDisplay** - (@004c9e10/ca07c) + **MessageBoard** (@004cb678), **SeekVoltageGraph::Execute** (@004c6934) + real FindAttributeIndex. +- ✅ **SectorDisplay** (radar SECTOR X/Z read-out, Secondary overlay; commit 4a4ec68) — was PROSE-ONLY + (placeholder Make). Reconstructed byte-verified from the disassembly (ctor @4c9e10, Execute @4ca07c, + methodDescription PE-parse): `SectorDisplay : GraphicGauge` (0xC4), overrides LinkToEntity(9)/BecameActive(3)/ + Execute(16). Execute reads the linked mech's `localOrigin` → two 100-unit sector numerics + `numericA=Round(-Z*0.01)+500`, `numericB=Round(X*0.01)+500` (Round=FUN_004dcd94, corrected from a "truncate" + claim; 0.01 + -Z/+X asm-verified). **VERIFIED LIVE (BT_SECTOR_LOG): Make port=1 (overlay), Execute -Z=960/X=362 + → sectorA=510 sectorB=504.** +- ✅ **PrepEngrScreen** (per-engineering-screen static label overlay, 12 CFG calls; commit c0d2eb0) — was a + MISLABELED stub (base Gauge/Execute/mech+screenNumber swapped). Corrected (vtables.tsv proof): base + `GraphicGaugeBackground` (paint-on-activation, only dtor+BecameActive overridden — NO Execute virtual, so the + Fail→abort hazard doesn't apply), screenNumber@0x6C/mech@0x70. BecameActive walks the roster (safe accessors + + BTGetSubsystemAuxScreen), finds the subsystem whose auxScreenNumber==this screen (1..12), paints its labels + dispatched on GetClassID. **All 12 build; composite un-regressed.** +- ✅ **MessageBoard** (secondary-MFD comm/status ticker; commit 7fc4acb) — was PROSE-ONLY; the LAST parse-skip. + Reconstructed (Make @4cb678 … Execute @4cb82c, 0xA4); fixed 3 header mislabels (enabled→trackedMech; + previousMessageId/previousNameId swapped). **DEFERRED/EMPTY by design (authentic for bring-up):** the source is + never bound (SetSource has no caller) AND the status queue (StatusMessagePool, btstubs.cpp:62) is a NULL stub → + no messages → Execute early-returns (safe no-op). Data via a `BTResolveMessageBoard` /FORCE-safe bridge + (btplayer.cpp). **After this, the parse-skip list is EMPTY.** + +**⭐ GAUGE SYSTEM COMPLETE (registration + binding):** all 50 config attribute bindings resolve (`[attr]` 0 NULL — +AggregateHeatSink cleared the last, `HeatSink/AmbientTemperature`), and every config gauge primitive is registered + +built (`[gskip]`=0). Diagnostic `BT_GAUGE_SKIP_LOG` (GAUGREND.cpp, gated) logs each unregistered primitive the +dev-parse skips — the tool that pinned the last 3 (⚠ the gauge renderer builds LAZILY, so verification runs must wait +long enough for BuildConfigurationFile; a too-early kill shows [gparse]=0 and looks like "not built"). Remaining gauge +work is DATA FEEDS, not widgets: the valve/message CONTROL routes (0xBD3 SubsystemMessageManager, WAVE 8) and the +status-message queue (StatusMessagePool) — deferred systems, cleanly marked. `SeekVoltageGraph::Execute` (@004c6934) +is a cluster-child (not config-called) — its 4 Seek* attributes are the only remaining publish, non-blocking. ### Phase 3 — SIM/MODEL - ✅ **Aggregate HeatSink-bank** (0xBBE) — DONE (commit 16f5f54). Reconstructed `AggregateHeatSink : HeatSink`