Skip to content

fix(renovate): major-only Python lower-bound bumps + 30-day major grace#344

Merged
JacobPEvans merged 2 commits into
mainfrom
fix/renovate-major-only-floors
May 24, 2026
Merged

fix(renovate): major-only Python lower-bound bumps + 30-day major grace#344
JacobPEvans merged 2 commits into
mainfrom
fix/renovate-major-only-floors

Conversation

@JacobPEvans
Copy link
Copy Markdown
Owner

Summary

  • Adds an org-wide 30-day minimumReleaseAge for any major-version Renovate PR. CVE bumps still bypass via the existing vulnerabilityAlerts 0-day path.
  • Restricts the PR fix(renovate): bump Python >= lower bounds on every release #343 rangeStrategy: bump rule for pep621/pip_requirements/pip_setup/poetry/pipenv to matchUpdateTypes: ["major"]. Minor/patch updates fall back to Renovate's default replace, which is a no-op when the existing range already satisfies the new version — so no more floor-bump PRs for non-major releases.

Why

PR #343 made every Python release (including minor/patch) bump the >= floor, producing PRs like huggingface-hub: >=0.23 → >=1.16.1 (mlx-benchmarks#56) and google-adk: >=0.5.0 → >=2.0.0 (mlx-benchmarks#57). The user feedback: floors should express a security/compatibility major only, and PRs should not open for minor/patch floor moves. Also, all major-version updates should get a 30-day grace so upstream regressions surface before adoption.

What is NOT in this PR

Renovate will still write >=N.M.P on a major bump natively (e.g. >=1.16.1, not >=1.0.0). Rewriting the floor format to >=MAJOR.0.0 requires a post-PR workflow that pushes a signed fixup commit to the Renovate branch — that is worth its own focused PR with the App-token signing path. Tracked as a follow-up issue.

Test plan

  • Wait for the next pep621/pip_requirements minor/patch update Renovate would have opened — confirm no PR appears.
  • Wait for the next pep621/pip_requirements major bump — confirm the PR opens with >=N.M.P floor, and only after at least 30 days from release.
  • Confirm a CVE-driven update still opens at 0 days (vulnerabilityAlerts.minimumReleaseAge: 0 days unchanged).
  • Re-poke mlx-benchmarks#56 and Dependency Dashboard #57 to confirm Renovate still produces a major-bump PR under the new rules.

PR #343 made `rangeStrategy: bump` apply to every release for
pep621/pip_requirements/pip_setup/poetry/pipenv, so the `>=` floor moved
on minor and patch releases too. That floods consumer repos with PRs
that only re-state the floor at the latest pinpoint version — no
security or compatibility signal behind them.

Two changes:

1. 30-day grace period for any major-version update, org-wide. Gives
   upstream ecosystems time to surface breaking regressions before we
   adopt. CVE bumps still bypass via `vulnerabilityAlerts` (0 days).

2. Restrict the Python `>=` bump rule to `matchUpdateTypes: ["major"]`.
   Minor/patch updates now fall back to Renovate's default `replace`
   strategy, which no-ops when the existing range already satisfies the
   new version — exactly what we want for security/compatibility floors.

After this, Renovate still produces `>=N.M.P` (e.g. `>=1.16.1`) on
major bumps. Follow-up: a reusable normalization workflow that rewrites
those to `>=N.0.0` so floors only express the major version.
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refines the Renovate configuration to improve the quality and timing of dependency update PRs. By implementing a 30-day grace period for major versions and limiting automatic lower-bound floor bumps to major releases only, the changes reduce noise from minor/patch updates while ensuring major version transitions are handled with more caution.

Highlights

  • Major Update Grace Period: Introduced an org-wide 30-day minimum release age for all major-version updates to allow time for upstream regressions to surface.
  • Python Dependency Floor Bumping: Restricted the rangeStrategy: bump rule for Python package managers to only apply to major updates, preventing unnecessary PRs for minor and patch releases.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.


The major version waits a while, / To keep the codebase free of guile. / No minor bumps to flood the queue, / Just stable paths for all of you.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

The bump rule now states the full policy:

- Default: floors are `>=N.0.0` (major only).
- CVE exception: pin to the OLDEST secure version (not latest) and
  document every CVE in an inline comment block above the floor.
- Normalizer must preserve floors preceded by such a comment block.

Canonical pattern lives in mlx-benchmarks/space/requirements.txt
(pyarrow, pillow, orjson, idna).
@JacobPEvans JacobPEvans merged commit b4af6b4 into main May 24, 2026
2 checks passed
@JacobPEvans JacobPEvans deleted the fix/renovate-major-only-floors branch May 24, 2026 23:26
JacobPEvans added a commit to dryvist/mlx-benchmarks that referenced this pull request May 25, 2026
* fix(deps): floor huggingface-hub at major-only (>=1.0.0)

Renovate PR #56 merged with `huggingface-hub>=1.16.1`. Per the new
lower-bounds policy (JacobPEvans/.github#344), `>=` floors should
express the major version only. Rewrite to `>=1.0.0`.

Other security-fix floors in this file (pyarrow, pillow, orjson, idna)
intentionally pin at the CVE-fix patch version per the inline comment
and are left untouched.

* fix(deps): align pyproject.toml + uv.lock huggingface-hub floor to >=1.0.0

Addresses gemini-code-assist review on PR #60. The space/requirements.txt
fix to `>=1.0.0` left pyproject.toml at `>=0.23` and the uv.lock
specifier matching it, creating cross-file drift. All three now express
the major-only floor consistently.
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