# Python
__pycache__/
*.py[cod]
*.egg-info/
dist/
build/
.venv/
venv/
.pytest_cache/
.ruff_cache/

# Data & outputs (never commit datasets)
*.gpkg
*.gpkg-journal
*.shp
*.shx
*.dbf
*.prj
*.tif
*.tiff
*.parquet
*.provenance.json
data/
# ...except the vendored spec artefacts: test dependencies, not datasets. This
# has now bitten twice in the same way -- the validator was silently ignored
# once, and on 2026-08-26 the schema next to it went the same way, because the
# exception was a filename rather than a rule. Both times the conformance test
# passed locally and CI could not find the file. The comment did not prevent the
# second one, so `test_showcase.py` now checks that everything under
# `tests/data/` is tracked: a rule that asserts a property without checking it
# is worse than no rule.
!tests/data/
tests/data/*
!tests/data/manifest_spec_validator.py
!tests/data/manifest-v1.schema.json
# The discovery benchmark: 95 queries written by a second model from work
# scenarios, never from this catalog. It is tracked BECAUSE it is a dataset — an
# evaluation set nobody can inspect is a claim, not a measurement.
!tests/data/discovery_queries.json

# Scratch databases: probing the DuckDB sandbox (ATTACH, COPY) drops these in
# the repo root, and one of them reached a public commit before we noticed.
*.db
*.duckdb
*.wal

# OS / editors
.DS_Store
Thumbs.db
.vscode/
.idea/

# Notebook gallery runtime data
examples/data/

# ...but the gallery's one real-world input is versioned on purpose: a
# showcase built on synthetic terrain does not show what the tools do.
!examples/fixtures/
!examples/fixtures/*.tif
uv.lock

# The site is generated: `python site/build.py dist` rebuilds it from a real run.
site/generated/

# Written by `benchmarks/dashboard.py` and by MAPSMITH_DISCOVERY_LOG:
# both hold the queries somebody typed, so they stay out of the repository.
dashboard.html
*.jsonl
