# ─── Secrets ────────────────────────────────────────────────────────────────
.env
.env.*
!.env.example
*-service-account*.json
gcp-credentials*.json

# ─── Design scratch (never committed) ───────────────────────────────────────
# Feature-exploration write-ups: thinking-in-progress, superseded as soon as the
# decision lands in DESIGN.md / docs/. Keeping them out of git stops stale
# analysis being mistaken for the current design.
feature_explorations/

# ─── Reference material (never committed) ───────────────────────────────────
# Third-party images used only as visual reference while building the
# procedural equivalents. Not ours to redistribute, and not needed to build.
templates/stamps/

# ─── Generated artefacts ────────────────────────────────────────────────────
out/
catalog/
*.parquet
*.jsonl
*.jsonl.gz

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

# ─── Tooling / OS ───────────────────────────────────────────────────────────
.DS_Store
.idea/
.vscode/

# Belt-and-suspenders: ignore PDFs anywhere by default. The original reason was
# the source templates, which carried real personal data and have since been
# removed from the repo — but the blanket rule stays, so a stray real-world PDF
# dropped anywhere in the tree can never be committed by accident.
# Case-insensitive matching is on by default on macOS but NOT on Linux, so the
# explicit glob protects a Linux clone too.
*.pdf
*.Pdf
*.PDF

# ...with one deliberate exception: samples/ holds generated showcase documents.
# They are synthetic end to end — procedural catalogue data, no personal data —
# and are committed so the rendering can be reviewed without running a job.
!samples/**/*.pdf
!samples/**/*.PDF

# Real run configurations. `run.example.yaml` is the committed template; every
# other run.yaml is one operator's actual run — project ids, bucket names, doc
# counts and secret *names* — which is noise in review at best and a leak at
# worst. Copy the example, never commit the copy.
run.yaml
run.*.yaml
!run.example.yaml

# mkdocs build output for the docs site
site-docs/site/
