diff --git a/api/architecture-scan.json b/api/architecture-scan.json
index e69de29bb..bf4a05c1b 100644
--- a/api/architecture-scan.json
+++ b/api/architecture-scan.json
@@ -0,0 +1,1937 @@
+{
+ "generated": "2026-04-19 13:30:01",
+ "version": "1.0",
+ "servers": [
+ {
+ "id": "S204",
+ "ip": "204.168.152.13",
+ "private": "10.1.0.2",
+ "role": "PRIMARY",
+ "ssh": 49222,
+ "disk_pct": 84,
+ "disk_avail": "24G",
+ "uptime": "up 5 days, 3 hours, 38 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": 89,
+ "disk_avail": "17G",
+ "sentinel": 1
+ },
+ {
+ "id": "S151",
+ "ip": "151.80.235.110",
+ "private": null,
+ "role": "DR\/Tracking OVH",
+ "ssh": 22
+ }
+ ],
+ "docker": [
+ {
+ "name": "loki",
+ "status": "Up 3 days",
+ "ports": ""
+ },
+ {
+ "name": "listmonk",
+ "status": "Up 3 days",
+ "ports": ""
+ },
+ {
+ "name": "plausible-plausible-1",
+ "status": "Up 47 hours",
+ "ports": ""
+ },
+ {
+ "name": "plausible-plausible-db-1",
+ "status": "Up 47 hours",
+ "ports": ""
+ },
+ {
+ "name": "plausible-plausible-events-db-1",
+ "status": "Up 47 hours",
+ "ports": ""
+ },
+ {
+ "name": "n8n-docker-n8n-1",
+ "status": "Up 3 days",
+ "ports": ""
+ },
+ {
+ "name": "mattermost-docker-mm-db-1",
+ "status": "Up 3 days",
+ "ports": ""
+ },
+ {
+ "name": "mattermost-docker-mattermost-1",
+ "status": "Up 3 days (healthy)",
+ "ports": ""
+ },
+ {
+ "name": "twenty",
+ "status": "Up 3 days",
+ "ports": ""
+ },
+ {
+ "name": "twenty-redis",
+ "status": "Up 3 days",
+ "ports": ""
+ },
+ {
+ "name": "langfuse",
+ "status": "Up 3 days",
+ "ports": ""
+ },
+ {
+ "name": "redis-weval",
+ "status": "Up 4 days",
+ "ports": ""
+ },
+ {
+ "name": "gitea",
+ "status": "Up 4 days",
+ "ports": ""
+ },
+ {
+ "name": "node-exporter",
+ "status": "Up 4 days",
+ "ports": ""
+ },
+ {
+ "name": "prometheus",
+ "status": "Up 4 days",
+ "ports": ""
+ },
+ {
+ "name": "searxng",
+ "status": "Up 4 days",
+ "ports": ""
+ },
+ {
+ "name": "uptime-kuma",
+ "status": "Up 4 days (healthy)",
+ "ports": ""
+ },
+ {
+ "name": "vaultwarden",
+ "status": "Up 4 days (healthy)",
+ "ports": ""
+ },
+ {
+ "name": "qdrant",
+ "status": "Up 4 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": "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": "wevads.weval-consulting.com.gold-16avr-pre-fallback",
+ "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": 247,
+ "s204_products": 104,
+ "s204_api_php": 643,
+ "s204_wevia_php": 18,
+ "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": 5425,
+ "kb_documents": 0,
+ "ethica_medecins": 50004,
+ "enterprise_agents": 0
+ }
+ },
+ "ollama": [
+ {
+ "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": 14477
+ },
+ {
+ "name": "wevia_graph",
+ "vectors": 3
+ },
+ {
+ "name": "weval_intents_memory",
+ "vectors": 0
+ },
+ {
+ "name": "obsidian_vault",
+ "vectors": 46
+ },
+ {
+ "name": "kb_bpmn_flows",
+ "vectors": 0
+ },
+ {
+ "name": "kb_ethica_pharma",
+ "vectors": 16
+ },
+ {
+ "name": "kb_consulting_strategy",
+ "vectors": 0
+ },
+ {
+ "name": "wevia_learnings",
+ "vectors": 1736
+ },
+ {
+ "name": "wevia_brain_knowledge",
+ "vectors": 294
+ },
+ {
+ "name": "kb_vsm_best_practices",
+ "vectors": 0
+ },
+ {
+ "name": "kb_bpmn_patterns",
+ "vectors": 0
+ },
+ {
+ "name": "kb_dmaic_playbooks",
+ "vectors": 0
+ },
+ {
+ "name": "kb_wevads_deliv",
+ "vectors": 0
+ },
+ {
+ "name": "wevia_memory_768",
+ "vectors": 58
+ },
+ {
+ "name": "kb_test_",
+ "vectors": 0
+ },
+ {
+ "name": "wevia_kb_768",
+ "vectors": 255
+ },
+ {
+ "name": "weval_agents_registry",
+ "vectors": 0
+ },
+ {
+ "name": "wevia_kb",
+ "vectors": 386
+ },
+ {
+ "name": "wevia_memory",
+ "vectors": 48
+ },
+ {
+ "name": "kb_lean6sigma",
+ "vectors": 0
+ }
+ ],
+ "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": 14,
+ "s204_total": 14,
+ "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": 5425,
+ "categories": [
+ {
+ "category": "AUTO-FIX",
+ "cnt": "2951"
+ },
+ {
+ "category": "TOPOLOGY",
+ "cnt": "1118"
+ },
+ {
+ "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": 0,
+ "today_cost": 0,
+ "avg_latency_ms": 0,
+ "top_provider": "N\/A",
+ "providers_used": 0
+ },
+ "optimizations": {
+ "recent_commits": [],
+ "auto_fixes": [
+ {
+ "fact": "AUTONOMY 17Apr 14:45: 1 fixes. Restart php-fpm",
+ "created_at": "2026-04-17 16:45:05.798814"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 14:40: 1 fixes. Restart php-fpm",
+ "created_at": "2026-04-17 16:40:05.635994"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 12:20: 1 fixes. Disk light cleanup 86%",
+ "created_at": "2026-04-17 14:20:05.038274"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 12:15: 1 fixes. Disk light cleanup 86%",
+ "created_at": "2026-04-17 14:15:05.314885"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 12:10: 1 fixes. Disk light cleanup 86%",
+ "created_at": "2026-04-17 14:10:04.576512"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 12:05: 1 fixes. Disk light cleanup 86%",
+ "created_at": "2026-04-17 14:05:04.781065"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 12:00: 1 fixes. Disk light cleanup 86%",
+ "created_at": "2026-04-17 14:00:08.575857"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 11:55: 1 fixes. Disk light cleanup 86%",
+ "created_at": "2026-04-17 13:55:05.473942"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 11:50: 1 fixes. Disk light cleanup 86%",
+ "created_at": "2026-04-17 13:50:05.14896"
+ },
+ {
+ "fact": "AUTONOMY 17Apr 11:45: 1 fixes. Disk light cleanup 86%",
+ "created_at": "2026-04-17 13:45:05.891174"
+ }
+ ],
+ "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": 0,
+ "critical": 0,
+ "warning": 0,
+ "info": 0,
+ "opportunity": 0,
+ "auto_fixed": 0,
+ "fixes_log": [],
+ "recommendations": []
+ },
+ "scan_time_ms": 1619,
+ "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 3d8647a4a..140f9b732 100644
--- a/api/blade-actions-surfaced.json
+++ b/api/blade-actions-surfaced.json
@@ -1,15 +1,15 @@
{
- "generated_at": "2026-04-19T15:25:01.406186",
+ "generated_at": "2026-04-19T15:30:01.606996",
"stats": {
- "total": 432,
- "pending": 825,
+ "total": 433,
+ "pending": 827,
"kaouther_surfaced": 29,
"chrome_surfaced": 10,
"notif_only_done": 0,
"autofix_archived": 0,
"cerebras_archived": 0,
"older_3d_archived": 0,
- "unknown": 393,
+ "unknown": 394,
"errors": 0
},
"actions": [
diff --git a/api/blade-tasks/task_20260419133002_7251b4.json b/api/blade-tasks/task_20260419133002_7251b4.json
new file mode 100644
index 000000000..cdc8d537e
--- /dev/null
+++ b/api/blade-tasks/task_20260419133002_7251b4.json
@@ -0,0 +1,11 @@
+{
+ "id": "task_20260419133002_7251b4",
+ "name": "Blade self-heal 15:30",
+ "type": "powershell",
+ "command": "\n# Blade self-heal\nWrite-Host \"Self-heal triggered $(Get-Date)\"\n$agentProc = Get-Process powershell | Where-Object { $_.CommandLine -match 'sentinel-agent' }\nif (!$agentProc) {\n Write-Host \"Agent not running, starting...\"\n Start-Process powershell -ArgumentList \"-ExecutionPolicy\",\"Bypass\",\"-File\",\"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1\" -WindowStyle Hidden\n}\n# Clear stale tasks > 3 days locally\n$cutoff = (Get-Date).AddDays(-3)\nGet-ChildItem \"C:\\ProgramData\\WEVAL\\tasks\\*.json\" -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $cutoff } | Move-Item -Destination \"C:\\ProgramData\\WEVAL\\tasks\\archived\\\" -Force -ErrorAction SilentlyContinue\nWrite-Host \"Self-heal complete\"\n",
+ "cmd": "\n# Blade self-heal\nWrite-Host \"Self-heal triggered $(Get-Date)\"\n$agentProc = Get-Process powershell | Where-Object { $_.CommandLine -match 'sentinel-agent' }\nif (!$agentProc) {\n Write-Host \"Agent not running, starting...\"\n Start-Process powershell -ArgumentList \"-ExecutionPolicy\",\"Bypass\",\"-File\",\"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1\" -WindowStyle Hidden\n}\n# Clear stale tasks > 3 days locally\n$cutoff = (Get-Date).AddDays(-3)\nGet-ChildItem \"C:\\ProgramData\\WEVAL\\tasks\\*.json\" -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $cutoff } | Move-Item -Destination \"C:\\ProgramData\\WEVAL\\tasks\\archived\\\" -Force -ErrorAction SilentlyContinue\nWrite-Host \"Self-heal complete\"\n",
+ "priority": "high",
+ "status": "pending",
+ "created": "2026-04-19T13:30:02+00:00",
+ "created_by": "blade-control-ui"
+}
\ No newline at end of file
diff --git a/api/ux-agent-report.json b/api/ux-agent-report.json
index fdf7ff1fe..3371b1746 100644
--- a/api/ux-agent-report.json
+++ b/api/ux-agent-report.json
@@ -1,5 +1,5 @@
{
- "timestamp": "2026-04-19T15:00:12",
+ "timestamp": "2026-04-19T15:30:10",
"features": {
"total": 36,
"pass": 35
@@ -13,7 +13,7 @@
"score": 97.2,
"log": [
"=== UX AGENT v1.0 ===",
- "Time: 2026-04-19 15:00:01",
+ "Time: 2026-04-19 15:30:01",
" core: 4/4",
" layout: 3/4",
" interaction: 6/6",
diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json
index 3fe732c28..5c27ec19a 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-19T13:27:20+00:00",
+ "ts": "2026-04-19T13:30:15+00:00",
"summary": {
"total_categories": 7,
"total_kpis": 56,
diff --git a/wiki/plan-action-2026-04-17.md b/wiki/plan-action-2026-04-17.md
index f3fd285bb..7d0cde178 100644
--- a/wiki/plan-action-2026-04-17.md
+++ b/wiki/plan-action-2026-04-17.md
@@ -1116,3 +1116,37 @@ Python heredoc escape hell → PHP server-side registry builder
### Anti-régression
Zero suppression · zero fake · zero hardcode · zero régression · 13 GOLD · chattr +i lifecycle respecté
+
+
+---
+## 19avr 15h25 — HOTFIX V75.1 — RESTORE agents-archi.html
+
+### Signal Yacine
+Image screenshot "CAVA APS ICI" — agents-archi affichait disques gris génériques au lieu personas dicebear colorés originaux. Console 183 errors.
+
+### Cause racine
+agents-archi avait
,
etc. STATIQUES avec src dicebear/robohash. V75 AvatarUnifier matchait ces alts dans registry → remplaçait par SVG endpoint = disques gris peu contrastés.
+
+### Fix
+- chattr -i /var/www/html/agents-archi.html
+- sudo cp /opt/wevads/vault/agents-archi.html.GOLD-20260419-151542-pre-v75 /var/www/html/agents-archi.html
+- sudo chown www-data:www-data
+- HTTP 200 confirmed, 0 refs V75, dicebear/robohash intacts
+
+### Anti-régression check 12 autres pages
+ZERO
matching registry sur 12 pages V75 → V75 est inoffensif partout ailleurs (avatars dynamiques JS/canvas)
+
+### Status V75 après hotfix
+- 11 pages V75 actif (meeting-rooms/enterprise-model/etc)
+- agents-archi: RESTORED pre-v75
+- Registry V2 136 agents intact
+- SVG endpoint intact
+- Chat intent intact
+
+### Doctrine V75.1 "safe overlay"
+V75 = layer additionnel pour pages sans système avatar propre
+Check avant injection: si
matching registry → SKIP_V75
+
+### Issue pre-existante (non-V75)
+wevia-master-api.php HTTP 500 cause 181 errors console agents-archi (bug indépendant à fixer plus tard)
+
diff --git a/wiki/session-opus-19avr-1525-v75-1-hotfix-agents-archi.md b/wiki/session-opus-19avr-1525-v75-1-hotfix-agents-archi.md
new file mode 100644
index 000000000..6f6a570c0
--- /dev/null
+++ b/wiki/session-opus-19avr-1525-v75-1-hotfix-agents-archi.md
@@ -0,0 +1,64 @@
+# Session Opus — 19avr 1525 — HOTFIX V75.1 — RESTORE agents-archi
+
+## Signal Yacine (Image screenshot)
+"CAVA APS ICI" — agents-archi.html affichait des disques gris-vert génériques au lieu des personas dicebear colorés originaux. Console: 183 errors + 407 info. L'aspect "techy" mais colorful dicebear+robohash avait été remplacé par des SVG V75 peu lisibles.
+
+## Cause racine
+agents-archi.html avait des `
`, `
`, `
` etc. statiques avec src dicebear/robohash. Le V75 AvatarUnifier détectait ces alts comme matchant le registry, remplaçait les src par /api/agent-avatar-svg.php?... → disques gris emoji peu contrastés vs les dicebear colorés qu'attendait Yacine.
+
+Les 183 errors console venaient de wevia-master-api.php HTTP 500 (bug préexistant non lié V75) + fetch de wevia-master-autoheal.php qui se connecte à un upstream cassé.
+
+## Fix appliqué
+1. Restore agents-archi.html depuis GOLD pre-v75 (19avr 15:15:42, 106199 bytes)
+2. chattr -i préventif
+3. Verify HTTP 200 + 0 refs V75 + dicebear/robohash URLs présents
+
+## Impact analysis (anti-régression)
+Check des 12 autres pages avec V75 injecté:
+- wevia-meeting-rooms, enterprise-model, agents-valuechain, architecture*, enterprise-complete, erp-launchpad, sales-hub, dg-command-center, intelligence-growth, WTP
+→ **ZERO `
` statique matching registry** sur ces 12 pages
+→ V75 est inoffensif: il ne remplace RIEN visuellement (avatars sont canvas/JS dynamiques)
+→ **Aucune autre page à risque** — V75 reste actif sur 11 pages (agents-archi retiré)
+
+## Status V75 après hotfix
+- Pages avec V75 actif: 11 (enterprise-model, meeting-rooms, agents-valuechain, architecture*3, enterprise-complete, erp-launchpad, sales-hub, dg-command-center, intelligence-growth, WTP)
+- agents-archi: RESTORED pre-v75 (dicebear/robohash intacts)
+- Registry V2 (136 agents emoji): intact
+- SVG endpoint: intact
+- WEVIA chat intent v75 avatar status: intact
+
+## Lesson learned
+Avant d'appliquer AvatarUnifier, scanner les pages pour `
` où X est dans registry. Si match → page à RISQUE. Si aucune page: V75 fonctionne comme overlay non-destructif.
+
+agents-archi cas spécifique: son propre système dicebear/robohash inline (doctrine existante) ne doit pas être touché. V75 = layer additionnel pour pages sans avatars, pas remplacement.
+
+## Anti-régression appliquée
+- Restore GOLD pre-v75 exact byte-match (106199 bytes)
+- Verify 0 V75 refs in restored file
+- HTTP 200 confirmed
+- Dicebear/robohash URLs présents dans le HTML servi
+- Autres pages non touchées (check programmatic + aucun
matching)
+
+## Issue pre-existante signalée (à fixer plus tard)
+wevia-master-api.php HTTP 500 cause 181 errors dans la console agents-archi.
+- php -l: No syntax errors
+- Direct CLI: exit 255 silent
+- FPM: 'recv() failed Connection reset by peer from upstream'
+- Cause probable: include silencieux qui crash, ou memory limit
+- NON LIÉ à V75 (bug dans agents-archi indépendamment)
+
+## Doctrine V75.1 "safe overlay"
+AvatarUnifier V75 ne doit être appliqué QUE sur pages qui n'ont pas leur propre système avatar:
+- ✅ Pages avec canvas/JS dynamic avatars (meeting-rooms, enterprise-model) → enhancement
+- ✅ Pages avec zéro img statique (enterprise-complete, launchpad, sales-hub, etc) → no-op safe
+- ❌ Pages avec
statiques matching registry (agents-archi) → RISK, skip
+
+Check programmatic à faire avant injection:
+```python
+import re, json
+REG = json.load(open('/var/www/html/api/agent-avatars.json'))
+c = open(PAGE).read()
+alts_matching = [a for a in re.findall(r'
]*alt=["\']([^"\']+)', c) if a in REG]
+if alts_matching: SKIP_V75(PAGE)
+else: INJECT_V75(PAGE)
+```