fix(deps): raise the gitpython floor to 3.1.59 for four new advisories - #39553
fix(deps): raise the gitpython floor to 3.1.59 for four new advisories#39553mateo-berri wants to merge 4 commits into
Conversation
Greptile SummaryRaises the workspace GitPython dependency floor and synchronizes the lockfile manifest so future resolutions retain the security-hardened minimum version.
Confidence Score: 5/5The PR appears safe to merge because the dependency floor and lockfile manifest are consistent and no actionable regressions remain. The current PR diff is limited to a compatible minimum dependency constraint and synchronized lock metadata; no resolved package changes, rule violations, or new correctness issues were identified.
|
| Filename | Overview |
|---|---|
| pyproject.toml | Adds a valid workspace-level minimum GitPython constraint alongside existing dependency floors. |
| uv.lock | Mirrors the new constraint and refreshes the relative resolution timestamp without changing package versions. |
Reviews (6): Last reviewed commit: "Merge remote-tracking branch 'origin/lit..." | Re-trigger Greptile
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
|
bugbot run |
…itellm_bump_gitpython_3159 # Conflicts: # uv.lock
|
bugbot run |
…itellm_bump_gitpython_3159 # Conflicts: # uv.lock
|
bugbot run |
Pull request was closed
…itellm_bump_gitpython_3159 # Conflicts: # uv.lock
|
bugbot run |
LiteLLM Rust workflowWorkflow completed successfully for |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit ee1bca4. Configure here.
TLDR
Problem this solves:
How it solves it:
gitpython>=3.1.59uv constraint floor, the same shape as the tornado floor in fix(deps): raise the tornado and pypdf floors for six new advisories #39188User Flow
Before: a contributor sees a red check on their PR that they did not cause and cannot fix from their own diff
litellm_internal_stagingtouching anything at allosv-scanred, reportingTotal 1 package affected by 4 known vulnerabilities (1 Critical, 3 High, 0 Medium, 0 Low, 0 Unknown)gitpython3.1.58with fixed version3.1.59, sourced fromuv.lock, a file their PR never touched: https://osv.dev/PYSEC-2026-3785 (CVSS 7.8), https://osv.dev/PYSEC-2026-3786 (9.3), https://osv.dev/PYSEC-2026-3787 (8.7) and https://osv.dev/PYSEC-2026-3788 (7.1)After: the same check comes back green, so a red there again means something the PR actually introduced
litellm_internal_stagingtouching anything at allosv-scangreen, reportingNo issues foundRelevant issues
Linear ticket
Resolves LIT-6840
Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
uv run pytest tests/test_litellm/<your_test_file>.py -v. Leave the suites (make test-unit-*,make test-unit) to CI: it finishes in ~15 minutes where a laptop takes an hour or more@greptileaito re-request a review after pushing changes)Delays in PR merge?
If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).
Screenshots / Proof of Fix
gitpython is not a direct dependency: it reaches the lock only through
mlflow-skinny, under the optionalmlflowextra, so the floor goes in[tool.uv] constraint-dependenciesthe same way tornado's did in #39188.uv lock --upgrade-package gitpythonthen moves gitpython alone, and the whole lock diff is that package's three lines, the new constraints entry, and the relativeexclude-newerstamp. The package count stays at 453 on both sides. Nothing in the repo importsgit, and the extras the Docker images build install no gitpython at all (uv sync --frozenover that extra set resolves without it, while--extra mlflowresolvesgitpython==3.1.61), so the change is confined to the lockfile and to anyone installing the optionalmlflowextra from it.Both local legs run the scanner the workflow pins (osv-scanner v2.3.8, sha256 verified against the release's
osv-scanner_SHA256SUMS) with the repo'sosv-scanner.toml, the same command.github/workflows/osv-scan.ymlruns:Before (658f506)
osv-scancheck on an unrelated PR at that base fails with the four findings (run):After (d0935f6)
uv lock --upgrade-package gitpythonwith the raised floor:osv-scancheck passes at this commit (run)After (104ad1c, staging merged in to clear the uv.lock conflict)
uv lock --checkat the merged tip:This PR's own
osv-scancheck passes at this commit (run)Re-checked on 2026-09-04 with a local three-way merge of this tip into staging at b3c867c (which has moved uv.lock again since, for the uvloop bump):
uv lock --checkresolves 455 packages, the package set is identical to staging's, and the same osv-scanner v2.3.8 scan of the merged lockfiles ends inNo issues foundThe floor is what this PR still lands, so here it is biting. Staging at b3c867c has no floor and lets a re-lock walk gitpython back to the vulnerable version:
The same command at this tip refuses with exit 1. The
>=3.1.59uv attributes to mlflow-skinny is the workspace constraint applied on that edge; mlflow-skinny 3.15.0's own metadata on PyPI isgitpython<4,>=3.1.9:After (b5e5212, staging merged in again after the MongoDB Atlas vector store PR re-locked uv.lock)
uv lock --checkat the merged tip:uv.lockdiff against the merge target (staging at e733ca1) is the relative stamp plus the manifest constraint line, so the resolved set is identical to staging's, 456 packages on both sides:This PR's own
osv-scancheck passes at this commit (run)The floor-bite dry-run from the previous section holds here:
uv lock --dry-run -P 'gitpython==3.1.58'refuses with exit 1 and the same mlflow-skinny conflict/live-pr-riskcarries over from 104ad1c: this commit only merges staging and moves the lock stamp, and with the resolved set identical to staging's it cannot change runtime behaviorAll 33 required checks pass on the merge of this tip onto staging df3b8a6 (run 33941905182), which carries the two staging fixes (fix(proxy): strip every TypedDict qualifier before numeric form-field detection #39780, fix(datadog_llm_obs): keep guardrail_cost_by_unit on redacted spans #39848) behind the earlier
proxy-infraandintegrationsreds; the 01:31Z and 03:07Z runs had both checked out the same staleMerge b5e5212f3b into e2741b5643commit, so a close and reopen at 03:27Z was needed to test the current baseAfter (ee1bca4, staging merged in a third time after the enterprise and proxy-extras version bump re-locked uv.lock)
uv lock --checkat the merged tip:uv.lockdiff against the merge target (staging at bf51dea) is the relative stamp plus the manifest constraint line, so the resolved set is identical to staging's, 456 packages on both sides:This PR's own
osv-scancheck passes at this commit (run)The floor-bite dry-run holds here too, exit 1 with the same mlflow-skinny conflict:
/live-pr-riskcarries over from 104ad1c: this commit only merges staging and moves the lock stamp, and with the resolved set identical to staging's it cannot change runtime behaviorType
🐛 Bug Fix
Caveats (if any)
Low
exclude-newerwindow. 3.1.60 and 3.1.61 are upstream's fixes for regressions 3.1.59 shipped (git config escape semantics, repository discovery precedence), so pinning the floor exactly would be the worse of the twoexclude-newerstamp moving from2026-09-02T16:58:34Zto2026-09-02T22:30:10Zplus the manifest constraint line: 456 packages on both sides and no resolved version changes, since staging already carries gitpython 3.1.61. The stamp comes fromexclude-newer-span = "P3D"; pinning it back with--exclude-neweron the command line drops the span entry from the lock and failsuv lock --check, so it moves with every re-lock[tool.uv] constraint-dependenciesis workspace-local, so the publishedlitellmmetadata is unchanged andpip install litellm[mlflow]still resolves gitpython through mlflow-skinny's owngitpython<4,>=3.1.9(3.1.61 today). Binding that too would mean adding a direct dependency on a package litellm never importsproxy_store_model_in_db_testsis red at this tip ontests/store_model_in_db_tests/test_openai_error_handling.py::test_chat_completion_bad_model_with_spend_logs(assert '' == 'non-existent-model'). It is red on 10 of the 15run-ciPRs updated today and has its own fix in test(store_model_in_db): assert the 400 contract in the unknown-model spend log test #39842, so it is unrelated to the dependency bumplitellm/,tests/, andenterprise/trees are byte-identical to this branch's:misc / Run testsfailstest_star_import_exports_public_apion every Python version there too, and the CircleCI jobsbatches_testing,auth_ui_unit_tests,litellm_utils_testing, andgoogle_generate_content_endpoint_testingfail the same tests as staging's scheduled pipeline 89211. The circular imports and that test both arrive with staging commit c091dd4 (perf: lazy-load SDK symbols so import litellm stays under 60 MB RSS #39121); a live import probe at its parent 17e1312 passes and at c091dd4 fails. The fix belongs on staging, not in a dependency floor bump: LIT-7083 tracks it and test(lazy_imports): check star-import exports against globals(), not dir() #39958 covers the star-import testFinal Attestation
Note
Low Risk
Lockfile and uv workspace constraints only; no application code changes, and gitpython is optional via the mlflow extra.
Overview
Adds a
gitpython>=3.1.59entry to[tool.uv] constraint-dependencies(same pattern as the existing tornado floor) and records that constraint inuv.lock, so future resolves cannot pull gitpython 3.1.58, whichosv-scanflags for four advisories (one Critical).gitpython is only pulled in transitively when installing the optional
mlflowextra; default/proxy installs are unchanged. Against current staging the resolved set already uses 3.1.61—this PR mainly enforces the minimum version on re-lock, not a broad runtime behavior change.Reviewed by Cursor Bugbot for commit ee1bca4. Bugbot is set up for automated code reviews on this repo. Configure here.