diablo2-web/TEST_READY.md

61 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
1. `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.
2. `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.
3. `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.
4. `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.
5. `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.
6. `tests/fixtures/d2moo/level3_seed_0x12345678.json`: Cold Plains 80×80, 14 peninsulas, 14 closures.
7. `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.
8. `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`:
1. **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`.
2. **Defect 2 (Milestone M2)**: River does not generate on outer boundary columns `x = nGridWidth - 2` (80) and `nGridWidth - 1` (88), and outer tree wall border pieces (`Bord*.ds1`) are not suppressed along the river column.
3. **Defect 3 (Milestone M3)**: Missing 4-pass secondary border evolution (`BorderCliffs`, `BorderMiddle`, `BorderCorner`, `BorderBorder`) and interior 2×3 isolated forest closures (`Bord9..Bord12`).
4. **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`).
5. **Defect 5 (Milestone M4)**: FarAway metric is missing, resulting in non-canonical placement of Den of Evil.
6. **Defect 6 (Milestone M5)**: Dirt road generator uses Catmull-Rom splines instead of orthogonal Bresenham width-2 polyline vertex rasterization.