From 65b30d463384f43ba0735f2a88248b54e6126e52 Mon Sep 17 00:00:00 2001 From: Joe DiPrima Date: Thu, 13 Aug 2026 23:48:40 -0500 Subject: [PATCH] #147 receipt promoted always-on (capped 20): the NaN trap fired silently behind BT_RANGE_LOG, which the player fleet never sets -- a Friday poisoning would have been corrected invisibly, wasting the one event that can name the NaN source and settle the ticket's causal inference. The #172 rare-forensic-event precedent (one line per poisoning, re-seed clears it). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_016bw71WVsccjwW7uKRg4aWD --- game/reconstructed/mech4.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/game/reconstructed/mech4.cpp b/game/reconstructed/mech4.cpp index 2f1ba3b..09cca72 100644 --- a/game/reconstructed/mech4.cpp +++ b/game/reconstructed/mech4.cpp @@ -6961,10 +6961,16 @@ void // there, moving caret gone". Re-seed instead of propagating. if (!(trueRange == trueRange) || !(sShownRange == sShownRange)) { - if (getenv("BT_RANGE_LOG")) + // #147: ALWAYS-ON (capped) -- the trap is the ONLY evidence + // that can name the NaN source in a field log, and Friday's + // fleet does not set BT_RANGE_LOG. Fires once per poisoning + // (the re-seed clears it); the #172 rare-forensic precedent. + static int s_nanPrints = 0; + if (s_nanPrints < 20 && ++s_nanPrints) DEBUG_STREAM << "[range] NaN TRAPPED (true=" << trueRange - << " shown=" << sShownRange << ") -- re-seeded to 1200\n" - << std::flush; + << " shown=" << sShownRange << ") -- re-seeded to 1200" + << ((s_nanPrints == 20) ? " (cap reached)" : "") + << "\n" << std::flush; trueRange = 1200.0f; sShownRange = 1200.0f; }