fix(ci): falcon-hello-demo raced on a hardcoded port — the flake that failed #365 - #383
Merged
Conversation
…eads as a regression PR #365's verification gate failed on one step out of 163: [ FAIL (rc=1)] FV-FALCON-WORLD-001: scripts/falcon-hello-demo.sh [falcon-hello-demo] vehicle sent 0 heartbeat(s) [falcon-hello-demo] FAIL: expected at least 8 heartbeats, got 0 error: bind 127.0.0.1:14701: Address already in use (os error 98) Nothing was wrong with the code. The demo hardcoded the 14700/14701 pair, the gate runners are SHARED, and two jobs on one runner fight for the same socket. That is the worst shape a flake can take on a REQUIRED check: it fails loudly, names a plausible-sounding functional symptom ("got 0 heartbeats"), and the actual cause is one line further down. #365 is a 105-artifact promotion PR, so the obvious reading was that a promotion had broken something. FIX: probe for a free port pair instead of assuming one. An explicit FALCON_HELLO_PORT_BASE still wins, so a bench operator can pin it, and if 64 probes somehow all fail the script falls back to the historical default rather than erroring — a demo that cannot find a port should still try, not add a second failure mode. MEASURED, both directions, three concurrent runs: forced to the old fixed base 2 of 3 FAIL "Address already in use" x3 "expected at least 8 heartbeats, got 0" x2 with the probe 3 of 3 PASS, 14 heartbeats each The negative case is the real bug reproduced on purpose, not a synthetic stand-in — #365's exact error text, from the exact condition. Refs #365, #345 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Verify-Filter: (has-tag "v0.1")
#365's gate failed on one step out of 163, and not because of anything in #365:
The demo hardcoded the
14700/14701pair, the gate runners are shared, and twojobs on one runner fight for the same socket.
This is the worst shape a flake can take on a required check: it fails loudly, names
a plausible functional symptom ("got 0 heartbeats"), and the real cause is one line
further down. #365 promotes 105 artifacts, so the natural reading was that a
promotion had broken something.
Fix
Probe for a free pair instead of assuming one.
FALCON_HELLO_PORT_BASEstill winsso a bench operator can pin it; if 64 probes all fail it falls back to the historical
default rather than erroring — a demo that can't find a port should still try, not
add a second failure mode.
Measured, both directions, 3 concurrent runs
Address already in use×3,got 0 heartbeats×2The negative case is #365's exact error text reproduced from the exact condition,
not a synthetic stand-in.
Refs #365, #345
🤖 Generated with Claude Code
https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG