Dépannage
Guide de dépannage pour EnforceCore — erreurs courantes, étapes de débogage et FAQ.
Erreurs Courantes
EnforcementViolation / ToolDeniedError
enforcecore.exceptions.ToolDeniedError: Tool 'execute_shell' is denied by policy 'strict'
Cause : L'outil est dans denied_tools ou n'est pas dans allowed_tools.
Résolution :
- Vérifiez votre fichier de politique (section
rules.allowed_tools/rules.denied_tools) - Exécutez
enforcecore dry-run --policy policy.yaml --tool execute_shellpour tester - Vérifiez la priorité deny-sur-allow — un outil dans les deux listes est toujours bloqué
PolicyLoadError
enforcecore.exceptions.PolicyLoadError: Policy file not found: policies/agent.yaml
Résolution : Vérifiez le chemin du fichier. EnforceCore résout les chemins relatifs depuis le répertoire de travail courant. Utilisez des chemins absolus ou ENFORCECORE_DEFAULT_POLICY pour éviter les ambiguïtés.
CostLimitError
enforcecore.exceptions.CostLimitError: Budget exceeded: $5.12 / $5.00
Résolution : Augmentez ENFORCECORE_COST_BUDGET_USD ou le champ resource_limits.max_cost_usd dans votre politique.
ContentViolationError
enforcecore.exceptions.ContentViolationError: Content rule violated: shell_injection
Cause : Les arguments de l'outil contiennent un pattern détecté comme dangereux (injection shell, traversée de chemin, injection SQL ou exécution de code).
Résolution : Vérifiez les entrées de votre outil. Si c'est un faux positif, examinez les patterns avec enforcecore inspect policy.yaml.
RateLimitError
enforcecore.exceptions.RateLimitError: Rate limit exceeded for tool 'search_web': 11/10 in 60s window
Résolution : Ajustez rate_limits.global_rpm ou les limites par outil dans votre politique.
AuditError — Échec de Vérification
enforcecore.exceptions.AuditError: Chain verification failed at entry 42
Cause : La piste d'audit a été altérée (entrée modifiée, supprimée ou réordonnée).
Résolution :
- Exécutez
enforcecore verify audit.jsonlpour identifier les entrées corrompues - Si vous utilisez
witness, exécutezverify_with_witness()pour identifier les divergences - Les fichiers d'audit avec
immutable=Truesont protégés au niveau OS
ImmutableError
enforcecore.exceptions.ImmutableError: Failed to set append-only flag: permission denied
Cause : immutable=True est activé mais le processus n'a pas les permissions requises.
Résolution :
- Linux : Ajoutez
CAP_LINUX_IMMUTABLEau processus ou au conteneur Docker (--cap-add LINUX_IMMUTABLE) - macOS : La commande
chflags uappendfonctionne au niveau utilisateur — vérifiez les permissions du fichier - Windows : Non supporté —
immutable=Trueémet un avertissement et continue
Étapes de Débogage
1. Valider votre politique
enforcecore validate policies/strict.yaml
Vérifie la syntaxe YAML, la conformité au schéma Pydantic et la cohérence des règles.
2. Dry-run d'un outil
enforcecore dry-run --policy policy.yaml --tool search_web
Simule l'enforcement sans exécuter l'appel. Affiche la décision et les raisons.
3. Inspecter les règles chargées
enforcecore inspect policies/strict.yaml
Affiche les outils autorisés/refusés, les catégories PII actives, les règles de contenu et les limites.
4. Vérifier la piste d'audit
enforcecore verify audit.jsonl
Vérifie l'intégrité de la chaîne Merkle SHA-256.
5. Activer les logs de débogage
ENFORCECORE_LOG_LEVEL=DEBUG python your_agent.py
Active les logs structurés détaillés pour chaque étape du pipeline d'enforcement.
6. Vérifier les threads orphelins
guard = enforcer.guard
print(guard.leaked_thread_count) # 0 = sain, > 0 = fuites détectées
FAQ
EnforceCore remplace-t-il le sandboxing conteneur ?
Non. EnforceCore opère à la couche sémantique applicative (L3) — il comprend les appels d'outils, les données personnelles et les budgets de coût. Le sandboxing conteneur (Docker, gVisor), la sécurité OS (seccomp, AppArmor, SELinux) et le sandboxing réseau opèrent à L1–L2. Utilisez les deux ensemble pour une défense en profondeur. Voir le tableau de défense en profondeur.
Comment fonctionne la priorité deny-sur-allow ?
Si un outil apparaît dans denied_tools ET allowed_tools, il est toujours bloqué. C'est l'invariant formel P4. Voir les Invariants Formels.
L'audit est-il vraiment inviolable ?
La chaîne Merkle SHA-256 détecte toute modification. Pour une protection supplémentaire :
immutable=Trueactive la protection append-only au niveau OS- Les backends witness publient les hashes vers un emplacement séparé pour la détection de reconstruction de chaîne
- Voir la section Auditeur Merkle pour les détails.
Quel est le surcoût de performance ?
~0,056 ms (P50) par appel, négligeable par rapport à la latence des outils (100 ms–10 s). Voir la Suite d'Évaluation pour les benchmarks par composant.
EnforceCore fonctionne-t-il avec mon framework ?
Oui — il fonctionne avec tout code Python. Des adaptateurs natifs existent pour LangGraph, CrewAI et AutoGen. Voir les Intégrations.
Comment configurer la rédaction PII ?
Voir la section Rédacteur PII pour les catégories, stratégies et la protection unicode.
Comment configurer les variables d'environnement ?
Les 18 variables sont documentées dans la Référence API.
Références Rapides
| Besoin | Voir |
|---|---|
| Comprendre le pipeline d'enforcement | Architecture |
| Toutes les API et env vars | Référence API |
| Benchmarks et tests adversariaux | Suite d'Évaluation |
| Tutoriel pas à pas | Démarrage Rapide |
| Historique des versions | Feuille de Route |
| Adaptateurs de framework | Intégrations |