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

# uv
.python-version

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

# Local env files (contain bearer tokens for scoreboard.urdr.dev etc).
.env
.env.local
.env.*.local

# Project-specific
analysis/
match_raw/
*.mp4
*.mov
*.wav
# Whitelist small audio fixtures only. Video fixtures (e.g. stage_sample.mp4 at
# ~580 MB) live on disk for integration tests but are kept out of git history;
# track them via git-lfs or an external store if/when they need to be shared.
!tests/fixtures/*.wav
# But keep CLI-cached extractions (named identically to their source video)
# out of git -- they're derivable from the video on demand.
tests/fixtures/stage_sample.wav
config.yaml

# Review-server save backups (auto-created on every Cmd+S in the audit UI).
*.json.bak

# Audit safety backups created before destructive fixture migrations.
*.json.before-*

# Cached PANN embeddings (regenerable via scripts/extract_audio_embeddings.py).
tests/fixtures/.cache/

# Wide-window fixture audio + sidecars produced by
# scripts/extract_full_fixture_audio.py (issue #87 negative mining).
# Regenerable from the source videos listed in _sources.yaml.
tests/fixtures/full/*
!tests/fixtures/full/_sources.yaml
!tests/fixtures/full/.gitkeep

# Waveform peaks caches written by splitsmith.waveform.ensure_peaks (#15).
# Regenerable from the WAV; sidecar JSON next to the audio file.
*.peaks-*.json
# And audit-mode trim params sidecars from splitsmith.ui.audio.
*_trimmed.params.json
.claude/

# Wrangler local state for Cloudflare Pages deploys.
.wrangler/

# Node tooling for the marketing site (wrangler dev dep). The pnpm
# lockfile *is* committed (under pnpm-lock.yaml) so wrangler version
# stays reproducible across CI / contributors -- only ignore node_modules.
node_modules/
