+15
−0
Loading
L'animateur saisit ce que le joueur VERRA s'afficher — un nom d'organisme ou un numéro — choisit le personnage à joindre, et un téléphone sonne dans son espace. Audio seul, WebRTC direct de navigateur à navigateur : le serveur ne transporte jamais la voix, il ne relaie que la signalisation (SDP, candidats ICE). Ni SFU, ni serveur média, ni enregistrement. Ce qui a été écarté - La visio de groupe. Une cellule de crise compte 6 à 10 personnes : le maillage s'écroule et il faudrait un SFU plus un TURN, faisant passer docker-compose de 2 à 4-5 services, avec plages UDP et certificat réel — getUserMedia exige un contexte sécurisé. Pour un produit auto-hébergeable, cela deviendrait le premier poste de support, pour une fonction que les participants ont déjà. - Un service externe en iframe, qui contredirait l'invariante « confinement : aucune sortie externe » du moteur. - Tout enregistrement. La voix est une donnée personnelle d'un autre ordre que ce que le produit manipule ; il évite déjà délibérément de nommer un joueur réel dans les preuves du rapport. C'est un arbitrage de doctrine, consigné au cahier des charges (§7.5) et non tranché ici. Sûreté - Interdiction du bac à sable STRUCTURELLE, et non paramétrable : le refus est adossé à Tenant.ephemeralUntil, pas au réglage d'exercice. Un test force voiceCallsEnabled à vrai en base sur un tenant éphémère et vérifie que l'appel est refusé quand même — et pour le bon motif. L'ordre des refus est lui-même testé, pour qu'on ne lise jamais « réglage fermé » là où c'est le caractère éphémère qui bloque : sinon on croirait qu'ouvrir le réglage suffirait. - Réglage par exercice, fermé par défaut. La fonction demande le micro des deux côtés, donc un consentement, et n'a de sens qu'avec l'animation en poste. Aucun exercice existant ne change de comportement. - Appel possible en RUNNING seulement. Avant le lancement, c'est le comcheck. - Une session « voir comme » ne peut pas décrocher : observer l'espace d'un joueur ne donne pas le droit de prendre ses appels. Le garde HTTP la tient en lecture seule ; décrocher n'est pas une lecture. - Un participant d'un autre exercice n'est pas joignable, et un candidat ICE ne part qu'au pair concerné — jamais dans la salle d'exercice, un candidat portant des adresses réseau. - Aucun serveur ICE par défaut. Câbler un STUN public aurait révélé l'adresse IP des joueurs à un tiers sans que personne l'ait demandé. WEBRTC_ICE_SERVERS permet d'en fournir. CONSÉQUENCE ASSUMÉE : sans TURN, la liaison ne s'établit qu'au sein d'un même réseau. RGPD - Rien de la conversation n'est conservé : ni contenu, ni transcription, ni audio. Seules la durée, l'issue et l'étiquette d'appelant sont tracées. - La trace nomme le PERSONNAGE, jamais la personne réelle — même règle que les preuves du rapport (EV-6), un journal se relisant en RETEX devant tous. Un test le vérifie avec un participant nommé pour ça. Interface - Côté joueur, l'appel s'affiche PAR-DESSUS l'onglet courant : un téléphone qui ne sonnerait que sur son propre onglet passerait inaperçu. Un onglet « Téléphone » porte l'état au repos et l'historique de la session. - Sonnerie synthétisée par WebAudio, comme le ping() existant : aucun fichier à servir, rien qui sorte de l'instance. Distincte du bip — un appel exige une réponse, il doit insister. L'animation de la sonnerie respecte prefers-reduced-motion. - Les échecs sont dits au joueur au lieu d'échouer en silence : micro refusé, micro indisponible hors contexte sécurisé, communication interrompue. - Entrées anglaises pour toutes les chaînes joueur. La console reste en français. Vérifications - eslint, typecheck des trois paquets, 199 tests / 21 suites : verts. - 13 vérifications d'intégration contre la vraie base, dont le refus du bac à sable drapeau ouvert, l'isolation entre exercices et la trace au journal. - À l'écran, dans l'application : onglet « Téléphone » présent sur un exercice ouvert, ABSENT dans le bac à sable. - NON ÉPROUVÉ : le trajet audio complet — sonnerie, décrochage, voix de bout en bout. Il demande une session animateur et deux micros. Une revue de sécurité de la signalisation reste due avant tout déploiement exposé, au même titre que celle due pour le bac à sable. Co-Authored-By: Claude (RCA)