# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
build/
dist/
*.egg-info/
*.egg

# Virtual environments
.venv/
venv/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo

# Testing
.pytest_cache/
.coverage
htmlcov/
.mypy_cache/
.ruff_cache/

# MkDocs
site/

# OS files
.DS_Store
Thumbs.db

# GeoCase storage cache
.geocase_cache/

# Benchmark runs (Plan 15)
#
# results/runs/** is deliberately NOT ignored: the committed run records are
# the deliverable, and the pin test re-grades the committed modules to prove
# the oracles have not drifted. A benchmark whose results are not in version
# control is not reproducible.
#
# Ignored here is only the byproduct of grading and of driving agents:
results/runs/**/__pycache__/
results/**/.ipynb_checkpoints/
# Manual-protocol agent workdirs (`manual prepare --out DIR`): a sandbox venv
# plus the agents' own scratch files and a local manifest. Nothing here is a
# deliverable — `manual ingest` copies the modules that matter into
# results/runs/. Scoped to these names rather than a bare `scratch_*` or
# `manifest.json` glob, which would collide with the catalog's own manifests.
agentlab/
agentlab*/

# Plan 17: local operator state for the per-day OpenRouter request quota.
.geocase_quota.json

geocase_validate/
.agentbus/
.claude/settings.local.json
