.gitignore

# Python
backend/.venv/
**/__pycache__/
*.py[cod]
.pytest_cache/
.ruff_cache/

# Local env files
backend/.env
frontend/.env

# Run artifacts from local dev / verification. uvicorn and expo both split their
# output across a .log and a .err, so ignoring only the .log half left an untracked
# file behind after every local run.
*.log
*.err
backend/backend-run.log
frontend/expo*.log
.playwright-mcp/
.serena/
verify-*.png
frontend/test-results/
frontend/playwright-report/

# Row snapshots written by backend/scripts/apply_migrations.py before it touches
# a live database. They contain real user UUIDs, so they are local evidence of a
# migration run and must never be committed.
backend/migration_backup_*.json

# Browser profiles the real-push verification script reuses. They hold the push
# subscriptions, which is why they are not deleted between runs; they are
# machine-local state and must never be committed. One per browser, because a
# subscription belongs to the browser that minted it.
frontend/.push-probe-profile*/

# SQLite database the E2E harness creates. It is rebuilt from scratch on every
# `bun run e2e:live`, holds no real user data, and must never be committed.
# Globbed rather than listed one by one, because a harness run can be pointed at
# a named scratch file (e2e-wns.db and friends) to keep concurrent runs from
# trampling each other's rows.
backend/e2e*.db
backend/e2e*.db-journal
backend/e2e*.db-wal
backend/e2e*.db-shm

# OS/editor noise
.DS_Store
Thumbs.db
backend/.dispatch-secret