L’ardoise a été effacée avant le nouveau menuLe remplacement détruit l’ancien état avant d’être durableThe board was wiped before the new menu arrivedThe replacement destroys the old state before it is durable
Le menu de la veille a été effacé de l’ardoise avant que le nouveau soit prêt. La dictée s’est arrêtée en route. L’ardoise est restée blanche, sans ancien menu ni nouveau.Une écriture atomique ne rend le nouvel état visible qu’une fois complet et durable, l’ancien restant intact jusque-là. Chez Claude Code, un deadlock shell/heredoc récurrent, observé sur un chemin Bash de macOS, a pris une conséquence plus lourde : avec redirection vers fichier, la destination pouvait être tronquée avant que le payload de remplacement soit écrit en sécurité. Le blocage cesse alors d’être bénin et laisse la destination vide.Yesterday’s menu was wiped from the board before the new one was ready. The dictation stopped halfway through. The board was left blank, with neither the old menu nor the new one.An atomic write exposes the new state only once it is complete and durable, with the previous one intact until then. In Claude Code a recurring shell/heredoc deadlock, seen on one macOS Bash path, took on a heavier consequence: under file redirection the destination could be truncated before the replacement payload was safely written. The hang stops being benign at that point and leaves the destination empty.
La cuisson et les reprisesExécution, arrêt et récupérationCooking and restartingExecution, cancellation and recoveryLe blocage a laissé l’ardoise blancheSignauxThe stall left a blank boardSignals
Cette dictée s’était déjà bloquée et avait seulement retardé le service. Cette fois, l’éponge était passée avant le premier mot. Le retard est devenu une perte du menu qui fonctionnait encore.Le signal n’est pas l’échec lui-même mais ce qu’il laisse derrière : une destination vide après interruption, alors que l’ancien contenu était valide. Le blocage préexistait sur plusieurs surfaces d’exécution sans mitigation durable ; c’est la redirection vers fichier qui l’a transformé en perte. L’exposition dépend de l’environnement : interpréteur et comportement de pipe varient d’une surface à l’autre.This dictation had stalled before and only delayed service. This time the sponge crossed the board before the first word arrived. A delay became the loss of a menu that had still worked.The signal is not the failure itself but what it leaves behind: an empty destination after an interruption, where the previous content was valid. The hang already existed on several execution surfaces with no durable mitigation; file redirection is what turned it into loss. Exposure is environment-dependent: interpreter and pipe behavior vary from one surface to the next.
L’éponge est passée trop tôtMécanismeThe sponge came too soonMechanism
Le souci n’était pas seulement le silence de la dictée. On avait déjà effacé l’ardoise avant de recevoir le menu complet. Quand les mots ont cessé d’arriver, il n’y avait plus rien à sauver.La redirection shell peut muter la destination avant que le chemin producteur-consommateur ait progressé. Un comportement d’interpréteur et de pipe dépendant de l’environnement transforme alors un blocage ordinaire en commit destructif partiel. Le défaut n’est pas l’interruption : c’est l’ordre, qui engage la destination avant que le remplacement existe.The trouble was not only that the dictation went silent. The board had already been cleared before the whole menu arrived. When the words stopped, nothing was left to save.Shell redirection can mutate the destination before the producer-consumer path has made progress. Environment-dependent interpreter and pipe behavior then turns an ordinary hang into a partial destructive commit. The defect is not the interruption: it is the ordering, which commits the destination before the replacement exists.
Écrire le nouveau menu sur une autre ardoiseRéponseWrite the new menu on a spare boardResponse
Prépare le nouveau menu sur une ardoise de réserve et relis-le avant l’échange. L’ancienne reste au mur jusque-là. La perte a été refaite dans une cuisine précise, mais aucune protection livrée n’est établie à la date observée.Préférer des primitives d’écriture atomiques et laisser la destination existante intacte jusqu’à ce que le remplacement soit durable. Borner l’exécution shell et expliciter la sémantique de l’interpréteur là où la composition shell est inévitable. Au cutoff observé, aucune mitigation produit livrée n’est établie : ce motif repose sur une reproduction destructive, pas sur un correctif.Write the new menu on a spare board and read it through before the swap. Keep the old one on the wall until then. The loss was recreated in one particular kitchen, but no delivered safeguard is established at the observed date.Prefer atomic write primitives and leave the existing destination untouched until the replacement is durable. Bound shell execution and make interpreter semantics explicit wherever shell composition cannot be avoided. As of the observed cutoff no shipped product-level mitigation is established: this pattern rests on a destructive reproduction, not on a fix.
Un raté ne doit jamais effacer le dernier bon menuLeçonA failed attempt must not erase the last good menuLesson
Un changement est sûr quand il peut rater sans faire disparaître le dernier menu valable. Prépare, vérifie, puis échange. Tant que l’ancien reste lisible, un arrêt ne coûte qu’un retard.Une écriture de fichier généré n’est sûre que si un échec survenu avant commit laisse l’ancien fichier intact. La propriété à garantir est la survie de la dernière version connue bonne, pas la réussite du chemin nominal.A change is safe when it can fail without destroying the last menu known to work. Prepare, check, then swap. As long as the old board remains readable, a stall costs only time.A generated-file write is safe only when failure before commit leaves the previous file intact. The property to guarantee is survival of the last known-good version, not success of the nominal path.

