__pycache__/
*.py[cod]
.pytest_cache/
build/
*.egg-info/
.venv/
venv/

# Build output. `uv build` rewrites this on every release and PyPI is the place
# these go — a wheel committed here is one more copy to get out of step.
dist/

# Editor and OS noise. Cheap to list, and the alternative is finding it in
# someone's first pull request.
.DS_Store
Thumbs.db
.idea/
.vscode/
*.swp

# `install` and `uninstall` back up settings.json before touching it. Those land
# next to the file they copied, which is under $HOME normally but inside the repo
# whenever a test or a manual run passes `--settings ./something`.
*.bak

# Per-machine Claude Code permissions, not project config.
.claude/settings.local.json

# The corpus clones and their bench output: multi-gigabyte, and regenerable from
# the pinned SHAs in next.md §8.
#
# The harness *scripts* are tracked. §8 tells a reader to run `clone.sh`,
# `run.sh`, `summarize.py`, `anchors.py` and `verify.py`, and a reproduce section
# naming files that are not in the checkout does not reproduce anything — the
# same defect as `verify.py` pointing at a deleted `accuracy.md`, which is how
# §1 stopped being checked without anyone noticing.
#
# Top level only, and deliberately: the clones hold thousands of their own `.py`
# and `.sh` files. `.temp/*` excludes those directories outright, so git never
# descends into them and no `!` below can pull one back. The cost is that a new
# harness script has to sit directly in `.temp/` to be tracked — one in a
# subdirectory is ignored silently.
.temp/*
!.temp/*.sh
!.temp/*.py

# Regenerable by `graphify update .` at no API cost, and graph.json/graph.html
# are large. Note CLAUDE.md tells agents to read GRAPH_REPORT.md first, so a
# fresh clone has to build it before that instruction means anything.
graphify-out/