plan(phys): A6.P3 slice 1 — indoor ContactPlane retention (Finding 2 fix)
Eight-task plan to close A6.P2 Finding 2 (ContactPlane resynthesis
blowup, ~1,470x more CP writes than retail). Strategy: strip the
synthesis path inside Transition.FindEnvCollisions indoor branch +
add per-transition Mechanism B (LKCP restore) so cross-frame CP
retention flows via the existing retail mechanisms instead of
per-frame TryFindIndoorWalkablePlane synthesis.
Plan structure:
T1 — Research note (retail Mechanism B oracle) — mandatory before code.
T2 — Add ContactPlaneWriteCount probe (test instrumentation).
T3 — Write failing IndoorContactPlaneRetentionTests regression.
T4 — Add Mechanism B (LKCP restore) per-transition.
T5 — Strip indoor walkable synthesis from FindEnvCollisions.
T6 — Re-capture scen3 + verify cp-write ratio drops to ≤200.
T7 — Re-capture scen1 + scen5 for full slice 1 sign-off.
T8 — Bookkeeping (findings doc, roadmap, CLAUDE.md).
Out of scope (deferred to slice 2 or A6.P4):
- Mechanism C (frames_stationary_fall flat-CP synthesis); add only
if slice 1 visual verification shows first-frame fall-through.
- Finding 3 (cell-resolver sling-out); independent fix surface.
- TryFindIndoorWalkablePlane definition deletion (A6.P4).
- Issue #95 (visibility blowup; outside A6 scope).
Acceptance: scen3 cp-write ≤ 200 (vs current 86,748); scen1/5 ratio
≤ 10x; visual verification at Holtburg inn 2nd floor passes;
1147+8 baseline maintained.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>