From 20905e16fc2a6b1bcc358bdf8696aaf748912dc3 Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 19 Aug 2026 15:53:23 +0200 Subject: [PATCH] docs: warn against leaving load on a runner A stress run left going on the Windows runner kept 17 dotnet processes alive and competed with CI for the same machine for roughly half an hour, slowing every job and making the load-sensitive failures it was meant to diagnose more likely. Records the cleanup commands and the caveat that the runner agent itself should be left alone. --- docs/ci-and-releases.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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