# Workweaver Backend Dev/Test Dependencies
# Install with: uv pip install -r apps/backend/requirements.txt
# Runtime dependencies (including security-pinned aiohttp) live in
# apps/backend/requirements.runtime.txt.

-r requirements.runtime.txt

# -----------------------------------------------------------------------------
# Testing
# -----------------------------------------------------------------------------
anyio==4.14.2
# Offline CRD CEL evaluation for the platform chart render gate (#18206):
# pure-Python CEL evaluator for x-kubernetes-validations rules. Dual-homed
# with the pyproject [dev] extra (same rule as pytest-randomly below: CI
# lanes install this file, never the dev extra).
cel-python==0.5.0
pytest==9.1.1
pytest-cov==7.1.0
pytest-asyncio==1.4.0
pytest-playwright==0.8.0
pytest-timeout==2.4.0
moto[dynamodb]==5.2.2
pytest-xdist==3.8.0
pytest-socket==0.8.0
# pytest-randomly randomizes test execution order (and seeds random.*/faker/etc.)
# so order-dependent test-isolation bugs surface BEFORE merge instead of in a
# later, unrelated lane. Auto-active on install (no flag/ini key needed); pinned
# here — the file every test lane installs via .github/actions/setup-python —
# NOT only in the pyproject [dev] extra, which CI never installs (same rule as
# pytest-rerunfailures above, enforced by tests/conformance/test_ci_pytest_plugin_closure.py).
pytest-randomly==4.1.0
# pytest-rerunfailures backs `make perf-pr`'s `--reruns`/`--reruns-delay` flags.
# It MUST live in this base CI set (the file every test lane installs via
# .github/actions/setup-python) — NOT only in the pyproject [dev] extra, which
# CI never installs. A [dev]-only home is exactly what broke the perf-pr lane
# at runtime (#7848 / #7907); tests/conformance/test_ci_pytest_plugin_closure.py
# now fails the build if any lane invokes a plugin flag this set doesn't ship.
pytest-rerunfailures==16.3
freezegun==1.5.5
hypothesis==6.163.0

# -----------------------------------------------------------------------------
# Lake cold archive — duckdb_local read backend (#16904)
# -----------------------------------------------------------------------------
# Test + local-ops reader for the optional Iceberg/Parquet cold archive behind
# CorpusProjection. Deliberately NOT in requirements.runtime.txt: the archive
# writer is pure stdlib, the default backend is `none`, and duckdb_local
# imports this lazily and fails loudly (LakeQueryUnavailable) when absent —
# the same dependency-weight posture as the #13429 pyarrow overturn.
duckdb==1.5.6

# -----------------------------------------------------------------------------
# Code Quality & Type Checking
# -----------------------------------------------------------------------------
ruff==0.16.0
pyright==1.1.410

# -----------------------------------------------------------------------------
# Type Stubs
# -----------------------------------------------------------------------------
types-PyYAML==6.0.12.20260724
boto3-stubs==1.43.103
botocore-stubs==1.43.67
beautifulsoup4>=4.12.0
Pillow>=12.3.0
