auto-sync via WEVIA git_sync_all intent 2026-04-21T10:28:16+02:00
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled

This commit is contained in:
opus
2026-04-21 10:28:16 +02:00
parent 524c25690a
commit f53abb4e8c
7 changed files with 410 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
{
"generated_at": "2026-04-21T10:20:02.361108",
"generated_at": "2026-04-21T10:25:01.434641",
"stats": {
"total": 48,
"pending": 31,

View File

@@ -0,0 +1,281 @@
{
"ts": "2026-04-21T08:25:01+00:00",
"server": "s204",
"s204": {
"load": 1.03,
"uptime": "2026-04-14 11:51:24",
"ram_total_mb": 31335,
"ram_used_mb": 11952,
"ram_free_mb": 19382,
"disk_total": "150G",
"disk_used": "116G",
"disk_free": "29G",
"disk_pct": "81%",
"fpm_workers": 140,
"docker_containers": 19,
"cpu_cores": 8
},
"s95": {
"load": 0.2,
"disk_pct": "81%",
"status": "UP",
"ram_total_mb": 15610,
"ram_free_mb": 12067
},
"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": 110583,
"with_phone": 155151,
"gap_email": 51150,
"pct_email": 68.4,
"pct_phone": 95.9,
"by_country": [
{
"country": "DZ",
"hcps": 122337,
"with_email": 78487,
"with_tel": 119396,
"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": "92a508bce auto-sync-1025",
"dirty": 1,
"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": 10315
}

View File

@@ -0,0 +1,19 @@
#!/bin/bash
# V111 Token Health Monitor - live probe
TH=$(curl -sk --max-time 30 "http://127.0.0.1/api/token-health-real.php" -H "Host: weval-consulting.com" 2>/dev/null)
if [ -z "$TH" ]; then
echo "token_health=unreachable"
exit 1
fi
# Use python instead of jq to avoid escaping issues
echo "$TH" | python3 -c "
import json, sys
d = json.load(sys.stdin)
r = d.get('results', [])
ok = sum(1 for p in r if p.get('status') == 'OK')
total = len(r)
expired = total - ok
pct = int(ok * 100 / total) if total else 0
expired_list = ','.join(p['provider'] for p in r if p.get('status') != 'OK')
print(f'providers={total} ok={ok} expired={expired} health={pct}% expired_list={expired_list}')
"

View File

@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
"ts": "2026-04-21T08:23:29+00:00",
"ts": "2026-04-21T08:25:15+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,

View File

@@ -88,6 +88,7 @@ if ($__fp_input && isset($__fp_input["message"])) {
"load" => ["cmd"=>"cat /proc/loadavg && free -m | grep Mem", "default"=>true, "timeout"=>5],
"architecture_quality" => ["cmd"=>"curl -sk --max-time 5 http://127.0.0.1/api/wevia-v83-business-kpi.php?action=category\&cat=architecture_quality -H 'Host: weval-consulting.com' 2>/dev/null | jq -r '.data.kpis[] | \"\(.id): \(.value) \(.unit) [\(.status)]\"' 2>/dev/null | head -8", "default"=>true, "timeout"=>10],
"fpm_monitor" => ["cmd"=>"bash /var/www/html/api/scripts/fpm-monitor.sh 2>/dev/null", "default"=>true, "timeout"=>5],
"token_health" => ["cmd"=>"bash /var/www/html/api/scripts/token-health-monitor.sh 2>/dev/null", "default"=>true, "timeout"=>35],
"screens_s204" => ["cmd"=>"echo 'S204_HTML='$(find /var/www/html -maxdepth 3 -name '*.html' 2>/dev/null | wc -l)' S204_PHP='$(find /var/www/html -maxdepth 3 -name '*.php' 2>/dev/null | wc -l)' API='$(ls /var/www/html/api/*.php 2>/dev/null | wc -l)", "keywords"=>["screen","ecran","\xc3\xa9cran","page"], "timeout"=>15],
"screens_s95" => ["cmd"=>"sudo ssh -p 49222 -o StrictHostKeyChecking=no -i /var/www/.ssh/wevads_key root@10.1.0.3 \"echo ARSENAL=\\$(find /opt/wevads-arsenal/public -maxdepth 2 -name '*.html' 2>/dev/null | wc -l)' WEVADS_HTML='\\$(find /var/www -maxdepth 3 -name '*.html' 2>/dev/null | wc -l)\" 2>&1 | tail -3", "keywords"=>["screen","ecran","\xc3\xa9cran","page","s95","arsenal"], "timeout"=>20],
"gpus" => ["cmd"=>"nvidia-smi --query-gpu=name,memory.total --format=csv,noheader 2>/dev/null || echo 'no GPU'; sudo ssh -p 49222 -o StrictHostKeyChecking=no -i /var/www/.ssh/wevads_key root@10.1.0.3 \"nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null || echo 'no GPU s95'\" 2>&1 | tail -3", "keywords"=>["gpu","nvidia","blade","cuda"], "timeout"=>15],

View File

@@ -0,0 +1,107 @@
# V123 Opus WIRE - Dashboards Favorites/Pinning · 21avr 10:25
## Context
Yacine CONTINUE. Continuer polish UX consolidation dashboards. Poursuite séquence additive V116-V122.
## Design choice: URL hash, pas localStorage
| Pourquoi | Avantage |
|---|---|
| URL hash `#pins=a,b,c` | Shareable (bookmark, message) |
| Zero localStorage | Pas de conflit browser storage |
| history.replaceState | Pas de pollution historique |
| Auto-persist | Reload garde les pins sans code DB |
## Livrables V123
### 1. Boutons étoile sur chaque tuile
- 69 boutons `★` (étoile Unicode)
- Couleur: gold `#fbbf24` si pinned, gris `#555` sinon
- Click: `event.preventDefault(); event.stopPropagation(); __dashTogglePin(name)` — ne navigue pas au dashboard
- Title: "Pin" / "Unpin" selon état
### 2. Pinned tiles rendus en premier
```js
filtered = filtered.slice().sort((a,b) => {
const ap = pinned.has(a.name) ? 0 : 1;
const bp = pinned.has(b.name) ? 0 : 1;
return ap - bp;
});
```
Pinned passent devant, l'ordre interne (search/sort) reste.
### 3. Visual pinned
- Border color: `#fbbf24` (vs catégorie color)
- Class CSS `.pinned` avec box-shadow gold subtil
- Hover: shadow gold intensifié `rgba(251,191,36,0.35)`
### 4. URL hash sync
```
https://weval-consulting.com/all-ia-hub.html#pins=ethica-dashboard-live.html,crm-dashboard-live.html
```
- `window.history.replaceState` (pas de scroll, pas d'entrée historique)
- Reload: parse hash au chargement → pins restaurés
### 5. Counter enrichi
```
"69 / 69 tuiles (2 pins)"
```
## Validation E2E Playwright V123
```json
{
"v123": "pinning-url-hash",
"initial_star_buttons": 69,
"first_pin_works": true,
"second_pin_works": true,
"pinned_go_first": true,
"url_hash_persists": true,
"reload_preserves": true,
"unpin_works": true,
"js_errors": [],
"VERDICT": "WIRED"
}
```
Scénario testé:
1. Initial: 69 tiles, 0 pinned, first = acquired-dashboard.html (alphabétique)
2. Pin ethica: first = ethica, hash = `#pins=ethica-dashboard-live.html`
3. Pin crm: first 2 = [crm, ethica], hash = `#pins=ethica-...,crm-...`
4. Reload → pins preserved (hash stable)
5. Unpin ethica: only crm pinned, hash updated
## Artefacts
- `/var/www/html/api/blade-tasks/v123-pins-proof/01-initial.png`
- `/var/www/html/api/blade-tasks/v123-pins-proof/02-pinned-ethica.png`
- `/var/www/html/api/blade-tasks/v123-pins-proof/03-pinned-two.png`
- `/var/www/html/api/blade-tasks/v123-pins-proof/04-after-reload.png`
- `.../proof.json`
## GOLD backup
- `/opt/wevads/vault/all-ia-hub.html.GOLD-V123-pre-favorites`
## Métriques V122 → V123
| | V122 | V123 |
|--|--|--|
| Hub size | 43.4KB | 45.3KB (+1.9KB) |
| Features | sticky/hover/fadeIn | + 69 pin buttons |
| Persistent state | none | URL hash shareable |
| JS errors | 0 | 0 |
## Séquence V116→V123 récapitulatif
| V | Feature |
|---|---|
| V116 | DASHBOARDS tab + 69 tuiles + 12 catégories |
| V117 | HTTP status badges (0 broken) |
| V118 | Intent chat `dashboards status` |
| V119 | Search + Sort + Counter |
| V120 | Keyboard Cmd+K / Escape |
| V121 | E2E proof keyboard |
| V122 | CSS polish (sticky, hover, fadeIn, focus rings) |
| V123 | **Favorites/pinning via URL hash** |
## Doctrines
#1 scan · #3 GOLD · #4 honnêteté (E2E prouvé) · #13 cause racine · **#14 ADDITIF PUR** · #16 NR · **#60 UX premium** (gold hover, URL share) · #100
## Sessions consécutives sans régression applicative : 95+