Skip to content

feat: breakage-suite.yml — one report, and the REL1 check of a release PR - #105

Merged
ocots merged 8 commits into
mainfrom
feat/breakage-suite
Oct 19, 2026
Merged

ocots merged 8 commits into
mainfrom
feat/breakage-suite

Conversation

@ocots

@ocots ocots commented Oct 18, 2026

Copy link
Copy Markdown
Member

Stacked on #104 (it reuses scripts/release/versions.jl); GitHub retargets it to main once #104 is merged.

Why. In breakage.yml, every cell of the matrix runs its own comment job, which rewrites the PR comment with the artifacts present at that moment: twelve concurrent writers, the last one may post an incomplete table. The comment is found by the github-actions bot id, so it may overwrite another bot comment. Nothing is produced outside a PR, so there is no baseline to tell whether a failure comes from the PR.

What. breakage-suite.yml takes the list of downstream packages (targets: name, owner, test or doc) and runs the matrix itself; each cell writes its result as a TOML file (status, tested ref, resolved version). One report job (scripts/breakage/report.jl) writes the table to the job summary, to one PR comment per group (found by <!-- ct-breakage:<group> -->), and to the breakage-<group> artifact.

Release check (REL1). A downstream failure never fails the run by itself: a breaking change is expected to break. On a release PR (the version changes), the report downloads the artifact of the run on the base commit (callers run the suite on push to main and by hand), and compares the stable column: a package ✅ on the base and ❌ with the PR is broken by the release, so a non-breaking number fails the job; one already ❌ on the base is reported and says nothing. No baseline, or cells without result, also fail a release PR. With the job a required check, auto-merge cannot merge an inconsistent number.

breakage.yml stays, marked replaced, until every caller has moved (next PRs, in the packages).

Checks: scripts/breakage/test/runtests.jl → 19 tests pass (verdict cases and written files); YAML parsed and every run: step passes bash -n; markdownlint (GEN2 configuration) → 0 issues. Not run end to end: the break job and the baseline lookup are exercised by the first caller (CTBase).

🤖 Generated with Claude Code

Replaces breakage.yml, whose cells each rewrote the PR comment with the
results present at that moment and found it by the bot's id. The suite runs
its matrix internally, each cell writing its result as a file; one report
job writes one table (summary, one comment per group found by a marker, the
breakage-<group> artifact). On a release PR it compares the stable column
with the run on the base commit: a downstream release broken by a
non-breaking number fails the job (REL1); no baseline or missing cells too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base automatically changed from feat/registrable to main October 19, 2026 09:32
@ocots
ocots merged commit 914dee4 into main Oct 19, 2026
2 checks passed
@ocots
ocots deleted the feat/breakage-suite branch October 19, 2026 09:33
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