# macOS
.DS_Store
.vscode
/.claude/

# Python
__pycache__/
*.py[cod]
*.egg-info/
.pytest_cache/
.mypy_cache/
.ruff_cache/
.coverage
.coverage.*
htmlcov/
.python-version

# Local environments and caches
.venv
.cache
.agents/
.vite
.vercel
node_modules
dist
coverage

# Playwright's per-run output.
test-results/

# Temporary files and scratch notes
*.tmp
*.swp
*.step.glb.lock
*.stp.glb.lock
tmp/
repo-scan*.md
*-scan-*.md
*-fix-plan*.md

# Benchmark output is local evidence, not source. Use tmp/ for reports.
/scripts/bench/**/results/
/scripts/bench/**/*.json
/scripts/bench/**/*.log
/scripts/bench/**/*.gz
/scripts/bench/**/*.cpuprofile
/scripts/bench/**/*.heapsnapshot
/scripts/bench/**/*.png

# Review media rendered next to a fixture. models/ holds CAD/robot sources,
# generated 3D and fabrication outputs, and docs only; see models/README.md.
models/**/*.png
models/**/*.jpg
models/**/*.jpeg
models/**/*.gif
models/**/*.webp
models/**/*.avif
models/**/*.bmp
models/**/*.tif
models/**/*.tiff
models/**/*.svg
models/**/*.mp4
models/**/*.mov
models/**/*.webm
models/**/*.mkv

# Component-GLB render packages are regenerated on demand; never committed.
.*.step.glb/
.*.step.glb
.*.stp.glb/
.*.stp.glb

# `python -m build` scratch space (scripts/release/check-wheel-contents.sh).
packages/cadgen/build/

# cadgen's packaged runtime: the esbuilt Node builders (node/), the headless
# snapshot bundle (browser/) and the CAD Viewer's built client (viewer/). All
# three are BUILT by `scripts/bundle/bundle.sh` and shipped only inside the
# wheel; none of them is committed. A fresh checkout has no _runtime until the
# bundler runs, and cadgen says so by name when it needs one that is absent.
packages/cadgen/src/cadgen/_runtime/

# Design notes are local working files, never committed (user policy 2026-08-29).
design/

# Model-side source sidecars are regenerated by the model script (they carry
# a build timestamp, so committing them would churn); a fresh checkout
# restores pose/mates by running the script once.
*.source.json
