Skip to content

ci: gate on one aggregate context instead of four matrix legs - #12

Merged
sotashimozono merged 1 commit into
mainfrom
ci/aggregate-gate
Sep 5, 2026
Merged

ci: gate on one aggregate context instead of four matrix legs#12
sotashimozono merged 1 commit into
mainfrom
ci/aggregate-gate

Conversation

@sotashimozono

Copy link
Copy Markdown
Member

Branch protection names julia 1.11 — ubuntu-latest and three siblings. Adding a Julia version to the matrix leaves the new leg ungated; renaming one makes main permanently unmergeable, because the required context never reports again.

All tests passed becomes the single context.

if: always() is load-bearing, and its absence is silent

Measured on a scratch branch by failing a leg on purpose, rather than reasoned about:

aggregate config which leg fails All tests passed
needs: alone a required leg SKIPPED
needs: + if: always() a required leg failure
needs: + if: always() nightly success

GitHub counts a skipped required check as passing. So the first row is not a weaker version of the second — it is a gate that lets a red pull request through, which is strictly worse than the per-leg contexts it replaces. I would have shipped it: the first version of this change had no if: always(), and its positive test (nightly fails, aggregate passes) came back green.

The third row is the property that matters for continue-on-error: a failing nightly stays out of needs.test.result, so the aggregate is not dragged down by a leg that is allowed to fail.

Branch protection is not changed here

The context has to report at least once before it can be required — requiring a context that has never reported deadlocks main. After this merges, protection becomes:

All tests passed        ← new
format / format-check
Docs build

and the four per-leg contexts come off.

Refs #6.

🤖 Generated with Claude Code

Branch protection named `julia 1.11 — ubuntu-latest` and three siblings. Adding a Julia version
to the matrix left the new leg ungated; renaming one would have made `main` permanently
unmergeable, because the required context would never report again.

`All tests passed` is now the single context, and `if: always()` on it is load-bearing in a way
that is invisible from reading the file. Measured on a scratch branch by failing a leg on
purpose:

  needs: alone,   required leg fails  ->  All tests passed = SKIPPED
  if: always(),   required leg fails  ->  All tests passed = failure
  if: always(),   nightly fails       ->  All tests passed = success

GitHub counts a skipped required check as passing, so the first row is not a smaller version of
the second — it is a gate that lets a red pull request through, which is worse than what it
replaces. The third row is the property that matters for `continue-on-error`: a failing nightly
stays out of `needs.test.result`.

Branch protection is not changed here. The context has to report at least once before it can be
required, or requiring it deadlocks `main`.

Refs #6.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@sotashimozono sotashimozono self-assigned this Sep 4, 2026
@github-actions github-actions Bot added the chore label Sep 4, 2026
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📚 Docs preview: https://codes.sota-shimozono.com/ExperimentalAPI.jl/previews/PR12/

(updates on each push to this PR)

@codecov

codecov Bot commented Sep 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@sotashimozono
sotashimozono merged commit 226c716 into main Sep 5, 2026
14 checks passed
@sotashimozono
sotashimozono deleted the ci/aggregate-gate branch September 5, 2026 08:04
sotashimozono added a commit that referenced this pull request Sep 5, 2026
`main` moved under this branch: #11 cut the README from 1372 words to 419 for the registry's LLM
policy, and #12 replaced the four required matrix contexts with one aggregate.

Three files conflicted, and the resolution is not "keep both halves" in any of them:

  * **README.md** — `main`'s trimmed version wins wholesale. Re-adding the long sections written
    here would undo the point of #11. What is added back is two things that are now *false*
    without them: `record` and `reach` did not exist when that README was written, and the closing
    line called `test/spec/` "the specification for the propagation and profiling work that is not
    built yet". 559 words, against the 1372 that #11 cut.
  * **src/audit.jl** and **docs/src/checking.md** — the extension blind spot has a workaround #11
    documented (declare the function in the parent, let the extension add only the method) and a
    report this branch added (`Audit.extensions`). Both are true, so both are said. The
    "methods on other packages' functions" bullet keeps this branch's version, because it stopped
    being a blind spot.

`docs/make.jl` and `.github/workflows/CI.yml` merged cleanly and correctly — #11's canonical URL
with this branch's page list, and #12's `all-tests` job with this branch's corrected runtime
comment.

Verified after the merge: `test_readme.jl`, `test_dogfood.jl`, `test_audit.jl`, the formatter, and
a full docs build.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant