From 2828543ba51eb2d3196811ea0e8272587047ac56 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Date: Mon, 27 Jul 2026 20:31:36 +0800 Subject: [PATCH] fix(ci): restore the stable "Dogfood Regression Gate" required-check name (#3622 follow-up) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit INCIDENT: every open PR in the repo is BLOCKED — mergeable, all checks green, merge button dead. Root cause: #3622 sharded the dogfood job 2-way, so its checks now publish as "Dogfood Regression Gate (1/2)" / "(2/2)". Branch protection still requires the bare context "Dogfood Regression Gate", which no job emits anymore — the requirement can never be satisfied. #3622's own comment called for updating branch protection; that step never happened. Fix keeps the contract in CODE rather than in protection settings: a tiny aggregator job carrying the stable name, gated on the matrix's aggregate result. A future shard-count change therefore cannot deadlock the repo again. `if: always()` + result inspection so a legitimately skipped matrix (filter says no core paths changed) still satisfies the gate. Verified: workflow YAML parses; job graph has dogfood-gate needs: dogfood with name "Dogfood Regression Gate". Co-Authored-By: Claude Fable 5 --- .github/workflows/ci.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aefb913639..67d71706a0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -247,6 +247,35 @@ jobs: echo "::endgroup::" done + dogfood-gate: + # Stable required-check name for a SHARDED job (#3622 follow-up). + # + # Branch protection requires the context "Dogfood Regression Gate". Once + # the job became a 2-way matrix its checks publish as "Dogfood Regression + # Gate (1/2)" / "(2/2)" — the bare context could never appear again, so + # EVERY pull request in the repo sat permanently BLOCKED (mergeable, all + # checks green, merge button dead). #3622's own comment called for updating + # branch protection; keeping the contract HERE instead means a future + # shard-count change cannot deadlock the repo a second time. + # + # `if: always()` + result inspection so a legitimately skipped matrix (the + # `filter` job says no core paths changed) still satisfies the gate. + name: Dogfood Regression Gate + needs: dogfood + if: always() + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Verify dogfood shard results + run: | + result="${{ needs.dogfood.result }}" + echo "dogfood matrix aggregate result: $result" + case "$result" in + success|skipped) echo "Dogfood gate satisfied." ;; + *) echo "::error::Dogfood shards did not pass (aggregate result: $result)"; exit 1 ;; + esac + build-core: name: Build Core needs: filter