# CI / local-gate tooling for l9-ci-sdk.
#
# These are NOT runtime dependencies of the SDK (those live in requirements.txt
# and are installed into l9-ci-core's provisioning venv). This file pins the
# analysis toolchain so the local gate documented in AGENTS.md
#   ruff check . && ruff format --check . && mypy l9_ci && pytest -q
# is reproducible in CI regardless of what a fresh runner would otherwise
# resolve.
#
# The runtime requirements are pulled in so mypy can resolve the third-party
# imports it type-checks (jsonschema, referencing, yaml); without them mypy
# degrades to "library stubs not installed" import errors that mask real
# findings.
-r requirements.txt

# Exact pins (not ranges): a range lets a fresh runner resolve a different
# ruff/mypy/pytest than the one this repo was validated against, which is
# real version drift even though ruff.toml pins the *rule set*. Exact pins
# make `pip install -r requirements-ci.txt` reproduce this repo's toolchain
# byte-for-byte; these must mirror pyproject.toml's [project.optional-
# dependencies] ci group.

# Linter / formatter.
ruff==0.16.0

# Static type checker + the stub packages that give mypy real signatures for
# the SDK's untyped third-party imports. These stubs are the "mypy" half of the
# gate: PyYAML and jsonschema ship no inline types, and referencing is typed via
# its own py.typed (installed through requirements.txt above).
mypy==2.3.0
types-PyYAML==6.0.12.20260724
types-jsonschema==4.26.0.20260518

# Test runner.
pytest==9.1.1

# jsonschema date-time format validation: jsonschema treats "format" as an
# annotation unless a FormatChecker is supplied AND the checker for the format
# is registered. The Draft 2020-12 "date-time" checker is only registered when
# rfc3339-validator is importable; without it the governance schema tests that
# assert malformed timestamps are rejected would silently pass on any string.
rfc3339-validator==0.1.4
