docs: GAUGE_COMPOSITE Phase 2 COMPLETE — SectorDisplay/PrepEngrScreen/MessageBoard registered; gauge system done

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-07 21:43:16 -05:00
co-authored by Claude Opus 4.8
parent 7fc4acb89f
commit 5b9100da74
+29 -3
View File
@@ -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`