Skip to content

fix(deps): restrict the auto-merged groups to minor and patch - #40

Merged
guarzo merged 1 commit into
mainfrom
dependabot-no-auto-majors
Aug 3, 2026
Merged

guarzo merged 1 commit into
mainfrom
dependabot-no-auto-majors

Conversation

@guarzo

@guarzo guarzo commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Fixes a hazard I introduced in #24/#30. Worth merging before any of the open Dependabot PRs are rebased.

What changed and why

linting, testing and types had no update-types restriction, so majors grouped into them — and those are exactly the three groups dependabot-auto-merge.yml auto-merges. The first Dependabot run demonstrated it rather than hypothetically:

#32 linting group:  eslint ^9.39.5 -> ^10.8.0,  @eslint/js ^9 -> ^10
#33 testing group:  vitest ^3.0.0  -> ^4.1.10

Both are green on all three required checks.

My original justification was that these groups "break loudly and immediately in CI." That reasoning does not survive contact with a major. eslint 10 passing npm run lint says nothing about whether its rule semantics moved under the config deliberately tuned in the lint/format stage; vitest 4 passing says nothing about whether test semantics survived. A major that passes CI is the worst case for auto-merge, because there is no signal at all.

All three groups now carry update-types: [minor, patch]. Majors match the patterns but not the update-types, so they fall through every group and arrive as individual PRs.

That fall-through is not an assumption — this run confirmed it. #34 (pg-boss 10 -> 12), #35 (zod 3 -> 4) and #36 (typescript 5.9 -> 7.0) all match minor-and-patch's * pattern, fail its update-types, and arrived as individual PRs.

react and drizzle deliberately keep majors: they must move as a unit, and neither is on the auto-merge list, so a human merges them either way.

The comment in dependabot-auto-merge.yml explaining the group list is updated too — it still claimed CI-fails-loudly as the safety argument, which is now the update-types restriction instead, with a note to check update-types before adding any group to that list.

What CI cannot check

Parsed the config and printed the effective restrictions:

react            update-types=ANY (majors included)
drizzle          update-types=ANY (majors included)
linting          update-types=['minor', 'patch']
testing          update-types=['minor', 'patch']
types            update-types=['minor', 'patch']
minor-and-patch  update-types=['minor', 'patch']

actionlint clean on the workflow. npm run format:check -> All matched files use Prettier code style!.

Dependabot's own behaviour cannot be exercised until it next runs. GitHub validates dependabot.yml on push — check the Insights > Dependency graph > Dependabot tab after merge for a config error.

Deploy notes

None.

Flags

The linting, testing and types groups had no update-types restriction,
so majors grouped there — and those three are exactly the groups
dependabot-auto-merge.yml auto-merges. The first Dependabot run proved
the hazard: #32 carried eslint 9 -> 10 and #33 carried vitest 3 -> 4,
both with all three required checks green.

"CI is green" is not evidence about a major here. eslint 10 passing
npm run lint says nothing about whether its rule semantics moved under
the config tuned in the lint/format stage; vitest 4 passing says
nothing about whether test semantics survived. A major that passes CI
is the worst case for auto-merge because there is no signal at all.

Majors now match these patterns but not their update-types, so they
fall through every group and arrive as individual PRs — the same path
#34 (pg-boss 10->12), #35 (zod 3->4) and #36 (typescript 5->7) already
took, which confirms the fall-through empirically.

react and drizzle keep majors on purpose: they must move as a unit,
and neither is on the auto-merge list.
@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 16 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 131a740d-8711-4c35-bc67-a0e3dc42ef4b

📥 Commits

Reviewing files that changed from the base of the PR and between 110525d and 319ccdf.

📒 Files selected for processing (2)
  • .github/dependabot.yml
  • .github/workflows/dependabot-auto-merge.yml

Comment @coderabbitai help to get the list of available commands.

@guarzo
guarzo merged commit aeff20b into main Aug 3, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant