ci: add ci-passed aggregate check for the town-crier trial (TC-0069) - #16
Conversation
The town-crier bus mirrors each PR's CI verdict by matching exactly one check-run name, case-sensitively: ci-passed. This repo's CI only emitted the matrix legs check (8.4)/check (8.5) with no aggregate, so its PRs never got a trial verdict. Add a ci-passed job that waits on all check matrix legs (needs: [check], if: always()) and fails when any leg's result is failure or cancelled. Intended as the repo's single required status check post-merge. Additive-only; the check job is untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BrZ64qwG8ytbTdMV25WTX4
28e5783 to
bccb7d4
Compare
Goosterhof
left a comment
There was a problem hiding this comment.
APPROVE — the safe additive TC-0069 pattern, correctly wired, CI green.
Blockers: 0 · Majors: 0 · Minors: 0 · Nits: 0
Adds a ci-passed aggregate job without renaming the existing check matrix, so the required check (8.4) / check (8.5) contexts stay intact — nothing orphaned (unlike the kendo #1740 / codebook #500 renames, which needed a lockstep protection swap). The fan-in is correct: needs: [check], if: always(), and exit 1 on contains(needs.*.result, 'failure' || 'cancelled'), so ci-passed is green iff every lane passed. Both matrix legs and the new aggregate are green at this head. The required-context swap to ci-passed is correctly left as a follow-up admin step. Ready to merge.
Automated war-room agent review — posted because this PR carries the Agent Review Requested label.
What
Add a
ci-passedaggregate job to.github/workflows/ci.yml. It waits on every leg of the existingcheckmatrix (needs: [check],if: always()) and fails when any leg's result isfailureorcancelled.Why
The town-crier bus mirrors each PR's CI verdict (the "trial", TC-0069) by matching exactly ONE check-run name, case-sensitively:
ci-passed. Before this change the repo's CI only emitted the matrix legscheck (8.4)/check (8.5)and no aggregate, so its PRs never received a trial verdict. This job supplies that single normalized name.Acceptance criteria
ci-passedjob added withname: ci-passed,if: always(),needs: [check],runs-on: ubuntu-latest, and a single step that exits non-zero when any needed result isfailure/cancelledcheckjob unmodifiedrelease.yml) emits a check run namedci-passedVerification
python3 yaml.safe_load .github/workflows/ci.yml(jobs: check, ci-passed; needs=[check]; if=always()) -> exit 0grep -rn ci-passed .github/workflows/(only ci.yml) + release.yml jobs = [verify, release] -> exit 0Notes
check (8.4)/check (8.5)still gate this PR normally.ci-passedcontext after merge — branch protection is not touched here.Deviations from town-crier reference
needs: [check](this repo's single matrix job) vs the reference's six-lane list. Job shape (name /if: always()/ fail-on-failure-or-cancelled step) mirrorstown-crier/.github/workflows/ci.ymlci-passed.— Dispatch 📟