docs: the #32 'fix failed' verdict is VOID — the tested binary never contained the fix
Some checks are pending
Headless portability / portable-headless (ubuntu-latest) (push) Waiting to run
Headless portability / portable-headless (windows-latest) (push) Waiting to run
Headless portability / linux-graphical (push) Waiting to run
Headless portability / linux-vulkan (push) Waiting to run

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 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-07 00:27:57 +02:00
parent ee4d328408
commit 9b9bb6515f
2 changed files with 64 additions and 1 deletions

View file

@ -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

View file

@ -2592,6 +2592,37 @@ public static class PhysicsDiagnostics
private static readonly object _stepHeightGate = new();
private static readonly Dictionary<string, (float Up, float Down)> _stepHeightSeen = new();
private static int _stepHeightAnnounced;
/// <summary>
/// #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.
/// </summary>
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") ?? "<unset>"}) "
+ $"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}");
}
/// <summary>
/// One <c>[step-h]</c> line. Self-guards on
/// <see cref="ProbeStepHeightsEnabled"/>, and is edge-triggered per site: