diff --git a/OPSTACK-PROGRESS.md b/OPSTACK-PROGRESS.md index 93bc7a5..590ac0c 100644 --- a/OPSTACK-PROGRESS.md +++ b/OPSTACK-PROGRESS.md @@ -4542,3 +4542,27 @@ results from this unbuilt change. same `MemoCat == 2` iteration); - no protected layout accessor was introduced: the code still uses public `GetStrateChunkZBounds`, never `FindSlotIndexForChunkZ`. + +## 2026-08-16 (v) — the permanent "warning" was noise, and it cost Jahni several sessions of worry + +Jahni: *"[this] have been in a 'warning' stage, is this fine ? is everything fine ?"* + +**Everything was fine.** The only `Warning:` in that whole run is the tunnel test's +`[dense fixture] No tile was proved`, whose own text says *"On the DENSE FIXTURE this is the EXPECTED +and correct result, not a defect."* The test reports Success; density is bit-identical; every +coverage number is non-zero; `violations` is 0; and the `[production defaults]` run directly below +reports **11 proved / 14641 voxels / 0 violations**. + +**But a warning that fires on every run and always means "this is fine" is not a warning — it is +noise that trains the reader to ignore warnings.** It sat there for several sessions and made him +uneasy about a green suite. That is a real cost, and it came from writing diagnostics for a reader +who already had the context. + +Fixed: `RunTileScan` takes `bZeroProvedIsExpected`. On the **dense fixture** 0 proved is the only +arithmetically possible answer (cull spheres cover that world ~3.6×) ⇒ `AddInfo`. On **production +defaults** 0 proved would be a genuine regression from today's 11 ⇒ still `AddWarning`. Same message, +same information, but the severity now carries meaning. + +⇒ **General rule for this project's diagnostics:** if a line cannot distinguish a good run from a bad +one, it must not be logged at a severity that implies something is wrong. The same defect as the +lumped bail counter, one layer out: *a signal that always says the same thing measures nothing.* diff --git a/Source/VoxelForge/Private/Tests/VoxelForgeOpStackTunnelTest.cpp b/Source/VoxelForge/Private/Tests/VoxelForgeOpStackTunnelTest.cpp index 7f4b1ce..4c9a771 100644 --- a/Source/VoxelForge/Private/Tests/VoxelForgeOpStackTunnelTest.cpp +++ b/Source/VoxelForge/Private/Tests/VoxelForgeOpStackTunnelTest.cpp @@ -1107,7 +1107,8 @@ bool FVoxelForgeOpStackTunnelTest::RunTest(const FString& Parameters) // seule ne dit rien de la production. Copier-coller le balayage aurait donné deux critères qui // divergent ; c'est un paramètre, pas un doublon. auto RunTileScan = [&](const FVoxelOpStack& S, const FStrateGenerationParams& TP, - const FVoxelOpContext& TCtx, const TCHAR* Label) + const FVoxelOpContext& TCtx, const TCHAR* Label, + bool bZeroProvedIsExpected) { int32 NumProved = 0, NumMixed = 0, NumSolid = 0, NumAir = 0; int32 NumBruteSamples = 0, NumViolations = 0; @@ -1290,7 +1291,17 @@ bool FVoxelForgeOpStackTunnelTest::RunTest(const FString& Parameters) if (NumProved == 0) { - AddWarning(FString::Printf( + // ⚠️ UN AVERTISSEMENT QUI SE DÉCLENCHE À CHAQUE RUN ET VEUT DIRE « tout va bien » + // N'EST PAS UN AVERTISSEMENT — c'est du bruit qui apprend à ignorer les vrais. + // Sur la fixture dense, 0 prouvé est la SEULE réponse arithmétiquement possible + // (les sphères de cull couvrent ce monde 3,6x) : c'est une info. En production + // défauts, 0 prouvé serait une VRAIE régression (11 aujourd'hui) : ça reste un + // avertissement. + // A warning that fires every run and always means "this is fine" is noise that + // trains the reader to ignore warnings. Zero proved is the only possible answer on + // the dense fixture (info); on production defaults it would be a real regression + // from 11 (warning). + const FString ZeroMsg = FString::Printf( TEXT("[%s] No tile was proved, so the brute force verified nothing -- it has no ") TEXT("verdict to contradict. Do NOT re-derive the cause: read the two lines above, ") TEXT("which name the operator and then the primitive class. ⚠️ On the DENSE ") @@ -1299,7 +1310,10 @@ bool FVoxelForgeOpStackTunnelTest::RunTest(const FString& Parameters) TEXT("occupancy, so cull spheres cover that world ~3.6x over and no box can be ") TEXT("outside all of them. It is the 'production defaults' run that answers ") TEXT("whether real worlds have skippable rock."), - Label)); + Label); + + if (bZeroProvedIsExpected) { AddInfo(ZeroMsg); } + else { AddWarning(ZeroMsg); } } TestEqual(FString::Printf( @@ -1336,7 +1350,7 @@ bool FVoxelForgeOpStackTunnelTest::RunTest(const FString& Parameters) // something, and that same densification makes tile-proving structurally impossible (room cull // radius ~= the lattice spacing, at 85% occupancy). Both are measured and both are brute-forced; // the dense one reporting ~0 is the correct answer, not a failure. - RunTileScan(Stack, P, Ctx, TEXT("dense fixture")); + RunTileScan(Stack, P, Ctx, TEXT("dense fixture"), /*bZeroProvedIsExpected*/ true); { FStrateGenerationParams SparseP = P; @@ -1352,7 +1366,7 @@ bool FVoxelForgeOpStackTunnelTest::RunTest(const FString& Parameters) // et c'est exactement ce que le contrôle 3 vérifie : l'empreinte de params est dans la clé, // donc l'une ne peut pas se servir les salles de l'autre. Le jour où ce contrôle tombe, // cette ligne-ci devient fausse en même temps — elles se surveillent mutuellement. - RunTileScan(SparseStack, SparseP, Ctx, TEXT("production defaults")); + RunTileScan(SparseStack, SparseP, Ctx, TEXT("production defaults"), /*bZeroProvedIsExpected*/ false); } //=========================================================================