Release/0.5.2#296
Merged
Merged
Conversation
Les axes gorgeCrossingsBpm{Throat,Full} n'avaient pas de cas dans
_fromOf/_toOf → ch.to == null. Le contrôleur incrémente le compteur de
franchissements sur e.to == ch.to ; avec ch.to null le compteur reste
figé à 0, la condition de fin (count >= targetCrossings) n'est jamais
atteinte et le builder émet des segments indéfiniment → boucle infinie.
Ajoute head→throat (throat) et mid→full (full), alignés sur les jumeaux
rhythmBpmCeil{Throat,Full} qui fonctionnent et sur les pools des builders.
Régression couverte dans challenge_service_test.
…nfinite-loop fix(challenges): défi à franchissements gorge ne se termine jamais
Les défis dynamiques (rythme, franchissement gorge, biffle, endurance) imposaient la même tenue continue du doigt que les holds statiques — ergonomiquement coûteux quand le geste entre en compétition avec l'acte (retour stefsub : deepthroat rapide + doigt pinné sur 3-4 min). Deux modes d'input désormais, aiguillés sur le mode du step : - hold (statique) : tenue du doigt inchangée (release = abandon/validation) - tapToggle (dynamique) : tap DÉMARRE, le défi tourne sur sa propre horloge, bouton STOP plein largeur = abandon en live / validation au seuil. L'extension bonus reste passive (ne pas taper = continuer), miroir exact du hold. ChallengeInputMode dérivé du mode (getter, pas de champ). Helpers _failChallengeLive/_bankChallengeFromAtSeuil partagés hold/tap. Capture de présence globale (touch + clavier) neutralisée en mode tap. Phrases TTS attempt/extension + 6 clés ARB (fr/en/de) en variante tap. Test challenge_input_mode_test fige la règle axe -> mode -> input.
feat(challenges): input tap GO/STOP pour les défis dynamiques
Sur iOS Safari/PWA, start() restait bloqué en idle : WakelockPlus.enable() (et potentiellement _tts/_beep.init()) peut lever une exception — la Wake Lock API exige un contexte de geste, indisponible depuis le Timer de prep appelé 7 s après « JE SUIS PRÊTE ». L'exception se propageait avant `_state = running` (le try n'avait qu'un finally, pas de catch), laissant la séance en idle. Or en prod l'écran de jeu n'a aucun bouton play (gated derrière le toggle debug showSessionControls) → soft-lock : l'utilisatrice ne voyait que les sliders de volume (retour iOS v0.4.0). Les trois inits deviennent best-effort (try/catch + debugPrint) : aucun n'est un prérequis du passage en running. La séance démarre toujours, au pire sans wakelock. Android/desktop inchangés (ces appels n'y throwent pas).
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.
No description provided.