__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
dist/
*.egg-info/
*.egg
.pytest_cache/
.coverage
coverage.xml
htmlcov/
.mypy_cache/
.ruff_cache/
.venv/
venv/
env/
.env
.envrc
.tox/

node_modules/
.next/
out/
.turbo/
.cache/
*.tsbuildinfo

assets/*.mp4
assets/*.webm
assets/*.gif
!assets/.gitkeep

eval/results/
eval/cache/
.DS_Store
.vscode/
.idea/

*.log

# Eval pipeline intermediates (regenerated by `python -m eval.run_pipeline`)
eval/_artifacts/*
!eval/_artifacts/attacks.jsonl
!eval/_artifacts/novel_attacks_crewai.jsonl

# LoRA judge adapter binaries — ship via Hugging Face
# (`bryteai/toolwall-judge-v0.1`), not git. Re-train recipe is committed.
models/judge-v0.1/*.safetensors
models/judge-v0.1/tokenizer.json
models/judge-v0.1/merges.txt
models/judge-v0.1/vocab.json
models/judge-v0.1/added_tokens.json

# Local development notes — never commit
CLAUDE.md
.private-internal/

# internal / local only (v0.2)
CLAUDE.md
.private-internal/
.toolwall-audit.log
.v02_backup/
.hypothesis/
bench/loaders/_upstream/
bench/build_artifacts/heldout_v0_2/enron_requests.jsonl
training/_corpus_v0_2_3/
training/_corpus_v0_2_1/
training/_corpus_v0_2_2/
# v0.2 judge weights ship via Hugging Face (bryteai/toolwall-judge-v0.2), not git
models/judge-v0.2*/
models/_candidates/
assets/demo-thumbnails.png
training/_corpus_v0_3/
models/judge-v0.3*/
