← Journal technique
Ferry·auth & sécurité·2026-09-08

Un trou dans le journal d'audit par omission, pas par bug

Pairing, roster import, delivery and burn-open wrote no audit rows at all, because the code to write them was never added and no test asserted they should exist.

Le filet avait un trou

Le test, le journal d'audit, le scanner, la CI — couvrant moins que je ne le supposais.

ferry activity après un cycle complet pairing → envoi → livraison → burn-open ne montrait que item.queued et item.outbox_expired. Pairing, import de roster, livraison et open/burn — les deux événements les plus sensibles pour la sécurité de tout le système — n'écrivaient aucune ligne, parce que personne n'avait écrit le code pour le faire. Il n'y avait aucun test en échec parce qu'il n'y avait aucun test affirmant qu'ils devaient exister.

Corrigé en faisant écrire à store_adapter la ligne d'audit dans le même appel de store qui effectue le changement, suivant le même principe d'échec bruyant que la ligne existante avait déjà.

Une exception faite délibérément : l'écriture d'audit d'item.opened est best-effort. Un burn ne doit jamais être signalé comme échoué simplement parce que le journal d'audit a eu un hoquet d'E/S, donc cette écriture-là avertit le journal du démon au lieu de se propager.