auto-sync-2205

This commit is contained in:
Opus
2026-04-23 22:05:02 +02:00
parent 9d8154dd74
commit 4284ec2aa9
20 changed files with 277 additions and 12 deletions

View File

@@ -172,7 +172,7 @@
},
"Analyst 2": {
"persona": "tool",
"emoji": "🎯",
"emoji": "🔎",
"color": "#666",
"role": "con",
"isGap": false,

View File

@@ -1,7 +0,0 @@
<html>
<head><title>500 Internal Server Error</title></head>
<body>
<center><h1>500 Internal Server Error</h1></center>
<hr><center>nginx/1.24.0 (Ubuntu)</center>
</body>
</html>

View File

@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
"ts": "2026-04-23T20:00:35+00:00",
"ts": "2026-04-23T20:02:39+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,

View File

@@ -9881,5 +9881,15 @@
"status": "PENDING_APPROVAL",
"created_at": "2026-04-23T20:00:57+00:00",
"source": "opus4-autowire-early-v2"
},
"793": {
"name": "w278dfc0",
"triggers": [
"w278 dfc 0"
],
"cmd": "echo 'import subprocess as s,json as j;mark=\"w278_dfxc\";r=lambda c:s.run(c,capture_output=1,text=1,timeout=5);log=r([\"bash\",\"-c\",\"sudo -n tail -20 \/tmp\/w278_dfx.log 2>&1\"]);ver=r([\"bash\",\"-c\",\"radare2 -v 2>&1 | head -5 || echo nf\"]);which=r([\"which\",\"radare2\"]);proc=r([\"bash\",\"-c\",\"ps -p 3793390 --no-headers 2>&1 || echo done\"]);print(j.dumps({\"m\":mark,\"log\":log.stdout[-700:],\"ver\":ver.stdout[:300],\"which\":which.stdout[:50],\"proc\":proc.stdout[:80]},indent=2))' | tee \/tmp\/sel-test.py",
"status": "PENDING_APPROVAL",
"created_at": "2026-04-23T20:01:59+00:00",
"source": "opus4-autowire-early-v2"
}
}

View File

@@ -0,0 +1,12 @@
<?php
return array (
'name' => 'w278dfc0',
'triggers' =>
array (
0 => 'w278 dfc 0',
),
'cmd' => 'echo \'import subprocess as s,json as j;mark="w278_dfxc";r=lambda c:s.run(c,capture_output=1,text=1,timeout=5);log=r(["bash","-c","sudo -n tail -20 /tmp/w278_dfx.log 2>&1"]);ver=r(["bash","-c","radare2 -v 2>&1 | head -5 || echo nf"]);which=r(["which","radare2"]);proc=r(["bash","-c","ps -p 3793390 --no-headers 2>&1 || echo done"]);print(j.dumps({"m":mark,"log":log.stdout[-700:],"ver":ver.stdout[:300],"which":which.stdout[:50],"proc":proc.stdout[:80]},indent=2))\' | tee /tmp/sel-test.py',
'status' => 'PENDING_APPROVAL',
'created_at' => '2026-04-23T20:01:59+00:00',
'source' => 'opus4-autowire-early-v2',
);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 568 KiB

After

Width:  |  Height:  |  Size: 567 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 531 KiB

After

Width:  |  Height:  |  Size: 515 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 KiB

After

Width:  |  Height:  |  Size: 458 KiB

View File

@@ -4,3 +4,34 @@ before: "🔎" url=https://api.dicebear.com/9.x/adventurer/svg?seed=Analyst2
UPDATE: ok=true cf_purged=true
=== enterprise-model ===
body: 213548 chars
total imgs: 0
matched "Analyst 2": 0
matched WITH NEW emoji: 0
ANY img containing emoji: 0
emoji in body text: true
svg text with emoji: 0
full screenshot: proofs/enterprise-model-smart.png
=== agents-archi ===
body: 171312 chars
total imgs: 1
matched "Analyst 2": 0
matched WITH NEW emoji: 0
ANY img containing emoji: 0
emoji in body text: true
svg text with emoji: 0
full screenshot: proofs/agents-archi-smart.png
=== meeting-rooms ===
body: 57810 chars
total imgs: 0
matched "Analyst 2": 0
matched WITH NEW emoji: 0
ANY img containing emoji: 0
emoji in body text: true
svg text with emoji: 0
full screenshot: proofs/meeting-rooms-smart.png
ROLLBACK OK
DONE

View File

@@ -2,7 +2,7 @@
"results": {
"enterprise-model": {
"http": 200,
"body_size": 213547,
"body_size": 213548,
"total_imgs": 0,
"matched_agent": 0,
"with_new_emoji": 0,
@@ -14,7 +14,7 @@
},
"agents-archi": {
"http": 200,
"body_size": 171379,
"body_size": 171312,
"total_imgs": 1,
"matched_agent": 0,
"with_new_emoji": 0,
@@ -26,7 +26,7 @@
},
"meeting-rooms": {
"http": 200,
"body_size": 57792,
"body_size": 57810,
"total_imgs": 0,
"matched_agent": 0,
"with_new_emoji": 0,

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View File

@@ -0,0 +1,18 @@
{
"ts": "2026-04-23T20:02:58.826Z",
"ok": true,
"diag": {
"title": "WTP Orphans Registry · 261 pages à relier",
"kpis_count": 6,
"sections_count": 13,
"pagecards": 262,
"filter_tags": 13,
"has_search": true,
"body_height": 7963
},
"js_errors": [],
"videos": [
"page@14471c10bc9c732397e97fa9e21ace89.webm"
],
"public_url": "https://weval-consulting.com/proofs/wtp-orphans-registry-2026-04-23T20-02-58/"
}

201
wtp-orphans-registry.html Normal file
View File

@@ -0,0 +1,201 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>WTP Orphans Registry · 261 pages à relier</title>
<style>
:root{
--ink:#0a0e1a;--ink2:#0c1120;--ink3:#111a2e;--line:#1a2238;--line2:#2a3450;
--paper:#e8eaf0;--smoke:#9aa3b8;--fog:#6b7490;
--gold:#d4a853;--gold-br:#f3c678;--gold-lt:#ffd98a;
--em:#10b981;--em-lt:#4ade80;--sa:#22d3ee;--to:#fbbf24;--to-lt:#fde047;
--ru:#ef4444;--vi:#a855f7;--pi:#f472b6;
--sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,sans-serif;
--serif:"Fraunces","Playfair Display",Georgia,serif;
--mono:"JetBrains Mono","Fira Code",ui-monospace,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--ink);color:var(--paper);font-family:var(--sans);font-size:13.5px;line-height:1.6;min-height:100vh;padding:20px 28px;overflow-x:hidden}
.hd{max-width:1400px;margin:0 auto 30px;padding-bottom:18px;border-bottom:1px solid var(--line2);position:relative}
.hd .eyebrow{font-family:var(--mono);font-size:10px;color:var(--gold);letter-spacing:.2em;text-transform:uppercase;margin-bottom:8px}
.hd h1{font-family:var(--serif);font-weight:500;font-size:34px;line-height:1.1;color:var(--paper)}
.hd h1 em{color:var(--gold);font-style:italic}
.hd .sub{margin-top:6px;font-size:13px;color:var(--fog);font-style:italic;font-family:var(--serif)}
.hd .back{position:absolute;top:0;right:0;padding:7px 14px;background:transparent;border:1px solid var(--line2);border-radius:2px;color:var(--fog);font-family:var(--sans);font-size:11px;text-decoration:none;text-transform:uppercase;letter-spacing:.08em;transition:all .15s}
.hd .back:hover{color:var(--gold);border-color:var(--gold)}
.wrap{max-width:1400px;margin:0 auto}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:24px}
.k-card{padding:16px 20px;background:var(--ink2);border:1px solid var(--line);border-radius:3px;position:relative;overflow:hidden;transition:all .2s}
.k-card:hover{border-color:var(--line2);transform:translateY(-2px)}
.k-card .lbl{font-family:var(--mono);font-size:9px;text-transform:uppercase;letter-spacing:.15em;color:var(--fog);margin-bottom:8px}
.k-card .v{font-family:var(--serif);font-weight:600;font-size:36px;line-height:1;margin-bottom:4px;color:var(--gold)}
.k-card .d{font-size:11px;color:var(--fog)}
.k-card.em .v{color:var(--em-lt)} .k-card.wa .v{color:var(--to-lt)} .k-card.ru .v{color:var(--ru)} .k-card.vi .v{color:var(--vi)}
.sec{margin:24px 0 14px;padding-bottom:8px;border-bottom:1px dotted var(--line2);display:flex;align-items:baseline;gap:12px}
.sec h2{font-family:var(--serif);font-weight:500;font-size:22px;color:var(--paper)}
.sec h2 em{color:var(--gold);font-style:italic}
.sec .kick{font-family:var(--mono);font-size:10px;color:var(--fog);letter-spacing:.1em;text-transform:uppercase}
.sec .badge{margin-left:auto;padding:3px 9px;font-family:var(--mono);font-size:10px;background:var(--ink3);color:var(--gold);border:1px solid var(--line2);border-radius:2px}
.grid-cat{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:10px;margin-bottom:14px}
.pc{padding:10px 12px 10px 13px;background:var(--ink2);border:1px solid var(--line);border-left:2px solid var(--gold);border-radius:2px;transition:all .15s}
.pc:hover{border-left-color:var(--gold-br);transform:translateX(3px);background:var(--ink3)}
.pc.leg{border-left-color:var(--fog)} .pc.dup{border-left-color:var(--to)} .pc.dep{border-left-color:var(--ru)}
.pc a{color:var(--paper);font-family:var(--sans);font-size:12.5px;font-weight:500;text-decoration:none;display:block}
.pc a:hover{color:var(--gold)}
.pc .m{font-family:var(--mono);font-size:9px;color:var(--fog);margin-top:3px;display:flex;gap:10px}
.filter{position:sticky;top:8px;background:var(--ink);padding:10px 0;z-index:10;margin-bottom:14px;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.filter input{flex:1;min-width:200px;padding:8px 12px;background:var(--ink3);border:1px solid var(--line);color:var(--paper);font-family:var(--sans);font-size:12px;border-radius:2px;outline:none}
.filter input:focus{border-color:var(--gold)}
.filter .tag{padding:5px 10px;font-family:var(--mono);font-size:10px;background:var(--ink3);color:var(--smoke);border:1px solid var(--line);border-radius:2px;cursor:pointer;user-select:none}
.filter .tag.on{background:var(--gold);color:var(--ink);border-color:var(--gold)}
.cat-colors{display:flex;gap:4px;margin-bottom:14px;flex-wrap:wrap;font-size:10px;font-family:var(--mono)}
.cat-colors .c{padding:3px 8px;border-radius:10px}
.c-active{background:rgba(212,168,83,.15);color:var(--gold-lt);border:1px solid var(--gold)}
.c-legacy{background:rgba(107,116,144,.15);color:var(--smoke);border:1px solid var(--fog)}
.c-doublon{background:rgba(251,191,36,.1);color:var(--to-lt);border:1px solid var(--to)}
.c-deprecated{background:rgba(239,68,68,.1);color:var(--ru);border:1px solid var(--ru)}
.hint{padding:12px 14px;background:var(--ink2);border:1px solid var(--line);border-radius:2px;margin-bottom:14px;font-size:12px;color:var(--smoke);line-height:1.6}
.loading{padding:40px 0;text-align:center;color:var(--fog);font-family:var(--serif);font-style:italic}
footer{margin-top:40px;padding:14px 0;border-top:1px solid var(--line);text-align:center;color:var(--fog);font-family:var(--serif);font-style:italic;font-size:11.5px}
footer a{color:var(--gold);text-decoration:none;margin:0 6px}
.scroll-tip{font-size:10px;color:var(--fog);font-family:var(--mono);margin-top:2px}
@media(max-width:700px){.hd h1{font-size:24px}.grid-cat{grid-template-columns:1fr}.hd .back{position:static;margin-top:8px;display:inline-block}}
</style>
</head>
<body>
<header class="hd">
<div class="eyebrow">WEVAL · WTP Orphans Registry</div>
<h1>Toutes les pages <em>reliées à WTP</em></h1>
<p class="sub">Catalogue vivant — 333 pages scannées, catégorisées, actionnables</p>
<a href="/weval-technology-platform.html" class="back">← WTP Hub</a>
</header>
<div class="wrap">
<div class="kpis" id="kpis"></div>
<div class="hint">
🎯 <strong>Objectif</strong> : rattacher les 261 pages orphelines au référentiel WTP sans doublon ni écrasement.
Cliquez une page pour l'ouvrir. Filtrez par catégorie ou nom.
Les variantes LEGACY/DOUBLON/DEPRECATED sont archivables (consolidation).
</div>
<div class="cat-colors">
<span class="c c-active">● ACTIVE (liens or)</span>
<span class="c c-doublon">● DOUBLON (jaune)</span>
<span class="c c-legacy">● LEGACY (gris)</span>
<span class="c c-deprecated">● DEPRECATED (rouge)</span>
</div>
<div class="filter">
<input id="q" type="text" placeholder="Filter by name…" oninput="filterAll()">
<span class="tag on" data-cat="ALL" onclick="toggleCat(this)">ALL</span>
<span class="tag" data-cat="ACTIVE_HUB" onclick="toggleCat(this)">HUB</span>
<span class="tag" data-cat="ACTIVE_DASHBOARD" onclick="toggleCat(this)">DASHBOARD</span>
<span class="tag" data-cat="ACTIVE_AGENT" onclick="toggleCat(this)">AGENT</span>
<span class="tag" data-cat="ACTIVE_BLADE" onclick="toggleCat(this)">BLADE</span>
<span class="tag" data-cat="ACTIVE_AI" onclick="toggleCat(this)">AI</span>
<span class="tag" data-cat="ACTIVE_CRM" onclick="toggleCat(this)">CRM</span>
<span class="tag" data-cat="ACTIVE_ADMIN" onclick="toggleCat(this)">ADMIN</span>
<span class="tag" data-cat="ACTIVE_PRODUCT" onclick="toggleCat(this)">PRODUCT</span>
<span class="tag" data-cat="ACTIVE_OTHER" onclick="toggleCat(this)">OTHER</span>
<span class="tag" data-cat="DOUBLON" onclick="toggleCat(this)">DOUBLON</span>
<span class="tag" data-cat="LEGACY" onclick="toggleCat(this)">LEGACY</span>
<span class="tag" data-cat="TESTS" onclick="toggleCat(this)">TESTS</span>
</div>
<div id="content"><div class="loading">⏳ Scanning 333 pages…</div></div>
<footer>
Généré dynamiquement via <a href="/api/wtp-orphans-registry.php">/api/wtp-orphans-registry.php</a> ·
<a href="/weval-technology-platform.html">WTP Hub</a> ·
<a href="/all-ia-hub.html">All-IA Hub</a> ·
<a href="/wevia-master.html">WEVIA Master</a>
</footer>
</div>
<script>
let DATA = null, FILTER_CATS = new Set(['ALL']);
const CAT_LABELS = {
ACTIVE_HUB: { label: 'Hubs & Centers', kick: 'Points d\'entrée modulaires', color: 'var(--gold)' },
ACTIVE_DASHBOARD: { label: 'Dashboards & KPIs', kick: 'Tableaux de bord business', color: 'var(--em-lt)' },
ACTIVE_AGENT: { label: 'Agents', kick: 'Agents IA & assistants', color: 'var(--sa)' },
ACTIVE_BLADE: { label: 'Blade Hub', kick: 'Blade AI assistants', color: 'var(--vi)' },
ACTIVE_AI: { label: 'AI & LLM', kick: 'IA souveraines & modèles', color: 'var(--pi)' },
ACTIVE_CRM: { label: 'CRM & HCP', kick: 'Sales & healthcare', color: 'var(--em-lt)' },
ACTIVE_ADMIN: { label: 'Admin & Auth', kick: 'Back-office', color: 'var(--to-lt)' },
ACTIVE_PRODUCT: { label: 'Products & Offers', kick: 'Commercial pages', color: 'var(--gold-br)' },
ACTIVE_OTHER: { label: 'Autres pages', kick: 'Catégorisation libre', color: 'var(--paper)' },
DOUBLON: { label: 'Doublons probables', kick: 'Variantes à consolider', color: 'var(--to)' },
LEGACY: { label: 'Legacy', kick: 'Anciennes versions', color: 'var(--fog)' },
TESTS: { label: 'Tests & Demos', kick: 'Sandbox', color: 'var(--fog)' },
DEPRECATED: { label: 'Deprecated', kick: '404 / offline', color: 'var(--ru)' },
};
async function load() {
try {
const r = await fetch('/api/wtp-orphans-registry.php');
DATA = await r.json();
renderKPIs();
renderAll();
} catch (e) {
document.getElementById('content').innerHTML = `<div class="loading">❌ Erreur: ${e.message}</div>`;
}
}
function renderKPIs() {
const d = DATA;
const html = `
<div class="k-card"><div class="lbl">Total pages</div><div class="v">${d.total_html}</div><div class="d">scannées racine</div></div>
<div class="k-card em"><div class="lbl">Linkées WTP</div><div class="v">${d.linked_in_wtp}</div><div class="d">${d.link_rate_pct}% couverture</div></div>
<div class="k-card wa"><div class="lbl">Orphelines</div><div class="v">${d.orphans_count}</div><div class="d">à rattacher</div></div>
<div class="k-card"><div class="lbl">Hubs actifs</div><div class="v">${d.counts.ACTIVE_HUB}</div><div class="d">+ ${d.counts.ACTIVE_DASHBOARD} dashboards</div></div>
<div class="k-card vi"><div class="lbl">À consolider</div><div class="v">${d.counts.DOUBLON + d.counts.LEGACY + d.counts.TESTS + d.counts.DEPRECATED}</div><div class="d">doublons/legacy</div></div>
<div class="k-card"><div class="lbl">Scan</div><div class="v" style="font-size:20px">${d.scan_duration_ms}ms</div><div class="d">live dynamique</div></div>
`;
document.getElementById('kpis').innerHTML = html;
}
function renderAll() {
const d = DATA;
const q = (document.getElementById('q').value || '').toLowerCase();
let html = '';
const order = ['ACTIVE_HUB','ACTIVE_DASHBOARD','ACTIVE_AGENT','ACTIVE_BLADE','ACTIVE_AI','ACTIVE_CRM','ACTIVE_ADMIN','ACTIVE_PRODUCT','ACTIVE_OTHER','DOUBLON','LEGACY','TESTS','DEPRECATED'];
for (const cat of order) {
if (!FILTER_CATS.has('ALL') && !FILTER_CATS.has(cat)) continue;
const items = d.categories[cat] || [];
const filtered = q ? items.filter(i => i.name.toLowerCase().includes(q)) : items;
if (!filtered.length) continue;
const meta = CAT_LABELS[cat] || { label: cat, kick: '', color: 'var(--gold)' };
html += `<div class="sec"><h2>${meta.label} <em>${cat.split('_')[1]?.toLowerCase() || ''}</em></h2><span class="kick">${meta.kick}</span><span class="badge">${filtered.length}</span></div>`;
html += `<div class="grid-cat">`;
const pcClass = cat === 'LEGACY' ? 'pc leg' : cat === 'DOUBLON' ? 'pc dup' : cat === 'DEPRECATED' ? 'pc dep' : 'pc';
for (const item of filtered) {
const sizeKB = (item.size / 1024).toFixed(0);
html += `<div class="${pcClass}"><a href="/${item.name}" target="_blank">${item.name}</a><div class="m"><span>${sizeKB} KB</span><span>${item.mtime_h || '?'}</span></div></div>`;
}
html += `</div>`;
}
document.getElementById('content').innerHTML = html || `<div class="loading">Aucune page trouvée pour ces filtres</div>`;
}
function toggleCat(el) {
const cat = el.dataset.cat;
document.querySelectorAll('.tag').forEach(t => t.classList.remove('on'));
FILTER_CATS = new Set([cat]);
el.classList.add('on');
renderAll();
}
function filterAll() { renderAll(); }
load();
</script>
</body>
</html>