--- id: "f36ada98-0ca1-41e6-94c1-24eb81731fee" number: 80 title: "L'environnement de QA ne peut pas ouvrir de socket — il ne peut pas valider les features réseau" status: "open" priority: "medium" sprint: null links: [{"target":"#77","kind":"relatesTo"}] agentRefs: [] createdBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"} updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"} createdAt: 1784287697560 updatedAt: 1784287697560 version: 1 --- ## Constat Relevé pendant #77, confirmé indépendamment par Main et par Git. L'agent QA exécute ses tests dans un environnement dont le sandbox **interdit les binds réseau** : ```text failed to bind 127.0.0.1:0: Operation not permitted (os error 1) bind: Os { code: 1, kind: PermissionDenied, message: "Operation not permitted" } Failed building the Runtime: Os { code: 24, kind: Uncategorized, message: "Too many open files" } ``` Sur #77, QA a rapporté : - `cargo test -p web-server` → 73 passed / **6 failed** (2 binds + 4 tests WebSocket en cascade), - `cargo test -p domain -p application -p infrastructure -p web-server` → 275 passed / **10 failed** (tous `infrastructure::session::openai_compat`). **Les mêmes suites passent intégralement hors de ce sandbox** : 79/79 sur `web-server`, exit 0 sur la commande combinée (vérifié par Main, puis rejoué par Git dans son propre environnement). DevBackend observe le même artefact de son côté. ## Pourquoi c'est un problème et pas une curiosité Le cœur de #77 était précisément **la révocation de WebSockets vivants** — un durcissement de sécurité non négociable. QA ne pouvait structurellement pas le valider de bout en bout : l'environnement qui doit prouver que la feature marche est celui qui ne peut pas l'exécuter. Le coût réel se paie deux fois : 1. **Faux rouges** : QA a bloqué son verdict sur des échecs qui n'existaient pas, et il a fallu du temps à Main pour établir que c'était l'environnement. C'était le bon réflexe de sa part — le problème n'est pas QA, c'est son bac à sable. 2. **Faux verts potentiels**, plus grave : un test réseau qui ne s'exécute jamais chez QA ne peut pas y échouer non plus. La prochaine feature réseau rejouera la scène, et rien ne garantit qu'on la relira aussi attentivement. ## Attendu Que l'environnement de QA puisse ouvrir des sockets sur la loopback, ou à défaut que la limitation soit **explicite et connue** (QA sait ce qu'il ne peut pas valider, et le dit dans son verdict au lieu de le rapporter en échec). À regarder aussi : le `Too many open files` (`code: 24`), qui suggère une limite de descripteurs de fichiers trop basse en plus de la restriction réseau. ## Note Voir la mémoire `permissions-sandbox-system-state` pour l'état du système de permissions/sandbox et le risque résiduel déjà documenté. ## Périmètre Infrastructure d'agents / configuration de sandbox. Pas de code applicatif.