# Codebase intelligence (auto-generated)
.planning/

# Python
__pycache__/
*.py[cod]
*.egg-info/
dist/
build/
.eggs/
*.egg

# Virtual environments
.venv/
venv/
env/

# The repo pins direct dependencies in pyproject.toml, so it does not
# publish a transitive lock file.
uv.lock

# IDE
.vscode/
.idea/
*.swp
*.swo

# Environment
.env

# Data stores
neo4j_data/
chroma_data/
# Default local databases the vector-store adapters create under the cwd.
.chroma/
.lancedb/

# Node / Frontend
node_modules/
.next/
web/.next/
web/node_modules/

# OS
.DS_Store
Thumbs.db

# Test / Coverage
.pytest_cache/
htmlcov/
.coverage

# Ruff
.ruff_cache/

# Raw datasets (downloaded, not committed)
datasets/*/raw/*.html
datasets/*/raw/*.rst
datasets/*/raw/*.json
datasets/*/raw/*.txt
!datasets/*/raw/.gitkeep
!datasets/nist-800-171-r3/raw/nist-sp-800-171r3.html

# Processed data (generated, not committed)
datasets/*/processed/*.jsonl
!datasets/*/processed/.gitkeep
!datasets/nist-800-171-r3/processed/documents.jsonl

# Other generated processed files (bm25 indexes, etc.), except the tracked
# ground-truth trees. Run `git ls-files 'datasets/*/processed/*.json'` before
# adding a new tracked file here, so it does not get ignored by accident.
datasets/*/processed/*.json
!datasets/aws-compute/processed/pageindex_tree.json

# Generated Q&A pairs
datasets/*/qa-pairs/

# Benchmark results (user-generated results are not committed)
results/*.json
# `kb-arena report` writes report.md beside summary.json, and only the
# JSON was ignored, so an ordinary report left the tree dirty.
results/report.md
results/run_*/
# One named run is committed on purpose, as the reproducible example a reader
# checks instead of trusting. Everything else a user generates stays ignored.
!results/run_422209dd/
!results/run_422209dd/**
!results/aws-compute_*.json
!results/.gitkeep

# Internal project files
CLAUDE.md
BUILD_PROMPT.md
PLAN.md

# Claude Code
.claude/

# Embedding cache (generated vectors, never committed)
embedding_cache.sqlite*
