
Cotton
Translation workflow
Des traductions générées aux résultats révisables.
Un workflow de traduction pour les dialogues de jeux vidéo.
Une course trouvée en revue, des jobs bloqués renvoyés selon leur cause
Un cas dont la politique et les commits nomment Claude pour l’implémentation et Codex pour la revue, et un autre qui a rendu les jobs bloqués diagnosticables.
May 19, 2026
Une modification qui s’arrête à l’épuisement du quota a été corrigée dans la même PR, y compris la course trouvée en revue
PersonnePersonne
ActionArrêt des dépenses à l’épuisement du quota · pas de repli automatique
- passationContrainte d’implémentation→ Implémenter checkpoint · arrêt · reprise manuelle (Claude)
Agent de codeClaude
ActionImplémenter checkpoint · arrêt · reprise manuelle
- passationRevue dans la même PR→ Constat : course · transitions d’état en double (Codex)
Revue · vérificationCodex
Observation · constatConstat : course · transitions d’état en double
- renvoyéCourse · idempotence→ Dans la même PR : verrou de ligne · clé de score unique · transition atomique (Même PR)
ArtefactsMême PR
ArtefactDans la même PR : verrou de ligne · clé de score unique · transition atomique
- passation→ Fixture locale · enregistrements du contrôle d’intégration DB (Même PR)
ArtefactsMême PR
ArtefactFixture locale · enregistrements du contrôle d’intégration DB
- pas une exécution consignéePérimètre vérifié→ Aucun nouveau résultat de CI ni de déploiement en production collecté (Même PR)
ArtefactsMême PR
Règle · non vérifiéeAucun nouveau résultat de CI ni de déploiement en production collecté
- Contexte
- La condition fixée par une personne était d’arrêter les dépenses quand le quota est épuisé, sans repli automatique. Claude a implémenté checkpoint, arrêt et reprise manuelle, et une revue Codex lancée via le MCP du projet a trouvé une course et des doublons dans les transitions d’état.
- Résultat
- Les transitions d’entrée et de reprise s’exécutent sous verrou, les scores du juge portent une clé unique contre les doublons, et la frontière de transaction a été fixée. Cela ne signifie pas que toutes les courses ont été éliminées.
- Limite
- Le commit indique 140 contrôles et le CHANGELOG d’intégration ultérieur en indique 160 ; ils ne sont donc pas fusionnés en un seul nombre d’exécutions. Selon la politique, la revue Codex est une étape locale facultative ; cela ne signifie donc pas que toutes les PR passées en ont bénéficié.
Sources et limites restantes
- La politique consigne l’ordre : Claude implémente, Codex fait une revue locale via le MCP du projet, la revue est jointe à la PR, et les désaccords sont examinés avec l’agent de revue de Claude. La revue Codex automatique en CI avait été reportée.
- Les contrôles de développement utilisent des fixtures et des mocks, et les appels réels au modèle demandent un périmètre propre. Les constats de revue sont intégrés à la même PR, puis squash-merge feature → main.
May 26, 2026
Les jobs bloqués sont devenus diagnosticables et ont été renvoyés selon leur cause
En développementWorker de traduction · file
Observation · constatJobs restés en brouillon · tentatives épuisées
- passationValeurs observées→ Rapprocher failedReason · codes de sortie · état brouillon (Développeur)
PersonneDéveloppeur
ActionRapprocher failedReason · codes de sortie · état brouillon
- passation→ Cause : le NODE_OPTIONS hérité entre en conflit dans les sous-processus (Développeur)
PersonneDéveloppeur
Observation · constatCause : le NODE_OPTIONS hérité entre en conflit dans les sous-processus
- renvoyéConflit d’option héritée→ Retirer NODE_OPTIONS · plafond de concurrence par processus (Modifications du code)
Session de travailModifications du code
ActionRetirer NODE_OPTIONS · plafond de concurrence par processus
- passation→ État de la file : waiting · active · failed · stale (Modifications du code)
Session de travailModifications du code
ActionÉtat de la file : waiting · active · failed · stale
- passation→ Balayage des inactifs : absent de la file ou tentatives épuisées, selon qu’un résultat existe (Modifications du code)
Session de travailModifications du code
ActionBalayage des inactifs : absent de la file ou tentatives épuisées, selon qu’un résultat existe
- passationUn cycle→ Balayage en dev : 200 candidats → 106 déplacés · 2 remis en file · 0 erreur (Artefacts)
ArtefactsArtefacts
ArtefactBalayage en dev : 200 candidats → 106 déplacés · 2 remis en file · 0 erreur
- pas une exécution consignéeLimite de l’interprétation→ Les 106 ne sont pas des traductions réussies (Artefacts)
ArtefactsArtefacts
Règle · non vérifiéeLes 106 ne sont pas des traductions réussies
- Contexte
- Le rapprochement du failedReason de BullMQ, des codes de sortie des sous-processus et des jobs restés en brouillon a montré que le NODE_OPTIONS hérité entrait en conflit dans les sous-processus. Ensuite, la même situation a été rendue visible comme état de la file.
- Résultat
- Les jobs bloqués sont séparés entre ceux absents de la file et ceux qui ont épuisé leurs tentatives ; ces derniers passent, avec une raison, à needs_review ou à needs_credential selon qu’un résultat existe. La revue humaine est maintenue.
- Limite
- Le plafond de concurrence est par processus. Les journaux d’exécution d’origine n’étaient pas disponibles dans les éléments examinés ; les chiffres de latence sont omis faute d’enregistrement des modèles et de l’effort demandés. Le code de build et de version ne prouve pas à lui seul un déploiement public.
Sources et limites restantes
- Le CHANGELOG consigne une proposition de branches d’adaptateurs parallèles, mais elle n’est pas transformée en enregistrement d’une exécution parallèle réelle.
- Le reste des 200 n’est pas détaillé dans cet enregistrement.