ci(cursor-review): re-sync workflows_ref to the pinned uses: SHA and stop Dependabot splitting the pair - #161
mattmillerai wants to merge 2 commits into
Conversation
The caller pins the cursor-review reusable twice: the `uses:` SHA selects the workflow definition and the `workflows_ref:` input selects the prompts/scripts loaded at run time. Two Dependabot bumps rewrote `uses:` only, leaving the two 30 commits apart, so the job ran one commit's workflow against another commit's assets (11 files differ across the cursor-review surface between them). Point `workflows_ref:` at the SHA `uses:` already holds and correct the stale trailing comment. The resulting file is byte-identical to the state the caller-fleet bot's own bump PR would have produced. Also stop Dependabot from re-splitting the pair: it only understands `uses:`, so every future bump recreates this. Both ignore entries are needed - a reusable is named by its full path, and a bare `dependency-name` is an exact match. The upstream bump-callers fleet moves both pins together and opened the matching PR against this repo before, so the pin keeps an owner.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Team Run ID: 📒 Files selected for processing (2)
Included review availability: 0 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour. 📝 WalkthroughWalkthroughThe changes prevent Dependabot updates for ChangesWorkflow dependency maintenance
Priority: ⬇️ Low Estimated code review effort: 1 (Trivial) | ~5 minutes Change: Bug fix Suggested reviewers: Merge Risk: ⚪ Minimal · up to The workflow pins and Dependabot ignore policy are aligned, with no identified merge-blocking risk. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
🔍 Cursor Review — Consolidated panel
Triggered by @mattmillerai.
Found 2 finding(s).
| Severity | Count |
|---|---|
| 🟢 Low | 2 |
Panel: 6/6 reviewers contributed findings.
robinjhuang
left a comment
There was a problem hiding this comment.
Auto-approved under the full-autonomy policy.
Gates verified at 683f66c21bdacbb341ecde451a664f13c40b4869:
full-autonomylabel present- assigned to, or review requested from, @robinjhuang
- not a draft
- 8 required check(s) green — none failing, none pending
Issued by full-autonomy-approve.yml (run). This approval attests
that the machine gates above passed at this commit. It does not attest that a
human read the diff.
main landed #164 (cloud-code-bot, `bump-cursor-review-callers`), which re-synced BOTH cursor-review pins to github-workflows@f22ad8f — the same fix this branch made by hand at the older 425c154. Resolve the ci-cursor-review.yml conflict in main's favour: its pair is already aligned and newer, so this branch's hand re-sync is now redundant. Keeps this branch's remaining, still-unique contribution: the .github/dependabot.yml `ignore` that stops Dependabot from rewriting `uses:` alone and splitting the pair again. Verified on the merged tree: ruff check, ruff format --check (57 files), mypy src (21 files), pytest (975 passed, 9 skipped), check_public_repo_hygiene.py; ci-cursor-review.yml contains exactly one 40-hex SHA (f22ad8f...), i.e. the two pins agree.
7a2b8ea
|
Heads-up for re-review: this PR's diff got smaller, not bigger. It was conflicting with Resolved in main's favour: its pair is already aligned and strictly newer, so the hand re-sync here was redundant. Net diff vs Worth noting that #164 is also the evidence the Merged tree verified green: Both cursor-review threads are answered and resolved; the pin-alignment guard raised in one of them is deferred to a tracked follow-up (upstream fix + a warn-vs-fail rollout decision), not fixed here. PR body updated throughout. The approval was dismissed by this push, so re-review is needed — a human still presses merge. |
|
🤖 The reviews loop filed Linear follow-up ticket(s) for review thread(s) deferred as out of scope for this PR:
The following carry
|
robinjhuang
left a comment
There was a problem hiding this comment.
Auto-approved under the full-autonomy policy.
Gates verified at 7a2b8ea2a97711d11124918851942b29bd02f4e4:
full-autonomylabel present- assigned to, or review requested from, @robinjhuang
- not a draft
- 8 required check(s) green — none failing, none pending
Issued by full-autonomy-approve.yml (run). This approval attests
that the machine gates above passed at this commit. It does not attest that a
human read the diff.
ELI-5
This repo's Cursor-review job pins the shared reusable workflow in two places:
uses:picks which workflow definition runs, and theworkflows_ref:input picks which prompts/scripts that workflow downloads at run time. Dependabot only ever rewritesuses:, so it splits the pair — twice already. This tells Dependabot to stop touching that pair and leave it to the bumper fleet that moves both halves together.What changed
.github/dependabot.yml— the existinggithub-actionsentry gains a two-entryignorefor theComfy-Org/github-workflowsreusables. Nothing else in the file changes: thepipentry, and thegithub-actionsentry'sschedule,open-pull-requests-limit,commit-message,labelsandgroups, are untouched.That is now the whole diff — 10 lines in one file. See Superseded half below for what left it.
Both entries are load-bearing and must not be collapsed to a single
Comfy-Org/github-workflows*. Dependabot names a reusable-workflow dependency by its full path (PR #146's own title readsComfy-Org/github-workflows/.github/workflows/cursor-review.yml), and adependency-namewithout a wildcard is an exact match — so the exact form covers theowner/reposhape and the/*form covers the per-file shape, while a single trailing star would expand unanchored and also swallow any future sibling repo whose name merely starts withgithub-workflows. This follows the precedent documented at length inComfy-Org/cloud's own.github/dependabot.yml, which I read directly rather than copying from the work item.Superseded half — the workflow edit is gone, on purpose
This PR originally also re-synced
.github/workflows/ci-cursor-review.yml, movingworkflows_ref:fromffcc3f5up to425c154(the SHAuses:already held). While it sat open,mainlanded #164 — opened byapp/cloud-code-botwith the body "Opened by thebump-cursor-review-callersworkflow", merged 2026-09-18T23:33Z — which moved both pins together to the newerf22ad8f. That is the same fix at a later SHA, produced by the fleet this PR'signorehands the job to.The two therefore conflicted, and the conflict was resolved in main's favour: its pair is already aligned and strictly newer, so the hand re-sync here was redundant.
ci-cursor-review.ymlon the merged tree contains exactly one distinct 40-hex SHA,f22ad8f888fdef6f0a50bfdfa96bb20f74f651a0, so the two pins agree — which is the outcome this PR was after; it just arrived from upstream first.Worth stating plainly, because it is the load-bearing evidence for the
ignore: #164 is a live demonstration that the compensating control works. This repo is not merely eligible for the bumper fleet's roster — the fleet fired on it and moved both halves correctly.How the split happened
uses:andworkflows_ref:were in lock-step until two Dependabot PRs rewroteuses:alone — #136 (merged 2026-09-09) and #146 (merged 2026-09-14) — leaving the job running a September-12 workflow definition against August-28 assets for roughly nine days. The caller-fleet bot's own PR #125, which correctly moved both pins to425c154, was closed unmerged on 2026-09-14 at 21:15Z — 33 minutes after #146 merged over it. That is the loop thisignorebreaks.Verification
Run on the merged tree (this branch merged with
main), not on the pre-merge branch:python3 -c "import yaml; yaml.safe_load(open('.github/dependabot.yml'))"parses; thegithub-actionsentry'signorereads back as exactly the twodependency-nameentries and itsgroups(actions-minor-and-patch) is intact..github/workflows/ci-cursor-review.ymlalso parses as YAML.grep -oE '[0-9a-f]{40}' .github/workflows/ci-cursor-review.yml | sort -u→ exactly one line,f22ad8f888fdef6f0a50bfdfa96bb20f74f651a0. The two pins agree.git diff origin/main --stat→.github/dependabot.yml | 10 ++++++++++, one file. No stray carry-over from the conflict resolution.ruff check .(all checks passed),ruff format --check .(57 files already formatted),mypy src(no issues, 21 files),pytest -q(975 passed, 9 skipped), andpython3 scripts/check_public_repo_hygiene.py(no internal-only references — this one matters because the diff adds aComfy-Org/<repo>reference to a world-readable file).Falsification of the capability this diff denies
An
ignoreentry removes a capability — automatic bumping of these reusables — so before shipping it the replacement path was checked rather than asserted from the comment text. Read-only checks againstComfy-Org/github-workflows:.github/workflows/bump-cursor-review-callers.ymlexists and drives.github/bump-callers/bump-callers.sh, which carries an explicitINPUT_PIN_REforworkflows_ref:alongside theuses:rewrite and an assertion that the two halves move together. Since then the path has been confirmed empirically rather than by inspection: PR #125 and PR #164 in this repo were both opened by that workflow, and #164 merged. So the pin keeps a working owner after this change; it does not become orphaned.Scope swept, including the half this does not fix
All 5 workflow files and all 16
uses:pins in.github/workflows/were swept. Exactly 1 is aComfy-Org/github-workflowsreusable and it is the repo's onlyworkflows_ref:— so there is no second split pin here. The other 15 pins cover 6 distinct third-party/marketplace actions (actions/checkout,actions/setup-python,actions/upload-artifact,actions/download-artifact,pypa/gh-action-pypi-publish,contributor-assistant/github-action) and are deliberately left under Dependabot's management — theignoreis scoped to the two reusable-workflow name forms precisely so those keep getting bumped.Residual
Require a pinned workflows_refstep only checks that the input is a non-empty 40-hex string; verified atf22ad8f, nothing compares it to the caller'suses:SHA. This PR removes the automated cause of a split but not a human edit or partial revert. Deferred to a follow-up rather than fixed here: the clean lever is upstream (job.workflow_shais by definition theuses:SHA and the workflow already reads it), and the warn-vs-fail-closed rollout across the caller set is a human call. Tracked from this thread.ignorehas noupdate-types:/versions:qualifier, so it suppresses Dependabot security advisories for these reusables as well as version updates. That is the upstream precedent's deliberate trade-off (a first-party org repo pinned to reviewed SHAs is not a public-registry package, so an advisory-driven bump is not its update path), and this PR adopts it as-is rather than re-litigating it. Naming it because it is a real reduction in coverage that the diff does not make visible on its own.mainis clean, not as evidence about theignore.Provenance