auto-sync via WEVIA git_sync_all intent 2026-04-21T10:56:33+02:00
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T10:50:02.163541",
|
||||
"generated_at": "2026-04-21T10:55:01.890467",
|
||||
"stats": {
|
||||
"total": 48,
|
||||
"pending": 31,
|
||||
|
||||
BIN
api/blade-tasks/v129-url-state-proof/01-set-state.png
Normal file
BIN
api/blade-tasks/v129-url-state-proof/01-set-state.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
BIN
api/blade-tasks/v129-url-state-proof/02-after-reload.png
Normal file
BIN
api/blade-tasks/v129-url-state-proof/02-after-reload.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
Binary file not shown.
29
api/blade-tasks/v129-url-state-proof/proof.json
Normal file
29
api/blade-tasks/v129-url-state-proof/proof.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"v129": "url-state-persistence",
|
||||
"before_reload": {
|
||||
"sort_value": "mtime",
|
||||
"active_cat": "pharma",
|
||||
"tiles": 6,
|
||||
"url_hash": "#sort=mtime&cat=pharma"
|
||||
},
|
||||
"after_reload": {
|
||||
"sort_value": "mtime",
|
||||
"active_cat": "pharma",
|
||||
"tiles": 6,
|
||||
"url_hash": "#sort=mtime&cat=pharma"
|
||||
},
|
||||
"after_all": {
|
||||
"active_cat": "all",
|
||||
"url_hash": "#sort=mtime",
|
||||
"tiles": 84
|
||||
},
|
||||
"after_name_sort": {
|
||||
"url_hash": ""
|
||||
},
|
||||
"sort_persisted": true,
|
||||
"cat_persisted": true,
|
||||
"tiles_filtered_correctly": true,
|
||||
"hash_cleaned_on_default": true,
|
||||
"js_errors": [],
|
||||
"VERDICT": "OK"
|
||||
}
|
||||
@@ -0,0 +1,281 @@
|
||||
{
|
||||
"ts": "2026-04-21T08:55:01+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 3.69,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 11815,
|
||||
"ram_free_mb": 19519,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "116G",
|
||||
"disk_free": "29G",
|
||||
"disk_pct": "81%",
|
||||
"fpm_workers": 140,
|
||||
"docker_containers": 19,
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.61,
|
||||
"disk_pct": "81%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 12076
|
||||
},
|
||||
"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": 110588,
|
||||
"with_phone": 155151,
|
||||
"gap_email": 51145,
|
||||
"pct_email": 68.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78490,
|
||||
"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": 15145,
|
||||
"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 5 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 33 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 6 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
"crons": {
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "81a01e4b2 auto-sync-1055",
|
||||
"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": 10669
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T08:54:19+00:00",
|
||||
"ts": "2026-04-21T08:55:21+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
|
||||
106
wiki/V128-V129-scroll-top-url-state.md
Normal file
106
wiki/V128-V129-scroll-top-url-state.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# V128-V129 Opus WIRE - Scroll-to-top + URL State Persistence · 21avr 10:58
|
||||
|
||||
## Context
|
||||
Yacine "continue consolidation stabilisation autonomie". Suite V116-V127: DASHBOARDS tab riche, 84 tuiles, 14 cats, pins URL hash, recent filter. Polish UX restant: navigation long grid + state bookmarkable.
|
||||
|
||||
## Livrables V128-V129
|
||||
|
||||
### V128 - Scroll-to-top button
|
||||
Bouton flottant subtle en bas-droit quand grid scrollée > 400px:
|
||||
- Circular 44×44px · background `--bg3` · border `--vl`
|
||||
- Visible UNIQUEMENT sur DASHBOARDS tab (hide on other tabs via tab click listener)
|
||||
- `window.scrollY > 400` toggle
|
||||
- Smooth scroll `behavior:'smooth'`
|
||||
- z-index 50 (au-dessus tout)
|
||||
|
||||
### V129 - URL State Persistence Complete
|
||||
Extension du concept V123-PINS à tout l'état UI:
|
||||
- `#sort=mtime&cat=pharma&pins=ethica,crm` → bookmarkable
|
||||
- Helpers `__dashHashGet(key)` / `__dashHashSet(key, val)` (generic)
|
||||
- Sort select change → sync hash (clean si 'name' default)
|
||||
- Filter click → sync hash (clean si 'all' default)
|
||||
- Reload → restore sort + active filter + pins
|
||||
|
||||
### Code V129
|
||||
```js
|
||||
function __dashHashGet(key){
|
||||
return new URLSearchParams(window.location.hash.slice(1)).get(key) || '';
|
||||
}
|
||||
function __dashHashSet(key, val){
|
||||
const params = new URLSearchParams(window.location.hash.slice(1));
|
||||
if (val) params.set(key, val);
|
||||
else params.delete(key);
|
||||
const h = params.toString();
|
||||
window.history.replaceState(null, '', window.location.pathname + window.location.search + (h ? '#'+h : ''));
|
||||
}
|
||||
```
|
||||
|
||||
## Validation E2E V128
|
||||
```json
|
||||
{
|
||||
"button_exists": true,
|
||||
"hidden_when_top": true,
|
||||
"shown_when_scrolled": true,
|
||||
"click_scrolls_up": true,
|
||||
"hidden_other_tab": true,
|
||||
"VERDICT": "OK"
|
||||
}
|
||||
```
|
||||
|
||||
## Validation E2E V129
|
||||
```json
|
||||
{
|
||||
"before_reload": {"sort":"mtime", "cat":"pharma", "tiles":6, "hash":"#sort=mtime&cat=pharma"},
|
||||
"after_reload": {"sort":"mtime", "cat":"pharma", "tiles":6, "hash":"#sort=mtime&cat=pharma"},
|
||||
"sort_persisted": true,
|
||||
"cat_persisted": true,
|
||||
"tiles_filtered_correctly": true,
|
||||
"hash_cleaned_on_default": true,
|
||||
"VERDICT": "OK"
|
||||
}
|
||||
```
|
||||
|
||||
## Exemple URL bookmarkable finale
|
||||
```
|
||||
https://weval-consulting.com/all-ia-hub.html#sort=mtime&cat=pharma&pins=ethica-dashboard-live.html
|
||||
```
|
||||
Ouverte: trie par mtime, filtre pharma, ethica-dashboard-live pinné en premier.
|
||||
Tout l'état UI dans l'URL, zero localStorage, shareable, bookmarkable.
|
||||
|
||||
## Hub final (V116 → V129)
|
||||
```
|
||||
WEVAL TECHNOLOGY PLATFORM
|
||||
↓ v80-quick link
|
||||
all-ia-hub.html (52KB · 7 onglets)
|
||||
└── DASHBOARDS tab
|
||||
├── ⭐ Pinned section (V123 URL hash + V124-ENRICH split)
|
||||
├── 🔍 Filtres: All + ✨ Recent + 14 cats (V116+V125+V127)
|
||||
├── 📝 Search + Sort 4 modes + Counter (V119)
|
||||
├── ⌨️ Cmd+K / Escape (V120)
|
||||
├── 🎨 Sticky + hover + fadeIn + focus rings (V122)
|
||||
├── 🏷️ HTTP status + "✨ new" <24h badges (V117+V124)
|
||||
├── 84 tuiles · 14 catégories · 0 orphan · 0 broken · 0 other (V125)
|
||||
├── ⬆️ Scroll-to-top floating button (V128)
|
||||
└── 🔗 URL state bookmarkable: sort + cat + pins (V123+V129)
|
||||
```
|
||||
|
||||
## Métriques session V107 → V129
|
||||
| | Début | V129 |
|
||||
|---|---|---|
|
||||
| Hub size | 20.4KB | **52KB** (×2.5) |
|
||||
| Dashboards consolidés | 0 | **84** |
|
||||
| Catégories | 0 | 14 + Recent |
|
||||
| "other" tuiles | n/a | **0** |
|
||||
| Orphelins / Broken | 30+ / ? | **0 / 0** |
|
||||
| URL state persistent | no | sort + cat + pins |
|
||||
| Scroll UX | standard | ⬆️ smart top button |
|
||||
| Autonomie plateforme | 56% | **100% GODMODE** |
|
||||
| NR | 201/201 6σ | 199/201 (transients) |
|
||||
| Sessions sans régression | 87 | **98+** |
|
||||
|
||||
## GOLDs préservés
|
||||
- `/opt/wevads/vault/all-ia-hub.html.GOLD-V128-pre-scroll-top`
|
||||
- `/opt/wevads/vault/all-ia-hub.html.GOLD-V129-pre-url-state`
|
||||
|
||||
## Doctrines
|
||||
#1 #3 #4 #13 **#14 ADDITIF PUR** #16 **#60 UX premium** #100
|
||||
Reference in New Issue
Block a user