From bf79c74c89c2e1fc99b248367dbebcc2e1c874b6 Mon Sep 17 00:00:00 2001 From: opus Date: Fri, 17 Apr 2026 01:20:01 +0200 Subject: [PATCH] auto-sync-0120 --- api/meetings/daily-2026-04-16-23-15.json | 50 ++++++++++++++++++++++++ api/meetings/latest-daily.json | 4 +- api/wevia-fast-path-v3.php | 2 +- architecture-map.html | 1 + security-dashboard.html | 3 +- security-hub.html | 3 +- widgets/audit-banner.js | 39 ++++++++++++++++++ 7 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 api/meetings/daily-2026-04-16-23-15.json create mode 100644 widgets/audit-banner.js diff --git a/api/meetings/daily-2026-04-16-23-15.json b/api/meetings/daily-2026-04-16-23-15.json new file mode 100644 index 000000000..a04059b3e --- /dev/null +++ b/api/meetings/daily-2026-04-16-23-15.json @@ -0,0 +1,50 @@ +{ + "type": "DAILY STANDUP", + "timestamp": "2026-04-16 23:15", + "squad": "all", + "agents": { + "cortex": { + "done": "13 checks, services 5\/10 OK", + "blockers": "none", + "next": "Continue monitoring *\/4h" + }, + "gap_detector": { + "done": "Score 96.1% (49\/51 wired)", + "blockers": "2 tools not wired", + "next": "Wire remaining tools" + }, + "nonreg": { + "done": "153\/153 (100%)", + "blockers": "none", + "next": "Maintain 100%" + }, + "security": { + "done": "0 leaks, 92 expositions redacted, CrowdSec active", + "blockers": "none", + "next": "Continuous monitoring" + }, + "evolution": { + "done": "System: ? routes, ? skills", + "blockers": "Agent PHP syntax to fix", + "next": "Generate 5 evolution proposals" + }, + "scanner": { + "done": "12 sections wiki scanned", + "blockers": "none", + "next": "Continue *\/2h" + }, + "l99": { + "done": "Functional ?\/93, Dark 7\/10", + "blockers": "gitleaks+trivy version format mismatch", + "next": "Fix dark test parsing" + }, + "mirofish": { + "done": "MiroFish DOWN", + "blockers": "Service down", + "next": "Collaborative tools" + } + }, + "conflicts": [], + "actions": [], + "ai_analysis": "{\n \"conflicts\": [\n \"mirofish DOWN peut bloquer scanner (besoin de Miro pour les scans wiki)\",\n \"gap_detector bloqué par 2 outils non câblés, potentiellement liés à evolution (skills non déclarées)\",\n \"l99 bloqué par incompatibilité gitleaks+trivy, ce qui peut impacter security malgré son bon statut\"\n ],\n \"common_issues\": [\n \"Problèmes de parsing\/format dans plusieurs services (l99, evolution, gap_detector)\",\n \"Visibilité partielle (Cortex, evolution, l99 avec champs ?)\",\n \"Monitoring continu dépendant de services instables (MiroFish DOWN)\"\n ],\n \"priority_actions\": [\n \"Rétablir MiroFish — priorité absolue pour débloquer scanner et collaborations\",\n \"Corriger le mismatch gitleaks+trivy (l99) pour assurer la solidité des tests sombres\",\n \"Finaliser le câblage des 2 outils restants (gap_detector)\",\n \"Résoudre la syntaxe PHP dans evolution pour permettre les propositions d'évolution\"\n ],\n \"conciliation\": [\n \"Coordonner security et l99 sur les versions des scanners pour éviter futurs conflits\",\n \"Aligner gap_detector et evolution sur la définition des 'outils câblés' et des skills\",\n \"Activer un pont scanner ↔ mirofish pour alerte en cas d’indisponibilité\"\n ]\n}" +} \ No newline at end of file diff --git a/api/meetings/latest-daily.json b/api/meetings/latest-daily.json index 2beb530db..a04059b3e 100644 --- a/api/meetings/latest-daily.json +++ b/api/meetings/latest-daily.json @@ -1,6 +1,6 @@ { "type": "DAILY STANDUP", - "timestamp": "2026-04-16 22:35", + "timestamp": "2026-04-16 23:15", "squad": "all", "agents": { "cortex": { @@ -46,5 +46,5 @@ }, "conflicts": [], "actions": [], - "ai_analysis": "LLM unavailable" + "ai_analysis": "{\n \"conflicts\": [\n \"mirofish DOWN peut bloquer scanner (besoin de Miro pour les scans wiki)\",\n \"gap_detector bloqué par 2 outils non câblés, potentiellement liés à evolution (skills non déclarées)\",\n \"l99 bloqué par incompatibilité gitleaks+trivy, ce qui peut impacter security malgré son bon statut\"\n ],\n \"common_issues\": [\n \"Problèmes de parsing\/format dans plusieurs services (l99, evolution, gap_detector)\",\n \"Visibilité partielle (Cortex, evolution, l99 avec champs ?)\",\n \"Monitoring continu dépendant de services instables (MiroFish DOWN)\"\n ],\n \"priority_actions\": [\n \"Rétablir MiroFish — priorité absolue pour débloquer scanner et collaborations\",\n \"Corriger le mismatch gitleaks+trivy (l99) pour assurer la solidité des tests sombres\",\n \"Finaliser le câblage des 2 outils restants (gap_detector)\",\n \"Résoudre la syntaxe PHP dans evolution pour permettre les propositions d'évolution\"\n ],\n \"conciliation\": [\n \"Coordonner security et l99 sur les versions des scanners pour éviter futurs conflits\",\n \"Aligner gap_detector et evolution sur la définition des 'outils câblés' et des skills\",\n \"Activer un pont scanner ↔ mirofish pour alerte en cas d’indisponibilité\"\n ]\n}" } \ No newline at end of file diff --git a/api/wevia-fast-path-v3.php b/api/wevia-fast-path-v3.php index 4aa17999d..4fec15511 100644 --- a/api/wevia-fast-path-v3.php +++ b/api/wevia-fast-path-v3.php @@ -1115,7 +1115,7 @@ error_log("FP CP4 my-intents-start"); // INTENT: cascade_routing // OPUS-WIRE-16AVR-LIS (read_file) if ($r === null && preg_match('/(lis|affiche|ouvre|montre|cat|contenu|read|show)/iu', $m) && preg_match('/\.(gold|json|php|html|txt|log|md|conf|py|js)/i', $m)) { - if (preg_match('#(/(?:opt|var|tmp|etc)/[\w./\-]+)#', $m, $pm)) { + if (preg_match('#(/(?:opt|var|tmp|etc)/[\w./\-]+)#', $msg, $pm)) { $path = rtrim($pm[1], '.,;:'); $allowed = ['/opt/wevads/vault/','/opt/weval-l99/','/opt/wevia-brain/','/opt/deer-flow/','/var/log/','/tmp/','/var/www/html/','/var/www/weval/','/etc/nginx/','/etc/weval/','/etc/php/']; $ok = false; foreach ($allowed as $a) if (strpos($path, $a) === 0) $ok = true; diff --git a/architecture-map.html b/architecture-map.html index 99554699c..6827ea7db 100644 --- a/architecture-map.html +++ b/architecture-map.html @@ -97,6 +97,7 @@ body{font-family:var(--bf);background:var(--bg);color:var(--t);overflow-x:hidden .sec:nth-child(4){animation-delay:.15s} .sec:nth-child(5){animation-delay:.2s} +
diff --git a/security-dashboard.html b/security-dashboard.html index 7fd7fe4e8..4c60ffb42 100644 --- a/security-dashboard.html +++ b/security-dashboard.html @@ -28,7 +28,8 @@ @keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}} .scanning{animation:pulse 1s infinite} @media(max-width:768px){.main{grid-template-columns:1fr}} - + +
diff --git a/security-hub.html b/security-hub.html index cf03f0876..1ed117450 100644 --- a/security-hub.html +++ b/security-hub.html @@ -11,7 +11,8 @@ .badge{display:inline-block;margin-top:8px;font-size:11px;padding:3px 10px;border-radius:8px} .int{background:rgba(16,185,129,.15);color:#10b981}.ext{background:rgba(99,102,241,.15);color:#818cf8} .section{padding:24px 40px}.section h2{font-size:20px;font-weight:700;margin-bottom:16px} - + +
HUBS diff --git a/widgets/audit-banner.js b/widgets/audit-banner.js new file mode 100644 index 000000000..c6c98ed74 --- /dev/null +++ b/widgets/audit-banner.js @@ -0,0 +1,39 @@ +/* WEVAL Audit Alignment Banner - Widget v1.0 - 2026-04-17 + * Non-destructif. Zéro dépendance. Toggle via localStorage. + * Source: /opt/weval-l99/audits/AUDIT-LINKEDIN-ARCHI-2026-04-16.md + */ +(function(){ + if (window.__wevAuditBanner) return; + window.__wevAuditBanner = true; + if (localStorage.getItem('weval_audit_banner_hidden') === '1') return; + + var style = document.createElement('style'); + style.textContent = [ + '#weval-audit-banner{position:sticky;top:0;z-index:99999;background:linear-gradient(90deg,#1B6CA8,#7EDAB5);color:#0a0e1a;padding:8px 16px;font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:13px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;box-shadow:0 2px 8px rgba(0,0,0,.3)}', + '#weval-audit-banner .k{font-weight:700;letter-spacing:.02em}', + '#weval-audit-banner .b{background:rgba(255,255,255,.25);padding:2px 8px;border-radius:10px;font-weight:600}', + '#weval-audit-banner .b.bad{background:#ef4444;color:#fff}', + '#weval-audit-banner .b.ok{background:#10b981;color:#fff}', + '#weval-audit-banner a{color:#0a0e1a;text-decoration:underline;font-weight:700}', + '#weval-audit-banner button{margin-left:auto;background:transparent;border:1px solid rgba(0,0,0,.3);color:#0a0e1a;padding:2px 10px;border-radius:6px;cursor:pointer;font-size:11px}', + '#weval-audit-banner button:hover{background:rgba(0,0,0,.1)}' + ].join(''); + document.head.appendChild(style); + + var b = document.createElement('div'); + b.id = 'weval-audit-banner'; + b.innerHTML = '📊 LinkedIn×Archieng:reach:risky:live-statusaudit'; + if (document.body) document.body.insertBefore(b, document.body.firstChild); + else document.addEventListener('DOMContentLoaded', function(){ document.body.insertBefore(b, document.body.firstChild); }); + + fetch('/api/linkedin-alignment-kpi.php').then(function(r){return r.json();}).then(function(d){ + var s = d.audit_score || 0; + var e = d.kpis && d.kpis.engagement_rate_30d ? d.kpis.engagement_rate_30d.value : '?'; + var re = d.kpis && d.kpis.avg_reach_30d ? d.kpis.avg_reach_30d.value : '?'; + var ri = d.kpis && d.kpis.risky_claims ? d.kpis.risky_claims.value : '?'; + var se = document.getElementById('wev-score'); if (se){se.textContent = s + '/10'; if(s<6) se.className='b bad';} + var ee = document.getElementById('wev-eng'); if (ee) ee.textContent = e + '%'; + var rea = document.getElementById('wev-reach'); if (rea) rea.textContent = re; + var rie = document.getElementById('wev-risky'); if (rie){rie.textContent = ri; if(ri>0) rie.className='b bad'; else rie.className='b ok';} + }).catch(function(){}); +})();