Spike for the next phase of indoor-walking work: confirm/refute the
hypothesis that FindEnvCollisions's indoor branch rewrites the player's
ContactPlane every frame instead of retaining it across frames (retail's
actual behavior). The previous session shipped 6 commits on a wrong
diagnosis; this probe captures the data BEFORE designing the fix.
Two pieces:
1. Add PhysicsDiagnostics.ProbeContactPlaneEnabled flag, gated on
ACDREAM_PROBE_CONTACT_PLANE=1 (also runtime-toggleable). Helper
methods LogCpBoolWrite / LogCpPlaneWrite / LogCpCellIdWrite emit one
[cp-write] line per CP/LKCP field mutation with caller (walked from
the stack with file+line info) when the value actually changes.
2. Convert the 8 ContactPlane group + LastKnownContactPlane group
fields on CollisionInfo from public fields to public properties
with backing fields. Setters call the diagnostic helpers when the
probe is on; getters/setters are inlined when the flag is off.
Storage layout unchanged. No call site changes — grep confirmed no
ref/out passing or sub-field writes.
Build green; tests green at the existing 8-failure baseline (2 BSPStepUp,
6 MotionInterpreter — all unrelated, pre-existing).
Capture command:
ACDREAM_PROBE_CONTACT_PLANE=1 ACDREAM_PROBE_INDOOR_BSP=1 ACDREAM_DEVTOOLS=1
Spike-only — remove when the retention fix lands and the diagnostic
value is captured in the next phase's spec.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>