# Python bytecode and caches
__pycache__/
*.py[cod]
*$py.class
*.so
.Python

# Virtual environments
.venv/
venv/
env/

# Build artifacts
dist/
build/
*.egg-info/
*.egg
.eggs/
# mkdocs build output — `mkdocs build --strict` writes here.
site/

# Type-checking and lint caches
.mypy_cache/
.ruff_cache/
.pytest_cache/

# Test coverage
.coverage
.coverage.*
htmlcov/
.tox/

# Efterlev runtime state (created by `efterlev init` and agents).
# Most of `.efterlev/` is tool-managed state (SQLite store, content-addressed
# blobs, receipts log, cached catalogs, generated reports) that must NOT be
# committed. Exception: `.efterlev/manifests/` is customer-authored procedural
# attestations versioned alongside the code they describe, so we explicitly
# un-ignore that subtree while keeping the rest ignored.
.efterlev/*
!.efterlev/manifests/
!.efterlev/manifests/**
out/

# End-to-end smoke harness output — a timestamped results directory
# per run, holding the scratch workspace, captured CLI stdio, copied
# artifacts, and the checks report. Never committed.
.e2e-results/

# Editor and OS artifacts
.DS_Store
.idea/
.vscode/
*.swp
*.swo

# Secrets and local config
.env
.env.local
*.pem
.claude/settings.local.json

# Note: uv.lock is intentionally committed.
.dogfood/
