# ─── Python ───────────────────────────────────────────────────────────────
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
dist/
develop-eggs/
.eggs/
*.egg-info/
*.egg
.pytest_cache/
.ruff_cache/
.mypy_cache/
.coverage
htmlcov/

# ─── Virtual environments ───────────────────────────────────────────────────
venv/
.venv/
ENV/
env/

# ─── IDE / OS ───────────────────────────────────────────────────────────────
.idea/
.vscode/
*.swp
*.swo
.DS_Store

# ─── Logs ────────────────────────────────────────────────────────────────────
*.log
logs/
log/

# ─── User-/run-generated data (never committed) ─────────────────────────────
/jobs/
/datasets/
/models/
/Created Files/
/output/
/temp/
/tmp/
/cache/
/data/
extracted_*.html

# ─── Model weights (large binaries) ──────────────────────────────────────────
*.bin
*.safetensors
*.gguf
*.ggml
weights.safetensors
tokenizer.json
tokenizer.model
Modelfile

# ─── Secrets ─────────────────────────────────────────────────────────────────
# NOTE: we intentionally do NOT blanket-ignore *.json anymore. The old rule
# silently un-tracked config.json, breaking reproducibility. Config is tracked
# by default; keep real secrets in .env / config.local.json (ignored below).
.env
.env.*
!.env.example
*.key
*_key
*_secret
*_token
config.local.json

# pytest-textual-snapshot generated report
snapshot_report.html
