tmp/
.venv/
node_modules/
__pycache__/
*.pyc
.DS_Store

eval/out/
eval/results/

# Third-party / regenerable eval audio (fetch via eval/runners/*.py); manifests are tracked.
# noise_beds/local/ is kept: locally-recorded beds (e.g. keyboard) cannot be regenerated.
eval/datasets/noise_beds/demand_clean/
eval/datasets/aec_challenge/real/
eval/datasets/audio_frontend/fixtures/
eval/fixtures/spelling_transcription/
# regenerable barge clips; manifests tracked.
eval/benchmarks/turntaking/barge_examples/*.wav

.env
*.env
!.env.example
.runpod_endpoint
eval/runners/aec_apm/target/
# Research tooling may write repo-root checkpoints/ when run from the root.
/checkpoints/

# pulled session captures (pull-sessions.sh default dest when run from repo root)
live_sessions/
# ...except the committed ingestion test fixture (eval/results is untracked, so CI needs its own copy).
!webapp/tests/fixtures/live_sessions/
!webapp/tests/fixtures/live_sessions/**

# generated listen-QA page (rebuild: uv run eval/runners/review/span_review_page.py)
eval/datasets/frontend_pairs/span_review.html
eval/datasets/frontend_pairs/backchannel_onsets.html
.claude/settings.local.json
.claude/scheduled_tasks.lock
eval/manifests/**/*.publication.lock
.claude/worktrees/
.codex/worktrees/

# Django admin static collection (webapp/), regenerated by collectstatic.
webapp/staticfiles/

# Local research scratch (LiveKit community scrape) — report ships in docs/research/.
research/livekit-community/
