# Checkpoint 6C — inspecter une rencontre

22 septembre 2026. Reprise de `88ecd98`. **Lot 6 terminé.**

## L'onglet « Phases » du bac à sable

Il répond à une seule question : *pourquoi cette phase n'arrive pas ?*

Il ne **simule rien**. Tout ce qu'il affiche vient de `encounter_diagnostic()`,
que la créature vivante calcule à la demande. Pas de second moteur aux règles
approximativement ressemblantes — c'est l'erreur que le plan met en garde de
commettre, et la raison pour laquelle l'aperçu JS n'a pas été refait ici.

Ce qu'on y lit :

- la phase **jouée** et depuis combien de temps, la phase **demandée** si elle
  diffère, et **pourquoi** le changement attend ;
- la protection effective (imprenable, ininterruptible, multiplicateur) ;
- chaque ligne dans son **ordre de priorité**, avec sa raison en clair —
  éteinte, condition non remplie, s'arme, dans un trou, terminée, masquée par
  au-dessus, tient sa dernière phase, joue — son horloge locale, son tour de
  boucle et la phase qu'elle propose.

## Inspecter n'est pas jouer

La distinction que le plan exige est explicite dans l'interface.

**Tenir une phase** l'installe et suspend l'*application*. Les horloges
continuent, les lignes continuent de proposer, le diagnostic reste vivant : on
regarde un état fixe pendant que la machine tourne. Un bouton
« Rendre la main à l'orchestration » revient au fonctionnement normal, et
l'onglet affiche `TENUE` en rouge tant que c'est le cas — sans quoi l'auteur
verrait une ligne gagnante que rien n'applique et croirait son orchestration
cassée, alors que c'est lui qui l'a mise en pause.

`encounter_forced` reste **inerte en jeu** : seul le bac à sable l'écrit.

## Franchir un seuil sans se battre

Des boutons de ratio (100 %, 75 %, 50 %, 25 %, 10 %) écrivent la vie
**directement**. Un vrai coup déclencherait l'aggro, le recul et l'interruption,
et on ne saurait plus ce qui a fait bouger la phase.

« Rejouer la rencontre » remet curseurs, armements et phase à zéro sans toucher
aux PV.

## Le piège du rechargement

L'auteur efface une phase dans le gestionnaire et publie pendant son essai. Une
phase tenue qui survivrait figerait la créature sur un état disparu. `setup()`
remet donc `encounter_forced` et le signal de rupture à zéro en même temps que
le reste de la rencontre.

Et la console ne garde **jamais** la référence d'une créature : elle retient un
identifiant de nœud et revient à la liste si la bête meurt.

## La console n'était couverte par rien

Ni parse, ni exécution. Une faute de frappe dans un de ses onglets ne se voyait
qu'en ouvrant le bac à sable en jeu — donc jamais par celui qui venait de
l'écrire. `scripts/core/sandbox_console_check.gd` monte la console pour de vrai,
sans donjon, et conduit l'onglet : il presse les boutons et vérifie que ce
qu'ils déclenchent arrive.

## Une précision sur le checkpoint 6A

`tools/audio_wiring_audit.py` existait déjà et rapporte **0 muet**. Il ne
contredit pas mon test : il lit le **maître**, donc il demande « un son que
l'auteur a réellement configuré est-il émis ? ». Mon test lit le **contrat** et
demande « un son qu'on lui propose serait-il émis s'il le configurait ? ».

Aucun des 23 événements sans émetteur ne porte de clip aujourd'hui : **rien ne se
tait en jeu**. Le risque est le jour où l'auteur en remplira un. J'aurais dû
chercher l'audit existant avant d'écrire le mien ; les deux se justifient, mais
le second aurait été plus court. Le checkpoint 6A porte la correction.

## Validation

| Contrôle | Résultat |
| --- | --- |
| `--area gameplay` | `encounter`, `sandbox_console`, `explosion`, `targeting` verts |
| `--area visuals` | vert |
| `--area audio` | `audio` et `audio_wiring` verts |
| `--area manager` | 120 contrôles, seuls les cinq échecs documentés |
| Smoke | 55 erreurs nommées, la ligne de base habituelle |

Rouge/vert fait sur la garde neuve : horloges arrêtées pendant une phase tenue,
et phase tenue survivant à une relecture de fiche.

## Ce qui reste : lot 7

- Situations de référence — boss N1 à trois phases, N2 avec sa phase ultime,
  élite simple — dans une **fixture explicite**, jamais en remplaçant
  silencieusement des boss publiés.
- Documentation d'auteur : le guide de bout en bout, de la fiche au bac à sable.
- Validation globale finale et relève.

Ouvert, non fait, à décider par l'auteur : écrire les 23 émetteurs sonores
manquants (dont `enemy_projectile_fire`, alors que le héros tire avec un son).
