CI gap: path-filtered checks never gate a merge; add the shepherd-posted ci-gate status (#4825 step 1) and stop auto-merge on red
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 38/100
调研方向
Start by reading shepherd_gh.decide() and the shepherd-event and shepherd-reconcile workflows, then inspect REQUIRED_CHECKS and ADVISORY; the issue does not name their file paths. Implement the ci-gate status rules described here, ensure real failures disable auto-merge, and check the workflows that trigger reconciliation. Done means open PRs receive the specified pending, failure, or success status and a red check blocks auto-merge; the owner still needs to decide whether equivalence-e2e is advisory.
由索引模型根据 Issue 内容生成。
描述
The gap (found 2026-10-28)
Path-filtered workflows run when a change can affect them (#6278), but their result never gates a merge. #6881, #6894, #6895 and #6899 all merged with DOOM-rosetta and/or call-graph-accuracy-audit red, and main stayed red for both until #6908.
How they got through:
- Churn gives a
mergeverdict and addsshepherd:mergebefore full CI has run on that head (it relies on the worker'spr_gates --fast). - The shepherd turns on auto-merge, and GitHub merges once the ruleset's required checks pass.
- Ruleset 24824983 requires only
det,full-suite,ground-truth,mypy-auditandruff-audit. - In
shepherd_gh.decide(), a real failure of any other check only addsshepherd:needs-fixand a digest comment. It never joinsblocked, so auto-merge stays on. #6881, #6894 and #6895 merged wearing bothshepherd:mergeandshepherd:needs-fix. - There's also a timing race. #6899's DOOM-rosetta run (40715491522) started at 15:23:39Z and took 31.5 min; GitHub merged at 15:54:37Z, about half a minute before it finished. A shepherd that blocks on red can't catch a check that hasn't finished.
#4825 step 1 planned the fix: one always-reporting ci-gate, required by the ruleset, with path-filtered workflows feeding into it. What shipped was the five core checks only.
Fix
A. A ci-gate commit status, posted by the shepherd (not a polling job).
A polling job would hold a runner for up to 30+ min per PR. The shepherd already reads every check run and status on the head, on every push (shepherd-event) and after CI (shepherd-reconcile). So it posts the status ci-gate on the PR head:
pending: a draft PR (its heavy checks are skipped, #5104), any check still running or being retried after an infra failure, a failure caused by main (waiting-on-main), or a required check (REQUIRED_CHECKS) that hasn't reported yet. Required checks always report (#4826), so this also covers check runs that haven't been created yet right after a push.failure: any real failure, from any workflow.success: otherwise.- The shepherd's own runs and the
ci-gatestatus itself are left out of the verdict. shepherd-reconcilealso triggers on DOOM-rosetta and Call Graph Accuracy Audit completions. Other workflows are picked up by the 20-min cron.ci-gateis posted for every open PR, not just labelled ones, so a merge by hand is gated too.
C. A real failure turns auto-merge off. A needs-fix finding joins blocked, so the shepherd disables auto-merge until the head is green again.
Rollout (owner steps)
- Merge the shepherd change.
ci-gatestarts reporting but is not yet required. - Make sure the squid-shepherd App has Commit statuses: write. Without it the post fails and the PAT fallback is used.
- After ci-gate has reported on every open PR for a while, add
ci-gateto ruleset 24824983 (status from the squid-shepherd app integration).
Open question for the owner
equivalence-e2e is documented as not required "so its wall time never holds a merge" (docs/ci.md). With ci-gate, every workflow that runs gates the merge, E2E included. Should E2E be advisory instead? It would be one entry in the ADVISORY tuple.
Related: #4825, #6278, #6770, #6266, #6908
- 主要语言
- Python
- 星标
- 57
- 派生
- 11
- 平均合并
- 1 小时 15 分钟
- 30 天内合并 PR
- 976
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
squid-protocol/gitgalaxy 的其他 Issue
-
enhancement legacy-modernization priority: low scope:frontier
难度 5/5 一周以上 新手友好度 35/100
squid-protocol/gitgalaxy#6926 ·
维护者通常 1 天内回复
-
bug call-graph core-engine priority: high scope:core
难度 5/5 一周以上 新手友好度 25/100
squid-protocol/gitgalaxy#6904 ·
维护者通常 1 天内回复
-
claim:melek enhancement era:2 legacy-modernization priority: high scope:core testing
难度 5/5 一周以上 新手友好度 35/100
squid-protocol/gitgalaxy#6882 · 7 条评论 ·
维护者通常 1 天内回复
-
Siblings of #5042: cics-crucible programs that do not translate whole (17 programs, 8 hole classes)未关闭enhancement legacy-modernization priority: high scope:frontier
难度 5/5 一周以上 新手友好度 35/100
squid-protocol/gitgalaxy#6876 ·
维护者通常 1 天内回复
-
enhancement legacy-modernization priority: high scope:core testing
难度 5/5 一周以上 新手友好度 25/100
squid-protocol/gitgalaxy#6839 ·
维护者通常 1 天内回复
查看 squid-protocol/gitgalaxy 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 76/100
microsoft/agent-lightning#661 ·
维护者通常 2 天内回复
-
area/profiles comp/cli P3 type/feature
难度 2/5 1-3 小时 新手友好度 74/100
NousResearch/hermes-agent#146372 ·
维护者通常 1 天内回复
-
[BUG] OpenAI-compatible embedding model alias breaks embedder construction可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 2/5 1-3 小时 新手友好度 65/100
维护者通常 1 天内回复
-
[oblt-aw][autodoc] Document obs-aw-automerge contract and fix automerge doc inconsistencies可能已有人在做 @github-actions 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
-
GeoSeries scale and skew tests fail with pytest 9.2.0可能已有人在做 @jiayuasu 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复