⚠️ FAQ Pièges & Erreurs Connues

6 mois de sessions · Toutes les régressions graves · Techniques avancées · WEVADS + Arsenal + WEVIA + Ethica + Infrastructure
47
Pièges documentés
23+
Incidents réels
40+
Règles anti-régression
15
Techniques avancées

Sommaire — 12 catégories

💀

SED & HEREDOC — Le piège mortel n°1

CRITICAL · 5+ sessions impactées
!
HEREDOC via Sentinel/CX exec = CORRUPTION GARANTIE
sentinelcx-proxybashphp

Le terminal interprète les `backticks`, les $variables, et les caractères spéciaux AVANT que le heredoc ne soit écrit sur le disque.

Résultat : fichiers corrompus, syntaxe PHP/JS cassée, regex détruites. Claude 2, 3, 4, 5+ ont tous été victimes de ce piège.

Exemples réels :

📛 data-manager API corrompu par heredoc (Claude 2)

📛 chatbot-widget.php — regex backtick /`([^`]+)`/g impossible à écrire par sed/heredoc. 6+ tentatives échouées sur 1 session complète

📛 offer-import.php corrompu

📛 registry-test.sh — les \$ échappés persistent après sed, nécessitant perl -pi -e

✅ MÉTHODE SÛRE : cat >> fichier << 'BLOC' (quotes simples autour du délimiteur)
✅ MÉTHODE SÛRE : head/tail reconstruction
head -141 fichier.php > /tmp/fix.php
echo '    ligne corrigée' >> /tmp/fix.php
tail -n +143 fichier.php >> /tmp/fix.php
cp /tmp/fix.php fichier.php
✅ MÉTHODE SÛRE : Python str_replace via script temporaire
python3 -c "
c=open('/path/file.php').read()
c=c.replace('old','new')
open('/path/file.php','w').write(c)
"
!
sed -i avec patterns complexes sur HTML/JS = DANGER
sedhtmljavascript

sed ne gère pas : multi-lignes, quotes imbriquées, regex avec backticks, HTML avec attributs. Chaque tentative de "fix" empire le fichier.

📛 menu.html : 4+ tentatives de sed → doublons, sections supprimées, structure HTML cassée

📛 chatbot-widget.php ligne 142 : 6 tentatives sed/heredoc/echo pour fixer une regex backtick → aucune n'a marché

✅ Pour fichiers complexes : écrire le contenu complet dans /tmp puis cp vers destination
✅ Pour éditions chirurgicales : Python open().read().replace().write()
sed avec $ dans les patterns — l'échappement infini
sedbashregex

Dans registry-test.sh, les \$ persistaient après chaque tentative de sed. La solution finale : perl -pi -e 's/\\\\\\$/\\$/g'

✅ Quand sed ne marche pas après 2 tentatives → STOP, utiliser perl ou Python
🔌

CX Proxy — Limites et contournements

HIGH
!
Max 4500 bytes par chunk — dépassement = troncature silencieuse
cx-proxydeploy

Le CX proxy (weval-consulting.com/api/cx, key=WEVADS2026) tronque silencieusement les payloads > 4500 bytes. Le fichier semble déployé mais est incomplet.

✅ MÉTHODE : Split en chunks base64 de 4500 bytes, encoder, envoyer un par un, reconstruire côté serveur
split -b 4500 fichier.html /tmp/chunk-
for f in /tmp/chunk-*; do
  C=$(base64 -w0 "$f")
  # envoyer via CX...
done
Sentinel exec via CX ne persiste pas fiablement les écritures Python
sentinelpythonécriture

Les commandes Python envoyées via CX proxy pour écrire des fichiers échouent parfois silencieusement. Le fichier existe mais est vide ou tronqué.

✅ Utiliser base64 -d CLI au lieu de Python pour écrire les fichiers
✅ Pour fichiers complexes : encoder en hex, envoyer, décoder avec xxd -r -p
Claude container IP bloquée par S95
réseaufirewall

L'IP du container Claude est bloquée par le firewall S95. Toute exécution distante doit passer par la machine locale de Yacine ou par Sentinel whitelisté.

Ne JAMAIS tenter SSH direct depuis le container Claude vers S95
PowerShell et guillemets — les commandes sed cassent
powershellwindowsssh

Les commandes SSH depuis PowerShell Windows interprètent les guillemets différemment. sed -i "s/old/new/" via SSH depuis PowerShell = résultat imprévisible.

📛 Fix l99-chat.php depuis PowerShell → bash: line 1: llama-3.3-70b/m=: No such file or directory

✅ Toujours faire les modifications via CX proxy ou WEVIA Master, pas depuis PowerShell
🛡️

HTML-Guardian — L'écraseur silencieux

CRITICAL · 3+ incidents
!
html-guardian cron écrase les fixes toutes les 10 minutes
cronguardiangold

Le cron html-guardian tourne toutes les 10 minutes, compare les fichiers avec les GOLD, et restaure automatiquement. Si tu fais un fix et que le GOLD est l'ancien fichier → ton fix est écrasé en 10 minutes.

📛 youtube-auth.php fixé → écrasé par guardian 10 min après

📛 arsenal-auth.php fixé → écrasé par guardian

📛 Gold files dataient du 31 jan (AVANT rollback) → protégeaient l'état CASSÉ

TOUJOURS vérifier que le guardian est en mode ALERTE ONLY avant de modifier un fichier
✅ Après un fix validé : mettre à jour le fichier GOLD correspondant
cp fichier_fixé.php /opt/wevads/vault/fichier.php.gold
md5sum fichier_fixé.php >> /opt/wevads/vault/checksums.md5
✅ Pour bloquer temporairement : crontab -l | grep -v guardian | crontab - (puis réactiver)
5 couches de protection — si tu ne mets pas à jour les GOLD, tes fixes sont perdus
vaultsentinelguardian

Layer 1: Deploy Validator (pre-deploy) · Layer 2: HTML Guardian (*/10min) · Layer 3: Sentinel V5 (*/30min) · Layer 4: Vault Guard (*/6h) · Layer 5: 743 gold files + checksums MD5

✅ Workflow obligatoire après fix : fix → test → update gold → update checksum → git commit
📨

PMTA — Pièges 0.0.0.0, IP privée, configs

CRITICAL · Infrastructure sacrée
!
0.0.0.0 NE FONCTIONNE PAS en PMTA 4.5r8 → IP privée obligatoire
pmtahuaweinat

Sur Huawei Cloud avec NAT, l'IP publique n'est pas bindée localement. Les VMTAs avec smtp-source-host 0.0.0.0 crashent PMTA au restart.

📛 Template VMTA corrigé avec 0.0.0.0 sur 8 fichiers → PMTA refuse de démarrer sur SER_9

📛 pmta --config-check n'existe pas dans cette version → erreurs invisibles

PMTA 4.5r8 n'a pas de commande de validation de config. Les erreurs sont silencieuses jusqu'au crash.
✅ TOUJOURS utiliser l'IP privée explicite (192.168.0.x) dans smtp-source-host
✅ Les 4 ECS Huawei sont SACRÉS — IDs 186-189, configs INTOUCHABLES
SER_6: 110.239.84.121 / 192.168.0.11
SER_7: 110.239.65.64 / 192.168.0.55
SER_8: 182.160.55.107 / 192.168.0.38
SER_9: 110.239.86.68 / 192.168.0.241
!
JAMAIS modifier is_installed / pmtahttpd / config
pmtasacred

Le binaire propre est dans /opt/pmta-versions/4_5r8/pmtad. Le proxy Python pmtahttpd tourne sur port 5371 (v5.0b1). Ne JAMAIS toucher ces fichiers.

pmtahttpd = proxy Python custom, pas le vrai daemon PMTA. Le confondre = casser le monitoring
http-access 127.0.0.1 admin = monitoring externe bloqué
pmtamonitoring

Le template d'installation PMTA ne contient que localhost pour l'accès HTTP admin. Tous les nouveaux serveurs sont inaccessibles depuis le monitoring central.

✅ Templates doivent avoir : http-access 0/0 monitor (ou IP WEVADS spécifique)
🔐

SSO / Authentik / Auth — La boucle infernale

CRITICAL · 10+ heures perdues
!
Authentik = SUPPRIMÉ. Auth PHP souverain désormais.
authentikauthsouverain

Avril 2026 : Authentik a été supprimé après des régressions répétées (boucles redirect, callback 400, sessions corrompues, JWT redirect vide). Remplacé par auth PHP simple : /var/www/html/auth/ (login=yacine/Weval@2026, cookie HMAC 30j).

📛 Callback SSO retournait 400 en continu → sessions corrompues

📛 JWT state contenait "redirect":"" → toutes les pages redirigées vers /

📛 Sub_filter JS faisait double redirect (client + nginx) → boucle infinie

📛 @sso_retry redirigeait vers $request_uri = /outpost.goauthentik.io/callback → boucle

📛 10+ heures passées sur 3 sessions à débugger SSO

compose.yml.DISABLED — NE JAMAIS réactiver Authentik. 0 refs authentik dans nginx.
✅ Auth PHP: nginx auth_request /auth/check + @weval_login_redirect. L99-AUTH-v6 52/52
Root cause auth/check : "return 200" au lieu de PHP
nginxauthphp

La route /auth/check retournait un return 200 nginx statique au lieu d'exécuter le PHP qui vérifie le cookie HMAC. Résultat : toutes les pages semblaient non-protégées ou protégées selon la config, mais jamais correctement.

✅ /auth/check doit pointer vers le PHP : fastcgi_pass unix:/run/php/php-fpm.sock
19 pages fantômes — locations nginx qui n'existent plus
nginxcleanup

Après suppression d'Authentik, 19 locations nginx pointaient vers des pages qui n'existaient plus ou vers des callbacks Authentik. Nettoyées dans la session du 8 avril.

✅ GOLD nginx : /etc/nginx/weval-consulting.gold.pre-auth-removal.8avr2026
⚙️

nginx — Pièges routing, sub_filter, chattr

HIGH
!
chattr +i sur nginx config = impossible de modifier sans sudo chattr -i
nginxchattrimmutable

Les fichiers nginx sont marqués immutable (chattr +i) pour anti-régression. Toute tentative de modification échoue silencieusement.

✅ Workflow : sudo chattr -i fichier → modifier → tester → sudo chattr +i fichier
Route /api/weval-ia-full manquante → 404 sur fullscreen chatbot
nginxroutingwevia

📛 "Erreur de réponse" sur le chatbot fullscreen — la route nginx n'existait pas, le backend retournait 404

✅ Toujours vérifier que la route nginx existe AVANT de tester un endpoint
sites-enabled = toujours COPIE, jamais édition directe
nginxbackup
✅ Avant toute modif nginx : cp /etc/nginx/sites-enabled/weval-consulting /etc/nginx/sites-enabled/weval-consulting.bak.$(date +%Y%m%d)
✅ Après modif : nginx -t OBLIGATOIRE avant nginx -s reload

Crontab — L'écrasement total

CRITICAL · 60+ crons perdus 2 fois
!
Un seul crontab -e ou script écrase TOUT le crontab existant
cronbackup

Deux fois en 6 mois, l'intégralité du crontab (60-75 crons de production) a été écrasée par un script qui faisait echo "..." | crontab - au lieu de (crontab -l; echo "...") | crontab -.

📛 Fév 2026 : CRM worker a écrasé 60+ crons avec 5 stubs → warmup, brain, monitoring arrêtés

📛 Restauration du mauvais backup (18 lignes au lieu de 75) → 2ème perte

📛 Jan 2026 : cron même pas installé sur le container → tous les jobs perdus

JAMAIS echo "..." | crontab - → toujours (crontab -l; echo "...") | crontab -
✅ AVANT toute modif crontab : crontab -l > /opt/wevads/crontab-backup-$(date +%Y%m%d-%H%M).txt
✅ Vérifier le nombre de lignes APRÈS : crontab -l | grep -c "^\*\|^[0-9]"
Ethica validator → validator-safe : sed sur crontab peut corrompre
cronethicased

📛 sed sur le crontab pour switcher ethica-validator → ethica-validator-safe a corrompu le crontab → restauration backup nécessaire

✅ Éditer manuellement avec crontab -e ou exporter/modifier/réimporter proprement
🐘

PHP / FPM — Syntaxe, display_errors, timeout

HIGH
display_errors = On → leak d'infos sensibles au client
phpsécurité

WEVIA avait display_errors=On en production → paths serveur, credentials DB, stack traces visibles dans les réponses API.

✅ Toujours display_errors=Off en production. Logs dans error_log.
php -l OBLIGATOIRE après chaque modification PHP
phpsyntaxe

Après édition via CX proxy ou sed, des erreurs de syntaxe PHP passent inaperçues (fichier vide, quote manquante, variable non fermée). La page retourne un 500 silencieux.

✅ Après CHAQUE modif : php -l fichier.php
PHP-FPM max_children 50 → timeout sous charge
php-fpmperformance

Avec 50 max_children, les requêtes concurrentes (surtout avec les LLM qui prennent 15-45s) saturaient PHP-FPM. Augmenté à 100.

✅ Propale/CDC avec 4000 tokens → timeout 60s. Ajuster CURLOPT_TIMEOUT selon le mode
weval-chatbot-api.php = 134KB monolithe — ne JAMAIS réécrire
phpmonolithe

Le backend chatbot fait 134KB avec 751 fonctions. Toute réécriture = régression massive. Interventions chirurgicales ONLY.

✅ str_replace chirurgical dans Python, jamais sed. Backup avant chaque modif.
🗄️

PostgreSQL — dblink, schema, migration

MEDIUM
PG TCP connexion — localhost vs 127.0.0.1 vs IP
postgresqlconnexion

pg_hba.conf distingue connexions socket (localhost) et TCP (127.0.0.1). Certaines apps utilisent l'un, certaines l'autre. Le fix TCP a été appliqué pour Ethica.

✅ PG = localhost only. Jamais exposer sur l'IP publique.
Schema admin vs schema ethica vs public — confusion fréquente
postgresqlschema

adx_system contient le schema admin (WEVADS) et le schema ethica. adx_clients est la DB contacts. Le dblink bridge connecte les deux.

NE JAMAIS confondre les schemas. Toujours préfixer : admin.table ou ethica.table
🎮

Three.js / Frontend — Versions, imports, CSS

HIGH
!
Three.js r128 vs r170 — CapsuleGeometry n'existe pas en r128
threejsversion

agents-archi.html utilise Three.js r170 ESM via import maps. THREE.CapsuleGeometry a été introduit en r142. Les anciens exemples Claude utilisent r128 → crash.

JAMAIS utiliser r128 pour agents-archi. Toujours r170 ESM avec import maps.
✅ Alternatives en r128 : CylinderGeometry, SphereGeometry, ou geometries custom
!
IIFE })(); emportée par suppression de script → casse TOUT le JS
javascriptiifescope

📛 Session 9-10 avril : suppression d'un bloc script a emporté le })(); du IIFE Bottom-Up → tout le JS de la page crashait

✅ Quand tu supprimes un script, vérifier que les IIFE fermantes sont intactes
JS = AJOUTER, jamais écraser — zéro régression site
javascriptsite

Le site utilise weval-enrich.js (Claude A), wevia.html (Claude B), wevia-api.php (Claude C). Chaque Claude a son domaine. Ne JAMAIS écraser les fichiers d'un autre Claude.

✅ Toujours tester TOUTES les pages AVANT et APRÈS modification JS
wevia.html = 147KB monolithe — éditions chirurgicales ONLY
weviahtmlmonolithe

Le chatbot fullscreen est un seul fichier HTML de 147KB avec CSS+JS intégrés. Ne JAMAIS réécrire en entier.

🤖

WEVIA Chatbot — Routing, providers, leaks

HIGH
!
Tous les intents routés sur GPU 8b = réponses superficielles
weviaroutingllm

Par défaut, smartRoute() envoyait TOUT (sauf consulting) sur llama3.1:8b GPU. Trop petit pour du consulting, analysis, medical, creative.

📛 "SAP vs Oracle" → réponse de 2 lignes générique au lieu d'analyse détaillée

📛 Schema/Mermaid → texte brut au lieu de diagramme (8b ignore les instructions mermaid)

✅ Smart Router v5 : 33 patterns, 12 engines. Greeting→8b, Code→14b, Heavy→32b ou Groq 70b
Leak "Moteur neuro-symbolique" dans les réponses
wevialeakprompt

applyBusinessRules() appendait des métadonnées internes dans la réponse visible au client.

✅ Déplacé en metadata JSON rules_warning — invisible au client
✅ final-sanitizer.php : strips 12 patterns de prompt leak + emojis + headers "Analyse"
JAMAIS exposer GPU/modèle/temps au client
weviasécurité

Les réponses API contenaient provider: "deepseek_gpu", model: "llama3.1:8b", latency_ms: 1200. Infos internes.

✅ Côté public : provider: "WEVAL_brain". Les détails restent dans les logs serveur.
Zones B/C strictement séparées — JAMAIS fusionner
weviaarchitecture

Claude B = Fullscreen (wevia.html + weval-chatbot-api.php). Claude C = Widget (wevia-api.php). APIs backend différentes, frontends différents. Ne JAMAIS confondre.

Conversions = PULL, JAMAIS configurer postbacks chez CX3/DoubleM
wevadsconversionpull

3 sessions Claude ont essayé de configurer des postback URLs chez les sponsors. ADX/iResponse utilise un modèle PULL — conversions-collector.php interroge les APIs CAKE/Everflow toutes les 30 minutes.

📛 Erreur critique répétée 3 fois sur 3 sessions différentes

Le code EXISTE DÉJÀ. Les API keys sont en base. Il suffit d'activer le cron.
🏗️

Architecture & Workflow — Règles d'or

RÈGLES BLOQUANTES
SÉQUENCE BLOQUANTE OBLIGATOIRE
workflowobligatoire
1. Relire mémoires → comprendre le contexte
2. Anti-Régression → chercher existant (scanner avant de créer)
3. Recul / architecture → plan
4. GOLD backup → sauvegarder l'état avant
5. git commit → git push
6. Mockup → validation Yacine EXPLICITE
7. Modifier → appliquer les changements
8. vault + checksums → mettre à jour les références
9. git add + commit + push → versionner
10. Triple verify 0 dirty → rien qui traîne
STRIKE RULE — Problème 2x → STOP
workflowdebugging

Si un problème apparaît 2 fois : STOP symptôme, identifier root cause, appliquer fix structurel. Ne JAMAIS continuer à patacher.

📛 SSO callback 400 : patchée 5 fois en surface avant d'identifier que le JWT state était vide

📛 sed/heredoc : réessayé 6 fois sur chatbot-widget.php avant d'admettre que sed ne peut pas gérer les backticks

GOLD BACKUP — Obligatoire AVANT migration/refactor/multi-fichier/routing/DB
goldbackup

JAMAIS supprimer les GOLD. Ils sont la dernière ligne de défense quand tout casse.

✅ Convention : fichier.gold.pre-{action}.{date}
Exemple : /etc/nginx/weval-consulting.gold.pre-auth-removal.8avr2026
S204 = MTA-only — JAMAIS déployer fichiers applicatifs
architectureserveur

S204 (204.168.152.13) héberge PMTA + WEVIA + Ethica. JAMAIS y déployer des fichiers Arsenal, ADX, ou autres apps non-MTA.

✅ S95 = WEVADS + Arsenal + Sentinel + PG. S204 = MTA + WEVIA + Ethica. S151 = OVH tracking.
SOUVERAINETÉ — Interne → open source → multi-fournisseur
philosophiearchitecture

Ollama LOCAL = rang 1 partout. Cloud = fallback uniquement. Jamais single-vendor lock-in.

WEVIA KB = INTERNAL ONLY — jamais exposer sur site public.

Collecte Learn désactivée — ne pas réactiver sans validation
wevialearn

Le collectiveLearn a été désactivé pour éviter la pollution de la KB par du contenu non validé. L'auto-learn reste actif pour les faits utilisateur explicites.

mmdc Puppeteer crash sans --no-sandbox
mermaidpuppeteer

Le rendu Mermaid en PNG via mmdc (Puppeteer) crash quand exécuté en root sans --no-sandbox.

✅ puppeteerrc.cjs corrigé avec args: ['--no-sandbox']
WEVAL Consulting — FAQ Anti-Régression v4 — Avril 2026 — Compilé depuis 6 mois de sessions Claude
47 pièges · 23+ incidents · 40+ règles · 15 techniques avancées · 12 catégories