# Python
__pycache__/
*.py[cod]
*.pyo
*.pyd
.Python
*.egg
*.egg-info/
dist/
build/
.eggs/
.venv/
venv/
env/
*.whl

# Tests / Coverage
.pytest_cache/
.coverage
.coverage.*
htmlcov/
.tox/
.hypothesis/
.ruff_cache/

# Ad-hoc test logs (generated by local pytest runs)
.pytest_*.log
.ws_last.log
.pres_log.log
.rag_log.log
.n7_log.log
.n11_log.log
.n15_log.log
.sq_log.log
.lsh_log.log
.vlm_log.log
.dnp3_log.log
.goose_log.log
.ec_log.log
.vc_log.log
.api_log.log
.e2e_log.log
.rotate-signal

# Type checking
.mypy_cache/
.pytype/

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

# Security: private keys / secrets must never be committed
certs/*.key
certs/*.pem
nodes/**/certs/*.key
nodes/**/certs/*.pem
.env
.env.*
*.key.hex
*.key.bin
audit*.jsonl
nonces.sqlite
timeline.sqlite
unit_spaces/

# Per-instance config (local node identity, peer trust list, overrides).
# Must not be committed — each deployment owns its own copy.
config/node.key.bin
config/node_identity.json
config/trusted_peers.json
config/node_overrides.json
# Per-node fixtures (used in local docker-compose poc, not for distribution)
nodes/**/config/node.key.bin
nodes/**/config/trusted_peers.json
nodes/**/config/node_identity.json
nodes/**/config/node_overrides.json

# Ad-hoc artifacts from running examples / dev scripts
*.npz
*.sqlite
out/
tmp/

# Rust build artifacts (Rust extension is opt-in, wheels not committed)
rust_ext/target/
rust_ext/Cargo.lock

# OS
.DS_Store
Thumbs.db
