# --- 1. PYTHON: BYTECODE, BUILD, PACKAGING ---
# Compiled bytecode and packaging output — all regenerated by the build, never source.
__pycache__/
*.py[cod]
*.egg-info/
.eggs/
build/
dist/

# --- 2. VIRTUAL ENVIRONMENTS (uv) ---
# `uv sync` recreates these. uv.lock IS committed, for reproducible builds.
.venv/
venv/
.uv/

# --- 3. TOOLING CACHES ---
# ruff, mypy, pytest, hypothesis, coverage — local speed-ups, never useful in Git.
.mypy_cache/
.ruff_cache/
.pytest_cache/
.hypothesis/
.coverage
htmlcov/

# --- 4. REAL DMARC REPORTS AND SAVED MAIL ---
# Real reports carry source IPs and domains: never commit them. Providers send them as .zip
# (Google), .gz or plain .xml, so all three are ignored, not only the double extensions. Test and
# README samples are synthetic and live under tests/ (the negations below keep them tracked).
*.xml
*.zip
*.gz
/reports/
# Exception: synthetic sample reports under tests/ are committed on purpose.
!tests/**/*.xml
# Exception: a synthetic zipped report, the way Google sends them.
!tests/**/*.zip
# Exception: a synthetic gzipped report.
!tests/**/*.gz
# `mailvigil fetch` saves the report messages as .eml (spec 009), and a mailbox export is .mbox: both
# carry sender addresses, subjects and the reports themselves, so a fetch folder inside the
# repository cannot be committed by accident.
*.eml
*.mbox
# Exception: synthetic messages under tests/ are committed on purpose.
!tests/**/*.eml
!tests/**/*.mbox

# --- 5. SECRETS AND LOCAL CONFIG ---
# Machine-specific overrides. There is no committed .env; the tool reads a TOML config.
.env
mailvigil.local.toml

# --- 6. EDITOR AND OS ---
.idea/
.vscode/
# Personal Claude Code overrides; the shared .claude/settings.json and hooks ARE committed.
.claude/settings.local.json
.DS_Store
Thumbs.db

# --- 7. LOCAL PLANNING / SCRATCH NOTES ---
# Superseded by specs/ once a feature is designed; never part of history.
/*.plan.md
.plans/
