# ── Python ────────────────────────────────────────────────────────────
__pycache__/
*.py[cod]
.venv/
.uv/
*.egg-info/
.pytest_cache/
.mypy_cache/
.ruff_cache/
dist/
build/
dist-sidecar/

# ── Node / frontend ───────────────────────────────────────────────────
node_modules/
frontend/dist/
*.tsbuildinfo

# ── Playwright E2E (GUI_INTERACTION_PLAN #15) ──────────────────────────
frontend/test-results/
frontend/playwright-report/
frontend/e2e/test-results/
frontend/e2e/playwright-report/
frontend/blob-report/

# ── Tauri / desktop ───────────────────────────────────────────────────
src-tauri/target/
# tauri-build regenerates these capability schemas on every cargo build
src-tauri/gen/schemas/
# `tauri icon` also emits mobile/Store assets; this desktop app does not ship
# those targets. Keep the PNG/ICO/ICNS desktop set only.
src-tauri/icons/android/
src-tauri/icons/ios/
src-tauri/icons/Square*Logo.png
src-tauri/icons/StoreLogo.png

# ── Local-only research corpus (never commit instrument data) ─────────
tests/realdata/
**/*.dat
**/*.xrdml
**/*.raw
# Exception: small committed golden-corpus fixtures (inline comments are
# NOT supported in .gitignore, so this note must be on its own line).
!tests/fixtures/**
# ...but that negation is broad enough to re-include build droppings under
# tests/fixtures/, which is how tests/fixtures/__pycache__/*.pyc got COMMITTED
# alongside the RSM synthetic-map fixture (2026-08-09, RSM_CUTS_PLAN item 1).
# Re-exclude them; a later negation cannot resurrect a directory this excludes.
tests/fixtures/**/__pycache__/
tests/fixtures/**/*.py[cod]

# ── OS / editor ───────────────────────────────────────────────────────
.DS_Store
Thumbs.db
.idea/
.vscode/

# ── Claude private working area (per-machine, not shared) ─────────────
.claude/
CLAUDE.local.md

# NOTE: plans/ is TRACKED in this repo for now (founding design docs).
# Once active development starts we may adopt the sibling-repo convention
# (gitignore plans/, track a BACKLOG.md dashboard) — see CLAUDE.md.

# Built SPA (vite build output, served by FastAPI in prod)
src/quantized/web/

# Beautiful-defaults audit renders (tools/audit_defaults.py) -- regenerate
# locally, never commit the PNG grid
tools/audit_defaults_out/

# P0.4-scale baseline fixtures (tools/baselines/make_fixtures.py --large) --
# regenerate locally, never commit (the small committed set lives under
# tests/fixtures/baselines/, see docs/timed_workflow_baselines.md)
tools/baselines/out/

# Local ImageGen intermediates (final brand assets live under assets/branding/)
tmp/imagegen/

# OneDrive conflict copies — when two machines edit the same file, OneDrive
# saves a duplicate named "<file>-<Device>.<ext>". Never commit these.
*MacBook*
*-DESKTOP-*

# OneDrive sync-conflict copies ("<name>-<machine>.<ext>") — never commit
*MacBook Air*
