.venv/
__pycache__/
*.pyc
*.egg-info/
dist/
build/
docs/_build/
.pytest_cache/
.ruff_cache/
.DS_Store

# marimo notebook session/output caches (regenerated by `marimo edit` / `marimo export`)
__marimo__/

# Large reference proteomes for source lookup are fetched, not committed
data/proteomes/
*.fasta
# ...except the synthetic integration fixtures, which every documented
# verification run reads. Ignored, they made a fresh clone unable to run one.
!integrations/fixtures/*.fasta
*.fasta.gz

# ...but shipped package data is never ignorable, whatever a glob above says. `mhci_pseudo.fa`
# escapes the *.fasta rule only by its extension; named .fasta it would have been silently
# untracked, and every fresh clone would ship a package that cannot load its own models.
!src/mhcmatch/data/**
# ...but bytecode is not package data. Without this carve-out the negation above re-adds
# data/__pycache__/*.pyc to the index, where they produce a spurious diff on every interpreter
# version and block `git worktree remove`. hatchling already keeps them out of the wheel.
src/mhcmatch/data/__pycache__/

# Obsidian memory-sync marker (machine-local absolute paths + sync hashes)
.claude/obsidian-sync.json

# per-feature git worktrees (see CLAUDE.md) — live inside the repo dir but are never committed
.claude/worktrees/

# `uv.lock` — a resolved graph for one machine, and this is a library, not an application. A
# consumer gets their dependencies from `pyproject.toml`'s ranges; a lockfile here binds nothing
# downstream and churns on every `uv sync`. It rode into the mouse-corpus branch unexamined
# (860 KB, 4,199 lines) and is excluded deliberately rather than by omission. Track it only if
# CI is ever made to install from it.
uv.lock
docs/_generated/

# coverage run artifact (pytest-cov; the report is the deliverable, not this file)
.coverage

CLAUDE.md
# Working notes — held out of the public repo.
# PROVENANCE.md must come after the `!src/mhcmatch/data/**` negation above to take effect.
ROADMAP.md
src/mhcmatch/data/PROVENANCE.md

# `integrations/` IS tracked: docs/pipeline.rst tells readers to run files from it, and three
# tests read those paths. Ignored, it made both impossible from a clone and turned CI red.
integrations/snakemake/mhcmatch/results/
integrations/**/.snakemake/
integrations/**/work/
