Skip to content

test(agent): fix a flaky test of the host socket's lock - #84

Merged
kalaspuff merged 1 commit into
mainfrom
fctl/40-flaky-agent-link-test
Oct 18, 2026
Merged

kalaspuff merged 1 commit into
mainfrom
fctl/40-flaky-agent-link-test

Conversation

@fctl-sh

@fctl-sh fctl-sh Bot commented Oct 18, 2026

Copy link
Copy Markdown
Contributor

link::tests::a_second_supervisor_leaves_the_socket_alone (added in #82) failed on #83's CI run, which changes only web/biome.json (log). It passed on #82's own run and on main after the merge. The failing line was the last claim: once the first supervisor dropped its lock and listener, the next claim() still found the socket taken.

The claim logic is fine; the test races other tests. fctl-agent's other tests start git and 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, so claim() answers Taken.

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:

  • A throwaway stress test (not committed) repeated the drop and the next claim 3000 times while another thread started true in a loop. The old single claim failed 198 times; the new loop never failed. Without the spawning thread, the old claim never failed either.
  • If the first supervisor keeps its lock, the test still fails after two seconds: "the next supervisor should get the socket once the first is gone".
  • cargo xtask check --quick passes.

Session: https://app.fctl.sh/s/ses_01M57ZX7KDDYZ1FMZ1BRWKXXVV

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>
@kalaspuff
kalaspuff merged commit d3ae832 into main Oct 18, 2026
4 checks passed
@kalaspuff
kalaspuff deleted the fctl/40-flaky-agent-link-test branch October 18, 2026 17:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant