Cornac
by TTC
Documentation Le manuel Cornac Studio

Manuel de référence

Le manuel
Cornac Studio

Ce que l'outil fait, ce qu'il sait affirmer, et ce qu'il permet de surveiller en continu sur les caisses Simphony du parc.

Écrit à partir du code tel qu'il est — pas de la feuille de route. Chaque limite annoncée ici est une limite constatée.

17écrans en service
3API raccordées
271tests automatisés au vert
42sites cartographiés
1écran qui écrit — les 16 autres lisent

Application web · la station d'automatisation, sans accès sortant

01

Pourquoi l'outil existe

Chaque campagne arrive en brief Excel daté et versionné. Quelqu'un le saisit ensuite à la main dans EMC : les produits, les PLU, les prix, les compositions — sur 26 restaurants et 9 kits. Cette saisie rate des choses, et on s'en aperçoit tard, en test kiosque, quand corriger coûte le plus cher.

« L'item du menu 101000004 n'est présent ni sur le bridge ni dans les fichiers POS » (LTO Summer). « Souci avec le kit ciné d'un restaurant : la taxe soda n'est pas présente. » Ces deux phrases sont le problème, mot pour mot.

Studio déplace la détection au moment de la saisie. Il remplace la saisie manuelle, relit le résultat en secondes, et publie ce qui doit être testé en aval. Depuis, il a débordé de son périmètre d'origine : c'est devenu la console de lecture du parc — la seule vue qui compare 27 restaurants entre eux, confronte la caisse aux classeurs métier, et suit une commande au-delà de la fenêtre où l'API la montre.

Ce que Studio instrumente du programme

Les principes d'architecture ont été posés le 30 juillet : EMC est la source maître, maximiser les API, et « ne pas passer 4 h à saisir 1000 articles le matin à 6 h pour une campagne qui commence à 10 h ».

Le premier principe est le fondement de l'Auditor. Le troisième est, mot pour mot, ce que le Feeder résout. Studio n'est pas un outil à côté du programme : il en instrumente deux principes.

02

Le socle

Quatre mécanismes portent tout le reste. Les comprendre évite les trois quarts des questions sur le fonctionnement des écrans.

Les profils clients

Sur quel restaurant, et sur quelle API, cet écran travaille-t-il ?

Un profil désigne une organisation, un restaurant (locRef) et un canal de vente (rvcRef), avec les identifiants des deux API et le mode d'exécution. Tous les écrans travaillent sur le profil actif — le changer change ce qu'on regarde, jamais ce que l'outil sait faire.

Sélecteur permanentSecrets jamais renvoyés au navigateur

Deux API Oracle, à ne jamais confondre

STS Gen 2 lit. CCAPI écrit.

STS Gen 2 est l'API transactionnelle : elle décrit les menus et les chèques, en GET pour l'essentiel. CCAPI est l'API de configuration : tout y est en POST, y compris les lectures. Les deux s'authentifient contre le même serveur d'identité, chacune avec son compte — d'où un flux OIDC partagé, écrit une seule fois.

Le piège vérifié en production : selon le service, les identifiants ne vont pas au même endroit. En en-têtes pour /checks, en query string pour /discounts, /menus, /tenders, /taxes, /employees — qui rejettent les en-têtes en 400. Studio pose les deux formes quand c'est possible.
STS Gen 2 · 33 endpointsCCAPI · OIDC PKCE

Le mode simulé

Peut-on préparer une campagne et former quelqu'un sans Internet ?

Studio embarque une Simphony en mémoire — restaurants, kits, articles, prix, groupes d'effectivité. Le cycle complet s'y joue sans aucun accès Oracle : import Excel, simulation, écriture, audit, Ledger, annulation. C'est ce qui rend l'outil utilisable sur une station sans accès sortant, et démontrable n'importe où.

Une réserve, et elle compte : le simulé ne porte pas les extensions applicatives — dont Como. Toute vérification qui les concerne y est sans valeur.
Aucun accès Oracle requis

Le verrou d'écriture

Qu'est-ce qui empêche un clic malheureux d'atteindre la caisse ?

En réel, la lecture est libre et toute écriture exige mot de passe + code TOTP. Le verrou ne vit pas dans l'interface — il vit au point de passage des appels, là où on ne peut pas le contourner. Session de 10 minutes, qui ne survit pas à un redémarrage. Un refus rend un 423, pas un 500 : on distingue « c'est verrouillé » de « c'est cassé ».

Le défaut est sûr : tant que personne n'a lancé la configuration du verrou, aucune écriture n'est possible. L'outil s'installe donc en lecture seule.

Mot de passe + TOTPRefus = HTTP 423
03

Alimenter la caisse

Un seul écran de Studio écrit dans Simphony. C'est aussi celui qui a demandé le plus de précautions, parce qu'une écriture ratée se paie directement en caisse.

Brief Exceldaté, versionné, tel que le métier l'envoie
Feederécrit dans Simphony via CCAPI
Auditorrelit la base, compare au brief
the Ledgerle JSON qui sert de vérité aux tests aval
Driver · Deliverect · Comoles consommateurs

Feeder

Écrire la campagne dans la caisse, sans perdre la possibilité de revenir en arrière.

Le Feeder lit le classeur, résout le périmètre, et écrit dans l'ordre imposé par les dépendances Simphony : Master → Definition → Prix. Chaque opération est journalisée au fil de l'eau, et le run produit un manifeste.

Le rollback se prépare avant d'écrire, et c'est la décision de conception qui porte tout le reste. Annuler une création ne demande que les identifiants rendus ; annuler une modification exige l'état d'avant, qu'on ne peut plus reconstituer après coup. D'où un snapshot systématique en tête de feed, avant la moindre écriture.

Deux niveaux d'annulation. La désactivation, par défaut, ferme simplement la fenêtre d'effectivité : la campagne cesse d'être active, rien n'est détruit. Le rollback, en escalade, rejoue les inverses du manifeste dans l'ordre strictement inverse — et refuse d'écraser une modification faite en dehors de l'outil : il s'arrête et demande confirmation.

Le CCAPI n'a pas de transactions. Ce n'est pas un undo atomique mais une séquence compensatoire — elle est donc rejouable sans dommage.
Écriture · CCAPIVerrou requisJournal append-only

the Ledger

Qu'est-ce que les tests aval doivent considérer comme vrai ?

Le Ledger est le JSON produit par l'Auditor : une projection de la campagne par kit et par restaurant. C'est lui que Cornac Driver consomme pour savoir quoi vérifier sur la borne, et il est destiné à l'être par les chantiers Deliverect et ComoSense.

Il est hybride, et il le dit. Chaque entrée porte sa source : simphony pour ce qui a été relu en base (PLU, prix, compositions, taxes) — fiable par construction ; brief pour ce qui vient de la saisie (catégories, ordre, layout, visuels) — que Simphony ignore. Un écart sur une valeur relue est un défaut de configuration ; un écart sur une attente saisie peut aussi être une erreur de saisie. Les deux ne se diagnostiquent pas pareil.

Sortie · JSONConsommé par Cornac Driver

Ce que le Feeder n'écrit pas

Un brief se répartit sur deux systèmes. Le contrôle est complet des deux côtés ; l'écriture ne l'est que d'un seul, faute d'API Acrelec.

  • PLU, prix, compositions, désactivations, taxes → écrits par le Feeder, vérifiés par l'Auditor.
  • Catégories de la home, layout, visuels de tuiles → écrits par Acrelec, vérifiés par Cornac Driver sur la borne.
04

Contrôler la configuration

Neuf écrans, tous en lecture seule, qui posent chacun une question différente sur le même parc. Ils ne se recouvrent pas : la carte tient-elle debout toute seule, les restaurants se ressemblent-ils, la caisse correspond-elle à ce que le métier a écrit, et les produits partent-ils sur les bons écrans.

Le principe qui vaut pour tous

Ces écrans disent ce qui diffère, jamais ce qui est faux. Une remise locale a parfaitement le droit d'exister — une remise « festival » dans une ville qui en accueille un renvoie sans doute à celui-ci. Seule l'enseigne peut trancher entre l'intention et l'oubli. Appeler « anomalie » ce qui n'est qu'un écart ferait perdre la confiance dans l'outil au premier faux positif.

La carte face à elle-même

Des défauts qu'aucune comparaison entre restaurants ne peut voir, puisqu'ils sont identiques partout.

Intégrité de la carte

La carte tient-elle debout toute seule ?

Quatre constats, chacun avec sa conséquence pour l'exploitation. Une formule pointant vers un article absent et une règle de condiment sans groupe sont critiques : la formule ne peut pas être composée, le choix ne peut pas s'afficher. Un article sans famille valide et un article mort — ni affiché, ni vendable, ni appelé par une formule — relèvent de l'attention.

Ces défauts viennent de la configuration entreprise et survivent aux campagnes : le reliquat d'une opération retirée dont on a effacé le produit sans effacer ce qui pointait dessus. Le regroupement se fait par constat, pas par restaurant — un défaut présent dans 29 restaurants est une ligne, pas vingt-neuf.

Lecture seuleSTS Gen 2

Routage cuisine

Quelle famille de produits part sur quel écran de production ?

Une commande finit sur des écrans — Assembly, Expo, KDS — et c'est cette étape qui décide si le client est servi. Rien ne la vérifiait. Simphony la décrit pourtant : la configuration d'une location porte LP_OrderDeviceMapping, un XML qui associe chaque order device à des familles. Croisé avec la carte, on sait pour chaque article quel écran est censé l'annoncer.

La distinction qui porte tout le sens : une formule ne part jamais en cuisine — ce sont ses composants qui partent. Confondre les deux ferait ressortir 412 articles sur 762 comme « non routés » au premier restaurant venu, et un écran qui crie au loup une fois sur deux n'est plus lu.
Lecture seuleSTS Gen 2 · configuration

Les restaurants les uns face aux autres

Une campagne est conçue une fois et déployée partout — mais elle s'appuie sur des remises saisies restaurant par restaurant.

Cohérence du parc

Qu'est-ce qui diverge d'un restaurant à l'autre ?

Huit axes comparables, rangés en deux familles parce qu'on ne les regarde pas au même moment. Les promotions se vérifient avant une campagne — remises, moyens de paiement, frais de service. La carte se vérifie en continu — présence et prix des 756 articles, placement à l'écran, classes de taxe, articles indisponibles (le « 86 »).

La référence est la configuration la plus répandue du parc : un repère commode, pas une autorité — et c'est dit tel quel à l'écran. Trois gravités, et le rouge repose sur un fait, pas sur une ressemblance de mots : le montant diffère, ou l'élément manque là où il est presque partout.

Lecture seuleSTS Gen 2 · un appel par restaurant

Aligner un restaurant

Ce restaurant-ci doit ressembler à celui-là — qu'est-ce qui manque, et qui peut le combler ?

La question qu'on se pose à l'ouverture d'un restaurant, ou quand un site a dérivé. Là où « Cohérence du parc » compare tout le monde à tout le monde, cet écran désigne un modèle et liste l'écart.

Chaque écart dit qui peut le combler, et c'est tout l'intérêt du document produit : api quand le CCAPI sait l'écrire (carte, placement, taxes — le domaine du Feeder), emc quand aucun chemin d'écriture n'existe (remises, moyens de paiement, frais de service), exploitation quand ce n'est pas de la configuration — une indisponibilité se pose et se lève au poste de caisse, la recopier n'aurait aucun sens. Sans cette colonne on rend une liste ; avec elle, on rend un plan de travail.

Lecture seuleAngles morts listés, pas tus

Empreintes de configuration

Quels restaurants sont montés à l'identique — et qu'est-ce que celui-là a que les autres n'ont pas ?

Les autres écrans comparent la carte. Celui-ci compare le matériel : caisses, bornes, TPE, imprimantes, écrans de production, affichages client.

La source n'est pas l'API. STS Gen 2 ne connaît aucun équipement — /workstations, /printers et /orderDevices répondent 404, vérifié le 18 août. La seule description du parc matériel est le plan d'adressage, un classeur tenu à la main. On le prend donc pour ce qu'il est : ce que le parc est censé être. Le plan déclare, l'API constate, et les deux ne se recoupent que sur les canaux de vente.
Lecture seulePlan d'adressage

La caisse face aux documents du métier

Deux classeurs pilotent la carte de l'enseigne, et personne ne les avait posés en face de Simphony.

Conformité au référentiel carte

La caisse sert-elle ce que le métier a écrit ?

Deux classeurs, deux rôles. « Référentiel carte » porte l'état cible permanent : 498 articles, leur statut, leurs codes Oracle, quatre niveaux de prix, les allergènes. « Items à créer » porte le plan de charge par vague : une feuille par mois, une colonne par offre.

Les fichiers ne sont pas reconnus au nom — « Référentiel carte (3).xlsx » et « Copie de Référentiel carte.xlsx » désignent la même chose, et exiger un nom exact ferait échouer le premier téléchargement venu. Ils sont reconnus à leur structure : pardonner la forme, être intraitable sur le fond.

Le référentiel peut avoir du retard sur une hausse de prix — c'est alors lui qu'il faut corriger, pas la caisse. Et trois choses ne se vérifient pas ici : les allergènes (le référentiel en porte pour 271 articles actifs, la caisse pour aucun), les visuels, et la place d'un article dans un écran. Ça se teste sur la borne, par Cornac Driver.
Lecture seuleExcel + STS Gen 2

Auditor

La base correspond-elle au brief qu'on vient de pousser ?

L'Auditor relit Simphony et compare au modèle canonique de la campagne, en rendant des écarts typés plutôt qu'une différence brute. C'est lui qui produit le Ledger. Excel et CCAPI n'étant que des adaptateurs autour d'un objet unique, ce qu'on pousse, ce qu'on vérifie et ce qu'on teste sont garantis être la même chose.

Lecture seuleProduit the Ledger

Conformité campagne

Les règles écrites pour Cornac Driver sont-elles effectives en caisse ?

Confronte les règles de campagne — écrites à la main dans les fichiers rules/*.md du dépôt Driver — à ce que l'API sert réellement. Couvre ce qui est vérifiable par la donnée : retraits, ajouts, prix, plus une sentinelle prix systématique. Les ordres, grilles, parcours et visuels restent à Driver, et sont listés tels quels dans le résultat plutôt que passés sous silence.

Sur la station Windows, cet écran peut être vide si le dépôt Driver n'y est pas cloné au bon endroit : les règles sont cherchées par essais successifs de chemins. Ce n'est pas une panne.
Lecture seuleRègles Driver + STS Gen 2

Sites & rapprochement du plan d'adressage

Les deux registres qui décrivent le parc parlent-ils du même parc ?

La page Sites porte les 42 sites du plan d'adressage et l'environnement de recette, avec leurs machines et leurs IP — 1 149 équipements classés par rôle. C'est irréductiblement du hors-API : Oracle ne porte ni IP, ni caisses, ni écrans cuisine.

Le rapprochement confronte ce plan aux locations telles que Simphony les connaît. Tant qu'on ne les compare pas, chacun paraît complet. Ce qu'il a révélé n'est pas anecdotique : trois restaurants portent un code différent d'un registre à l'autre — 077081 au plan, 177081 chez Simphony — et un nom qui n'a rien à voir, « Centre Commercial Nord » d'un côté, « CCNORD » de l'autre. Rien ne permettait de savoir qu'il s'agissait du même restaurant.

On ne rapproche jamais en silence : une correspondance exacte et une ressemblance sortent avec des niveaux distincts, et une déduction reste marquée comme telle. Attention aussi aux IP : elles sont locales au restaurant, le même plan d'adressage privé est répété partout — l'IP seule n'identifie pas une machine.
Lecture seulePlan d'adressage + STS Gen 2
05

Suivre une commande

Le cœur du sujet pour les tests de bout en bout : une commande est passée — que devient-elle ? Trois écrans y répondent, chacun à un moment différent du cycle.

Retrouver une commande

J'ai un numéro sur un ticket. Où est cette commande, dans quel état, et que contient-elle ?

Recherche par numéro court, par identifiant posé par la borne (Order ID dans les lignes d'information) ou par GUID. L'API n'exposant aucune recherche — GET /checks exige de savoir dans quel restaurant chercher, ce qui est précisément la question — Studio balaye les canaux de vente, en commençant par celui où la commande a le plus de chances d'être. Export PDF par restaurant.

Deux limites, et l'écran les affiche : GET /checks ne rend que les commandes ouvertes — une commande payée et clôturée n'y figure plus. Et les numéros se répètent d'un restaurant à l'autre : chercher « 3673 » sans préciser le restaurant peut rendre plusieurs commandes sans rapport. Studio les rend toutes plutôt que d'en élire une.
Lecture seuleExport PDF

Vérification de dispatch

Le scénario joué sur la borne a-t-il produit la bonne commande, et part-elle vers les bons écrans ?

Cornac Driver pilote la borne, capte le numéro de commande en fin de parcours, et s'arrête là. Cet appel est la suite : il retrouve la commande côté caisse, lit ce qu'elle porte réellement, et dit vers quels écrans de production elle doit partir.

Il rend un verdict, pas un tas de JSON : un booléen assertable, des écarts en phrases lisibles, et le détail pour qui veut creuser. Driver assert sur le booléen et recopie les écarts dans son rapport.

Pourquoi ici et pas dans Driver : le flux OIDC, le renouvellement de jeton et le placement des identifiants sont la partie coûteuse et fragile. Elle existe une fois, dans Studio. La réimplémenter en Go donnerait deux versions qui divergeraient au premier changement d'API, et mettrait des identifiants Oracle dans le paquet Driver.
Lecture seuleAppelé par Cornac Driver

Suivi de bout en bout

Où en est le run Driver, et qu'est-il arrivé côté caisse ?

Le run à gauche, la commande Simphony à droite — on lit dans l'ordre où les choses arrivent : la borne agit, Simphony enregistre. La colonne vertébrale est le run, pas la commande : c'est lui qu'on déclenche, les commandes en sont le produit.

Cet écran suppose que Studio tourne sur le contrôleur d'automatisation — le seul poste qui voit à la fois l'agent, sur le réseau de recette, et le cloud Oracle. Ailleurs, la colonne de gauche reste vide et le dit, plutôt que de laisser croire qu'il ne se passe rien.
Lecture seuleAgent Driver + STS Gen 2
06

Constituer l'historique

STS Gen 2 est une API transactionnelle : elle montre ce qui est ouvert maintenant, elle n'archive rien. Deux écrans en tirent la conséquence — si on veut de l'historique, il faut l'enregistrer soi-même, et chaque jour où personne n'enregistre est perdu définitivement.

Veille sur les commandes

Que devient une commande après l'encaissement, quand l'API cesse de la montrer ?

Passé l'encaissement, une commande devient introuvable : ni par son numéro, ni par l'Order ID de la borne. On perd donc exactement ce qui nous intéresse.

La clé est le checkRef : GET /checks/{checkRef} répond, lui, après clôture. C'est la seule prise durable sur une commande — mais il ne s'imprime nulle part et la borne ne le connaît pas. Le seul moyen de l'obtenir est de le lire pendant que la commande est encore ouverte. La veille relève donc périodiquement les commandes ouvertes, capte chaque checkRef à sa naissance, et continue de suivre chacune après sa disparition de la liste. On obtient la vie complète d'une commande — ouverture, envoi en cuisine, encaissement, clôture — là où on n'avait qu'un instantané.

Une seule veille à la fois, volontairement. Deux boucles produiraient des doublons et surtout multiplieraient les appels à une API dont on a mesuré qu'elle répond 503 User is not available quand on la presse trop.
Lecture seuleJournal lisible en direct

Enregistreur d'activité

Quand les commandes arrivent, heure par heure — pour pouvoir un jour les prévoir.

Prévoir la pression d'un restaurant heure par heure demande des mois d'historique horaire. Adoria n'en a pas : son champ de date est documenté « Sale's day », c'est un jour. Simphony a l'heure — chaque check porte son openTime — mais n'archive rien. L'historique horaire ne se retrouve pas, il se constitue. C'est la seule pièce du chantier prévision dont le coût augmente avec l'attente, d'où cet enregistreur, écrit avant le modèle qui s'en servira.

Ce n'est pas la veille : un appel par cible et par tour, une ligne par commande découverte, et rien de plus. Le reste du cycle de vie n'apprend rien sur la pression.

Il enregistre aussi le silence. Un journal qui ne note que les commandes est ambigu : une heure sans ligne peut vouloir dire « aucune commande » ou « l'enregistreur était arrêté », et un modèle entraîné là-dessus apprendra que les nuits de panne sont calmes. La présence d'écoute est donc journalisée, condensée à l'heure. Et le fuseau est nommé, jamais celui de la machine — il est écrit dans chaque ligne.
Lecture seuleJSON Lines, découpé par mois

API history & Workbench

Qu'a-t-on appelé, qu'a répondu l'API, et comment le rejouer ?

Le Workbench expose les 33 endpoints STS Gen 2 du catalogue — Checks, Configuration, Organization, Notifications, Employees — avec un formulaire généré pour chacun. L'API history journalise chaque appel : durée, statut, corps, avec rejeu à l'identique. Les en-têtes sensibles (Authorization, Cookie, X-Api-Key) y sont masqués.

Lecture seule33 endpoints

Adoria — stocks et disponibilité datée

Depuis quand cet article est-il indisponible, et y a-t-il du stock ?

Adoria est la troisième API du projet, et la première qui ne soit pas Oracle. Elle sait deux choses que Simphony ignore : ce qu'il y a physiquement en stock, et depuis quand un article est censé être hors vente.

C'est la seconde qui compte. Le /menus/items/unavailable de STS Gen 2 rend un ensemble booléen — ni date, ni motif, ni auteur — ce qui rend les 268 articles indisponibles d'un restaurant impossibles à trier entre « retiré il y a six mois » et « tombé ce midi ». Adoria rend des périodes datées. Croiser les deux, c'est dater le « 86 » sans ouvrir le DataStore du CAPS.

Le piège du 401 : le contrôle d'accès est en amont du routage. Un code site inexistant, une route inconnue et une clé invalide rendent tous le même 401. On ne peut donc pas valider un code site avant d'avoir une clé valide.
Lecture seuleAdoriaMode simulé disponible
07

Les tests

Le mot « test » recouvre trois choses différentes dans ce projet, et les confondre mène à des malentendus. Studio exécute des contrôles sur la configuration ; il alimente des tests joués ailleurs, sur la borne ; et il est lui-même couvert par une suite de tests logiciels.

1 · Ce que Studio sait affirmer

Chaque contrôle est reproductible, sans écriture, et rend un verdict daté.

ContrôleCe qu'il affirmeSourceVerdict rendu
Écart au briefChaque produit, prix, composition et taxe du brief existe en base tel qu'écritCCAPI + brief ExcelÉcarts typés
Conformité au référentielLa carte servie correspond au référentiel permanent et au plan de charge de la vague2 classeurs + STSDivergence article par article
Conformité campagneLes retraits, ajouts et prix d'une règle Driver sont effectifs en caisserules/*.md + STSConforme / non conforme / hors portée
Intégrité de la carteAucune formule ne pointe vers un article absent, aucune règle de condiment n'est orpheline, aucun article n'est mortSTSCritique / attention
Cohérence du parcSur 8 axes, ce restaurant est aligné sur la configuration la plus répandueSTS · 1 appel/restaurantAligné / libellé / divergent
Alignement dirigéCe qui sépare un restaurant d'un modèle désigné, et qui peut le comblerSTSÉcart + responsable (api / emc / exploitation)
Routage cuisineChaque famille non-formule a un écran de production déclaréSTS · LP_OrderDeviceMappingRoutée / formule / sans écran
Empreintes matérielQuels restaurants sont montés à l'identique, et ce que celui-là a de plusPlan d'adressageDéclaré (non constaté)
Rapprochement des registresChaque site du plan correspond à une location SimphonyPlan + STSExact / déduit / orphelin
Vérification de dispatchLa commande produite par un scénario est celle attendue et part vers les bons écransSTSBooléen + écarts en phrases
Adoria ↔ caisseL'indisponibilité déclarée en caisse a une période datée côté AdoriaAdoria + STSDatée / non expliquée

2 · Les tests que Studio alimente

Studio ne touche pas la borne. Il dit à ce qui la touche quoi vérifier.

Cornac Driver

Le parcours sur la borne, joué par un automate.

Driver pilote les bornes Acrelec en CDP/DOM et vérifie ce que Studio ne peut pas voir depuis l'API : l'ordre des catégories, les grilles, le parcours, les visuels de tuiles. Il consomme the Ledger pour savoir quoi attendre, et appelle la vérification de dispatch pour asserter sur ce que la commande est devenue en caisse.

Dépôt acrelec-automation-platform · Go

3 · Les tests du logiciel lui-même

271 tests, 8 suites, exécutés en 4,7 secondes — et la livraison en dépend.

Ce que la suite couvre en priorité

Les deux endroits où une erreur se paie directement en caisse : le mapping Excel → payloads CCAPI, et l'allocation des objectNum. Plus les quatre situations où l'on perd des données : feed interrompu, rollback rejoué, modification concurrente, étage de la chaîne de dépendances en échec.

S'y ajoutent le verrou d'écriture, l'authentification STS et le placement des identifiants, le journal d'activité, le rapprochement Adoria, l'export PDF et la lecture du plan d'adressage.

Le script de livraison refuse de produire un paquet si les tests échouent, et depuis août il refuse aussi un paquet dont une dépendance manquerait : il relève les imports du serveur et vérifie que chacun est bien embarqué. La prochaine dépendance oubliée arrêtera la construction sur le poste de développement, au lieu de tuer le serveur sur une station sans Internet.

08

La supervision applicative

Ce que Studio permet de surveiller en continu, sans écrire une ligne dans la caisse, et sans être sur le réseau du restaurant.

Ce qu'on surveilleCommentCe que ça donne
Le cycle de vie complet d'une commande Veille — capture du checkRef à la naissance Ouverture, envoi cuisine, encaissement, clôture — y compris après disparition de la liste
La pression horaire, jour après jour Enregistreur d'activité, présence journalisée La série temporelle qui n'existe nulle part ailleurs, et qui rend la prévision possible
Les commandes qui ne se ferment jamais Commandes ouvertes + export PDF par restaurant Les checks anormalement anciens, restaurant par restaurant
La dérive de configuration du parc Cohérence du parc, rejouée périodiquement Ce qui a divergé depuis le dernier passage, sur 8 axes
Les indisponibilités et leur ancienneté Croisement Adoria ↔ « 86 » Simphony Un « 86 » daté, distinguant l'incident du jour du retrait ancien
La santé des API et leur latence API history — durée, statut, corps, rejeu Les échecs, les lenteurs, et le 503 quand on presse trop l'API
L'état de l'automate de test Suivi de bout en bout — statut de l'agent Driver Le run en cours et son effet côté caisse, dans la même vue
Toute écriture faite dans la caisse Journal des opérations, en ajout seul Qui a écrit quoi, quand — et la matière du rollback

La limite est structurelle, pas outillée

STS Gen 2 est une API transactionnelle : elle décrit la transaction, pas sa matérialisation physique. On observe donc très bien ce que la commande contient et ce qu'elle devient en caisse, et rien de ce qui se passe ensuite dans le restaurant. Ce n'est pas un défaut de Studio, et aucun développement dans Studio ne le lèvera.

09

Les angles morts

Maillon par maillon, ce qui est observable aujourd'hui et ce qui ne l'est pas. Cette liste vaut autant que la précédente : elle dit où ne pas promettre de couverture.

MaillonÉtatCe qui manque, et à qui le demander
Écran de saisie borneCouvertPar Cornac Driver, en CDP/DOM. Canal borne uniquement.
Contenu de la commandeCouvertFormules, remises, moyens de paiement, TVA — tous canaux, par STS.
Trace du code promo ComoNon prouvéL'extension COMO_DATA du check n'était renseignée sur aucune des 122 commandes examinées — mais aucune n'avait utilisé de code promo. On observe l'absence du cas, pas un mécanisme qui échoue. Le test contrôlé qui tranche est prêt et n'a pas été lancé.
Ticket clientVideGET /checks/{checkRef}/printed répond 200 avec six lignes de blancs, alors que le check porte une extension d'impression. À éclaircir avec Oracle — peu coûteux, et ça débloquerait un plan de vérification entier.
Ticket cuisineNon observéAucun endpoint. Le routage attendu est connu (écran « Routage cuisine ») ; l'impression réelle ne l'est pas.
Écrans KDSNon observéCe n'est pas un trou d'accès : six écrans de production de l'environnement de recette sont en ligne sur le même VPN que la station. Ce qui manque est une méthode de lecture programmatique. La question à poser n'est plus « ouvrez-nous le KDS » mais « comment lit-on l'état d'un écran KDS Simphony sans le regarder ».
Poste de caisse (comptoir)Non observéInterroger STS ne suffit pas pour une commande saisie au comptoir : il faudrait écouter le poste. Ouvert chez Oracle. Les deux postes de recette sont en ligne et joignables — là aussi, la question est peut-être « que lit-on » plutôt que « peut-on y accéder ».
Middleware livraisonNon raccordéLa documentation Deliverect est publiée. Restent sandbox et identifiants, canaux en périmètre, mapping menu ↔ PLU. À noter : Deliveroo, UberEats et Click&Collect existent déjà comme moyens de paiement en caisse — c'est là qu'une commande marketplace se solde.
Notifications SimphonyNon exploitableUn type CheckNotification est annoncé, mais s'y abonner exige de s'enregistrer comme intégrateur — une écriture — et de fournir une URL que Oracle puisse joindre. Un poste de travail n'est pas exposé sur Internet. /notifications/subscriptions répondait 404 au dernier essai.
10

S'en servir

Sur la station d'automatisation

Une station d'automatisation, sans accès sortant.

Un script compile, refuse de livrer si les tests échouent, embarque toutes les dépendances et dépose une archive sur OneDrive. Sur la station : extraire dans C:\Automation\, double-clic sur studio.bat. Pas de npm install sur la station, pas d'Internet requis là-bas — c'est une contrainte tenue, pas une commodité : c'est elle qui explique que le code TOTP soit calculé à la main plutôt que tiré d'une bibliothèque.

Déposer une archive sur OneDrive ne met pas à jour ce qui tourne déjà. L'extraction est un geste manuel, et il faut le faire.

En développement

Deux processus, un port chacun.

Le client sur :5174, le serveur sur :8787. En production sur la station il n'y a qu'un processus : le client est compilé et servi en statique par le serveur.

Le serveur écoute sur toutes les interfaces, sans authentification, et le dit au démarrage. Studio écrit dans la caisse et n'a ni comptes ni rôles : sur un réseau partagé, le lancer sur 127.0.0.1.

Deux comportements qui ressemblent à des pannes et n'en sont pas

  • L'onglet Conformité campagne est vide si le dépôt Cornac Driver n'est pas cloné au bon endroit sur la machine : les règles y sont cherchées par essais successifs de chemins.
  • En développement, la page se recharge entièrement à chaque modification. Le contexte de profil exporte à la fois un composant et un hook, ce que le rechargement à chaud ne sait pas traiter.

Ce qui reste ouvert

  • La formation ne couvre que Feeder et Auditor. L'onglet Conformité n'a jamais été parcouru avec le client, et les dix écrans arrivés depuis — parc, veille, référentiel, routage, Adoria — n'ont pas été présentés.
  • Le test code promo contrôlé n'a pas été lancé. Il peut retirer une décision d'achat du chemin critique.
  • La méthode de lecture des écrans KDS reste à obtenir — c'est le maillon qui manque aux tests de bout en bout, et l'interlocuteur est dans la salle chaque semaine.
  • L'autorité de la liste des restaurants est encore au classeur. Le chantier proposé — prendre la liste depuis l'API et auditer l'Excel contre elle — n'est pas fait.

Cornac Studio — documentation au 24 août 2026
Feeder · Auditor · the Ledger, et les quatorze écrans de lecture du parc
Suite Cornac : Studio (configuration, parc, commandes) · Driver (bornes Acrelec)