Repository navigation
Conversation
A RED merge_group job cancels its run; ci/step-budgets.tsv plus step_budget_check.sh flag any step over 1.5x budget (push to main only, LAB). MG job timeout-minutes 35 is deliberately NOT changed: x86-main takes ~57 min today. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
noahgift
left a comment
There was a problem hiding this comment.
seat 1, aprender-pace @c96f737a08e20d7513eb5b4f0dcda52fa48e1fda
Read the whole diff (4 files, +103). What it does: x86-main and each workspace-test-shard get a 'gh run cancel' step guarded by failure() && merge_group; the shard job gains actions: write (x86-main already has write-all, so the cancel will not 403); a push-to-main-only LAB step runs step_budget_check.sh against ci/step-budgets.tsv. The step names in the budget rows match the workflow ('Sections (wait for every one to finish)', 'Sections', 'workspace-test-shard (N)'), and the awk/budget arithmetic is right at the boundary (150 is not a breach, 151 is).
Things the author or armer should know, none of which I treat as a defect in the change itself:
- scripts/check_ci_failfast.sh is not wired into any CI section or workflow (the only references to either new script are the workflow line and the tsv header), so its self-test case table is dark until a section calls it. Without that, nothing stops a later edit from removing the cancel step.
- The new push-only step uses continue-on-error: true inside the x86-main job. It is push-to-main, not a PR or merge-group job, and it is labelled LAB, but C324 rule 6 bans continue-on-error rows on release paths; whether a push-to-main job counts as such is a ruling for the gate owner, and the file already has one such row (provenance attest).
- Behaviour: the cancel also cancels the other shards' in-flight work, by design; the always() teardown should still reap containers (I read the order, not a run). The budget seeds are guesses by the author's own comment.
- This edits .github/workflows/ci.yml and changes merge-queue behaviour, so it is a gate-adjacent change: it needs the usual non-author sign-off from whoever the cop designates, which this seat is not.
0 aprender-pace trailers. I did not run the scripts, and did not read CI (the run was cancelled and rerun).
noahgift
left a comment
There was a problem hiding this comment.
seat 1, aprender-triage-worker @c96f737a08e20d7513eb5b4f0dcda52fa48e1fda APPROVE
Read: the full 4-file diff (+103) and the final ci.yml job headers. Own-trailer check on the PR commits: 0.
- Both fail-fast steps are guarded by
failure() && github.event_name == 'merge_group', so PR runs keep every verdict. The teardown staysalways(), so containers are still reaped after a cancel. x86-main already haspermissions: write-all; the shard job getsactions: writepluscontents: read, which is enough forgh run cancel. The|| echo ::warning::fallback means a failed cancel never turns a pass into a fail. - step_budget_check.sh runs on
pushonly with continue-on-error, so it is LAB (C324) and never on the merge path. A failed jobs-API read exits 2 (not_measured), not a pass. The check_ci_failfast.sh self-test has a mutation case (cancel step removed -> RED) and a 1.5x boundary case. - The MG timeout is correctly left out (x86-main is ~57 min).
Not run: no workflow execution, and I did not run the two scripts' --self-test. CI on this head was still pending when I read it (4 pending, 2 skipped, 2 success), so I did not read a green verdict.
Nit, no block: check_ci_failfast.sh is not wired into any CI fragment in this diff, so it is dark until a ci/explicit-test-commands.d fragment names it.
Gate/workflow sign-off: YES, bound to c96f737 (merits only, non-author). A second non-author seat and green CI are still needed before arming; I arm nothing.
…ck_ci_failfast.sh advertise --self-test so guard_tree runs it (refs #5394) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
noahgift
left a comment
There was a problem hiding this comment.
seat 1, aprender-triage-worker @7eef48051a7fcac370214ee7ea1b9b4ce8009b05 APPROVE
Re-seat on the new head. Own-trailer check: 0. My last seat was @c96f737a08. I read the full delta between the two heads (3 files, all inside the PR file set):
- ci.yml: removes only the push-to-main
continue-on-errorbudget step. That is correct under C324 rules 5/6 (no third state on a path; LAB runs off the merge path). Both merge_group fail-fast steps and theactions: writegrant are unchanged. - step_budget_check.sh: comment-only change (LAB, run on demand or nightly).
- check_ci_failfast.sh: adds a
-h|--helpusage line before the--self-testbranch.
Not run: no workflow execution and no script run. CI is not green on this head: the merge state read BLOCKED.
Correction to the request: the PR file list is still the same four files (ci.yml, ci/step-budgets.tsv, the two scripts). I see no newci/explicit-test-commands.dfragment, so check_ci_failfast.sh is still not wired into CI. The only change to it is the --help line, so the "dark script" nit stands.
Gate/workflow sign-off: YES, bound to 7eef480, on the merits (non-author). A second non-author seat and green CI are still needed before arming. I arm nothing.
|
seat 1, aprender-triage-worker @7eef48051a7fcac370214ee7ea1b9b4ce8009b05: wiring check (addendum to my APPROVE on this head) Confirmed by reading, not by running: scripts/check_ci_failfast.sh answers |
noahgift
left a comment
There was a problem hiding this comment.
seat 1, aprender-pace @7eef48051a7fcac370214ee7ea1b9b4ce8009b05
Re-seat plus non-author gate sign-off, bound to this head. Delta from my previous seat @c96f737a (which is an ancestor): (1) the push-only continue-on-error budget step is removed from ci.yml, which clears my flag 2; (2) check_ci_failfast.sh gains a -h/--help that prints a usage line containing 'self-test'; (3) a comment edit in step_budget_check.sh. I checked the wiring claim: scripts/guard_tree.sh derives its universe from git ls-files 'scripts/check_*.sh' and runs a guard's --self-test first when its --help output contains the literal 'self-test', so this clears my flag 1. I extracted the four files at this head and ran them: --help rc 0 with the usage line, --self-test rc 0 (both case tables ok), no-arg run rc 0 ('ok: merge_group failures cancel the run'); neither script contains a bare 'cargo ' token, so it runs in the cargo-free guard half.
Sign-off: YES for the content of this change. Limits: the self-test's mutation only deletes the 'gh run cancel' lines, so removing the failure()/merge_group guard or the shard's 'actions: write' alone is not proven caught; step_budget_check.sh is now unwired until a nightly LAB lane calls it (acceptable under C324 r5, noted so nobody counts the budget flag as live); a cancel on any single red job also discards the other shards' progress, which is the ordered intent. I did not read CI or an actual merge_group run, so the cancel step's behaviour on a real run, including the always() teardown, is unobserved. 0 aprender-pace trailers.
|
§13.11 rung 1 — quorum shadow verdict Shadow mode: this records a verdict and merges nothing. A refusal |
…rd (operator order, refs #5394) PR runs keep 240/180. Measured p95 over 20 MG runs: x86-main 65 min, shards 74 min. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
noahgift
left a comment
There was a problem hiding this comment.
seat 2, aprender-triage-worker @995d23b1880a20dde1281ba1f1f59e9280219eae NOT APPROVED
Re-seat by delta from my last seat (7eef480), restricted to the PR's 4 files; 0 own trailers. Delta is 2 lines in ci.yml: x86-main and workspace-test-shard timeout-minutes become ${{ github.event_name == 'merge_group' && 75 || 240/180 }}. The PR body still says the merge-group timeout-minutes change is NOT included and on hold per the cop, so the body and the head disagree, and this is a gate-content change (a hard cap on the merge path) made after the seats and any sign-off at earlier heads. Nothing in the PR shows the 75 is above the p-max of the shard (only x86-main's ~57 min is cited). Needed to flip this to APPROVE: update the body to say the 75-minute cap is included and why, a measured max for workspace-test-shard (and x86-main) on mq runs, and the non-author gate sign-off bound to this head. The fail-fast step, permissions and budget files are unchanged since my last seat. Read: the delta and the PR-vs-main ci.yml diff. Not run: actionlint, check_ci_failfast.sh, CI timings.
noahgift
left a comment
There was a problem hiding this comment.
seat 1, aprender-pace @995d23b1880a20dde1281ba1f1f59e9280219eae
Read the full 4-file diff (ci.yml, step-budgets.tsv, check_ci_failfast.sh, step_budget_check.sh); I did not author it (0 aprender-pace trailers).
Verified by running at this head: check_ci_failfast.sh --self-test and the plain run both pass. Mutations on a copy of ci.yml all turn it red: drop actions: write (rc 1), widen both guards to bare failure() (rc 1), delete only the shard job's cancel step (rc 1), delete only x86-main's (rc 1).
Merge_group scoping is right: both cancel steps are guarded by failure() && event_name == 'merge_group', timeouts use the 75 min value only for merge_group (PR runs keep 240/180), x86-main already has write-all and the shard job gets actions: write. step_budget_check is LAB-only (no PR/MG wiring, exit 2 = not_measured), consistent with C324.
Not verified / caveats: (1) the guard's awk ties the if: to the cancel step only loosely (any earlier merge_group+failure() if: in the job satisfies it). (2) I did not confirm gh is installed on the mq runners or that the run reports cancelled-not-green to ci / gate in a real merge group; the first real red MG entry is the test. (3) I did not confirm guard_tree runs the self-test (grep of guard_tree/Makefile/.github found no reference). (4) Workflow change: the project CLAUDE.md lists CI workflow edits as check-in items; the PR cites the 2026-10-19 operator order, which I did not see.
|
gate sign-off, aprender-w5032 (claude-sonnet-5-5; reviewer lane Opus 5.5, not the author's model) @995d23b1880a20dde1281ba1f1f59e9280219eae APPROVE PR body fixed to match the head: merge_group timeout 75 min cites the measured maxima over the last 12 successful MG runs (x86-main 57 min, workspace-test-shard 56 min). check_ci_failfast.sh --self-test and plain run pass; 3 extra mutations (drop actions: write, drop merge_group guard, failure()->always()) all RED. A timeout reads as cancelled = red, never a false green. Cancel only targets its own run id. |
noahgift
left a comment
There was a problem hiding this comment.
no seat, aprender-pace @995d23b1880a20dde1281ba1f1f59e9280219eae (defects)
Planted non-author quorum, 2 Opus 5.5-family lanes (author is Sonnet), both verdict DEFECTS. Lane output is model output, not authority.
- Non-gate red now blocks the queue: x86-main's section list (.github/workflows/ci.yml:252) includes
vendored-schemas, whichci / gatedoes not read. Today its red leaves the required checks green. With the newfailure()step a red there cancels the shards, soworkspace-testgoes red and the merge fails. That adds a gate without a C324 rule-7 yes. Fix: guard the cancel on a gate-section failure, or exclude non-gate sections. - scripts/check_ci_failfast.sh is wired into nothing (no Makefile, workflow or ci/ caller), so it can never fail. Its awk also passes with the cancel line or
actions: writecommented out, and with&& falseappended to the guard; flaggis never reset per step. - scripts/ci/step_budget_check.sh: the exit of
breachesis ignored; a missing or empty budget file prints "no step over 1.5x budget" (a pass on nothing measured), and BUD is a relative path with no cd to the repo root.
Fine: permissions (write-all on x86-main, actions: write on the shard), failure() placement, timeout expression non-falsy in all branches, always() teardown still reaps, C324 placement of the budget script (LAB, exit 0).
Not verified: live merge-group behaviour after a cancel, real job durations vs the 75 min cap, gh on the mq runners.
Refs #5394. Operator via the cop, 2026-10-19 (freeze exception "via PR today"): fail-fast cancel and per-step budgets.
ci.yml: x86-main and workspace-test-shard get a final-ishfailure() && merge_groupstep that runsgh run cancel; the shard job getsactions: write.ci/step-budgets.tsv+scripts/ci/step_budget_check.sh: flags a step over 1.5x its budget; wired on push to main only (LAB, never on the merge path).scripts/check_ci_failfast.sh: guard with a mutation case (cancel step removed -> RED).ci.yml: merge_grouptimeout-minutesis now 75 on x86-main (was 240) and on workspace-test-shard (was 180); other events keep 240/180. Measured max over the last 12 successful merge_group runs of ci.yml (2026-10-19 19:12Z to 2026-10-20 05:54Z): x86-main 57 min, workspace-test-shard 56 min (shard 3); 75 = 1.3x the observed max. The earlier 35 min cap stays rejected (x86-main is ~57 min).Gate content change (hard cap on the merge path): needs a non-author sign-off bound to the final commit plus 2 seats before arming. NOT armed. Budgets are seeded from MG run 39205769238 and need an owner to tune.
🤖 Generated with Claude Code
keep-open: #5394 stays open: this lands only the fail-fast cancel and step budgets; the merge_group timeout caps (75 min) land here, and the budgets still need an owner to tune.