---
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: "closed"
priority: "medium"
sprint: null
links: [{"target":"#77","kind":"relatesTo"}]
agentRefs: []
createdBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
updatedBy: {"kind":"user"}
createdAt: 1784287697560
updatedAt: 1785271075219
version: 2
---
## 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.