Fix: stagger concurrent-dispatch emits to eliminate Windows multiplex race
Summary
- Round-10 fix for
Listening_ConcurrentDispatches_OutputsIsolatedByTicket— stagger emit timestamps (sleep 2/4/6s instead of uniform 2s) so all 3 markers hit the agent's output pipeline at distinct moments - Prior round-9 (uniform SleepThenEcho-2s) was still flaking — Phase 13 PR-3 cleanup re-run (workflow run 25543530379) saw resultB.AllText empty even though ExitCode=0, meaning dispatch B's script ran cleanly but its log lines never surfaced through Halibut
- Concurrent-isolation contract still exercised — all 3 scripts run simultaneously during their sleep phases
Diagnosis
With all 3 emits at ~T+2.3s (within ~200ms of each other), the agent's LocalScriptService was multiplexing 3 simultaneous stdout bursts. If anything in its per-ticket queue / observer routing races, the middle ticket is the most likely to lose output. Empirical pattern: resultB.AllText == "" with resultB.ExitCode == 0.
Round 10 timing
| Time | Activity |
|---|---|
| T=0ms | Dispatch A starts (sleep 2) |
| T=100ms | Dispatch B starts (sleep 4) |
| T=200ms | Dispatch C starts (sleep 6) |
| T≈2.3s | A emits "ticket-A-marker" — agent's pipeline handles ALONE |
| T≈4.4s | B emits "ticket-B-marker" — agent's pipeline handles ALONE |
| T≈6.5s | C emits "ticket-C-marker" — agent's pipeline handles ALONE |
Concurrent overlap window: T=0.2s to T=2.3s (all 3 running, all 3 sleeping = 2.1s of genuine concurrent execution). Then A finishes; B+C still running. Then B finishes; C still running. Concurrent isolation contract still exercised.
Trade-off
Total wall-clock ~7s (was ~3s). Acceptable — flakes burn more CI time than this slow-down does (PR re-runs, retries, debugging).
Test plan
-
CI on windows-latestrunsCategory=TentacleDeployE2E:-
Listening_ConcurrentDispatches_OutputsIsolatedByTicketpasses consistently across multiple runs
-
-
dotnet build tests/Squid.WindowsTentacleE2ETests/Squid.WindowsTentacleE2ETests.csproj— 0 errors