MotifPattern

Deux commandes se mélangent sur un seul billotDeux exécutions concurrentes partagent un état écrit pour une seuleTwo orders get mixed on one shared benchTwo concurrent runs share state that was written for one

Toutes les commandes utilisent le même billot. Avec un seul commis, chaque ingrédient lui appartient forcément. Dès qu’ils travaillent à deux, l’un déplace la préparation de l’autre et une assiette part vers la mauvaise table.L’isolation d’état empêche qu’une exécution lise ou modifie l’état privé d’une autre sans contrat explicite. Chez SWE-agent, un contrôle conservait les conditions d’environnement et les données de problème de chaque exécution dans des champs ordinaires d’une instance unique. En exécution parallèle, deux exécutions pouvaient s’écraser mutuellement, et des sorties être enregistrées sous le mauvais dossier de problème.Every order uses the same bench. With one cook, every ingredient must belong to him. Once two cooks work together, one moves the other’s preparation and a plate leaves for the wrong table.State isolation prevents one run from reading or mutating another run’s private state without an explicit contract. At SWE-agent, a control kept each run’s environment conditions and problem data in ordinary fields of a single instance. Under parallel execution two runs could overwrite one another, and outputs could be recorded under the wrong problem folder.

Les plans de travailConcurrence et isolationThe worktopsConcurrency and isolation

Le plat est juste, mais il arrive à la mauvaise tableSignauxThe dish is right, but it reaches the wrong tableSignals

La recette n’a pas changé et le plat est correctement préparé. Seul son propriétaire est faux. La panne apparaît au moment où plusieurs commis travaillent ensemble sur le même meuble.Le signe est un résultat correct attribué au mauvais destinataire, apparu au passage au parallèle sans modification de la logique du contrôle. Chez SWE-agent, le mode par lots a introduit plusieurs exécutions concurrentes partageant la même instance, et une exécution réécrivait les champs communs pendant qu’une autre était encore en cours. L’inspection utile porte sur la durée de vie des champs, pas sur la logique métier.The recipe has not changed and the dish is correctly prepared. Only its owner is wrong. The failure appears when several cooks work together on the same surface.The symptom is a correct result attributed to the wrong owner, surfacing when execution goes parallel with no change to the control’s own logic. At SWE-agent, batch mode introduced several concurrent runs sharing one instance, and one run rewrote the common fields while another was still in flight. The useful inspection targets field lifetime, not business logic.

Le billot commun n’indique pas à qui appartient chaque préparationMécanismeThe shared bench does not say who owns each preparationMechanism

Le billot avait été conçu pour une seule commande, donc aucun ingrédient ne portait de nom. La maison ajoute un second commis sans changer le rangement. Les préparations deviennent privées, mais le meuble reste commun.L’objet de contrôle était traité comme si sa durée de vie coïncidait avec une exécution unique, ce qui rend un champ partagé indiscernable d’un champ privé. Le passage au parallèle change le modèle de propriété sans que le modèle de stockage suive : le contenu devient propre à chaque exécution alors que les champs restent communs. Le défaut est donc invisible à la lecture sérielle du code.The bench was designed for one order, so no ingredient carried a name. The house adds a second cook without changing storage. Preparations become private while the furniture stays shared.The control object was treated as if its lifetime coincided with a single run, which makes a shared field indistinguishable from a private one. Going parallel changes the ownership model while the storage model stays behind: content becomes per-run while the fields stay common. The defect is therefore invisible when the code is read serially.

Une maison sépare les billots, une autre les distribue encore à l’essaiRéponseOne house separates benches; another still trials automatic assignmentResponse

Dans le premier cas, chaque commis reçoit un rangement séparé et la brigade rejoue volontairement deux commandes ensemble pour vérifier. Dans le second, la maison attribue elle-même un billot à l’arrivée du commis. Cette attribution reste expérimentale et rien ne prouve qu’elle soit devenue la règle.L’état par exécution doit être isolé par tâche, par thread, par contexte asynchrone ou par identité d’exécution explicite, jamais par un champ partagé ; chez SWE-agent, le correctif a déplacé cet état vers un stockage propre au thread, avec un test de régression déterministe à deux exécutions. Les défauts de concurrence exigent des tests à barrières plutôt qu’un entrelacement laissé au hasard. Chez Codex, l’allocation gérée de worktrees porte l’isolation du workspace dans le chemin d’exécution des sessions CLI : la fonctionnalité est explicitement expérimentale, et rien n’établit qu’elle soit devenue le comportement par défaut.In the first case, every cook gets separate storage and the brigade deliberately replays two orders together to check. In the second, the house assigns a bench when the cook arrives. That assignment remains experimental, with no proof it became the rule.Per-run state belongs to a task, a thread, an async context or an explicit run identity, never to a shared field; at SWE-agent the fix moved that state into thread-local storage, backed by a deterministic two-run regression test. Concurrency defects require barrier-based tests rather than incidental interleaving. At Codex, managed worktree allocation carries workspace isolation into the execution path of CLI sessions: the feature is explicitly experimental, and nothing establishes that it became default behavior.

Chaque commis doit recevoir son propre billotLeçonEvery cook needs a separate benchLesson

Quand la maison lance plusieurs préparations ensemble, elle doit attribuer et nommer chaque espace de travail. Une simple habitude entre commis ne suffit plus lorsque personne n’est présent pour répartir les places.Des exécutions parallèles transforment tout état de contrôle partagé en risque de corruption partagé, dès la première concurrence réelle. La propriété du workspace devient alors une primitive de première classe et non une convention externe : une convention suppose un opérateur présent au moment de la création, absent quand le système crée lui-même les exécutions.When the house starts several preparations together, it must assign and name each work area. A habit between cooks is no longer enough when nobody is present to divide the benches.Parallel runs turn any shared control state into shared corruption risk, from the first real concurrency onward. Workspace ownership is therefore a first-class primitive rather than an external convention: a convention assumes an operator present at creation time, and the system creates those runs with no operator there.