__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. The sdist ships the pool directories, and hatchling
# honours .gitignore rather than git's index, so a run output that is untracked
# but not matched here (an instrument's *_last_run.json written beside the
# pool) would be packaged into the distribution. A list of exact paths misses
# the next one; the pattern does not.
#
# 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

# Worktree-local venv for real-framework verification (the tracked .venv is a
# symlink to a shared one and must not have frameworks installed into it).
.venv-lc161/
