Skip to main content

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-newer on
  • 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 run uv lock
  • cooldown-guard validate: verify that the ledger and pyproject.toml agree
  • cooldown-guard status: show active and cleaned exceptions
  • cooldown-guard cleanup --check: test whether an active exception can now be relaxed from == to >=
  • cooldown-guard cleanup --apply: apply that relaxation and run uv lock

ci

the repo includes:

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

for automation, prefer the github release binary over runtime resolution from pypi. pin both:

  • COOLDOWN_GUARD_VERSION
  • COOLDOWN_GUARD_SHA256

for pypi trusted publisher setup, register:

  • owner: ischemist
  • repository: cooldown-guard
  • workflow: publish-pypi.yml
  • environment: pypi

notes

  • approved_by is audit metadata, not authorization. real authorization should still come from codeowners, branch protection, and normal review policy.
  • the tool shells out to uv lock instead of reimplementing resolution.
  • v1 intentionally targets the common case where the repo-level exclude-newer is a duration like "7 days".

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cooldown_guard-0.1.2.tar.gz (46.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cooldown_guard-0.1.2-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

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

Hashes for cooldown_guard-0.1.2.tar.gz
Algorithm Hash digest
SHA256 fc6391128a2e4f0058443a2f5e99ad63ca96aca9dcd1cc73d254c95887c1c87a
MD5 e60757795e2e0fcfc6e5e83918e6763c
BLAKE2b-256 789f5480242a12e40c0cbc72bea581ce432dd4a16d974becebce2095f11d113d

See more details on using hashes here.

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

Hashes for cooldown_guard-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 54df4a70abff33f5a71014a06aae2dded2fa115970ff68055eb2a37dc8995705
MD5 ac49497cfd8c9b4ea217eb93ee057ec1
BLAKE2b-256 5b1f1d1a62c6d42e7686738e79494cea2c6d149e9496e38a88e902251dc16bb1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page