auto-sync-1330
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled

This commit is contained in:
opus
2026-04-21 13:30:03 +02:00
parent 2a380ed5a1
commit ca8c868cef
7 changed files with 181 additions and 2243 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
{
"generated_at": "2026-04-21T13:25:02.141011",
"generated_at": "2026-04-21T13:30:01.590955",
"stats": {
"total": 48,
"pending": 31,

View File

@@ -1,8 +1,8 @@
{
"status": "ALIVE",
"ts": "2026-04-21T13:15:02.173676",
"last_heartbeat": "2026-04-21T13:15:02.173676",
"last_heartbeat_ts_epoch": 1776770102,
"ts": "2026-04-21T13:30:01.728130",
"last_heartbeat": "2026-04-21T13:30:01.728130",
"last_heartbeat_ts_epoch": 1776771001,
"tasks_today": 232,
"tasks_week": 574,
"agent_id": "blade-ops",

View File

@@ -1,281 +0,0 @@
{
"ts": "2026-04-21T11:25:02+00:00",
"server": "s204",
"s204": {
"load": 2.16,
"uptime": "2026-04-14 11:51:24",
"ram_total_mb": 31335,
"ram_used_mb": 12080,
"ram_free_mb": 19254,
"disk_total": "150G",
"disk_used": "117G",
"disk_free": "27G",
"disk_pct": "82%",
"fpm_workers": 140,
"docker_containers": 19,
"cpu_cores": 8
},
"s95": {
"load": 0.19,
"disk_pct": "81%",
"status": "UP",
"ram_total_mb": 15610,
"ram_free_mb": 12023
},
"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": 294,
"php_apis": 776,
"wiki_entries": 1988,
"vault_doctrines": 61,
"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": 110597,
"with_phone": 155151,
"gap_email": 51136,
"pct_email": 68.4,
"pct_phone": 95.9,
"by_country": [
{
"country": "DZ",
"hcps": 122337,
"with_email": 78497,
"with_tel": 119396,
"pct_email": 64.2,
"pct_tel": 97.6
},
{
"country": "MA",
"hcps": 19723,
"with_email": 15076,
"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 5 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 35 hours (healthy)",
"ports": ""
},
{
"name": "vaultwarden",
"status": "Up 6 days (healthy)",
"ports": ""
},
{
"name": "qdrant",
"status": "Up 6 days",
"ports": ""
}
],
"crons": {
"active": 35
},
"git": {
"head": "a28c0be0f auto-sync-1325",
"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": 3765,
"health": {
"score": 5,
"max": 6,
"pct": 83
},
"elapsed_ms": 10883
}

View File

@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
"ts": "2026-04-21T11:27:26+00:00",
"ts": "2026-04-21T11:29:06+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,

View File

@@ -861,7 +861,7 @@ footer.eco .truth-link:hover{ background: rgba(34,211,238,0.08); border-color: r
<span class="sep">/</span>
<a href="/all-ia-hub.html">All-IA</a>
<span class="sep">/</span>
<a href="/wevia-arena.html">Arena</a>
<a href="/weval-arena.html">Arena</a>
<span class="sep">/</span>
<a href="/wevia-master.html">WEVIA Master</a>
<span class="sep">/</span>

View File

@@ -0,0 +1,175 @@
# V129 - Root cause routing fail V125/V126/V127/V128 IDENTIFIED - 2026-04-21
## Objectif
Trouver la vraie cause du fail routing "comment faire un pentest" /
"comment deployer un SIEM" / etc. vers Resolver au lieu de PendingLoader.
Tentatives V126/V127/V128 n'avaient pas atteint 100% routing. V129
investigation ciblée.
## Méthodologie V129
### Step 1 - Debug simulator autonome (zero touch core)
Script `/tmp/v129-debug-b.php` qui réplique exactement `wpl_match_intent()`
avec `ob_start()` autour de chaque `@include` pour capturer les échos.
### Step 2 - Test sur 3 queries fails V125
```
comment faire un pentest
comment deployer un SIEM
comment mettre en place un SOC
```
## Découvertes V129
### Finding 1 : Matching local FONCTIONNE
```
Query: "comment faire un pentest"
→ EXACT MATCH trouvé:
[dev_security] "comment faire un pentest" (stub #420/2041)
Query: "comment deployer un SIEM"
→ SUBSTRING MATCH (dev_security "deployer un SIEM", score 50.4)
PLUS haut score que wevia_deploy_ci "deploy" (score 17.6)
```
**wpl_match_intent code LOCAL retourne le bon stub** — dev_security
gagnerait normalement.
### Finding 2 : Stubs malformés qui ECHO au include
**2041 stubs scannés**, 2 identifiés qui font `echo json_encode(...)`
directement au lieu de `return array(...)` :
1. **`intent-opus4-plan_action_status.php`** :
```php
<?php
$file = "/var/www/html/plan-action-2026-04-19.md";
...
echo json_encode([
"plan_file" => $file,
"versions_total" => $v_count,
...
], JSON_PRETTY_PRINT);
// PAS de "return array(...)" !
```
2. **`intent-opus4-playwright_login_test.php`** : "not an array" (log debug)
3. **`intent-opus4-wevia_truth_registry.php`** (suspected) : echo 1067559 bytes JSON
### Finding 3 : Pollution stdout → corruption SSE stream
Quand `wpl_match_intent()` itère les 2041 stubs et fait `@include $s` :
- Les stubs malformés **exécutent leur code** (echo JSON)
- Output part directement au stdout
- **AVANT** que le header SSE `Content-Type: text/event-stream` ne soit envoyé
Dans `wevia-autonomous.php` L44-69 :
```php
$__pl_r = wevia_pending_loader($__pl_msg); // ← les echos partent ici
if ($__pl_r !== null && !empty($__pl_r["ok"])) {
header("Content-Type: text/event-stream"); // ← trop tard, JSON déjà envoyé
echo "data: ..." // ← data valide partie après pollution
```
**Conséquence** :
- Frontend reçoit : `{"plan_file":...}{"ok":true,...}data: {"type":"answer",...,"engine":"PendingLoader/dev_security"...}`
- Parser ne reconnaît pas le JSON parasite → **fallback Resolver** qui exécute proprement
### Finding 4 : Pourquoi certains dev_* passent et d'autres non
- `dev_ecommerce`, `dev_ia`, `dev_mobile`, `dev_erp`, `dev_cloud`, `dev_crm`,
`dev_data`, `dev_marketing`, `dev_web_app`, `dev_project_auto` → OK
- `dev_security`, `dev_devops` → FAIL spécifiques
**Hypothèse** : quand dev_security ou dev_devops trigger match se fait,
le script continue de scanner les stubs suivants (pour les autres triggers)
et **tombe sur** les stubs malformés. Leur echo pollute avant que le match
exact final soit exec.
Les autres intents (dev_ia etc.) doivent avoir une combinaison triggers
différente qui fait que leur match exact sort AVANT d'atteindre les stubs
malformés dans l'ordre alphabétique... OU que leur match exact WIN assez
tôt.
## Options de fix V130+
### Option A : Convertir stubs malformés en format legitime
Wrap `plan_action_status` et `truth_registry` en `return array([...])`
avec triggers minimalistes (ou status DISABLED).
**Risque** : autres scripts peuvent POST direct à ces endpoints. Change
format casse leur intégration.
### Option B : `ob_start()` dans `wpl_match_intent()`
Capturer les echos pendant include + les jeter :
```php
foreach ($stubs as $s) {
ob_start();
$info = @include $s;
ob_end_clean(); // Trash any echo output
// ... rest same
}
```
**Risque** : modifie core `wevia-pending-loader.php` (chattr +i protected).
Besoin GOLD backup + test exhaustif L99 + rollback ready.
### Option C : DISABLE les 2 stubs malformés
Ajouter `status => 'DISABLED_MALFORMED_ECHO_V129'` en tête.
PendingLoader les skip via statuses blacklist déjà existante.
**Risque minimal** : stubs existants encore appelables en direct HTTP.
PendingLoader ne les touche plus en scan.
## Recommandation V130
**Option C** (prudent). Simple. Additif. Réversible. Effet immédiat.
Puis éventuellement Option B si Yacine autorise modification core et
exhaustive test.
## Pourquoi V129 ne fait PAS le fix
Temps token limité + approche prudente. Doctrine 4 HONNÊTETÉ :
- Mieux documenter la vraie cause
- Laisser décision à Yacine
- Pas précipiter un fix qui pourrait casser plus large
## L99 V129 (investigation read-only)
```
153/153 PASS | 0 FAIL | 100%
TS: 20260421_125219 (inchangé, zero écriture production)
```
## Chain V96→V129
| Version | Sujet |
|---|---|
| V118 | kpi-unified SINGLE SOURCE OF TRUTH |
| V119 | Playwright portfolio 7/7 + enrichment volitif +48% |
| V120 | dev_project_auto META ROUTER |
| V121-V122 | Reaper investigation NO auto-reaper |
| V123 | 4 tech domains recreated |
| V124 | FPM saturation guard |
| V125 | +60 interrogatif triggers (88.3% PASS) |
| V126 | Replace 7 triggers (FAILED, reverted) |
| V127 | +2 scope-context triggers additive (net gain) |
| V128 | Core routing investigation (hypothesis T0↔T2 was wrong) |
| **V129** | **Root cause IDENTIFIED: malformed stubs echo pollute SSE** |
## Doctrines appliquées V129
- Doctrine 0: Root cause analysis rigoureuse
- Doctrine 4: **HONNÊTETÉ** transparente
- Doctrine 13: Cause racine comprise (2 stubs malformed)
- Doctrine 14: Test-driven (debug simulator zero-touch)
- Doctrine 54: chattr +i protected respected
- Doctrine 95: Traçabilité wiki investigation
## Autres Claudes synchronisés V129 window
- V9.79 REFONTE BETON wevia-admin.php (10 canaux omnicanal)
- UDock V1 propagation 52% (153/294 pages)
- Auto-sync continuous