__pycache__/
*.py[cod]
*.egg-info/
.venv/
venv/
.env
.dev-key
*.db
.pytest_cache/
.mypy_cache/
.ruff_cache/
dist/
build/
ui/node_modules/
ui/dist/
package-lock.json
ui/package-lock.json
sdks/*
!sdks/README.md
!sdks/docs/
!sdks/docs/**
!sdks/tests/
!sdks/tests/**
# Committed generated SDKs (source of truth: openapi.json; generator pinned via openapitools.json)
!sdks/python/
!sdks/python/**
!sdks/typescript/
!sdks/typescript/**
!sdks/go/
!sdks/go/**
# ...but never commit build/test artifacts created inside them (these win, being last)
sdks/**/__pycache__/
sdks/**/.venv/
sdks/**/*.egg-info/
sdks/**/.pytest_cache/
sdks/**/.ruff_cache/
sdks/**/node_modules/
# Generator bookkeeping: FILES manifest is non-deterministic; VERSION is pinned via openapitools.json
sdks/**/.openapi-generator/
sdks/python/build/
sdks/python/dist/
sdks/typescript/dist/
!requirements.lock
.DS_Store
*.log

# Per-session runtime lock (churns every session, not shared state)
.claude/scheduled_tasks.lock

# Playwright MCP browser snapshots (transient debugging artifacts)
.playwright-mcp/
node_modules/

# Built verification screenshots (Playwright harness)
/*.png
design/_built/
# Per-route build reports (handoff to the design agent; see design/VERIFY.md)
design/_reports/

# local dev scratch (screenshots, throwaway artifacts)
.scratch/

