From d4eda1a4adec73314fcfc2ec45ab72d9c2184582 Mon Sep 17 00:00:00 2001 From: Omar Radwan <172905260+omar-radwan7@users.noreply.github.com> Date: Mon, 2 Nov 2026 16:38:56 +0100 Subject: [PATCH 1/2] docs: show how to test the floors in CI with uv lowest-direct Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Q7ywk9uaZ3gLUcBP7UysV3 --- readme.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/readme.md b/readme.md index 0cd09b1..a329d6f 100644 --- a/readme.md +++ b/readme.md @@ -96,6 +96,32 @@ If PyPI cannot be reached, the affected dependency stays unchanged with a warnin The CLI takes `--spec0-support-years 3` and the Python API `spec0_support_years=3`. Extras such as `xarray[io]>=2026.5.1` and environment markers are preserved when bounds change. +### Testing the floors in CI + +The bounds are only useful if the project still works with them. +To test the lowest supported versions, run the action without opening a PR and let `uv` install the lowest versions that satisfy the updated bounds: + +```yaml +jobs: + test-oldest: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: scientific-python/spec0-action@ + with: + create_pr: false + update_all: 2 + - uses: actions/setup-python@v7 + with: + python-version: "3.13" # the SPEC 0 Python floor + - uses: astral-sh/setup-uv@v7 + - run: uv pip install --system --resolution lowest-direct . --group test + - run: pytest +``` + +`update_all` matters here: `--resolution lowest-direct` installs the lowest version of every direct dependency, so a dependency without a lower bound would resolve to a very old release. +Other tools that install the lowest allowed versions, such as [minimum-dependencies](https://pypi.org/project/minimum-dependencies/) or `pip-compile`, work the same way after the update. + ## Limitations 1. The action only tightens lower bounds and leaves upper bounds untouched. From 99e2d60f3558b6db6c48b8975d57e805fd1501a3 Mon Sep 17 00:00:00 2001 From: Nabil Freij Date: Mon, 2 Nov 2026 16:00:59 +0000 Subject: [PATCH 2/2] Update readme.md --- readme.md | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/readme.md b/readme.md index a329d6f..b7ddf5f 100644 --- a/readme.md +++ b/readme.md @@ -96,31 +96,15 @@ If PyPI cannot be reached, the affected dependency stays unchanged with a warnin The CLI takes `--spec0-support-years 3` and the Python API `spec0_support_years=3`. Extras such as `xarray[io]>=2026.5.1` and environment markers are preserved when bounds change. -### Testing the floors in CI +### Testing minimum versions -The bounds are only useful if the project still works with them. -To test the lowest supported versions, run the action without opening a PR and let `uv` install the lowest versions that satisfy the updated bounds: +Since the lower bounds will increase with time, it is useful to make sure your project continues at this lower version bounds. -```yaml -jobs: - test-oldest: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v7 - - uses: scientific-python/spec0-action@ - with: - create_pr: false - update_all: 2 - - uses: actions/setup-python@v7 - with: - python-version: "3.13" # the SPEC 0 Python floor - - uses: astral-sh/setup-uv@v7 - - run: uv pip install --system --resolution lowest-direct . --group test - - run: pytest -``` +There are at least two ways to do this: -`update_all` matters here: `--resolution lowest-direct` installs the lowest version of every direct dependency, so a dependency without a lower bound would resolve to a very old release. -Other tools that install the lowest allowed versions, such as [minimum-dependencies](https://pypi.org/project/minimum-dependencies/) or `pip-compile`, work the same way after the update. +- [minimum-dependencies](https://pypi.org/project/minimum-dependencies/) +- Calling some form of `uv pip install --resolution lowest-direct` to have `uv` work out the floor and then you can use that enviroment to run your unit tests. + `--resolution lowest-direct` installs the lowest version of every direct dependency, so a dependency without a lower bound would resolve to maybe the very oldest release. ## Limitations