Why: Popen returns before python http.server finishes binding, so on slower CI runners recover won the race and started the service, turning the port-stolen case into a flake. Evidence: single-case rerun OK locally; make test-governance rerun recorded on the task card; CI on the new head is authoritative. Impact: test synchronization only. Refs: .task/feature-svc-autorecover.md