' +
- ''+e.icon+' '+e.category+'
' +
+ ''+e.icon+' '+e.category+''+statusBadge(e.http_status)+'
' +
''+e.display+'
' +
''+e.name+' - '+e.size_kb+'KB
' +
''
diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json
index d4574e6a0..fa9145ee0 100644
--- a/api/blade-actions-surfaced.json
+++ b/api/blade-actions-surfaced.json
@@ -1,15 +1,15 @@
{
- "generated_at": "2026-04-21T09:40:02.127601",
+ "generated_at": "2026-04-21T09:45:02.061355",
"stats": {
"total": 47,
- "pending": 32,
+ "pending": 30,
"kaouther_surfaced": 18,
"chrome_surfaced": 2,
"notif_only_done": 0,
"autofix_archived": 0,
"cerebras_archived": 0,
"older_3d_archived": 0,
- "unknown": 6,
+ "unknown": 5,
"errors": 0
},
"actions": [
diff --git a/api/blade-tasks/v117-badges-proof/01-badges.png b/api/blade-tasks/v117-badges-proof/01-badges.png
new file mode 100644
index 000000000..8ade0ccae
Binary files /dev/null and b/api/blade-tasks/v117-badges-proof/01-badges.png differ
diff --git a/api/blade-tasks/v117-badges-proof/6f5159d328ea31cb93784468d7366c94.webm b/api/blade-tasks/v117-badges-proof/6f5159d328ea31cb93784468d7366c94.webm
new file mode 100644
index 000000000..de8ede2e7
Binary files /dev/null and b/api/blade-tasks/v117-badges-proof/6f5159d328ea31cb93784468d7366c94.webm differ
diff --git a/api/blade-tasks/v117-badges-proof/proof.json b/api/blade-tasks/v117-badges-proof/proof.json
new file mode 100644
index 000000000..34b3f7c0f
--- /dev/null
+++ b/api/blade-tasks/v117-badges-proof/proof.json
@@ -0,0 +1,10 @@
+{
+ "v117": "badges",
+ "state": {
+ "tiles": 69,
+ "badges_200": 5,
+ "badges_auth": 5,
+ "badges_error": 5
+ },
+ "VERDICT": "PARTIAL"
+}
\ No newline at end of file
diff --git a/api/dashboards-registry.php b/api/dashboards-registry.php
index 793ca8fcb..0c4dc4dd9 100644
--- a/api/dashboards-registry.php
+++ b/api/dashboards-registry.php
@@ -43,13 +43,15 @@ $byCategory = [];
$checkStatus = isset($_GET['check']) && $_GET['check'] === '1';
// V117-HTTP-STATUS: optional live HTTP status via local curl
function checkHttp($name) {
- $ch = curl_init("http://127.0.0.1/$name");
+ /* V117-CURL-FIX: https with self-signed + follow 1 redirect to get real status */
+ $ch = curl_init("https://weval-consulting.com/$name");
curl_setopt_array($ch, [
CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 2,
+ CURLOPT_SSL_VERIFYPEER => false,
+ CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_FOLLOWLOCATION => false,
- CURLOPT_HTTPHEADER => ['Host: weval-consulting.com']
]);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
diff --git a/api/em-kpi-cache.json b/api/em-kpi-cache.json
index 33440a5c5..e69de29bb 100644
--- a/api/em-kpi-cache.json
+++ b/api/em-kpi-cache.json
@@ -1,281 +0,0 @@
-{
- "ts": "2026-04-21T07:40:01+00:00",
- "server": "s204",
- "s204": {
- "load": 2.84,
- "uptime": "2026-04-14 11:51:24",
- "ram_total_mb": 31335,
- "ram_used_mb": 12090,
- "ram_free_mb": 19244,
- "disk_total": "150G",
- "disk_used": "116G",
- "disk_free": "29G",
- "disk_pct": "81%",
- "fpm_workers": 141,
- "docker_containers": 19,
- "cpu_cores": 8
- },
- "s95": {
- "load": 0.17,
- "disk_pct": "81%",
- "status": "UP",
- "ram_total_mb": 15610,
- "ram_free_mb": 11922
- },
- "pmta": [
- {
- "name": "SER6",
- "ip": "110.239.84.121",
- "status": "DOWN"
- },
- {
- "name": "SER7",
- "ip": "110.239.65.64",
- "status": "DOWN"
- },
- {
- "name": "SER8",
- "ip": "182.160.55.107",
- "status": "DOWN"
- },
- {
- "name": "SER9",
- "ip": "110.239.86.68",
- "status": "DOWN"
- }
- ],
- "assets": {
- "html_pages": 293,
- "php_apis": 774,
- "wiki_entries": 1928,
- "vault_doctrines": 59,
- "vault_sessions": 104,
- "vault_decisions": 12
- },
- "tools": {
- "total": 627,
- "registry_version": "?"
- },
- "sovereign": {
- "status": "UP",
- "providers": [
- "Cerebras-fast",
- "Cerebras-think",
- "Groq",
- "Cloudflare-AI",
- "Gemini",
- "SambaNova",
- "NVIDIA-NIM",
- "Mistral",
- "Groq-OSS",
- "HF-Space",
- "HF-Router",
- "OpenRouter",
- "GitHub-Models"
- ],
- "active": 13,
- "total": 13,
- "primary": "Cerebras-fast",
- "cost": "0€"
- },
- "ethica": {
- "total_hcps": 161733,
- "with_email": 110580,
- "with_phone": 155149,
- "gap_email": 51153,
- "pct_email": 68.4,
- "pct_phone": 95.9,
- "by_country": [
- {
- "country": "DZ",
- "hcps": 122337,
- "with_email": 78484,
- "with_tel": 119394,
- "pct_email": 64.2,
- "pct_tel": 97.6
- },
- {
- "country": "MA",
- "hcps": 19723,
- "with_email": 15074,
- "with_tel": 18737,
- "pct_email": 76.4,
- "pct_tel": 95
- },
- {
- "country": "TN",
- "hcps": 17794,
- "with_email": 15143,
- "with_tel": 17018,
- "pct_email": 85.1,
- "pct_tel": 95.6
- },
- {
- "country": "INTL",
- "hcps": 1879,
- "with_email": 1879,
- "with_tel": 0,
- "pct_email": 100,
- "pct_tel": 0
- }
- ]
- },
- "docker": [
- {
- "name": "loki",
- "status": "Up 4 days",
- "ports": ""
- },
- {
- "name": "listmonk",
- "status": "Up 4 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-db-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "plausible-plausible-events-db-1",
- "status": "Up 3 days",
- "ports": ""
- },
- {
- "name": "n8n-docker-n8n-1",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "mattermost-docker-mm-db-1",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "mattermost-docker-mattermost-1",
- "status": "Up 5 days (healthy)",
- "ports": ""
- },
- {
- "name": "twenty",
- "status": "Up 4 days",
- "ports": ""
- },
- {
- "name": "twenty-redis",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "langfuse",
- "status": "Up 5 days",
- "ports": ""
- },
- {
- "name": "redis-weval",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "gitea",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "node-exporter",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "prometheus",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "searxng",
- "status": "Up 6 days",
- "ports": ""
- },
- {
- "name": "uptime-kuma",
- "status": "Up 32 hours (healthy)",
- "ports": ""
- },
- {
- "name": "vaultwarden",
- "status": "Up 6 days (healthy)",
- "ports": ""
- },
- {
- "name": "qdrant",
- "status": "Up 6 days",
- "ports": ""
- }
- ],
- "crons": {
- "active": 35
- },
- "git": {
- "head": "4dd5f94e7 auto-sync-0940",
- "dirty": 4,
- "status": "DIRTY"
- },
- "nonreg": {
- "total": 153,
- "passed": 153,
- "score": "100%"
- },
- "services": [
- {
- "name": "DeerFlow",
- "port": 3002,
- "status": "UP"
- },
- {
- "name": "DeerFlow API",
- "port": 8001,
- "status": "UP"
- },
- {
- "name": "Qdrant",
- "port": 6333,
- "status": "UP"
- },
- {
- "name": "Ollama",
- "port": 11434,
- "status": "UP"
- },
- {
- "name": "Redis",
- "port": 6379,
- "status": "UP"
- },
- {
- "name": "Sovereign",
- "port": 4000,
- "status": "UP"
- },
- {
- "name": "SearXNG",
- "port": 8080,
- "status": "UP"
- }
- ],
- "whisper": {
- "binary": "COMPILED",
- "model": "142MB"
- },
- "grand_total": 3700,
- "health": {
- "score": 5,
- "max": 6,
- "pct": 83
- },
- "elapsed_ms": 11307
-}
\ No newline at end of file
diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json
index 1bbebb6ce..7c0956207 100644
--- a/api/v83-business-kpi-latest.json
+++ b/api/v83-business-kpi-latest.json
@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
- "ts": "2026-04-21T07:40:16+00:00",
+ "ts": "2026-04-21T07:44:02+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,