# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/
# Per-framework test venvs provisioned by scripts/setup-test-venvs.sh (F-CI-001
# regress-harness hole). Heavy, machine-local, never committed.
.venv-*/
tests/bucket-b/.venv-*/

# UV
.uv/

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

# OS
.DS_Store
Thumbs.db

# Testing
.pytest_cache/
.coverage
htmlcov/
.tox/
.nox/
.mutmut-cache

# Type checking
.mypy_cache/
.dmypy.json
dmypy.json

# Rust
target/

# cargo-fuzz generated inputs/crashes (regenerable, ~327MB; commit only fuzz_targets/ + Cargo.*)
packages/rust/crates/risicare-parser/fuzz/corpus/
packages/rust/crates/risicare-parser/fuzz/artifacts/

# Node (for dashboard)
node_modules/
.next/
out/

# Unignore dashboard src/lib (it's source code, not Python build artifacts)
!packages/dashboard/src/lib/

# Environment
.env
.env.*
*.local.env

# Logs
*.log
logs/

# Temporary
tmp/
temp/
*.tmp

# Claude Code (local config)
.claude/

# Research (local docs)
research/

# TypeScript build cache
*.tsbuildinfo

# Stale sub-workspace lock (root uv.lock is authoritative)
packages/uv.lock
RESUME_CONTEXT.md
benchmark-source.zip

# Benchmark source archive
docs/JS_SDK_AUDIT_REPORT.md

# Local Claude MCP config (user-specific; do not commit)
.mcp.json

# Benchmark LLM-response cache (transient, large, can be regenerated)
examples/projects/*/data/cached/

# Untracked SDK test pending rewrite to match merged CON-247 fix.
# (Current client.py uses logger.warning; the test was drafted against an
# earlier print-to-stderr design. Reconcile in a follow-up Linear ticket
# before committing this test.)
packages/risicare-sdk/tests/test_fixruntime_init_failure.py

# W35/W35b LAB SCRATCH — these hold LIVE SECRETS and must never be committed.
# .w35b/labkey.txt is a working rsk- API key; .w35b/env.backup.pre-w35b is a full
# copy of .env; .w35b/evidence/*.jsonl is a 7.3 MB export of real span payloads.
# Both directories showed as plain untracked (`?? .w35b/`), so a `git add -A`
# would have staged all of it. Added 2026-08-18 (W35b).
.w35/
.w35b/

# ── W36/session-1a: LAB + BUILD SCRATCH that showed as plain untracked ──────────
# Same hazard W35b's block above was written for: `git add -A` would sweep these in.
# None of them is tracked today and none is a deliverable.
#   .w35-rollback-images.txt   — an ephemeral image:sha rollback record from W35's
#                                deploy; the images are local to one box.
#   *.tgz under the JS SDK     — `npm pack` output (844 KB). No .tgz has ever been
#                                tracked in this repo.
#   tests/bucket-b/mnt/        — a stray copy of harness OUTPUT trees
#                                (mnt/user-data/outputs/...), not source.
#   tests/bucket-b/package.json, requirements.txt
#                              — Bucket-A scaffolding still carrying placeholders
#                                ("REPLACE_WITH_PUBLISHED_PYPI_NAME"); no sibling
#                                package.json/requirements.txt is tracked there.
.w35-rollback-images.txt
packages/risicare-sdk-js/*.tgz
tests/bucket-b/mnt/
tests/bucket-b/package.json
tests/bucket-b/requirements.txt

# Session P: rollback pin state written by scripts/deploy-build.sh (host-local, never committed)
.deploy-state/
