2026.08.04 (Mar)

✹ RĂ©sumĂ© de GPT-5.6 Sol

Le rĂ©cit d’une division du travail abandonnĂ©e quand les messages ont fait perdre son contexte au coordinateur, puis repensĂ©e autour de rapports sur fichiers et de commits rĂ©servĂ©s au coordinateur aprĂšs le goulot d’étranglement d’une session unique.

J’avais renoncĂ© Ă  sĂ©parer le coordinateur et les workers

Le mois dernier, j’ai rĂ©ellement reliĂ© un coordinateur Ă  plusieurs workers. Un objectif Ă©tait divisĂ© en plusieurs tĂąches, puis le coordinateur examinait et intĂ©grait ce que les workers avaient implĂ©mentĂ©.

La division du travail elle-mĂȘme Ă©tait rapide. Les fonctions indĂ©pendantes pouvaient ĂȘtre dĂ©veloppĂ©es simultanĂ©ment, tandis que le coordinateur ne s’occupait que de la direction gĂ©nĂ©rale du produit et de l’intĂ©gration. Le problĂšme venait de la maniĂšre dont les workers transmettaient leurs rĂ©sultats.

Chaque fois qu’ils terminaient ou se retrouvaient bloquĂ©s, ils envoyaient un rapport dans la session du coordinateur. Cela me paraissait naturel au dĂ©but. Mais plus leur nombre augmentait, plus les rapports s’accumulaient dans la conversation, et chaque nouveau message interrompait le travail en cours pour attirer l’attention vers une autre tĂąche.

Je lisais le rĂ©sultat de test d’un worker, passais au conflit de Git index d’un autre et recevais un troisiĂšme rapport juste au moment de revenir Ă  l’implĂ©mentation initiale. La conversation s’allongeait rapidement. À mesure que les compactages se rĂ©pĂ©taient, il fallait davantage de temps pour reconstruire l’objectif, les interdictions de dĂ©ploiement et l’état actuel du stage. Le coordinateur ressemblait finalement moins Ă  un intĂ©grateur qu’à un guichet chargĂ© de traiter les messages des workers.

J’ai fini par abandonner la sĂ©paration elle-mĂȘme. J’ai mĂȘme supprimĂ© impulsivement la Skill de coordination que j’avais créée. Je pensais qu’en faisant tout dans une seule session principale, le contexte ne serait au moins plus tirĂ© dans plusieurs directions.

Revenir à une seule session a montré pourquoi la division était nécessaire

Pourtant, en poursuivant un grand travail produit dans une session unique, le goulot d’étranglement opposĂ© est apparu immĂ©diatement.

ImplĂ©mentation, tests, cohĂ©rence documentaire, vĂ©rification sur appareils physiques et prĂ©paration du Runtime devaient ĂȘtre traitĂ©s successivement par la mĂȘme session. Si une question de prioritĂ© ou une transmission provenant d’une autre session arrivait en chemin, il fallait d’abord reconstruire l’état du travail en cours. Finir soigneusement une tĂąche allongeait l’ensemble ; traiter l’urgence d’abord exigeait de dĂ©cider jusqu’oĂč clore le travail existant.

Le problĂšme n’était pas la division du travail. Garder mĂȘme des tĂąches indĂ©pendantes dans une seule session Ă©tait inefficace. SĂ©parer coordinateur et workers restait la solution la plus efficace, mais rĂ©tablir la structure oĂč les workers entraient directement dans la conversation actuelle du coordinateur ne ferait que rĂ©pĂ©ter l’échec.

Cette fois, au lieu d’abandonner la division, j’ai dĂ©cidĂ© de supprimer la voie de transmission qui interrompait le contexte du coordinateur.

Une notification d’une ligne ouvrait la mĂȘme porte

J’ai d’abord pensĂ© qu’un worker pouvait envoyer une ligne courte plutĂŽt qu’un long rapport.

READY task-042: chemin du rapport

Mais la longueur n’était pas le problĂšme. DĂšs qu’un message entrait dans la conversation du coordinateur, Codex pouvait facilement le traiter comme un contexte plus rĂ©cent que le travail en cours. MĂȘme une seule ligne conservait la mĂȘme porte d’entrĂ©e vers un changement de tĂąche.

Les workers n’envoient donc plus de message au coordinateur. Les Ă©tats de fin, de blocage et d’échec sont Ă©crits uniquement dans des fichiers de rapport. Le coordinateur ne consulte l’inbox qu’aprĂšs avoir amenĂ© son propre travail jusqu’à un checkpoint ou un commit sĂ»r.

L’arrivĂ©e d’un rapport n’est pas un Ă©vĂ©nement qui interrompt le travail actuel. Elle ajoute simplement un fichier Ă  la prochaine file d’examen.

Les Worktrees Ă©taient propres, mais s’éloignaient de l’état le plus rĂ©cent

J’ai ensuite envisagĂ© un Worktree et une Branch distincts pour chaque worker. Le Git index et les changements non commitĂ©s ne se mĂ©langeaient pas ; en apparence, c’était la solution la plus propre.

Mais un problĂšme plus important surgissait dans les vrais projets. Plusieurs fonctions modifiaient continuellement la mĂȘme API, le mĂȘme schema et le mĂȘme Ă©cran. Les amĂ©liorations terminĂ©es dans une session n’étaient pas immĂ©diatement visibles dans les autres Worktrees. Chacun travaillait proprement, mais l’intĂ©gration rĂ©vĂ©lait une pile de modifications construites sur d’anciennes structures. Le volume de retouches devenait alors franchement pĂ©nible.

J’ai donc choisi la structure opposĂ©e.

Un seul main Working Tree
├─ Plusieurs workers voient ensemble les changements les plus rĂ©cents
├─ Les workers ne modifient que les fichiers et hunks attribuĂ©s
├─ Les workers ne font ni stage ni commit
└─ Seul le coordinateur examine, stage et commit

Un Working Tree partagĂ© s’emmĂȘle aussi immĂ©diatement sans limites. Par dĂ©faut, un fichier n’a qu’un writer ; les modifications parallĂšles du mĂȘme fichier ne sont permises que si les hunks sont clairement sĂ©parĂ©s. Les schemas communs, le nettoyage des imports, les formatters et les changements qui dĂ©placent le code environnant sont sĂ©rialisĂ©s.

Les tests exĂ©cutĂ©s par un worker ne constituent pas non plus une preuve finale. Ils peuvent avoir Ă©tĂ© lancĂ©s en prĂ©sence des changements non commitĂ©s d’un autre worker. Chaque worker vĂ©rifie son pĂ©rimĂštre ; le coordinateur gĂšle l’ensemble des changements puis exĂ©cute une fois la rĂ©gression complĂšte et le build.

Les rapports sont devenus des contrats de revue

J’ai reconstruit la Skill de coordination supprimĂ©e selon ces principes. La nouvelle Skill custom-coordinate-parallel-workers contient ce flux.

Le coordinateur attribue un task id, le rĂ©sultat attendu par l’utilisateur et les chemins accessibles en Ă©criture. Le worker termine l’implĂ©mentation, la vĂ©rification ciblĂ©e et le nettoyage des processus temporaires, puis crĂ©e atomiquement un rapport et s’arrĂȘte. Ce rapport liste les fichiers rĂ©ellement modifiĂ©s, les rĂ©sultats des contrĂŽles, les chevauchements, le pĂ©rimĂštre inachevĂ© et un commit proposĂ©.

Le coordinateur ne relit pas toutes les conversations. Il consulte d’abord dans l’inbox le task id, l’état, le titre et le rĂ©sumĂ© des contrĂŽles, puis choisit une tĂąche Ă  intĂ©grer. Il confirme que le rapport correspond au diff rĂ©el avant de stage et commit uniquement les hunks exacts.

Lorsqu’un candidat de release est choisi, un freeze bloque les nouvelles mutations des workers. Au lieu de rĂ©pĂ©ter les tests complets tandis que les changements continuent d’arriver, la documentation du current state, la rĂ©gression complĂšte, le build et la vĂ©rification du dĂ©ploiement commencent lorsque l’ensemble de release ne bouge plus.

Le rapport n’est plus un simple journal de travail. Il est devenu le contrat de revue qui permet au coordinateur de faire confiance au changement et de le faire passer Ă  l’état suivant.

Il faut maintenant le faire fonctionner sur un vrai travail

J’ai testĂ© les outils de gestion d’état de la Skill dans un environnement temporaire isolĂ©. La fin normale, les conflits de chemins accessibles en Ă©criture, la reprise aprĂšs une demande de modification, le refus d’un freeze pendant l’exĂ©cution et le report au batch suivant ont tous fonctionnĂ©.

Je n’ai toutefois pas encore exploitĂ© plusieurs vraies sessions Codex de cette maniĂšre. La prochaine tĂąche parallĂšle devra montrer si les rapports uniquement sur fichiers perturbent moins le contexte du coordinateur et si la propriĂ©tĂ© des chemins dans le Working Tree partagĂ© est respectĂ©e comme prĂ©vu.

La conclusion ressemble Ă  mon point de dĂ©part, mais la raison est dĂ©sormais plus claire. Il faut sĂ©parer le coordinateur des workers. Ce n’est pas la division du travail qui a Ă©chouĂ©, mais l’envoi en temps rĂ©el de chaque rapport dans la conversation actuelle du coordinateur.

Le changement attendu n’est pas simplement de lancer davantage de workers. Il consiste Ă  laisser le coordinateur prĂ©server son contexte jusqu’à la fin de son propre travail. La vitesse du travail parallĂšle dĂ©pendait moins du nombre de workers que du nombre de fois oĂč la personne chargĂ©e d’intĂ©grer leurs rĂ©sultats Ă©tait dĂ©tournĂ©e.

Laisser un commentaire