__pycache__/
*.py[cod]
*$py.class
*.egg-info/
dist/
build/
.eggs/
*.egg
.venv/
.venv-sidecar/
venv/
env/
.env
*.wav
*.mp3
*.mp4
*.mov
*.avi
*.mkv
output/
.mypy_cache/
.pytest_cache/
.ruff_cache/
.coverage
coverage.xml
htmlcov/
.DS_Store
.claude/scheduled_tasks.lock
# Private UXR trial data stays ignored. FOSSDA is explicitly open-source
# material (fossda.org) used as a public perf-baseline dataset, so its
# perf-baselines/ subdir is whitelisted for tracking.
trial-runs/*
!trial-runs/fossda-opensource/
trial-runs/fossda-opensource/*
!trial-runs/fossda-opensource/perf-baselines/
!trial-runs/fossda-opensource/perf-baselines/**
.nova/
plan.md
git-cheatsheet.md
docs/private/
_comparison/

# Bristlenose log files (created by pipeline runs and serve mode)
bristlenose.log
bristlenose.log.*

# Local font files for typography mockups (proprietary/large, not committed)
docs/mockups/fonts/*.ttf
docs/mockups/fonts/*.woff2
docs/mockups/fonts/*.otf

# Frontend build artifacts (regenerated by npm run build)
node_modules/
bristlenose/server/static/
*.tsbuildinfo

# Stress-test runtime snapshot (written by the Playwright spec when run
# directly, without the orchestrator setting $STRESS_RESULTS_PATH).
e2e/stress-results.json

# Desktop app — bundled binaries and Xcode build artifacts
desktop/Bristlenose/Resources/bristlenose-sidecar/
desktop/Bristlenose/Resources/ffmpeg
desktop/Bristlenose/Resources/ffprobe
desktop/Bristlenose/Resources/models/
desktop/build/
desktop/DerivedData/
desktop/testtest/
# Xcode user data (per-developer state, not shared)
**/xcuserdata/
**/*.xcuserstate
.playwright-mcp/

# Thematic-analysis spike output (private corpus data derived from gitignored trial-runs)
experiments/thematic-spike/output/
experiments/thematic-spike/**/__pycache__/

# Stray worktree dirs from spawned background sessions
.claude/worktrees/

# Stray frontend trial-run output (should never live here)
frontend/trial-runs/

# Per-worktree branch handoff symlink (points into .claude/plans/<branch>.md)
HANDOFF.md
