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

# Claude Code local settings
.claude/settings.local.json
.claude/settings.local.json.bak
.claude/
docs/internal/

# Report-script run outputs: machine/runtime-specific, regenerated by the
# scripts that wrote them.
#
# A PATTERN, NOT A LIST. This was four exact paths, and a fifth run output --
# benign_toolcalls/domains_last_run.json, written by a throwaway instrument that
# was never committed -- sat untracked beside them. Harmless until 1.18.0, when
# the sdist started shipping the pool directories: hatchling honours .gitignore
# rather than git's index, so the four named here were excluded and the unnamed
# fifth was packaged into the distribution. Same enumeration failure as
# tests/test_install_hints.py's file list, one directory over.
#
# Every scripts/*_report.py writes its summary to <dir>/[<prefix>_]last_run.json,
# so match the convention instead of enumerating it -- the next one needs no
# line. Nothing tracked matches this (`git ls-files | grep last_run` is empty),
# and .gitignore does not affect already-tracked files, so a future file that
# genuinely belongs in the repo must be `git add -f`'d once.
**/*last_run.json

# Local symlinks some worktrees carry; never intended to be tracked.
.claude
.venv

# Long-form benign corpus: 10M characters, regenerated from the committed
# seed + generator and pinned by benign_longform/manifest.json.
benign_longform/corpus.jsonl
