FIRSTMATE-7: Stop firstmate CI shard timeouts and timing flakes #48
Loading…
Reference in a new issue
No description provided.
Delete branch "fm/fm-ci-shard-fix"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Story: FIRSTMATE-7 - Stop firstmate CI shard timeouts and timing flakes
Author: Claude Sonnet 5.5 (claude-sonnet-5-5) via Claude Code
Why
PRs 45, 46 and 47 failed CI regardless of their content: serial shards 5 and 9 need about 30 minutes against the 30-minute cap, and shards 4, 6 and 1 fail on fixed wall-clock windows in tests. The serial split was balanced on stale GitHub-runner timing hints while the hub runner is 1.2x to 2.5x slower.
What
bin/fm-test-run.shfrom the slowest successful hub timings of runs 132-134: 91 stale hints replaced, 18 unhinted scripts hinted. All nine shards now pack to about 23.1-23.4 min (were 29-30 on the hub).fm-watch-triageis not split: it is about 23 min alone, which is already the shard average, so a split cannot lower the longest shard.tests/fm-forge-workflow.test.shanddocs/fm-test-portable-shards.mdupdated.set +e/set -etoggles intests/fm-procevent.test.shleaked errexit for about 2400 lines, so failures aborted silently; removed, plus a guard that fails if it leaks again. Newfm_test_scaledhelper (tests/lib.sh) scales the waits that expect success in fm-procevent, fm-watch-arm and fm-watch-triage; the forge serial lane exportsFM_TEST_TIME_SCALE=3. fm-contributions freezes the clock for its one-second-budget shim test.Fork-only vs shared with upstream
Fork-only:
.forgejo/workflows/ci.yml,tests/fm-forge-workflow.test.sh, the forge-specific doc passages. Shared with upstream (merge-conflict surface): the hint table inbin/fm-test-run.shand the test edits.Evidence
Mutations: serial timeout back to 30 fails the forge guard; re-adding
set -efails the new errexit guard. fm-procevent, fm-contributions, fm-watch-arm, fm-watch-triage pass locally (each in its own PID namespace, under nice); lint and doc-audience checks clean.