__pycache__/
*.py[cod]
*.egg-info/
.venv/
dist/
build/
.pytest_cache/
.ruff_cache/
node_modules/
.mypy_cache/
.coverage
.coverage.*
htmlcov/
.env

# plan_RELEASE W5: the release-evidence/v1 ledger is CI OUTPUT for one run
# (release-evidence/<release_sha>/...). It is uploaded as a run artifact and
# re-read by the `release-evidence` job; a copy committed to the tree would be
# stale evidence for a SHA that is no longer HEAD — exactly what the aggregate's
# stale-SHA check exists to reject.
release-evidence/

# Clone / large-response artifacts. The default output dir is now
# ~/.stealth-mcp/element_clones (outside the repo), but never commit any that
# land in-tree via an explicit relative path or a stale pre-fix run.
element_clones/

# Local scratch / ad-hoc dev artifacts (perf probes, smoke scripts, screenshots).
/perf_*.py
/probe_*.py
/preview_*.py
/smoke_*.py
/test_server_direct.py
/pypi_*.png
/test_screenshot.png

# graphify knowledge-graph artifacts (local navigation aid)
graphify-out/
.graphify_*

# Agent worktree scratch: each entry is a FULL checkout of this repo. Left
# un-ignored it is linted as if it were project source (ruff walks it and
# reports the same findings three times over) and, worse, hatchling sweeps it
# into the sdist — a local `uv build` produced a 56 MB sdist of which 55 MB was
# this directory. Ephemeral by construction; never part of the distribution.
.claude/worktrees/
