Skip to content

fix: retry a stalled opossum file once before failing the build - #16

Merged
lintdeveloper merged 1 commit into
mainfrom
fix/compat-suite-flake
Aug 29, 2026
Merged

lintdeveloper merged 1 commit into
mainfrom
fix/compat-suite-flake

Conversation

@lintdeveloper

Copy link
Copy Markdown
Owner

test:compat is a required check and it's timing-sensitive — failed on two PRs, passed on a rerun of the same commit with no changes. A flaky required check trains you to ignore red.

The stall diagnostic added earlier surfaced the real cause: an unhandled EOPENBREAKER crashing the process at test.js:778. opossum's test waits exactly resetTimeout then fires expecting half-open — a dead heat a loaded runner decides, on a .then() chain with no .catch().

One retry keeps the signal (a real break fails twice) without the noise. Not a root cause, and the comment says so.

I made test:compat a required CI check, and it is timing-sensitive. It failed on
two pull requests and passed on a rerun of the same commit with no changes. A
flaky required check is worse than no check, because it teaches you to ignore
red — and that is a problem I introduced.

The stall diagnostic added earlier is what made this diagnosable at all. Instead
of "0 0 STALLED" it now prints the child's exit and output, which showed the
real failure: an unhandled EOPENBREAKER rejection crashing the process at
test.js:778.

The race is in opossum's own test. It opens a breaker, waits exactly
resetTimeout using a setTimeout of the same duration, then fires and expects a
half-open probe. That is a dead heat and a loaded runner decides it; when the
fire lands early the breaker is still open, and the .then() chain at that line
has no .catch(), so the rejection is unhandled and the process dies.

A single retry keeps the signal — a genuine break fails twice — without the
noise. The report distinguishes "one attempt" from "two attempts" so a real
regression still reads as one.

Not a root cause, and the comment says so. Matching another library's exact
timer ordering is not something a compatibility layer can guarantee from
outside, and the alternative — dropping the check — loses the 362-of-362
guarantee that is the whole basis of the migration claim.
@lintdeveloper
lintdeveloper merged commit 46deb83 into main Aug 29, 2026
11 checks passed
@lintdeveloper
lintdeveloper deleted the fix/compat-suite-flake branch August 29, 2026 20:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant