Repository navigation
ci: display the gate job as CI Status with a ci-status alias - #15397
Conversation
The pr-require-checks gate job keeps its id, ci-status, and now shows as CI Status. A new alias job, report-ci-status, named ci-status, needs it, runs on every event the gate runs on, and passes only when CI Status succeeded, so the required context ci-status keeps reporting until the github-iac ci-gate ruleset requires CI Status. Consumers that find the gate by its check or job name now take CI Status first and fall back to ci-status only when no CI Status entry exists (heads tested before this change). Re-runs, step reads, logs and annotations use CI Status's job, never the alias's: re-running the alias alone replays its old needs result. Exclusion lists and the "aggregate alone" counts treat CI Status and its alias as one check. - pr-feedback-dispatch rerun-ci-status, the lost-run reconciler, resolve-pr (held and draft reads) and babysit_verify_evidence pick CI Status's job. - fix-ci-dispatch, gate-source, clear-escalations, red-main and babysit_postmerge exclude or merge both names. - review-dependency, dependency-dispatch, release ci-status.sh and babysit_merge_policy read CI Status's check runs, then ci-status. - The guardrails merge hook reads CI Status's superseded note and supersedes its alias in the same Actions run with it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe
The verifier now sees a CI Status job beside a ci-status alias that only repeats its conclusion; the prompt says neither is test evidence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe
The org step-name rule reads "Report CI Status's conclusion" as Title
Case ("Status" capitalized). Name it "Report the conclusion of
`CI Status`" and move the test fixtures that carry it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe
ci-workflows#1072 adds the alias-jobs input. Naming the ci-status mirror job there keeps contract-only runs reading as contract-only, re-runs failed contract-only siblings, and keeps carried successes from before the rename. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-security-review reviewed Security review: PR #15397, which shows the gate job as
|
|
claude-review reviewed Code review: no findingsI read every hunk of all 38 changed files. I also read the unchanged code the changed lines call, because many of them sit on trusted paths: What I checked
Not verified (I had no shell or network access)
Spend (not a finding): the new No closing issue (the PR cites owner decision Q26). No plugin manifest is changed, so there are no manifest lines. The PR context contained no embedded instructions. |
No related issue: owner decision Q26 (2026-11-11 interview). The
ci-statusjob displays as "CI Status", rolled out by GitHub Support's adopted alias plan, step A.Draft: held until melodic-software/ci-workflows#1072 merges and this PR repins
aggregate-resultswithalias-jobs: ci-status; without that, contract-only runs misread their shape (see Remaining).Summary
ci-statusgetsname: CI Status. Its id is unchanged, soneeds:references and the github-iac verifiers that key on the id still match.report-ci-status, namedci-status, needs CI Status, runsif: always(), and exits with CI Status's result. The required contextci-statustherefore keeps reporting the same conclusion onpull_requestandmerge_groupuntil the github-iac ci-gate ruleset requiresCI Status(step B). It is removed in step C. Nopushtrigger is added: this workflow has none by design, as documented in its header.CI Statusfirst and still acceptsci-status, for heads tested before this change.needsresult.Fix
maintenance-reconcile-lost-runs/infra-failure.mjsexportsGATE_CHECK,GATE_ALIAS,AGGREGATE_JOBSandgateEntries(), which returns CI Status's entries and never the alias's beside them.reconcile.mjs,fix-ci-dispatch.mjs,red-main.mjs,resolve-pr.mjs,probe/replay.mjs.clear-escalations.mjs,gate-source.mjsandreview-dependency.mjscarry the two names as literals, each with a comment. Importing the helper would break the sparse hold-config checkout and the stagedbase-scriptlayout, which tests already pin.review-dependency.mjs: reads CI Status's annotations, since only that job writes the superseded note.release-publish-plugins/ci-status.shreadscheck_name=CI Status, thenci-status.pr-feedback-dispatch.ymlre-runs the CI Status job.block-unresolved-pr-merge.shreads CI Status's annotations.babysit_merge_policy.py,babysit_postmerge.pyandbabysit_verify_evidence.pyread CI Status first.docs/ci-runner-routing.mdand the pr-verify prompt name CI Status and the alias.Verification
All runs below are local and every one passes:
scripts/ci-*.test.shsuites the gate reads.scripts/run-ruff.sh checkare clean.check-lane-coverage.sh --checkandcheck-docs-only-gate.sh --checkpass.Remaining
aggregate-resultsto the ci-workflows commit that merges feat(visualization): add on-demand visualization router plugin #1072, and passalias-jobs: ci-status. Until then the pinned composite misreads contract-only runs with the alias:job_shapereads them as full runs;ci-status).Related
CI Status, once everyrequires-cirepository reports both contexts. C removes this alias.Follow-ups
merge-holds.mjs:278,:1445,pr-feedback-dispatch.yml, reconciler note). The regexespersonHoldLineandRERUN_TAILmatch that text, so the wording changes together with them in step C.scripts/check-lane-coverage.shcomment "the repo carries ZERO opt-outs" is no longer true while the alias exists.🤖 Generated with Claude Code
https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe