33800 Docs

← Retour

Confrontation Audit -- ulias-org

Date : 15-02-2026 05:00 Status : IMPLEMENTEE Auditeur senior : Claude Opus 4.6 (confrontation des 3 passes) Methode : Lecture integrale des 3 rapports d'audit + verification croisee sur le code source pour arbitrer les contradictions


Resume executif

Metrique Nombre
Findings CONFIRMES (2-3 passes concordantes) 17
Findings UNIQUES (1 seule passe) 13
Faux positifs elimines 5
Contradictions resolues 4

Les 3 passes convergent fortement sur les problemes majeurs : la logique de briefing inversee, le lifecycle WS defaillant, le pipeline runner sans AbortSignal, le mecanisme onDecision jamais branche, et les fallbacks IP/port hardcodes. Les divergences portent principalement sur les niveaux de severite (ex: CONNECTORS_API_URL fallback classe "FAUX POSITIF" par P1 mais "BUG CERTAIN" par P3) et sur quelques findings de niche identifies par une seule passe.


Findings CONFIRMES (2-3 passes concordantes)


C-01 : Briefing processAnswer -- logique de skip inversee


C-02 : WS deconnexion -- reference morte et ws.send() sur socket ferme


C-03 : Pipeline runner ne passe pas l'AbortSignal


C-04 : onDecision callback jamais branche -- agents requiresApproval casses


C-05 : CALLBACK_BASE_URL hardcode sans env var definie


C-06 : CONNECTORS_API_URL fallback port 5400 au lieu de 5403


C-07 : Cache hash trop faible -- troncature 200 chars + DJB2 32-bit


C-08 : Circuit breaker et response cache globaux partages entre sessions


C-09 : Prompt overrides globaux, pas par session/user


C-10 : Pas de validation d'ownership sur les endpoints REST


C-11 : Injection commande SSH via les agents LLM


C-12 : Traduction automatique systematique gaspille latence et tokens


C-13 : API key stockee en clair dans Supabase


C-14 : editFile ne remplace que la premiere occurrence


C-15 : message_count increment non-atomique (read-modify-write)


C-16 : GITLAB_TOKEN en clair dans les fichiers versionnes


C-17 : Endpoints /internal/* et /api/agents sans authentification + nginx non private


Findings UNIQUES (1 seule passe)


U-01 : CLI default server URL pointe vers le mauvais port (5510 au lieu de 5515)


U-02 : NotificationService definie mais jamais importee


U-03 : git-workflow.ts -- status '??' teste deux fois, 'untracked' jamais assigne


U-04 : Upload base64 decode en UTF-8 corrompt les binaires


U-05 : storageGetPublicUrl avec IP hardcodee en fallback


U-06 : compactToolResult et translateOutput -- num_ctx passe dans les options est ignore


U-07 : consecutiveErrors semantique incorrecte en executions paralleles


U-08 : userId fallback fragile (apiKey[:8])


U-09 : forkConversation charge 10000 messages en memoire + inserts sequentiels


U-10 : Incoherence instance parameter (id vs name) dans connectorFetch


U-11 : auth.ts hardcode le nom 'Supabase' vs client.ts utilise .id dynamique


U-12 : dbInsert/dbUpdate retour undefined non gere


U-13 : Nudge agent injecte un message 'user' qui fausse l'historique


Contradictions resolues


Contradiction 1 : Severite de CONNECTORS_API_URL fallback port 5400


Contradiction 2 : NotificationService -- code mort ou code preparatoire ?


Contradiction 3 : nginx private: true -- est-ce le cas ou non ?


Contradiction 4 : Pas de protection contre messages concurrents -- BUG ou RISQUE ?


Faux positifs elimines


FP-01 : HTTP status codes manquants sur les endpoints REST


FP-02 : toolCallsCount non-thread-safe dans Promise.all


FP-03 : Agents avec toolSet vide


FP-04 : Rate limiting manquant (reclassifie)


FP-05 : Pending jobs memory leak (reclassifie)


Top 10 actions prioritaires

Rang Finding Severite Correction
1 C-17 : Ajouter private: true dans nginx OU ajouter auth sur /api/agents et /internal/* BUG CERTAIN Modifier conf.prod.gouroubleu.yml section nginx, ajouter private: true. Alternative : ajouter verification x-api-key sur /api/agents et un token partage sur /internal/*.
2 C-04 : Brancher le mecanisme onDecision BUG CERTAIN Passer le callback onDecision depuis Director vers runner.run(). Implementer le flow decision_request/decision_response via WS et pendingDecisions Map.
3 C-01 : Corriger la logique de skip du briefing BUG CERTAIN Reformuler la condition : const isSkip = skipWords.includes(answer); if (isSkip && !currentQ.required) { /* ne pas enregistrer, avancer */ } else if (isSkip && currentQ.required) { /* refuser de skipper, redemander */ } else { session.answers.set(currentQ.id, answer); }
4 C-02 : Corriger le lifecycle WS (close handler + guard ws.send) BUG CERTAIN Stocker l'apiKey dans ws.data lors de l'auth. Dans close handler, retrouver la session et mettre session.ws = undefined. Ajouter if (ws.readyState === 1) avant chaque ws.send().
5 C-03 : Passer l'AbortSignal au pipeline runner BUG CERTAIN Ajouter signal?: AbortSignal a la signature de runSequential/runParallel. Propager aux appels runner.run().
6 C-05 : Ajouter CALLBACK_BASE_URL dans conf.prod.gouroubleu.yml BUG PROBABLE Ajouter CALLBACK_BASE_URL: "http://192.168.1.12:5515" dans la section env de conf.prod.gouroubleu.yml.
7 U-04 : Corriger l'upload binaire (decode base64 sans conversion UTF-8) BUG CERTAIN Envoyer le Buffer directement au lieu de .toString('utf-8'). Adapter storageUpload pour accepter un Buffer.
8 U-01 : Corriger le port CLI par defaut (5510 -> 5515) BUG CERTAIN Modifier packages/cli/bin/ulias.ts : changer ws://localhost:5510/ws/cli en ws://localhost:5515/ws/cli.
9 C-12 : Optimiser la traduction (heuristique avant appel LLM) BUG PROBABLE Ajouter une detection de langue simple (proportion de mots francais) avant d'appeler translateOutput. Exclure les outputs contenant du JSON/code.
10 C-16 : Deplacer GITLAB_TOKEN vers Docker secrets RISQUE THEORIQUE Remplacer le token en clair par une reference a un secret Docker dans conf.prod.gouroubleu.yml. Supprimer le token de .env.deploy.

Annexe : Matrice de correspondance complete entre passes

Sujet Pass 1 Pass 2 Pass 3 Verdict final
Briefing skip logic 1.1 BUG CERTAIN P2-17 BUG PROBABLE F-05 BUG CERTAIN C-01 BUG CERTAIN
CLI port 5510 1.2 BUG CERTAIN -- -- U-01 BUG CERTAIN
WS send apres deconnexion 1.3 BUG CERTAIN P2-01/02 BUG CERTAIN F-03 BUG CERTAIN C-02 BUG CERTAIN
CALLBACK_BASE_URL hardcode 2.1 BUG PROBABLE P2-23 RISQUE F-02 BUG PROBABLE C-05 BUG PROBABLE
CONNECTORS_API_URL fallback 2.2 BUG PROBABLE P2-22 FAUX POSITIF F-06 BUG CERTAIN C-06 BUG PROBABLE
Cache hash faible 2.3 BUG PROBABLE P2-06 BUG PROBABLE F-21 RISQUE C-07 BUG PROBABLE
message_count non-atomique 2.4 BUG PROBABLE P2-21 RISQUE -- C-15 BUG PROBABLE
NotificationService inutilisee 2.5 BUG PROBABLE P2-24 FAUX POSITIF -- FP/CODE MORT
/api/agents sans auth 3.1 RISQUE -- F-09 RISQUE C-17 BUG CERTAIN (combine avec nginx non-private)
GITLAB_TOKEN en clair 3.2 RISQUE -- -- C-16 RISQUE THEORIQUE
Injection heredoc 3.3 RISQUE P2-10 RISQUE F-20 BUG PROBABLE C-11 RISQUE THEORIQUE
Limite taille WS 3.4 RISQUE -- -- Non retenu (faible, mono-user)
Prompt overrides globaux 5.1 ARCHI P2-08 BUG PROBABLE F-17 RISQUE C-09 RISQUE THEORIQUE
Session cleanup sans ws.close 5.2 ARCHI P2-01 BUG PROBABLE F-15 BUG PROBABLE Couvert par C-02
Traduction systematique 5.3 ARCHI P2-07 BUG PROBABLE F-18 RISQUE C-12 BUG PROBABLE
fetchRelevantLessons latence 5.4 ARCHI -- -- Non retenu (choix design)
Ownership REST 6.3 RISQUE P2-09 RISQUE -- C-10 RISQUE THEORIQUE
API key en clair 6.2 RISQUE P2-14 RISQUE F-13 RISQUE C-13 RISQUE THEORIQUE
git-workflow '??' 10.3 BUG CERTAIN -- -- U-03 BUG CERTAIN (code mort)
git-workflow code mort 10.4 CODE MORT -- -- U-03 (meme)
Circuit breaker global 10.5 RISQUE P2-03 BUG PROBABLE F-08 RISQUE C-08 RISQUE THEORIQUE
TOOL_SETS storage-dev mort 10.6 CODE MORT -- -- CODE MORT
storageGetPublicUrl IP 10.7 BUG PROBABLE -- -- U-05 BUG PROBABLE
editFile premiere occurrence 10.8 QUALITE P2-15 RISQUE F-07 BUG PROBABLE C-14 RISQUE THEORIQUE
consecutiveErrors parallele 10.11 BUG PROBABLE -- -- U-07 BUG PROBABLE
Upload binaire corrompu 10.21 BUG CERTAIN -- -- U-04 BUG CERTAIN
nginx non private 10.18 RISQUE -- (F-19 dit private=true, FAUX) C-17 BUG CERTAIN
onDecision jamais branche -- P2-11 BUG CERTAIN -- C-04 BUG CERTAIN
Pipeline sans AbortSignal -- P2-16 BUG CERTAIN -- C-03 BUG CERTAIN
Messages concurrents -- P2-12 BUG PROBABLE F-10 BUG PROBABLE BUG PROBABLE (couvert par C-02/C-04 en partie)
Context overflow runner -- P2-13 RISQUE -- Non retenu (num_ctx est le garde-fou)
Cancel n'annule pas GPU jobs -- P2-04 RISQUE -- Non retenu (design choice)
Incoherence id vs name -- -- F-01 BUG PROBABLE U-10 BUG PROBABLE
auth.ts hardcode 'Supabase' -- -- F-16 BUG CERTAIN U-11 BUG PROBABLE
dbInsert retour undefined -- -- F-14 BUG PROBABLE U-12 BUG PROBABLE
Nudge injecte comme 'user' -- -- F-11 RISQUE U-13 RISQUE THEORIQUE
searchConversations ilike 10.13 RISQUE P2-18 RISQUE F-12 BUG PROBABLE RISQUE THEORIQUE (PostgREST parametrise)
num_ctx ignore 7.1/10.10 QUALITE -- -- U-06 BUG PROBABLE
userId fallback fragile 10.20 BUG PROBABLE -- -- U-08 BUG PROBABLE
HTTP status codes 4.1 FAUX POSITIF -- -- FP-01
toolCallsCount thread-safe 10.9 FAUX POSITIF -- -- FP-02
Agents toolSet vide -- P2-19 FAUX POSITIF -- FP-03

Confrontation realisee le 15-02-2026 par lecture integrale des 3 rapports d'audit (Pass 1 : 1079 lignes, Pass 2 : 594 lignes, Pass 3 : 443 lignes) avec verification croisee sur le code source pour les contradictions identifiees. Total : 17 findings confirmes, 13 uniques, 5 faux positifs elimines, 4 contradictions resolues.