6.0 KiB
6.0 KiB
E2E Test Suite Ready: Wilderness Map Generation Parity (Issue #455)
Test Runner
- Command:
npx vitest run tests/wilderness-d2moo-parity.test.ts - Typecheck Command:
npx tsc --noEmit(passes with 0 errors) - Ground Truth Oracle Binary:
/usr/local/google/home/taodao/tmp/d2moo_runner/d2moo_mapgen - Golden Fixtures Directory:
tests/fixtures/d2moo/
Coverage Summary
| Tier | Category | Cases | Description | Current Status |
|---|---|---|---|---|
| Tier 1 | Dynamic Dimensions & Orientation (R1) | 8 | Sizing parity: 96×56 horizontal vs 56×96 vertical Moor; 80×80 Cold Plains & Stony Field | 6 Passed (Oracle) / 2 Failed (TS M1) |
| Tier 2 | Outer River Placement & Suppression (R2) | 3 | Dual-column URiverC (x=80) & LRiverC (x=88); outer tree wall suppression along East river |
2 Passed (Oracle) / 1 Failed (TS M2) |
| Tier 3 | Town Transition Alignment (R4) | 2 | TownSTrans.ds1 (56×8 tiles / 7×1 blocks) anchored to East river edge at (40, 0) |
2 Passed (Oracle & TS) |
| Tier 4 | Landmark Presets & FarAway Metric (R4) | 5 | All 5 canonical landmarks (DenEnt, Pond1, Cott1, Circle, Clover); zero overlap; FarAway metric |dx| + 2*|dy| |
4 Passed (Oracle) / 1 Failed (TS M4) |
| Tier 5 | Secondary Borders & 2×3 Closures (R3) | 2 | 4-pass evolution: Bord5..8 peninsulas and interior isolated 2×3 forest closures (Bord9..12) |
1 Passed (Oracle) / 1 Failed (TS M3) |
| Tier 6 | Orthogonal Dirt Road Polyline (R5) | 2 | Contiguous orthogonal polyline paths; width-2 Bresenham rasterization; 0 spline deviations | 1 Passed (Oracle) / 1 Failed (TS M5) |
| Total | Comprehensive Suite | 22 | Full D2MOO Parity Test Suite | 16 Passed / 6 Failed (TDD Red) |
Feature Checklist & Milestone Mapping
| Feature | Milestone | Requirement | D2MOO Fixture Ground Truth | TS Generator Parity Assertion |
|---|---|---|---|---|
| Dynamic Level Dimensions (96×56 vs 56×96) | M1 | R1 | ✓ Passed | ✕ Red (80×80 static in current wilderness.ts) |
| Level Connection Topology & Flags | M1 | R1 | ✓ Passed | ✕ Red (Missing OUTDOOR_BRIDGE/RIVER flags) |
| Dual-Column Outer River (x=80, 88) | M2 | R2 | ✓ Passed | ✕ Red (Internal river / missing outer boundary swap) |
| Perimeter Tree Border Suppression on River | M2 | R2 | ✓ Passed | ✕ Red (Tree cliffs still placed on East edge) |
| 4-Pass Secondary Border Peninsulas (Bord5..8) | M3 | R3 | ✓ Passed | ✕ Red (Only 1-pass border currently executed) |
| Interior 2×3 Forest Closures (Bord9..12) | M3 | R3 | ✓ Passed | ✕ Red (0 isolated 2×3 enclosures stamped) |
| TownSTrans (56×8) River Edge Alignment | M4 | R4 | ✓ Passed | ✓ Passed (Basic transition presence) |
| Unconditional 5 Landmark Presets | M4 | R4 | ✓ Passed | ✕ Red (Pond mutually excluded when river exists) |
| FarAway Spatial Anti-Overlap Metric | M4 | R4 | ✓ Passed | ✕ Red (DOE not maximizing distance from town) |
| Orthogonal Dirt Road Polyline | M5 | R5 | ✓ Passed | ✕ Red (Catmull-Rom splines currently used) |
| Width-2 Road Bresenham Rasterization | M5 | R5 | ✓ Passed | ✕ Red (0 dirt floor tiles in current Moor output) |
| Base Floor 0x40002 & LvlSub Cluster | M6 | R6 | ✓ Passed | ✕ Red (Global noise sort instead of SubType 6) |
Golden Fixtures Catalog (tests/fixtures/d2moo/)
The following authentic D2MOO v1.13c layouts were extracted via native execution of d2moo_mapgen and checked into the repository for deterministic, hermetic CI verification:
tests/fixtures/d2moo/level2_seed_0x12345678.json: Blood Moor Horizontal 96×56, East river @ columns 10/11, TownSTrans @ (40, 0), all 5 landmarks, 7 peninsulas, 9 closures, 240 connected dirt tiles.tests/fixtures/d2moo/level2_seed_12345.json: Blood Moor Horizontal 96×56, East river @ columns 10/11, all 5 landmarks, 4 peninsulas, 11 closures, 198 connected dirt tiles.tests/fixtures/d2moo/level2_seed_1.json: Blood Moor Vertical 56×96 (7×12 blocks), North-South orientation, all 5 landmarks, 10 peninsulas, 12 closures, 283 connected dirt tiles.tests/fixtures/d2moo/level2_seed_42.json: Blood Moor Vertical 56×96 (7×12 blocks), North-South orientation, all 5 landmarks, 9 peninsulas, 11 closures, 227 connected dirt tiles.tests/fixtures/d2moo/level3_seed_1.json: Cold Plains 80×80 (10×10 blocks), Cave Level 1, Bishibosh camp, Cott1A, Circle, Clover, 13 peninsulas, 17 closures.tests/fixtures/d2moo/level3_seed_0x12345678.json: Cold Plains 80×80, 14 peninsulas, 14 closures.tests/fixtures/d2moo/level4_seed_1.json: Stony Field 80×80 (10×10 blocks), Cairn Stones, Underground Passage in cliff, Moldy Tome, Rakanishu camp, 8 peninsulas, 11 closures.tests/fixtures/d2moo/level4_seed_0x12345678.json: Stony Field 80×80, 8 peninsulas, 10 closures.
Discovered Implementation Defects (Escalated to Milestones M1..M6)
Running npx vitest run tests/wilderness-d2moo-parity.test.ts discovered the following 6 implementation defects in src/game/wilderness.ts:
- Defect 1 (Milestone M1): Blood Moor dimensions are statically hardcoded to 80×80 rather than dynamically calculated as 96×56 (horizontal) or 56×96 (vertical) via
DRLGOUTPLACE_CreateLevelConnections. - Defect 2 (Milestone M2): River does not generate on outer boundary columns
x = nGridWidth - 2(80) andnGridWidth - 1(88), and outer tree wall border pieces (Bord*.ds1) are not suppressed along the river column. - Defect 3 (Milestone M3): Missing 4-pass secondary border evolution (
BorderCliffs,BorderMiddle,BorderCorner,BorderBorder) and interior 2×3 isolated forest closures (Bord9..Bord12). - Defect 4 (Milestone M4): River and Pond are mutually exclusive in
wilderness.ts, preventing authentic concurrent placement of all 5 landmarks (DenEnt,Pond1,Cott1,Circle,Clover). - Defect 5 (Milestone M4): FarAway metric is missing, resulting in non-canonical placement of Den of Evil.
- Defect 6 (Milestone M5): Dirt road generator uses Catmull-Rom splines instead of orthogonal Bresenham width-2 polyline vertex rasterization.