# ---- Rust ----
/target/
Cargo.lock

# ---- WASM build output ----
/pkg/

# ---- Python ----
.venv/
*.whl
*.egg-info/
__pycache__/
*.so

# ---- OS ----
.DS_Store

# ---- Project-specific (not version-controlled) ----
.env
AGENTS.md
lessons.md
tasks/todo.md
# `tasks/*` (not `tasks/`) deliberately: a trailing-slash directory pattern
# excludes the directory itself, and git cannot re-include a file whose
# parent directory is excluded -- the !exceptions below would silently not
# apply. `tasks/*` excludes the same contents but lets git descend and
# evaluate per-file negations.
tasks/*
memo.txt

# Measurement provenance docs are exceptions: they're the durable record of
# what a published benchmark number actually measured, so they must be
# tracked even though the rest of tasks/ is local scratch.
!tasks/phase31_corrected_baseline_run.md
!tasks/phase31_final_remeasurement_run.md

# Phase 32 Track F (validator fidelity) gold-set classification data: the
# durable diagnostic record backing the forward-validator canonical-SMILES
# fallback fix, per the same "measurement provenance must be tracked" rule.
!tasks/phase32_track_f_gold_set.json
!tasks/phase32_track_f_summary.json

# ---- ONNX model weights (large binaries) ----
data/*.onnx
data/*.onnx.data

# ---- Large data files (not published) ----
data/building_blocks_500k.smi
data/building_blocks_emolecules*.smi
data/uspto50k_benchmark_result_v2.json
data/templates_extracted*.smi
data/bench_chunks*/
data/bench_chunks*_orchestrator.log
data/uspto50k_test.smi
data/uspto50k_benchmark_result.json

# Phase 32 scratch/raw run dumps under data/corpora/ (underscore prefix =
# reproducible intermediate data, not a curated deliverable -- the fixed
# corpus manifests themselves, e.g. screening_500.json, are not excluded).
data/corpora/_*

# ---- Claude Code internal files ----
.claude/