T6 (BR-7) C4: straddle-only outside-add (A6.P5 widening DELETED) + #90 stickiness removed
The two remaining flagged workarounds retired, per the BR-7 plan +
the WF1 [MEDIUM] correction (re-gate, do NOT delete the outside-add):
1. A6.P5 hasExitPortal topology widening DELETED. Outdoor cells enter the
collision cell array ONLY on the retail straddle gate - |dist| <
radius + F_EPSILON against an exterior portal plane
(CEnvCell::find_transit_cells Ghidra 0x0052c820, gate 0052c9d6,
live-binary verified) - the same flag that already gated the
membership pick (#112 rider). The widening existed so outdoor-
registered doors stayed findable from indoor cells under the old flat
registry query; with per-cell shadow lists the door is found in the
straddle-admitted outdoor cell's own list (tick-13558 pin holds).
The hasExitPortal out-param + plumbing deleted from
FindTransitCellsSphere; the AddAllOutsideCells call in
BuildCellSetAndPickContaining re-gated on exitOutsideStraddle
(once-per-walk = retail CELLARRAY.added_outside).
2. #90 ResolveCellId sphere-overlap stickiness REMOVED (the 4ca3596
workaround, deferred-to-A6.P4 in the physics digest). It was dead
code: the method's only caller is FindEnvCollisions' cache-null TEST
fallback, and the indoor branch (where the stickiness lived) required
a non-null DataCache. Production membership flows exclusively through
the collide-then-pick advance whose ordered-array hysteresis (current
cell at index 0, interior-wins-break) is the retail mechanism the
workaround approximated. ResolveCellId reduced to the bare
prefix-preserving outdoor re-derive, documented test-only.
Test updates (pins of the deleted behaviors inverted to retail):
- A6P5_BuildCellSetFromIndoorStart_ReachesDoorOutdoorCell (asserted the
topology widening verbatim) -> DeepInteriorSphere_NoStraddle_
AddsNoOutdoorCells: a deep-interior sphere admits NO outdoor cells.
- A6P5_BuildCellSetFromAlcove... -> AlcoveSphere_StraddlesExitPortal_
ReachesDoorOutdoorCell (the captured alcove position genuinely
straddles - the retail-positive half).
- Issue112MembershipTests straddle pin + the second-sphere straddle test
updated to the single-flag signature.
Suites: Core 1416/0/2, App 225, UI 420, Net 294 - green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
dbfbf8506c
commit
ca4b482f8b
5 changed files with 101 additions and 205 deletions
|
|
@ -101,21 +101,22 @@ public sealed class Issue112MembershipTests
|
|||
var cell102 = cache.GetCellStruct(0xA9B30102u)!;
|
||||
|
||||
// (a) Deep inside the room, 3 m from the door plane: the cell HAS an
|
||||
// exterior portal (topology flag) but no straddle → no outdoor
|
||||
// admission flag (retail: var_44 stays 0, add_all_outside skipped).
|
||||
// exterior portal but no straddle → no outdoor admission flag
|
||||
// (retail: var_44 stays 0, add_all_outside skipped). (BR-7 C4
|
||||
// deleted the non-retail hasExitPortal topology output — the
|
||||
// straddle flag is the only outdoor-admission signal, like
|
||||
// retail.)
|
||||
var farCandidates = new List<uint>();
|
||||
CellTransit.FindTransitCellsSphere(
|
||||
cache, cell102, 0xA9B30102u, new Vector3(183.0f, 86.5f, 117.0f),
|
||||
FootRadius, farCandidates, out bool farStraddle, out bool farHasExit);
|
||||
Assert.True(farHasExit);
|
||||
FootRadius, farCandidates, out bool farStraddle);
|
||||
Assert.False(farStraddle);
|
||||
|
||||
// (b) At the door plane (0.30 m away < 0.48 radius): straddle fires.
|
||||
var nearCandidates = new List<uint>();
|
||||
CellTransit.FindTransitCellsSphere(
|
||||
cache, cell102, 0xA9B30102u, new Vector3(185.70f, 85.5f, 117.0f),
|
||||
FootRadius, nearCandidates, out bool nearStraddle, out bool nearHasExit);
|
||||
Assert.True(nearHasExit);
|
||||
FootRadius, nearCandidates, out bool nearStraddle);
|
||||
Assert.True(nearStraddle);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue