Les vérifications
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
| Sorte | Ce qu'elle fait |
|---|---|
| observée | lit le trafic déjà reçu ; ne coûte rien, mais attend qu'il ait eu lieu |
| sonde | envoie une commande de lecture |
| à blanc | envoie une écriture avec dryRun: true |
| réelle | une 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érification | Sorte | Réussit quand |
|---|---|---|
auth | observée | une requête signée a été acceptée |
clock | observée | votre horloge est à moins de 60 secondes de la nôtre (le refus commence à 300) |
manifest | observée | le bonjour est valide, sa version de protocole acceptée, ses faits complets |
delivery.ping | sonde | ping 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.signature | sonde | une commande mal signée est refusée |
Catalogue
| Vérification | Sorte | Attrape |
|---|---|---|
catalog.walk | sonde | un parcours qui s'arrête ou se répète : il doit finir, sans doublon, à total |
catalog.stable | sonde | des identifiants instables : un second parcours rend les mêmes produits aux mêmes prix |
catalog.fetch | sonde | la forme de product.fetch, sur trois produits au hasard |
Stock
| Vérification | Sorte | Attrape |
|---|---|---|
stock.digest | sonde | un stock physique envoyé au lieu de ce qui peut se vendre : stock.digest doit s'accorder avec l'export |
stock.reading | observée | une lecture fausse ou absente : un stock.changed reçu, puis un stock.digest qui s'accorde |
stock.write.dry | à blanc | stock.set à blanc rend la quantité actuelle |
stock.write.compare | à blanc | l'écriture conditionnelle : une mauvaise expectedQuantity rend quantity_moved |
stock.write.unknown | à blanc | un produit inconnu rend not_found |
stock.write.replay | à blanc | le même commandId deux fois rend la même réponse, entière |
stock.restore.dry | à blanc | stock.restore à blanc |
availability.dry | à blanc | product.suspend et product.resume à blanc |
Ventes
| Vérification | Sorte | Attrape |
|---|---|---|
orders.sums | observée | des unités fausses, une remise oubliée : lignes + livraison − orderDiscountCents = totalCents |
orders.prices | observée | HT au lieu de TTC, euros au lieu de centimes : le prix d'une ligne est proche de celui du catalogue |
orders.instants | observée | une heure locale lue comme UTC : chaque commande a un fuseau et une date passée |
orders.refunds | observée | de l'argent jamais sorti du chiffre : une commande remboursée a des remboursements égaux à son total |
orders.cancelled | observée | une commande annulée et payée sans remboursement : un avertissement, le commerçant seul sait |
orders.history | sonde | order.export parcourt deux pages avant la date d'activation |
Clients
| Vérification | Sorte | Attrape |
|---|---|---|
customers.walk | sonde | le parcours finit, à total |
customers.contact | sonde | un sérialiseur cassé : 95 % des clients ont un e-mail ou un téléphone |
customers.consent | sonde | un consentement lu comme une valeur par défaut : newsletter est présent sur chaque client |
customers.create.dry | à blanc | customer.create à blanc |
customers.update.dry | à blanc | customer.update à blanc |
customers.email_taken | à blanc | une 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.