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

# Generated at wheel-build time by tools/bundle_data.py (Hatchling hook);
# the source of truth is the repo-root templates/ dir, not this copy.
src/eawf/_data/
.pytest_cache/
.ruff_cache/
.mypy_cache/
.coverage
coverage.xml
htmlcov/
# mutmut rewrites source + writes its CI/CD stats into this sandbox dir
# at the repo root when a mutation campaign runs locally.
mutants/

# uv
.venv/

# mkdocs build output (the published site is built in CI, not committed).
site/

# OS / IDE
.DS_Store
.idea/
.vscode/
*.swp

# Eä-managed surface:
#  - AGENTS.md is committed (managed by `eawf sync`; user-region preserved
#    on re-render).
#  - CLAUDE.md + .claude/ stay gitignored permanently — these are
#    machine-specific renders of the CC plugin tree (run
#    `eawf plugin install claude` locally to regenerate). Only AGENTS.md
#    is the committed agent contract.
CLAUDE.md
.claude/
.codex/
.opencode/

# Vale prose-linter: the eawf style package + .vale.ini ARE committed; the
# Google base package is fetched by `vale sync` into StylesPath at CI time
# and must not be committed.
.vale/styles/Google/

# Self-hosted marketplace catalog pointers ARE committed — small declarative
# manifests (NOT rendered plugin trees) that publish the install source for
# each runtime. Re-included with explicit negations so an operator's global
# ignore of a bare `.agents` / `.claude-plugin` dir cannot drop them. A
# directory negation must precede the nested-file negation (git cannot
# re-include a file under an excluded directory).
!.claude-plugin/
!.claude-plugin/marketplace.json
!.agents/
!.agents/plugins/
!.agents/plugins/marketplace.json

# .ea/ — state.json + config.yaml + store/*.jsonl are committed; locks +
# local scratch + manifest cache + instrument-probe cache + worktrees +
# state migration backups are not.
.ea/locks/
.ea/local/
.ea/indexes/
.ea/instrument-probe.json
# instrument-probe cache embeds absolute host paths; the bare glob covers
# nested copies a doctor / skill run may write under a resolved state dir
# (e.g. tests/fixtures/**/.ea/), not just the repo-root .ea/ default.
**/instrument-probe.json

# Render cache (memory-view) + machine-specific MCP / opencode runtime
# configs written by `eawf plugin install`; regenerable, never committed.
.ea/artifacts/rendered/
.mcp.json
opencode.json

# Telemetry / SQLite databases — telemetry.db embeds absolute cwd +
# session_log_path, so it must never be committed. The bare glob covers
# any *.db written anywhere in the tree (telemetry, scratch probes).
*.db
.ea/telemetry.db

# Per Q13 (operator decision 2026-05-18): worktrees live under .ea/worktrees/
.ea/worktrees/

# State migration backups (kept locally during migration; not committed).
# Forward-fix is the canonical recovery path. The bare glob covers backups
# written adjacent to any resolved state.json, not just the .ea/ default.
.ea/state.json.bak.*
state.json.bak.*

# Secrets
.env
*.pem
*.key
secrets/

# Daemon state lock (contains pid/hostname heartbeat) -- never commit
.ea/state.json.lock
.ea/*.lock
