Skip to content

Dependabot has no groups, so the pairs #282 consolidated by hand are split and red again #304

Description

@Nicolas0315

Summary

.github/dependabot.yaml has no groups, so every bump is opened as its own PR. For dependency families whose members must move together, that is not just noisy: whichever half opens first is red by construction, and neither can merge.

This is already documented. #282 consolidated 47 PRs by hand and its "Why one PR rather than 47" table lists five pairs that are "red on main as separate Dependabot PRs, and green here purely because they move together". The consolidation landed, but the config that produced the split did not change, so the same pairs are open and split again right now:

Pair from #282's table Currently open as Failing checks
vitest + @vitest/coverage-v8 -> 5.0.1 #290 / #291 4 / 2
vite 8 + @vitejs/plugin-react 6.1.1 #285 / #273 0 / 314
react + react-dom #288 / #287 70 / 70
tailwindcss + @tailwindcss/vite 4.3.3 #277 / #270 1 / 0
codeql-action/init + /analyze (merged via #282) n/a

The coupling is structural, not incidental, and the manifests say so:

#236 raising open-pull-requests-limit to 100 is what released the queue, and #282 describes the result as "47 full CI runs and, more importantly, wrong". With the limit raised and no grouping, that outcome is now the steady state rather than a one-off: the 2026-09-18 batch (#289 through #303) reproduced it within a week.

Proposal

Add groups to both ecosystem entries in .github/dependabot.yaml, one group per family, each with the evidence for its coupling in a comment beside it:

  • npm: vitest (vitest, @vitest/coverage-v8), vite (vite, @vitejs/plugin-react), react (react, react-dom, @types/react, @types/react-dom), tailwind (tailwindcss, @tailwindcss/vite).
  • github-actions: codeql-action (github/codeql-action*), since init and analyze are two entry points of one action repository and the runner rejects a mismatched pair.

Deliberately not grouped, because the manifests show no coupling: @vitest/eslint-plugin (versions independently, peers on vitest: "*"), the eslint plugin family (wide eslint ranges, no pins), oxlint + oxlint-tsgolint (oxlint-tsgolint declares peerDependencies: {}), drizzle-orm + drizzle-kit (drizzle-kit declares no peer on drizzle-orm). Grouping those would only hide which bump broke what.

This does not touch the three packages #282 held back (typescript 7.0.2, jsdom 30, eslint-plugin-unicorn 74); those are ignore/policy decisions, not grouping ones.

Notes

I have opened the equivalent change on the sibling repo as arkorlab/haru#46, where the codeql-action split was breaking every bump from 4.37.1 to 4.38.0 (ten in a row, 2026-07-17 to 2026-09-10, verified against the job logs at both ends of the range) and pinning the workflows to 4.37.0. The arkor side is the same root cause with a larger npm surface.

One caveat I could not settle from outside CI: whether Dependabot honours groups against catalog: entries in pnpm-workspace.yaml. Group matching is documented by dependency name and the pnpm-catalog support already resolves these names, so it should hold, but the first real proof is the next release of one of the paired packages. The github-actions group is unaffected, since actions are not catalog-resolved.

Happy to send the PR if the shape above looks right, or to adjust which families are in scope first.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions