subprocess.run with capture_output=True blocked until process exit, dumping all output at once. Now uses Popen with line-by-line reading, -u flag, and PYTHONUNBUFFERED=1 so logs stream in real time. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>