diff --git a/docs/ci-and-releases.md b/docs/ci-and-releases.md index c7b6fbd9..572f79b3 100644 --- a/docs/ci-and-releases.md +++ b/docs/ci-and-releases.md @@ -123,6 +123,21 @@ fix that was tried and **disproved** — read those before repeating it. | Timing-sensitive test fails only under load | It belongs in `Lane=Timing` (see [`release-gate.md`](release-gate.md)). Do **not** chase these individually: four separate fixes each surfaced a different member of the same family, and serializing `Core.Net` to fix Linux regressed Windows from 1000 passed in 7 s to 999/1000 in 17 s | | Avalonia "calling thread cannot access this object" in cleanup | `MainWindowViewTests` needs a real desktop session and is `Lane=Manual`. Measured: PASSES on a dev desktop and on the CI Windows box over SSH; FAILS under `act_runner` and on Linux. Serializing the assembly does **not** fix it (tried via `xunit.runner.json` and a compiled-in `CollectionBehavior` attribute), and de-async-ing the test actively causes the failure. The stack shows a compositor being **constructed** during teardown — it is the headless session lifecycle, not parallelism | +## Do not leave load on a runner + +A stress/diagnostic run left going on a runner competes with CI for the same +machine and makes every job slower and more likely to trip a load-sensitive +test — the exact failures you would then be trying to diagnose. Kill background +work before trusting a timing result: + +```powershell +Get-Process dotnet -ErrorAction SilentlyContinue | Stop-Process -Force # Windows +pkill -9 dotnet # Linux +``` + +Leave `act_runner` / `forgejo-runner` itself alone; killing those unregisters +nothing but stops the machine picking up jobs until it restarts. + ## Culture note The `en-SE` discovery is worth remembering beyond CI: config files, numeric