Contexte
Cinquième et dernière issue du milestone v10.0.0 — Éclairage ambiance. Assemble le vocabulaire
d'événements, le pilote Hue Bridge et la configuration en une fonctionnalité réellement utilisable en
soirée, et traite les bouts qui n'appartiennent proprement à aucune des trois.
Portée
- Restitution de l'éclairage. À l'arrêt de la partie, à l'entracte et à l'arrêt du serveur
((*App).stop(), main.go:992-1005, où dnsServer.Stop() / mdnsServer.Stop() sont déjà
appelés), la pièce revient à un état neutre éclairé.
⚠️ Ne jamais laisser la salle dans le noir parce que le serveur s'est arrêté pendant un
ENTRACTE — sendLEDSetAllEntracteOff (main.go:2819) éteint tout. C'est le défaut le plus
visible et le plus embarrassant que cette fonctionnalité puisse produire, et il ne se manifeste
qu'en conditions réelles.
- Conduite manuelle depuis
/anim : l'animateur reprend la main sur l'éclairage sans passer
par un événement de jeu (noir, plein feu, flash d'applaudissement). Composant Anim* dédié dans
AnimConductPanel.jsx, sur le modèle de AnimMotionActions / AnimCreditControl. Action
entrante anim uniquement — type de client déjà autorisé, aucun élargissement de
internal/server/inbound_allowlist.go.
- Priorité entre conduite manuelle et scènes automatiques : une commande manuelle tient-elle
jusqu'à la prochaine transition, ou est-elle écrasée par le premier événement suivant ? À
trancher et à écrire dans le contrat. Un choix implicite ici produit un comportement que
personne ne saura expliquer en pleine soirée.
- Cycle de vie du module calqué sur
AckManager, le patron le plus propre du serveur :
construction dans setup(), Start(ctx) en goroutine dans start(), arrêt par cancelCtx()
dans stop() (main.go:380, 949, 992). Pas le patron mDNS/DNS (« best-effort, échec
silencieux, aucune garde de config ») : celui-ci n'a pas d'état à restituer, l'éclairage si.
- Documentation :
docs/ADMIN_GUIDE.md (parcours d'association du pont, à destination de
l'utilisateur final), docs/SERVER_PARAMETERS.md, renvoi depuis docs/LED_SET_PROTOCOL.md,
CHANGELOG.md.
- Procédure de test manuelle dans
tests/procedures/ et maquette dans docs/mockups/ —
produites au moment du plan d'implémentation.
Hors portée
Toute extension renvoyée au milestone v10.1 (éditeur de scènes, couleurs par équipe, ciblage
ampoule par ampoule, synchronisation sur le minuteur).
Critère de fait
- Une partie complète se joue avec l'éclairage actif, du démarrage à l'extinction du serveur,
sans jamais laisser la pièce éteinte à un moment où quelqu'un doit voir quelque chose.
- L'animateur reprend la main et la rend ; le comportement à la transition suivante est celui
écrit dans le contrat.
- Le serveur démarre et s'arrête proprement (
/shutdown) avec et sans ampoules joignables.
- Aucune régression sur les 6 types de question existants (SPEEDY, QCM, MEMORY, MEMOTION,
ARDOISE, RAFALE) ni sur le comportement LED des buzzers.
Dépendances
Les quatre issues précédentes du milestone — événements normalisés (#205), pilote Hue Bridge (#206),
configuration (#207) et éclairage différencié par équipe (#213) — toutes obligatoires.
Ajustement de périmètre (2026-09-02) — l'équipe fait partie du bout-en-bout
L'éclairage différencié par équipe est remonté dans le cœur (#213). La démonstration
bout-en-bout de cette issue doit donc l'inclure, et pas seulement un éclairage uniforme :
- une partie complète se joue avec les ampoules affectées aux équipes, et l'équipe qui buzze
est identifiable à la couleur de la salle ;
- la restitution d'état en fin de partie et à l'arrêt du serveur remet toutes les ampoules
en éclairage neutre, y compris celles affectées à une équipe — c'est le cas qui échappe le plus
facilement, puisqu'il n'y a pas de « pièce » unique à éteindre mais N ampoules à parcourir ;
- la conduite manuelle depuis
/anim (noir, plein feu, flash) s'applique à toutes les
ampoules, affectations comprises, et la règle de priorité entre conduite manuelle et scènes
automatiques vaut aussi pour les ampoules d'équipe.
Re-planification du 2026-09-03
La voie BLE est abandonnée (spike #204) au profit du pont Hue en REST local
(contracts/hue-bridge.md). Deux conséquences pour cette issue :
- La restitution d'état doit parcourir les ampoules du pont — c'est le même impératif
qu'avant : ne jamais laisser la salle dans le noir parce que le serveur s'est arrêté pendant un
ENTRACTE (sendLEDSetAllEntracteOff, cmd/server/main.go:2819).
- La documentation utilisateur décrit désormais l'association du pont par appui sur son bouton,
pas un appairage Bluetooth par système d'exploitation.
Contexte
Cinquième et dernière issue du milestone v10.0.0 — Éclairage ambiance. Assemble le vocabulaire
d'événements, le pilote Hue Bridge et la configuration en une fonctionnalité réellement utilisable en
soirée, et traite les bouts qui n'appartiennent proprement à aucune des trois.
Portée
(
(*App).stop(),main.go:992-1005, oùdnsServer.Stop()/mdnsServer.Stop()sont déjàappelés), la pièce revient à un état neutre éclairé.
ENTRACTE —
sendLEDSetAllEntracteOff(main.go:2819) éteint tout. C'est le défaut le plusvisible et le plus embarrassant que cette fonctionnalité puisse produire, et il ne se manifeste
qu'en conditions réelles.
/anim: l'animateur reprend la main sur l'éclairage sans passerpar un événement de jeu (noir, plein feu, flash d'applaudissement). Composant
Anim*dédié dansAnimConductPanel.jsx, sur le modèle deAnimMotionActions/AnimCreditControl. Actionentrante
animuniquement — type de client déjà autorisé, aucun élargissement deinternal/server/inbound_allowlist.go.jusqu'à la prochaine transition, ou est-elle écrasée par le premier événement suivant ? À
trancher et à écrire dans le contrat. Un choix implicite ici produit un comportement que
personne ne saura expliquer en pleine soirée.
AckManager, le patron le plus propre du serveur :construction dans
setup(),Start(ctx)en goroutine dansstart(), arrêt parcancelCtx()dans
stop()(main.go:380,949,992). Pas le patron mDNS/DNS (« best-effort, échecsilencieux, aucune garde de config ») : celui-ci n'a pas d'état à restituer, l'éclairage si.
docs/ADMIN_GUIDE.md(parcours d'association du pont, à destination del'utilisateur final),
docs/SERVER_PARAMETERS.md, renvoi depuisdocs/LED_SET_PROTOCOL.md,CHANGELOG.md.tests/procedures/et maquette dansdocs/mockups/—produites au moment du plan d'implémentation.
Hors portée
Toute extension renvoyée au milestone v10.1 (éditeur de scènes, couleurs par équipe, ciblage
ampoule par ampoule, synchronisation sur le minuteur).
Critère de fait
sans jamais laisser la pièce éteinte à un moment où quelqu'un doit voir quelque chose.
écrit dans le contrat.
/shutdown) avec et sans ampoules joignables.ARDOISE, RAFALE) ni sur le comportement LED des buzzers.
Dépendances
Les quatre issues précédentes du milestone — événements normalisés (#205), pilote Hue Bridge (#206),
configuration (#207) et éclairage différencié par équipe (#213) — toutes obligatoires.
Ajustement de périmètre (2026-09-02) — l'équipe fait partie du bout-en-bout
L'éclairage différencié par équipe est remonté dans le cœur (#213). La démonstration
bout-en-bout de cette issue doit donc l'inclure, et pas seulement un éclairage uniforme :
est identifiable à la couleur de la salle ;
en éclairage neutre, y compris celles affectées à une équipe — c'est le cas qui échappe le plus
facilement, puisqu'il n'y a pas de « pièce » unique à éteindre mais N ampoules à parcourir ;
/anim(noir, plein feu, flash) s'applique à toutes lesampoules, affectations comprises, et la règle de priorité entre conduite manuelle et scènes
automatiques vaut aussi pour les ampoules d'équipe.
Re-planification du 2026-09-03
La voie BLE est abandonnée (spike #204) au profit du pont Hue en REST local
(
contracts/hue-bridge.md). Deux conséquences pour cette issue :qu'avant : ne jamais laisser la salle dans le noir parce que le serveur s'est arrêté pendant un
ENTRACTE (
sendLEDSetAllEntracteOff,cmd/server/main.go:2819).pas un appairage Bluetooth par système d'exploitation.