- Expédié
- 14 août 2026 à 23:20 UTC
- Auteur
- kamo
- Commite
- a2db801
Tirer un son lu sur un contexte, qui a fait de chaque site d'appel POSITION DANS LE TRAITE une partie de sa justesse. Une composante rendue au-dessus de SoundProvider a obtenu un no-op et n'a fait pas de bruit - et c'est la pire défaillance possible pour cette caractéristique, parce que le silence est exactement ce que produit un "off" correctement configuré. Le bug est invisible de la même manière que le carillon manquant qu'il cause est. Donc la pile résolue vit maintenant en lib/son/sonStore, un module singleton, et le travail du fournisseur est de le maintenir à jour plutôt que de le distribuer. playEventSound est importable de n'importe où et se comporte de manière identique où qu'il se trouve. appelé - au-dessus du fournisseur, en dessous, ou à partir d'un rappel socket enregistré avant il est monté. En l'absence de fournisseur, il joue les défauts du catalogue, qui est le dégradation honnête: une page sans athlète n'a pas de membre dont les préférences s'appliquent. Cela supprime aussi un idiome. usePlaySound est parti: un crochet qui ne lit pas de contexte et aucun état n'est pas un crochet, c'est une fonction ordinaire portant la forme d'un crochet, impliquant la sémantique par abonnement n'a pas de sémantique. Et chaque site d'appel de socket le tenait dans une référence avec un commentaire expliquant que le rappel inclinerait autrement le premier render's function ' vrai quand il vient d'un contexte, faux le moment qu'il fait non. Quinze fichiers perdent la ref, l'appel à crochet et le commentaire maintenant erroné. Ici également: - Le rinçage non moulé dans l'utilisationSoundLayerDraft dépendait de l'identité change avec la couche, c'est-à-dire à chaque frappe. Chaque rediffusion a autorisé l'attente temporisateur et a écrit immédiatement - transformer le debounce en un PUT par changement, le c'est exactement ce qu'il existe pour prévenir, et silencieusement: les réglages encore sauvés, juste quarante fois au lieu d'une fois. Le fait de tenir dans une référence, il dépend maintenant de [- maintenant. - Les deux commutateurs obtiennent des noms explicites accessibles. Leurs étiquettes visibles sont assises en frère ou sœur colonnes, donc un lecteur d'écran annonçait cinquante bascules non étiquetées dans une rangée. - Code mort supprimé : CATÉGORIE-ICON, catégorie Comptes, eventsInCategory, isAudioUnlocked, closeAudioContext, et EventSoundEditor's hideMaster prop, qu'aucun appel n'est jamais passé. 16 nouveaux tests couvrent ce que le magasin décide, car chaque règle qu'il applique produit L'imprécision et le silence sont indiscernables de "correctement désactivé" à moins que quelque chose affirme dessus: les fenêtres d'accélérateur (y compris qu'un événement étouffé ne dépense pas son le budget propre), la règle déjà regardée et sa force s'échappent, maître et volume par appel, clés inconnues, et jeu sans réglages chargés du tout. Portes: tsc clean, 1867 test passes, la prochaine construction compile, i18n garde propre.