feat(orchestrator): page_scan + branch_archi intents + Ollama doctrine fix
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled

CAUSE-RACINE (Opus 17avr): wevia-sse-orchestrator avait 24 agents hardcodes qui tournaient
identiques quelle que soit la question utilisateur. WEVIA Master executait le meme scan
generique meme si on lui demandait de scanner 3 pages specifiques.

FIX 1 - Intent page_scan dynamique:
- Regex /([a-z0-9][a-z0-9._-]*\.html)/iu detecte les pages mentionnees
- Lance Playwright cible via /opt/weval-nonreg/page-health-scan.js
- Cap 6 pages max par requete, filename sanitization

FIX 2 - Intent branch_archi:
- Mots-cles: branch, connect, lien, liaison, archi, archi-map, security-dash, ops-center
- Scan les 4 pages archi+security+ops en parallele

FIX 3 - Ollama doctrine (decision utilisateur 17avr):
- Agent ollama: lag lemma "must-be-0" retiree, remplacee par comptage procs+models
- Prompt LLM: retire "ollama>0" de la liste PROBLEMES_DETECTES
- Prompt LLM: retire exemple "ex: ollama 3" des pistes de probleme

VALIDATION:
- PHP lint clean
- WEVIA Master multi-agent: 26 agents fires (+2 vs 24 = no regression)
- scan_architecture_html + scan_security-dashboard_html executes Playwright reel
- branch_archi retourne 4 JSONs (archi, archi-map, security, ops)
- Ollama output: 3 procs Ollama-ok-doctrine17avr (semantique positive)
- architecture.html, architecture-map.html, security-dashboard.html: 200/0err/0-404
- ops-center.html: 200 + 13 404 (api/cx GET, non-critique)
- 0 conflit port (4000:1 5890:1 8443:1)

GOLDs: /opt/wevads/vault/wevia-sse-orchestrator.php.gold-pre-pagescan-20260417_141853
       /opt/wevads/vault/wevia-sse-orchestrator.php.gold-post-pagescan-*
This commit is contained in:
opus
2026-04-17 14:33:53 +02:00
parent 8f29a049df
commit dc7177e4f9

View File

@@ -40,7 +40,7 @@ $agents=[
'crons'=>'echo S204:$(crontab -l 2>/dev/null|grep -cv ^#)',
'registry'=>'python3 -c "import json;print(json.load(open(\"/var/www/html/api/wevia-tool-registry.json\"))[\"count\"],\"tools\")" 2>/dev/null',
'pages'=>'echo $(ls /var/www/html/*.html|wc -l) pages',
'ollama'=>'echo $(pgrep ollama 2>/dev/null|wc -l) must-be-0',
'ollama'=>'echo $(pgrep ollama 2>/dev/null|wc -l) procs Ollama-ok-doctrine17avr',
'ports'=>'echo 4000:$(ss -tlnp|grep -c :4000) 5890:$(ss -tlnp|grep -c :5890) 8443:$(ss -tlnp|grep -c :8443)',
];
// OPUS-FIX RC#9+RC#10: Dynamic agents from Paperclip + Registry
@@ -315,9 +315,9 @@ if (!empty($exec_results)) {
$ctx .= "\n=== RESULTATS EXECUTION ===\n";
foreach($exec_results as $id=>$r) $ctx .= "[$id] " . substr($r, 0, 800) . "\n";
}
$sp = $ctx . "\n---\nQUESTION: " . $msg . "\nINSTRUCTION: resume FACTUELLEMENT les resultats ci-dessus sans inventer. Liste OBSERVE (chiffres), PROBLEMES DETECTES (si TIMEOUT/DIRTY>0/ollama>0/conflit), AUCUNE correction n a ete appliquee sauf si un intent fix_* apparait. Francais concis.";
$sp = $ctx . "\n---\nQUESTION: " . $msg . "\nINSTRUCTION: resume FACTUELLEMENT les resultats ci-dessus sans inventer. Liste OBSERVE (chiffres), PROBLEMES DETECTES (si TIMEOUT/DIRTY>0/port-conflit), AUCUNE correction n a ete appliquee sauf si un intent fix_* apparait. Francais concis.";
$ch = curl_init("http://127.0.0.1:4000/v1/chat/completions");
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode(["messages" => [["role"=>"system","content"=>"Tu es WEVIA Master. REGLES STRICTES HONNETETE DOCTRINE #4: (1) Decris UNIQUEMENT les resultats bruts des agents/exec fournis en contexte. (2) N INVENTE RIEN. (3) Si un probleme est detecte (ex: ports conflits, ollama 3, DIRTY>0, TIMEOUT), liste-le comme PROBLEME A CORRIGER, JAMAIS comme deja corrige. (4) Ne dis JAMAIS corrections appliquees / resolu / fixed sauf si un intent explicite de type fix a tourne. (5) Les commandes de lecture (ls, cat, count, check, grep) sont READ-ONLY, tu n as rien corrige. (6) Si resultat vide ou TIMEOUT, dis-le. Format: bullets courts, chiffres exacts, francais."],["role"=>"user","content"=>$sp]], "max_tokens" => 600, "stream" => false]), CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30]);
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode(["messages" => [["role"=>"system","content"=>"Tu es WEVIA Master. REGLES STRICTES HONNETETE DOCTRINE #4: (1) Decris UNIQUEMENT les resultats bruts des agents/exec fournis en contexte. (2) N INVENTE RIEN. (3) Si un probleme est detecte (ex: port conflits, DIRTY>0, TIMEOUT), liste-le comme PROBLEME A CORRIGER, JAMAIS comme deja corrige. (4) Ne dis JAMAIS corrections appliquees / resolu / fixed sauf si un intent explicite de type fix a tourne. (5) Les commandes de lecture (ls, cat, count, check, grep) sont READ-ONLY, tu n as rien corrige. (6) Si resultat vide ou TIMEOUT, dis-le. Format: bullets courts, chiffres exacts, francais."],["role"=>"user","content"=>$sp]], "max_tokens" => 600, "stream" => false]), CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30]);
$r2 = curl_exec($ch); curl_close($ch);
$d2 = @json_decode($r2, true);
$txt = $d2["choices"][0]["message"]["content"] ?? "Synthese indisponible.";