Repository navigation
test(agent): fix a flaky test of the host socket's lock - #84
Merged
Merged
Conversation
a_second_supervisor_leaves_the_socket_alone failed now and then in CI: once the first supervisor dropped its lock and listener, the next claim() still found the socket taken. Other fctl-agent tests start git and other processes on other threads, and a process between fork and exec holds copies of every descriptor, close-on-exec ones included, so the lock and the listener outlive the drop for a moment. The test now claims again for up to two seconds.
kalaspuff
pushed a commit
that referenced
this pull request
Oct 18, 2026
…83) Biome 2.5 deprecates `linter.rules.recommended` in favor of `linter.rules.preset`. `biome check` reports the old field as an info diagnostic on every run, so CI printed it on every `cargo xtask check` ([for example](https://github.com/hyperstructure/fctl/actions/runs/39148152288/job/117736138881?pr=82)). `web/biome.json` now uses `"preset": "recommended"`, which is what `biome migrate --write` writes. Biome stays at 2.5.15. How I verified it: - `npm run check --workspace web` passes and prints no diagnostics (before: `Found 1 info`). - `biome rage --linter` lists the same 214 enabled rules before and after. The only line that changes in its report is `Recommended: true`, which becomes `unset`. - A file containing `debugger` and `==` still gets `suspicious/noDebugger` and `suspicious/noDoubleEquals`, under both the old config and the new one. The same change in the design system and the site: hyperstructure/design#11, hyperstructure/fctl-site#15. In design, `biome migrate --write` writes `"preset": "none"` instead, which turns every rule off (biomejs/biome#10716), so that change is written by hand. This pull request's first CI run failed on `link::tests::a_second_supervisor_leaves_the_socket_alone`, a flaky fctl-agent test unrelated to this change; #84 fixes it. The run after merging `main` passed. Session: https://app.fctl.sh/s/ses_01M57ZX7KDDYZ1FMZ1BRWKXXVV Co-authored-by: fctl-sh[bot] <fctl-sh[bot]@users.noreply.github.com>
1 task done
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.
link::tests::a_second_supervisor_leaves_the_socket_alone(added in #82) failed on #83's CI run, which changes onlyweb/biome.json(log). It passed on #82's own run and onmainafter the merge. The failing line was the last claim: once the first supervisor dropped its lock and listener, the nextclaim()still found the socket taken.The claim logic is fine; the test races other tests. fctl-agent's other tests start
gitand other processes on other threads, and a process between fork and exec holds copies of every file descriptor, close-on-exec ones included. If one is starting when the test drops the first supervisor's lock and listener, the lock stays held and the socket keeps accepting for that moment, soclaim()answersTaken.The test now claims again every 20 ms for up to two seconds, and fails if the next supervisor gets the socket without the lock.
How I verified it:
truein a loop. The old single claim failed 198 times; the new loop never failed. Without the spawning thread, the old claim never failed either.cargo xtask check --quickpasses.Session: https://app.fctl.sh/s/ses_01M57ZX7KDDYZ1FMZ1BRWKXXVV