diff --git a/api/architecture-scan.json b/api/architecture-scan.json
index 2507a0e9b..e69de29bb 100644
--- a/api/architecture-scan.json
+++ b/api/architecture-scan.json
@@ -1,1956 +0,0 @@
-{
- "generated": "2026-04-21 11:00:01",
- "version": "1.0",
- "servers": [
- {
- "id": "S204",
- "ip": "204.168.152.13",
- "private": "10.1.0.2",
- "role": "PRIMARY",
- "ssh": 49222,
- "disk_pct": 82,
- "disk_avail": "28G",
- "uptime": "up 1 week, 1 hour, 8 minutes",
- "nginx": "active",
- "php_fpm": "active",
- "php_version": "8.5.5"
- },
- {
- "id": "S95",
- "ip": "95.216.167.89",
- "private": "10.1.0.3",
- "role": "WEVADS Arsenal",
- "ssh": 22,
- "disk_pct": 81,
- "disk_avail": "29G",
- "sentinel": 1
- },
- {
- "id": "S151",
- "ip": "151.80.235.110",
- "private": null,
- "role": "DR\/Tracking OVH",
- "ssh": 22
- }
- ],
- "docker": [
- {
- "name": "loki",
- "status": "Up 4 days",
- "ports": ""
- },
- {
- "name": "listmonk",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-db-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-events-db-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "n8n-docker-n8n-1",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "mattermost-docker-mm-db-1",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "mattermost-docker-mattermost-1",
- "status": "Up 5 days (healthy)",
- "ports": ""
- },
- {
- "name": "twenty",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "twenty-redis",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "langfuse",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "redis-weval",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "gitea",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "node-exporter",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "prometheus",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "searxng",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "uptime-kuma",
- "status": "Up 35 hours (healthy)",
- "ports": ""
- },
- {
- "name": "vaultwarden",
- "status": "Up 6 days (healthy)",
- "ports": ""
- },
- {
- "name": "qdrant",
- "status": "Up 6 days",
- "ports": ""
- }
- ],
- "domains": [
- {
- "file": "analytics.weval-consulting.com",
- "server_names": [
- "analytics.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "arsenal.weval-consulting.com",
- "server_names": [
- "arsenal.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "code-weval",
- "server_names": [
- "code.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "crm.weval-consulting.com",
- "server_names": [
- "crm.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "ethica",
- "server_names": [
- "ethica.wevup.app",
- "consent.wevup.app"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "git.weval-consulting.com",
- "server_names": [
- "git.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "langfuse.weval-consulting.com",
- "server_names": [
- "langfuse.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "mirofish.weval-consulting.com",
- "server_names": [
- "mirofish.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "mm.weval-consulting.com",
- "server_names": [
- "mm.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "monitor.weval-consulting.com",
- "server_names": [
- "monitor.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "n8n.weval-consulting.com",
- "server_names": [
- "n8n.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "paperclip.weval-consulting.com",
- "server_names": [
- "paperclip.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "wevads.weval-consulting.com",
- "server_names": [
- "wevads.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- },
- {
- "file": "weval-consulting",
- "server_names": [
- "weval-consulting.com",
- "www.weval-consulting.com"
- ],
- "ssl": true,
- "php-session": false,
- "php-session_paths": false,
- "auth_complete": false
- }
- ],
- "screens": {
- "s204_html": 294,
- "s204_products": 104,
- "s204_api_php": 776,
- "s204_wevia_php": 34,
- "s95_arsenal_html": 1377,
- "s95_arsenal_api": 377
- },
- "auth": {
- "system": "PHP Session Auth",
- "authentik": "REMOVED",
- "pass": 24,
- "fail": 0
- },
- "databases": {
- "s204": [
- "postgres",
- "adx_system",
- "wevia_db",
- "twenty_db",
- "mattermost_db",
- "deerflow",
- "nocodb",
- "paperclip",
- "langfuse"
- ],
- "key_tables": {
- "kb_learnings": 5540,
- "kb_documents": 0,
- "ethica_medecins": 50004,
- "enterprise_agents": 0
- }
- },
- "ollama": [
- {
- "name": "weval-brain-v4:latest",
- "family": "qwen3",
- "params": "4.0B",
- "quant": "Q4_K_M",
- "size_gb": 2.5
- },
- {
- "name": "llama3.2:latest",
- "family": "llama",
- "params": "3.2B",
- "quant": "Q4_K_M",
- "size_gb": 2
- },
- {
- "name": "nomic-embed-text:latest",
- "family": "nomic-bert",
- "params": "137M",
- "quant": "F16",
- "size_gb": 0.3
- },
- {
- "name": "weval-brain-v3:latest",
- "family": "qwen3",
- "params": "4.0B",
- "quant": "Q4_K_M",
- "size_gb": 2.5
- },
- {
- "name": "nomic-embed-text:v1.5",
- "family": "nomic-bert",
- "params": "137M",
- "quant": "F16",
- "size_gb": 0.3
- },
- {
- "name": "qwen3:4b",
- "family": "qwen3",
- "params": "4.0B",
- "quant": "Q4_K_M",
- "size_gb": 2.5
- },
- {
- "name": "all-minilm:latest",
- "family": "bert",
- "params": "23M",
- "quant": "F16",
- "size_gb": 0
- }
- ],
- "qdrant": [
- {
- "name": "weval_skills",
- "vectors": 19089
- },
- {
- "name": "wevia_graph",
- "vectors": 3
- },
- {
- "name": "weval_intents_memory",
- "vectors": 50
- },
- {
- "name": "obsidian_vault",
- "vectors": 46
- },
- {
- "name": "kb_bpmn_flows",
- "vectors": 7
- },
- {
- "name": "kb_ethica_pharma",
- "vectors": 16
- },
- {
- "name": "kb_consulting_strategy",
- "vectors": 6
- },
- {
- "name": "wevia_learnings",
- "vectors": 1736
- },
- {
- "name": "wevia_brain_knowledge",
- "vectors": 294
- },
- {
- "name": "kb_vsm_best_practices",
- "vectors": 7
- },
- {
- "name": "kb_bpmn_patterns",
- "vectors": 7
- },
- {
- "name": "kb_dmaic_playbooks",
- "vectors": 7
- },
- {
- "name": "kb_wevads_deliv",
- "vectors": 6
- },
- {
- "name": "wevia_memory_768",
- "vectors": 82
- },
- {
- "name": "wevia_kb_768",
- "vectors": 255
- },
- {
- "name": "weval_agents_registry",
- "vectors": 50
- },
- {
- "name": "wevia_kb",
- "vectors": 386
- },
- {
- "name": "wevia_memory",
- "vectors": 48
- },
- {
- "name": "kb_lean6sigma",
- "vectors": 10
- }
- ],
- "ai_providers": [
- {
- "name": "Cerebras",
- "model": "Qwen-235B",
- "tier": "T1",
- "status": "active"
- },
- {
- "name": "Groq",
- "model": "Llama-4-Scout",
- "tier": "T1",
- "status": "active"
- },
- {
- "name": "SambaNova",
- "model": "Llama-3.3-70B",
- "tier": "T1",
- "status": "active"
- },
- {
- "name": "NVIDIA NIM",
- "model": "Llama-3.1-70B",
- "tier": "T1",
- "status": "active"
- },
- {
- "name": "Together",
- "model": "Qwen-2.5-72B",
- "tier": "T1",
- "status": "active"
- },
- {
- "name": "Mistral",
- "model": "Mistral-Small",
- "tier": "T2",
- "status": "active"
- },
- {
- "name": "Cohere",
- "model": "Command-R+",
- "tier": "T2",
- "status": "active"
- },
- {
- "name": "Gemini",
- "model": "Gemini-2.0-Flash",
- "tier": "T2",
- "status": "active"
- },
- {
- "name": "DeepSeek",
- "model": "DeepSeek-Chat",
- "tier": "T2",
- "status": "active"
- },
- {
- "name": "OpenRouter",
- "model": "Multi",
- "tier": "T2",
- "status": "active"
- },
- {
- "name": "Alibaba",
- "model": "Qwen-Max",
- "tier": "T2",
- "status": "active"
- },
- {
- "name": "HuggingFace",
- "model": "Inference",
- "tier": "T3",
- "status": "active"
- },
- {
- "name": "Replicate",
- "model": "Multi",
- "tier": "T3",
- "status": "active"
- },
- {
- "name": "ZhiPu",
- "model": "GLM-4",
- "tier": "T3",
- "status": "active"
- },
- {
- "name": "Ollama Local",
- "model": "weval-brain-v3",
- "tier": "T0",
- "status": "active"
- }
- ],
- "crons": {
- "s204_root": 0,
- "s204_www": 35,
- "s204_total": 35,
- "key_crons": [
- {
- "name": "L99 Master",
- "freq": "*\/30",
- "target": "l99-master.py"
- },
- {
- "name": "Autonomous Engine",
- "freq": "*\/5",
- "target": "wevia-master-autonomous"
- },
- {
- "name": "L99 Pipeline",
- "freq": "*\/15",
- "target": "l99-pipeline.py"
- },
- {
- "name": "L99 Alive",
- "freq": "*\/10",
- "target": "l99-alive.py"
- },
- {
- "name": "Infra Guardian",
- "freq": "*\/5",
- "target": "infra-guardian.sh"
- },
- {
- "name": "Blade Watchdog",
- "freq": "*\/5",
- "target": "blade-watchdog.php"
- },
- {
- "name": "RAG Ingest",
- "freq": "*\/30",
- "target": "wevia-rag-ingest.sh"
- },
- {
- "name": "Blade Orchestrator",
- "freq": "*\/30",
- "target": "blade-orchestrator.sh"
- },
- {
- "name": "WEVIA Dream",
- "freq": "*\/30",
- "target": "wevia-dream-cron.php"
- },
- {
- "name": "Port Protection",
- "freq": "*\/5",
- "target": "port-protection"
- },
- {
- "name": "Watchdog",
- "freq": "*\/3",
- "target": "weval-watchdog.php"
- },
- {
- "name": "Ethica Enrich",
- "freq": "daily 01h",
- "target": "ethica-enrich-v4.py"
- },
- {
- "name": "Daily Brief",
- "freq": "daily 07h",
- "target": "weval-daily-brief.py"
- }
- ]
- },
- "wiki": {
- "total_entries": 5540,
- "categories": [
- {
- "category": "AUTO-FIX",
- "cnt": "2973"
- },
- {
- "category": "TOPOLOGY",
- "cnt": "1211"
- },
- {
- "category": "DISCOVERY",
- "cnt": "610"
- },
- {
- "category": "SYSTEMATIC",
- "cnt": "204"
- },
- {
- "category": "L99-FULLSCAN",
- "cnt": "80"
- },
- {
- "category": "INFRA",
- "cnt": "74"
- },
- {
- "category": "CONTROL-TOWER",
- "cnt": "42"
- },
- {
- "category": "ALERT",
- "cnt": "34"
- },
- {
- "category": "AGENT",
- "cnt": "20"
- },
- {
- "category": "L99-SCAN",
- "cnt": "12"
- },
- {
- "category": "FIX",
- "cnt": "10"
- },
- {
- "category": "FLEET",
- "cnt": "8"
- },
- {
- "category": "MASTER-INTENT",
- "cnt": "6"
- },
- {
- "category": "SESSION-5AVR",
- "cnt": "5"
- },
- {
- "category": "Maroc",
- "cnt": "5"
- },
- {
- "category": "Analyse",
- "cnt": "5"
- },
- {
- "category": "AUTH",
- "cnt": "5"
- },
- {
- "category": "claude_2026",
- "cnt": "4"
- },
- {
- "category": "SERVICES",
- "cnt": "4"
- },
- {
- "category": "WEVAL Consulting",
- "cnt": "4"
- },
- {
- "category": "Intelligence Artificielle",
- "cnt": "3"
- },
- {
- "category": "PARADIGM",
- "cnt": "3"
- },
- {
- "category": "INTEGRATION",
- "cnt": "3"
- },
- {
- "category": "FIX-CRITIQUE",
- "cnt": "3"
- },
- {
- "category": "Voici",
- "cnt": "2"
- },
- {
- "category": "Vous",
- "cnt": "2"
- },
- {
- "category": "Pouvez",
- "cnt": "2"
- },
- {
- "category": "Image",
- "cnt": "2"
- },
- {
- "category": "Contexte",
- "cnt": "2"
- },
- {
- "category": "L99-EXHAUSTIVE",
- "cnt": "2"
- },
- {
- "category": "L99-GAP",
- "cnt": "2"
- },
- {
- "category": "WEVAL Consulting Casablanca",
- "cnt": "2"
- },
- {
- "category": "Test",
- "cnt": "2"
- },
- {
- "category": "Salut",
- "cnt": "2"
- },
- {
- "category": "L99-E2E",
- "cnt": "2"
- },
- {
- "category": "Document",
- "cnt": "2"
- },
- {
- "category": "PROVIDERS",
- "cnt": "2"
- },
- {
- "category": "Bien",
- "cnt": "2"
- },
- {
- "category": "WEVIA",
- "cnt": "2"
- },
- {
- "category": "Diagramme",
- "cnt": "2"
- },
- {
- "category": "Comparaison",
- "cnt": "2"
- },
- {
- "category": "L99-MEGA",
- "cnt": "2"
- },
- {
- "category": "QUALITY",
- "cnt": "2"
- },
- {
- "category": "Cependant",
- "cnt": "2"
- },
- {
- "category": "MONITORING",
- "cnt": "2"
- },
- {
- "category": "L99",
- "cnt": "2"
- },
- {
- "category": "Introduction",
- "cnt": "2"
- },
- {
- "category": "Pour",
- "cnt": "2"
- },
- {
- "category": "Casablanca",
- "cnt": "2"
- },
- {
- "category": "Pourriez",
- "cnt": "2"
- },
- {
- "category": "Vistex BTP Signavio",
- "cnt": "1"
- },
- {
- "category": "Conduite",
- "cnt": "1"
- },
- {
- "category": "DMAIC",
- "cnt": "1"
- },
- {
- "category": "Industrie",
- "cnt": "1"
- },
- {
- "category": "Proposition",
- "cnt": "1"
- },
- {
- "category": "Accueil\nBienvenue",
- "cnt": "1"
- },
- {
- "category": "Logo",
- "cnt": "1"
- },
- {
- "category": "SAP ECC",
- "cnt": "1"
- },
- {
- "category": "Votre",
- "cnt": "1"
- },
- {
- "category": "Probl",
- "cnt": "1"
- },
- {
- "category": "ANTI-REGRESSION",
- "cnt": "1"
- },
- {
- "category": "Explique",
- "cnt": "1"
- },
- {
- "category": "Zero Trust",
- "cnt": "1"
- },
- {
- "category": "Augmented Generation",
- "cnt": "1"
- },
- {
- "category": "RLHF",
- "cnt": "1"
- },
- {
- "category": "Service",
- "cnt": "1"
- },
- {
- "category": "Transformer",
- "cnt": "1"
- },
- {
- "category": "Bonjour Bonjour",
- "cnt": "1"
- },
- {
- "category": "Transformation",
- "cnt": "1"
- },
- {
- "category": "Audit",
- "cnt": "1"
- },
- {
- "category": "WEVAL",
- "cnt": "1"
- },
- {
- "category": "Strat",
- "cnt": "1"
- },
- {
- "category": "Maghreb",
- "cnt": "1"
- },
- {
- "category": "ERP SAP",
- "cnt": "1"
- },
- {
- "category": "Quelle",
- "cnt": "1"
- },
- {
- "category": "Oracle",
- "cnt": "1"
- },
- {
- "category": "Data",
- "cnt": "1"
- },
- {
- "category": "Donn",
- "cnt": "1"
- },
- {
- "category": "Quel",
- "cnt": "1"
- },
- {
- "category": "Syst",
- "cnt": "1"
- },
- {
- "category": "Ahmed",
- "cnt": "1"
- },
- {
- "category": "UiPath",
- "cnt": "1"
- },
- {
- "category": "Niveau PhD",
- "cnt": "1"
- },
- {
- "category": "CLEANUP",
- "cnt": "1"
- },
- {
- "category": "Notre",
- "cnt": "1"
- },
- {
- "category": "TOUTES",
- "cnt": "1"
- },
- {
- "category": "Maroc DDMRP OTIF",
- "cnt": "1"
- },
- {
- "category": "Crit",
- "cnt": "1"
- },
- {
- "category": "SAP Vistex Revenue Management",
- "cnt": "1"
- },
- {
- "category": "Fine",
- "cnt": "1"
- },
- {
- "category": "Compare AWS Azure GCP",
- "cnt": "1"
- },
- {
- "category": "Healthcare",
- "cnt": "1"
- },
- {
- "category": "BLADE",
- "cnt": "1"
- },
- {
- "category": "Plan",
- "cnt": "1"
- },
- {
- "category": "Conseil",
- "cnt": "1"
- },
- {
- "category": "Nous",
- "cnt": "1"
- },
- {
- "category": "Zero Trust SOC SIEM",
- "cnt": "1"
- },
- {
- "category": "Amazon Web Services",
- "cnt": "1"
- },
- {
- "category": "Retiens",
- "cnt": "1"
- },
- {
- "category": "Diff",
- "cnt": "1"
- },
- {
- "category": "QDRANT",
- "cnt": "1"
- },
- {
- "category": "MITRE ATT",
- "cnt": "1"
- },
- {
- "category": "FMCG",
- "cnt": "1"
- },
- {
- "category": "Supply",
- "cnt": "1"
- },
- {
- "category": "Exercice",
- "cnt": "1"
- },
- {
- "category": "Redige",
- "cnt": "1"
- },
- {
- "category": "Supply Chain",
- "cnt": "1"
- },
- {
- "category": "Quels",
- "cnt": "1"
- },
- {
- "category": "Propose",
- "cnt": "1"
- },
- {
- "category": "Plateforme",
- "cnt": "1"
- },
- {
- "category": "Cyber",
- "cnt": "1"
- },
- {
- "category": "Tableau",
- "cnt": "1"
- },
- {
- "category": "Migration SAP",
- "cnt": "1"
- },
- {
- "category": "AUTH-AGENT",
- "cnt": "1"
- },
- {
- "category": "Fais",
- "cnt": "1"
- },
- {
- "category": "Iran",
- "cnt": "1"
- },
- {
- "category": "OLLAMA",
- "cnt": "1"
- },
- {
- "category": "Reessayez",
- "cnt": "1"
- },
- {
- "category": "MORNE WEVAL",
- "cnt": "1"
- },
- {
- "category": "Analyse SWOT",
- "cnt": "1"
- },
- {
- "category": "SAP Vistex",
- "cnt": "1"
- },
- {
- "category": "IoT WMS",
- "cnt": "1"
- },
- {
- "category": "Industry",
- "cnt": "1"
- },
- {
- "category": "What",
- "cnt": "1"
- },
- {
- "category": "Strategie",
- "cnt": "1"
- },
- {
- "category": "Rappelle",
- "cnt": "1"
- },
- {
- "category": "DMAIC Six Sigma",
- "cnt": "1"
- },
- {
- "category": "Avantages",
- "cnt": "1"
- },
- {
- "category": "Explique RLHF",
- "cnt": "1"
- },
- {
- "category": "Huawei Cloud",
- "cnt": "1"
- },
- {
- "category": "PMO SAFe",
- "cnt": "1"
- },
- {
- "category": "Migration SAP ECC",
- "cnt": "1"
- },
- {
- "category": "team_work",
- "cnt": "1"
- },
- {
- "category": "Bonjour Pr",
- "cnt": "1"
- },
- {
- "category": "Maroc DDMRP OTIF WMS TMS",
- "cnt": "1"
- },
- {
- "category": "Architecture",
- "cnt": "1"
- },
- {
- "category": "Framework NIST",
- "cnt": "1"
- },
- {
- "category": "Automatiser",
- "cnt": "1"
- },
- {
- "category": "Compare RLHF DPO Constitutional AI",
- "cnt": "1"
- },
- {
- "category": "Genere",
- "cnt": "1"
- },
- {
- "category": "Elle",
- "cnt": "1"
- },
- {
- "category": "Constitutional AI",
- "cnt": "1"
- },
- {
- "category": "Brownfield",
- "cnt": "1"
- },
- {
- "category": "Confirmation",
- "cnt": "1"
- },
- {
- "category": "Architecture IA",
- "cnt": "1"
- },
- {
- "category": "KPIs",
- "cnt": "1"
- },
- {
- "category": "Quelles",
- "cnt": "1"
- },
- {
- "category": "SWOT",
- "cnt": "1"
- },
- {
- "category": "Comparons",
- "cnt": "1"
- },
- {
- "category": "Services",
- "cnt": "1"
- },
- {
- "category": "Maroc TMA",
- "cnt": "1"
- },
- {
- "category": "Contraintes",
- "cnt": "1"
- },
- {
- "category": "Intelligence",
- "cnt": "1"
- },
- {
- "category": "Donne",
- "cnt": "1"
- },
- {
- "category": "Vistex",
- "cnt": "1"
- },
- {
- "category": "Maroc CMI",
- "cnt": "1"
- },
- {
- "category": "Audite",
- "cnt": "1"
- },
- {
- "category": "Aide",
- "cnt": "1"
- },
- {
- "category": "DKIM DMARC",
- "cnt": "1"
- },
- {
- "category": "Zero Trust SOC",
- "cnt": "1"
- },
- {
- "category": "Bonjour Yacine",
- "cnt": "1"
- },
- {
- "category": "Workshop",
- "cnt": "1"
- },
- {
- "category": "Compare RLHF DPO GRPO Constitutional AI",
- "cnt": "1"
- },
- {
- "category": "Comparatif ERP PME",
- "cnt": "1"
- },
- {
- "category": "Programme",
- "cnt": "1"
- },
- {
- "category": "SAP MM",
- "cnt": "1"
- },
- {
- "category": "Phases",
- "cnt": "1"
- },
- {
- "category": "Autres",
- "cnt": "1"
- },
- {
- "category": "FHIR",
- "cnt": "1"
- },
- {
- "category": "SESSION-7AVR",
- "cnt": "1"
- },
- {
- "category": "FHIR IA",
- "cnt": "1"
- },
- {
- "category": "MLOps",
- "cnt": "1"
- },
- {
- "category": "MIROFISH",
- "cnt": "1"
- },
- {
- "category": "Ecris",
- "cnt": "1"
- },
- {
- "category": "Suite",
- "cnt": "1"
- },
- {
- "category": "Nearshore",
- "cnt": "1"
- },
- {
- "category": "Bienvenue",
- "cnt": "1"
- },
- {
- "category": "Retrieval",
- "cnt": "1"
- },
- {
- "category": "KYC BAM",
- "cnt": "1"
- },
- {
- "category": "Afrique",
- "cnt": "1"
- },
- {
- "category": "Dans",
- "cnt": "1"
- },
- {
- "category": "Azure",
- "cnt": "1"
- },
- {
- "category": "Budget",
- "cnt": "1"
- },
- {
- "category": "INSTRUCTION SYSTEME",
- "cnt": "1"
- },
- {
- "category": "CNDP",
- "cnt": "1"
- },
- {
- "category": "Compare",
- "cnt": "1"
- },
- {
- "category": "HubSpot",
- "cnt": "1"
- },
- {
- "category": "Control",
- "cnt": "1"
- },
- {
- "category": "SESSION-6AVR",
- "cnt": "1"
- },
- {
- "category": "Bonjour Salut",
- "cnt": "1"
- },
- {
- "category": "Maroc KPIs OTIF",
- "cnt": "1"
- },
- {
- "category": "Vistex SAP",
- "cnt": "1"
- },
- {
- "category": "Traduis",
- "cnt": "1"
- },
- {
- "category": "Maroc IoT WMS",
- "cnt": "1"
- },
- {
- "category": "SaaS",
- "cnt": "1"
- },
- {
- "category": "CODE BLOCK",
- "cnt": "1"
- },
- {
- "category": "Cahier",
- "cnt": "1"
- },
- {
- "category": "Maroc FHIR",
- "cnt": "1"
- },
- {
- "category": "DESIGN",
- "cnt": "1"
- },
- {
- "category": "Compare RLHF",
- "cnt": "1"
- },
- {
- "category": "Dynamics",
- "cnt": "1"
- },
- {
- "category": "Python",
- "cnt": "1"
- },
- {
- "category": "FORMAT OBLIGATOIRE",
- "cnt": "1"
- },
- {
- "category": "SAP ERP",
- "cnt": "1"
- },
- {
- "category": "INFRA-SESSION",
- "cnt": "1"
- },
- {
- "category": "Cette",
- "cnt": "1"
- },
- {
- "category": "OWASP Top",
- "cnt": "1"
- },
- {
- "category": "Logo Weval",
- "cnt": "1"
- },
- {
- "category": "ADKAR",
- "cnt": "1"
- },
- {
- "category": "GENERAL",
- "cnt": "1"
- }
- ],
- "qdrant_vectors": 386
- },
- "applications": [
- {
- "name": "WEVIA Chatbot",
- "type": "AI",
- "url": "\/wevia",
- "port": null,
- "server": "S204",
- "auth": "public"
- },
- {
- "name": "WEVIA Admin",
- "type": "Admin",
- "url": "\/wevia-admin",
- "port": null,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "WEVIA Life",
- "type": "Email AI",
- "url": "\/products\/wevialife-app.html",
- "port": null,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "Workspace",
- "type": "Hub",
- "url": "\/products\/workspace.html",
- "port": null,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "Arsenal\/WEVADS",
- "type": "Email Marketing",
- "url": "wevads.weval-consulting.com",
- "port": 5890,
- "server": "S95",
- "auth": "php-session"
- },
- {
- "name": "ADX\/iResponse",
- "type": "Email Platform",
- "url": "wevads.weval-consulting.com",
- "port": 5821,
- "server": "S95",
- "auth": "iResponse"
- },
- {
- "name": "Ethica HCP",
- "type": "Healthcare B2B",
- "url": "consent.wevup.app",
- "port": null,
- "server": "S204",
- "auth": "ethica-auth"
- },
- {
- "name": "CRM (Twenty)",
- "type": "CRM",
- "url": "crm.weval-consulting.com",
- "port": 3000,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "Mattermost",
- "type": "Chat",
- "url": "mm.weval-consulting.com",
- "port": 8065,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "n8n",
- "type": "Automation",
- "url": "n8n.weval-consulting.com",
- "port": 5678,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "Uptime Kuma",
- "type": "Monitoring",
- "url": "monitor.weval-consulting.com",
- "port": 3001,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "Plausible",
- "type": "Analytics",
- "url": "analytics.weval-consulting.com",
- "port": 8000,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "DeerFlow",
- "type": "AI Research",
- "url": "deerflow.weval-consulting.com",
- "port": 2024,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "SearXNG",
- "type": "Search",
- "url": null,
- "port": 8888,
- "server": "S204",
- "auth": "internal"
- },
- {
- "name": "Qdrant",
- "type": "Vector DB",
- "url": null,
- "port": 6333,
- "server": "S204",
- "auth": "internal"
- },
- {
- "name": "Ollama",
- "type": "LLM Runtime",
- "url": null,
- "port": 11434,
- "server": "S204",
- "auth": "internal"
- },
- {
- "name": "Flowise",
- "type": "AI Flow",
- "url": null,
- "port": 3088,
- "server": "S204",
- "auth": "internal"
- },
- {
- "name": "MiroFish",
- "type": "AI Agent",
- "url": "mirofish.weval-consulting.com",
- "port": 3050,
- "server": "S204",
- "auth": "php-session"
- },
- {
- "name": "Open WebUI",
- "type": "LLM UI",
- "url": null,
- "port": 3002,
- "server": "S204",
- "auth": "internal"
- },
- {
- "name": "Vaultwarden",
- "type": "Passwords",
- "url": null,
- "port": 8222,
- "server": "S204",
- "auth": "internal"
- },
- {
- "name": "Prometheus",
- "type": "Metrics",
- "url": null,
- "port": 9000,
- "server": "S204",
- "auth": "internal"
- },
- {
- "name": "PMTA",
- "type": "MTA",
- "url": null,
- "port": 25,
- "server": "S95",
- "auth": "internal"
- },
- {
- "name": "KumoMTA",
- "type": "MTA",
- "url": null,
- "port": 8010,
- "server": "S95",
- "auth": "internal"
- },
- {
- "name": "Sentinel",
- "type": "Orchestrator",
- "url": null,
- "port": 5890,
- "server": "S95",
- "auth": "internal"
- }
- ],
- "cloud": [
- {
- "provider": "Hetzner",
- "role": "S204+S95",
- "type": "Bare Metal",
- "region": "Germany"
- },
- {
- "provider": "OVH",
- "role": "S151 DR\/Tracking",
- "type": "VPS",
- "region": "France"
- },
- {
- "provider": "Cloudflare",
- "role": "CDN+DNS+WAF",
- "type": "SaaS",
- "region": "Global"
- },
- {
- "provider": "Huawei Cloud",
- "role": "Partner Certifié",
- "type": "IaaS",
- "region": "MENA"
- },
- {
- "provider": "Scaleway",
- "role": "GPU Inference",
- "type": "IaaS",
- "region": "France"
- }
- ],
- "partnerships": [
- "SAP Gold Partner",
- "Huawei Cloud",
- "Vistex",
- "IQVIA",
- "Scaleway"
- ],
- "ux_agent": {
- "pass": 3,
- "fail": 0,
- "warn": 0,
- "total": 3,
- "timestamp": "",
- "gauge_health_center": "X=0px Y=0px",
- "gauge_auto_center": "X=0px Y=0px",
- "design_tokens": {
- "bg": "#09090b",
- "card": "#18181b",
- "font": "Inter"
- }
- },
- "l99": {
- "master": {
- "total": 93,
- "pass": 89,
- "fail": 2,
- "timestamp": "2026-04-07T01:32:48.454012"
- },
- "auth": {
- "pass": 24,
- "fail": 0
- }
- },
- "cortex": {
- "fast_lines": 3620,
- "router_lines": 6152,
- "router_functions": 17,
- "today_requests": 5,
- "today_cost": 0,
- "avg_latency_ms": 2389,
- "top_provider": "cerebras",
- "providers_used": 2
- },
- "optimizations": {
- "recent_commits": [],
- "auto_fixes": [
- {
- "fact": "AUTONOMY 21Apr 08:10: 5 fixes. S95 restart pmta; S95 restart kumomta; S95 restart postfix; S95 restart sentinel; S95 restart adx",
- "created_at": "2026-04-21 10:10:04.274914"
- },
- {
- "fact": "AUTONOMY 19Apr 18:50: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 20:50:05.112821"
- },
- {
- "fact": "AUTONOMY 19Apr 18:45: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 20:45:05.896272"
- },
- {
- "fact": "AUTONOMY 19Apr 18:40: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 20:40:05.29453"
- },
- {
- "fact": "AUTONOMY 19Apr 18:35: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 20:35:06.160485"
- },
- {
- "fact": "AUTONOMY 19Apr 18:30: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 20:30:07.536885"
- },
- {
- "fact": "AUTONOMY 19Apr 17:30: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 19:30:06.670863"
- },
- {
- "fact": "AUTONOMY 19Apr 17:25: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 19:25:05.927364"
- },
- {
- "fact": "AUTONOMY 19Apr 17:20: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 19:20:05.814206"
- },
- {
- "fact": "AUTONOMY 19Apr 17:15: 1 fixes. Disk light cleanup 85%",
- "created_at": "2026-04-19 19:15:05.697284"
- }
- ],
- "architecture_decisions": [
- {
- "fact": "Crons: root=51 www-data=55 cron.d=72 total=178",
- "created_at": "2026-04-13 00:30:48.940882"
- },
- {
- "fact": "Crons: root=51 www-data=55 cron.d=70 total=176",
- "created_at": "2026-04-12 20:30:07.357094"
- },
- {
- "fact": "Crons: root=51 www-data=55 cron.d=70 total=176",
- "created_at": "2026-04-12 18:30:05.962933"
- },
- {
- "fact": "Crons: root=51 www-data=55 cron.d=70 total=176",
- "created_at": "2026-04-12 16:30:13.56815"
- },
- {
- "fact": "Crons: root=51 www-data=57 cron.d=70 total=178",
- "created_at": "2026-04-12 14:30:11.101941"
- },
- {
- "fact": "Crons: root=51 www-data=57 cron.d=70 total=178",
- "created_at": "2026-04-12 12:30:08.795912"
- },
- {
- "fact": "Crons: root=51 www-data=57 cron.d=70 total=178",
- "created_at": "2026-04-12 10:30:04.181935"
- },
- {
- "fact": "Crons: root=51 www-data=57 cron.d=70 total=178",
- "created_at": "2026-04-12 08:30:04.196728"
- },
- {
- "fact": "Crons: root=51 www-data=57 cron.d=70 total=178",
- "created_at": "2026-04-12 06:30:04.792965"
- },
- {
- "fact": "Crons: root=51 www-data=57 cron.d=70 total=178",
- "created_at": "2026-04-12 04:30:06.68899"
- },
- {
- "fact": "Crons: root=51 www-data=57 cron.d=70 total=178",
- "created_at": "2026-04-12 02:30:07.207832"
- },
- {
- "fact": "Crons: root=51 www-data=54 cron.d=69 total=174",
- "created_at": "2026-04-12 00:30:13.084556"
- },
- {
- "fact": "Crons: root=50 www-data=52 cron.d=69 total=171",
- "created_at": "2026-04-11 22:30:07.088896"
- },
- {
- "fact": "Crons: root=50 www-data=52 cron.d=69 total=171",
- "created_at": "2026-04-11 20:30:08.94444"
- },
- {
- "fact": "Crons: root=50 www-data=48 cron.d=69 total=167",
- "created_at": "2026-04-11 18:30:04.55611"
- }
- ],
- "pipelines": [
- {
- "name": "CORTEX Smart Router",
- "status": "active",
- "desc": "T0 Ollama → T1 Free APIs → T2 Fallbacks",
- "routes": 3620
- },
- {
- "name": "RAG Ingest",
- "status": "active",
- "desc": "Cron *\/30 → Qdrant semantic indexing",
- "freq": "*\/30"
- },
- {
- "name": "L99 Quality Gate",
- "status": "active",
- "desc": "253+ tests, 28 auth tests",
- "freq": "*\/30"
- },
- {
- "name": "Blade Orchestrator",
- "status": "active",
- "desc": "GPU polling + model sync",
- "freq": "*\/30"
- },
- {
- "name": "Infra Guardian",
- "status": "active",
- "desc": "Auto-restart nginx\/php\/docker",
- "freq": "*\/5"
- },
- {
- "name": "Ethica Scraper Pipeline",
- "status": "active",
- "desc": "4 spiders, RichScraper, SearXNG",
- "freq": "daily"
- },
- {
- "name": "WEVIA Dream",
- "status": "active",
- "desc": "Background learning + dataset enrichment",
- "freq": "*\/30"
- },
- {
- "name": "Daily Brief",
- "status": "active",
- "desc": "Morning synthesis → Mattermost",
- "freq": "daily 07h"
- },
- {
- "name": "Architecture Scanner",
- "status": "active",
- "desc": "This page — auto-scan + recommendations",
- "freq": "*\/30"
- }
- ],
- "agents_deployed": [
- {
- "name": "Monitor Agent",
- "role": "Watches all services, auto-restarts",
- "status": "active"
- },
- {
- "name": "DevOps Agent",
- "role": "Git sync, deployment, rollback",
- "status": "active"
- },
- {
- "name": "Ethica Agent",
- "role": "HCP scraping, validation, enrichment",
- "status": "active"
- },
- {
- "name": "Security Agent",
- "role": "Key rotation, secret scan, vulnerability check",
- "status": "active"
- },
- {
- "name": "Blade Agent",
- "role": "GPU orchestration, model management",
- "status": "active"
- },
- {
- "name": "Dream Agent",
- "role": "Background learning, dataset generation",
- "status": "active"
- },
- {
- "name": "RAG Agent",
- "role": "Knowledge ingestion, vector indexing",
- "status": "active"
- },
- {
- "name": "Quality Agent",
- "role": "L99 NonReg, regression detection",
- "status": "active"
- }
- ]
- },
- "mirofish": {
- "status": "active",
- "reports": 0,
- "bridge": "\/api\/mirofish-bridge.php"
- },
- "recommendations": {
- "score": 100,
- "total": 1,
- "critical": 0,
- "warning": 0,
- "info": 0,
- "opportunity": 1,
- "auto_fixed": 0,
- "fixes_log": [],
- "recommendations": [
- {
- "severity": "opportunity",
- "category": "SCALABILITY",
- "title": "Qdrant: 22,105 vecteurs",
- "detail": "Volume vectoriel croissant. Planifier sharding ou migration vers cluster Qdrant.",
- "action": "opportunity",
- "fix_cmd": ""
- }
- ]
- },
- "scan_time_ms": 2681,
- "gaps": [],
- "score": 100,
- "automation": {
- "coverage": 100,
- "steps": 30,
- "total": 30
- }
-}
\ No newline at end of file
diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json
index 677df6f3d..2322eb975 100644
--- a/api/blade-actions-surfaced.json
+++ b/api/blade-actions-surfaced.json
@@ -1,5 +1,5 @@
{
- "generated_at": "2026-04-21T13:25:02.141011",
+ "generated_at": "2026-04-21T13:30:01.590955",
"stats": {
"total": 48,
"pending": 31,
diff --git a/api/blade-heartbeat.json b/api/blade-heartbeat.json
index 5146b6aec..a9bc3f8aa 100644
--- a/api/blade-heartbeat.json
+++ b/api/blade-heartbeat.json
@@ -1,8 +1,8 @@
{
"status": "ALIVE",
- "ts": "2026-04-21T13:15:02.173676",
- "last_heartbeat": "2026-04-21T13:15:02.173676",
- "last_heartbeat_ts_epoch": 1776770102,
+ "ts": "2026-04-21T13:30:01.728130",
+ "last_heartbeat": "2026-04-21T13:30:01.728130",
+ "last_heartbeat_ts_epoch": 1776771001,
"tasks_today": 232,
"tasks_week": 574,
"agent_id": "blade-ops",
diff --git a/api/em-kpi-cache.json b/api/em-kpi-cache.json
index 8cf60c8cc..e69de29bb 100644
--- a/api/em-kpi-cache.json
+++ b/api/em-kpi-cache.json
@@ -1,281 +0,0 @@
-{
- "ts": "2026-04-21T11:25:02+00:00",
- "server": "s204",
- "s204": {
- "load": 2.16,
- "uptime": "2026-04-14 11:51:24",
- "ram_total_mb": 31335,
- "ram_used_mb": 12080,
- "ram_free_mb": 19254,
- "disk_total": "150G",
- "disk_used": "117G",
- "disk_free": "27G",
- "disk_pct": "82%",
- "fpm_workers": 140,
- "docker_containers": 19,
- "cpu_cores": 8
- },
- "s95": {
- "load": 0.19,
- "disk_pct": "81%",
- "status": "UP",
- "ram_total_mb": 15610,
- "ram_free_mb": 12023
- },
- "pmta": [
- {
- "name": "SER6",
- "ip": "110.239.84.121",
- "status": "DOWN"
- },
- {
- "name": "SER7",
- "ip": "110.239.65.64",
- "status": "DOWN"
- },
- {
- "name": "SER8",
- "ip": "182.160.55.107",
- "status": "DOWN"
- },
- {
- "name": "SER9",
- "ip": "110.239.86.68",
- "status": "DOWN"
- }
- ],
- "assets": {
- "html_pages": 294,
- "php_apis": 776,
- "wiki_entries": 1988,
- "vault_doctrines": 61,
- "vault_sessions": 104,
- "vault_decisions": 12
- },
- "tools": {
- "total": 627,
- "registry_version": "?"
- },
- "sovereign": {
- "status": "UP",
- "providers": [
- "Cerebras-fast",
- "Cerebras-think",
- "Groq",
- "Cloudflare-AI",
- "Gemini",
- "SambaNova",
- "NVIDIA-NIM",
- "Mistral",
- "Groq-OSS",
- "HF-Space",
- "HF-Router",
- "OpenRouter",
- "GitHub-Models"
- ],
- "active": 13,
- "total": 13,
- "primary": "Cerebras-fast",
- "cost": "0€"
- },
- "ethica": {
- "total_hcps": 161733,
- "with_email": 110597,
- "with_phone": 155151,
- "gap_email": 51136,
- "pct_email": 68.4,
- "pct_phone": 95.9,
- "by_country": [
- {
- "country": "DZ",
- "hcps": 122337,
- "with_email": 78497,
- "with_tel": 119396,
- "pct_email": 64.2,
- "pct_tel": 97.6
- },
- {
- "country": "MA",
- "hcps": 19723,
- "with_email": 15076,
- "with_tel": 18737,
- "pct_email": 76.4,
- "pct_tel": 95
- },
- {
- "country": "TN",
- "hcps": 17794,
- "with_email": 15145,
- "with_tel": 17018,
- "pct_email": 85.1,
- "pct_tel": 95.6
- },
- {
- "country": "INTL",
- "hcps": 1879,
- "with_email": 1879,
- "with_tel": 0,
- "pct_email": 100,
- "pct_tel": 0
- }
- ]
- },
- "docker": [
- {
- "name": "loki",
- "status": "Up 4 days",
- "ports": ""
- },
- {
- "name": "listmonk",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-db-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-events-db-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "n8n-docker-n8n-1",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "mattermost-docker-mm-db-1",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "mattermost-docker-mattermost-1",
- "status": "Up 5 days (healthy)",
- "ports": ""
- },
- {
- "name": "twenty",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "twenty-redis",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "langfuse",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "redis-weval",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "gitea",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "node-exporter",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "prometheus",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "searxng",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "uptime-kuma",
- "status": "Up 35 hours (healthy)",
- "ports": ""
- },
- {
- "name": "vaultwarden",
- "status": "Up 6 days (healthy)",
- "ports": ""
- },
- {
- "name": "qdrant",
- "status": "Up 6 days",
- "ports": ""
- }
- ],
- "crons": {
- "active": 35
- },
- "git": {
- "head": "a28c0be0f auto-sync-1325",
- "dirty": 1,
- "status": "DIRTY"
- },
- "nonreg": {
- "total": 153,
- "passed": 153,
- "score": "100%"
- },
- "services": [
- {
- "name": "DeerFlow",
- "port": 3002,
- "status": "UP"
- },
- {
- "name": "DeerFlow API",
- "port": 8001,
- "status": "UP"
- },
- {
- "name": "Qdrant",
- "port": 6333,
- "status": "UP"
- },
- {
- "name": "Ollama",
- "port": 11434,
- "status": "UP"
- },
- {
- "name": "Redis",
- "port": 6379,
- "status": "UP"
- },
- {
- "name": "Sovereign",
- "port": 4000,
- "status": "UP"
- },
- {
- "name": "SearXNG",
- "port": 8080,
- "status": "UP"
- }
- ],
- "whisper": {
- "binary": "COMPILED",
- "model": "142MB"
- },
- "grand_total": 3765,
- "health": {
- "score": 5,
- "max": 6,
- "pct": 83
- },
- "elapsed_ms": 10883
-}
\ No newline at end of file
diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json
index 2d3fab037..8c59b0bc2 100644
--- a/api/v83-business-kpi-latest.json
+++ b/api/v83-business-kpi-latest.json
@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
- "ts": "2026-04-21T11:27:26+00:00",
+ "ts": "2026-04-21T11:29:06+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,
diff --git a/wepredict.html b/wepredict.html
index e4fe1c531..76d1de2d6 100644
--- a/wepredict.html
+++ b/wepredict.html
@@ -861,7 +861,7 @@ footer.eco .truth-link:hover{ background: rgba(34,211,238,0.08); border-color: r
/
All-IA
/
- Arena
+ Arena
/
WEVIA Master
/
diff --git a/wiki/session-V129-routing-root-cause-malformed-stubs.md b/wiki/session-V129-routing-root-cause-malformed-stubs.md
new file mode 100644
index 000000000..c51e84f74
--- /dev/null
+++ b/wiki/session-V129-routing-root-cause-malformed-stubs.md
@@ -0,0 +1,175 @@
+# V129 - Root cause routing fail V125/V126/V127/V128 IDENTIFIED - 2026-04-21
+
+## Objectif
+Trouver la vraie cause du fail routing "comment faire un pentest" /
+"comment deployer un SIEM" / etc. vers Resolver au lieu de PendingLoader.
+
+Tentatives V126/V127/V128 n'avaient pas atteint 100% routing. V129
+investigation ciblée.
+
+## Méthodologie V129
+
+### Step 1 - Debug simulator autonome (zero touch core)
+Script `/tmp/v129-debug-b.php` qui réplique exactement `wpl_match_intent()`
+avec `ob_start()` autour de chaque `@include` pour capturer les échos.
+
+### Step 2 - Test sur 3 queries fails V125
+```
+comment faire un pentest
+comment deployer un SIEM
+comment mettre en place un SOC
+```
+
+## Découvertes V129
+
+### Finding 1 : Matching local FONCTIONNE
+
+```
+Query: "comment faire un pentest"
+→ EXACT MATCH trouvé:
+ [dev_security] "comment faire un pentest" (stub #420/2041)
+
+Query: "comment deployer un SIEM"
+→ SUBSTRING MATCH (dev_security "deployer un SIEM", score 50.4)
+ PLUS haut score que wevia_deploy_ci "deploy" (score 17.6)
+```
+
+**wpl_match_intent code LOCAL retourne le bon stub** — dev_security
+gagnerait normalement.
+
+### Finding 2 : Stubs malformés qui ECHO au include
+
+**2041 stubs scannés**, 2 identifiés qui font `echo json_encode(...)`
+directement au lieu de `return array(...)` :
+
+1. **`intent-opus4-plan_action_status.php`** :
+```php
+ $file,
+ "versions_total" => $v_count,
+ ...
+], JSON_PRETTY_PRINT);
+// PAS de "return array(...)" !
+```
+
+2. **`intent-opus4-playwright_login_test.php`** : "not an array" (log debug)
+
+3. **`intent-opus4-wevia_truth_registry.php`** (suspected) : echo 1067559 bytes JSON
+
+### Finding 3 : Pollution stdout → corruption SSE stream
+
+Quand `wpl_match_intent()` itère les 2041 stubs et fait `@include $s` :
+- Les stubs malformés **exécutent leur code** (echo JSON)
+- Output part directement au stdout
+- **AVANT** que le header SSE `Content-Type: text/event-stream` ne soit envoyé
+
+Dans `wevia-autonomous.php` L44-69 :
+```php
+$__pl_r = wevia_pending_loader($__pl_msg); // ← les echos partent ici
+if ($__pl_r !== null && !empty($__pl_r["ok"])) {
+ header("Content-Type: text/event-stream"); // ← trop tard, JSON déjà envoyé
+ echo "data: ..." // ← data valide partie après pollution
+```
+
+**Conséquence** :
+- Frontend reçoit : `{"plan_file":...}{"ok":true,...}data: {"type":"answer",...,"engine":"PendingLoader/dev_security"...}`
+- Parser ne reconnaît pas le JSON parasite → **fallback Resolver** qui exécute proprement
+
+### Finding 4 : Pourquoi certains dev_* passent et d'autres non
+
+- `dev_ecommerce`, `dev_ia`, `dev_mobile`, `dev_erp`, `dev_cloud`, `dev_crm`,
+ `dev_data`, `dev_marketing`, `dev_web_app`, `dev_project_auto` → OK
+
+- `dev_security`, `dev_devops` → FAIL spécifiques
+
+**Hypothèse** : quand dev_security ou dev_devops trigger match se fait,
+le script continue de scanner les stubs suivants (pour les autres triggers)
+et **tombe sur** les stubs malformés. Leur echo pollute avant que le match
+exact final soit exec.
+
+Les autres intents (dev_ia etc.) doivent avoir une combinaison triggers
+différente qui fait que leur match exact sort AVANT d'atteindre les stubs
+malformés dans l'ordre alphabétique... OU que leur match exact WIN assez
+tôt.
+
+## Options de fix V130+
+
+### Option A : Convertir stubs malformés en format legitime
+Wrap `plan_action_status` et `truth_registry` en `return array([...])`
+avec triggers minimalistes (ou status DISABLED).
+
+**Risque** : autres scripts peuvent POST direct à ces endpoints. Change
+format casse leur intégration.
+
+### Option B : `ob_start()` dans `wpl_match_intent()`
+Capturer les echos pendant include + les jeter :
+```php
+foreach ($stubs as $s) {
+ ob_start();
+ $info = @include $s;
+ ob_end_clean(); // Trash any echo output
+ // ... rest same
+}
+```
+
+**Risque** : modifie core `wevia-pending-loader.php` (chattr +i protected).
+Besoin GOLD backup + test exhaustif L99 + rollback ready.
+
+### Option C : DISABLE les 2 stubs malformés
+Ajouter `status => 'DISABLED_MALFORMED_ECHO_V129'` en tête.
+PendingLoader les skip via statuses blacklist déjà existante.
+
+**Risque minimal** : stubs existants encore appelables en direct HTTP.
+PendingLoader ne les touche plus en scan.
+
+## Recommandation V130
+
+**Option C** (prudent). Simple. Additif. Réversible. Effet immédiat.
+
+Puis éventuellement Option B si Yacine autorise modification core et
+exhaustive test.
+
+## Pourquoi V129 ne fait PAS le fix
+
+Temps token limité + approche prudente. Doctrine 4 HONNÊTETÉ :
+- Mieux documenter la vraie cause
+- Laisser décision à Yacine
+- Pas précipiter un fix qui pourrait casser plus large
+
+## L99 V129 (investigation read-only)
+```
+153/153 PASS | 0 FAIL | 100%
+TS: 20260421_125219 (inchangé, zero écriture production)
+```
+
+## Chain V96→V129
+
+| Version | Sujet |
+|---|---|
+| V118 | kpi-unified SINGLE SOURCE OF TRUTH |
+| V119 | Playwright portfolio 7/7 + enrichment volitif +48% |
+| V120 | dev_project_auto META ROUTER |
+| V121-V122 | Reaper investigation NO auto-reaper |
+| V123 | 4 tech domains recreated |
+| V124 | FPM saturation guard |
+| V125 | +60 interrogatif triggers (88.3% PASS) |
+| V126 | Replace 7 triggers (FAILED, reverted) |
+| V127 | +2 scope-context triggers additive (net gain) |
+| V128 | Core routing investigation (hypothesis T0↔T2 was wrong) |
+| **V129** | **Root cause IDENTIFIED: malformed stubs echo pollute SSE** |
+
+## Doctrines appliquées V129
+- Doctrine 0: Root cause analysis rigoureuse
+- Doctrine 4: **HONNÊTETÉ** transparente
+- Doctrine 13: Cause racine comprise (2 stubs malformed)
+- Doctrine 14: Test-driven (debug simulator zero-touch)
+- Doctrine 54: chattr +i protected respected
+- Doctrine 95: Traçabilité wiki investigation
+
+## Autres Claudes synchronisés V129 window
+- V9.79 REFONTE BETON wevia-admin.php (10 canaux omnicanal)
+- UDock V1 propagation 52% (153/294 pages)
+- Auto-sync continuous