La boîte noire
Tout ce qui touche à une crise passe par un journal en ajout seul. Ce n'est pas une couche d'audit posée à côté de l'application : c'est le seul chemin d'écriture.
Ce qui rend le journal inaltérable
La contrainte n'est pas dans le code applicatif — elle serait alors une discipline, et une discipline se contourne. Elle est portée par la base de données, par des déclencheurs qui refusent toute modification et toute suppression sur la table des événements.
-- Un déclencheur s'applique aussi au propriétaire de la base, contrairement
-- à un simple retrait de droits, qu'un superutilisateur peut se redonner.
create trigger journal_pas_de_modification
before update or delete or truncate on evenement
execute function journal_refuser_mutation();
Chaque événement porte l'empreinte SHA-256 de son contenu et de l'empreinte du précédent. Retirer, modifier ou intercaler un événement casse la chaîne à partir de ce point, et cela se voit.
| L'événement porte | Pourquoi |
|---|---|
| Son auteur, sa session | Qui a fait le geste, depuis quel appareil |
| Sa cellule | Décisionnelle ou opérationnelle |
| Son heure d'inscription | L'heure du serveur, celle qui ordonne |
| Son heure de saisie | Celle déclarée par le client, conservée mais jamais ordonnante |
| Son origine | Humaine, automatique, ou injectée par un outil d'exercice |
| Son empreinte, et la précédente | Le chaînage |
Rembobiner
Le rejeu ne relit pas une liste d'entrées : il reconstruit l'état complet de la crise à un instant donné. Le curseur de rembobinage passe l'interface en lecture seule et affiche la crise telle qu'elle était — décisions prises, actions ouvertes, applications constatées à l'arrêt, échéances restantes.
Sur une crise longue, rejouer un million d'événements à chaque déplacement du curseur serait inutilisable : des instantanés de projection sont figés périodiquement, et le rejeu repart du plus proche.
Ce qui entre au journal, et ce qui n'y entre pas
C'est une frontière de produit, énoncée plutôt que subie.
| Entre au journal | N'y entre pas |
|---|---|
| Messages de salon, réactions, épingles | Messages directs entre deux personnes |
| Décisions, arbitrages, actions | Frappes de tableau blanc en direct |
| Points de situation | Indicateurs de saisie, présence |
| Références de documents et leurs empreintes | Les octets des documents |
| Constats de continuité, informations transmises | Le flux de veille externe collecté |
| Les échecs d'authentification |
Deux raisons, toujours les mêmes. Le volume : un journal qu'on ne peut pas purger et que n'importe qui peut inonder est une poignée offerte. Les tiers : verser d'office les écrits de gens qui ne savent pas que nous existons serait une collecte permanente déguisée en trace de crise.
Un journal en ajout seul ne se purge pas. Une donnée qui y entre y reste pour la durée de conservation de la crise. C'est la contrepartie de la valeur probante, et il faut la connaître avant de mettre en service.