Les vérifications

Ce que Kult Lab contrôle avant qu'une partie puisse être activée, et ce que chaque vérification attrape.

Avant qu'une partie soit activée, Kult Lab vérifie que votre application fait ce qu'elle déclare. Une vérification qui échoue dit pourquoi au commerçant en une phrase, et à vous dans failingChecks (GET /api/v1/channel) avec son identifiant.

Une vérification n'enregistre rien : ses parcours sont validés puis oubliés, et ses écritures sont des essais à blanc.

Quatre sortes

SorteCe qu'elle fait
observéelit le trafic déjà reçu ; ne coûte rien, mais attend qu'il ait eu lieu
sondeenvoie une commande de lecture
à blancenvoie une écriture avec dryRun: true
réelleune vraie écriture sur un objet choisi par le commerçant, derrière une confirmation ; jamais automatique

Une vérification observée qui manque de trafic attend au lieu d'échouer, et dit ce qu'elle attend : « En attente d'une vente ou d'une modification de stock dans votre boutique. »

La connexion

Exigée pour toute partie.

VérificationSorteRéussit quand
authobservéeune requête signée a été acceptée
clockobservéevotre horloge est à moins de 60 secondes de la nôtre (le refus commence à 300)
manifestobservéele bonjour est valide, sa version de protocole acceptée, ses faits complets
delivery.pingsondeping répond en moins de cinq secondes avec une réponse signée, ou une relève a eu lieu dans les cinq dernières minutes
delivery.signaturesondeune commande mal signée est refusée

Catalogue

VérificationSorteAttrape
catalog.walksondeun parcours qui s'arrête ou se répète : il doit finir, sans doublon, à total
catalog.stablesondedes identifiants instables : un second parcours rend les mêmes produits aux mêmes prix
catalog.fetchsondela forme de product.fetch, sur trois produits au hasard

Stock

VérificationSorteAttrape
stock.digestsondeun stock physique envoyé au lieu de ce qui peut se vendre : stock.digest doit s'accorder avec l'export
stock.readingobservéeune lecture fausse ou absente : un stock.changed reçu, puis un stock.digest qui s'accorde
stock.write.dryà blancstock.set à blanc rend la quantité actuelle
stock.write.compareà blancl'écriture conditionnelle : une mauvaise expectedQuantity rend quantity_moved
stock.write.unknownà blancun produit inconnu rend not_found
stock.write.replayà blancle même commandId deux fois rend la même réponse, entière
stock.restore.dryà blancstock.restore à blanc
availability.dryà blancproduct.suspend et product.resume à blanc

Ventes

VérificationSorteAttrape
orders.sumsobservéedes unités fausses, une remise oubliée : lignes + livraison − orderDiscountCents = totalCents
orders.pricesobservéeHT au lieu de TTC, euros au lieu de centimes : le prix d'une ligne est proche de celui du catalogue
orders.instantsobservéeune heure locale lue comme UTC : chaque commande a un fuseau et une date passée
orders.refundsobservéede l'argent jamais sorti du chiffre : une commande remboursée a des remboursements égaux à son total
orders.cancelledobservéeune commande annulée et payée sans remboursement : un avertissement, le commerçant seul sait
orders.historysondeorder.export parcourt deux pages avant la date d'activation

Clients

VérificationSorteAttrape
customers.walksondele parcours finit, à total
customers.contactsondeun sérialiseur cassé : 95 % des clients ont un e-mail ou un téléphone
customers.consentsondeun consentement lu comme une valeur par défaut : newsletter est présent sur chaque client
customers.create.dryà blanccustomer.create à blanc
customers.update.dryà blanccustomer.update à blanc
customers.email_takenà blancune adresse déjà connue rend email_taken

Chaque nuit

Les vérifications par sonde des parties actives repassent chaque nuit. Un échec laisse la partie active et prévient le commerçant, avec la version de votre application.

Lancer une vérification

POST /api/v1/channel/verify
{ "hub": "stock" }

Sans hub, toutes les parties déclarées sont vérifiées. Six fois par heure au plus. Le résultat arrive dans failingChecks de GET /api/v1/channel une fois les vérifications passées.

Copyright © 2026