Files
html/ia-registre.html

747 lines
45 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WEVAL — Registre Intelligence IA Souveraine</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Space+Grotesk:wght@300;500;700&family=Playfair+Display:wght@700;900&display=swap" rel="stylesheet">
<style>
*{margin:0;padding:0;box-sizing:border-box}
:root{
--bg:#04060e;--bg2:#0a0e1a;--bg3:#111628;--bg4:#191f38;
--tx:#d8daf0;--tx2:#6068a0;
--gold:#ffd700;--cyan:#00e5ff;--purple:#b388ff;--green:#69f0ae;--red:#ff5252;--orange:#ffab40;--blue:#448aff;--pink:#ff80ab;
--border:#1a2040;
}
body{background:var(--bg);color:var(--tx);font-family:'Space Grotesk',sans-serif;line-height:1.7}
.hero{padding:60px 40px;background:linear-gradient(160deg,#080420 0%,#0a1030 40%,#041020 100%);border-bottom:2px solid var(--gold);position:relative;overflow:hidden}
.hero::after{content:'';position:absolute;top:-100px;right:-100px;width:500px;height:500px;background:radial-gradient(circle,rgba(255,215,0,0.06),transparent 70%);pointer-events:none}
.hero h1{font-family:'Playfair Display',serif;font-size:2.6em;font-weight:900;color:var(--gold)}
.hero .sub{color:var(--tx2);margin-top:8px}
.kpis{display:flex;gap:20px;margin-top:28px;flex-wrap:wrap}
.kpi{background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:14px 22px;text-align:center}
.kpi .v{font-size:2em;font-weight:700;font-family:'JetBrains Mono',monospace}
.kpi .l{font-size:0.65em;text-transform:uppercase;letter-spacing:2px;color:var(--tx2);margin-top:2px}
.container{max-width:1400px;margin:0 auto;padding:30px 40px}
.layer{margin-bottom:50px;border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--bg2)}
.layer-head{padding:20px 28px;display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--border);background:var(--bg3)}
.layer-head .num{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:900;font-size:1.1em;flex-shrink:0}
.layer-head h2{font-size:1.3em;font-weight:700;flex:1}
.layer-head .ct{font-size:0.75em;font-family:'JetBrains Mono',monospace;padding:4px 12px;border-radius:20px}
.layer-body{padding:24px 28px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px}
.card{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:16px 18px;transition:all 0.2s;position:relative}
.card:hover{border-color:var(--gold);box-shadow:0 4px 24px rgba(255,215,0,0.06);transform:translateY(-2px)}
.card .nm{font-weight:700;font-size:0.95em;margin-bottom:4px;display:flex;align-items:center;gap:8px}
.card .nm .ico{font-size:1.1em}
.card .file{font-family:'JetBrains Mono',monospace;font-size:0.72em;color:var(--cyan);margin-bottom:6px;word-break:break-all}
.card .desc{font-size:0.82em;color:var(--tx2);line-height:1.6}
.card .funcs{font-size:0.72em;color:var(--purple);margin-top:8px;font-family:'JetBrains Mono',monospace}
.card .status{position:absolute;top:12px;right:12px;width:10px;height:10px;border-radius:50%}
.st-live{background:var(--green);box-shadow:0 0 8px var(--green)}
.st-vault{background:var(--orange)}
.st-disabled{background:var(--red)}
.st-partial{background:var(--blue)}
.subsection{font-size:0.75em;color:var(--gold);text-transform:uppercase;letter-spacing:3px;margin:20px 0 12px;font-weight:700;font-family:'JetBrains Mono',monospace;padding-bottom:6px;border-bottom:1px solid var(--border)}
.table-wrap{overflow-x:auto;margin:12px 0}
table{width:100%;border-collapse:collapse;font-size:0.82em}
th{background:var(--bg3);color:var(--gold);padding:10px 14px;text-align:left;font-size:0.75em;text-transform:uppercase;letter-spacing:1px}
td{padding:8px 14px;border-bottom:1px solid var(--border);color:var(--tx2)}
tr:hover td{background:var(--bg3);color:var(--tx)}
code{background:var(--bg4);padding:1px 6px;border-radius:3px;font-family:'JetBrains Mono',monospace;font-size:0.9em;color:var(--cyan)}
.legend{display:flex;gap:16px;padding:16px 28px;background:var(--bg3);border-bottom:1px solid var(--border);flex-wrap:wrap}
.legend .i{display:flex;align-items:center;gap:6px;font-size:0.75em;color:var(--tx2)}
.legend .d{width:10px;height:10px;border-radius:50%}
.note{margin-top:16px;padding:14px 18px;background:rgba(255,215,0,0.04);border-left:3px solid var(--gold);border-radius:0 8px 8px 0;font-size:0.82em;color:var(--tx2)}
@media(max-width:768px){
.hero{padding:24px 16px}.hero h1{font-size:1.8em}
.container{padding:16px}.grid{grid-template-columns:1fr}
.kpis{gap:10px}.kpi{padding:10px 14px}.kpi .v{font-size:1.4em}
}
</style>
<!-- DOCTRINE-60-UX-ENRICH direct-inject-20260424-143816 -->
<style id="doctrine60-ux-direct">
/* DOCTRINE-60-UX-ENRICH injected-direct */
body::before {
content: '';
position: fixed;
top: 0; left: 0; width: 100vw; height: 100vh;
background: radial-gradient(circle at 50% 50%, rgba(100,180,255,0.08), transparent 60%);
pointer-events: none;
z-index: -1;
}
.card, .kpi, .panel, .btn {
transition: all 0.3s cubic-bezier(0.2,0,0.1,1);
}
.card:hover, .kpi:hover, .panel:hover {
box-shadow: 0 4px 20px rgba(100,180,255,0.2);
border-color: rgba(100,180,255,0.5);
}
@keyframes pulseD60 {
0%,100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.7; transform: scale(1.05); }
}
.pulse, .live-indicator, .active, .online {
animation: pulseD60 3s ease-in-out infinite;
}
.modal, .chat, .speech, .overlay {
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
.enter-stagger {
animation: enterStagD60 0.5s cubic-bezier(0.2,0,0.1,1) forwards;
}
@keyframes enterStagD60 {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body>
<div class="hero">
<h1>🧠 Intelligence IA Souveraine — Registre Exhaustif</h1>
<div class="sub">Tout ce qui a été créé en 6 mois · Brain Engines · Prompts · KB · RAG · Agents · Providers · Tools · À wirer dans le Sovereign Brain</div>
<div class="kpis">
<div class="kpi"><div class="v" style="color:var(--gold)">6</div><div class="l">Brain Engines</div></div>
<div class="kpi"><div class="v" style="color:var(--cyan)">11</div><div class="l">Agents IA</div></div>
<div class="kpi"><div class="v" style="color:var(--purple)">9</div><div class="l">LLM Providers</div></div>
<div class="kpi"><div class="v" style="color:var(--green)">111</div><div class="l">Fonctions Cognitives</div></div>
<div class="kpi"><div class="v" style="color:var(--orange)">32</div><div class="l">Tables KB</div></div>
<div class="kpi"><div class="v" style="color:var(--blue)">4,500+</div><div class="l">Entrées Knowledge</div></div>
<div class="kpi"><div class="v" style="color:var(--pink)">15,953</div><div class="l">Vectors Qdrant</div></div>
<div class="kpi"><div class="v" style="color:var(--red)">40+</div><div class="l">Catégories KB</div></div>
</div>
</div>
<div class="legend">
<div class="i"><div class="d" style="background:var(--green)"></div>LIVE en production</div>
<div class="i"><div class="d" style="background:var(--orange)"></div>En vault / clé disponible</div>
<div class="i"><div class="d" style="background:var(--blue)"></div>Partiel / à connecter</div>
<div class="i"><div class="d" style="background:var(--red)"></div>Désactivé / DOWN</div>
</div>
<div class="container">
<!-- ═══════════ LAYER 1: BRAIN ENGINES ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--gold);color:#000">1</div>
<h2>Brain Engines — 6 couches cognitives</h2>
<div class="ct" style="background:rgba(255,215,0,0.15);color:var(--gold)">111 FONCTIONS</div>
</div>
<div class="layer-body">
<div class="grid">
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">🧬</span> Brain Nucleus v3</div>
<div class="file">brain-nucleus-clean.php · 1334 lignes · BRAIN_VERSION 3.0-opus</div>
<div class="desc">Cœur souverain WEVIA. 10 modules cognitifs qui construisent dynamiquement le system prompt selon le contexte du message.</div>
<div class="funcs">23 fonctions: getCorePersonality(), getCognitiveEngine(), getCodeMastery(), getSSHMastery(), getGraphEngine(), getMemorySystem(), getDomainExpertise(), getFewShotExamples() ×8 dialogues, getSelfVerification(), getNaturalLanguage(), buildSovereignPrompt(), buildGPUPrompt(), getNucleusPrompt()</div>
</div>
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">🎯</span> Cognitive Brain</div>
<div class="file">cognitive-brain.php · 20 fonctions</div>
<div class="desc">Routage intelligent des requêtes. Classifie l'intent, sélectionne le persona, injecte le deep knowledge, gère la désambiguïsation et le guard anti-hallucination.</div>
<div class="funcs">20 fonctions: classifyIntent(), selectPersona(), injectDeepKnowledge(), cognitiveRouting(), disambiguate(), hallucinationGuard(), calibrateTemperature(), extractMemoryEntities(), contextualExpansion(), responseShaping()</div>
</div>
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico"></span> Cognitive Opus46</div>
<div class="file">cognitive-opus46.php · 20 fonctions</div>
<div class="desc">Raisonnement avancé niveau Opus. Chain-of-Thought (CoT), sélection de stratégie (causal, parallel, counterfactual, dialectical), mesure de cohérence, meta-confidence.</div>
<div class="funcs">20 fonctions: chainOfThought(), selectStrategy(), causalReasoning(), parallelAnalysis(), counterfactualThinking(), dialecticalReasoning(), measureCoherence(), metaConfidence(), reasoningDepth(), adaptiveComplexity()</div>
</div>
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">🛡️</span> Cognitive Opus46 Advanced</div>
<div class="file">cognitive-opus46-advanced.php · 20 fonctions</div>
<div class="desc">Pipeline d'auto-correction. Détecte contradictions logiques, nombres hallucinés, réponses tronquées, mismatch de langue. Sélection GPU optimale.</div>
<div class="funcs">20 fonctions: selfCorrectionPipeline(), detectLogicalContradiction(), detectHallucinatedNumbers(), detectTruncatedResponse(), detectLanguageMismatch(), selectGPUModel(), qualityGate(), responseValidator(), confidenceCalibrator(), errorRecovery()</div>
</div>
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">🌍</span> Cognitive Expansion</div>
<div class="file">cognitive-expansion.php · 15 fonctions</div>
<div class="desc">Expertise sectorielle. Détecte le domaine métier et injecte le vocabulaire, les KPIs, les réglementations spécifiques au secteur.</div>
<div class="funcs">15 domaines: pharma, finance, manufacturing, retail, energy, telecom, healthcare, education, insurance, real_estate, agriculture, transport, media, legal, HR</div>
</div>
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">🔄</span> Cognitive GPU Rotation</div>
<div class="file">cognitive-gpu-rotation.php · 13 fonctions</div>
<div class="desc">Pipeline GPU souverain. Rotation des modèles locaux selon la charge et le type de requête. Cross-vérification entre modèles. Fallback cloud si GPU saturé.</div>
<div class="funcs">13 fonctions: sovereignGPUPipeline(), rotateModel(), crossVerify(), healthCheck(), cloudFallback(), loadBalance(), modelSelector(), performanceTracker(), contextWindowManager(), batchOptimizer()</div>
</div>
</div>
</div>
</div>
<!-- ═══════════ LAYER 2: SOVEREIGN AGENTS ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--cyan);color:#000">2</div>
<h2>Agents IA Souverains — 11 agents actifs</h2>
<div class="ct" style="background:rgba(0,229,255,0.15);color:var(--cyan)">11 ENDPOINTS</div>
</div>
<div class="layer-body">
<div class="table-wrap">
<table>
<tr><th>Agent</th><th>Endpoint</th><th>Rôle</th><th>Intents</th><th>Status</th></tr>
<tr><td><strong>WEVIA Master</strong></td><td><code>/api/wevia-master-api.php</code></td><td>Cerveau central, orchestration multi-agent, pilotage chat</td><td>134</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>WEVIA Autonomous</strong></td><td><code>/api/wevia-autonomous.php</code></td><td>Exécution autonome: code_exec, ssh, email, search, doc, file, url + 12 intents action</td><td>134 + SSE</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>WEVIA Director</strong></td><td><code>/api/wevia-director.php</code></td><td>Supervision infra, cron */15min, 39 métriques, actions correctives auto</td><td>39 obs</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>L99 Brain</strong></td><td><code>/api/l99-chat.php</code></td><td>Quality assurance, grille 3col + 16 boutons, tests automatisés</td><td>QA</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>WeDroid</strong></td><td><code>/api/wedroid-brain-api.php</code></td><td>Terminal IA souverain, 1029 lignes, 8 modules, AI Brain + TG Alerts</td><td>8 modules</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>Chatbot Public</strong></td><td><code>/api/weval-chatbot-api.php</code></td><td>Interface publique WEVIA Arena, 134KB, 751 fonctions, smart router v5</td><td>18 intents</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>Turbo</strong></td><td><code>wevia-turbo.php</code></td><td>Fast-path vLLM direct 5-15s, capability routing (image/PDF/schema → pipeline)</td><td>Routing</td><td style="color:var(--blue)">🔵 PARTIEL</td></tr>
<tr><td><strong>Multi-Agent</strong></td><td><code>wevia-multi-agent.php</code></td><td>6 agents (Researcher, Critic, Writer, Planner, Coder, Debugger), 4 modes, consensus MoA</td><td>6 agents</td><td style="color:var(--blue)">🔵 PARTIEL</td></tr>
<tr><td><strong>Blade Razer</strong></td><td><code>/api/blade-agent.php</code></td><td>Agent desktop local, polling 30s, 50+ actions, 58d uptime</td><td>50+</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>MiroFish</strong></td><td><code>:5001</code></td><td>Agent autonome + auto-fix. Health check + restart auto</td><td>Auto</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>DeerFlow</strong></td><td><code>:2024</code></td><td>ByteDance multi-agent research framework</td><td>Research</td><td style="color:var(--blue)">🔵 DOCKER</td></tr>
</table>
</div>
<div class="note">
<strong>Agents désactivés :</strong> Paperclip (:3201 DISABLED), Langfuse (:3100 observability), Ollama S151 (DOWN firewall). N8N workflows inactifs (crons compensent).
</div>
</div>
</div>
<!-- ═══════════ LAYER 3: LLM PROVIDERS ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--purple);color:#000">3</div>
<h2>LLM Providers — 9 actifs + hiérarchie souveraine</h2>
<div class="ct" style="background:rgba(179,136,255,0.15);color:var(--purple)">SOVEREIGN FIRST</div>
</div>
<div class="layer-body">
<div class="subsection">RANG 1 — Souverain (Ollama Local)</div>
<div class="table-wrap">
<table>
<tr><th>Modèle</th><th>Taille</th><th>Usage</th><th>Latence</th><th>Status</th></tr>
<tr><td><code>qwen3:4b</code></td><td>4B</td><td>Fast general, greetings</td><td>~300ms</td><td style="color:var(--green)"></td></tr>
<tr><td><code>gemma4:e4b</code></td><td>4B</td><td>General purpose</td><td>~400ms</td><td style="color:var(--green)"></td></tr>
<tr><td><code>nomic-embed-text</code></td><td>137M</td><td>Embeddings RAG</td><td>~50ms</td><td style="color:var(--green)"></td></tr>
<tr><td><code>all-minilm</code></td><td>33M</td><td>Embeddings légers</td><td>~20ms</td><td style="color:var(--green)"></td></tr>
<tr><td><code>glm-4:9b</code></td><td>9B</td><td>Bilingual CN/EN</td><td>~800ms</td><td style="color:var(--orange)">📦 Installé</td></tr>
<tr><td><code>moondream</code></td><td>1.8B</td><td>Vision / OCR</td><td>~500ms</td><td style="color:var(--orange)">📦 Installé</td></tr>
<tr><td><code>deepseek-r1:14b</code></td><td>14B</td><td>Deep reasoning</td><td>~3s</td><td style="color:var(--orange)">📦 ex-GPU</td></tr>
<tr><td><code>deepseek-r1:32b</code></td><td>32B</td><td>Heavy reasoning</td><td>~15s</td><td style="color:var(--orange)">📦 ex-GPU</td></tr>
<tr><td><code>qwen2.5-coder:14b</code></td><td>14B</td><td>Code specialist</td><td>~5s</td><td style="color:var(--orange)">📦 ex-GPU</td></tr>
<tr><td><code>llama3.1:8b</code></td><td>8B</td><td>Fast general</td><td>~300ms</td><td style="color:var(--orange)">📦 ex-GPU</td></tr>
</table>
</div>
<div class="subsection">RANG 2 — Cloud Gratuit (Fallback)</div>
<div class="table-wrap">
<table>
<tr><th>Provider</th><th>Modèle</th><th>Latence</th><th>Limite</th><th>Status</th></tr>
<tr><td><strong>Groq</strong></td><td>llama-3.3-70b-versatile</td><td>192ms</td><td>Clé vault</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>Cerebras</strong></td><td>qwen-3-235b-a22b</td><td>429ms</td><td>2M tokens/day (2 clés)</td><td style="color:var(--green)">✅ LIVE</td></tr>
<tr><td><strong>SambaNova</strong></td><td>Meta-Llama-3.3-70B</td><td>800ms</td><td>Clé vault</td><td style="color:var(--orange)">📦 Vault</td></tr>
<tr><td><strong>NVIDIA</strong></td><td>GLM-5</td><td>~1s</td><td>nvapi key</td><td style="color:var(--orange)">📦 Vault</td></tr>
<tr><td><strong>Gemini</strong></td><td></td><td></td><td>Quota 429</td><td style="color:var(--red)">❌ DOWN</td></tr>
<tr><td><strong>OpenRouter</strong></td><td>qwen3.6-plus:free</td><td>~2s</td><td>Free tier</td><td style="color:var(--orange)">📦 Vault</td></tr>
<tr><td><strong>Cloudflare</strong></td><td>Workers AI</td><td>~1s</td><td>Account active</td><td style="color:var(--orange)">📦 Vault</td></tr>
</table>
</div>
<div class="subsection">Cascade Failover</div>
<div class="note">
<code>Ollama Local → Groq → Cerebras → SambaNova → NVIDIA → Gemini → OpenRouter → Cloudflare</code><br>
Rotation automatique: si provider KO (timeout/429/402), passe au suivant. hamid_providers table: 12 providers configurés avec failover auto.
</div>
</div>
</div>
<!-- ═══════════ LAYER 4: KNOWLEDGE BASE ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--green);color:#000">4</div>
<h2>Knowledge Base — 32 tables, 4,500+ entrées</h2>
<div class="ct" style="background:rgba(105,240,174,0.15);color:var(--green)">INTERNAL ONLY</div>
</div>
<div class="layer-body">
<div class="subsection">Tables KB principales (PostgreSQL)</div>
<div class="table-wrap">
<table>
<tr><th>Table</th><th>Entrées</th><th>Contenu</th><th>Injection</th></tr>
<tr><td><code>knowledge_base</code></td><td>~3,700</td><td>KB générale — SAP, Cloud, IA, Pharma, Consulting, Data, Code, Énergie, Finance...</td><td>53 entrées session fév + batches 9-40</td></tr>
<tr><td><code>hamid_knowledge</code></td><td>~120</td><td>Knowledge HAMID spécialisée — 14 catégories approfondies</td><td>Injection directe</td></tr>
<tr><td><code>brain_knowledge</code></td><td>~123</td><td>Nexus brain: techniques raisonnement, frameworks consulting, innovations IA scrapées</td><td>54 + cron auto-enrichment</td></tr>
<tr><td><code>chatbot_knowledge</code></td><td>~4,000</td><td>Q&A pairs pour chatbot — questions/réponses pré-formatées avec tags</td><td>25+ par batch</td></tr>
<tr><td><code>commonia_knowledge</code></td><td></td><td>Knowledge commune cross-agents</td><td>Auto</td></tr>
<tr><td><code>kb_documents</code></td><td></td><td>Documents indexés (PDF, DOCX analysés)</td><td>Upload</td></tr>
<tr><td><code>kb_learnings</code></td><td></td><td>Faits appris automatiquement des conversations</td><td>Auto-learn</td></tr>
<tr><td><code>chatbot_conversations</code></td><td></td><td>Historique conversations pour mémoire contextuelle</td><td>Auto</td></tr>
<tr><td><code>chatbot_pending_knowledge</code></td><td></td><td>Faits en attente de validation</td><td>Auto</td></tr>
<tr><td><code>admin.weval_mind_learning</code></td><td></td><td>Apprentissage WEVAL Mind</td><td>Auto-learn</td></tr>
</table>
</div>
<div class="subsection">Catégories KB injectées (40+ batches)</div>
<div class="grid">
<div class="card">
<div class="nm"><span class="ico">🏭</span> SAP / ERP</div>
<div class="desc">S/4HANA architecture, MM, SD, FI, CO, PP, QM, WM. Fiori UX. Migration brownfield/greenfield/bluefield. BTP, ABAP, EWM, RE.</div>
</div>
<div class="card">
<div class="nm"><span class="ico">💊</span> Pharma / Santé</div>
<div class="desc">Drug development pipeline, GMP, pharmacovigilance, SOTHEMA, ANRP, DMP, HealthTech, IQVIA, télémédecine. Ethica HCP data.</div>
</div>
<div class="card">
<div class="nm"><span class="ico">🤖</span> IA / ML / LLM</div>
<div class="desc">Chain-of-Thought, Tree of Thoughts, RAG avancé, Graph RAG, RLHF, vision transformers, LLM landscape 2026, déploiement GPU, quantification.</div>
</div>
<div class="card">
<div class="nm"><span class="ico">☁️</span> Cloud / Infrastructure</div>
<div class="desc">Huawei Cloud (ECS, VPC, ELB, OBS), AWS, Azure, Scaleway. Architecture type WEVAL. Kubernetes, Docker, serverless.</div>
</div>
<div class="card">
<div class="nm"><span class="ico">🔐</span> Cybersécurité</div>
<div class="desc">OWASP Top 10, Zero Trust, SOC, SIEM, pen testing, WAF, fail2ban. Conformité RGPD, CNDP, INPDP.</div>
</div>
<div class="card">
<div class="nm"><span class="ico">📧</span> Email Marketing</div>
<div class="desc">WEVADS pipeline E2E, Brain Engine configs, warmup strategy, ISP routing, PMTA, deliverability, SPF/DKIM/DMARC, reputation monitoring.</div>
</div>
<div class="card">
<div class="nm"><span class="ico">📊</span> Consulting / Strategy</div>
<div class="desc">McKinsey 7S, BCG Matrix, Porter, SWOT, Lean Six Sigma, DMAIC, 8D, RACI, Value Stream Mapping, OKR, Balanced Scorecard.</div>
</div>
<div class="card">
<div class="nm"><span class="ico">🌍</span> Géopolitique / Maroc</div>
<div class="desc">Stratégie économique Maroc, ZLECAf, finance islamique, Sahara, Plan Maroc Digital 2030, CFC Casablanca.</div>
</div>
</div>
<div class="note">Autres catégories injectées: Supply Chain, Aéro/Défense, Automobile, Finance/Banking, Data Science, Énergie, Telecom, Retail, Biotech, Espace, Psycho, Communication, Sciences, Philosophie, Maths, Art, Droit, RH, PM, Éducation, Industrie 4.0.</div>
<div class="subsection">Cron Auto-Enrichissement</div>
<div class="card" style="max-width:600px">
<div class="nm"><span class="ico">🔄</span> kb-auto-enrichment.php</div>
<div class="file">Cron */6h · Interroge LLM pour générer nouvelles entrées KB</div>
<div class="desc">Identifie catégories faibles (< 5 entrées) ou stale (> 7 jours). Utilise Groq/Cerebras/Ollama pour générer du contenu expert. Injecte dans knowledge_base + chatbot_knowledge automatiquement.</div>
</div>
</div>
</div>
<!-- ═══════════ LAYER 5: RAG / VECTOR STORES ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--orange);color:#000">5</div>
<h2>RAG & Vector Stores — Qdrant 15,953 vectors</h2>
<div class="ct" style="background:rgba(255,171,64,0.15);color:var(--orange)">4 COLLECTIONS</div>
</div>
<div class="layer-body">
<div class="grid">
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">📚</span> wevia_kb</div>
<div class="desc">Collection principale — Knowledge base vectorisée. Embedding via nomic-embed-text (Ollama local). Recherche sémantique pour le contexte LLM.</div>
</div>
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">📖</span> wevia_learnings</div>
<div class="desc">Apprentissage automatique — Faits extraits des conversations, validés et vectorisés pour enrichissement continu.</div>
</div>
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">🛠️</span> weval_skills</div>
<div class="desc">Catalogue de compétences WEVAL — Skills consulting, techniques, méthodologies indexées pour matching contextuel.</div>
</div>
<div class="card"><div class="status st-live"></div>
<div class="nm"><span class="ico">🧠</span> wevia_memory</div>
<div class="desc">Mémoire conversationnelle — Historique vectorisé des échanges pour rappel contextuel long-terme.</div>
</div>
</div>
<div class="subsection">Architecture RAG</div>
<div class="note">
<code>Query → Embedding (nomic-embed) → Qdrant Vector Search → Top-K Context → System Prompt Injection → LLM → Response</code><br><br>
<strong>Techniques RAG implémentées :</strong> Hybrid search (dense + BM25 sparse via PostgreSQL full-text), KB filter pricing actif, chunking sémantique, reranking par confidence score.
<br><br>
<strong>Graph RAG :</strong> <code>wevia-graph-rag.php</code> — 4 couches d'entités avec relations. Knowledge graph + RAG combinés (Microsoft GraphRAG pattern).
<br><br>
<strong>Contextual Retrieval :</strong> Ajout de contexte aux chunks avant embedding (pattern Anthropic). wevia_kb contient le contexte enrichi.
</div>
</div>
</div>
<!-- ═══════════ LAYER 6: TOOLS & CAPABILITIES ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--pink);color:#000">6</div>
<h2>Tools & Capabilities — 15 outils exécutables</h2>
<div class="ct" style="background:rgba(255,128,171,0.15);color:var(--pink)">TOOL USE</div>
</div>
<div class="layer-body">
<div class="grid">
<div class="card"><div class="nm"><span class="ico">💻</span> Code Execution</div>
<div class="file">wevia-code-exec.php · 4 langages · sandbox</div>
<div class="desc">Exécute Python, PHP, JS, Bash dans un sandbox. Débogueur auto-fix 3 tentatives (wevia-debugger.php).</div></div>
<div class="card"><div class="nm"><span class="ico">📐</span> Math Solver</div>
<div class="file">wevia-math-solver.php · 8 actions</div>
<div class="desc">SymPy + numpy + scipy + pandas. Résolution symbolique, calcul DPMO, statistiques.</div></div>
<div class="card"><div class="nm"><span class="ico">🖼️</span> Image Generation</div>
<div class="file">wevia-image.php · Pollinations FLUX / sd-turbo GPU</div>
<div class="desc">Pollinations.ai FLUX inline (185ms) + fallback sd-turbo sur GPU RTX 4000 (0.25s). SVG artistique si tout down.</div></div>
<div class="card"><div class="nm"><span class="ico">📊</span> Mermaid Diagrams</div>
<div class="file">mmdc local + Groq 70b</div>
<div class="desc">Flowchart, séquence, classe, ERD, Gantt, BPMN, Ishikawa. Rendu PNG via Puppeteer (--no-sandbox).</div></div>
<div class="card"><div class="nm"><span class="ico">📄</span> PDF Generation</div>
<div class="file">wevia-generate-pdf.php · ReportLab + FPDF</div>
<div class="desc">PDF professionnels avec charts Matplotlib, KPIs, sommaire. Templates: rapport exécutif, audit, propale.</div></div>
<div class="card"><div class="nm"><span class="ico">📽️</span> PowerPoint</div>
<div class="file">Pipeline capability routing</div>
<div class="desc">Génération PPTX via pipeline original. Détecté par wevia-turbo capability router.</div></div>
<div class="card"><div class="nm"><span class="ico">👁️</span> Vision / OCR</div>
<div class="file">Moondream local + Tesseract</div>
<div class="desc">Analyse d'images, extraction texte. Moondream 1.8B tournait sur GPU local.</div></div>
<div class="card"><div class="nm"><span class="ico">🔊</span> TTS Voice</div>
<div class="file">Web Speech API · 9 langues</div>
<div class="desc">Text-to-Speech côté client. Bouton 🔊 replay sur chaque réponse. FR, EN, ES, AR, DE, IT, PT, ZH, JA.</div></div>
<div class="card"><div class="nm"><span class="ico">🌐</span> Web Search</div>
<div class="file">SearXNG intégré</div>
<div class="desc">Recherche web privée via SearXNG self-hosted. Résultats injectés dans le contexte LLM.</div></div>
<div class="card"><div class="nm"><span class="ico">🔌</span> SSH Execution</div>
<div class="file">wevia-exec.php · wevia-autonomous.php</div>
<div class="desc">Exécution de commandes SSH distantes. 12 intents action: restart, cleanup, git, start, ssl, ethica.</div></div>
<div class="card"><div class="nm"><span class="ico">📋</span> Planner</div>
<div class="file">wevia-planner.php</div>
<div class="desc">Planification multi-étapes: décomposition tâches, dépendances, allocation agents, timeline.</div></div>
<div class="card"><div class="nm"><span class="ico">🧮</span> KaTeX Math</div>
<div class="file">Injecté dans 3 frontends</div>
<div class="desc">Rendu LaTeX des formules mathématiques inline dans les réponses chatbot.</div></div>
<div class="card"><div class="nm"><span class="ico">📎</span> File Upload</div>
<div class="file">Drag & drop multi-format</div>
<div class="desc">PDF, images, code, CSV, XLSX. Analyse multi-modale. Extraction texte + résumé IA.</div></div>
<div class="card"><div class="nm"><span class="ico">🎨</span> Canvas/Artifacts</div>
<div class="file">Iframes sandboxés</div>
<div class="desc">HTML/CSS/JS interactifs rendus côté client. Mode side-by-side editing.</div></div>
<div class="card"><div class="nm"><span class="ico">🔍</span> Semantic Search</div>
<div class="file">PostgreSQL full-text + Qdrant</div>
<div class="desc">Hybrid search: to_tsvector/to_tsquery PostgreSQL (BM25) + Qdrant dense vectors. Reranking par confidence.</div></div>
</div>
</div>
</div>
<!-- ═══════════ LAYER 7: PROMPTS & TECHNIQUES ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--blue);color:#fff">7</div>
<h2>Prompts & Techniques de Raisonnement</h2>
<div class="ct" style="background:rgba(68,138,255,0.15);color:var(--blue)">SOVEREIGN PROMPT</div>
</div>
<div class="layer-body">
<div class="subsection">System Prompt Dynamique (getNucleusPrompt)</div>
<div class="card" style="max-width:100%">
<div class="desc">Le system prompt est <strong>construit dynamiquement</strong> à chaque requête selon l'intent détecté. Il charge les modules pertinents de Brain Nucleus v3 et injecte les données temps réel depuis brain_knowledge (catégorie 'nexus').</div>
<div class="funcs">Structure: IDENTITÉ WEVIA → TECHNIQUES RAISONNEMENT (auto-loaded) → FRAMEWORKS CONSULTING (auto-loaded) → CAPACITÉS META (auto-loaded) → INNOVATIONS IA SCRAPÉES (auto-updated) → ÉTAT TEMPS RÉEL (KB count, providers actifs) → RÈGLES (langue, complexité adaptative, expertise)</div>
</div>
<div class="subsection">Techniques de Raisonnement Injectées</div>
<div class="grid">
<div class="card">
<div class="nm"><span class="ico">🔗</span> Chain-of-Thought (CoT)</div>
<div class="desc">Zero-shot: "Réfléchissons étape par étape". Few-shot: exemples avec raisonnement complet. Self-consistency: échantillonner plusieurs chemins, voter majorité.</div></div>
<div class="card">
<div class="nm"><span class="ico">🌳</span> Tree of Thoughts</div>
<div class="desc">Explorer des chemins de raisonnement arborescents avec backtracking. Pour problèmes complexes multi-étapes.</div></div>
<div class="card">
<div class="nm"><span class="ico">🔄</span> Chain of Verification</div>
<div class="desc">Vérifier chaque affirmation contre les sources. Auto-critique systématique. Confidence scoring.</div></div>
<div class="card">
<div class="nm"><span class="ico">🧬</span> Constitutional AI</div>
<div class="desc">Principes éthiques intégrés. Self-correction si réponse potentiellement nocive ou biaisée.</div></div>
<div class="card">
<div class="nm"><span class="ico">🎭</span> Dialectical Reasoning</div>
<div class="desc">Thèse → Antithèse → Synthèse. Explorer les deux côtés d'un argument. Opus46 cognitive layer.</div></div>
<div class="card">
<div class="nm"><span class="ico">🔀</span> Counterfactual Thinking</div>
<div class="desc">"Et si on faisait l'inverse?" Tester des hypothèses alternatives pour valider la conclusion.</div></div>
<div class="card">
<div class="nm"><span class="ico">📊</span> Causal Reasoning</div>
<div class="desc">Identifier les relations cause-effet. Distinguer corrélation et causalité. Analyse root cause.</div></div>
<div class="card">
<div class="nm"><span class="ico">🧠</span> Meta-Cognition</div>
<div class="desc">"Suis-je en train de bien raisonner?" Auto-évaluation de la qualité du raisonnement. Meta-confidence scoring.</div></div>
</div>
<div class="subsection">Frameworks Consulting (auto-injectés selon domaine)</div>
<div class="note">
McKinsey 7S · BCG Growth-Share Matrix · Porter 5 Forces · SWOT/PESTEL · Lean Six Sigma DMAIC · 8D Problem Solving · RACI Matrix · Value Stream Mapping · OKR · Balanced Scorecard · Design Thinking · Agile/Scrum · TOGAF · ITIL
</div>
<div class="subsection">Sanitization & Guard</div>
<div class="grid">
<div class="card">
<div class="nm"><span class="ico">🛡️</span> Hallucination Guard</div>
<div class="desc">Détection nombres hallucinés, contradictions logiques, réponses tronquées, mismatch de langue. Pipeline self-correction Opus46 Advanced.</div></div>
<div class="card">
<div class="nm"><span class="ico">🧹</span> Final Sanitizer</div>
<div class="file">final-sanitizer.php</div>
<div class="desc">Strips ALL emojis (Unicode ranges), headers "Analyse", 12 patterns de prompt leak. Nettoie les métadonnées internes avant envoi au client.</div></div>
<div class="card">
<div class="nm"><span class="ico">🔒</span> Business Rules Guard</div>
<div class="desc">applyBusinessRules() — métadonnées internes déplacées en JSON rules_warning (invisible client). JAMAIS exposer GPU/modèle/temps.</div></div>
</div>
</div>
</div>
<!-- ═══════════ LAYER 8: WEVAL MIND CYCLE ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--red);color:#fff">8</div>
<h2>WEVAL Mind — Cycle Autonome Perception → Action → Learn</h2>
<div class="ct" style="background:rgba(255,82,82,0.15);color:var(--red)">CRON */5-15MIN</div>
</div>
<div class="layer-body">
<div class="card" style="max-width:100%">
<div class="desc" style="font-size:0.9em;color:var(--tx)">
<strong>Cycle WEVAL Mind (cron-mind-cycle.php) :</strong><br><br>
<code>PERCEPTION</code> → Collecte CPU/RAM/Disk, emails sent/bounced, O365 status, Brain configs, providers health<br>
<code>DIAGNOSTIC</code> → Applique règles seuils + cas complexes → HAMID IA (cascade providers)<br>
<code>PLANNING</code> → CRITICAL=action immédiate, WARNING=planifié. Vérifie si action similaire a marché (mind_learnings)<br>
<code>EXECUTION</code> → Auto-actions exécutées, actions sensibles en queue pour approbation<br>
<code>LEARNING</code> → Compare avant/après, score efficacité, stocke leçon dans KB<br>
<code>MONITORING</code> → Dashboard temps réel (mind_cycles), heatmap incidents, KPIs<br>
<code>ALERTES</code> → CRITICAL=Telegram immédiat, WARNING=Dashboard, Rapport=Email digest 8h00
</div>
</div>
<div class="subsection">Scripts Autonomes (21 scripts)</div>
<div class="table-wrap">
<table>
<tr><th>Script</th><th>Fréquence</th><th>Rôle</th></tr>
<tr><td><code>auto-fix.sh</code></td><td>Manuel / Director</td><td>SSO + Docker + Disk + Nginx + PHP-FPM auto-repair</td></tr>
<tr><td><code>mega-scan.sh</code></td><td>Manuel</td><td>Audit 4 machines complet</td></tr>
<tr><td><code>l99-exhaustive.sh</code></td><td>Manuel / Cron</td><td>60 tests sur 10 couches</td></tr>
<tr><td><code>l99-e2e-test.py</code></td><td>Manuel</td><td>Playwright 18 pages + screenshots + vidéo</td></tr>
<tr><td><code>sso-guardian.sh</code></td><td>*/5min</td><td>Check auth + auto-flush cookies</td></tr>
<tr><td><code>registry-test.sh</code></td><td>Manuel</td><td>169/169 pages check</td></tr>
<tr><td><code>nonreg-check.sh</code></td><td>Daily</td><td>153/153 tests anti-régression</td></tr>
<tr><td><code>infra-check.sh</code></td><td>Director</td><td>Providers IA + services status</td></tr>
<tr><td><code>sso-check.sh</code></td><td>Director</td><td>Auth check détaillé</td></tr>
<tr><td><code>html-guardian.sh</code></td><td>*/10min</td><td>5 checks: taille, troncature, critical tags, PHP, MD5</td></tr>
<tr><td><code>sentinel-autorepair.sh</code></td><td>*/30min</td><td>PHP syntax + chaîne HTML Guardian</td></tr>
<tr><td><code>deploy-validator.sh</code></td><td>Pre-deploy</td><td>Bloque troncature, JS cassé, régression taille</td></tr>
<tr><td><code>live-stats.js</code></td><td>Continu</td><td>Métriques temps réel injectées sur 11 pages</td></tr>
<tr><td><code>kb-auto-enrichment.php</code></td><td>*/6h</td><td>Auto-génère KB via LLM pour catégories faibles</td></tr>
<tr><td><code>wevia-self-monitor.sh</code></td><td>*/5min</td><td>Auto-détecte et fixe problèmes courants</td></tr>
</table>
</div>
</div>
</div>
<!-- ═══════════ LAYER 9: NOMENCLATURE ═══════════ -->
<div class="layer">
<div class="layer-head">
<div class="num" style="background:var(--cyan);color:#000">9</div>
<h2>Nomenclature — Mapping HAMID → WEVAL</h2>
<div class="ct" style="background:rgba(0,229,255,0.15);color:var(--cyan)">REBRANDING</div>
</div>
<div class="layer-body">
<div class="table-wrap">
<table>
<tr><th>Ancien nom</th><th>Nouveau nom</th><th>Contexte</th></tr>
<tr><td><code>WEVADS</code></td><td><strong>WEVAL</strong></td><td>Platform name</td></tr>
<tr><td><code>DELIVERADS</code></td><td><strong>WEVAL SEND</strong></td><td>Delivery system</td></tr>
<tr><td><code>HAMID IA</code></td><td><strong>WEVAL MIND</strong></td><td>AI assistant</td></tr>
<tr><td><code>HAMID</code></td><td><strong>WEVAL MIND</strong></td><td>AI references</td></tr>
<tr><td><code>Brain Engine</code></td><td><strong>WEVAL BRAIN</strong></td><td>Auto-learning (part of MIND)</td></tr>
<tr><td><code>adx_system</code></td><td><strong>weval_system</strong></td><td>Database name</td></tr>
<tr><td><code>adx_clients</code></td><td><strong>weval_clients</strong></td><td>Database name</td></tr>
<tr><td><code>/opt/wevads/</code></td><td><strong>/opt/weval/</strong></td><td>File paths</td></tr>
<tr><td><code>hamid-files</code></td><td><strong>weval-mind-files</strong></td><td>AI knowledge base</td></tr>
<tr><td><code>hamid_providers</code></td><td><strong>weval_providers</strong></td><td>DB table IA providers</td></tr>
<tr><td><code>hamid_knowledge</code></td><td><strong>weval_knowledge</strong></td><td>DB table knowledge</td></tr>
</table>
</div>
<div class="note">⚠️ Le rebranding est documenté mais <strong>PAS encore appliqué en production</strong>. Les fichiers et tables utilisent encore les anciens noms. Migration à planifier.</div>
</div>
</div>
</div>
<div style="text-align:center;padding:30px 40px;color:var(--tx2);font-size:0.75em;border-top:1px solid var(--border)">
WEVAL Consulting — Registre Intelligence IA Souveraine v1 — Avril 2026<br>
6 Brain Engines · 11 Agents · 9 Providers · 111 Fonctions Cognitives · 32 Tables KB · 4,500+ Entrées · 15,953 Vectors · 15 Tools · 21 Scripts Autonomes<br>
Compilé depuis 6 mois de sessions Claude · Tout à wirer dans le Sovereign Brain
</div>
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
<script>
(function(){
if (window.__opusUniversalDrill) return; window.__opusUniversalDrill = true;
var d = document;
var m = d.createElement('div');
m.id = 'opus-udrill';
m.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:99995;padding:20px;cursor:pointer';
var inner = d.createElement('div');
inner.id = 'opus-udrill-in';
inner.style.cssText = 'max-width:900px;width:100%;max-height:90vh;overflow:auto;background:#0b0d15;border:1px solid rgba(99,102,241,0.35);border-radius:14px;padding:28px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6);color:#e2e8f0;font:14px/1.55 Inter,system-ui,sans-serif';
inner.addEventListener('click', function(e){ e.stopPropagation(); });
m.appendChild(inner);
m.addEventListener('click', function(){ m.style.display='none'; });
d.addEventListener('keydown', function(e){ if(e.key==='Escape') m.style.display='none'; });
(d.body || d.documentElement).appendChild(m);
function openCard(card) {
// Clone card content + show close btn + increase font-size
var html = '<div style="display:flex;justify-content:flex-end;margin-bottom:14px"><button id="opus-udrill-close" style="padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.25);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button></div>';
html += '<div style="transform-origin:top left;font-size:1.05em">' + card.outerHTML + '</div>';
inner.innerHTML = html;
d.getElementById('opus-udrill-close').onclick = function(){ m.style.display='none'; };
m.style.display = 'flex';
}
function wire(root) {
var sels = '.card,[class*="card"],.kpi,[class*="kpi"],.stat,[class*="stat"],.tile,[class*="tile"],.metric,[class*="metric"],.widget,[class*="widget"]';
var cards = root.querySelectorAll(sels);
for (var i = 0; i < cards.length; i++) {
var c = cards[i];
if (c.__opusWired) continue;
if (c.closest('button, a, input, select, textarea, #opus-udrill')) continue;
var r = c.getBoundingClientRect();
if (r.width < 60 || r.height < 40) continue;
c.__opusWired = true;
c.style.cursor = 'pointer';
c.setAttribute('role','button');
c.setAttribute('tabindex','0');
c.addEventListener('click', function(ev){
// If a more-specific drill is already active (e.g. pp-card custom), let it handle
if (ev.target.closest('[data-pp-id]') && window.__opusDrillInit) return;
if (ev.target.closest('a,button,input,select')) return;
ev.preventDefault(); ev.stopPropagation();
openCard(this);
});
c.addEventListener('keydown', function(ev){ if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();openCard(this);} });
}
}
// Initial + mutation observer
var initRun = function(){ wire(d.body || d.documentElement); };
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
else initRun();
var mo = new MutationObserver(function(muts){
var newCard = false;
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
if (newCard) initRun();
});
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
})();
</script>
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
<!-- === OPUS HONEST NR/L99 OVERLAY v1 19avr - append-only doctrine #14 === -->
<script>
(function(){
if (window.__opusHonestOverlay) return; window.__opusHonestOverlay = true;
async function updateHonestValues(){
try {
const r = await fetch('/api/l99-honest.php', {cache:'no-store'});
const d = await r.json();
if (!d.ok) return;
const realNR = `${d.combined.pass}/${d.combined.total}`;
const realSigma = d.sigma;
// Find elements showing the myth values
const mythRegex = /(153\/153|304\/304|NR status 153\/153|L99 status 304\/304|NR 153\/153|L99 304\/304)/g;
// Walk text nodes
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
const toReplace = [];
let node;
while (node = walker.nextNode()) {
if (node.nodeValue && mythRegex.test(node.nodeValue)) toReplace.push(node);
}
toReplace.forEach(textNode => {
const parent = textNode.parentNode;
if (!parent || parent.hasAttribute('data-opus-honest-applied')) return;
const newText = textNode.nodeValue.replace(/153\/153/g, realNR).replace(/304\/304/g, realNR);
textNode.nodeValue = newText;
parent.setAttribute('data-opus-honest-applied', '1');
});
// Add a small badge bottom-right showing honest live status
if (!document.getElementById('opus-honest-badge')) {
const b = document.createElement('div');
b.id = 'opus-honest-badge';
b.style.cssText = 'position:fixed;bottom:12px;right:12px;background:linear-gradient(90deg,#14b8a6,#a855f7);color:#05060a;padding:6px 12px;font:10px/1.3 Inter,system-ui,sans-serif;font-weight:700;border-radius:8px;z-index:99993;box-shadow:0 4px 12px rgba(0,0,0,0.3);cursor:pointer;max-width:280px';
b.title = 'Cliquer pour détails';
b.innerHTML = `✓ NR ${realNR} · ${realSigma} live`;
b.onclick = () => {
alert(`HONEST NonReg (doctrine #4):\n\nmaster: ${d.master.pass}/${d.master.total}\nopus: ${d.opus.pass}/${d.opus.total}\ncombined: ${realNR}\nsigma: ${realSigma}\n\n${d.myth_153}\n${d.myth_304}`);
};
document.body.appendChild(b);
}
} catch(e){console.error('L99-honest fetch error:', e);}
}
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateHonestValues);
else updateHonestValues();
setInterval(updateHonestValues, 90000);
})();
</script>
<!-- === OPUS HONEST END === -->
<script src="/api/a11y-auto-enhancer.js" defer></script>
<!-- WTP_UDOCK_V1 (Opus 21-avr t32b4) --><script src="/wtp-unified-dock.js" defer></script>
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
<!-- DOCTRINE-60-UX-JS --><script id="doctrine60-ux-js-direct">
// DOCTRINE-60-UX-JS staggered entrance
(function(){
if (!('IntersectionObserver' in window)) return;
const obs = new IntersectionObserver((entries) => {
entries.forEach((e, i) => {
if (e.isIntersecting) {
setTimeout(() => e.target.classList.add('enter-stagger'), i * 80);
obs.unobserve(e.target);
}
});
});
document.querySelectorAll('.card, .kpi, .panel').forEach(el => obs.observe(el));
})();
</script>
</body>
</html>