wave(220): AI Capability Gap 8+4 OSS wires + CRM filter drill-warn + 6/6 PW
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled

This commit is contained in:
opus
2026-04-21 22:53:01 +02:00
parent 0456d672ff
commit 6b25030a3c

View File

@@ -4244,6 +4244,88 @@ if (typeof window.navigateTo === 'function'){
</script>
</section>
<section id="wtp-ai-capability-wave220" data-added-by="opus-wave-220" style="margin:24px 16px;padding:22px;background:linear-gradient(135deg,#1e1b4b 0%,#064e3b 100%);border:1px solid #8b5cf6;border-radius:12px;font-family:system-ui,sans-serif;box-shadow:0 10px 40px rgba(139,92,246,.2)">
<div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:16px">
<div>
<div style="display:flex;align-items:center;gap:10px">
<span style="font-size:22px">🧠</span>
<h2 style="margin:0;color:#ddd6fe;font-size:18px;font-weight:700">AI Capability Gap · Priority Wires OSS</h2>
<span style="padding:3px 10px;border-radius:12px;background:linear-gradient(135deg,#8b5cf6,#10b981);color:#fff;font-size:10px;font-weight:700">WAVE 220</span>
</div>
<p style="margin:4px 0 0 0;color:#c4b5fd;font-size:12px">8 capability gaps audit · 4 priority OSS wires · sovereign stack target</p>
</div>
<div id="wtp-ai-ts" style="padding:4px 10px;border-radius:10px;background:rgba(139,92,246,.15);color:#c4b5fd;font-size:11px;font-weight:600">loading...</div>
</div>
<div style="display:grid;grid-template-columns:1.4fr 1fr;gap:14px">
<!-- 8 Capability Gaps -->
<div style="padding:14px;background:rgba(0,0,0,.3);border:1px solid rgba(139,92,246,.2);border-radius:10px">
<div style="font-size:11px;color:#c4b5fd;text-transform:uppercase;letter-spacing:.6px;margin-bottom:10px;font-weight:700">📉 8 Capability Gaps · scored /90</div>
<div id="wtp-ai-gaps-list" style="display:flex;flex-direction:column;gap:6px"></div>
</div>
<!-- 4 Priority OSS Wires -->
<div style="padding:14px;background:rgba(0,0,0,.3);border:1px solid rgba(16,185,129,.2);border-radius:10px">
<div style="font-size:11px;color:#6ee7b7;text-transform:uppercase;letter-spacing:.6px;margin-bottom:10px;font-weight:700">🔗 4 Priority OSS to wire</div>
<div id="wtp-ai-wires-list" style="display:flex;flex-direction:column;gap:6px"></div>
</div>
</div>
<script>
(function(){
function gapRow(key, g){
var pri = g.priority || 'low';
var priCol = pri==='critical'?'#ef4444':(pri==='high'?'#f97316':(pri==='medium'?'#fbbf24':'#64748b'));
var score = g.current_score || 0;
var pct = score * 100 / 90;
var gapVal = g.gap || 0;
var cand = (g.candidates || []).length;
return '<div style="padding:8px 10px;background:rgba(255,255,255,.02);border-left:3px solid '+priCol+';border-radius:4px">'
+'<div style="display:flex;align-items:center;justify-content:space-between;gap:6px">'
+'<div style="display:flex;align-items:center;gap:6px"><span style="font-size:12px;color:#ddd6fe;font-weight:600;font-family:monospace">'+key+'</span>'
+'<span style="padding:1px 6px;border-radius:8px;background:'+priCol+'22;color:'+priCol+';font-size:9px;font-weight:700;text-transform:uppercase">'+pri+'</span></div>'
+'<span style="font-size:11px;color:#a78bfa;font-weight:700">'+score+'/90</span>'
+'</div>'
+'<div style="display:flex;align-items:center;gap:6px;margin-top:4px">'
+'<div style="flex:1;height:4px;background:rgba(255,255,255,.05);border-radius:2px;overflow:hidden"><div style="width:'+pct+'%;height:100%;background:'+priCol+'"></div></div>'
+'<span style="font-size:10px;color:#94a3b8">gap -'+gapVal+'</span>'
+(cand>0?'<span style="font-size:10px;color:#10b981">'+cand+' OSS</span>':'<span style="font-size:10px;color:#64748b">— tools</span>')
+'</div>'
+'</div>';
}
function wireRow(w){
return '<div style="padding:8px 10px;background:rgba(16,185,129,.05);border:1px solid rgba(16,185,129,.15);border-radius:6px">'
+'<div style="display:flex;align-items:center;justify-content:space-between;gap:6px">'
+'<span style="font-family:monospace;font-size:11.5px;color:#a7f3d0;font-weight:600">'+(w.tool||'?')+'</span>'
+'<span style="font-size:10px;color:#fbbf24;font-weight:700">★'+(w.stars||0).toLocaleString()+'</span>'
+'</div>'
+'<div style="font-size:10px;color:#94a3b8;margin-top:2px"><b style="color:#6ee7b7">'+(w.category||'?')+'</b> · '+(w.reason||'')+'</div>'
+'</div>';
}
fetch('/api/ai-gap-cache.json?cb='+Date.now())
.then(function(r){return r.json();})
.then(function(d){
var ts = document.getElementById('wtp-ai-ts');
if (ts) { ts.textContent = (d.timestamp||'').slice(0,10); ts.style.background='rgba(16,185,129,.15)'; ts.style.color='#6ee7b7'; }
var gl = document.getElementById('wtp-ai-gaps-list');
if (gl) {
var gaps = d.gaps || {};
var sorted = Object.keys(gaps).sort(function(a,b){return (gaps[a].gap||0) - (gaps[b].gap||0);}).reverse();
gl.innerHTML = sorted.map(function(k){return gapRow(k, gaps[k]);}).join('');
}
var wl = document.getElementById('wtp-ai-wires-list');
if (wl) {
var wires = d.priority_wires || [];
wl.innerHTML = wires.map(wireRow).join('');
}
})
.catch(function(){
var ts = document.getElementById('wtp-ai-ts');
if (ts) { ts.textContent='err'; ts.style.background='rgba(239,68,68,.15)'; ts.style.color='#fca5a5'; }
});
})();
</script>
</section>
<section id="wtp-drill-warn-wave219" data-added-by="opus-wave-219" style="margin:24px 16px;padding:22px;background:linear-gradient(135deg,#451a03 0%,#3b0764 100%);border:1px solid #fb923c;border-radius:12px;font-family:system-ui,sans-serif;box-shadow:0 10px 40px rgba(251,146,60,.18)">
<div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:16px">
<div>
@@ -4260,7 +4342,39 @@ if (typeof window.navigateTo === 'function'){
</div>
</div>
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px">
<div id="wtp-dw-filters" style="display:flex;flex-wrap:wrap;gap:5px;margin-bottom:12px;padding:10px;background:rgba(0,0,0,.2);border:1px solid rgba(251,146,60,.15);border-radius:8px">
<span style="font-size:10.5px;color:#fdba74;text-transform:uppercase;font-weight:700;padding:3px 6px">Filter:</span>
<button data-wtp-dw-cat="all" onclick="window.__wtpDwFilter('all')" style="padding:3px 10px;border-radius:12px;background:rgba(251,146,60,.2);color:#fdba74;border:1px solid rgba(251,146,60,.4);font-size:10.5px;cursor:pointer;font-weight:700">ALL</button>
<button data-wtp-dw-cat="revenue" onclick="window.__wtpDwFilter('revenue')" style="padding:3px 10px;border-radius:12px;background:rgba(16,185,129,.12);color:#6ee7b7;border:1px solid rgba(16,185,129,.3);font-size:10.5px;cursor:pointer">revenue</button>
<button data-wtp-dw-cat="customer_success" onclick="window.__wtpDwFilter('customer_success')" style="padding:3px 10px;border-radius:12px;background:rgba(244,114,182,.12);color:#f9a8d4;border:1px solid rgba(244,114,182,.3);font-size:10.5px;cursor:pointer">customer_success</button>
<button data-wtp-dw-cat="growth" onclick="window.__wtpDwFilter('growth')" style="padding:3px 10px;border-radius:12px;background:rgba(251,191,36,.12);color:#fde68a;border:1px solid rgba(251,191,36,.3);font-size:10.5px;cursor:pointer">growth</button>
<button data-wtp-dw-cat="engagement" onclick="window.__wtpDwFilter('engagement')" style="padding:3px 10px;border-radius:12px;background:rgba(34,211,238,.12);color:#a5f3fc;border:1px solid rgba(34,211,238,.3);font-size:10.5px;cursor:pointer">engagement</button>
<button data-wtp-dw-cat="predictive" onclick="window.__wtpDwFilter('predictive')" style="padding:3px 10px;border-radius:12px;background:rgba(168,85,247,.12);color:#ddd6fe;border:1px solid rgba(168,85,247,.3);font-size:10.5px;cursor:pointer">predictive</button>
<button data-wtp-dw-cat="platform_sla" onclick="window.__wtpDwFilter('platform_sla')" style="padding:3px 10px;border-radius:12px;background:rgba(110,231,183,.12);color:#a7f3d0;border:1px solid rgba(110,231,183,.3);font-size:10.5px;cursor:pointer">platform_sla</button>
<button data-wtp-dw-cat="productivity" onclick="window.__wtpDwFilter('productivity')" style="padding:3px 10px;border-radius:12px;background:rgba(253,186,116,.12);color:#fed7aa;border:1px solid rgba(253,186,116,.3);font-size:10.5px;cursor:pointer">productivity</button>
</div>
<script>
window.__wtpDwFilter = function(cat){
// Highlight active button
document.querySelectorAll('[data-wtp-dw-cat]').forEach(function(btn){
var isActive = btn.dataset.wtpDwCat === cat;
btn.style.background = isActive ? 'rgba(251,146,60,.3)' : btn.style.background.replace(/\.3\)/g,'.12)');
btn.style.fontWeight = isActive ? '700' : '400';
});
// Filter kpi rows in fix & wire lists: match category chip color or data-category
['wtp-dw-fix-list','wtp-dw-wire-list'].forEach(function(id){
var el = document.getElementById(id);
if (!el) return;
el.querySelectorAll(':scope > div').forEach(function(row){
if (cat === 'all') { row.style.display = 'block'; return; }
var txt = row.textContent.toLowerCase();
var short = cat.slice(0,8).toUpperCase();
row.style.display = txt.indexOf(short.toLowerCase()) !== -1 || txt.indexOf(cat.replace('_',' ').toLowerCase()) !== -1 ? 'block' : 'none';
});
});
};
</script>
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px">
<!-- WARN list (priority_fix_list) -->
<div style="padding:14px;background:rgba(0,0,0,.3);border:1px solid rgba(251,146,60,.2);border-radius:10px">
<div style="display:flex;align-items:center;gap:6px;margin-bottom:10px">