# Dependencies ``` Task 1: Workspace scaffold (no deps) ├── Task 2: Geometry (1) │ └── Task 3: Grid (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` 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.