ship(phys): A6.P3 slice 1 — Indoor ContactPlane retention COMPLETE

Slice 1 ships the strip-synthesis + Mechanism B (LKCP restore) fix
addressing A6.P2 Finding 2. Includes:

  - scen3_inn_2nd_floor_postfix paired capture (retail.log + decoded
    + acdream.log) as verification artifact. acdream cp-write count
    dropped from 86,748 to 25,082; per-unit-of-activity rate dropped
    63x (164.61 -> 2.60 cp-writes per cell-cache event).

  - Findings doc (docs/research/2026-05-21-a6-cdb-capture-findings.md)
    appended with slice 1 SHIPPED section: commit map, scen2/scen3
    pre/post comparison tables, user happy-test results, status of
    each A6.P2 finding (Finding 1 CLOSED as side-effect, Finding 2
    PARTIALLY CLOSED with remaining 99.3% from L622 seed flagged
    as #96, Finding 3 + #95 still open), slice 2 recommendation.

  - Issue #96 filed: "Per-tick PhysicsEngine.ResolveWithTransition CP
    seed contributes 99.3% of post-slice-1 CP writes." Slice 2 target.
    Sketch options: remove entirely / gate by change-detection / no-op
    guard inside SetContactPlane.

  - Issue #97 filed: "Phantom collisions + occasional fall-through on
    indoor 2nd floor." User-reported during happy-testing. HYPOTHESIS:
    side-effect of #96; falsifiable by re-testing post-slice-2.

  - CLAUDE.md updated: Currently-working-toward block now points at
    A6.P3 slice 2 (#96) as the active phase. M1.5 building/cellar
    demo half is ACHIEVABLE NOW (slice 1 unblocked the physics).

  - Roadmap updated: A6.P3 broken into 3 slices, slice 1 marked
    SHIPPED with commit history.

KEY USER-VISIBLE OUTCOME: stairs + cellar descent now WORK in acdream
(user happy-test confirmed walking up/down inn stairs multiple times,
walking down to cellar). A6.P2 Finding 1 (dispatcher entry frequency
mismatch) confirmed as secondary effect of Finding 2 — closed without
explicit Finding 1 work, as A6.P2 hypothesized.

REMAINING CONCERNS for slice 2 + future:
  - L622 per-tick seed (#96) still firing 24,906 times in scen3 postfix
  - Phantom collisions + fall-through on 2nd floor (#97)
  - See-through-walls indoors (#95, separate scope)
  - Indoor lighting broken (A7 scope)

Test suite: 1148 pass + 8 pre-existing fail (baseline maintained;
T3 IndoorContactPlaneRetentionTests adds the +1).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-22 10:11:44 +02:00
parent 066568a711
commit f04ea90050
7 changed files with 127435 additions and 24 deletions

View file

@ -174,15 +174,38 @@ successfully 2026-04-30 for the steep-roof case. Matching binaries
deferred to optional A6.P1.5 (entry+exit BPs in cdb script);
not blocking A6.P3. M1.5 symptom coverage matrix shows every
in-scope physics symptom mapped to at least one finding.
- **A6.P3 — Fix the BSP correction paths** (~35 days). Sequencing
per A6.P2 recommendation: Finding 2 first (highest-confidence
single-cause; suspect site is `Transition.FindEnvCollisions` indoor
branch + the retention mechanisms that should keep ContactPlane
across frames). Re-run scen1-5 captures after the PR. If CP-write
ratios drop from ~1,000× to ~1×, Finding 2 is closed and Finding 1
may close as side-effect. Then Finding 3 (cell-resolver stickiness
in ResolveCellId + CheckBuildingTransit; same PR also removes #90
workaround). Issue #95 is NOT in A6.P3 scope.
- **A6.P3 — Fix the BSP correction paths** (~35 days). Multi-slice.
- **✓ SHIPPED — A6.P3 slice 1 — Indoor ContactPlane retention**
(2026-05-21, commits `ba9655f` plan + `6b4be7f`/`c6bc2b9` T1
research + `869edd9` T2 counter + `36975ef`/`a32f569` T3 test +
`5aba071` T4 Mechanism B + `5f7722a`/`39fc037`/`bd5fe2e` T5 strip
+ `066568a` scen2 postfix proof + `<this commit>` T8 bookkeeping).
Stripped `TryFindIndoorWalkablePlane` synthesis path from
`Transition.FindEnvCollisions` indoor branch (matches retail's
tiny `CEnvCell::find_env_collisions` shape at acclient_2013_pseudo_c.txt:309573).
Added Mechanism B (LKCP restore) in `Transition.ValidateTransition`
matching retail's pattern at acclient_2013_pseudo_c.txt:272565-272583.
Per-unit-of-activity CP-write rate dropped 63×. **Unexpected win:
stairs + cellar descent now WORK in acdream** (user happy-test
confirmed). A6.P2 Finding 1 (dispatcher entry frequency mismatch)
CLOSED as side-effect (dispatcher shape now retail-like). Finding 2
PARTIALLY CLOSED — 99.3% of remaining cp-writes come from L622
per-tick body-CP seed at `PhysicsEngine.ResolveWithTransition:622`
(filed as issue #96 for slice 2).
- **A6.P3 slice 2 — Gate L622 per-tick CP seed** (issue #96,
~1 day). Either remove the L622 seed entirely (rely on Mechanism
A + Mechanism B for CP propagation) OR gate it to fire only on
`body.ContactPlane` change. Verify slope walking + stair-climb +
cellar still work. Target: scen3 cp-write ≤ 100 (matches retail
BP7 ~0). Re-test phantom collisions + fall-through (issue #97,
hypothesized side-effect of #96) post-slice-2.
- **A6.P3 slice 3 — Finding 3 (cell-resolver sling-out)** (if not
closed as side-effect of slice 1+2). Re-capture scen4 first to
confirm whether sling-out persists. Otherwise: narrow fix in
`ResolveCellId` + `CheckBuildingTransit` cell-stickiness; remove
#90 workaround.
- Issue #95 (visibility blowup) NOT in A6.P3 scope — separate work
surface.
- **A6.P4 — Remove workarounds + visual verification** (~1 day after
P3). Revert #90 sphere-overlap stickiness in
`PhysicsEngine.ResolveCellId`. Delete `Transition.TryFindIndoorWalkablePlane`