diff --git a/context/subsystems.md b/context/subsystems.md index c5b2e8a..dfb5ae9 100644 --- a/context/subsystems.md +++ b/context/subsystems.md @@ -120,6 +120,21 @@ manual), bluish cloud screenshot-confirmed (scratchpad/flush_cloud.png). Replica receive @4aeef8 sets the alarm from the state stream — the port's reservoir state replication is not wired, so remote clouds are deferred (solo/master path complete). +## Valve boost A/B/C (2026-07-23, field "boosted loop still cooked" audit) [T2 measured] +Blackhawk, sustained BT_AUTOFIRE, 150 s soaks, `[heat-t]` 5 s cadence. Valve shares are +zero-sum (`valveState/Σ`); detent cycle per press = **1 → 5 → 50 → 0 (CLOSED) → 1** (@4ae464, +one past max turns the loop OFF). SRM6s (+ GeneratorB + Avionics) are on **Condenser2** +([heat-link] dump; the MFD loop readout matches the heatSinkIndex truth). Results, SRM6_1: +- **boost 2 (share 0.91)**: plateau ~531, then COOLS under nonstop fire — never jams/fails. +- **balanced (0.167)**: ~1162 @ 70 s and climbing (the jam band; field jams logged 1043-1469). +- **starved (0.018)**: ~1440 @ 70 s, slope → the 2000 FailureHeat line. +The valve mechanic is REAL and powerful; MoveValve reruns the redistribute on every press +(not a placebo), veteran role passes the guard. The field double-failure with "loop 2 +boosted" is therefore a DETENT question — most likely one press past max (detent 0 = closed, +share 0) — now diagnosable: valve presses log always-on (`[valve] ... -> detent N`, with a +CLOSED warning). Solo clock shim verified the same day (60 s egg self-ends; +`[mission] solo game clock expired`). + ## The four systemic checks (every subsystem) See [[reconstruction-gotchas]]: (1) shadowing (re-declared engine-base fields), (2) the `Wword` trap, (3) message-handler chaining, (4) entity validity. Plus resource-struct layout (must mirror the class diff --git a/game/reconstructed/heatfamily_reslice.cpp b/game/reconstructed/heatfamily_reslice.cpp index 6f978c5..c0bf004 100644 --- a/game/reconstructed/heatfamily_reslice.cpp +++ b/game/reconstructed/heatfamily_reslice.cpp @@ -175,9 +175,14 @@ void case 0: valveState = 1; break; // @4ae499 case 1: valveState = 5; break; // @4ae4a5 case 5: valveState = 50; break; // @4ae4b1 (0x32) - case 50: valveState = 0; break; // @4ae4bd + case 50: valveState = 0; break; // @4ae4bd -- one past max = CLOSED default: return; // @4ae497 unknown -> no change / no recompute } + // ALWAYS log a valve press (rare + forensic -- the 2026-07-23 "boosted loop + // still cooked" field case could not be reconstructed without the detents) + DEBUG_STREAM << "[valve] " << GetName() << " valve -> detent " << valveState + << (valveState == 0 ? " (CLOSED -- this loop is now UNCOOLED)" : "") + << "\n" << std::flush; BTRecomputeCondenserValves((Entity *)owner); // FUN_0049f788(this[0xd0]=owner Mech) }