# --- secrets / env -----------------------------------------------------------
.env
.env.*
!.env.example
*.key
secrets/

# --- python ------------------------------------------------------------------
__pycache__/
*.py[cod]
*$py.class
.venv/
venv/
.python-version

# build / dist
build/
dist/
*.egg-info/
.eggs/

# tooling caches
.mypy_cache/
.ruff_cache/
.pytest_cache/
.coverage
htmlcov/
coverage.xml

# --- project artefacts (gitignored on purpose) -------------------------------
# Raw + cached corpora are big and re-downloadable; only commit
# scripts/load_corpora.py + dataset_versions.yaml + a small samples/ dir.
# Leading slash means "only at repo root" — a bare `data/` would also match
# tests/data/ (which holds committed test fixtures) and silently exclude it.
/data/
!/data/.gitkeep
!/data/samples/

# Run outputs are large and re-creatable; only commit a small reference
# subset under results/samples/.
/results/
!/results/.gitkeep
!/results/samples/

# Corpus-audit outputs (quality reports / data cards). Re-creatable via
# `redteam corpora audit`, and they quote truncated adversarial prompt
# previews, so keep them out of git by default.
# `/reports/*` (not `/reports/`) so the samples/ negation can re-include —
# git won't recurse into a wholly-excluded directory.
/reports/*
!/reports/samples/

# Exported challenge packs. Re-creatable via `redteam export-pack`; adversarial
# packs contain prompt previews, so keep them out of git by default. Only a
# small, safe (benign) sample is committed under challenge_packs/samples/.
# Note: `/challenge_packs/*` (not `/challenge_packs/`) so the samples/ negation
# below can re-include — git won't recurse into a wholly-excluded directory.
/challenge_packs/*
!/challenge_packs/samples/

# Streamlit / HF Spaces local cache
.streamlit/secrets.toml
.huggingface/

# OS noise
.DS_Store
Thumbs.db
desktop.ini

# IDE noise
.vscode/
.idea/
*.swp
