From 9b9bb6515f04741d22956001512f4db7ff8f38be Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 7 Aug 2026 00:27:57 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20the=20#32=20'fix=20failed'=20verdict=20?= =?UTF-8?q?is=20VOID=20=E2=80=94=20the=20tested=20binary=20never=20contain?= =?UTF-8?q?ed=20the=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two checkouts, one relative launch path. Edits and builds ran in the main repo; every client launch ran from a PowerShell shell whose cwd was still the session worktree, so 'dotnet run --project src\AcDream.App\...' executed the worktree's 08-06 22:35 binary — #333 present, #32 fix, InitContactPlane and every #338 probe absent. Byte-proof both ways: 0 occurrences of the fix strings in the worktree's Core.dll, both present in the main repo's. Everything the previous entry concluded is therefore void: the byte-identical capture was the OLD code re-running (expected), the three probe silences were one fact (the instrumented binary never ran), and the 26,358-write attribution table is pre-fix baseline data of the old binary only. #32's fix returns to UNTESTED, with no evidence against it. The verification that was supposed to catch this confirmed the wrong binary: the DLL byte-check ran against the OTHER checkout's bin. So the self-report now prints typeof(PhysicsDiagnostics).Assembly.Location as its second line — binary identity becomes a recorded fact inside every capture instead of an inference from file timestamps afterwards. Memory updated with the multi-checkout rule: absolute launch paths, verify each shell's cwd before the first launch. Co-Authored-By: Claude Opus 5 --- docs/ISSUES.md | 34 ++++++++++++++++++- .../Physics/PhysicsDiagnostics.cs | 31 +++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index ac6dd62b..064fdd7b 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -24,7 +24,39 @@ What does NOT go here: - Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending. - Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed. -## #32 UPDATE 2026-08-07 — the set_contact_plane split is NECESSARY BUT NOT SUFFICIENT +## #32 UPDATE 2026-08-07, SECOND CORRECTION — the fix was NEVER IN THE TESTED BINARY; every conclusion in the entry below is void + +**Root cause of the contradiction: two checkouts and a relative launch path.** +The Bash shell (edits, builds, byte-checks) worked in the MAIN repo. The +PowerShell shell (every client launch) had its working directory pinned to the +`resume-session-e0bd03e1-d5bf45` WORKTREE, and the launch command uses the +relative `src\AcDream.App\AcDream.App.csproj` — so every post-merge launch ran +the worktree's binary, built 08-06 22:35, which contains #333 but neither the +#32 fix, `InitContactPlane`, nor any #338 probe. Byte-proof: the worktree's +`AcDream.Core.dll` has 0 occurrences of both strings; the main repo's has both. + +Consequently: +- **"The fix did not change the live behaviour" is VOID.** The fix was not + present. The byte-identical capture is the EXPECTED result of re-running the + old code, and says nothing about the fix. +- The probe silences and the unconditional self-report's silence are all the + same fact: the instrumented binary never ran. +- The 26,358-write attribution table below is a capture OF THE OLD BINARY. Its + line numbers map to old source. It remains useful as pre-fix baseline data + and nothing else. +- **#32's fix at `332045c7` returns to UNTESTED status, awaiting its first + actual live run.** The suspected body round-trip loop (seed-from-body / + write-back-to-body) remains a real question to check IF the genuine fix + still fails — but there is currently no evidence against the fix at all. + +**Process rule, added to the stale-artifacts memory: a multi-checkout session +must launch by ABSOLUTE project path, and the first line of any A/B run's log +must print the loaded assembly's path** (`typeof(PhysicsEngine).Assembly.Location`) +so binary identity is in the capture itself, not inferred afterwards. + +*The entry below is retained as the record of the error.* + +## #32 UPDATE 2026-08-07 — the set_contact_plane split is NECESSARY BUT NOT SUFFICIENT [VOID — see above] **The fix at `332045c7` did not change the live behaviour.** Re-run at Rithwic with the same probe produced a **byte-identical** capture: six diff --git a/src/AcDream.Core/Physics/PhysicsDiagnostics.cs b/src/AcDream.Core/Physics/PhysicsDiagnostics.cs index 385e0639..e7924b53 100644 --- a/src/AcDream.Core/Physics/PhysicsDiagnostics.cs +++ b/src/AcDream.Core/Physics/PhysicsDiagnostics.cs @@ -2592,6 +2592,37 @@ public static class PhysicsDiagnostics private static readonly object _stepHeightGate = new(); private static readonly Dictionary _stepHeightSeen = new(); + private static int _stepHeightAnnounced; + + /// + /// #338 (TEMPORARY). Prints ONCE per process, regardless of the flag, from + /// the resolve site. Two placements of this probe produced no output at + /// all, and silence cannot distinguish "the site is never reached" from + /// "the flag is false" — so the instrument reports its own state rather + /// than leaving that to inference. Reaching this call proves the site + /// executes; the printed values say whether the flag and the player filter + /// would have let anything through. + /// + public static void AnnounceStepHeightProbeOnce(bool isPlayerMover) + { + if (System.Threading.Interlocked.Exchange(ref _stepHeightAnnounced, 1) != 0) + return; + + Console.WriteLine( + $"[step-h] SELF-REPORT: resolve site reached. " + + $"ProbeStepHeightsEnabled={ProbeStepHeightsEnabled} " + + $"(ACDREAM_PROBE_STEP_HEIGHTS=" + + $"{Environment.GetEnvironmentVariable("ACDREAM_PROBE_STEP_HEIGHTS") ?? ""}) " + + $"firstMoverIsPlayer={isPlayerMover}"); + // Which BINARY is this? The 2026-08-07 wrong-checkout incident: two + // checkouts, a relative launch path, and every "test" of a fix ran a + // binary that did not contain it. Assembly identity belongs IN the + // capture, not inferred from bin timestamps afterwards. + Console.WriteLine( + $"[step-h] SELF-REPORT: assembly=" + + $"{typeof(PhysicsDiagnostics).Assembly.Location}"); + } + /// /// One [step-h] line. Self-guards on /// , and is edge-triggered per site: