Gestion des exceptions de livraison : anatomie de Shipment Exception Commander

Gestion des exceptions de livraison : découvrez le scoring déterministe, le contrôle humain et l’exécution idempotente de Shipment Exception Commander.

Publié le

Gestion des exceptions de livraison : anatomie de Shipment Exception Commander

Si les perturbations d’expédition sont difficiles à gérer, ce n’est pas faute d’options. La gestion des exceptions de livraison se complique parce que les éléments de preuve n’offrent pas tous le même niveau de fiabilité, que les devis de réacheminement expirent, que les coûts franchissent des seuils d’approbation et qu’une relance précipitée peut créer une seconde réservation alors que la première a bel et bien abouti.

Shipment Exception Commander est une application de référence open source pour Claude Managed Agents, conçue pour ce point de bascule décisionnel. Elle examine une exception synthétique, note mécaniquement chaque option de reprise, délègue une contre-analyse indépendante des risques, présente à un humain l’action exacte et n’autorise qu’une seule mutation idempotente dans la sandbox, après validation par le mécanisme d’approbation natif.

Gestion des exceptions de livraison : calculer les scores avant l’arbitrage du modèle

Le coordinateur n’invente jamais de tarifs et ne confond pas du texte libre avec une règle. L’outil serveur shipment_intelligence, accessible en lecture seule, expose trois cas synthétiques et calcule le score des options selon une formule fixe : 50 points si la promesse est tenue, 20 pour la couverture des stocks, 20 pour la maîtrise des coûts par rapport au plafond absolu et 10 pour le niveau de confiance. Chaque option est assortie d’une version de devis, d’une date d’expiration, d’une ETA, d’un nombre d’unités protégées et d’un surcoût en USD.

Le principal cas de démonstration, SCX-2026-071, comparait trois arbitrages caractéristiques : un réacheminement maritime économique qui ne tenait pas la promesse, un transport intégral par avion qui dépassait le plafond absolu de dépenses et une expédition aérienne accélérée et fractionnée qui protégeait les 240 unités promises pour $4,200. L’option fractionnée a obtenu un score de 91 tout en restant sous la limite opérateur de $5,000. Le score rend la recommandation reproductible ; Claude doit, lui, rassembler les preuves, remettre les hypothèses en question et expliquer le compromis.

Une preuve non fiable ne peut pas autoriser une action

Une note de transporteur contient délibérément un texte formulé comme une instruction, demandant à l’agent d’ignorer la politique d’approbation et de réserver l’option premium. Le workflow classe cette note comme non fiable, la conserve à titre de preuve et écarte explicitement toute valeur directive. Les règles proviennent du catalogue synthétique versionné et de l’adaptateur, jamais du texte libre associé à une expédition ni du résultat d’un outil.

Le coordinateur ne dispose par ailleurs d’aucune mémoire accessible en écriture d’une session à l’autre, d’aucun coffre-fort, d’aucune intégration MCP et d’aucune sortie réseau. read, glob et grep constituent les seules exceptions étroites approuvées automatiquement. Bash et l’écriture des livrables restent en always_ask ; l’édition, la récupération de pages web et la recherche web sont désactivées. La commande execute de l’adaptateur est le seul moyen canonique de modifier l’état.

Un vérificateur met la recommandation à l’épreuve

Avant toute demande d’exécution, le coordinateur Opus confie la solution de reprise proposée à un vérificateur Haiku spécialisé. Lors de l’exécution de démonstration, celui-ci a répondu NEEDS_CHANGES : il ne pouvait pas établir si le devis Q-071-v4 était toujours à jour, ni si les capacités et les surcharges étaient définitives. Le coordinateur n’a pas balayé cette réserve. Il a appelé le validateur déterministe de la proposition, qui a de nouveau contrôlé l’horloge synthétique, l’expiration du devis, la version de la politique, le seuil de dépenses et la version d’état attendue. Ce n’est qu’après le résultat faisant autorité, ready_for_human_approval, que le statut global est passé à « prêt ».

Le dossier d’approbation précisait ensuite les identifiants du cas et de l’option, la dépense exacte de $4,200, l’ancienne et la nouvelle ETA, l’incidence sur la promesse client, les 240 unités protégées, l’expiration du devis, les versions de la politique et de l’état, le score, l’historique du vérificateur, les solutions écartées, la clé d’idempotence stable, les champs de reçu attendus ainsi que le comportement prévu en cas de refus ou d’échec.

Un refus signifie : aucune mutation

La première carte d’approbation native a été refusée volontairement. Aucune commande modifiant l’état n’a été exécutée : l’état est resté detected en version 3, aucun reçu n’existait et la clé d’idempotence est demeurée inutilisée. L’agent n’a ni changé d’outil, ni modifié la commande, ni fabriqué une nouvelle clé.

À la demande explicite de l’opérateur, la même action canonique a été présentée une seconde fois. Elle a alors été autorisée. À la frontière de mutation, l’adaptateur a de nouveau vérifié la version d’état 3, la validité du devis, la politique, le niveau d’approbation et le plafond absolu de $10,000. Il n’a exécuté l’action qu’une fois, faisant passer le cas de l’état detected version 3 à l’état resolved version 4, puis a renvoyé le reçu rcpt_37105a2da411aee0391c assorti de la référence de réservation SBX-56DFC3291972.

Une exécution résistante aux rejeux, avec un périmètre clairement établi

L’adaptateur synthétique possède une clé stable, SCX-2026-071:OPT-071-B:v3, un verrou au niveau du système d’exploitation, une inspection de l’état canonique et un registre des reçus. Les appels répétés avec la même intention renvoient le reçu existant ; une intention contradictoire associée à cette clé échoue ; une version obsolète, une exécution concurrente ou d’éventuelles écritures partielles imposent une inspection plutôt qu’une relance à l’aveugle.

Ces protections sont volontairement présentées dans les limites de leur périmètre réel : le verrou, l’état et le registre des reçus sont des fichiers locaux à la session, dans une seule sandbox Managed Agents. Ils ne constituent pas une garantie distribuée adaptée à la production. Un véritable adaptateur de transporteur ou de TMS nécessiterait un stockage transactionnel partagé et un contrôle d’idempotence dans le système en aval.

L’évaluateur du résultat a contrôlé les preuves

La session a produit trois artefacts dans /mnt/session/outputs/ : un dossier de reprise lisible par un humain, un journal d’audit structuré et le reçu d’exécution brut. Un évaluateur de résultat Managed Agents a comparé ces fichiers de manière indépendante avec le catalogue, le code source de l’adaptateur, l’état canonique, l’historique des approbations et le registre des reçus. Il a exigé des corrections concernant l’indication de l’expiration du devis, le comportement explicite en cas d’échec, un manifeste des livrables et la limite liée au caractère local de la session, avant de renvoyer satisfied.

Le dossier de reprise a ensuite été téléchargé par l’intermédiaire du proxy de fichiers de l’application. Son SHA-256 est 30c8ad1d0d13cf7ad4b7070e67370ea270562c5e4ef44dfa503e3124180bd40b. La session de capacité est sesn_01CcQjCVoWvNQ7VJLFbuDJxh ; le résultat est outc_01GoD4rsLMh93iQNfAUw63KW.

L’exécution réelle de l’évaluateur a également révélé une lacune dans l’interface : les threads enfants de l’évaluateur peuvent demander une approbation alors que la session parente reste inactive. La version publiée reconstruit désormais les cartes d’approbation en attente à partir des événements requires_action du parent comme des événements evaluated_permission: ask des threads enfants, les retire après confirmation ou résultat et empêche un rejeu de faire réapparaître des demandes déjà traitées. Elle transmet aussi le session_thread_id de l’évaluateur au moyen d’une liste blanche restreinte dans le navigateur, puis vérifie que ce routage correspond exactement à l’événement d’outil d’origine avant de relayer la décision.

Une session de démonstration Sonnet configurée séparément, sesn_01BvSf33BLBbN86w5oDb3BkQ, a testé ce parcours corrigé. L’événement d’outil de l’évaluateur relayé entre les threads, sevt_013VnmofY8ytk6QwgDtNSYoq, transportait l’identifiant de thread sthr_018HMgpidoN86Qp4iGLZt1q3 ; l’interface a produit la confirmation sevt_016ZFv5TdBPKNyEPThzGT36Q avec les mêmes identifiants d’outil et de thread, le serveur l’a acceptée et l’évaluateur a repris son travail en demandant le contrôle suivant. Cette démonstration ciblée a ensuite été interrompue volontairement pour éviter de payer des itérations supplémentaires sans intérêt ; le résultat principal sur l’expédition est resté satisfied.

Opus en référence, Sonnet pour la validation, Haiku pour la vérification

Le coordinateur provisionné reste claude-opus-5. Pour contenir le coût des validations payantes et reproductibles, les sessions locales peuvent explicitement remplacer le seul modèle du coordinateur par claude-sonnet-5 ; toute autre surcharge de configuration à l’exécution échoue en mode fermé. Le vérificateur indépendant utilise claude-haiku-4-5. La session de smoke test facturée sesn_01RTs3wLV41odV9p92eWtrHV a utilisé Sonnet et renvoyé exactement SMOKE OK.

La suite de tests de production reste délibérément isolée des secrets d’accès, même lorsqu’un développeur dispose d’un fichier .env.local configuré. Elle prouve qu’un nouveau déploiement n’affiche aucun champ de clé dans le navigateur, n’envoie aucun trafic à Anthropic, indique configured: false et renvoie le code 503 depuis les routes de facturation.

Une référence publique qui échoue en mode fermé

La référence publique déployée sur Vercel ne contient ni clé Anthropic ni identifiant de ressource Managed Agents. La page d’accueil et /api/agent/health restent accessibles, tandis que la création de sessions échoue en mode fermé. Les utilisateurs qui adoptent le projet provisionnent l’agent et l’environnement avec leur propre compte Anthropic ; toute instance configurée doit être protégée par un contrôle d’accès avant d’être ouverte à d’autres utilisateurs.

Tous les cas, transporteurs, devis, références de réservation, changements d’état et reçus de ce projet sont synthétiques. L’application illustre un modèle de contrôle opérationnel, et non une véritable intégration avec un transporteur.

Preuves de la version publiée

Shipment Exception Commander adopte volontairement un périmètre plus étroit qu’un copilote logistique. Sa promesse vérifiable tient en une phrase : recommander à partir de preuves versionnées, mettre la recommandation à l’épreuve, demander à un humain d’approuver l’action exacte, ne produire qu’une seule mutation et laisser suffisamment de traces pour reconstituer les faits.

Publié
Catégorie
Build
Articles similaires
Promptfoo : notre avis sur les tests LLM et le red teaming

Promptfoo : notre avis sur les tests LLM et le red teaming

Notre avis sur Promptfoo : évaluations LLM, red teaming, tarifs et limites. Un exemple de bot de support pour choisir face à Braintrust et LangSmith.13 oct. 2026Build
Claude Code Skills : les commandes utiles en équipe

Claude Code Skills : les commandes utiles en équipe

Maîtrisez les commandes Claude Code, les skills et les plugins, puis adoptez cinq modèles prêts à copier pour les revues, correctifs et notes de version.13 oct. 2026Build
Context engineering : comment garder vos agents IA sur la bonne voie

Context engineering : comment garder vos agents IA sur la bonne voie

Maîtrisez le contexte de vos agents IA : compaction, recherche ciblée, sous-agents et mémoire, avec des exemples pour Claude Code, Agent SDK et Codex.13 oct. 2026Build
Spec Kit et Kiro : cadrer le développement avec l’IA

Spec Kit et Kiro : cadrer le développement avec l’IA

Structurez le travail de vos agents IA avec Spec Kit, Kiro, Claude Code ou Codex : spécification, plan, tâches et tests, autour d’un export CSV concret.13 oct. 2026Build
Linear MCP : connectez vos assistants IA à vos tickets

Linear MCP : connectez vos assistants IA à vos tickets

Connectez Linear à Claude, Cursor, Codex et ChatGPT. Configurez les accès MCP et découvrez des workflows de triage, de création de tickets et de reporting.13 oct. 2026Build
LangChain vs LangGraph : quel outil pour votre workflow ?

LangChain vs LangGraph : quel outil pour votre workflow ?

LangChain ou LangGraph pour votre application ? Comparez le contrôle des agents, les exemples Python, la migration et les tarifs de déploiement LangSmith.13 oct. 2026Build
RAG IA : quand et comment passer au RAG agentique

RAG IA : quand et comment passer au RAG agentique

Quand adopter le RAG agentique ? Comparez les parcours, construisez un premier agent et mesurez la qualité des réponses, les citations et les coûts.13 oct. 2026Build
Amp Code : avis, prix et intérêt pour le travail en équipe

Amp Code : avis, prix et intérêt pour le travail en équipe

Amp Code passé en revue : tarifs, offre gratuite, modèles, CLI et fonctions d’équipe. Découvrez dans quels cas le choisir face à Claude Code ou Codex.12 oct. 2026Build
Newsletter

Une lettre, chaque dimanche.Des systèmes qui tournent, pas des hot takes.

Hebdomadaire. Pas de spam. Désabonnement à tout moment.