Problem
bench_cli benchmark_cli_exposes_oci_options is reported leaky by nextest under a full instrumented run, and the ci profile turns that into a failure:
leak-timeout = { period = "1s", result = "fail" }
In isolation under --profile ci the same test passes. So the leak is contention-dependent: it appears when the test runs alongside others and not when it runs alone. That makes it a non-deterministic failure of just coverage-native, which is the job every PR's coverage check runs.
Observed during a full-crate instrumented pass while investigating #2181. That run used the default profile, where leaky is a warning rather than a failure, which is why it surfaced as an observation rather than a red job.
Why it is filed separately
It is a different test and a different mechanism from #2181, but the same class: a latent fragility that only appears under contention and that the ci profile promotes from warning to failure. #2181 is a timeout; this is a leak verdict.
It is also distinct from #2160. There the leak lands on tests that hold no descriptor they could leak, which points at a capture pipe inherited from a concurrent spawn — the upstream race in nextest#3553. This test drives a CLI, so whether it genuinely holds a descriptor open past the test body needs establishing rather than assuming.
Required change
Establish first whether the test leaks a real handle or inherits one.
If it holds something open — a child process not reaped, a file or socket outliving the assertion — close it, and the fix is ordinary. If it inherits a capture pipe from a concurrent spawn, this is nextest#3553 and belongs with #2160 rather than here; say so and close this as a duplicate with the evidence.
Do not raise leak-timeout, and do not move the test out of the ci profile's reach. Both make the report go away without answering which of the two it is.
Acceptance criteria
- The test passes under
--profile ci in a full parallel run, not only in isolation.
- The verdict rests on evidence about what the test holds open, not on a timing adjustment.
leak-timeout keeps result = "fail" in the ci profile.
Boundary
This test and whatever it holds. Do not change the leak policy, and do not touch #2181's bound or #2219's port acquisition.
Problem
bench_cli benchmark_cli_exposes_oci_optionsis reported leaky by nextest under a full instrumented run, and theciprofile turns that into a failure:In isolation under
--profile cithe same test passes. So the leak is contention-dependent: it appears when the test runs alongside others and not when it runs alone. That makes it a non-deterministic failure ofjust coverage-native, which is the job every PR's coverage check runs.Observed during a full-crate instrumented pass while investigating #2181. That run used the default profile, where leaky is a warning rather than a failure, which is why it surfaced as an observation rather than a red job.
Why it is filed separately
It is a different test and a different mechanism from #2181, but the same class: a latent fragility that only appears under contention and that the
ciprofile promotes from warning to failure. #2181 is a timeout; this is a leak verdict.It is also distinct from #2160. There the leak lands on tests that hold no descriptor they could leak, which points at a capture pipe inherited from a concurrent spawn — the upstream race in nextest#3553. This test drives a CLI, so whether it genuinely holds a descriptor open past the test body needs establishing rather than assuming.
Required change
Establish first whether the test leaks a real handle or inherits one.
If it holds something open — a child process not reaped, a file or socket outliving the assertion — close it, and the fix is ordinary. If it inherits a capture pipe from a concurrent spawn, this is nextest#3553 and belongs with #2160 rather than here; say so and close this as a duplicate with the evidence.
Do not raise
leak-timeout, and do not move the test out of theciprofile's reach. Both make the report go away without answering which of the two it is.Acceptance criteria
--profile ciin a full parallel run, not only in isolation.leak-timeoutkeepsresult = "fail"in theciprofile.Boundary
This test and whatever it holds. Do not change the leak policy, and do not touch #2181's bound or #2219's port acquisition.