L'audit du graphe

La règle

broker.audit(transits) s'appelle en fin de composition, une fois tout monté. Il ne fait que lire et rend la liste des anomalies. transits est la liste des CHANNEL des canaux montés.

Pourquoi

Sans abonné à l'exécution est légitime ; sans abonné à la composition ne l'est presque jamais. Sans transits, tout message qui traverse un canal ressemble à un orphelin, puisque son seul abonné local est le canal.

Dans le chat

Côté client, connection_event est publié par le canal mais aucun écran ne l'écoute : orphelin attendu, filtré.

Contre-exemple : oublier les transits

for (const a of broker.audit()) console.warn(a.message);
ERROR (audit): message_demande is emitted by ecran_fil, has no local subscriber and crosses no channel ERROR (audit): acces_reponse is received by ecran_connexion, ecran_fil, has no local emitter and crosses no channel — the subscriber looks alive

Les codes

codegravitéanomalie
orphan_emiterrorémis localement, aucun abonné local, ne traverse aucun canal
dead_receiveerrorreçu localement, aucun émetteur local, ne traverse aucun canal. Plus grave : l'abonné a l'air vivant
unused_contracterrorau catalogue, ni émis ni reçu par personne
version_gapwarning ou errorémis en version X, attendu en version Y ≠ X ; warning si les upcasters du catalogue pontent, error sinon (downcast, ou upcastFrom manquant)
revision_gapwarningun émetteur produit encore une révision antérieure à la courante ; le broker complète, mais code et catalogue ont dérivé

Chaque anomalie est { severity, code, name, message, …contexte }, dans l'ordre du catalogue.

Ce que l'audit ne voit pas