33800 Docs

← Retour

Confrontation Audit -- ai-orchestrator

Date : 15/02/2026 05:00 Status : IMPLEMENTEE Auditeur senior : Claude Opus 4.6 (confrontation finale) Methode : Lecture integrale des 3 passes, cross-reference avec le code source, arbitrage des divergences


Resume executif

Metrique Valeur
Findings CONFIRMES (2-3 passes) 22
Findings UNIQUES (1 seule passe) 14
Faux positifs elimines 3
Contradictions resolues 5
Total findings retenus 33

Les 3 passes convergent fortement sur les problemes structurels majeurs (cloud jobs sans tracking, race condition budget Anthropic, credentials hardcodes, Ollama generate sans num_ctx). Les divergences portent principalement sur les niveaux de severite et sur quelques findings peripheriques.


Findings CONFIRMES (2-3 passes concordantes)

C-01 : Cloud jobs (Anthropic) dispatches sans tracking ni limite de concurrence


C-02 : Race condition budget Anthropic (TOCTOU)


C-03 : Credentials Redis et PostgreSQL hardcodes dans le code source


C-04 : Ollama generate sans num_ctx --> OOM possible


C-05 : CORS allow_origins=["*"] avec allow_credentials=True


C-06 : Variable is_cloud redefinie inutilement dans le meme scope


C-07 : Commentaire set_parallel_jobs incoherent avec le code (1-5 vs 1-10)


C-08 : Batch API httpx : client reutilise pendant 2h de polling


C-09 : SadTalker cleanup : task orpheline et zombie process


C-10 : Job poppe de Redis mais DB echoue --> job perdu


C-11 : Absence de queue_sync au demarrage


C-12 : Requeue infini sans compteur de retry


C-13 : SSH process non kill en cas de timeout dans run_ssh_command


C-14 : Watchdog GPU parse "N/A" --> ValueError silencieux


C-15 : Bare except clauses attrapent CancelledError et SystemExit


C-16 : Pas de validation de taille sur les uploads


C-17 : Pas d'authentification sur aucun endpoint


C-18 : costs_summary avec year/month hardcodes en default


C-19 : tools_state et active_tools en memoire sans resynchronisation automatique


C-20 : Path traversal via chemins absolus dans les fonctions d'execution


C-21 : SSH injection via facefusion params (face_swapper_model, face_enhancer_model)


C-22 : Nginx conf sans private:true --> API potentiellement exposee publiquement


Findings UNIQUES (1 seule passe)

U-01 : WIN11_HOST defini deux fois (constante ecrase l'env var)


U-02 : Race condition requeue au crash (pop Redis -> crash -> jamais requeue)


U-03 : VRAM estimation Ollama multi-modeles sous-estimee (max vs sum)


U-04 : Upload ecrasement silencieux de fichiers existants


U-05 : Pas de init.py dans app/


U-06 : SSH StrictHostKeyChecking=no partout


U-07 : Imports repetes dans les fonctions (11x import aiohttp)


U-08 : Fooocus seed 2^63 vs 2^32


U-09 : SadTalker job_id interpole sans validation explicite


U-10 : Applio 60 parametres positionels fragiles


U-11 : Schema SQL absent du repo


U-12 : Health endpoint crash si Redis est down


U-13 : stop_tool et refresh_tools_status ne filtrent pas les CLOUD_TOOLS


U-14 : Anthropic batch ne verifie pas result.type "succeeded" vs "errored"


Contradictions resolues

Contradiction 1 : Severite des credentials hardcodes

Contradiction 2 : Severite du batch httpx polling

Contradiction 3 : Classification du double escaping backslash Windows

Contradiction 4 : Severite de la race condition cancel/worker

Contradiction 5 : Severite CORS


Faux positifs elimines

FP-01 : Path traversal via job_id dans download_output (Pass 1 F12 discussion, Pass 2 F21)

FP-02 : docker-compose.yml ne declare pas Redis/Postgres (Pass 3 F-21)

FP-03 : ANTHROPIC_API_KEY vide dans conf.prod.gouroubleu.yml (Pass 3 F-22)


Top 10 actions prioritaires

# Finding Priorite Effort Description
1 C-04 CRITIQUE 5 min Ajouter num_ctx: 8192 dans le mode generate d'Ollama -- peut causer un OOM a tout moment
2 C-22 CRITIQUE 2 min Ajouter private: true dans la section nginx de conf.prod.gouroubleu.yml -- si port forwarding actif, API exposee publiquement sans auth
3 C-01 + C-02 CRITIQUE 1h Tracker les cloud tasks + limiter la concurrence Anthropic (asyncio.Semaphore + liste de tasks). Resout aussi la race condition budget car les jobs sont serialises.
4 U-12 HAUTE 5 min Proteger le healthcheck contre Redis down -- wrapper dans try/except, retourner "worker_paused": "unknown" si Redis indisponible
5 C-20 HAUTE 15 min Supprimer le bypass startswith("/") dans les fonctions d'execution -- path traversal dans 5 fonctions
6 C-21 HAUTE 15 min Sanitiser face_swapper_model et face_enhancer_model avec whitelist alphanumerique ou liste de modeles valides
7 C-11 HAUTE 10 min Ajouter queue_sync au demarrage dans la fonction lifespan -- resynchronise Redis/PostgreSQL apres crash
8 C-03 HAUTE 15 min Externaliser les credentials dans conf.prod.gouroubleu.yml (REDIS_PASSWORD, POSTGRES_PASSWORD) et lever une erreur si absents
9 C-13 MOYENNE 10 min Ajouter proc.kill() + await proc.wait() dans run_ssh_command en cas de timeout -- evite l'accumulation de processus zombies
10 C-15 MOYENNE 20 min Remplacer except: par except Exception: partout (11+ occurrences) -- corrige le protocole de cancellation asyncio