mirror of
https://github.com/Comfy-Org/github-workflows.git
synced 2026-11-05 00:17:37 +00:00
[PR #22] [MERGED] fix(cursor-review): fail loud when a panel model id is delisted #33
Labels
No labels
cursor-review-catalog-drift
groom
groom
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/github-workflows#33
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/github-workflows/pull/22
Author: @mattmillerai
Created: 7/7/2026
Status: ✅ Merged
Merged: 7/21/2026
Merged by: @mattmillerai
Base:
main← Head:matt/be-2627-fail-loud-delisted-models📝 Commits (3)
b0af3d5fix(cursor-review): bump dead kimi-k2.5 model id to kimi-k2.7-codef1800d7fix(cursor-review): fail loud when a panel model id is delisted720a7e5Merge remote-tracking branch 'origin/main' into matt/be-2627-fail-loud-delisted-models📊 Changes
3 files changed (+311 additions, -17 deletions)
View changed files
📝
.github/cursor-review/extract-findings.py(+82 -0)📝
.github/cursor-review/tests/test_extract_findings.py(+89 -2)📝
.github/workflows/cursor-review.yml(+140 -15)📄 Description
ELI-5
The review panel pins one exact model name per AI lab. When a lab quietly
retires (delists) one of those names, the panel used to just… skip that model
and say nothing — so we'd run a review with 3 labs instead of 4 for weeks and
never notice. This PR makes that mistake loud: the run now checks every
pinned model against the live catalog before it starts, and fails the whole
run (with a clear "this model id is gone, here's the closest one" message) if
any pin is dead. As a backup, even if that check is bypassed, a dead model now
shows up as
(error)in the panel summary instead of a silent "found nothing".What changed
1. Preflight catalog check (fail-loud, primary). A new
preflightjob runscursor-agent modelsonce, before the 8-cell fan-out, and hard-fails the run ifany pinned panel model id is absent from the live catalog — naming the missing
id(s) plus the closest same-lab hint. This job is also the single source of
truth for the matrix model list (the
reviewmatrix now consumes it viafromJSON), so the list we validate and the list we review can never driftapart. Fork PRs / runs without
CURSOR_API_KEYskip the check cleanly, matchingthe gate's existing fork handling (forks already yield
should_run=false).2. Defense-in-depth in
extract-findings.py(backup). The per-cell run stepnow forwards the cursor-agent exit code + stderr into
extract-findings.py. Acell whose call exited non-zero or whose stderr matches
Cannot use this model:is now classifiedstatus=error(whichpost-review.pyalready renders as
(error)and counts as a failed cell, firing the existingdegraded-panel path) instead of a silent
empty. A non-zero exit that stillproduced valid findings is left untouched, so real findings are never discarded.
Testing
python3 -m unittest discover -s .github/cursor-review/tests -p 'test_*.py'—27 tests, all green. New coverage:
ClassifyRunErrorTest,ParseExitCodeTest,and end-to-end
test_delisted_model_is_error_not_empty(the core regression).reviewmatrix expands from the preflightoutput).
Notes / judgment calls
matt/bump-kimi-k2.7-code). That PR carries thelive
kimi-k2.7-codepin; this PR is the durability half. GitHub retargets tomainonce #21 merges. Review sees only this net diff.model list a second time in the preflight (a new drift vector — the whole bug
this fixes), the preflight owns the list and the matrix derives from it.
the separate
judge_modelinput. Its default equals a panel pin (so it'scovered transitively), and a delisted judge already degrades via consolidate's
judge-failed banner rather than silently. A custom, delisted
judge_modeloverride would not be caught here — noted as a possible follow-up.
bump ticket) is intentionally not included — fail-loud on the next PR run is
enough for now.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.