__pycache__/
*.py[cod]
.pytest_cache/
.hypothesis/
.mypy_cache/
.ruff_cache/
.coverage*
htmlcov/
*.egg-info/
.venv/
.pyvenv/
dist/
build/
site/

# Private agent working area (dotagents link is a symlink; a directory-only
# `.agents/` pattern would not match it, so this must stay slashless).
.agents
CLAUDE*
.claude

# Unshared per-machine overrides. `AGENTS.local.md` is the dangerous one: it
# sits beside an `AGENTS.md` that is *supposed* to ship, under a nearly
# identical name and with the opposite destination, and it carries local
# paths, hostnames and sometimes credentials. The manifest excludes the same
# pattern; both teeth are needed, and neither is automatic.
*.local.*

# Root dotfiles only. Unanchored, `.*` also matched every nested dotfile and
# dot-directory -- a `tests/.golden/` fixture or a vendored `.config` would
# have been ignored with nothing to say so. The slashless `.agents`,
# `CLAUDE*` and `.claude` rules above are deliberately NOT anchored, because
# a nested copy of those is exactly what must not be committed.
/.*
!/.gitignore
!/.gitattributes
# Directory form: git cannot re-include a file below an excluded directory,
# so `.github/` itself has to be un-ignored, not just the files under it.
!/.github/

# Run logs. A test run can leave a log in the working directory, and the
# sdist target excludes only dotfiles, so `python -m build` would ship it.
run.log
*.log

# OS and editor droppings.
.DS_Store
Thumbs.db
*.swp
*~

