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

# Virtual envs
.venv/
venv/
env/

# uv
.uv/

# Tooling caches
.ruff_cache/
.pytest_cache/
.mypy_cache/
.coverage
htmlcov/

# Local overrides — never commit
.env
*.local.*
.claude/settings.local.json
CLAUDE.local.md

# Secrets — never commit (local source-of-truth for keys/toggles)
API-KEYS-AND-SETTINGS.md
*KEYS*.md
*.key
# Secret-bearing config/data files. Narrowed from the old bare `*secret*`, which
# silently ignored ANY path containing "secret" — including source/tests (it
# swallowed tests/chains/test_chain_redacts_secrets.py during step10 S.1).
# Scoped to data/config extensions so it never eats .py/.md source again.
*.secret
*.secrets
secrets.json
secrets.yaml
secrets.yml
secrets.toml
secrets.env
client_secret*.json
.env.secret

# Git worktrees (embedded repos under .claude/)
.claude/worktrees/

# Generated artifacts
docs/graphify/

# Local planning docs — keep out of new commits. NOTE: step5–9.md are already
# tracked and stay on origin; gitignore does not untrack them. This only stops
# brand-new step*.md (and the local step10.md working copy) from being added.
step*.md

# Local go-to-market / strategy / brain-dump docs — NEVER commit (repo is public;
# these hold pricing, targeting, post drafts, and competitive analysis).
launch/
launch.md
marketing.md
new_websites.md
new.md
remaining*.md
mcp-builder/

# Internal build-process / audit docs — untracked 2026-06-06 (were committed before
# this rule). Kept local; no secrets, just behind-the-scenes notes not meant for the
# public repo. Already-removed history copies are harmless (no credentials).
AUDIT.md
BACKLOG.md
changes.md
plan.md
docs/hot.md

# OS
.DS_Store
Thumbs.db

# IDE
.idea/
.vscode/

# diskcache local store
.cache/
