auto-sync-0120

This commit is contained in:
opus
2026-04-17 01:20:01 +02:00
parent 32277a41c5
commit bf79c74c89
7 changed files with 97 additions and 5 deletions

View File

@@ -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 dindisponibilité\"\n ]\n}"
}

View File

@@ -1,6 +1,6 @@
{ {
"type": "DAILY STANDUP", "type": "DAILY STANDUP",
"timestamp": "2026-04-16 22:35", "timestamp": "2026-04-16 23:15",
"squad": "all", "squad": "all",
"agents": { "agents": {
"cortex": { "cortex": {
@@ -46,5 +46,5 @@
}, },
"conflicts": [], "conflicts": [],
"actions": [], "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 dindisponibilité\"\n ]\n}"
} }

View File

@@ -1115,7 +1115,7 @@ error_log("FP CP4 my-intents-start"); // INTENT: cascade_routing
// OPUS-WIRE-16AVR-LIS (read_file) // 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 ($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], '.,;:'); $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/']; $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; $ok = false; foreach ($allowed as $a) if (strpos($path, $a) === 0) $ok = true;

View File

@@ -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(4){animation-delay:.15s}
.sec:nth-child(5){animation-delay:.2s} .sec:nth-child(5){animation-delay:.2s}
</style> </style>
<script src="/widgets/audit-banner.js" defer></script>
</head> </head>
<body> <body>
<div class="wrap"> <div class="wrap">

View File

@@ -28,7 +28,8 @@
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}} @keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}
.scanning{animation:pulse 1s infinite} .scanning{animation:pulse 1s infinite}
@media(max-width:768px){.main{grid-template-columns:1fr}} @media(max-width:768px){.main{grid-template-columns:1fr}}
</style></head><body> </style><script src="/widgets/audit-banner.js" defer></script>
</head><body>
<div class="top"> <div class="top">
<div class="logo">🔐 WEVAL <span>Security Scanner</span></div> <div class="logo">🔐 WEVAL <span>Security Scanner</span></div>
<div style="display:flex;gap:8px;align-items:center"> <div style="display:flex;gap:8px;align-items:center">

View File

@@ -11,7 +11,8 @@
.badge{display:inline-block;margin-top:8px;font-size:11px;padding:3px 10px;border-radius:8px} .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} .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} .section{padding:24px 40px}.section h2{font-size:20px;font-weight:700;margin-bottom:16px}
</style></head><body> </style><script src="/widgets/audit-banner.js" defer></script>
</head><body>
<!-- MEGA-NAV --> <!-- MEGA-NAV -->
<div style="background:rgba(99,102,241,.04);border-bottom:1px solid rgba(99,102,241,.1);padding:8px 40px;display:flex;gap:8px;flex-wrap:wrap;align-items:center"> <div style="background:rgba(99,102,241,.04);border-bottom:1px solid rgba(99,102,241,.1);padding:8px 40px;display:flex;gap:8px;flex-wrap:wrap;align-items:center">
<span style="color:#64748b;font-size:11px;font-weight:600;letter-spacing:1px">HUBS</span> <span style="color:#64748b;font-size:11px;font-weight:600;letter-spacing:1px">HUBS</span>

39
widgets/audit-banner.js Normal file
View File

@@ -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 = '<span class="k">📊 LinkedIn×Archi</span><span class="b" id="wev-score">…</span><span>eng:<span class="b" id="wev-eng">…</span></span><span>reach:<span class="b" id="wev-reach">…</span></span><span>risky:<span class="b" id="wev-risky">…</span></span><a href="/live-status.php">live-status</a><a href="/audits/AUDIT-LINKEDIN-ARCHI-2026-04-16.md">audit</a><button onclick="localStorage.setItem(\'weval_audit_banner_hidden\',\'1\');this.parentNode.remove();">✕</button>';
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(){});
})();