"Generate PGO data" fails intermittently when a VB-Cable / VAC endpoint
isn't enumerable at the moment FreeDV starts a UT: FreeDV pops a fatal
"device cannot be found" message box and aborts.
The old "Start Windows Audio Service" step only polled WMI
Win32_SoundDevice (driver nodes, not the MMDevice endpoints FreeDV
uses), had an operator-precedence bug in its until-condition
((A -and B) -or C), ran once minutes before the test, and never checked
the specific endpoints the job needs.
* ci/Wait-AudioDevices.ps1: restarts AudioEndpointBuilder/audiosrv and
polls "Get-AudioDevice -List" (the active-endpoint surface FreeDV
actually enumerates) until every required playback/recording endpoint
is present, nudging the audio stack again halfway through and dumping
full diagnostics before failing on timeout.
* ci/Invoke-PgoProfileCollection.ps1: runs the endpoint wait +
GeneratePGOProfiles.ps1 and retries the whole thing up to 3x, since an
endpoint can also drop mid-run right after SoX releases the capture
device. Partial .profraw files are cleared between attempts.
* collect-pgo-profile now calls these; the Generate PGO data timeout
goes 10 -> 25 min to cover the retries.
* GeneratePGOProfiles.ps1: best-effort wait for the endpoints before
each of the TX and RX passes.
The identical "Start Windows Audio Service" step in the test job is left
as-is here; this change is scoped to collect-pgo-profile.
Claude-Session: https://claude.ai/code/session_01AYJXLpaEyPTsegX93QzE1a
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>