# Python
__pycache__/
*.py[cod]
*$py.class
*.egg-info/
.pytest_cache/
.coverage
htmlcov/
build/
dist/
.venv/
venv/

# Node
node_modules/
.next/
dist/
out/

# Editors
.DS_Store
.vscode/
.idea/

# Secrets — never commit. .env.example is the tracked template.
.env
.env.*
!.env.example

# Local state
*.local
.env.local
.env.*.local

# Run output (traces, results, findings).
# LEADING SLASH IS LOAD-BEARING: an unanchored `runs/` matches a directory named
# runs at ANY depth, which silently excluded dashboard/app/app/runs/[runId]/ —
# the console's results route. It built fine locally because the file was on
# disk, and 404'd on every deployment because git had never seen it. Three
# separate "fixes" went to a file the deployment did not have.
/runs/
/runs/.demo-logs/
~/.mcp_eval/
acme_storage.db

# Tooling
.claude/
.claude/scheduled_tasks.lock

# generated per-issue repro suites (issueloop/repro.py) — now under legacy/
legacy/src/mcp_eval/tasks/suites/repro_*.json

# litmus-service runtime artifacts
service/data/
service/.venv/

# experiment scratch (regenerated deterministically by each harness)
experiments/results/*_work/
experiments/harness/*_work/

# Local demo workspace data (service --data-dir), never committed.
/.demo-data/

# The CLI's working directory, wherever it runs. On this machine it holds
# worlds `litmus mock` materialises from a bundle (regenerated on demand). On a
# CUSTOMER's machine the same directory holds their captured sessions and
# `pushed.json` — their traffic — so this must never be a thing anyone commits
# by habit.
/.litmus/

# Assembled customer exports (`litmus export`): regenerated from the pins, never committed.
/exports/
