# macOS
.DS_Store
._*
.Spotlight-V100
.Trashes
.claude

tests/fixtures/extract/*-extracted.xlsx

# Java / Maven
target/
*.class
*.jar
*.war
*.ear
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar

# Python
__pycache__/
.pytest_cache/
.coverage
*.py[cod]
*$py.class

# Per-run OOS test report (regenerated each pytest invocation).
tests/oos/test_report.json
*.egg-info/
dist/
# build/ — Python wheel build artifacts (top-level convention). Anchored to the
# repo root so it does NOT also match dev/build/ (handled separately below).
/build/
# dev/build/ — UofA pipeline outputs. Per-run/regenerable trees stay ignored,
# EXCEPT the Phase 2/2.5/3 adversarial artifacts (dev/build/adversarial/ +
# dev/build/phase2_5/), which are force-tracked — large/binary files via Git
# LFS (see .gitattributes) — to preserve the non-reproducible LLM corpus +
# judge outputs as a defense audit trail. Decision: 2026-06-09. Other
# dev/build/* trees (airfrans, …) remain ignored as regenerable.
dev/build/*
!dev/build/adversarial/
!dev/build/phase2_5/
# Never OS/editor/Python junk, even inside the tracked trees.
dev/build/**/.DS_Store
dev/build/**/._*
dev/build/**/__pycache__/
dev/build/**/*.py[cod]
*.egg
.eggs/
*.whl
.venv/
venv/
env/

# IDE
.idea/
*.iml
.vscode/
*.swp
*.swo
*~
.project
.classpath
.settings/

# Keys (private keys must NOT be committed)
keys/*.pem
!keys/*.pub

# OS
Thumbs.db
ehthumbs.db
Desktop.ini

# Logs
*.log
hs_err_pid*

# Temp
*.tmp
*.bak
*.orig

# Generated test fixtures (regenerated at test time from generator.py)
tests/fixtures/import/e2e-*.xlsx

# Extracted xlsx files from score_extraction_batch.py runs (regenerated each
# run; tied to a specific (model, prompt-version, timestamp), so committing
# them couples a fixture to one run).
tests/fixtures/extract_corpus/**/extracted.xlsx

# Eval run artifacts (per-run JSON + markdown outputs)
runs/

# Wheel-bundled artifacts (populated by hatch_build.py at wheel build time).
# .jar is already covered by *.jar above; listed explicitly so the location
# is documented and so the .gitkeep placeholder is preserved.
src/uofa_cli/_engine/*.jar
!src/uofa_cli/_engine/.gitkeep
# JRE tree downloaded by hatch_build.py when UOFA_BUNDLE_PLATFORM is set.
src/uofa_cli/_runtime/jre/
src/uofa_cli/_runtime/PLATFORM
src/uofa_cli/_runtime/JRE_VERSION

# Phase 2/2.5/3 run logs are tracked artifacts — re-included AFTER the global
# *.log rule above so they win (preserve the run audit trail). Decision 2026-06-09.
!dev/build/adversarial/**/*.log
!dev/build/phase2_5/**/*.log
