auditable uv cooldown exceptions for emergency dependency upgrades
Project description
cooldown-guard
cooldown-guard makes uv cooldown exceptions auditable, narrow, and easy to clean up.
it is built around four ideas:
- keep global
exclude-neweron - allow temporary package-specific exceptions for emergency fixes
- pin the exception with
constraint-dependencies - automatically relax the exception once the normal cooldown window catches up
what it writes
given a project like:
[tool.uv]
exclude-newer = "7 days"
an approval like:
cooldown-guard approve urllib3==2.7.0 \
--project /path/to/repo \
--approved-by alice \
--reason "security fix" \
--advisory CVE-2026-12345 \
--introduced-via requests \
--introduced-via types-tqdm
will update the target pyproject.toml to look like:
[tool.uv]
exclude-newer = "7 days"
exclude-newer-package = { urllib3 = "2026-05-07T16:13:18Z" }
constraint-dependencies = ["urllib3==2.7.0"]
and create a .cooldown-guard.toml ledger beside it.
commands
cooldown-guard approve <package>==<version>: add a narrow exception and runuv lockcooldown-guard validate: verify that the ledger andpyproject.tomlagreecooldown-guard status: show active and cleaned exceptionscooldown-guard cleanup --check: test whether an active exception can now be relaxed from==to>=cooldown-guard cleanup --apply: apply that relaxation and runuv lock
ci
the repo includes:
- .github/workflows/ci.yml: tests the tool itself
- .github/workflows/publish-release.yml: builds and uploads release assets, including a linux x86_64 standalone binary and sha256 checksum
- .github/workflows/release-drafter.yml: labels prs from conventional commits and maintains a draft github release
- examples/github-actions/validate.yml: consumer-side validation on pull requests
- examples/github-actions/reconcile.yml: nightly cleanup that can open a pull request
the example workflows download the linux x86_64 release binary from github releases and verify it with a pinned sha256 checksum before running it.
release flow
- release drafts are maintained by release-drafter
- github release assets are uploaded by .github/workflows/publish-release.yml
- pypi publish happens from .github/workflows/publish-pypi.yml using github oidc trusted publishing
- the publish workflow refuses to run unless the github release tag matches
v<project.version>frompyproject.toml
for automation, prefer the github release binary over runtime resolution from pypi. pin both:
COOLDOWN_GUARD_VERSIONCOOLDOWN_GUARD_SHA256
for pypi trusted publisher setup, register:
- owner:
ischemist - repository:
cooldown-guard - workflow:
publish-pypi.yml - environment:
pypi
notes
approved_byis audit metadata, not authorization. real authorization should still come from codeowners, branch protection, and normal review policy.- the tool shells out to
uv lockinstead of reimplementing resolution. - v1 intentionally targets the common case where the repo-level
exclude-neweris a duration like"7 days".
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cooldown_guard-0.1.2.tar.gz.
File metadata
- Download URL: cooldown_guard-0.1.2.tar.gz
- Upload date:
- Size: 46.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc6391128a2e4f0058443a2f5e99ad63ca96aca9dcd1cc73d254c95887c1c87a
|
|
| MD5 |
e60757795e2e0fcfc6e5e83918e6763c
|
|
| BLAKE2b-256 |
789f5480242a12e40c0cbc72bea581ce432dd4a16d974becebce2095f11d113d
|
File details
Details for the file cooldown_guard-0.1.2-py3-none-any.whl.
File metadata
- Download URL: cooldown_guard-0.1.2-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54df4a70abff33f5a71014a06aae2dded2fa115970ff68055eb2a37dc8995705
|
|
| MD5 |
ac49497cfd8c9b4ea217eb93ee057ec1
|
|
| BLAKE2b-256 |
5b1f1d1a62c6d42e7686738e79494cea2c6d149e9496e38a88e902251dc16bb1
|