From 401b29094976e234aa9492a69a2c4ca7c1c34656 Mon Sep 17 00:00:00 2001 From: arcattack Date: Tue, 7 Jul 2026 21:44:06 -0500 Subject: [PATCH] =?UTF-8?q?CLAUDE.md=20=C2=A78:=20gauge=20system=20COMPLET?= =?UTF-8?q?E=20=E2=80=94=200=20NULL=20bindings=20+=200=20parse-skips=20(ag?= =?UTF-8?q?gregate=20bank,=20valve,=20SectorDisplay/PrepEngr/MessageBoard)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- CLAUDE.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index e8aee98..d0d0fde 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -760,6 +760,29 @@ the `SegmentArc270` recharge-dial + `BitMapInverseWipeScalar` eject-wipe childre NULL); the remaining raw heat-leaf-branch value-pointer reads (BEST-EFFORT — need the branch re-base or per-field bridges); the separate 960×384 gauge window (docked mode renders; separate-window is existing dev-gauge infra). +**✅✅✅ GAUGE SYSTEM COMPLETE — every config attribute binds + every config gauge widget builds (full map: +`docs/GAUGE_COMPOSITE.md`).** Closing the data-binding wave (user: "complete the full guage system"): +- **Attribute bindings: 0 NULL** (`BT_GAUGE_ATTR_LOG` = 50 OK). The LAST unresolved binding + (`HeatSink/AmbientTemperature`) is cleared by the reconstructed **`AggregateHeatSink` 0xBBE** (the heat-sink + BANK class, ctor @4ae8d0, GUID 0x50e590, byte-exact sizeof 0x1E4; publishes HeatSinkCount + AmbientTemperature=300, + frozen). Deliberate deviation: keep the base HeatSinkSimulation, do NOT install the authentic Performance @4ae73c + (it derefs a raw self+0xE0→[+0x158] that doesn't map in our layout → AV for EVERY mech; ambient is a frozen + constant so the gauge reads 300 either way). +- **Widgets: 0 parse-skips** (`BT_GAUGE_SKIP_LOG` = 0). The last 3 unregistered primitives reconstructed + registered: + **SectorDisplay** (radar SECTOR X/Z read-out — LIVE: `Round(-Z*0.01)+500`/`Round(X*0.01)+500` 100-unit sectors, + verified sectorA=510/sectorB=504 from live position), **PrepEngrScreen** (12 engineering-screen label overlays — + base `GraphicGaugeBackground` paint-on-activation, NOT Execute), **MessageBoard** (sec-MFD comm ticker — DEFERRED + empty: SetSource has no caller + StatusMessagePool is a NULL stub, so no messages exist; safe no-op). +- **Condenser valve gauge**: fixed the `/FORCE` ODR dup (heat.cpp stub Condenser ctor shadowed the real reslice one + → valveState=garbage) + reconstructed **`RecomputeCondenserValves`** (FUN_0049f788, was a no-op `FinishConstruction` + stub) → coolantFlowScale = valveState/Σvalve, so `ValveSetting` reads the authentic **1/N** (BLH 6 condensers → + 0.1667 each). **`Condenser::MoveValve`** replaced (the reslice body was mislabeled @4afbe0 controls-mapper; real + @4ae464 disassembled: cycle 1→5→50→0; DORMANT — route/guard via 0xBD3). +- **Remaining gauge work = DATA FEEDS, not widgets** (deferred systems, marked): the valve/message CONTROL routes + (0xBD3 SubsystemMessageManager, WAVE 8) + the status-message queue (StatusMessagePool); `SeekVoltageGraph`'s 4 + Seek* attributes (cluster-child, not config-called). ⚠ VERIFICATION GOTCHA: the gauge renderer builds LAZILY + (BuildConfigurationFile) — a too-early process kill shows a false "0 skips / not built"; wait for the gauge window. + **Alternate route considered:** run original `btrel410.exe` under DOSBox — **blocked**: it needs the VPX/IG board DOSBox can't emulate; bypassing it = the shim work anyway.