Dann ist das Bild klar: **Dein Script hängt sehr wahrscheinlich schon VOR dem eigentlichen Run**, und zwar in `discover_phase2_files()`.

Warum ich das so eindeutig sage:

- `run.log` bleibt **0 Bytes**, weil der `[START]`-Eintrag erst **nach** `discover_phase2_files()` geschrieben wird.
- `scores.jsonl` bleibt **0 Bytes**, weil noch kein Block ...