# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
!packages/design-system/src/lib/
!apps/web/src/lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/

# Node.js
node_modules/
.turbo/
.next/

# IDE
.idea/
.vscode/
*.swp
*.swo

# Environment
.env
.ama_state

# Data
data/
!data/podcast_demo/
!apps/web/src/routes/**/data/
/prompts/

# Testing
.pytest_cache/
.coverage
htmlcov/
ag_news_200.jsonl

# Node.js
node_modules/
# pnpm-lock.yaml is intentionally COMMITTED. It is the single source of truth for
# JS dependency resolution and apps/web/Dockerfile installs with --frozen-lockfile.
# Ignoring it is what previously left bun.lock as the only committed lockfile,
# so reproducible installs used bun's resolution while the docs mandated pnpm.

# mkcert certificates are safe to commit - they only work when the local CA is trusted
# infra/caddy/certs/ - intentionally NOT ignored for zero-config local dev

# Terraform
*.tfstate
*.tfstate.*
*.tfvars
!terraform.tfvars.example
.terraform/

# Atlantis secrets (Helm values with GitHub tokens)
infra/k8s/atlantis/secrets.yaml

# Agent harness state.
# Worktrees are multi-GB full repo clones (workmux scratch); leaving them
# unignored puts them in every agent's glob/grep scope and times out searches.
.claude/worktrees/
.claude/settings.local.json

# Local MCP client config for Claude Code in this repo (personal endpoint/keys).
# Root-anchored so the tracked plugins/ama-agent/.mcp.json is unaffected.
/.mcp.json

# Compiled email templates are committed (read at runtime by ama.modules.email.templates;
# the prod image copies packages/ without running a pnpm build)
!packages/email-templates/dist/
!packages/email-templates/dist/**

# TypeScript incremental build artifacts
*.tsbuildinfo
.design-sync/sb-reference/
.design-sync/learnings/
.design-sync/.cache/
.design-sync/node_modules
.ds-sync/
ds-bundle/
