# Python
__pycache__/
*.py[cod]
*$py.class
*.so
*.egg
*.egg-info/
.eggs/
build/
dist/
wheels/
*.whl

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

# uv
.python-version

# Test / lint / type-check caches
.pytest_cache/
.ruff_cache/
.mypy_cache/
.pyright/
.coverage
.coverage.*
htmlcov/
coverage.xml

# Local databases and data
*.db
*.sqlite
*.sqlite3

# Env files (secrets — .env.example is committed)
.env
.env.local
.env.*.local

# IDE / editor
.idea/
.vscode/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# Local fixtures that may contain real customer data
tests/fixtures/private/

# Claude Code session state (local), but track shared repo-context skills
.claude/*
!.claude/skills/

# Calibration / replay scratch logs (T1.4.1 ad-hoc tee output during
# --ab-mode runs). The structured artifacts under scripts/ are tracked;
# the human-readable streaming log of one run is not — it's redundant
# with the structured JSONs and changes on every run.
scripts/.t141_abmode_log.txt

# Test/dev SQL + CSV artifacts (calibration sessions, ad-hoc queries)
calibration_*.sql
calibration_*.csv
cases*.sql
cases*.csv

# Sprint demo + script log artifacts
scripts/t2_*_*.log
scripts/sprint_*_demo*.log
evals/baseline/*.log


# T3.2.1 — local DistilBERT model artifacts. Trained models are uploaded to B2
# under models/junk-classifier/ prefix (per BRIEF §6 + T3.2.1 close); the
# local working-directory outputs are ~244MB each per training run and
# shouldn't land in git. Re-derivable via 'phema-cli classifier train' on
# the same seed (per T3.2.1 reproducibility test).
classifier-output*/


# T3.2.2 — local DistilBERT model download cache. classifier_session()
# downloads + extracts the model tarball to a local dir keyed by
# classifier_version (one subdir per model + rules-flag combination).
# Files are ~244MB each per version; re-derivable via B2 download.
.classifier-cache/
