Le jour où j'ai supprimé des données de prod à la main
A shallow spread over a partial PATCH payload replaced an entire settings blob, deleting every field the request didn't happen to carry.
Ça ne pouvait pas marcher
Une course, un ordre, une colonne pour deux choses. La forme l'excluait avant même l'exécution.
Je vérifiais le mode maintenance via l'API et j'ai envoyé une mise à jour partielle à l'endpoint des paramètres de plateforme. Le code de mise à jour la fusionnait dans le blob de paramètres stocké avec un spread superficiel par-dessus ce que la requête portait, donc une charge partielle a remplacé le blob entier. Tout ce qui était hors de mes deux champs a disparu.
Je l'ai récupéré et j'ai corrigé la fusion. Le changement durable est procédural, et c'est une règle pour moi maintenant : ne teste pas une écriture avec un corps d'API partiel fait main, parcours-la via l'interface, qui envoie la forme pour laquelle le serveur a été conçu, et capture l'état de la base d'abord dans les deux cas. Je testais exactement l'endpoint dont la sémantique de fusion était cassée, avec exactement la forme de charge qui le déclenche.