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

# Node / frontend
node_modules/
frontend/*/dist/
*.tsbuildinfo
.pnpm-debug.log*
# pnpm relocates its content-addressable store next to the project when its
# default location is on another filesystem — which is what a bind mount is. The
# compose stack shadows that path with a volume; this is the backstop for any
# other environment that does the same thing.
.pnpm-store/

# Playwright output. The browsers themselves live in a per-user cache outside the
# repository (~/.cache/ms-playwright), so nothing here needs an entry for them.
test-results/
playwright-report/
blob-report/
playwright/.cache/

# The benchmark's own report. Machine-specific by construction — the numbers that
# matter are copied into docs/annotations.md, where they carry the machine that
# produced them; a committed file would just be one developer's laptop.
frontend/app/bench-results.json

# Compiled UI bundle travels in the wheel, never in git
src/visionset/_static/*
!src/visionset/_static/README.md
!src/visionset/_static/.gitkeep

# Workspace media (v1 committed 929 MB of fixture images — never again)
**/workspace-data/

# Editors / OS
.DS_Store
.idea/
.vscode/
*.swp

# Coding-agent config: the canonical, committed source is .agents/skills/.
# Everything below is either generated by scripts/setup_agents.sh or personal to a
# contributor's machine — never committed.
.claude/
.cursor/
.codex/
CLAUDE.md

# Local planning/scratch notes
*-plan.md
*-plan-*.md
*.tmp.md

# graphify: knowledge-graph artifacts stay local (regenerate with `graphify update .`)
graphify-out/
