# Python
__pycache__/
*.py[cod]
*$py.class
*.egg-info/
*.egg
dist/
build/
*.whl
*.so
.coverage
coverage.xml
.pytest_cache/

# Rust
target/

# Virtual environments
.venv/
venv/

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

# Database cache
*.db
*.db-wal
*.db-shm

# OS
.DS_Store
Thumbs.db

# Benchmark outputs
benchmarks/results/
benchmarks/logs/

# Sphinx build artifacts (generated; rebuild with the docs toolchain)
docs/_build/

# Sphinx docs build output
documentation/_build/

# Claude Code — local settings, worktrees, session state stay ignored, but
# project skills are tracked: they are agent-facing docs that ship with the
# repo (like CLAUDE.md), so the skills directory is carved out of the ignore.
.claude/*
!.claude/skills/
.claude/skills/*
!.claude/skills/comparing-retrieval-methods/

# Secrets / local environment (e.g. OPENAI_API_KEY for tree-reasoning runs)
.env
.env.*
!.env.example

# Optimize-run artifacts. These are per-run OUTPUT (the trials ledger and its
# per-sample dumps, written next to the ledger by optimize/__main__.py), not
# source. They were committed by accident and are ignored here so a local run
# cannot re-add them.
optimize_trials.jsonl
optimize_trials.samples.jsonl
optimize_trials*.jsonl
dry-run-samples/

# Generated benchmark reports. `benchmarks/reports/` held only a placeholder
# README for output that lands there at run time; the analysis it pointed at
# lives in benchmarks/README.md and the LI caveat in benchmarks/EXPERIMENTS.md.
benchmarks/reports/
