Skip to content

fix: un Fail non confirmé n'est plus jeté en silence (#186) - #209

Merged
DireDoch merged 1 commit into
developfrom
fix/186-echec-master-silencieux
Aug 17, 2026
Merged

DireDoch merged 1 commit into
developfrom
fix/186-echec-master-silencieux

Conversation

@DireDoch

Copy link
Copy Markdown
Owner

Deuxième moitié de #186 — la moitié serveur. (La moitié client, ← menu rendu pendant running, est partie avec #187.)

Ce que j'ai trouvé en relisant le chemin complet

Le chemin nominal « seul, j'abandonne → RaceOver » est bien correct, comme le disait déjà l'issue. Mais fail_race a deux rejets muets, et le client, lui, s'arrête de taper AVANT que le serveur réponde (doneLocal = true posé juste avant l'envoi, ui/race.ts) :

  • Room pas sous Master → return false
  • le recompute ne confirme aucune faute → return false

Dans les deux cas le serveur ne répond rien. L'auteur du message reste devant « Terminé — en attente des autres… », sans bouton (forfeitBtnHtml() s'efface dès doneLocal), jusqu'au watchdog de 10 minutes. Seul en course, c'est la course entière qui ne se clôture plus — exactement le symptôme rapporté, y compris le « même en abandonnant » : une fois doneLocal posé, forfeit() refuse de partir.

Le correctif

Enregistré en abandon, jamais laissé sans réponse. Ce n'est pas une invention : c'est la garde que finish_race applique déjà deux fois pour la même raison — #160 (Finish qui ne couvre pas tout le texte) et #163 (Finish sous un mode qui ne l'a pas réclamé), toutes deux commentées « ça débloque la fin pour les autres au lieu de laisser la Room pendue jusqu'au watchdog ». Il en manquait une troisième.

L'échec, lui, reste refusé : rien à maquiller en faute que le serveur n'a pas confirmée. Le partant non éligible (déjà fini, jamais parti) reste ignoré en silence — il n'y a rien à débloquer.

Aucune porte ouverte à la triche : l'abandon est le pire classement possible, et il est déjà à un clic.

Honnêteté sur le périmètre

Ceci corrige un trou confirmé par lecture et par test, mais je ne peux pas prouver que c'est celui que le rapporteur a rencontré : il faudrait la difficulté Master. #186 reste donc ouverte tant qu'il manque la capture issue_multi_solo.png et le Mode de jeu utilisé.

Deux tests existants figeaient l'ancien contrat (« la course continue ») — mis à jour, plus un qui vérifie que la sortie est bien un forfeit et pas un failed_percent. 155 tests backend au vert, clippy propre.

Le client s'arrête de taper AVANT que le serveur réponde (`doneLocal`). Les
deux rejets muets de `fail_race` — Room pas sous Master, recompute qui ne voit
aucune faute — laissaient donc leur auteur devant « Terminé — en attente des
autres… », sans bouton, jusqu'au watchdog de 10 minutes. Seul en course, c'est
la course entière qui ne se clôturait plus : le symptôme rapporté.

Enregistré en abandon, comme les deux gardes de `finish_race` (#160, #163) le
font déjà pour la même raison. L'échec, lui, reste refusé : rien à maquiller en
faute que le serveur n'a pas confirmée. Aucune porte ouverte à la triche —
c'est le pire classement possible, et abandonner est déjà à un clic.
@DireDoch
DireDoch force-pushed the fix/186-echec-master-silencieux branch from 7539e3b to 10aa5d9 Compare August 17, 2026 02:15
@DireDoch
DireDoch merged commit 06dcf7f into develop Aug 17, 2026
3 checks passed
@DireDoch
DireDoch deleted the fix/186-echec-master-silencieux branch August 17, 2026 02:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant