# Environment variables
.env
.env.local
.env.production
.env*.local
*.env

# Claude Code — contains MCP secrets
.claude/mcp.json

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
venv/
env/
ENV/
.venv
pip-log.txt
pip-delete-this-directory.txt
.pytest_cache/
*.egg-info/
dist/
build/
*.egg

# Node
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# Next.js
.next/
out/
build/
*.tsbuildinfo
next-env.d.ts

# Expo/React Native
.expo/
dist/
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/

# IDEs
.vscode/
.idea/
*.swp
*.swo
*.swn
.DS_Store

# Docker
*.log
docker-compose.override.yml

# Database
*.db
*.sqlite
*.sqlite3
postgres-data/

# Redis
dump.rdb

# Celery
celerybeat-schedule
celerybeat.pid

# Coverage
coverage/
.coverage
htmlcov/

# Misc
*.bak
.cache/
temp/
tmp/
uploads/
static/
media/

# Secrets - CRITICAL
*.pem
*.key
*.crt
*.pfx
secrets/
credentials/

# Runtime output
backend/logs/
backend/data/ledger/
backend/MODULE_RELOADED.txt

# Test/debug data files
backend/data/agent_*.json
backend/data/quality_test_results.json
backend/data/pq08_*.json
nul

# Harness artifacts
backend/harness/runs/*/
backend/harness/clerk_*.json
backend/harness/jwt_token.txt

# Generated output
backend/tests/coverage.json
# Runtime-written domain access cache — the pipeline appends every new domain it
# meets (paywall/timeout/bot-blocked), so a tracked copy churns on every run.
backend/data/domain_status.json
# Replay-bench per-run observation dumps — deterministic + reproducible from
# cassette.json.gz + golden.json; tracked copies just churn every run.
backend/tests/replay_corpus/*/observation.json

# Audit docs are TRACKED from 2026-07-27. The reasoning behind pipeline and
# product decisions is expensive to reconstruct and was previously local-only,
# so it never travelled with the commits it explained.
# Two exceptions stay untracked:
#   _archive/ — 230 completed/superseded docs, deliberately retired 2026-07-20.
#     History, not live plans; tracking them would bury the 50 that matter.
#   outreach contact map — 67 real named third parties' email addresses. Git
#     history is effectively permanent; that is a privacy decision, not a
#     housekeeping one. Delete this line to include it.
audit/_archive/
audit/2026-06-18_outreach_contact_map.md


# A/B mapping harness (scripts + run artefacts, kept untracked)
backend/scripts/ab/

# Eval/probe RUN OUTPUTS — regenerable by the scripts beside them, and they churn
# on every run. Two exceptions are negated below: the frozen candidate pools are
# INPUTS, and the pending model sweep for the Gemini 2.5 migration is defined over
# them, so they must travel with the commits that reason about them.
backend/scripts/.*.json
!backend/scripts/.mapping_sweep_pool.json
!backend/scripts/.mapping_sweep_pool_adversarial.json

# Local-only cost/profiling tooling + bench backups (keep untracked)
backend/scripts/check_cost_snapshot.py
backend/scripts/demo_candidates.py
backend/scripts/profile_stage_timings.py
backend/data/*.bench_backup
