# Node / pnpm
node_modules/
.pnpm-store/
.pnpm-debug.log*

# Turbo
.turbo/

# Next.js
.next/
out/
next-env.d.ts

# Build output
dist/
build/
apps/web/tsconfig*.tsbuildinfo

# Python
.venv/
__pycache__/
*.pyc
*.pyo
*.egg-info/
.pytest_cache/
.ruff_cache/
.pyright/

# uv
.python-version

# Note: packages/api-client/src/generated/ is committed (serves as the typed
# contract between web and api). CI regenerates and fails on drift.

# TanStack Router generated route tree (regenerated on dev/build)
apps/web/src/client/routeTree.gen.ts

# Environment
.env
.env.local
.env.*.local
!.env.example

# Editors
.vscode/
.idea/
*.swp
.DS_Store

# Terraform
**/.terraform/
*.tfstate
*.tfstate.*
*.tfvars
!*.tfvars.example
*.tfplan
# .terraform.lock.hcl IS committed (provider pinning across the team)

# Docker
docker-compose.override.yml

# Local tooling output
coverage/
.coverage
*.log
.gstack/
.claude/

# Langfuse exports are real production data — emails, prompts,
# hostnames. Both the full export at the repo root and any sampled
# subset under apps/api/tests/fixtures/traces/langfuse_csv/ stay local.
# Generate the sample with apps/api/scripts/sample_langfuse_csv.py from
# your own export when re-running the trace-schema validator. The glob
# below is deliberately broad — `sample.csv` is the conventional name
# but a developer using a different one (sample_2.csv, prod_dump.csv)
# must not be able to commit it by accident.
langfuse_export.csv
apps/api/tests/fixtures/traces/langfuse_csv/*.csv
