# 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

# Virtualenv
.venv/
venv/
env/
ENV/

# uv
.uv/

# pytest
.pytest_cache/
.coverage
htmlcov/
.tox/
.cache/

# mypy
.mypy_cache/
.dmypy.json

# Ruff
.ruff_cache/

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

# OS
Thumbs.db

# Local agent / editor tooling (machine-specific, not for the public repo)
.claude/
CLAUDE.md

# Task/todo scratch — never published
todos/
.todos/
TODO/
todo/

# Build metadata
*.egg-info/

# dsoxlab — état runtime local (jamais versionné)
.dsoxlab-context.json
.dsoxlab.db

# Terraform validate artefacts dans les templates packagés (non committables)
src/dsoxlab/templates/terraform/*/.terraform/
src/dsoxlab/templates/terraform/*/.terraform.lock.hcl

# Fuzzing — reproducteurs écrits par libFuzzer à la racine en cas de crash.
# Les graines, elles, sont versionnées sous fuzz/corpus/.
crash-*
leak-*
timeout-*

# Clés SSH : ce dépôt est celui de l'outil, il n'a aucune raison d'en porter.
# `dsoxlab instructor bootstrap` refuse désormais d'en générer hors d'un dépôt
# de labs, et le hook `detect-private-key` refuse de les committer. Cette
# troisième ligne couvre ce que les deux autres laissent passer : un fichier
# déposé par un autre chemin, ou un commit forcé en `--no-verify`.
ssh/
*.pem
id_ed25519
id_rsa
