# 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
# A parallel run writes one shard per worker (.coverage.<host>.<pid>.<nonce>)
# and only folds them into .coverage on demand, so without this rule every
# `just test ci` leaves the tree dirty and the tag cleanliness probe reds.
.coverage.*
coverage.xml
# The parallel leg's per-test durations, read by the duration budget gate.
pytest-junit.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 (rendered by `eawf sync`); the
# machine-specific runtime renders (CLAUDE.md, .claude/, AGENTS.override.md,
# .codex/, .opencode/) are ignored by the managed block at the end of this file.

# 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/ — the managed block at the end of this file owns the scratch, lock,
# cache, worktree and backup paths; only what it does not cover is listed here.
#
# 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

# State migration backups written adjacent to any resolved state.json, not
# just the .ea/ default. Forward-fix is the canonical recovery path.
state.json.bak.*

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

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

# BEGIN EAWF:gitignore
CLAUDE.md
.claude/
.codex/
.opencode/
.mcp.json
opencode.json
AGENTS.override.md
.ea/rules/views/
.claude/skills/eawf-rules-*/
.eawf-mcp/
.ea/locks/
.ea/**/*.lock
.ea/local/
.ea/generations/gen-*/local/
.ea/generations/gen-*/indexes/
.ea/worktrees/
.ea/indexes/
.ea/specs/
.ea/instrument-probe.json
.ea/telemetry.db
*.db
.ea/state.json.bak.*
.ea/store/event.jsonl
.ea/state.json
.ea/store/*.jsonl
!.ea/store/release.jsonl
!.ea/store/release_record.jsonl
!.ea/store/release_checkpoint_receipt.jsonl
!.ea/store/release_train_advance.jsonl
!.ea/store/conformance_stage.jsonl
.ea/generations/.staging-*/
.ea/generations/restore/
.ea/generations/journal.jsonl
.ea/epoch2-disposable-canary.json
.ea/artifacts/rendered/
.ea/artifacts/**
!.ea/artifacts/**/
!.ea/artifacts/research/2026-09-04-dev1-config-defaults-benchmark.md
!.ea/artifacts/evidence/2026-09-18-dev3-reprobe/cross-provider-reprobe.json
!.ea/artifacts/evidence/2026-09-18-dev3-reprobe/daemon-rpc-reprobe.json
!.ea/artifacts/evidence/2026-09-18-dev3-conformance/native-canary-evidence.json
!.ea/artifacts/evidence/2026-09-26-dev4-conformance/native-canary-evidence.json
!.ea/artifacts/evidence/2026-09-27-dev5-product-canary/native-canary-evidence.json
!.ea/artifacts/evidence/2026-10-02-rc1-flag-day/native-canary-evidence.json
!.ea/artifacts/evidence/2026-10-08-rc2-cross-provider/native-canary-evidence.json
!.ea/artifacts/evidence/2026-09-27-dev5-product-canary/product-canary-receipts.json
.ea/**/.DS_Store
# END EAWF:gitignore
