# 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.
