.env
.venv/
__pycache__/
*.pyc
.pytest_cache/
.ruff_cache/
eval/results/*
!eval/results/.gitkeep
# The documented V1 acceptance run. Narrow negation on purpose — ad-hoc result files stay out.
!eval/results/2026-08-19-defaults-savings.json
!eval/results/2026-08-19-llm-lit-search.json

.DS_Store

# Scan outputs — runs are local artefacts, not repo content.
# Excluded per level rather than as `research/`: git will not descend into an excluded directory,
# so a negation inside one never fires. Narrow, the same way eval/results keeps only its
# documented acceptance runs — here, the two transport runs behind the v0.4.0 tag.
research/*
!research/scans/
research/scans/*
!research/scans/2026-08-20-agentic-lit-search-mcp-transport/
!research/scans/2026-08-20-agentic-lit-search-orientation-mcp-transport/

# Experiment evidence — the measured arcs behind the phase reports. Kept rather than
# regenerated: the stages under study are non-deterministic, so a lost run cannot be
# re-measured, only re-sampled, and every gate in the reports is scored against these
# exact files. Same per-level negation as scans; the `.venv/` and `__pycache__/` rules
# above still bind inside these trees, which is what keeps them to artefacts.
!research/experiments/
research/experiments/*
!research/experiments/README.md
!research/experiments/phase1-stateless/
!research/experiments/phase11-golden/
!research/experiments/phase12-selection/
!research/experiments/phase14/

# Built skill package — a build artefact, rebuilt from skills/research-scan/
dist/

# Per-machine agent configuration: local permission decisions and MCP toggles, never shared and
# never shipped. Ignored here rather than only in a contributor's global gitignore, so the sdist
# excludes it on every machine.
.claude/
