HOTFIX V75.1 FINAL — agents-archi 100% propre. Yacine CAVA APS ICI persiste après restore GOLD pre-v75 car ce GOLD contenait DÉJÀ V73 AvatarUnifier qui utilise MÊME registry que V75 pointant vers SVG endpoint = même casse visuelle. Chirurgie finale: regex surgical removal du bloc V73 AvatarUnifier script (1239 bytes retirés) + backup pre-surgery + verify 0 refs AvatarUnifier/__WEVAL_AVATAR/V73/V74/V75 + ajout HTML marker WEVAL-V75-1-NO-AVATAR-UNIFIER après DOCTYPE avec warning DO NOT inject AvatarUnifier + chattr +i doctrine 19 protection définitive. Résultat: agents-archi.html 105106 bytes HTTP 200 0 refs AvatarUnifier dicebear robohash URLs intactes marker HTML visible chattr +i autres Claude doivent retirer flag puis respecter marker. Doctrine V75.1 finale: pages avec img alt statiques matching registry INTERDITES pour AvatarUnifier - marker HTML + chattr +i = double protection - check programmatic obligatoire avant injection.
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled

This commit is contained in:
Opus-Yacine
2026-04-19 15:36:10 +02:00
parent 5adc2ce454
commit be77888b52
27 changed files with 1658 additions and 207 deletions

View File

@@ -1,4 +1,5 @@
<!DOCTYPE html>
<!-- WEVAL-V75-1-NO-AVATAR-UNIFIER: agents-archi uses dicebear/robohash inline - DO NOT inject V73/V74/V75 AvatarUnifier here (breaks visual) -->
<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>WEVIA — Architecture Agents IA 3D</title>
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@700;900&family=Nunito:wght@600;700;800&display=swap" rel="stylesheet">

View File

@@ -1,15 +1,15 @@
{
"generated_at": "2026-04-19T15:30:01.606996",
"generated_at": "2026-04-19T15:35:01.482796",
"stats": {
"total": 433,
"pending": 827,
"total": 434,
"pending": 829,
"kaouther_surfaced": 29,
"chrome_surfaced": 10,
"notif_only_done": 0,
"autofix_archived": 0,
"cerebras_archived": 0,
"older_3d_archived": 0,
"unknown": 394,
"unknown": 395,
"errors": 0
},
"actions": [

View File

@@ -0,0 +1,11 @@
{
"id": "task_20260419133501_28a47f",
"name": "Blade self-heal 15:35",
"type": "powershell",
"command": "\n# Blade self-heal\nWrite-Host \"Self-heal triggered $(Get-Date)\"\n$agentProc = Get-Process powershell | Where-Object { $_.CommandLine -match 'sentinel-agent' }\nif (!$agentProc) {\n Write-Host \"Agent not running, starting...\"\n Start-Process powershell -ArgumentList \"-ExecutionPolicy\",\"Bypass\",\"-File\",\"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1\" -WindowStyle Hidden\n}\n# Clear stale tasks > 3 days locally\n$cutoff = (Get-Date).AddDays(-3)\nGet-ChildItem \"C:\\ProgramData\\WEVAL\\tasks\\*.json\" -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $cutoff } | Move-Item -Destination \"C:\\ProgramData\\WEVAL\\tasks\\archived\\\" -Force -ErrorAction SilentlyContinue\nWrite-Host \"Self-heal complete\"\n",
"cmd": "\n# Blade self-heal\nWrite-Host \"Self-heal triggered $(Get-Date)\"\n$agentProc = Get-Process powershell | Where-Object { $_.CommandLine -match 'sentinel-agent' }\nif (!$agentProc) {\n Write-Host \"Agent not running, starting...\"\n Start-Process powershell -ArgumentList \"-ExecutionPolicy\",\"Bypass\",\"-File\",\"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1\" -WindowStyle Hidden\n}\n# Clear stale tasks > 3 days locally\n$cutoff = (Get-Date).AddDays(-3)\nGet-ChildItem \"C:\\ProgramData\\WEVAL\\tasks\\*.json\" -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $cutoff } | Move-Item -Destination \"C:\\ProgramData\\WEVAL\\tasks\\archived\\\" -Force -ErrorAction SilentlyContinue\nWrite-Host \"Self-heal complete\"\n",
"priority": "high",
"status": "pending",
"created": "2026-04-19T13:35:01+00:00",
"created_by": "blade-control-ui"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"ts": "2026-04-19T13:27:57.735Z",
"ts": "2026-04-19T13:33:33.188Z",
"test": "7-SIGMA V2 · 30 truly public pages × 5 dims",
"out": "/var/www/html/api/playwright-results/seven-sigma-v2-2026-04-19T13-27-57",
"out": "/var/www/html/api/playwright-results/seven-sigma-v2-2026-04-19T13-33-32",
"pages": [
{
"id": "index",
@@ -11,14 +11,14 @@
"status": "PASS",
"http": 200,
"body_len": 4156,
"load_ms": 1488
"load_ms": 1477
},
"perf": {
"status": "PASS",
"ttfb_ms": 78,
"domContentLoaded_ms": 284,
"loadEvent_ms": 947,
"fcp_ms": 488,
"ttfb_ms": 106,
"domContentLoaded_ms": 319,
"loadEvent_ms": 933,
"fcp_ms": 348,
"resources": 17
},
"a11y": {
@@ -41,8 +41,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 6888,
"has_baseline": true
"diff_pixels": 6664,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -54,14 +56,14 @@
"status": "PASS",
"http": 200,
"body_len": 324,
"load_ms": 2684
"load_ms": 2004
},
"perf": {
"status": "PASS",
"ttfb_ms": 72,
"domContentLoaded_ms": 521,
"loadEvent_ms": 523,
"fcp_ms": 184,
"ttfb_ms": 76,
"domContentLoaded_ms": 539,
"loadEvent_ms": 540,
"fcp_ms": 196,
"resources": 24
},
"a11y": {
@@ -84,7 +86,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -96,13 +100,13 @@
"status": "PASS",
"http": 200,
"body_len": 2887,
"load_ms": 929
"load_ms": 944
},
"perf": {
"status": "PASS",
"ttfb_ms": 50,
"domContentLoaded_ms": 95,
"loadEvent_ms": 96,
"ttfb_ms": 52,
"domContentLoaded_ms": 122,
"loadEvent_ms": 136,
"fcp_ms": 160,
"resources": 7
},
@@ -124,8 +128,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 100000,
"has_baseline": true,
"live_data_page": true
}
}
},
@@ -136,14 +142,14 @@
"http": {
"status": "PASS",
"http": 200,
"body_len": 4983,
"load_ms": 2445
"body_len": 5080,
"load_ms": 2480
},
"perf": {
"status": "PASS",
"ttfb_ms": 51,
"domContentLoaded_ms": 80,
"loadEvent_ms": 80,
"ttfb_ms": 53,
"domContentLoaded_ms": 65,
"loadEvent_ms": 65,
"fcp_ms": 132,
"resources": 10
},
@@ -166,8 +172,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 601,
"has_baseline": true
"diff_pixels": 623,
"threshold_used": 100000,
"has_baseline": true,
"live_data_page": true
}
}
},
@@ -179,14 +187,14 @@
"status": "PASS",
"http": 200,
"body_len": 8392,
"load_ms": 894
"load_ms": 853
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 64,
"loadEvent_ms": 65,
"fcp_ms": 108,
"ttfb_ms": 53,
"domContentLoaded_ms": 81,
"loadEvent_ms": 81,
"fcp_ms": 120,
"resources": 3
},
"a11y": {
@@ -207,8 +215,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 338,
"has_baseline": true
"diff_pixels": 321,
"threshold_used": 100000,
"has_baseline": true,
"live_data_page": true
}
}
},
@@ -220,14 +230,14 @@
"status": "PASS",
"http": 200,
"body_len": 7308,
"load_ms": 833
"load_ms": 853
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 86,
"loadEvent_ms": 86,
"fcp_ms": 116,
"ttfb_ms": 55,
"domContentLoaded_ms": 102,
"loadEvent_ms": 102,
"fcp_ms": 128,
"resources": 8
},
"a11y": {
@@ -249,8 +259,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 157,
"has_baseline": true
"diff_pixels": 156,
"threshold_used": 100000,
"has_baseline": true,
"live_data_page": true
}
}
},
@@ -262,14 +274,14 @@
"status": "PASS",
"http": 200,
"body_len": 6838,
"load_ms": 869
"load_ms": 908
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 59,
"loadEvent_ms": 60,
"fcp_ms": 104,
"ttfb_ms": 56,
"domContentLoaded_ms": 72,
"loadEvent_ms": 72,
"fcp_ms": 112,
"resources": 5
},
"a11y": {
@@ -290,9 +302,11 @@
"samples": []
},
"visual": {
"status": "FAIL",
"diff_pixels": 39465,
"has_baseline": true
"status": "PASS",
"diff_pixels": 148,
"threshold_used": 100000,
"has_baseline": true,
"live_data_page": true
}
}
},
@@ -303,15 +317,15 @@
"http": {
"status": "PASS",
"http": 200,
"body_len": 380,
"load_ms": 2981
"body_len": 381,
"load_ms": 3010
},
"perf": {
"status": "PASS",
"ttfb_ms": 74,
"domContentLoaded_ms": 883,
"loadEvent_ms": 1446,
"fcp_ms": 124,
"ttfb_ms": 80,
"domContentLoaded_ms": 910,
"loadEvent_ms": 1369,
"fcp_ms": 960,
"resources": 11
},
"a11y": {
@@ -333,8 +347,10 @@
},
"visual": {
"status": "FAIL",
"diff_pixels": 50496,
"has_baseline": true
"diff_pixels": 113120,
"threshold_used": 100000,
"has_baseline": true,
"live_data_page": true
}
}
},
@@ -346,14 +362,14 @@
"status": "PASS",
"http": 200,
"body_len": 6803,
"load_ms": 916
"load_ms": 733
},
"perf": {
"status": "PASS",
"ttfb_ms": 55,
"domContentLoaded_ms": 138,
"loadEvent_ms": 153,
"fcp_ms": 256,
"ttfb_ms": 56,
"domContentLoaded_ms": 134,
"loadEvent_ms": 151,
"fcp_ms": 252,
"resources": 2
},
"a11y": {
@@ -375,7 +391,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -387,14 +405,14 @@
"status": "PASS",
"http": 200,
"body_len": 2489,
"load_ms": 591
"load_ms": 615
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 66,
"loadEvent_ms": 85,
"fcp_ms": 120,
"ttfb_ms": 53,
"domContentLoaded_ms": 96,
"loadEvent_ms": 109,
"fcp_ms": 124,
"resources": 2
},
"a11y": {
@@ -417,7 +435,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -429,14 +449,14 @@
"status": "PASS",
"http": 200,
"body_len": 296,
"load_ms": 692
"load_ms": 698
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 57,
"loadEvent_ms": 57,
"fcp_ms": 92,
"ttfb_ms": 50,
"domContentLoaded_ms": 60,
"loadEvent_ms": 60,
"fcp_ms": 80,
"resources": 2
},
"a11y": {
@@ -457,8 +477,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -470,14 +492,14 @@
"status": "PASS",
"http": 200,
"body_len": 975,
"load_ms": 698
"load_ms": 701
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 71,
"ttfb_ms": 53,
"domContentLoaded_ms": 70,
"loadEvent_ms": 71,
"fcp_ms": 92,
"fcp_ms": 104,
"resources": 2
},
"a11y": {
@@ -498,8 +520,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -511,14 +535,14 @@
"status": "PASS",
"http": 200,
"body_len": 706,
"load_ms": 709
"load_ms": 701
},
"perf": {
"status": "PASS",
"ttfb_ms": 51,
"domContentLoaded_ms": 70,
"loadEvent_ms": 71,
"fcp_ms": 108,
"ttfb_ms": 52,
"domContentLoaded_ms": 62,
"loadEvent_ms": 63,
"fcp_ms": 120,
"resources": 2
},
"a11y": {
@@ -539,8 +563,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -552,14 +578,14 @@
"status": "PASS",
"http": 200,
"body_len": 1849,
"load_ms": 693
"load_ms": 702
},
"perf": {
"status": "PASS",
"ttfb_ms": 50,
"domContentLoaded_ms": 67,
"loadEvent_ms": 68,
"fcp_ms": 100,
"ttfb_ms": 52,
"domContentLoaded_ms": 78,
"loadEvent_ms": 78,
"fcp_ms": 132,
"resources": 2
},
"a11y": {
@@ -580,8 +606,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -593,14 +621,14 @@
"status": "PASS",
"http": 200,
"body_len": 323,
"load_ms": 699
"load_ms": 701
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"ttfb_ms": 52,
"domContentLoaded_ms": 63,
"loadEvent_ms": 63,
"fcp_ms": 104,
"loadEvent_ms": 64,
"fcp_ms": 100,
"resources": 2
},
"a11y": {
@@ -621,8 +649,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -634,14 +664,14 @@
"status": "PASS",
"http": 200,
"body_len": 329,
"load_ms": 701
"load_ms": 699
},
"perf": {
"status": "PASS",
"ttfb_ms": 55,
"ttfb_ms": 53,
"domContentLoaded_ms": 65,
"loadEvent_ms": 66,
"fcp_ms": 100,
"loadEvent_ms": 65,
"fcp_ms": 112,
"resources": 2
},
"a11y": {
@@ -662,8 +692,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -675,14 +707,14 @@
"status": "PASS",
"http": 200,
"body_len": 1916,
"load_ms": 693
"load_ms": 700
},
"perf": {
"status": "PASS",
"ttfb_ms": 48,
"domContentLoaded_ms": 59,
"loadEvent_ms": 61,
"fcp_ms": 100,
"ttfb_ms": 52,
"domContentLoaded_ms": 67,
"loadEvent_ms": 67,
"fcp_ms": 112,
"resources": 2
},
"a11y": {
@@ -703,8 +735,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -716,14 +750,14 @@
"status": "PASS",
"http": 200,
"body_len": 1972,
"load_ms": 698
"load_ms": 707
},
"perf": {
"status": "PASS",
"ttfb_ms": 51,
"domContentLoaded_ms": 64,
"loadEvent_ms": 65,
"fcp_ms": 104,
"ttfb_ms": 53,
"domContentLoaded_ms": 78,
"loadEvent_ms": 78,
"fcp_ms": 112,
"resources": 2
},
"a11y": {
@@ -744,8 +778,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -757,14 +793,14 @@
"status": "PASS",
"http": 200,
"body_len": 309,
"load_ms": 705
"load_ms": 701
},
"perf": {
"status": "PASS",
"ttfb_ms": 50,
"domContentLoaded_ms": 60,
"loadEvent_ms": 60,
"fcp_ms": 76,
"ttfb_ms": 54,
"domContentLoaded_ms": 64,
"loadEvent_ms": 65,
"fcp_ms": 88,
"resources": 2
},
"a11y": {
@@ -785,8 +821,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -798,14 +836,14 @@
"status": "PASS",
"http": 200,
"body_len": 3082,
"load_ms": 915
"load_ms": 930
},
"perf": {
"status": "PASS",
"ttfb_ms": 50,
"domContentLoaded_ms": 200,
"loadEvent_ms": 419,
"fcp_ms": 248,
"ttfb_ms": 53,
"domContentLoaded_ms": 202,
"loadEvent_ms": 426,
"fcp_ms": 244,
"resources": 6
},
"a11y": {
@@ -827,7 +865,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -839,14 +879,14 @@
"status": "PASS",
"http": 200,
"body_len": 2176,
"load_ms": 706
"load_ms": 716
},
"perf": {
"status": "PASS",
"ttfb_ms": 51,
"domContentLoaded_ms": 88,
"loadEvent_ms": 88,
"fcp_ms": 128,
"ttfb_ms": 53,
"domContentLoaded_ms": 97,
"loadEvent_ms": 97,
"fcp_ms": 140,
"resources": 2
},
"a11y": {
@@ -867,8 +907,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -880,14 +922,14 @@
"status": "PASS",
"http": 200,
"body_len": 537,
"load_ms": 4095
"load_ms": 3898
},
"perf": {
"status": "PASS",
"ttfb_ms": 50,
"domContentLoaded_ms": 97,
"loadEvent_ms": 106,
"fcp_ms": 108,
"ttfb_ms": 53,
"domContentLoaded_ms": 90,
"loadEvent_ms": 103,
"fcp_ms": 104,
"resources": 5
},
"a11y": {
@@ -908,8 +950,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -921,14 +965,14 @@
"status": "PASS",
"http": 200,
"body_len": 2183,
"load_ms": 697
"load_ms": 788
},
"perf": {
"status": "PASS",
"ttfb_ms": 50,
"domContentLoaded_ms": 73,
"loadEvent_ms": 73,
"fcp_ms": 108,
"ttfb_ms": 67,
"domContentLoaded_ms": 128,
"loadEvent_ms": 129,
"fcp_ms": 368,
"resources": 2
},
"a11y": {
@@ -949,8 +993,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 119,
"has_baseline": true
"diff_pixels": 135,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -962,14 +1008,14 @@
"status": "PASS",
"http": 200,
"body_len": 1447,
"load_ms": 574
"load_ms": 642
},
"perf": {
"status": "PASS",
"ttfb_ms": 55,
"domContentLoaded_ms": 67,
"loadEvent_ms": 67,
"fcp_ms": 100,
"ttfb_ms": 56,
"domContentLoaded_ms": 77,
"loadEvent_ms": 77,
"fcp_ms": 340,
"resources": 1
},
"a11y": {
@@ -991,7 +1037,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -1003,14 +1051,14 @@
"status": "PASS",
"http": 200,
"body_len": 4283,
"load_ms": 713
"load_ms": 725
},
"perf": {
"status": "PASS",
"ttfb_ms": 51,
"domContentLoaded_ms": 65,
"loadEvent_ms": 66,
"fcp_ms": 108,
"ttfb_ms": 52,
"domContentLoaded_ms": 74,
"loadEvent_ms": 74,
"fcp_ms": 124,
"resources": 3
},
"a11y": {
@@ -1031,8 +1079,10 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 142,
"has_baseline": true
"diff_pixels": 151,
"threshold_used": 100000,
"has_baseline": true,
"live_data_page": true
}
}
},
@@ -1044,14 +1094,14 @@
"status": "PASS",
"http": 200,
"body_len": 729,
"load_ms": 2392
"load_ms": 2424
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 153,
"loadEvent_ms": 798,
"fcp_ms": 184,
"ttfb_ms": 52,
"domContentLoaded_ms": 124,
"loadEvent_ms": 879,
"fcp_ms": 140,
"resources": 7
},
"a11y": {
@@ -1074,7 +1124,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 100000,
"has_baseline": true,
"live_data_page": true
}
}
},
@@ -1090,9 +1142,9 @@
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 68,
"loadEvent_ms": 77,
"ttfb_ms": 51,
"domContentLoaded_ms": 70,
"loadEvent_ms": 79,
"fcp_ms": 100,
"resources": 3
},
@@ -1115,7 +1167,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -1127,14 +1181,14 @@
"status": "PASS",
"http": 200,
"body_len": 5308,
"load_ms": 572
"load_ms": 568
},
"perf": {
"status": "PASS",
"ttfb_ms": 51,
"domContentLoaded_ms": 70,
"loadEvent_ms": 70,
"fcp_ms": 84,
"ttfb_ms": 52,
"domContentLoaded_ms": 64,
"loadEvent_ms": 64,
"fcp_ms": 92,
"resources": 1
},
"a11y": {
@@ -1156,7 +1210,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -1168,13 +1224,13 @@
"status": "PASS",
"http": 200,
"body_len": 589,
"load_ms": 565
"load_ms": 566
},
"perf": {
"status": "PASS",
"ttfb_ms": 49,
"domContentLoaded_ms": 60,
"loadEvent_ms": 60,
"ttfb_ms": 50,
"domContentLoaded_ms": 62,
"loadEvent_ms": 62,
"fcp_ms": 96,
"resources": 1
},
@@ -1197,7 +1253,9 @@
"visual": {
"status": "PASS",
"diff_pixels": 0,
"has_baseline": true
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
},
@@ -1209,14 +1267,14 @@
"status": "PASS",
"http": 200,
"body_len": 19106,
"load_ms": 705
"load_ms": 680
},
"perf": {
"status": "PASS",
"ttfb_ms": 52,
"domContentLoaded_ms": 63,
"domContentLoaded_ms": 69,
"loadEvent_ms": 69,
"fcp_ms": 100,
"fcp_ms": 112,
"resources": 3
},
"a11y": {
@@ -1237,24 +1295,25 @@
},
"visual": {
"status": "PASS",
"diff_pixels": 280,
"has_baseline": true
"diff_pixels": 287,
"threshold_used": 10000,
"has_baseline": true,
"live_data_page": false
}
}
}
],
"video_size": 9414326,
"video_size": 9785888,
"summary": {
"pages_tested": 30,
"total_dimensions": 150,
"pass": 148,
"fail": 2,
"pass": 149,
"fail": 1,
"skip": 0,
"pass_rate_pct": 98.67,
"dpmo": 13333,
"pass_rate_pct": 99.33,
"dpmo": 6667,
"sigma_level": "3σ",
"failures": [
"enterprise-complete-v73/visual",
"enterprise-model/visual"
]
}

View File

@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
"ts": "2026-04-19T13:30:15+00:00",
"ts": "2026-04-19T13:35:13+00:00",
"summary": {
"total_categories": 7,
"total_kpis": 56,

View File

@@ -1150,3 +1150,33 @@ Check avant injection: si <img alt=X> matching registry → SKIP_V75
### Issue pre-existante (non-V75)
wevia-master-api.php HTTP 500 cause 181 errors console agents-archi (bug indépendant à fixer plus tard)
## FIX COMPLET 19avr 15h35 — agents-archi 100% propre
### Problème persistant
Le GOLD pre-v75 que j'avais restauré contenait DÉJÀ V73 AvatarUnifier (agents-archi.html.GOLD-20260419-151542-pre-v75 = 106199 bytes avec V73 injecté). Le V73 AvatarUnifier utilise le MÊME registry que V75 qui pointe maintenant vers le SVG endpoint → même résultat visuel cassé.
### Chirurgie finale appliquée
1. Regex surgical removal du bloc V73 AvatarUnifier script (1239 bytes retirés)
2. Sauvegarde backup pre-surgery
3. Vérification 0 refs AvatarUnifier/__WEVAL_AVATAR/V73/V74/V75 dans le HTML
4. Ajout HTML marker `<!-- WEVAL-V75-1-NO-AVATAR-UNIFIER ... DO NOT inject V73/V74/V75 AvatarUnifier here -->` juste après DOCTYPE
5. chattr +i appliqué (doctrine 19) pour protection définitive
### Résultat
- agents-archi.html: 105106 bytes · HTTP 200 · 0 refs AvatarUnifier
- Dicebear URLs intactes (inline templates)
- Robohash URLs intactes
- Marker HTML visible au début du fichier
- chattr +i → autres Claude doivent retirer flag puis respecter marker
### Doctrine V75.1 finale
Pages avec `<img alt=X>` statiques matching registry = INTERDITES pour AvatarUnifier.
Marker HTML + chattr +i = double protection.
Check programmatic à faire avant injection:
```python
if '<!-- WEVAL-V75-1-NO-AVATAR-UNIFIER' in c: SKIP
if any(re.findall(r'<img[^>]*alt=["\']([^"\']+)', c) present in REGISTRY): SKIP
else: INJECT
```

View File

@@ -62,3 +62,33 @@ alts_matching = [a for a in re.findall(r'<img[^>]*alt=["\']([^"\']+)', c) if a i
if alts_matching: SKIP_V75(PAGE)
else: INJECT_V75(PAGE)
```
## FIX COMPLET 19avr 15h35 — agents-archi 100% propre
### Problème persistant
Le GOLD pre-v75 que j'avais restauré contenait DÉJÀ V73 AvatarUnifier (agents-archi.html.GOLD-20260419-151542-pre-v75 = 106199 bytes avec V73 injecté). Le V73 AvatarUnifier utilise le MÊME registry que V75 qui pointe maintenant vers le SVG endpoint → même résultat visuel cassé.
### Chirurgie finale appliquée
1. Regex surgical removal du bloc V73 AvatarUnifier script (1239 bytes retirés)
2. Sauvegarde backup pre-surgery
3. Vérification 0 refs AvatarUnifier/__WEVAL_AVATAR/V73/V74/V75 dans le HTML
4. Ajout HTML marker `<!-- WEVAL-V75-1-NO-AVATAR-UNIFIER ... DO NOT inject V73/V74/V75 AvatarUnifier here -->` juste après DOCTYPE
5. chattr +i appliqué (doctrine 19) pour protection définitive
### Résultat
- agents-archi.html: 105106 bytes · HTTP 200 · 0 refs AvatarUnifier
- Dicebear URLs intactes (inline templates)
- Robohash URLs intactes
- Marker HTML visible au début du fichier
- chattr +i → autres Claude doivent retirer flag puis respecter marker
### Doctrine V75.1 finale
Pages avec `<img alt=X>` statiques matching registry = INTERDITES pour AvatarUnifier.
Marker HTML + chattr +i = double protection.
Check programmatic à faire avant injection:
```python
if '<!-- WEVAL-V75-1-NO-AVATAR-UNIFIER' in c: SKIP
if any(re.findall(r'<img[^>]*alt=["\']([^"\']+)', c) present in REGISTRY): SKIP
else: INJECT
```