Vérifier sans nous faire confiance
Une garantie d'inaltérabilité qu'on ne peut contrôler qu'en exécutant le code de celui qui la revendique ne garantit rien. C'est pourquoi Kastell publie un vérificateur indépendant.
Le vérificateur
- 149 lignes, aucune dépendance, ne parle à aucun serveur.
- Publié sous CC0 1.0 — domaine public. Copiez-le, lisez-le, réécrivez-le.
node outils/verifier-journal.mjs journal-de-crise.json
Il vérifie : la séquence sans trou, la chaîne d'empreintes, et la concordance entre chaque événement et son empreinte. Il détecte un contenu modifié, une troncature de fin, un trou au milieu.
Le calcul, en dix lignes
Chaque événement porte l'empreinte SHA-256 de :
[empreinte précédente, ou l'octet 0x00 pour le premier]
++ utf8( crise_id | seq | type | occurred_at | acteur_id | cellule_id
| origine | charge_canonique )
charge_canonique est la forme exacte que PostgreSQL a hachée ; elle est
transportée telle quelle dans l'export, précisément pour que le contrôle n'ait à
réimplémenter aucune normalisation.
Ce fichier existe pour qu'un tiers — auditeur, assureur, partie adverse — contrôle un journal sans nous demander la permission. Le placer sous AGPL ferait dépendre la vérification de nos conditions.
La suite de vérification du produit
pnpm verif
Plus de six cents garanties, chacune rattachée à une exigence du cahier des
charges. Elle remet à zéro sa propre base (…_verif, créée au besoin) et ne
touche jamais celle de développement, et refuse de s'exécuter si
KASTELL_ENV=production.
Elle ne teste pas seulement que les choses marchent, mais que les mauvaises sont refusées : qu'un événement ne peut pas être modifié, qu'une clé d'API ne ressort ni de l'API ni du journal, qu'un envoi de masse sans confirmation du décompte est rejeté.
L'intégrité en service
La console root vérifie tous les journaux de l'instance à la demande, et rend le nombre de crises contrôlées, la durée, et les anomalies s'il y en a.