P0 Tasks 6 (autonomous half) + 7. FindCellList_DoorwayThreshold_MatchesRetailTrace asserts acdream's pick == each captured retail pick; skips until the capture fixture lands. PvsConformanceTests scaffolds the render visible-set golden (skipped; filled in P4). ConformanceDats.FixturesDir resolves fixtures from the source tree (issue98 pattern). Notes record: existing retail traces are collision-only (no membership) so the strict P1 gate needs the one live capture; plus the P1 re-scope finding (Stage-1 membership already on this branch). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.3 KiB
P0 — Conformance apparatus notes (characterized topology + goldens)
2026-06-03. Companion to docs/superpowers/plans/2026-06-03-p0-conformance-apparatus.md.
Source of truth for the cell ids + golden inputs the P0 conformance tests pin. All values below
were characterized from the real client dats (not guessed) by
CottageDoorwayCharacterizationTests against %USERPROFILE%\Documents\Asheron's Call.
Characterized Holtburg (landblock 0xA9B4) indoor neighborhood
Scanned 0xA9B40140..0xA9B4017F. All cells load with a real ContainmentBsp and seenOutside=1.
Cells share a per-BUILDING world origin (the building's reference frame). The distinct buildings:
| Cell range | World origin | Stab | Identity |
|---|---|---|---|
0140..0150 (17 cells) |
(130.50, 11.50, 94.00) | 17 | Cottage-with-cellar (#98 cellar saga; exit portals at 0145,014C,014E,014F,0150) |
0151..0169 (25 cells) |
(107.50, 36.00, 94.00) | 24 | Larger building (inn) |
016A..016E (5 cells) |
(79.50, 37.50, 94.00) | 4 | Small building |
016F..0175 (7 cells) |
(161.93, 7.50, 94.00) | 6 | THE doorway-threshold building (master-plan 0170/0171) |
0176..0178 |
(65.21, 156.63, 66.00) | 2 | — |
0179..017A |
(158.18, 37.71, 94.00) | 1 | — |
017B..017F |
(161.72, 105.05, 66.00) | 4 | — |
The pinned threshold topology (master-plan 0031↔0170↔0171)
Building at world origin (161.93, 7.50, 94.00):
| Cell | Role | Portal dests | seenOutside | BSP |
|---|---|---|---|---|
0xA9B40170 |
vestibule / doorway | [0xFFFF (exit→outdoor), 0x0171] |
1 | real |
0xA9B40171 |
room (behind the door) | [0x0170, 0x0173, 0x0175] |
1 | real |
Grid math confirms the outdoor side: origin (161.93, 7.50) → gridX = ⌊161.93/24⌋ = 6,
gridY = ⌊7.5/24⌋ = 0 → landcell id 6*8 + 0 + 1 = 49 = 0x31 → outdoor landcell 0xA9B40031.
So the player crossing the doorway traverses 0031 (outdoor) → 0170 (vestibule, via the 0xFFFF exit portal) → 0171 (room) — exactly the master-plan ping-pong 0031↔0170↔0171. Verified real.
Naming note: a 2026-05-21 capture dir called
0170/0171the "inn 2nd floor"; that label was loose. By geometry it is the 7-cell building at (161.93, 7.50). Identity (cottage vs inn) is irrelevant to the conformance — what matters is0170carries the exit portal (the doorway) and0171is the room behind it.
Golden interior points (verified point_in_cell == true)
Cell-LOCAL points whose EnvCell.PointInCell(world) returns true (the world form is
Vector3.Transform(local, cellPhysics.WorldTransform)):
| Cell | Interior LOCAL point | Interior WORLD point | Notes |
|---|---|---|---|
0xA9B40170 |
(5.865, -8.449, 0.417) | (156.06, 15.95, 94.42) | 115/125 grid-inset points inside (small/irregular vestibule) |
0xA9B40171 |
(6.55, -3.25, 4.60) | (157.01, 13.69, 95.53)* | bounds-center = bsphere origin; 125/125 inside (clean box) |
* world recomputed by the test at runtime via the cell's WorldTransform; the value above is the firstInside probe — the canonical bsphere-origin local (6.55,-3.25,4.60) is also fully interior.
These are retail-faithful by construction: the ContainmentBsp is loaded from the same dats retail loads, so a geometrically-correct containment answer is the retail answer.
Golden provenance summary
| Golden | Provenance | Status |
|---|---|---|
point_in_cell (interior true, far-away false) |
geometric (real dat BSP) | autonomous (Task 3) |
find_cell_list deep-inside picks 0171/0170 |
geometric (real dat cells) | autonomous (Task 4) |
find_cell_list doorway-threshold pick |
retail cdb trace | Task 6 — USER GATE / mine existing traces |
| PVS visible-set | retail cdb cell_draw_list trace |
deferred to P4 (Task 7 scaffold) |
Existing retail traces — mined, NOT usable for membership
docs/research/2026-05-21-a6-captures/*/retail.log + retail.decoded.log were grepped for
change_cell / curr_cell / find_cell_list / cell=0x / insert_into_cell. Zero matches in
any retail log — all 15,492 membership/cell-id matches are in the paired acdream.log files
(our own probe output). The committed retail traces are collision-only (find_collisions
hit-counters, set_neg_poly_hit, etc.); they carry no membership cell-id or position. So the
retail-trace-backed threshold golden cannot be built from existing data — a live capture is
required (tools/cdb/find-cell-list-capture.cdb).
P0 status / P1-entry checklist
Autonomous apparatus: COMPLETE + GREEN. (Conformance suite 58 pass / 1 skip / 0 fail.)
- ✅ Dat-backed fixture loader (
ConformanceDats). - ✅ Characterized + pinned cottage-doorway topology (
0031↔0170↔0171verified real). - ✅
point_in_cellgoldens vs real dat BSP. - ✅
find_cell_listunambiguous goldens (interior picks + stale-seed re-pick stability). - ✅ Retail-trace parser (
RetailTrace, 4 tests) + cdb capture script + README. - ✅ PVS-golden scaffold (skipped; filled in P4).
- ⏳
FindCellList_DoorwayThreshold_MatchesRetailTrace— wired, skips until the capture fixtureConformance/Fixtures/find-cell-list-threshold.logexists.
P0 gate for P1 (≥1 retail-trace-backed assertion): PENDING the one user-gated capture.
The existing traces don't satisfy it (collision-only). To meet the strict gate, run
tools/cdb/find-cell-list-capture.cdb against live retail at the cottage doorway (its README is
the runbook), decode, drop the log at the fixture path, and re-run the threshold test:
- GREEN → acdream already matches retail at the threshold; P1's membership port preserves it.
- RED → the P1 divergence, captured as a documents-the-bug conformance test (do not weaken).
Re-scope note for P1 (discovered during P0): this branch already carries the membership
"Stage 1" work the master plan's §2 "acdream now" column lists as partial — CellArray (ordered
CELLARRAY / R1 flap fix), FindCellSet's interior-wins pick (cites pc:308788-308825),
RunCheckOtherCellsAndAdvance (collide-then-pick), swept sp.CurCellId return, player-only
UpdatePlayerCurrCell. P1's REAL remaining scope is narrower: intrinsic building entry (delete
CheckBuildingTransit) + uniform find_env_collisions (delete the cellLow >= 0x0100 fork) +
demote ResolveCellId to seed-only. Re-confirm against the code when P1 starts.