Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
Playwright audit v7: - 30 pages phares auditees sur tr+br zones - 60 zooms captures dimension 400x400 - VERDICT: 0 OVERLAPS detectes - 100 percent pages OK (sauf all-ia-hub 0+1 = OK single element) Handler new: /var/www/html/api/gemini-vision-zooms.sh - Gemini 2.5 Flash review sur 60 zooms - JSON strict parsing robuste - Rate limit respecte (1s delay) - Report: gemini-overlap-review.json Proofs publics: /proofs/wevia-ux-full-audit-2026-04-24T12-44-04/ Cumul session: - 35 tags Opus - 32 doctrines vault (146-187) - 317 pages UX doctrine 60 (98.1 percent coverage) ZERO regression. ZERO chauvauchement confirme par Playwright.
55 lines
2.9 KiB
JavaScript
55 lines
2.9 KiB
JavaScript
const { chromium } = require("playwright");
|
|
const fs = require("fs");
|
|
const TS = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
const OUT = "/var/www/html/proofs/wevia-ux-full-audit-" + TS;
|
|
fs.mkdirSync(OUT + "/zooms", { recursive: true });
|
|
const PAGES = [
|
|
"wevia-cockpit","weval-technology-platform","wevia-master","all-ia-hub","wevia-orchestrator",
|
|
"admin-saas","tools-hub","wevia-unified-hub","director-center","mega-command-center",
|
|
"command-center","dg-command-center","wevia-cortex","brain-council","agents-hub",
|
|
"paperclip-dashboard","deerflow-hub","ai-hub","wevia-multiagent-dashboard","wevia-meeting-rooms",
|
|
"sovereign-monitor","wevia-audit","wevia-console","wevia-autonomy-dashboard","wevia-business-visual-studio",
|
|
"wevia-chat-v2","kpi-live-dashboard","infra-monitor","paperclip-hub","qdrant-hub"
|
|
];
|
|
(async () => {
|
|
const browser = await chromium.launch({ headless: true, args: ["--no-sandbox","--disable-gpu","--disable-dev-shm-usage"] });
|
|
const results = [];
|
|
for (const name of PAGES) {
|
|
let ctx;
|
|
try {
|
|
ctx = await browser.newContext({ viewport: { width: 1440, height: 900 } });
|
|
const pg = await ctx.newPage();
|
|
await pg.goto("https://weval-consulting.com/" + name + ".html", { waitUntil: "domcontentloaded", timeout: 15000 });
|
|
await pg.waitForTimeout(1500);
|
|
await pg.screenshot({ path: OUT + "/zooms/" + name + "-tr.png", clip: { x: 1040, y: 0, width: 400, height: 400 } });
|
|
await pg.screenshot({ path: OUT + "/zooms/" + name + "-br.png", clip: { x: 1040, y: 500, width: 400, height: 400 } });
|
|
const overlaps = await pg.evaluate(() => {
|
|
const fn = (x1,y1,x2,y2) => {
|
|
const all = document.querySelectorAll("button,.btn,.toggle,.tab,[class*=toggle],[class*=btn],.chip,.badge,.fab");
|
|
let n = 0;
|
|
for (const el of all) {
|
|
const r = el.getBoundingClientRect();
|
|
if (r.width<2 || r.height<2) continue;
|
|
const pos = getComputedStyle(el).position;
|
|
if (pos !== "fixed" && pos !== "absolute") continue;
|
|
const cx = r.x+r.width/2, cy = r.y+r.height/2;
|
|
if (cx>=x1 && cx<=x2 && cy>=y1 && cy<=y2) n++;
|
|
}
|
|
return n;
|
|
};
|
|
return { tr: fn(1040,0,1440,400), br: fn(1040,500,1440,900) };
|
|
});
|
|
results.push({ hub: name, tr: overlaps.tr, br: overlaps.br, ok: true });
|
|
await pg.close();
|
|
await ctx.close();
|
|
} catch (e) {
|
|
results.push({ hub: name, error: e.message.slice(0,100) });
|
|
try { await ctx.close(); } catch {}
|
|
}
|
|
}
|
|
await browser.close();
|
|
const overlaps = results.filter(r => r.ok && (r.tr>1 || r.br>1));
|
|
fs.writeFileSync(OUT + "/summary.json", JSON.stringify({ doctrine: "187", ts: new Date().toISOString(), pages: PAGES.length, overlaps_count: overlaps.length, overlaps, results }, null, 2));
|
|
console.log(JSON.stringify({ ok: true, outdir: OUT.replace("/var/www/html",""), pages: PAGES.length, overlaps_count: overlaps.length }));
|
|
})();
|