Une condition autorise un envoi dès lors que son statut n’est pas « refusé ». Que devient une entrée absente, en attente ou associée à une autre version du document ? Cet exercice examine une règle d’autorisation avant de s’intéresser à la vitesse d’exécution.
Cas pratique pédagogique. Documents, transactions et traces synthétiques. Les réponses présentées sont préparées pour l’exercice ; elles ne sont pas les résultats d’un test de modèle réel. Il s’agit d’un exercice en JavaScript avec des fixtures locales : il ne décrit pas le fonctionnement de Make, n8n ou Zapier.
// Règle fautive étudiée dans cet exercice JavaScript.
const weakAllows = input => input.approval_status !== 'refused';
// Contrôle pédagogique déterministe : ne remplace pas une autorisation serveur.
function allows(input, now) {
const expires = Date.parse(input.expires_at);
return input.approval_status === 'approved'
&& typeof input.operation_id === 'string'
&& input.operation_id.length > 0
&& typeof input.payload_hash === 'string'
&& input.payload_hash.length > 0
&& input.payload_hash === input.approved_payload_hash
&& input.document_version === input.approved_version
&& input.document_version === 'V4'
&& input.revoked === false
&& Number.isFinite(expires)
&& expires > now;
}
Dans cet exercice, les chaînes H-A et H-B servent seulement à tester une égalité. Ce ne sont pas des empreintes cryptographiques. Dans une application réelle, il faut calculer une empreinte sur une représentation canonique de la charge utile, vérifier l’identité et les droits de l’approbateur, empêcher l’altération des preuves et effectuer le contrôle au point d’exécution. Le contrôle dans le navigateur ne protège aucun service.
Base : operation_id=OP-001, payload_hash=H-A, approved_payload_hash=H-A, document_version=V4, approved_version=V4, revoked=false, expires_at=2026-10-14T00:00:00Z. Horloge de test : 2026-10-13T12:00:00Z.
| Fixture | Variation | Règle fautive | Règle corrigée |
|---|---|---|---|
| B01 | statut approved | autorisé | autorisé |
| B02 | statut refused | refusé | refusé |
| B03 | statut pending | autorisé | refusé |
| B04 | champ approval_status absent | autorisé | refusé |
| B05 | statut null | autorisé | refusé |
| B06 | statut chaîne vide | autorisé | refusé |
| B07 | statut booléen true | autorisé | refusé |
| B08 | approved, document V5 | autorisé | refusé |
| B09 | approved, payload H-B | autorisé | refusé |
| B10 | approved, expiré le 12 octobre | autorisé | refusé |
| B11 | approved, révoqué | autorisé | refusé |
| B12 | approved, expiration égale à l'horloge | autorisé | refusé |
| event_id | operation_id | attempt | event | recipient_object_id |
|---|---|---|---|---|
| E01 | OP-001 | 1 | request_received | vide |
| E02 | OP-001 | 1 | object_created | BON-001 |
| E03 | OP-001 | 1 | response_lost | vide |
| E04 | OP-001 | 2 | request_received | vide |
| E05 | OP-001 | 2 | existing_object_returned | BON-001 |
Règle fautive. Elle ne refuse qu’une seule valeur : « refused ». Un statut en attente, absent, nul, vide ou booléen est différent de « refused », donc autorisé ; il en va de même d’une approbation qui porte sur une autre version, une autre charge utile, ou qui est expirée ou révoquée. C’est le résultat logique de ce code précis, pas un comportement observé sur une plateforme.
Règle corrigée. Elle exige une approbation positive (« approved »), liée à l’opération, à la charge utile et à la version approuvées, non révoquée et non expirée. Le seul contrôle « statut === 'approved' » refuse déjà B03 à B07 ; les autres conditions refusent B08 à B12. Sur les douze fixtures, seule B01 est autorisée.
Journal. Deux tentatives et un objet créé (BON-001) dans ce journal synthétique. L’événement existing_object_returned ne suffit pas à démontrer la réception de sa réponse : le nombre de confirmations reçues reste indéterminé sans journal côté émetteur.
Remplacer E05 par object_created,BON-002 (fichier journal-B-doublon.csv) montre un doublon dans cette autre fixture. La reprise n’implique donc pas automatiquement un doublon ; elle crée un risque qui dépend du destinataire et de son mécanisme d’unicité.
Choisissez une fixture : le simulateur affiche la branche prise par chaque règle. Il ne déclenche aucun courriel, paiement ou appel externe.
Une autorisation doit être positive et liée à l’action exacte. Une tentative n’est pas une preuve d’effet métier. Avant déploiement, vérifier le contrôle serveur, les changements après approbation, les reprises et les appels concurrents. Les fixtures présentes ne démontrent ni la sécurité d’une plateforme ni une garantie universelle d’exécution unique.
Sans formulaire. Licence CC BY 4.0. Empreintes dans SHA256SUMS.txt ; elles authentifient les fichiers distribués, pas une exécution réelle.
Toutes les pièces, le README et la licence
Trois décisions possibles : informations insuffisantes ; test complémentaire nécessaire ; critères de l’exercice satisfaits. La troisième ne signifie jamais « système prêt pour toute production ».
Vous souhaitez aborder ces questions avec vos dirigeants ou vos équipes ? Présentez le public, le format et l’objectif de votre événement.
Préparer un événement sur l’IA