This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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>
|
||||
|
||||
175
wiki/session-V129-routing-root-cause-malformed-stubs.md
Normal file
175
wiki/session-V129-routing-root-cause-malformed-stubs.md
Normal 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
|
||||
Reference in New Issue
Block a user