Skip to content

ci: the macOS check and the merge-queue cap go to 45 minutes, with a warning at 35 - #734

Merged
REPPL merged 6 commits into
mainfrom
ci/cap-45
Sep 28, 2026
Merged

REPPL merged 6 commits into
mainfrom
ci/cap-45

Conversation

@REPPL

@REPPL REPPL commented Sep 28, 2026

Copy link
Copy Markdown
Collaborator

The macOS check now has 45 minutes instead of 30, and it warns at 35. Four
pull requests whose code was fine (#728, #730 twice, #733) were thrown out of
the merge queue because the macOS check ran a little past 30 minutes. The
technical facilitator ruled on 2026-09-28 (ruling Z) that both limits rise to
45 minutes. The same ruling's cancel policy adds an early warning, so a
check that is getting slow is flagged before it is ever cancelled.

What changes:

  • .github/workflows/ci.yml: the check job's timeout-minutes is one
    matrix expression. The macOS leg gets 45 and the ubuntu leg keeps 30. The
    comment above the job explains the ceiling and names the ruling.
  • A new last step on the macOS leg warns, in the log and in the step summary,
    when a check that ran past 35 minutes ends. It is emitted at the job's end,
    not at minute 35, so a check that passes between 35 and 45 minutes says so
    before one is ever cancelled at the cap. The warning names the rerun-once
    rule and says to open a speed lane. It runs under always(), carries
    continue-on-error, and cannot fail the job. It reads the job's start time
    from a new first step's output through env, never through an expression
    inside run:.
  • .abcd/work/rulesets/main-protection.json: the mirror's merge-queue
    check_response_timeout_minutes goes from 30 to 45. Nothing else in the
    file changes.
  • TestRaceLaneBudgetIsDeclaredAndFitsItsJob reads the ceiling leg by leg and
    holds each leg at or below the mirror's cap, and every leg but macOS at 30
    (the ruling raised the macOS leg alone). The new
    TestCheckJobWarnsBeforeTheQueueCap pins the threshold at 35, below both
    the macOS ceiling and the cap, and checks the step's shape.
  • .abcd/work/DECISIONS.md gains one entry recording rulings Z and AR and the
    cancel policy.

After this merges, the run's orchestrator changes the live ruleset's merge-queue
check_response_timeout_minutes to 45 with gh api, under ruling Z, and logs
that as a decision. Until then the live queue still fails a group at 30
minutes. No gate compares the mirror with the live ruleset (that drift check is
itd-92, still a draft), so nothing turns red in that window. A macOS run
between 30 and 45 minutes in a merge group is still cancelled by the queue
until the live change is made.

Checks: make preflight passed and minted a receipt. make fmt-check is
clean, zizmor reports no findings on ci.yml, and abcd lint docs
reports 0 blockers.

Resolves: iss-2609281514435020
Assisted-by: Claude:claude-opus-5-5

…ng macOS check at 30 minutes

#728, #730 (twice) and #733 were cancelled at the cap while their code was
fine; ruling Z (2026-09-28) raises both limits to 45 minutes and asks for a
warning at 35.

Refs: iss-2609281514435020
Assisted-by: Claude:claude-opus-5-5
…warning at 35

Ruling Z (2026-09-28, the technical facilitator) raises the macOS leg of
the check job and the ruleset's check_response_timeout_minutes from 30 to
45: passing macOS runs of 23 to 30 minutes were being cancelled at the cap.
The job's timeout-minutes is one matrix expression, so the ubuntu leg keeps
30; the ruleset mirror records 45. The live ruleset is changed after this
merges, by the run's orchestrator with gh api.

The cancel policy adds a step at the end of the macOS leg that warns, in
the log and the step summary, once the check has run past 35 minutes,
naming the rerun-once rule and the speed lane. It runs under always(),
carries continue-on-error, and reads the start epoch from a first step's
output through env, never an expression inside run:.

TestRaceLaneBudgetIsDeclaredAndFitsItsJob reads the ceiling leg by leg and
holds each at or below the mirror's cap (watched red with the macOS leg at
45 against a mirror of 30); TestCheckJobWarnsBeforeTheQueueCap pins the
threshold at 35, below the leg's ceiling and the cap, and the step's shape
(watched red before the step existed).

Refs: iss-2609281514435020
Assisted-by: Claude:claude-opus-5-5
…9-28

The user, as technical facilitator, at 15:10:37Z: both limits to 45
minutes (the one amendment of the never-raise rule), all three CI
speed-ups built, and a warning at 35 minutes beside the rerun-once rule.

Assisted-by: Claude:claude-opus-5-5
…ap are 45 minutes, with a warning at 35

Resolves: iss-2609281514435020
Assisted-by: Claude:claude-opus-5-5
Ruling Z raised the macOS leg alone, but the budget test only held each
leg at or below the queue's cap, so a Linux leg raised anywhere up to 45
passed. Pin every other leg at 30, and say in the warning step's comment
that the warning is emitted at the job's end, for a run that finished
past the line (review-cap45, two minors).

Refs: iss-2609281514435020
Assisted-by: Claude:claude-opus-5-5
Assisted-by: Claude:claude-opus-5-5
@REPPL
REPPL enabled auto-merge September 28, 2026 16:05
@REPPL
REPPL added this pull request to the merge queue Sep 28, 2026
Merged via the queue into main with commit ffd1225 Sep 28, 2026
12 checks passed
@REPPL
REPPL deleted the ci/cap-45 branch September 28, 2026 17:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant