deps-update
Update Python dependencies to latest versions using uv, regenerate lock and requirements.txt, then verify linting and tests pass. Fix breakage from API changes…
npx skills add https://github.com/openshift/lightspeed-service --skill deps-updatedeps-update
Step 1: Snapshot Current State
Before changing anything:
- Fetch upstream and check out a clean base:
If the working tree has uncommitted changes, stop and tell the user to commit or stash first. Dependency updates must land on a clean tree.git fetch upstream git checkout upstream/main git checkout -b chore/deps-update - Run
uv lock --checkto confirm the lock file is currently consistent - Run
uv run python --versionto record the Python version
Step 2: Bump Dependencies
If a specific package was requested, bump only that package:
uv lock --upgrade-package {package}
uv sync --group dev --extra evaluation
Otherwise bump everything:
uv lock --upgrade
uv sync --group dev --extra evaluation
Capture the output of uv lock --upgrade — it lists all
version changes and is needed for the commit message and
report.
After running uv lock --upgrade, check the output for
warnings. If a warning indicates a missing extra or
incompatible constraint, investigate whether it affects
this project. Note any benign warnings in the final report.
Then regenerate the pinned requirements file:
make requirements.txt
This runs uv export under the hood and produces a
requirements.txt with hashes for production packages.
Step 3: Verify — Lint and Type Checks
Run the full verification suite:
make format
make verify
If verification passes cleanly, proceed to Step 4.
If verification fails:
- Read the error output carefully
- Identify which bumped package caused the breakage (often a renamed/removed API, changed type signatures, or new deprecation-as-error)
- Fix the calling code to match the new API — do not pin the package back to the old version unless the new version has a confirmed regression
- Re-run
make format && make verify - Repeat until clean
Step 4: Verify — Unit Tests
Run the unit test suite:
make test-unit
If tests pass, proceed to Step 5.
If tests fail:
- Distinguish between test breakage from API changes (assertions on old behavior, mocks of renamed methods) and genuine regressions (new bugs introduced by a library update)
- For API changes — update tests and source code to match the new API
- For genuine regressions — check the library's changelog
and issue tracker. If confirmed upstream bug, pin that
specific package to the last working version in
pyproject.tomland re-runuv lock && uv sync - Re-run
make test-unit - Repeat until clean
Step 5: Verify — Integration Tests
Run the integration test suite:
make test-integration
Same triage approach as Step 4 if failures occur.
Step 6: Report, Commit, and PR
Check which files changed beyond the dependency files:
git diff --name-only
Always present a summary to the user before committing:
- Number of packages bumped, with notable version jumps (major versions, security-relevant packages)
- Verification status (lint, unit tests, integration tests)
- List of all changed files
- Any warnings from Step 2 that were deemed benign
- Any source/test files modified to fix API changes (with a brief explanation of each fix)
If only pyproject.toml, uv.lock, and requirements.txt
changed — commit and raise a PR automatically without
asking:
git add pyproject.toml uv.lock requirements.txt
git commit -m "chore: bump dependencies to latest"
Then follow the raise-pr skill to open the PR.
If source or test files were also modified (API change
fixes from Steps 3–5) — wait for user acknowledgment
before committing. Then commit all changes and follow the
raise-pr skill.
Constraints
- Clean tree required — do not start if there are uncommitted changes.
- Fix forward, not back — prefer updating code to match new APIs over pinning old versions. Only pin back when there's a confirmed upstream regression.
- Do not skip verification — all four gates (lint, types, unit tests, integration tests) must pass before committing.
- Do not touch unrelated code — only modify files that break due to the dependency bump. No drive-by refactors.
- Report honestly — if a test failure looks unrelated to the bump, say so. Let the user decide whether to investigate separately.
- No manual requirements.txt edits — always regenerate
via
make requirements.txt, never hand-edit.