You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WsPackets décrit le format transmis entre l'app et RestWs. Il redéclare volontairement ce dont il a besoin plutôt que d'importer Lib, pour que le format reste stable quand le jeu évolue. Mais rien ne signale qu'un paquet a cessé de correspondre à celui qu'il représente, et la dérive s'est déjà produite plusieurs fois.
Ce qui a été constaté :
/drink : les paquets existaient sans aucun traducteur et décrivaient une version antérieure de la commande. DrinkReq portait force et slot alors que CommandDrinkPacketReq n'a aucun champ, la réponse annonçait health/energy/time au lieu de value/itemNature, et deux paquets ne correspondaient plus à rien. Corrigé dans Valider la boucle des collecteurs de bout en bout sur /drink #4669.
ProfileRes ne transporte ni tokens ni cooking, deux blocs que CommandProfilePacketRes contient et que Discord affiche.
InventoryRes ne transporte ni les matériaux, ni le jardin, ni les trois talismans, tous présents dans CommandInventoryPacketRes.
Un écran construit sur ces paquets afficherait un profil et un inventaire incomplets, sans qu'aucune erreur ne le signale : la compilation reste verte parce que les deux définitions sont indépendantes.
Le même angle mort existe sur les types recopiés. RestWs/__tests__/packets/WireEnums.test.ts couvre déjà ItemNature et ItemRarity, dont les membres réordonnés changeraient silencieusement de sens pour les clients installés, mais rien ne protège MainItem, SupportItem, MainItemStat ou ValueAndMax.
Périmètre
Inclus
Le réalignement des paquets du protocole sur les paquets du jeu correspondants
Un contrôle automatique qui échoue quand un paquet du jeu porte un champ que son équivalent protocole ignore, avec la possibilité de déclarer une omission volontaire
L'extension du contrôle des valeurs recopiées aux types, et non plus seulement aux énumérations
Hors périmètre
L'exposition de nouvelles commandes au protocole, traitée par les issues dédiées
L'affichage de ces champs dans l'app
Terminé quand
Aucun paquet du protocole ne perd un champ de son équivalent côté jeu, sauf omission déclarée et justifiée
Ajouter un champ à un paquet du jeu sans le répercuter fait échouer une vérification automatique, avec un message qui nomme le paquet et le champ
Un type recopié dans WsPackets qui s'écarte de sa source fait échouer un test
Le profil et l'inventaire transportent les mêmes informations que celles dont dispose Discord
pnpm tsc, pnpm eslint et pnpm test passent dans WsPackets et RestWs
Contexte
WsPacketsdécrit le format transmis entre l'app et RestWs. Il redéclare volontairement ce dont il a besoin plutôt que d'importerLib, pour que le format reste stable quand le jeu évolue. Mais rien ne signale qu'un paquet a cessé de correspondre à celui qu'il représente, et la dérive s'est déjà produite plusieurs fois.Ce qui a été constaté :
/drink: les paquets existaient sans aucun traducteur et décrivaient une version antérieure de la commande.DrinkReqportaitforceetslotalors queCommandDrinkPacketReqn'a aucun champ, la réponse annonçaithealth/energy/timeau lieu devalue/itemNature, et deux paquets ne correspondaient plus à rien. Corrigé dans Valider la boucle des collecteurs de bout en bout sur /drink #4669.ProfileResne transporte nitokensnicooking, deux blocs queCommandProfilePacketRescontient et que Discord affiche.InventoryResne transporte ni les matériaux, ni le jardin, ni les trois talismans, tous présents dansCommandInventoryPacketRes.Un écran construit sur ces paquets afficherait un profil et un inventaire incomplets, sans qu'aucune erreur ne le signale : la compilation reste verte parce que les deux définitions sont indépendantes.
Le même angle mort existe sur les types recopiés.
RestWs/__tests__/packets/WireEnums.test.tscouvre déjàItemNatureetItemRarity, dont les membres réordonnés changeraient silencieusement de sens pour les clients installés, mais rien ne protègeMainItem,SupportItem,MainItemStatouValueAndMax.Périmètre
Inclus
Hors périmètre
Terminé quand
WsPacketsqui s'écarte de sa source fait échouer un testpnpm tsc,pnpm eslintetpnpm testpassent dansWsPacketsetRestWs