# ============================================================================
# Python - Generated Files
# ============================================================================
__pycache__/
*.py[cod]
*$py.class
*.so

# ============================================================================
# Python - C Extensions
# ============================================================================
*.pyc
*.pyo

# ============================================================================
# Backup Files
# ============================================================================
*.backup
*.backup.json
# Catch-all for .backup.<ext> (tool file modifiers write these next to
# every edit). `*.backup.json` covers JSON variants specifically.
*.backup.*
*.bak
*.bak2
*.cover
*.py,cover
*.crackerjack.bak

# ============================================================================
# Python - Distribution / Packaging
# ============================================================================
build/
develop-eggs/
dist/
downloads/
eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
*.egg-info/
*.egg
*.egg-info
MANIFEST
*.spec
*.whl

# ============================================================================
# Python - Unit Test / Coverage Reports
# ============================================================================
htmlcov/
tox/
.nox/
coverage/
.coverage
.coverage*
nosetests.xml
coverage.xml
coverage.json
.hypothesis/
.pytest_cache/

# ============================================================================
# Translations
# ============================================================================
*.mo
*.pot

# ============================================================================
# Python - Environments
# ============================================================================
.env
.venv
.venv/
venv/
venv/
env/
env/
ENV/
ENV/
env.bak/
venv.bak/

# ============================================================================
# Python - Type Checking & Linting
# ============================================================================
.mypy_cache/
.dmypy.json
dmypy.json
.ruff_cache/
.pyre/
.pytype/
.pytype/

# ============================================================================
# Python - Package Management
# ============================================================================
.pdm-python/
.pdm.toml
.pyscn/
.uv/
.uv-cache/

# ============================================================================
# IDEs
# ============================================================================
.idea/
.vscode/
*.swp
*.swp
*.swo
*~

# ============================================================================
# Logs
# ============================================================================
*.log
logs/

# ============================================================================
# OS
# ============================================================================
.DS_Store
.DS_STORE
Thumbs.db

# ============================================================================
# Local Configuration
# ============================================================================
settings/local.yaml
settings/repos.yaml
settings/ecosystem.yaml
.envrc.local
settings.local.json

# ============================================================================
# Node.js - Wave-9 mermaid CI guard
# ============================================================================
# jsdom is the dev dep for the wave-9 mermaid CI guard (see
# crackerjack/bin/validate-mermaid.mjs). The package.json + package-lock.json
# ARE committed; only the resolved artifacts are excluded.
node_modules/
# Allow the empty placeholder so a fresh clone gets a usable `npm install`.
!node_modules/.gitkeep

# ============================================================================
# Sensitive Configuration Files
# ============================================================================
config.yaml
oneiric.yaml

# ============================================================================
# Crackerjack
# ============================================================================
.crackerjack/
.crackerjack/outputs/
.crackerjack-state/
.crackerjack-hooks-updated/
.crackerjack-mcp/
crackerjack-debug-*.log
crackerjack-ai-debug-*.log
# Old distribution directories (should not be in repo)
crackerjack-*/

# ============================================================================
# Skyros Cache (mcp-common runtime cache)
# ============================================================================
.skylos/

# ============================================================================
# Test/Benchmarks
# ============================================================================
.benchmarks/
/tests/.benchmarks/

# ============================================================================
# Obsidian (excluded from git - user note directory)
# ============================================================================
.obsidian/

# ============================================================================
# Database files
# ============================================================================
*.db

# ============================================================================
# Archive / Backup directories
# ============================================================================
.archive/
/.archive/
.archives/
.archive/
/archive/
.backup/
/.backups/
.backup/
.backups/

# ============================================================================
# XDG - Cache directories
# ============================================================================
.pytest_cache/
.ruff_cache/
.mypy_cache/
.oneiric_cache/
.complexipy_cache/
.cache/
.cache/lychee/

# ============================================================================
# XDG - State directories
# ============================================================================
.claude/
# Workflow scripts are project-shared canonical config — track them.
# IMPORTANT: `.claude/` excludes the parent directory; transitive directory
# matches in `.claude/*` would otherwise drop `.claude/workflows/**` too.
# Re-include the directory entry first, then recursively with `**` so nested
# paths like `.claude/workflows/.archive/*.js` are tracked. Pattern matches
# mahavishnu's `.claude/commands/`, `.claude/skills/` allow-rules.
.claude/*
!.claude/workflows/
!.claude/workflows/**
.session-buddy/
.crackerjack/

# ============================================================================
# Claude Code Settings
# ============================================================================
.mcp.json
**/.claude/settings.local.json

# ============================================================================
# Archived Documentation (excluded from quality checks)
# ============================================================================
docs/archive/

# ============================================================================
# Complexipy Results (temporary complexity analysis output)
# Covers both legacy underscore variant (`complexipy_results_*.json`)
# and hyphen variant (`complexipy-results.json`). Both are tool outputs
# that should never be committed. See Phase O for context.
# ============================================================================
complexipy*.json
complexipy_results*.json
.complexipy_cache/

# ============================================================================
# Lychee link checker
# ============================================================================
.lycheecache

# ============================================================================
# Development Artifacts (evaluate periodically)
# ============================================================================
feature-implementation-*.md
test-implementation-*.md
session_handoff_*.md
.worktrees/

# ============================================================================
# Bodai Runtime Artifacts (canonical 2026-08-17 cleanup)
# ============================================================================
*.pyd
example.mcp.json
# Crackerjack test selection report (runtime artifact emitted by test selectors)
report.txt

# ============================================================================
# Bodai-wide gitignore patterns (added 2026-09-07; cross-repo cleanup sweep)
# ============================================================================
# Editor / pre-edit backups (foo.py.backup, foo.py.backup.json)
*.backup
*.backup.*
*.bak
*.tmpl
# XDG mistake dirs (env var expansion failed; literal names)
~
[{]HOME[}]
[{]XDG_DATA_HOME:-$HOME
# pytest-benchmark autosave cache (sibling of the tracked `benchmarks/` test suite)
.benchmarks/
# Vitest config timestamp cache
vitest.config.js.timestamp-*.mjs
# Playwright output cruft
playwright-junit.xml
playwright-report/
playwright-results.json
test-results/


# >>> bodai-shared-gitignore >>>
# Source of truth: crackerjack/templates/GITIGNORE_BODAI.md
# Enforced by: crackerjack check `gitignore-conformance`
# Fleet list: /Users/les/Projects/mahavishnu/BODAI_REPO_REGISTRY.md
# Do NOT remove the marker line above — `crackerjack gitignore sync` uses it
# to detect already-applied state.

# Editor / pre-edit backups (foo.py.backup, foo.py.backup.json)
*.backup
*.backup.*
*.bak
*.tmpl
# XDG mistake dirs (env var expansion failed; literal names)
# Note: both `{` and `}` are escaped (`{` -> `[{]`, `}` -> `[}]`)
# because gitignore parsers interpret `${...}` as a brace-expansion
# alternate group; escaping only the open brace leaves a stray `}`.
~
[{]HOME[}]
[{]XDG_DATA_HOME:-$HOME[}]
# pytest-benchmark autosave cache (sibling of the tracked `benchmarks/` test suite)
.benchmarks/
# Vitest config timestamp cache
vitest.config.js.timestamp-*.mjs
# Playwright output cruft
playwright-junit.xml
playwright-report/
playwright-results.json
test-results/

# ============================================================================
# Documentation — image assets
# ============================================================================
# Tracked images live under docs/assets/images/. Session scratch outputs
# (named like "*-v4.png", "*-window.png", or anything dropped in
# .scratch/) are local-only and must not be committed. The dot-prefix on
# `.scratch` is load-bearing — the gitignore rule only matches with it.
docs/assets/images/.scratch/
docs/assets/images/.scratch/**
# <<< bodai-shared-gitignore <<<
