# Task Dependencies ## Dependency Graph ### Step 6 — Implement Tests (AZ-285..AZ-290) | Task | Depends On | Points | Status | |------|-----------|--------|--------| | AZ-285 Test Infrastructure | — | 3 | Done | | AZ-286 TileService Tests | AZ-285 | 3 | Done | | AZ-287 RegionService Tests | AZ-285 | 3 | Done | | AZ-288 RouteService Tests | AZ-285 | 3 | Done | | AZ-289 Integration Route Maps | AZ-285 | 2 | Done | | AZ-290 Non-Functional Tests | AZ-285 | 3 | Done | ### Step 8 — Refactor 02-coupling-refactoring (AZ-309 epic) | Task | Depends On | Points | Status | |------|-----------|--------|--------| | AZ-310 ServeTile via ITileService | — | 3 | Done (In Testing) | | AZ-311 GetTileByLatLon via ITileService | AZ-310 | 2 | Done (In Testing) | | AZ-312 Split Services into 3 csprojs | AZ-311 | 5 | Done (In Testing) | | AZ-313 Update consumers (Api/Tests) | AZ-312 | 3 | Done (In Testing) | | AZ-314 DI registration split | AZ-313 | 2 | Done (In Testing) | | AZ-315 Documentation sync | AZ-314 | 2 | In Progress | ### Step 8 — Refactor 03-code-quality-refactoring (AZ-350 epic) Roadmap: `_docs/04_refactoring/03-code-quality-refactoring/analysis/refactoring_roadmap.md` (4 execution phases). | Task | C-ID | Title | Phase | Depends On | Points | Status | |------|------|-------|-------|-----------|--------|--------| | AZ-351 | C01 | Fix null logger to DatabaseMigrator | 1 | — | 2 | To Do | | AZ-352 | C02 | Replace empty catch in ExtractTileCoordinatesFromFilename | 1 | — | 2 | To Do | | AZ-363 | C10 | Delete write-only counters in RegionRequestQueue | 1 | — | 1 | To Do | | AZ-356 | C05 | Stub endpoints return 501 | 1 | — | 2 | To Do | | AZ-354 | C04 | Strict CORS by default | 1 | — | 2 | To Do | | AZ-353 | C03 | Sanitize 5xx responses via IExceptionHandler | 1 | — | 3 | To Do | | AZ-359 | C07 | Consolidate RegionService catch ladder | 2 | — | 3 | To Do | | AZ-357 | C06 | Drop tile Version concept; new migration | 2 | — | 5 | To Do | | AZ-362 | C09 | Idempotent POST contract | 2 | AZ-353 | 3 | To Do | | AZ-366 | C13 | Consolidate Haversine + filename parser | 3 | — | 2 | To Do | | AZ-377 | C24 | Consolidate Earth constants + 111000 | 3 | AZ-371 | 2 | To Do | | AZ-368 | C15 | Shared TileCsvWriter | 3 | — | 2 | To Do | | AZ-367 | C14 | Shared TileGridStitcher | 3 | AZ-364 | 3 | To Do | | AZ-369 | C16 | Move inline DTOs out of Program.cs | 3 | — | 2 | To Do | | AZ-365 | C12 | Decompose RouteService.CreateRouteAsync | 3 | — | 5 | To Do | | AZ-364 | C11 | Decompose RouteProcessingService god-class | 3 | AZ-366, AZ-367 (folds in AZ-360) | 5 | To Do | | AZ-360 | C08 | Replace IServiceProvider in RouteProcessingService | 3 | AZ-364 (folded) | 2 | To Do | | AZ-371 | C18 | Magic numbers → ProcessingConfig/MapConfig | 4 | — | 3 | To Do | | AZ-370 | C17 | Status / point-type enums + AC RT2 update | 4 | — | 3 | To Do | | AZ-373 | C20 | Clarify / drop MapsVersion | 4 | AZ-357 | 2 | To Do | | AZ-374 | C21 | Typed HttpClient for Google Maps | 4 | — | 2 | To Do | | AZ-375 | C22 | O(N) existing-tile lookup (HashSet) | 4 | AZ-371 | 2 | To Do | | AZ-376 | C23 | Delete unused FindExistingTileAsync | 4 | — | 1 | To Do | | AZ-378 | C25 | Repo `_logger` fields: delete or use | 4 | — | 1 | To Do | | AZ-379 | C26 | Extract repo SELECT column-list constants | 4 | — | 2 | To Do | | AZ-380 | C27 | Delete CalculatePolygonDiagonalDistance | 4 | — | 1 | To Do | | AZ-372 | C19 | dotnet format + NetAnalyzers + Coverlet | 4 | — | 3 | To Do | ## Execution Order ### Step 6 1. AZ-285 (test infrastructure — all others depend on this) 2. AZ-286, AZ-287, AZ-288 (unit tests — can run in parallel) 3. AZ-289 (integration tests — depends on infra only) 4. AZ-290 (non-functional tests — depends on infra only) ### Step 8 (02-coupling-refactoring) 1. AZ-310 → AZ-311 (Phase A: route tile endpoints through ITileService) 2. AZ-312 → AZ-313 → AZ-314 (Phase B: physical split + consumer + DI rewire) 3. AZ-315 (Phase C: docs sync, must be last) ### Step 8 (03-code-quality-refactoring) Phase 1 (Critical fixes): AZ-351 → AZ-352 → AZ-363 → AZ-356 → AZ-354 → AZ-353 Phase 2 (Correctness): AZ-359 → AZ-357 → AZ-362 (AZ-362 needs AZ-353) Phase 3 (Structural cleanup): AZ-366 → AZ-377 → AZ-368 → AZ-367 → AZ-369 → AZ-365 → AZ-364 (folds AZ-360) — AZ-377 needs AZ-371 Phase 4 (Typing/config/tooling/polish): AZ-371 → AZ-370 → AZ-373 → AZ-374 → AZ-375 → AZ-376 → AZ-378 → AZ-379 → AZ-380 → AZ-372 ## Total Effort Step 6: 6 tasks, 17 story points Step 8 (02-coupling-refactoring): 6 tasks, 17 story points Step 8 (03-code-quality-refactoring): 27 tasks, ~66 story points ## Coverage Verification | Test Spec Category | Covered By | |-------------------|------------| | blackbox-tests.md (BT-01..BT-12, BT-N01..BT-N05) | AZ-286, AZ-287, AZ-288, AZ-289 | | performance-tests.md (PT-01..PT-06) | AZ-290 | | resilience-tests.md (RS-01..RS-06) | AZ-290 | | security-tests.md (SEC-01..SEC-04) | AZ-290 | | resource-limit-tests.md (RL-01..RL-04) | AZ-290 | | traceability-matrix.md (100% AC coverage) | All tasks combined |