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

# uv / virtualenv
.venv/

# Run artifacts (traces the CLI writes; this project produces no responses/ artifact)
output/
/traces/
*.jsonl
# ...but the eval demo TRANSCRIPTS are source, not a run artifact. `*.jsonl` above is carried from
# the sibling template, where every .jsonl really is a trace; here it silently swallowed the two
# fixtures `demo_taskset` copies at run time. A fresh clone then had no fixtures, so `run demo`
# raised FileNotFoundError, five eval tests failed — including the one asserting these are checked-in
# data — and CI's eval-test job went red, while four docs claimed they were tracked. Found by review.
!eval/ctx_distillery_eval/demo/*.jsonl
# ...and `examples/` is SHIPPED documentation, not a run artifact either. Same trap, second victim:
# `examples/demo-run.jsonl` was added, committed, pushed and merged before anyone noticed that only
# its README had gone in. A trace under `examples/` is there precisely so a reader can run
# `ctx-distillery show` without credentials — it is the one .jsonl in this repo whose whole job is to
# be distributed. `tests/test_examples.py` now fails if it stops being tracked, because "silently
# absent" is exactly how this rule fails both times.
!examples/*.jsonl

# Secrets / local env (only .env.example is tracked)
.env

# The operator's own redaction rules (only redactions.example.json is tracked — copy it and edit).
# A real one names your org's internal credential SHAPES; that is not something to publish.
redactions.json

# macOS
.DS_Store

# Claude Code local overrides (never commit)
.claude/settings.local.json
