# Rust
/target/
dylints/**/target/
**/*.rs.bk
Cargo.lock
!Cargo.lock

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

# CI staging scratch (ci/bundle.py, ci/xbuild.py). Deliberately not `build/`:
# `build` is a tracked shell script at the repo root.
.ci-build/

# Virtual environments
.venv/
venv/

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

# OS
.DS_Store
Thumbs.db

# Testing / Coverage
.pytest_cache/
.ruff_cache/
/tests/artifacts/
htmlcov/
.coverage
coverage-*.xml
*.lcov

# Build artifacts
*.so
*.dll
*.dylib
*.pyd

# Temp
.tmp/
.tmplog/
*.log
.extern-repos/

# clud project config/runtime state: track settings.json, ignore runtime
# state (loop/cache, DONE/BLOCKED markers, local overrides).
.clud/*
!.clud/
!.clud/settings.json
.clud/settings.local.json

# Claude Code: ignore ephemeral subdirectories by default, but keep files at
# the .claude root visible. Project config directories are checked in below.
.claude/*/
!.claude/settings.json
!.claude/hooks/
!.claude/commands/
!.claude/agents/
!.claude/skills/
.claude/settings.local.json
.claude/*.lock
.claude/*.patch
# #407: per-checkout test-runtime histogram. Covered by `.clud/*` above;
# named explicitly so its purpose is greppable.
.clud/test-runtime/
.clud/loop
