Repository navigation
Un essai à blanc qui écrit n'est pas à blanc - #725
Merged
Merged
Conversation
Trouvé en préparant le lancement du dry-run sur les vrais écrans du mainteneur, pas par un test. `GapGuard::restore` **supprime son journal** quand il réussit. En mode sec je lui passais un exécuteur qui se contentait d'enregistrer la ligne et rendait « réussi » — donc l'essai à blanc signalait un succès et emportait le journal avec lui. Le journal est le seul enregistrement des écarts que l'agent a ouverts : une prévisualisation qui le jette laisse une topologie écartée que plus rien ne peut remettre en place. `plan_restore` était déjà pur et public ; `GapGuard::would_restore` l'expose sans l'effet de bord, et le chemin sec passe par là. Deux chemins, pas un drapeau : c'est précisément parce que `restore` fait autre chose que courir qu'un exécuteur qui ne court pas ne suffit pas à le rendre inoffensif. Au passage, la forme était fausse aussi : `plan_restore` rend les arguments d'**une** invocation, et je les imprimais comme autant de lignes de commande. La liste aurait menti sur ce qui part. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Trouvé en préparant le lancement du dry-run de #724 sur de vrais écrans — pas par un test, et avant que ça ne coûte quoi que ce soit.
GapGuard::restoresupprime son journal quand il réussit. En mode sec je lui passais un exécuteur qui se contentait d'enregistrer la ligne et rendait « réussi » : l'essai à blanc signalait donc un succès et emportait le journal avec lui.Le journal est le seul enregistrement des écarts de 1 px que l'agent a ouverts autour du moteur. Une prévisualisation qui le jette laisse une topologie écartée que plus rien ne peut remettre en place — ni un restore ultérieur, ni le prochain démarrage.
Le correctif
plan_restoreétait déjà pur et public ;GapGuard::would_restorel'expose sans l'effet de bord, et le chemin sec passe par là.Deux chemins, pas un drapeau — et c'est la leçon :
restorene fait pas que courir, donc un exécuteur qui ne court pas ne suffit pas à le rendre inoffensif. Partout ailleurs dans #724 l'échange d'exécuteur suffisait, ce qui rendait cette exception facile à ne pas voir.Au passage, la forme était fausse aussi :
plan_restorerend les arguments d'une invocation dekscreen-doctor, et je les imprimais comme autant de lignes de commande. La liste aurait menti sur ce qui part.Un test épingle les deux moitiés : demander ce qu'un restore ferait laisse le journal en place, et un vrai restore le consomme.
🤖 Generated with Claude Code