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

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

# Externally scraped source data: read-only, never published
uk_scrap_data/
spanish_scrap_data/

# Corpus data copied from legal-rag-router: never committed (except the licence manifest)
data/*
!data/MANIFEST.json

# Raw run output (summaries are committed under docs/)
results/raw/

# Point-in-time CLML versions for the anchor batteries (official documents, never committed)
anchors_xml/

# Local LLM router key (never committed)
.router_key

# Run logs and stderr captures
results/*.log
results/*.err

# Third-party answers (anonymised) from legal-rag-audit live runs: local only, never committed
external/

# Grid blind review: the sheet quotes full statute text; the key would unblind it
results/grid/review_sheet.md
results/grid/review_key.json

# stop 29 raw replay: prompt token ids encode statute text from data/ (arms.jsonl is the kept copy)
results/grid/replay/sglang.jsonl

# Stop 36 blind review: the sheet quotes full statute text; the key would unblind it (its hash is in GRID.md)
results/grid/rollback/sheet.md
results/grid/rollback/key.json

# Stop 37 grading: the key would unblind your grades (its hash is in GRID.md)
results/software/review/key.json

# Stop 41 pilot: the stored prompts quote full statute text from data/ (pilot-facts.jsonl is the kept copy)
results/normalise/gemini-3.8-flash-high/pilot_*

# Stop 42: judge prompts and score inputs quote full statute text from data/ (labels/ and scores/ are the kept copy)
results/auditor_judge/pilot/

# Stop 43 fresh test: answers and key would unblind the sheet; the sheet quotes full statute text (seal.json keeps their sha256)
results/fresh/answers.jsonl
results/fresh/key.json
results/fresh/sheet.md
# Stop 56, the second fresh test: same rule
results/fresh2/answers.jsonl
results/fresh2/key.json
results/fresh2/sheet.md
results/fresh2/questions.jsonl
# Stop 57: the same questions answered by Qwen 27B
results/fresh2-q27/answers.jsonl
results/fresh2-q27/key.json
results/fresh2-q27/sheet.md
results/fresh2-q27/leftover.md
# Stop 59: the same questions answered inside the loop (traces hold the sentences and injected passages)
results/fresh2-live/answers.jsonl
results/fresh2-live/key.json
results/fresh2-live/sheet.md
results/fresh2-live/leftover.md
results/fresh2-live/traces.jsonl
# Stop 65: the same, with the short reply
results/fresh2-short-live/answers.jsonl
results/fresh2-short-live/key.json
results/fresh2-short-live/sheet.md
results/fresh2-short-live/leftover.md
results/fresh2-short-live/traces.jsonl
results/distill/*.lock
results/distill/*.tmp
results/distill/pool.jsonl
results/distill/pool_statutes.jsonl
results/distill/pages/
results/distill/questions.jsonl
results/distill/answers.jsonl
results/distill/units.jsonl
results/distill/train.jsonl
results/distill/validation.jsonl
# Stop 63: the students' training examples (the prompts quote statute text)
results/distill/students/train.jsonl
results/distill/students/validation.jsonl
# Stop 64: the second pool, same rule as the first (sources, questions, answers and clauses stay local)
results/distill/pool2/

# Stops 48 and 49: probe runs are not results
results/awareness/probe/

# Trained judge adapters brought home from Modal (stops 63 and 64); weights are not kept in git
artefacts/

# Stop 66: lock and temp files of the decision APIs ledger
results/decisions/*.lock
results/decisions/*.tmp
