DossierDossier

La maison jette la clé dès qu’elle coinceUn échec d’authentification récupérable est devenu une suppression d’identifiantsThe house bins the pantry key after one jamA retryable login failure became credential deletion

La clé de la réserve doit parfois être refaite. Un jour, le serrurier ne répond pas et la maison jette la clé comme après un refus. Deux commis partagent aussi le même crochet. Le retardataire peut jeter la clé neuve posée par l’autre.Un signalement sur l’intégration OAuth de goose décrit un chemin de récupération destructif qui traite un échec temporaire de rafraîchissement comme une révocation définitive et efface les identifiants stockés. Avec un stockage partagé et des jetons de rafraîchissement rotatifs, un processus obsolète peut en outre effacer les identifiants qu’un autre processus vient de renouveler.The pantry key sometimes needs recutting. One day, the locksmith does not answer and the house bins the key as after a refusal. Two cooks also share one peg. The late cook can discard the fresh key left by the other.A report on goose’s OAuth integration describes a destructive recovery path that treats a temporary refresh failure as definitive revocation and clears the stored credentials. With shared storage and rotating refresh tokens, a stale process can additionally erase credentials another process has just renewed.

La réserveDonnées, mémoire et étatThe pantryData, memory and state

La clé finit à la poubelle au premier incidentChronologieThe pantry key goes from peg to binTimeline

La clé reste au crochet pour le service suivant. Il ouvre ainsi la réserve sans redemander la permission.L’intégration persistait les identifiants OAuth afin que les sessions ultérieures puissent se rafraîchir sans autorisation interactive.The key remains on its peg for the next service. That service can open the pantry without asking permission again.The integration persisted OAuth credentials so later sessions could refresh without interactive authorization.

Dès que la clé ne tourne plus, on la jette. Peu importe qu’on ait refusé d’ouvrir ou que personne n’ait répondu.Le gestionnaire de rafraîchissement signalé effaçait les identifiants stockés après tout échec, sans distinguer une panne temporaire d’un rejet définitif.The moment the key no longer turns, it is binned. It does not matter whether entry was refused or nobody answered.The reported refresh handler cleared stored credentials after any failure, without distinguishing a temporary outage from a definitive rejection.

Sur le même crochet, deux commis courent après la clé neuve. Celui qui arrive trop tard peut jeter celle que l’autre vient d’accrocher.Des sessions concurrentes partageant le même stockage introduisent un second mode de défaillance : le processus perdant la course de rotation du jeton peut effacer les identifiants plus récents écrits par le gagnant.At the same peg, two cooks race for the fresh key. The late one can bin the key the other just hung up.Concurrent sessions sharing one store introduce a second failure mode: the process that loses the token-rotation race can clear the newer credentials written by the winner.

Le signalement propose de garder la clé quand la panne peut passer. Avant de la jeter, il faut vérifier à qui elle appartient. Rien n’établit que ce geste ait été fait.Le signalement propose de conserver les identifiants lors des erreurs récupérables et de vérifier leur propriété ou leur remplacement avant tout nettoyage destructif ; les éléments examinés n’établissent aucune correction livrée.The report proposes keeping the key when the trouble may pass. Before binning it, the brigade should check who owns it. Nothing establishes that this was done.The report proposes preserving credentials on retryable errors and checking ownership or replacement before any destructive cleanup; the evidence examined establishes no shipped correction.

La maison confond une serrure grippée avec un refusMécanismeThe house treats a silent lock as a refusalMechanism

Une serrure grippée et une serrure remplacée ne demandent pas le même geste. Quand deux commis partagent un crochet, il faut regarder la clé avant de la jeter, sinon une vieille main efface la plus neuve.La sémantique de reprise et la propriété de l’état sont indissociables dès lors que la récupération modifie des identifiants. Une panne temporaire de réseau ou de serveur ne doit pas produire la même transition d’état qu’un rejet explicite. En concurrence, le nettoyage destructif exige en plus une comparaison avant suppression, afin qu’une tentative ancienne n’efface pas une génération de jeton plus récente.A sticking lock and a replaced lock do not call for the same move. When two cooks share one peg, look at the key before binning it, or an older hand erases the newer one.Retry semantics and state ownership are inseparable once recovery mutates credentials. A temporary network or server failure must not produce the same state transition as an explicit invalid grant. Under concurrency, destructive cleanup additionally requires a compare-before-delete rule so that an older attempt cannot erase a newer token generation.

Dire ce qui bloque avant de jeter la cléRéponseSay what failed before binning the keyResponse

Avant de toucher à la clé, dire pourquoi elle n’a pas tourné. La garder si la panne peut passer et ne la jeter qu’après un refus certain. Ne jeter que la clé que l’on a soi-même portée au serrurier. Une clé illisible n’est pas une clé jamais reçue.Classer les échecs de rafraîchissement avant de modifier l’état persistant. Conserver les identifiants lors des pannes récupérables, ne les effacer qu’après un rejet définitif, et lier tout nettoyage destructif à la génération de jeton ayant lancé le rafraîchissement. Les erreurs de lecture du stockage doivent rester des erreurs diagnostiques, et non être assimilées à un état jamais autorisé.Before touching the key, say why it did not turn. Keep it if the trouble may pass, and bin it only after a certain refusal. Bin only the key you took to the locksmith yourself. An unreadable key is not a key never received.Classify refresh failures before mutating persistent state. Keep credentials on retryable failures, clear them only on a definitive rejection, and bind destructive cleanup to the token generation that initiated the refresh. Storage read errors must remain diagnostic errors rather than collapsing into a never-authorized state.

Le problème est signalé, mais la réparation n’est pas établieÉtat actuelNothing shows that the house changed its habitCurrent state

Le signalement est ouvert : le geste fautif a été rejoué devant témoin et une réparation est proposée. Les fabricants de serrures savent déjà distinguer une panne d’un refus. Rien n’établit pourtant que la maison ait changé d’habitude, ni que cela ait été vu au service.Le signalement au niveau du code est ouvert et décrit une reproduction concrète ainsi qu’une correction proposée. La bibliothèque OAuth sous-jacente expose déjà une distinction entre erreur récupérable et rejet définitif. Les éléments examinés n’établissent aucune récupération fusionnée, livrée ou vérifiée sur le terrain.The report is open: the wrong move was replayed before witnesses and a repair is proposed. The lockmakers already tell a jam apart from a refusal. Nothing establishes that the house changed its habit, or that anyone saw it hold during service.The source-level report is open and describes a concrete reproduction along with a proposed correction. The underlying OAuth library already exposes a retryable-versus-definitive error distinction. The evidence examined establishes no merged, released or field-verified recovery.

Une clé qui coince ne mérite pas la poubelleLeçonA jammed key does not belong in the binLesson

Une clé qui coince peut encore ouvrir dix minutes plus tard. Une clé jetée ne le fera jamais.Une erreur récupérable ne doit pas pouvoir déclencher une transition d’état irréversible.A sticking key may still open the door ten minutes later. A binned key never will.A retryable error must not be allowed to trigger an irreversible state transition.