37 lines
2.1 KiB
Markdown
37 lines
2.1 KiB
Markdown
# Dependencies
|
||
|
||
```
|
||
Task 1: Workspace scaffold (no deps)
|
||
├── Task 2: Geometry (1)
|
||
│ └── Task 3: Grid<T> (1, 2)
|
||
│ └── Task 5: Data model — Tile/Region/Map/ASCII (2, 3)
|
||
│ └── Task 6: Engine — GenContext/Pass/Pipeline/Blackboard (4, 5)
|
||
│ ├── Task 7: BspPartition pass (6)
|
||
│ ├── Task 8: RoomCarver pass (6)
|
||
│ ├── Task 9: MstConnect pass (6)
|
||
│ ├── Task 10: CorridorCarver pass (6)
|
||
│ └── Task 11: DoorPlacer pass (6)
|
||
│ └── Task 12: Dungeon recipe + integration tests (7,8,9,10,11)
|
||
│ └── Task 13: reikhelm-viz renderer (5, 12)
|
||
└── Task 4: RNG (1) ← independent of the geometry/grid chain
|
||
```
|
||
|
||
## Parallelizable batches
|
||
|
||
- After Task 1: **[2, 4]** in parallel.
|
||
- Task 3 after 2 (4 may still be running alongside).
|
||
- Task 5 after 3.
|
||
- Task 6 after **both** 4 and 5.
|
||
- After Task 6: **[7, 8, 9, 10, 11]** — the five passes, all parallel. This is the largest parallel batch. They share only the append-only `passes/mod.rs` wiring file (orchestrator merges) and the documented inter-pass data contract (README); each is unit-tested against a hand-built `GenContext`, so none blocks another.
|
||
- Task 12 after all of 7–11 (it wires them into the pipeline and runs integration tests).
|
||
- Task 13 after 12 (it calls the `dungeon` recipe).
|
||
|
||
## Critical path
|
||
|
||
1 → 2 → 3 → 5 → 6 → (any one pass) → 12 → 13.
|
||
|
||
## Integration notes
|
||
|
||
- `Pass` trait + `GenContext` (Task 6) is the keystone contract every pass consumes. Lock its signature before dispatching 7–11.
|
||
- The `Edge.at: Option<Point>` field (set to `None` by Task 9, populated by Task 11) is the one cross-pass field write — verify it survives the pipeline in Task 12's tests.
|
||
- Determinism is verified at two levels: per-pass tests assert reproducibility given a fixed sub-stream; Task 12 asserts whole-map reproducibility and `run` == `run_with_snapshots` for the same seed.
|