Compare commits

...

1 Commits

Author SHA1 Message Date
opus
b1a2a6490d wave(214): drill-down 7sigma fails + resolver catalog WTP
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
2026-04-21 16:31:01 +02:00

View File

@@ -3350,6 +3350,144 @@ if (typeof window.navigateTo === 'function'){
</script>
</section>
<section id="wtp-drill-resolver-wave214" data-added-by="opus-wave-214" style="margin:24px 16px;padding:24px;background:linear-gradient(135deg,#3b0764 0%,#083344 100%);border:1px solid #a855f7;border-radius:12px;font-family:system-ui,sans-serif;box-shadow:0 10px 40px rgba(168,85,247,.2)">
<div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:18px">
<div>
<div style="display:flex;align-items:center;gap:10px">
<span style="font-size:22px">🧩</span>
<h2 style="margin:0;color:#e9d5ff;font-size:20px;font-weight:700">Drill-down 7σ Fails · Resolver Catalog</h2>
<span style="padding:3px 10px;border-radius:12px;background:linear-gradient(135deg,#a855f7,#22d3ee);color:#fff;font-size:10px;font-weight:700;letter-spacing:.6px">WAVE 214</span>
</div>
<p style="margin:4px 0 0 0;color:#c4b5fd;font-size:12.5px">49 dimensions à fixer vers 7σ · 310 intents Resolver · 224 wired · gap 86</p>
</div>
<div id="wtp-dr-status" style="padding:6px 14px;border-radius:16px;background:rgba(168,85,247,.15);color:#ddd6fe;font-size:11px;font-weight:600;border:1px solid rgba(168,85,247,.3)">LOADING</div>
</div>
<!-- Two columns: 7σ fails + Resolver catalog -->
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:16px">
<!-- 7σ Fails drill-down -->
<div style="padding:18px;background:rgba(255,255,255,.03);border:1px solid rgba(251,146,60,.25);border-radius:10px">
<div style="display:flex;align-items:center;gap:8px;margin-bottom:12px">
<span style="font-size:18px">🎯</span>
<h3 style="margin:0;color:#fed7aa;font-size:14px;font-weight:700">7σ Fails par page</h3>
<span id="wtp-dr-7s-count" style="margin-left:auto;padding:2px 8px;border-radius:10px;background:rgba(251,146,60,.15);color:#fdba74;font-size:10px;font-weight:700">...</span>
</div>
<div id="wtp-dr-7s-grid" style="max-height:340px;overflow-y:auto"></div>
</div>
<!-- Resolver Catalog -->
<div style="padding:18px;background:rgba(255,255,255,.03);border:1px solid rgba(139,92,246,.25);border-radius:10px">
<div style="display:flex;align-items:center;gap:8px;margin-bottom:12px">
<span style="font-size:18px">🧠</span>
<h3 style="margin:0;color:#ddd6fe;font-size:14px;font-weight:700">Resolver Catalog</h3>
<span id="wtp-dr-res-count" style="margin-left:auto;padding:2px 8px;border-radius:10px;background:rgba(139,92,246,.15);color:#c4b5fd;font-size:10px;font-weight:700">...</span>
</div>
<div id="wtp-dr-res-kpi" style="display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:12px"></div>
<div id="wtp-dr-res-domains" style="max-height:270px;overflow-y:auto"></div>
</div>
</div>
<script>
(function(){
function dimChip(name, ok){
var col = ok ? '#10b981' : '#ef4444';
return '<span style="padding:1px 6px;border-radius:8px;background:'+col+'22;color:'+col+';font-size:9.5px;font-weight:700;font-family:monospace;margin:1px">'+name+'</span>';
}
function pageRow(pg){
var fails = pg.fails || [];
var total_dims = pg.total_dims || 0;
var name = pg.id || pg.url || '?';
var col = fails.length === 0 ? '#10b981' : (fails.length <= 2 ? '#fbbf24' : '#ef4444');
var chips = fails.map(function(f){ return dimChip(f,false); }).join('');
return '<div style="padding:8px 10px;margin-bottom:6px;background:rgba(255,255,255,.02);border-left:3px solid '+col+';border-radius:4px">'
+'<div style="display:flex;align-items:center;justify-content:space-between;gap:8px"><div style="font-size:11.5px;color:#fed7aa;font-family:monospace;font-weight:600">'+name+'</div><div style="font-size:10px;color:'+col+';font-weight:700">'+fails.length+' fails</div></div>'
+'<div style="margin-top:4px">'+chips+'</div>'
+'</div>';
}
function kpiCard(label, value, color){
return '<div style="padding:8px 10px;background:rgba(139,92,246,.08);border:1px solid rgba(139,92,246,.18);border-radius:6px;text-align:center">'
+'<div style="font-size:9.5px;color:#c4b5fd;text-transform:uppercase;letter-spacing:.4px">'+label+'</div>'
+'<div style="font-size:18px;font-weight:700;color:'+color+';margin-top:2px">'+value+'</div>'
+'</div>';
}
function domainChip(name, info){
var cnt = (typeof info === 'number') ? info : (info.count || info.intents || 0);
return '<div style="display:flex;align-items:center;justify-content:space-between;padding:6px 10px;margin-bottom:4px;background:rgba(139,92,246,.05);border:1px solid rgba(139,92,246,.12);border-radius:6px;font-size:11px;color:#ddd6fe"><span style="font-family:monospace">'+name+'</span><span style="font-weight:700;color:#a78bfa">'+cnt+'</span></div>';
}
function render(){
// 7σ fails
fetch('/api/seven-sigma-latest.json?cb='+Date.now())
.then(function(r){return r.json();})
.then(function(d){
var pages = d.pages || [];
var grid = document.getElementById('wtp-dr-7s-grid');
var badge = document.getElementById('wtp-dr-7s-count');
if (!grid) return;
var total_fails = 0;
var items = pages.map(function(p){
var dims = p.dimensions || {};
var fails = [];
Object.keys(dims).forEach(function(k){
var v = dims[k];
if (v && typeof v === 'object' && (v.status === 'FAIL' || v.status === 'fail')) fails.push(k);
});
total_fails += fails.length;
return {id: p.id || p.url, fails: fails, total_dims: Object.keys(dims).length};
}).sort(function(a,b){return b.fails.length - a.fails.length;});
if (badge) badge.textContent = total_fails+' fails / '+pages.length+' pages';
grid.innerHTML = items.map(pageRow).join('');
})
.catch(function(){
var grid = document.getElementById('wtp-dr-7s-grid');
if (grid) grid.innerHTML = '<div style="color:#f87171;font-size:11px;padding:10px">seven-sigma unavailable</div>';
});
// Resolver catalog
fetch('/api/arena-intent-registry.json?cb='+Date.now())
.then(function(r){return r.json();})
.then(function(d){
var kpi = document.getElementById('wtp-dr-res-kpi');
var doms = document.getElementById('wtp-dr-res-domains');
var cnt = document.getElementById('wtp-dr-res-count');
var wired = d.wired || 0;
var gap = d.gap || 0;
var total = d.total_intents || (wired + gap);
var pct = total ? Math.round(wired*100/total) : 0;
if (cnt) cnt.textContent = wired+'/'+total+' ('+pct+'%)';
if (kpi) {
kpi.innerHTML = kpiCard('INTENTS', total, '#ddd6fe')
+ kpiCard('SKILLS', d.total_skills||0, '#c4b5fd')
+ kpiCard('WIRED', wired, '#10b981')
+ kpiCard('GAP', gap, gap===0?'#10b981':'#fbbf24');
}
if (doms) {
var domains = d.domains || {};
var html = '<div style="font-size:10px;color:#c4b5fd;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px">Domains · '+Object.keys(domains).length+'</div>';
if (Array.isArray(domains)) {
html += domains.map(function(n){return domainChip(n, 0);}).join('');
} else {
Object.keys(domains).forEach(function(k){ html += domainChip(k, domains[k]); });
}
doms.innerHTML = html;
}
})
.catch(function(){
var doms = document.getElementById('wtp-dr-res-domains');
if (doms) doms.innerHTML = '<div style="color:#f87171;font-size:11px;padding:10px">registry unavailable</div>';
});
var status = document.getElementById('wtp-dr-status');
if (status) { status.textContent = 'LIVE'; status.style.background='rgba(16,185,129,.2)'; status.style.color='#6ee7b7'; }
}
render();
setInterval(render, 180000);
})();
</script>
</section>
<section id="wtp-visual-mgmt-wave212" data-added-by="opus-wave-212" style="margin:32px 16px 20px;padding:28px;background:linear-gradient(135deg,#164e63 0%,#1e3a8a 100%);border:1px solid #0ea5e9;border-radius:14px;font-family:system-ui,sans-serif;box-shadow:0 10px 40px rgba(14,165,233,.2)">
<div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:18px">
<div>