0f8f5c7523
Documents the 5-phase investigation that uncovered 5 distinct bugs: 1. NameError on models.Metadata (missing import after de-cruft) 2. Mock sprint routing fragile to session_id chain 3. Mock epic branch only matched literal prompt 4. Mock worker session_id fallback leaked across tests 5. refresh_from_project task overwrote self.tracks with disk read The final root cause (bug 5) was a production race condition where the 'refresh_from_project' task replaced self.tracks with a disk read that returned 0 tracks in batched test environments, losing the in-memory tracks that were just appended by self.tracks.append(...). Diagnostic techniques documented: code reading, file-based logging, counter simulation, minimal test reproduction, and id() logging. The id() logging was the breakthrough that proved the list was being replaced. Verified: 3 consecutive PASS runs of the failing test combination; 15 wider tests pass with no regressions.