node_modules/
.streamlit/secrets.toml
__pycache__/
*.pyc

logs/
*.log
test_results/

.DS_Store
# SECRETS. Ignore EVERY .env variant, then re-admit the secret-free templates.
#
# This used to enumerate blessed backup NAMES (.env.backup*, .env.bak*, .env.*.bak). That is an
# allowlist, so safety depended on whoever wrote the file guessing a name that happened to be on
# the list. It failed exactly that way: a recovery wrote `.env.recovered-from-backup`, which matched
# none of the patterns, and 176 live credentials sat in the commit surface where any `git add -A`
# would have published them to a remote.
#
# A denylist with explicit exceptions is the only correct polarity for secrets: a new name is safe
# by default, and admitting a file is a deliberate act.
.env*
!.env.example
!**/.env.example
*.env.local
data_exports/

.turbo/
.omega_dev_loop/
/meta_logs/

backend/app/lib/oauth_automation/screenshots/
backend/tmp/
backend/tmp/**
backend/tmp/omega/
backend/tmp/omega/session_artifacts/
backend/tmp/omega/session_artifacts/**
tmp/
tmp/browser_use_sessions/
tmp/browser_use_sessions/**
.specstory/

# Prevent frontend symlink from being committed (causes Vercel build failures)
# See commit db5d1d359 for context - symlink causes infinite path resolution on Vercel
# NOTE: this used to read "frontendpackages/python-sdk/dist/", two rules run together on one line,
# which matched nothing at all. Both rules are restored below, one per line.
/frontend

# Pack-time build output of the packages that publish from dist (prepack builds it, postpack points
# the entry back at src), so it is never committed. The MCP servers and SDKs commit their dist on
# purpose, which is why this names these three instead of packages/*/dist.
packages/chat-kit/dist/
packages/api-client/dist/
packages/ui/dist/

# SEO audit generated reports
scripts/seo-audit/reports/

# Ralph loop state and per-iteration logs
.ralph/

# TypeScript incremental build info: a build artifact, never source.
*.tsbuildinfo

# Companion-link inserter backups: multi-MB timestamped dry-run/apply snapshots, transient output.
scripts/.companion-links-backups/

# vosk offline wake-word model (large binary; host in public/models or a CDN in prod)
apps/app/public/models/

# Local-only snapshots of production collections taken before a migration.
# These contain real email bodies and customer-facing content. Never commit them.
.backups/

# Weekly-email run logs and the agent-written template JSON handed to the inserter.
# Generated per run, contains full email bodies. Never commit.
scripts/weekly-email/output/

# Tool-rendered scratch images dropped at the repo root by a chat session (render-*.png).
# Not referenced by anything in the codebase. Never commit.
.attachments/

# Desktop release binaries. They live in the GitHub release of their version and the backend hands
# them out (/companion/artifacts); never committed. See scripts/build-founden-signed.sh.
apps/app/public/downloads/

# Python virtualenvs, in any form: a directory, or the symlink a clean release clone points at the main checkout's
# (apps/backend/.venv). A bare name, so a symlink is ignored too ("venv/" would match only a directory): one was
# committed on 2026-09-29 and blocked every checkout that has its own.
.venv
