Why the Build on main kept failing

Eight red builds since 31 October. Three causes, only one of them still open.

The failed builds

BuildDateCause
#109 Card search4 Novlarge-canvas timing test: 505 ms CPU, limit 500test
#107 Silent demo videos4 NovGitHub had no macOS arm64 runner free (“job was not acquired”)GitHub
Tooltip of a canvas's pause2 Novhost app forwarding test – already fixed the same dayfixed
Strip of a view at the column's foot2 Novlarge-canvas timing test: 1067 mstest
Box ticked in a plan folder2 Novlarge-canvas timing testtest
Navigation's waiting cards2 Novlarge-canvas timing testtest
Every wait between cards2 Novlarge-canvas timing test: 835 mstest
Watch for new code31 Octlarge-canvas timing test: 706 mstest

#108 was not a failure: it was cancelled because #109 was pushed right after it.

The persistent one: a fixed time limit on a slower machine

The test checks that thirty cards landing one after another don't freeze the server – a regression fixed on 31 October, when every single write rebuilt the whole canvas view. It demanded “under 500 ms of CPU”. On a laptop the run takes about 100 ms; GitHub's runner computes the same run four to eight times slower, so it landed right around the limit and failed whenever the runner was a bit slower.

Now the test measures the run against a rebuild of the canvas view on the same machine, and counts only the thread that runs the server's code. A slower machine makes both slower, so the ratio stays put:

Today's code, laptop
~10 rebuilds
Today's code, all cores busy
~11 rebuilds
Limit
30 rebuilds
The old bug (rebuild per write)
~55, fails

So the test still catches the bug it was written for, with room on both sides, regardless of how fast the machine is. The neighbouring test for sharing demo pages got the same treatment (about 2 rebuilds, limit 10).

Not fixable on our side

#107: GitHub reported capacity constraints for macOS arm64 runners and gave up on the job after 15 minutes. That happens rarely; re-running the job is enough.