# Python
__pycache__/
*.py[cod]
*.egg-info/
.eggs/
.pytest_cache/
.ruff_cache/
.mypy_cache/

# venv / conda
.venv/
venv/
env/

# build artifacts (scikit-build-core / CMake / wheels)
build/
dist/
wheelhouse/
_skbuild/
*.so
*.dylib
*.pyd

# C++
*.o
*.a

# docs
docs/_build/

# editor / OS
.idea/
.vscode/
*.iml
.DS_Store

# Claude Code local state (session config + nested agent worktrees — never commit)
.claude/

# scratch
tmp/

# example-notebook data (fetched from HuggingFace, md5-cached; never committed)
examples/.data/

# marimo session/run cache
__marimo__/

# coverage artifacts
.coverage
.coverage.*
htmlcov/

data_dump/*
!data_dump/.gitkeep
# Example/notebook exports that land in the cwd when run from the repo root. One of these
# (a 6 MB scRepertoire TSV) rode into master inside an unrelated `git add -A` docs commit.
screpertoire_airr.tsv
*.h5ad
*.h5ddl

# Working notes that carry cohort names, cluster paths and collaborator-specific detail.
# These are the input to a release, not part of one: a filed bug report names the cohort the bug
# was found on, which belongs in the private analysis repo and nowhere in a public history.
/TODO.md
/ISSUES*.md
/NOTES.md
/ROADMAP_local.md
/STATUS.md
# The detailed changelog. `CHANGELOG.md` is the slim one a USER reads.
/CHANGELOG_local.md

# Session instructions: they name in-flight analyses and the
# cohorts a bug was found on. Kept local, never in a published history.
/CLAUDE.md
/.claude/

# Data provenance. SOURCES.md is the one md file whose PURPOSE is internal detail: cluster
# project paths, private HuggingFace dataset names, local git-LFS checkouts, and cohort
# composition down to batch names and HLA schemas. It is the right file to keep and the wrong
# file to publish, so it lives here and stays local. Public provenance -- what a shipped artifact
# is and how to regenerate it -- belongs in the docstring of whatever loads it.
/SOURCES.md

# Methodology memos. They read as documentation and they are not: they name in-flight internal
# work -- an unpublished audit manuscript and its dump paths, a sibling benchmark project, a
# reviewer's local conda prefix. The scripts beside them stay tracked; the prose does not.
# (`/appendix` is already excluded from the sdist, so nothing about the wheel changes.)
/appendix/*.md
