# Toolchain for scripts/regenerate.sh and the CI gates.
#
# Every pin here is load-bearing for the regenerate-and-diff gate: the generator
# and the formatter both write into mangools/, so a version drift between a
# developer's machine and CI shows up as a spurious diff.
#
# Transitive dependencies are deliberately not pinned here. jinja2 renders the
# templates, so in principle a jinja2 release could move the generated bytes and
# make that gate fail for a reason unrelated to the tree. Closing that hole needs
# a compiled lock file (`uv pip compile --universal`), which is a project
# decision, not one this file should make on its own.

# 0.26.2, not the current 0.29.x. From 0.27.0 the generated code uses PEP 604
# unions (`X | None`) without `from __future__ import annotations`, which is a
# TypeError at import time on Python 3.9 — the floor this package declares.
openapi-python-client==0.26.2

# Runs as the generator's post_hooks and as the CI lint gate. The upper bound is
# openapi-python-client 0.26.2's own (`ruff>=0.2,<0.14`); 0.13.3 is the newest
# release inside it.
ruff==0.13.3

# Pinned so a new mypy release cannot turn the gate red without a code change.
# 1.18.2 is the last release that still accepts `--python-version 3.9`, so the
# config can be tightened to the declared floor without moving the pin if the
# dependency tree ever stops requiring 3.10 syntax (see [tool.mypy] in
# pyproject.toml).
mypy==1.18.2

# Typed stubs for the one runtime dependency that ships none.
types-python-dateutil==2.9.0.20251008

build==1.3.0

# Only for `twine check` in CI and the one manual upload command in the README's
# Releasing section. Nothing in this repo uploads anything.
#
# 7.x, not 6.x: `license-files` in pyproject.toml makes hatchling emit
# Metadata-Version 2.5, and twine 6.2.0 rejects it with
# "'2.5' is not a valid metadata version".
twine==7.0.0
