# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/

# Python lib directories (but not TypeScript lib/)
/lib/
/lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
venv/
env/
ENV/
.venv

# IDE
.vscode/
.idea/
*.swp
*.swo
*~
.claude/settings.local.json

# Testing
.pytest_cache/
.coverage
coverage.xml
coverage.json
htmlcov/
*.log
.hypothesis/
artifacts/
tests/e2e/run-e2e-full.sh
test-results/

# CodeFRAME specific
.codeframe/state.db
.codeframe/checkpoints/
.codeframe/logs/
*.db-journal
state.db
codeframe.db
*.backup
*.db.backup*

# Environment
# Ignore every .env variant and re-include only the committed templates, so a
# new variant (.env.production, .env.hosted, ...) is never committable by
# default. Enumerating them instead failed open — see #895.
.env*
!.env*.example

# Staging server private configuration
.staging-server.conf

# Staging server
/staging/
/logs/
.pm2/
node_modules/

# Git worktrees
.worktrees/

# OS
.DS_Store
Thumbs.db

.codeframe/
.agent-tasks/
# Local planning scratch (issue-lifecycle todo.md, migration notes) — not source.
# Anchored to repo root so it does NOT also ignore nested source dirs such as
# web-ui/src/components/tasks/.
/tasks/

# Playwright Test Artifacts
tests/e2e/playwright-report/
tests/e2e/test-results/
tests/e2e/.auth/
tests/e2e/.codeframe/
tests/e2e/.e2e-workspace/
tests/e2e/.e2e-lifecycle-workspace/
tests/e2e/.e2e-state.db*
test_audit_report.md
tests/integration/.env.integration
web-ui/test-results/
.opencode-tmp/
# #614 cold-start harness: keep the captured text evidence (the demo document
# re-runs against it), drop the scratch run dir. The run logs are evidence, so
# they override the blanket *.log rule above.
scripts/quickstart-cleanroom/artifacts/
!scripts/quickstart-cleanroom/artifacts-*/run-logs/*.log
