Chapitres

Sur cette page

DOC-04 / Référence technique · Chapitre 10

Catalogue des façades & entrypoints de Synedre OS

Ce chapitre recense tous les points d'entrée exécutables du harness agentique de Synedre OS, en précisant pour chacun son rôle, sa famille et son mode d'invocation, afin de permettre à un ingénieur de s'orienter rapidement dans le dépôt `synedre-os`.

Catalogue des façades & entrypoints — Synedre OS

Ce chapitre recense les points d'entrée exécutables du harness agentique avec, pour chacun, sa famille, son rôle en une ligne et son mode d'invocation type (cron / CLI / skill / hook / lib), afin qu'un ingénieur reprenant le dépôt retrouve rapidement quel script fait quoi sans relire des centaines de fichiers.

Principe directeur : les façades email, scan et déploiement sont déclarées façades uniques obligatoires dans la doctrine d'orchestration de l'agent Atlas. Tout appel à ces fonctionnalités doit passer par la façade exposée — jamais par un accès direct aux composants internes.

Périmètre, méthode et couverture du catalogue

Ce chapitre documente l'intégralité des composants actifs de la plateforme Synedre : façades d'automatisation, scripts d'infrastructure et programmes d'orchestration. La méthode de production est programmatique : le premier docstring ou commentaire de tête de chaque fichier est extrait par analyse syntaxique (ast.get_docstring() pour Python, première ligne de description pour les scripts shell), puis croisé avec l'historique des commits récents et le planificateur de tâches actif. Aucun rôle n'est inventé ; quand un fichier ne comporte qu'un en-tête générique, le docstring fonctionnel est repêché quelques lignes plus bas.

Décompte couvert

Catégorie Total réel sur le dépôt Couverture dans ce catalogue
Façades d'automatisation .py 949 (dernière vérification) Toutes détaillées ci-dessous — recoupement par nom de base : 0 fichier absent
Scripts d'infrastructure (bin/, entrées top-level) 148 entrées (fichiers et sous-répertoires) Tous les fichiers top-level détaillés ; sous-répertoires bucephale/ et lib/ couverts section par section ; cache de bytecode et scripts SQL non détaillés un à un

Historique des recomptages. Les totaux ont évolué rapidement au fil des chantiers : de 391 façades au départ, le dépôt est passé à 720, puis 774, 831, 864, 889, 901, 917, 926, 930, 938, 948 et enfin 949. Chaque saut correspond à une fournée de chantiers documentée dans le journal de régénération ci-dessous. Les anciens totaux (391, 720, 774) ne sont conservés qu'à titre de traçabilité historique et ne reflètent plus l'état courant.

Boucle de régénération miroir

Un mécanisme de détection de dérive compare en continu la date de dernière modification de chaque composant à la date de la dernière documentation. Quand le code est plus récent que la doc, un signal code-newer est émis. Les références documentées comme absentes du dépôt sont exclues de ce calcul de dérive ; elles restent citées à titre de traçabilité historique.

À chaque passe de régénération, la méthode appliquée est la suivante :

  1. Recomptage réel des fichiers de premier niveau.
  2. Recoupement par nom de base de chaque fichier contre le texte du chapitre — tout fichier absent est catalogué dans la fournée.
  3. Croisement avec l'historique des commits récents : seuls les fichiers dont le comportement a réellement changé voient leur ligne de tableau réécrite.
  4. Vérification de chaque invocation planifiée contre le planificateur de tâches actif.
  5. Scan des chemins cités : tout chemin absent du dépôt est annoté comme référence morte documentée.

Journal des fournées récentes

Les paragraphes qui suivent résument, fournée par fournée, les composants nouvellement catalogués, les lignes réalignées et les anomalies relevées. Les références mortes (composants supprimés ou déplacés) sont signalées explicitement et exclues du calcul de dérive.

Fournée du 16 octobre 2026

Une façade neuve cataloguée (moteur de génération de couvertures photo, famille §10). Quatre lignes réalignées sur les commits de la veille. Une nouvelle sous-famille créée : import de catalogue depuis une plateforme e-commerce tierce (§15). Signal code-newer : le moteur de génération de couvertures photo avait été mis à jour la veille sans que la doc suive — la cause est un changement de méthode de résolution d'un chemin binaire interne. Soixante-huit références mortes documentées comme telles, exclues du drift.

Points à confirmer : cadence planifiée de deux composants (boucle de réinitialisation de la démo nocturne, audit SEO mensuel) — absents du planificateur au moment de la vérification, seule la migration de déclenchement du second existe.

Fournée du 15 octobre 2026

Douze façades neuves et un garde de session catalogués. Douze lignes réalignées. Nouvelle sous-famille : reprise d'une version majeure d'une plateforme e-commerce open source (§15). Signal code-newer sur le composant de traitement des commandes humaines.

Nouveautés documentées :

  • Courrier interne et copies (§9) : canal dédié vaisseau-mère → responsable (boîte canonique, reply-to configuré, identifiant de message réel) ; module de copie unique par brouillon à valider.
  • Reprise plateforme e-commerce v9 (§15) : quatre façades couvrant la charte graphique, la migration, les modules et les redirections.
  • DNS et hébergement (§14) : appel à l'API de panneau de contrôle d'hébergement via session sécurisée sans identifiant en clair ; comparaison de deux zones DNS avant bascule ; provisionnement de l'espace privé des fondateurs.
  • Vigies (§10, §15) : lecture paginée du blog pour le dictionnaire ; audit SEO mensuel par client ; réinitialisation nocturne de la démo.
  • Diffusion Medium (§10) : le publieur de contenu gagne un canal Medium par navigation (deux articles par mois au plus, après validation manuelle).
  • Garde de session (§17) : un garde bloquant intercepte les écritures Bash sur les clients en production et exige une confirmation explicite.

Fournée du 13 octobre 2026

Huit façades neuves, trois scripts d'infrastructure et deux gardes de session catalogués. Nouvelle sous-famille : comptes système de recette par client (§6).

Nouveautés documentées :

  • Comptes système de recette par client (§6) : registre des comptes, garde d'entrée et vigie, pose du mot de passe sans boîte mail, preuve live de refus d'accès non autorisé. Table de registre dédiée. Le moteur de navigation bucéphale porte huit profils de recette (ports distincts) et une entrée d'autorisation par hôte exact.
  • Dossier client (§9) : liste blanche de projets et de fils, assainissement mécanique, rattachement des personnes par adresse exacte.
  • Visuels AutoBlog (§10) : point d'entrée cron borné (six visuels par passe, liste fermée de clients, option sonde) ; priorisation des articles déjà publiés ; détection des slots visuels absents.
  • Popularité produit (§10) : recopie du signal Search Console dans la table de popularité de la boutique.
  • Sauvegarde du coffre humain (§14) : sauvegarde vers stockage objet et restauration de test ; garde empêchant toute exposition publique du coffre.
  • Garde du tronc (§14) : script sourcé par les commandes de déploiement pour protéger la branche principale.

Fournée du 12 octobre 2026

Quatre façades neuves cataloguées. Six lignes de tableau réalignées. Un garde de déploiement recensé.

Nouveautés documentées :

  • Liaison ventouse In-Situ (§3) : service SSE sortant avec requêtes signées ; coupe-circuit de garde des coûts du compte public ; relais et réponse par connexion distante sécurisée. Tables de demande et d'état dédiées.
  • Garde des coûts (§10) : les composants de génération d'images et de données SEO appellent désormais une vérification de quota payant avant tout appel réseau.
  • Gate live et préproductions (§14) : une préproduction derrière authentification HTTP n'est plus considérée comme défaillante sur un code 401.
  • Vue Machines (§14) : table recensant les équipements de la flotte (box de navigation, serveur tampon, postes et appareils) ; route hub mise à jour.
  • Déploiement (§14) : le garde post-commit redéploie aussi l'atelier de préproduction de la démo quand un fichier concerné change ; un verrou par four empêche deux déploiements simultanés au même instant.

Fournée du 11 octobre 2026

Neuf façades neuves, trois scripts d'infrastructure et un garde pre-commit catalogués. Environ trente lignes réalignées. Nouvelle sous-famille : cinquième harnais natif de tentacule.

Nouveautés documentées :

  • Harnais natif supplémentaire (§3) : lanceur borné (garde anti-contributeur externe, modèle dédié) ; sortie résidentielle via le moteur de navigation (refus des adresses de datacenter par le fournisseur et de SOCKS par la CLI) ; client de suivi de quota (la commande de service rend quota et tokens que la commande d'exécution ne rend pas). Câblage sur les profils d'harnais, le routeur d'appels agents, la vision CLI, la consommation CLI, l'index des gardes, le méta-harnais portable et le fractionnement de session.
  • Traitement email par ventouse (§9) : veille par indicateur, traitement à la minute, accord sur mot-clé de validation, règles de rédaction avec promesses du fil, rejeu à blanc avec deux juges, taux de validation suivi chaque semaine. Tables de scénarios et de simulation dédiées.
  • Journal des livraisons (§14) : appelé en fin de déploiement pour dater une mise en production sans dépendre d'un bouton d'interface.
  • SEO (§10) : vigie technique multilingue en lecture seule ; marquage de statut SEO ; classification des écarts d'indexation par cause ; lecture d'un vecteur de recherche stocké (gain de performance significatif).
  • Sécurité et flotte (§14/§16) : rôle de lecture seule en base sans repli sur le propriétaire ; suppression d'un plancher codé en dur dans le pilote d'autonomie ; garde pre-commit sur la synchronisation des fiches agents ; cible de dérive Drizzle étendue à l'atelier de préproduction de la démo ; plafond des ventouses en aspiration relevé de 30 à 40.

Fournée du 10 octobre 2026

Seize façades neuves et un script JavaScript catalogués. Environ trente lignes réalignées. Trois gardes câblés recensés.

Nouveautés documentées :

  • Comptes tiers (§2) : mot de passe généré, chiffré et saisi dans le même processus (dix invariants de sécurité) ; empreinteur HMAC lu par un garde de session ; migration de métadonnées avec retour arrière ; vigie des invariants (seuil zéro écart). Garde bloquant interceptant toute saisie en clair. La commande /password consulte le registre sans jamais restituer de valeur.
  • Secrets des serveurs clients (§2) : la fiche de flotte déclare l'emplacement des secrets ; un collecteur les remonte au registre toutes les quinze minutes.
  • Déploiement — four et secrets hors build (§14) : déport de la compilation sur une machine locale dédiée (défaut : tous les clients, avec garde sur les secrets figés) ; analyse de sortie bloquante par défaut depuis cette date ; refus de deux clients dont les secrets ne vivaient que dans le build ; file FIFO (un seul build à la fois) ; repli disque sur les assets statiques en cas de 404 ; scripts de provisionnement de nouveaux serveurs (Ubuntu, protection SSH, fail2ban) ; rétention de sauvegardes allongée.
  • SRE (§14/§16) : médecin du vaisseau-mère (liste fermée de soins, journal d'actes, cadence régulière) ; sonde de comptage JavaScript initial ; vigie de stock VPS ; optimisation CPU de la barre d'état.
  • SEO et marché (§10) : règle immuable « on adapte au marché, on ne traduit pas » (garde bloquant + fichier de règles strictes) ; rédaction de fiches EN/DE depuis un brief de marché en base ; critère de fiches maigres relu en base ; invariants de locale ; inspection et vérification Search Console.
  • Tentacules et acquisition (§3/§9) : réponse automatique périodique d'une ventouse (plafond en tours, jamais une validation) ; promotion prospect → client ; garde de portée de session.

Fournée du 8 octobre 2026

Six façades neuves cataloguées. Onze lignes de tableau réalignées.

Nouveautés documentées :

  • Vue Retoucher des courts métrages (§11) : mesure du rythme plan par plan ; options d'assemblage par plan (avant/après/silence) ; bouton « Rejouer » incrémentant le numéro de version sans écraser les fichiers précédents ; presets de jeu récoltés sur les plans gardés. Deux opérations de daemon et deux migrations dédiées.
  • AutoKUR (§10/§15) : noms lisibles pour les motorisations homonymes ; nombres dans les textes de catégorie remplacés par des gabarits paramétrables ; seed de rattachements seuls ; guides de catégorie générés ; refus d'un précalcul périmé.
  • Acquisition, ton et devis (§9/§12) : comptage séparé des relances dans le registre de prospection ; ton de rédaction par membre de l'équipe ; devis à la charte avec annexes en base.
  • Recette plateforme e-commerce (§14) : mesure du mode debug sans lecture du fichier d'environnement ; refus de l'ambiguïté de nom de module.

Fournée du 7 octobre 2026

Une façade neuve cataloguée. Neuf lignes de tableau réalignées.

Nouveautés documentées :

  • Rappel de rendez-vous (§9) : envoi d'un email une heure avant chaque rendez-vous, destinataire unique.
  • Mesure d'indexation (§10) : comptage limité aux catégories actives ; exclusion des pages auto-fermées en noindex du calcul du manque ; inspection par lots avec rejeu des lots défaillants ; mesure de la demande sur plusieurs requêtes candidates.
  • Diffusion et courts métrages (§10/§11) : étiquette IA obligatoire et relue (refus fermé) sur YouTube et TikTok ; partage de reel Instagram en pleine longueur (borné à 60 s) ; vérification de la vidéo sur le téléphone avant publication ; plan « off » muet ; prise retournée sans écrasement ; mélodie repliée d'octave.
  • SEO et commercial (§10/§12) : lecture Search Console sous la propriété, pas sous l'URL du site ; option de proposition commerciale sans méthode jointe.

Fournée du 6 octobre 2026

Cinq façades neuves cataloguées. Quatorze lignes de tableau réalignées.

Nouveautés documentées :

  • Pool de tentacules (§3) : gestionnaire de pool avec spawn borné.
  • Registre des credentials (§2) : pose d'une clé de client sans terminal, par dépôt du coffre détruit à la lecture ; sens entrant du composant de transmission de secrets.
  • Communauté (§9) : publication des forums par file à créneaux (toutes les cinq minutes) — plus jamais en rafale.
  • Diffusion et courts métrages (§10/§11) : courts métrages du blog comme troisième source de l'exception vidéo ; atelier avec identifiant et bouton de suppression ; un seul setup de style ; doublage en boucle fermée sur la mesure du juge ; carton gris clair.
  • Blog et SEO (§10) : politique client inactive respectée par le réassort ; publication de couverture purgeant le cache SSR ; détection de doublon de titre sans virgule ; juge des visuels signalant sa propre panne.
  • Migrations, email et session (§14/§9/§3) : refus des DDL concurrents par nom ; porte de recette email sans citations du correspondant ; relance fiable du superviseur de session (fils directs uniquement).

Fournée du 5 octobre 2026

Dix façades neuves cataloguées (dont un garde de version POS dans les scripts d'infrastructure). Vingt lignes de tableau réalignées. Deux gardes de session recensés.

Nouveautés documentées :

  • Diffusion image Instagram (§10) : plan de scènes vers images vers file ; statistiques des posts lus sur le téléphone (lecture seule) ; taille des hashtags candidats relevée sur le téléphone (plafond 30 tags distincts sur 7 jours) ; classement bayésien des hashtags (exploration/exploitation, conseil en sortie). Le moteur de diffusion sociale gagne la règle des 14 jours par réseau et le sceau du média validé.
  • Communauté (§9) : trois réponses de forum par jour (sujets sans réponse des forums de support retenus) ; fil relu en direct avant rédaction ; refus du Markdown ; relance de rédaction sur refus de forme ; refus de publication conservé en base.
  • Rapport SEO (§10) : indice de confiance A/B/C/D par mesure ; deuxième source de rang indépendante.
  • Assistant IA des boutiques (§16) : vigie des questions sans bonne réponse avec recette de nuit ; purge datée des données obsolètes.
  • Déploiement (§14) : arbre stable pendant le build ; traîne des assets statiques bornée par l'âge ; variable de design system obligatoire dans le bloc de configuration du gestionnaire de processus.
  • Vigies et gardes (§16) : vigie de disponibilité des créneaux de rendez-vous ; garde de version majeure du socle fiscal de la caisse.

Fournée du 3 octobre 2026

Dix-neuf façades neuves cataloguées. Trente et une lignes de tableau réalignées. Quatre gardes câblés recensés. Quatre références ligne-de-fichier recalées.

Nouveautés documentées :

  • Autoblog et blog (§10) : rédaction par un seul fournisseur IA dédié, sources d'autorité, visuels du corps avec abandon au troisième refus, seuil de tête mensuel, profil « avatars » pour site vitrine sans catalogue, garde de cadence (trois articles par semaine maximum).
  • Rédaction SEO catalogue sous sceau (§10) : fiches de marché rédigées en anglais et en allemand depuis un brief en base ; rappel de l'indexation en fin d'import fournisseur.
  • Lisibilité par les assistants d'achat (§10) : pont entre le moteur de fiche produit et la sentinelle SEO.
  • Courts métrages en base (§10/§11) : bible vidéo en base, montage sur bande son, doublage de voix, publication via le téléphone et file de validation.
  • Publication X (§10) : reprise après éditeur non refermé.
  • Tentacules (§3) : second regard du réconciliateur ; délai de démarrage relevé ; script d'ouverture de ventouse.
  • Déploiement (§14) : cache SSR conservé, préchauffage puis balayage, option --cache-buster de la garde de navigation.
  • OVH (§14) : reprise sur défaillance passagère (jamais sur POST) ; option de retrait d'adresse IP.
  • Import Search Console (§10) : flotte étendue, secrets hors arguments de commande.
  • Audits (§6) : arbre CMS orphelin, registre des égalités de locale, lots natifs multilingues d'un client catalogue.

Fournée du 1er octobre 2026

Trente-trois façades neuves cataloguées. Diffusion sociale, pool de tentacules et délégations réalignés. Sept gardes de session recensés.

Sous-systèmes ayant réellement bougé et relus dans le code :

  • Diffusion sociale (§10) : quatre sources, file de validation, trois créneaux par jour, garde « une voix » 48 h, source vidéo.
  • Pool de tentacules (§3) : plafonds, dégel, échéance du critère, délais d'attente, recrutement par le chef, réconciliateur.
  • Délégations (§9) : nouvelle sous-famille dédiée.
  • Communauté (§9) : forum élargi, relevé de statistiques de page, relevé LinkedIn.
  • Blog (§10) : rédaction par fournisseur dédié, sources d'autorité, visuels du corps, traduction du blog retirée du relais.
  • Maillage des sites (§10) : pôles SEO, Performance et Sécurité ; audit à la demande.
  • Iso-Figma (§6) : navigateur local sans le moteur de navigation principal.

Fournée du 27 septembre 2026 — régénération complète

Quatre cent cinquante-trois lignes de catalogue ajoutées. Quarante-cinq composants code-newer réalignés. Références ligne-de-fichier recalées. Section des gardes recomptée.

Cette fournée constitue la première régénération exhaustive : chaque fichier de premier niveau du dépôt a été confronté au chapitre par nom de base — 397 façades d'automatisation et 42 scripts d'infrastructure n'y figuraient pas encore. Trente-neuf nouvelles sous-familles ont été créées, couvrant notamment :

  • Registre des credentials et MCP
  • Résolution de portée de session
  • Harnais Codex et méta-harnais portable
  • Iso-Figma et communauté e-commerce
  • Permanence vocale et emails système
  • Autoblog, FAQ blog, couvertures de catégorie
  • Forum de dialogues entre agents
  • Indexation par vagues et maillage interne
  • Glossaire multilingue et netlinking
  • AutoKUR (deux déclinaisons), diffusion sociale
  • Moteur de navigation (bucéphale), Figma
  • FinOps, dépenses fournisseurs, budget de modèle
  • Bascule entre serveurs, approvisionnement OVH
  • Regroupement de variantes, connecteurs e-commerce
  • Gouvernance des automates, vigies de rendu

Points saillants des réalignements code-newer :

  • Le moteur SEO principal : ses trois lignes de planificateur sont toutes désactivées (usage effectif = CLI ou appelants) ; exceptions de nommage de slug, barrière de sécurité rétablie, normalisation JSON des valeurs du modèle de langage, FAQ multilingue.
  • Le moteur de génération de fiches produit : coupe de titre sans mot de liaison orphelin, clause catégorie/caractéristiques alimentaire.
  • Le moteur de travaux : harnais choisi par tâche puis par agent, clé de reprise de session, fenêtre de log tête+queue pour la recette.
  • La porte de courrier entrant : vérification DKIM alignée sur le domaine de l'expéditeur, refus fermé.
  • L'import Search Console : clé de déchiffrement essayée parmi deux variables d'environnement.
  • Le démon CLI : profils autorisés désormais issus du registre des profils d'harnais.
  • Le méta-harnais : Codex et le second harnais reçoivent réellement les gardes de session.

Anomalies relevées lors du cataloguage (non corrigées dans cette passe) : treize docstrings ou commentaires de planificateur périmés ; quinze façades conçues pour tourner en planificateur mais sans ligne active ; hôte ou conteneur codé en dur dans cinq scripts ; deux scripts défaillants.

Fournées antérieures — résumé

Les fournées de juillet et septembre 2026 ont constitué les premières grandes vagues de cataloguage. En voici les points marquants :

  • Nettoyage des composants morts (juillet 2026) : soixante-deux références supprimées du dépôt ont été annotées comme telles (corbeille traçable, grâce de trente jours) plutôt que retirées silencieusement. Deux faux négatifs détectés : deux composants appelés dynamiquement par le moteur de maintenance nocturne étaient invisibles au grep statique malgré la passe de repêchage.
  • Atelier 3D (septembre 2026) : expansion massive — vingt façades de production de planches techniques et anatomiques, treize helpers de qualité de ressemblance. Nouvelle sous-famille de pool de tentacules avec tables dédiées.
  • Harnais multi-profil (juillet→septembre 2026) : le démon CLI est passé de mono-profil à multi-profil (flag de sélection de profil, whitelist de valeurs réseau jamais interpolées sans validation préalable). Mécanisme de mise en veille douce d'une ventouse (0 % CPU, RAM libérée, transcripts conservés) distinct de la fermeture définitive.
  • Fractionnement de session (juillet→septembre 2026) : six commits en une journée ont affiné le comportement : état posé en base à chaque franchissement de seuil, compteur de tours remis à zéro sur chaque compaction, camp de relance pour les ventouses de pool, sidecar d'adresse pour éviter la reprise du handoff d'une autre ventouse, réalignement du modèle en base sur le modèle réellement utilisé, horodatage en heure locale pour la lisibilité humaine.
  • Comptes tiers et secrets (octobre 2026) : voir fournée du 10 octobre ci-dessus.
  • Planificateur propre (revérifié) : croisement du planificateur actif avec le catalogue — zéro entrée morte dans les lignes actives. Nouvelles entrées actives depuis juillet 2026 : moteur de travaux 3D, synchronisation de taxonomie, suivi de rang, réconciliation des réponses, audit de crontab, détection de récidive de cicatrice, fractionnement de session, et une dizaine d'autres.

Légende des modes d'invocation

Code Signification
cron Lancé par le planificateur de tâches (souvent via le composant d'enveloppement cron)
CLI Appelé manuellement en ligne de commande
skill Façade exposée derrière un skill déclaré dans les fichiers de compétences
hook Garde de session Claude Code (SessionStart / UserPromptSubmit / PreToolUse / PostToolUse / Stop). Les gardes Python sont déclarés dans la configuration locale ; un second jeu de gardes en shell est déclaré dans la configuration principale
lib Module importé, pas un point d'entrée autonome
worker Daemon ou boucle drainant une file de travaux en base

Familles de composants et flux d'ensemble

Le système s'organise en plusieurs familles fonctionnelles qui collaborent autour d'un bus central. Le schéma ci-dessous illustre le cheminement d'un signal depuis son entrée jusqu'à son exécution.

Vue d'ensemble du flux

                  ┌─────────────────────────────────────────┐
 email entrant ──►│  Réception & ingestion des messages      │
                  └──────────────────┬──────────────────────┘
                                     │ classification d'intention
                                     ▼
                  ┌─────────────────────────────────────────┐
 /hub, CLI   ───► │  Orchestration  (spawn, react, qa)       │
                  └──────┬──────────────────┬───────────────┘
                         │                  │
             chantiers   │                  │  exploration
                         │                  │
                         ▼                  ▼
      ┌──────────────────────────────────────────────────────┐
      │          Exécution des agents et des tâches           │
      └──────┬───────────────────────────────────────────────┘
             │
  ┌──────────┼────────────┬─────────────┬──────────────────┐
  ▼          ▼            ▼             ▼                   ▼
audits    blog/seo    finance       navigateur           déploiement
  │          │            │             │                   │
  └──────────┴────────────┴─────────────┴───────────────────┘
                          │
                          ▼
               Base de données relationnelle
               (façade d'accès centralisée)

Familles fonctionnelles

  • Réception & ingestion — surveille les boîtes de réception, normalise les messages entrants et en extrait l'intention avant de les transmettre à l'orchestrateur.
  • Orchestration — point de convergence entre les requêtes issues du hub web, de la ligne de commande et des emails. Il décide du composant suivant : ouverture d'un chantier, lancement d'une exploration ou délégation à un agent.
  • Exécution des agents et des tâches — couche qui appelle les agents nommés (Mitnick, Turing, Brunel, Eames, Lovelace, etc.) et gère le cycle de vie de chaque tâche (run, retry, statut).
  • Audits — analyse la qualité technique et éditoriale des livrables produits par les agents.
  • Blog / SEO — pilote la génération et la publication d'articles optimisés pour les moteurs de recherche.
  • Finance — gère la facturation et le suivi des paiements liés aux chantiers.
  • Navigateur automatisé — contrôle un navigateur headless pour les tâches nécessitant une interaction avec des interfaces web.
  • Déploiement — orchestre la mise en production des livrables via les commandes ./deploy et ./ship.

Modèle de données

L'ensemble du système s'appuie sur une base de données relationnelle unique, accessible exclusivement via une façade Python centralisée. Toutes les familles de composants passent par cette façade : aucun module n'interroge la base directement sans passer par cette couche d'abstraction.

Un second module centralise le chargement des variables d'environnement, garantissant que les secrets (clé API du fournisseur IA, mot de passe de base de données, jetons d'intégration…) ne transitent jamais en clair dans le code source. Ces valeurs sont déclarées dans des fichiers d'environnement exclus du contrôle de version.

Principe de sécurité : aucun secret n'est écrit dans le code ou dans la documentation. Toute valeur sensible est référencée par son nom de variable et chargée à l'exécution depuis l'environnement de la machine hôte.

Socle commun — bibliothèques et façades transverses

L'ensemble des automates et agents Synedre s'appuie sur un jeu de bibliothèques partagées : façades de base de données, journalisation structurée, abstraction IA, contrôle des secrets, résolution de tenant et outillage de déploiement. Cette section décrit chaque composant par son rôle fonctionnel.

Infrastructure de base

Composant Rôle Mode d'invocation
Façade PostgreSQL principale Abstraction Python d'accès à la base de données pour les scripts d'automatisation Bibliothèque
Pool de connexions persistant Maintient un pool de connexions réutilisables pour la couche entité, avec transtypage passthrough garantissant la fidélité octet-identique des données Bibliothèque
Contrat de format de sortie Définit le format de référence (« GOLDEN ») attendu de la couche entité : preuve d'intégrité octet-identique contre la corruption silencieuse Bibliothèque
Connecteur base de données sandbox Helper de connexion PostgreSQL pour les agents en environnement isolé Bibliothèque
Chargeur de variables d'environnement Point d'entrée centralisé pour la lecture des variables d'environnement de l'ensemble de la plateforme Bibliothèque
Journalisation structurée Module de logging obligatoire pour tous les Automates ; garantit un format de trace homogène Bibliothèque

Supervision des crons

Le gardien de timeout des crons enveloppe chaque automate planifié avec un délai d'expiration par défaut de 300 secondes. Des dérogations par script sont déclarées pour les tâches longues : par exemple, la boucle de maintenance nocturne bénéficie d'un plafond étendu à 12 600 secondes, la boucle de compaction mémoire à 3 600 secondes. Une dérogation supplémentaire couvre la recette nocturne de l'assistant IA d'un client (32 questions, pause de 10 secondes entre chaque cas pour respecter le plafond de débit du fournisseur ; durée mesurée : 384 secondes en conditions normales, pire cas estimé à 3 200 secondes).

Le battement de cœur des crons prouve qu'un automate s'est réellement exécuté (et pas seulement lancé) : chaque passage commis écrit un horodatage dans la table de supervision. Ce mécanisme est appelé depuis une vingtaine de modules au minimum, couvrant notamment les automates WhatsApp, le collecteur de messagerie, le détecteur d'entropie, la vigie de quotas et le détecteur de silence. Le détecteur de silence lui-même se bat à chaque sweep réussi (hors mode simulation), avec un intervalle attendu de 5 minutes et un seuil de silence de 15 minutes.

Façade IA agnostique

La façade IA agnostique route les appels LLM vers le fournisseur approprié (Mistral, Claude, OpenAI, DeepSeek, Gemini, ou le forfait CLI Google) sans que les automates aient connaissance du fournisseur sous-jacent. La clé API du fournisseur IA est lue depuis l'environnement et n'est jamais journalisée.

  • Le canal CLI Google (forfait) exécute le binaire CLI dans un répertoire temporaire vide créé pour l'occasion et supprimé après l'appel. Ce confinement empêche le processus d'écrire des fichiers dans le dépôt de l'appelant — comportement observé sans cette mesure. Un répertoire de travail explicite peut être fourni par l'appelant ; les autres fournisseurs ignorent ce paramètre.
  • Le canal API Google utilise une clé API dédiée lue depuis l'environnement ; en l'absence de clé valide, le système bascule automatiquement sur le canal CLI.
  • La tarification par fournisseur est centralisée dans la façade, y compris les modèles à coût marginal nul du forfait CLI.

Point à confirmer : le câblage exact du routage autoblog vers le canal CLI n'a pas été relu dans cette version de la documentation.

Invocation d'agents

La façade d'invocation d'agents permet à tout automate d'appeler un agent Synedre, quel que soit le harnais sous-jacent. Le harnais peut être spécifié explicitement ou déduit de la variable d'environnement de session ; la valeur par défaut est Claude. Un harnais inconnu provoque une erreur immédiate.

Chaque harnais fonctionne en lecture seule — un appel d'agent rend du texte, n'écrit rien. Pour les harnais alternatifs (Codex, CLI Google, Muse Code), la commande est construite avec les drapeaux appropriés :

  • Codex : mode éphémère, dépôt ignoré, sortie JSON, lecture seule.
  • CLI Google : mode plan, sortie JSON, exécuté dans un répertoire temporaire neutre avec une consigne explicite « n'utilise aucun outil » (sans quoi le processus tente des commandes et rend une réponse vide).
  • Muse Code : appel via le client MSP dédié, écriture et accès shell désactivés, quota consommé enregistré localement. Les sorties réseau de Muse transitent par un proxy d'émission dédié ; Codex et le CLI Google sortent en direct.

Le coût LLM de chaque appel est enregistré dans le journal des agents avec le nom du harnais utilisé. Le journal écrit le codename interne de l'agent même si l'appelant fournit un nom affiché différent.

python3 -m <invocateur-agent> --harness <claude|codex|antigravity|muse> --agent <codename>

Autres façades transverses

Composant Rôle Mode d'invocation
Chargeur de persona agent Charge la persona et le cadre cognitif d'un agent depuis le registre des agents Bibliothèque
Façade d'embedding Abstraction de calcul d'embeddings produits pour le boost de recherche Bibliothèque
Persisteur d'événements Enregistre un flux d'événements d'agent en base de données Bibliothèque
Connecteur hooks PostgreSQL Connexion légère et fail-fast pour les hooks post-action, héritée de la migration MariaDB Bibliothèque
Lecteur de configuration LLM par client Lit la configuration LLM (fournisseur, modèle, clé BYOK) propre à chaque client et la route vers la façade IA agnostique Bibliothèque
Purge PII Nettoie les données personnellement identifiables avant envoi au pipeline LLM Bibliothèque

Moteur de réflexes décentralisés

Le moteur de réflexes est branché sur les événements d'outils (lecture, écriture, édition, navigation web, appels d'agents). Il lit un événement JSON sur l'entrée standard, consulte la table de réflexes, prend une décision (autoriser, avertir ou refuser) et trace l'audit. Le code de sortie 0 signifie autorisation, 2 signifie refus.

La loi d'asymétrie gouverne l'ajout de réflexes : tout nouveau réflexe durcit les permissions ou maintient le statu quo — jamais d'autorisation large. Les zones sensibles sont fail-closed (refus en cas d'incertitude).

Un script de seed idempotent initialise les réflexes du tronc commun en base de données. Il est descriptif uniquement ; la source de vérité du câblage reste le fichier de configuration des hooks.

Détecteur de silence et d'échec des crons

Le détecteur de silence s'exécute toutes les 5 minutes. Il lit la table de battements de cœur et ouvre (ou incrémente) un incident de supervision sur deux sondes distinctes :

  1. Silence : aucun battement reçu depuis plus longtemps que le seuil configuré. Un cron mort-né (jamais exécuté) compte. Un épisode n'alerte qu'une fois.
  2. Échec installé : le dernier battement indique un état d'échec depuis au moins deux passages consécutifs. Cette sonde n'a pas de garde d'alerte unique — elle signale à chaque passage tant que l'échec persiste.

Lorsqu'un cron reprend (battement reçu, ou battement reçu en état OK), l'incident est refermé avec un motif daté. Si la base de données est inaccessible, le passage est ignoré sans erreur. Le mécanisme peut déclencher une escalade vers Atlas (une fois par épisode).

Outillage de déploiement

La bibliothèque de déploiement partagée fournit les helpers communs à toutes les cibles de déploiement :

  • Détection de mutation du dépôt pendant le build : si une source du build (pages, dépendances, lockfile) est modifiée entre le départ et la fin d'un build (par un merge-back concurrent par exemple), le build est recompilé ou refusé. En cas d'impossibilité de lire l'état Git, le comportement est fail-open.
  • Gestion de la traîne de cache : les fichiers statiques de l'ancienne version sont conservés un nombre de jours configurable (7 par défaut) pour éviter les erreurs 404 des robots d'indexation qui accèdent aux pages longtemps après leur lecture. Un fichier déjà repris est supprimé quand son horodatage dépasse l'âge maximal.
  • Propagation de variables d'environnement : l'étape de déploiement propage certains jetons depuis l'environnement du vaisseau-mère vers l'environnement runtime du tenant. Cette propagation ne suffit pas si le gestionnaire de processus ne liste pas explicitement la variable dans son bloc d'environnement.

Le script de préchauffage et balayage du cache SSR s'exécute en arrière-plan après chaque déploiement conservant le cache. Il recalcule les pages pendant que les visiteurs continuent de voir l'ancienne version, puis supprime les entrées de cache antérieures au swap qui n'ont pas été recalculées — à l'exception des sitemaps et des pages devenues des erreurs. Le balayage s'exécute même si le préchauffage échoue, pour qu'aucune entrée de l'ancien build ne survive.

Le parseur de manifeste de déploiement lit et valide le fichier de configuration de déploiement au format YAML, puis émet les paires clé/valeur correspondantes sous forme de variables shell correctement échappées.

Isolation de travail multi-client (worktrees)

Le système de worktrees persistants affecte à chaque client un espace de travail Git isolé (index, HEAD et fichiers propres). Plusieurs terminaux peuvent ainsi travailler sur plusieurs clients simultanément sans collision sur le tronc partagé. La branche de chaque client est réintégrée automatiquement dans la branche de pré-production après chaque commit (hook Git natif).

Un garde-fou de confinement vérifie avant chaque commit que les fichiers modifiés appartiennent bien au couloir du client actif. Ce garde-fou reconnaît deux topologies de dossier client : le modèle tenant standard et les clients legacy hors modèle tenant.

La commande wt gc (ramasse-miettes des worktrees) retire les espaces de travail des tentacules inactives. Elle normalise les noms de sessions tmux pour tous les harnais (Claude, Codex, CLI Google) et traite correctement le cas d'un worktree supprimé puis recréé au même chemin.

Le merge-back (réintégration de la branche client dans le tronc) est protégé contre les verrous d'index Git tenus par des sessions sœurs : si un git merge --abort est refusé, il est rejoué jusqu'à un nombre maximal de tentatives configurable, avec une pause entre chaque essai.

Cicatrice 2026-09-26 : un verrou d'index tenu par une session sœur avait laissé le tronc en état de merge partiel pendant 25 minutes, paralysant toutes les sessions. Le mécanisme de rejeu a été introduit pour prévenir cette situation.

Filet de borne des sorties LLM

Le filet de borne des sorties d'outils limite ce que le modèle voit dans le contexte de la conversation : la sortie brute d'un outil est tronquée avant d'être injectée dans le contexte, mais le journal complet reste disponible sur disque. Ce mécanisme réduit significativement le coût LLM — environ 72 % du coût provenait de l'accumulation non bornée des résultats d'outils dans le contexte. Il est câblé comme hook et importé directement par plusieurs automates.

Plafond de contexte des sous-agents

Le hook de plafond de contexte sous-agent surveille la taille du contexte dans les sessions imbriquées (sous-agents). Lorsque le nombre de tokens dépasse le seuil configuré (80 000 par défaut), tout nouvel appel d'outil est refusé, forçant le sous-agent à conclure. En cas d'erreur du hook, le comportement est fail-open. Un interrupteur d'urgence permet de désactiver ce mécanisme.

Ce hook est câblé en phase avant l'outil (PreToolUse). Un câblage erroné en phase après l'outil avait laissé passer plusieurs milliers de refus non appliqués sur deux cents sous-agents — certains recevant jusqu'à 114 refus ignorés — avant d'être corrigé.

Journal des agents

La façade de journal des agents écrit en base de données, de façon atomique et best-effort (sans jamais lever d'exception), les événements suivants :

  • Réunion quotidienne (upsert atomique par CTE)
  • Activité générale d'un agent
  • Résolution d'un élément de réunion
  • Battement de cœur d'un agent

Charte visuelle des artifacts

La charte visuelle des artifacts fournit un CSS autonome embarqué (police Courier Prime, mode sombre par défaut avec bascule vers le mode clair, sans dépendance CDN, compatible avec une politique de sécurité de contenu stricte) et une fonction d'encapsulation qui pose le shell HTML de chaque artifact : barre haute sticky, identifiant de tentacule, version, lien et bouton de bascule de thème.

Commandes éphémères et vérification de copiabilité

La commande éphémère permet à une session IA d'enregistrer en base de données une commande à exécuter, sans demander à l'opérateur de la copier manuellement depuis le chat. Le Hub l'affiche sous forme de bouton dans le pied de page. Modes disponibles : enregistrement, liste, exécution, rejet.

Le vérificateur de copiabilité s'assure qu'une commande destinée à l'opérateur est copiable d'un seul geste : une seule ligne (sans continuation), sous la largeur du terminal, sans verbe destructif non nommé, sans piège d'isolation de worktree. Il ne réécrit rien — il signale uniquement.

Contexte de démarrage de session

Le module de contexte de démarrage fournit un contexte initial identique aux sessions Claude, Codex et CLI Google :

  • Pour Codex (qui n'a pas de mémoire native) : injection de l'index mémoire au démarrage de session.
  • Pour le CLI Google : au premier événement de conversation, les producteurs de contexte (mémoire, cicatrices, brief de session) sont lancés et leurs sorties injectées.

En cas d'erreur, le comportement est fail-open.

Lecture de partition de skill

Le lecteur de partition de skill est un module pur (sans base de données, disque ni réseau) : il extrait et valide la section Partition d'un fichier de définition de skill (bloc YAML de cues typés), source d'une conduite. L'absence de partition retourne None ; une partition invalide lève une erreur de partition.

Façade de vision par CLI

La façade de vision par CLI interroge un agent IA (Claude, Codex, CLI Google ou Muse) pour analyser des images, selon une table de routage lue en base de données. En l'absence de route configurée, le système échoue de façon fermée — aucun repli implicite. En cas de panne, le message d'erreur indique le code retour, le détail JSON et la fin de la sortie d'erreur.

Muse Code est un fournisseur valide pour ce canal : l'appel utilise le mode lecture d'image, avec écriture, shell et outils web désactivés, dans un espace de travail non approuvé (aucun hook ni skill chargé).

Contrat canonique des événements de harnais

Le contrat canonique des événements définit le schéma stable des événements produits par les différents harnais (Claude Code, Codex, CLI Google, Muse Code). Il traduit les payloads natifs de chaque harnais vers un ensemble de capacités normalisées :

  • Cycles de vie : démarrage de session, soumission de prompt, avant/après outil, échec d'outil, événements d'agent, arrêt de run.
  • Pour chaque décision, le contrat encode la réponse dans le format attendu par le harnais cible — sans jamais élargir les permissions de l'hôte.
  • Le CLI Google n'a pas de canal de retour après l'exécution d'un outil ; ce comportement est documenté à partir d'une sonde réelle.

Le tick de mesure de contexte s'exécute après les outils de Codex et Muse via ce dispatcher ; le payload porte le harnais et le transcript natif.

Dispatcher portable des gardes de sécurité

Le dispatcher portable des gardes normalise les événements entrants via le contrat canonique, applique les gardes, et rencode la décision pour le harnais appelant. Il distingue trois familles :

  1. Gardes de plancher (P0) : fail-closed. Une sortie inattendue, un timeout ou une garde absente équivaut à un refus.
  2. Gardes de cicatrices : réflexes issus d'incidents passés documentés, identifiés par leur libellé.
  3. Gardes dérivées : pour les harnais non-Claude uniquement (Claude les exécute nativement), les gardes sont dérivées du fichier de configuration des hooks Claude et exécutées en parallèle (jusqu'à 16 workers). Un résultat ambigu est traduit en refus.

Après l'exécution d'un outil, les gardes de plancher sont ignorées ; seules les gardes dérivées post-outil s'appliquent.

Tout refus nomme sa règle : l'identifiant de la règle, le fichier qui la définit et la « voie » recommandée sont inclus dans le message de refus. Aucun octet du payload ni du message du hook n'entre dans ce message — il est statique. Cela évite qu'un agent parte inspecter son propre état de façon récursive.

Cicatrice 2026-09-25 : un refus sans indication de voie avait conduit un agent à lancer une recherche récursive dans son propre état, consommant 580 % de CPU et 3,9 Go de RAM.

Les gardes de lecture, de navigation web et d'appel d'agents sont portées vers Codex, le CLI Google et Muse Code via projection vers le contrat Claude. Les gardes de skill et de question à l'utilisateur restent propres à Claude.

Registre des credentials — source de vérité chiffrée

Le registre chiffré des credentials est la source de vérité unique pour tous les secrets de la plateforme. Les fichiers d'environnement (.env*) en sont des dérivés, conformément à une doctrine à cinq niveaux. Aucun secret ne doit exister dans un fichier d'environnement sans avoir été préalablement enregistré dans le registre.

Composants du registre

Composant Rôle Mode d'invocation
Worker de synchronisation des fichiers d'environnement Déchiffre les secrets du registre et réécrit les fichiers d'environnement au bon niveau, en supprimant les doublons inter-fichiers. Le registre héberge aussi les comptes web (niveau 0 coffre uniquement, jamais dérivés dans un fichier d'environnement). Worker / CLI (déclenché par l'API, pas de ligne cron directe)
Module de chiffrement Chiffrement et déchiffrement AES-256-GCM, compatible bit à bit avec les équivalents TypeScript. La clé maître est lue depuis l'environnement et n'est jamais journalisée. Un autotest vérifie l'aller-retour. Bibliothèque / CLI --selftest
Éditeur atomique de fichiers d'environnement Lecture, écriture (via fichier temporaire + remplacement atomique), suppression de variables et détection de doublons inter-niveaux. N'utilise jamais de substitution textuelle sur des secrets. Bibliothèque
Injecteur de variables runtime tenant Pose des variables dans le fichier d'environnement runtime d'un client sur son VPS sans qu'aucune valeur ne passe par le chat, un argument de commande ou la sortie standard. La saisie des valeurs secrètes se fait en mode aveugle (sans écho). Un dépôt de coffre peut fournir les valeurs à la place. Sans terminal de contrôle disponible, l'outil refuse clairement plutôt que de planter. CLI (geste opérateur)
Vigie de dérive des fichiers d'environnement Détecte les clés en double à valeurs différentes entre fichiers, les conflits d'ordre de chargement, et les interpolations de variables. En mode garde, refuse d'écrire une valeur divergente. Hook (avant écriture) / CLI

Gestion des comptes web tiers

Les comptes web tiers (identifiants de connexion sur des services externes) sont gérés par un ensemble de composants dédiés qui appliquent des invariants stricts :

  • Le mot de passe naît dans le processus (généré de façon cryptographiquement sûre), est chiffré immédiatement et ne sort jamais en clair.
  • Aucune option ne reçoit le mot de passe en argument.
  • La ligne de registre est créée en état pending avant la saisie, pour éviter toute fenêtre sans trace.
  • La rotation conserve l'ancienne valeur chiffrée jusqu'à confirmation explicite.
  • La révocation date le compte et vide ses blobs chiffrés.
  • Chaque opération génère une ligne d'audit sans valeur ni hash.

Un empreintier de mots de passe calcule une empreinte HMAC (dérivée de la clé maître) stockée dans un fichier local protégé. Cette empreinte permet à un hook de détection de détecter une saisie en clair sans jamais avoir accès au mot de passe réel.

Une vigie de cohérence vérifie à la demande (jamais en cron automatique) que le registre, l'empreintier et l'audit sont cohérents. Elle contrôle notamment que les comptes révoqués ont bien leurs blobs vidés et que l'empreintier n'est pas plus ancien que la dernière écriture.

Un collecteur de secrets serveur remonte automatiquement les secrets nés sur un serveur client vers le registre central. Chaque ligne de flotte déclare où vivent ses secrets ; le collecteur les lit côté serveur (en mémoire, sans affichage), chiffre et upsert uniquement si la valeur a changé.

Pont MCP — SEO en lot, tokens tenant, serveur d'outils multi-harnais

Trois façades gravitent autour du protocole MCP (Model Context Protocol) : un client HTTP pour les opérations SEO en lot vers un client, un émetteur de token tenant sécurisé, et un serveur d'outils partagé entre tous les harnais.

Composant Rôle Mode d'invocation
Émetteur de token MCP tenant Génère un token MCP (32 octets aléatoires encodés en base64url), enregistre son hash en base de données et range le clair dans le fichier d'environnement local (jamais sur la sortie standard ni dans un fichier versionné). CLI (geste d'infra ponctuel)
Serveur MCP stdio d'outils communs Serveur JSON-RPC 2.0 écrit à la main, exposant les gestes de la maison aux trois harnais. Actuellement un seul outil en lecture : mesure d'adhérence d'un projet. CLI (serveur stdio)
Client MCP SEO en lot Pont HTTP par lequel les automates SEO écrivent les métadonnées d'une catégorie via l'outil dédié, sans accès SQL direct. Échoue bruyamment si le token est absent. Bibliothèque

Transport SQL et accès en lecture/écriture gardé

Un ensemble de façades assure l'accès contrôlé à la base de données de la flotte :

Composant Rôle Mode d'invocation
Lecteur SQL multi-requêtes Exécute N requêtes SQL en un seul appel, en lecture seule, avec résultats étiquetés et bornés. Remplace les séries de commandes SQL consécutives. Un mode --role-lecture force la connexion avec un rôle sans droit d'écriture ; en l'absence de ce rôle, l'appel échoue sans repli. CLI / Bibliothèque
Transport SQL unique Point d'accès unifié vers une cible de la flotte. Le SQL est transmis par entrée standard (jamais en argument de commande). Ne décide pas si la cible est en production ou en dump. Bibliothèque
Écriveur SQL sous garde Écriture ponctuelle avec garde préalable (dump attesté, fail-closed). Par défaut, opère par ROLLBACK (dry-run). Exige une clause RETURNING sur les mises à jour et suppressions. Refuse les DDL. CLI / Bibliothèque

Résolution de tenant — scope de session et cible d'écriture

La vérité unique sur l'identité d'un client, la session qui le pilote et la machine sur laquelle on écrit est centralisée dans le registre de la flotte. Aucun identifiant en dur, aucune adresse IP codée directement dans les scripts.

Composants de résolution

Composant Rôle Mode d'invocation
Résolveur unique de tenant Point d'entrée unique pour identifier un client de la flotte. Fail-closed sur toute ambiguïté. Vérifie les préconditions (base de données, Nuxt, PrestaShop, overlay, seed) avant d'autoriser une conduite. CLI / Bibliothèque
Scope de session Répond à « quel client pilote cette session ? » : lit la variable d'environnement de session, puis un fichier de scope temporaire par session, puis conclut à l'absence de scope. Expose l'objectif de spawn de la tentacule. CLI / Bibliothèque
Cible d'écriture tenant Répond à « sur quelle machine écrit-on ? » : résout SSH, conteneur, base de données, port Nuxt et domaine depuis le registre de la flotte. Un jeton ambigu (désignant plusieurs clients) n'est jamais résolu au premier venu — c'est une erreur. La résolution par défaut survit à une base de données hors service. Bibliothèque / CLI
Cloisonnement MCP par tentacule Fournit la configuration MCP et les variables d'environnement requises pour le client de la session active. Le fichier MCP du dépôt reste vide ; chaque session charge uniquement les serveurs MCP de son client. CLI
Résolution SSH d'un VPS client Résout les paramètres SSH d'un serveur client (utilisateur, chemin de clé, domaine) depuis le registre de la flotte, à partir d'un codename. Né d'un incident où une clé SSH codée en dur avait provoqué deux nuits de faux diagnostic. Bibliothèque / CLI
python3 -m <resolveur-tenant> <nom-du-client> --needs db,nuxt,prestashop

Commit isolé et intégrité de l'index Git

Le commit isolé par verrou protège l'index Git partagé contre les collisions entre sessions parallèles : chaque commit est réalisé sous un verrou global, ce qui empêche une session de corrompre l'index d'une autre session travaillant simultanément.

Famille orchestration — Vue d'ensemble

Ce groupe de composants forme le cœur opérationnel de l'orchestration agentique : réception et classification des demandes entrantes, spawn des agents, suivi des tâches, gestion des coûts et coordination des équipes de ventouses.

Doctrine d'invocation : tout spawn d'agent headless passe obligatoirement par le pont de spawn node-pty. L'invocation directe du CLI de l'agent est interdite. Cette règle est contrôlée mécaniquement.

Composants principaux

Composant Rôle Mode d'exécution
Collecteur de boîte aux lettres Atlas Poll IMAP de la boîte entrante toutes les 1 min. La porte de validation DKIM délègue au verdict du premier en-tête Authentication-Results posé par le MTA de confiance, avec exigence d'alignement entre le domaine signataire et le domaine From: (fail-closed). cron
Classificateur d'intent Atlas Classe chaque message entrant parmi : run (léger ou plan), question, noise, negociation, conseil. L'intent chantier n'est plus auto-classé : un run de complexité plan le couvre ; la promotion en vrai chantier reste possible manuellement si le run s'avère non-testable ou irréversible. lib / CLI
Calibration du classificateur Calibration mensuelle du classificateur d'intent. Aucune planification automatique active — lancement manuel uniquement. CLI (manuel)
Moteur de spawn Atlas Spawn headless de l'agent pour traiter les emails classifiés. Timeout 40 min ; anti-course : relecture du journal de flux si l'événement de résultat est perdu au drain stdout ; maximum 3 spawns par cycle ; modèle sonnet par défaut. worker
Extracteur de pièces jointes Extraction et scan antivirus des pièces jointes des emails entrants. lib
Expéditeur Atlas Envoi de réponse par email avec triple correspondance anti-usurpation. CLI
Compositeur de réponse client Machine à états (étape T3 du flux de réponse client) : compose l'email « travail terminé » avec le message client proposé dans un bloc délimité éditable, extraction déterministe des modifications, rédaction adaptée au registre du client. CLI
Expéditeur de réponse client Machine à états (étape T1) : envoi à jeton unique (valable 24 h) de la réponse au client final, après validation explicite de l'opérateur, avec preuve QA et capture annotée en pièce jointe. CLI
Dispatcher de réponse client Machine à états (étape T4) : route un email entrant (transfert de l'opérateur) vers la bonne étape selon le marqueur sujet et le statut en base. Décision pure testable séparée de l'exécution. CLI
Cycle ReAct par tâche Exécute le cycle Observation–Réflexion–Action pour chaque tâche active (doctrine chantier-v2). worker
Graveur automatique de cicatrices ReAct Grave automatiquement les cicatrices depuis les patterns ReAct. Déclenché en mode événementiel par le worker de tâches à chaque sortie en erreur — aucune planification cron. lib (event-driven)
Worker de tâches Démon central de l'autonomie (boucle d'exécution des tâches) :
  • Spawn des agents via le pont node-pty, jusqu'à 4 chantiers en parallèle.
  • Reaper anti-zombie : bail de 240 min (invariant : le bail doit excéder au moins 2× le budget max de spawn, gardé mécaniquement par un test automatisé) ; timeout de spawn jusqu'à 7 200 s.
  • Sélection du harnais : le harnais du run est celui de la tâche s'il est posé, sinon celui de l'agent, parmi les harnais disponibles (avec repli fail-safe sur le harnais par défaut pour toute valeur inconnue).
  • Contexte de spawn enrichi : vue complète chantier/travail/tâche injectée à chaque run chaînée, pas uniquement à la première.
  • Reprise de session : clé par tâche et par agent — un retry reprend, une nouvelle tâche repart fraîche avec le contexte injecté ; un identifiant de session sauvegardé n'est repris que par le harnais qui l'a produit.
  • Fenêtre de log QA : tête + queue (non une simple troncature de tête), pour éviter que la QA décrive sa propre troncature.
  • Isolation d'environnement : chaque run part d'un environnement propre, sans héritage des variables de la session parente qui dicterait à l'agent de republier une surface non ciblée.
  • Les harnais à forfait fixe ne reportent pas sur les harnais à facturation à l'acte en cas de saturation.
worker
Outil de déblocage assisté Atlas rédige un plan de déblocage pour une tâche bloquée. CLI
Détecteur de blocages automatique Détecte les tâches bloquées et déclenche automatiquement un spawn Atlas pour les débloquer. cron
Détecteur de dérives Pause automatique des tâches dérivantes (>3 h sans mise à jour ou >150 000 tokens) et surveillance de flotte multi-signatures :
  • S1 : coût global dépassant le seuil configuré.
  • S2 : boucle détectée.
  • S3 : respawns répétés.
  • S4 : explosion de créations (gel des chantiers fautifs sur option).
  • S5 : bloqueur orphelin.
  • S6 : chantier zombie.
  • S7/S8 : enveloppes et sommes des pools de ventouses (alerte seule).
  • S9 : série d'échecs d'un harnais à forfait — alerte dès N échecs consécutifs dans la fenêtre de 48 h ; un quota épuisé sur un harnais forfaitaire ne génère aucun coût mais fait échouer les runs silencieusement.
Cron toutes les 15 min ; kill-switch configurable.
cron
Chat console — questions Tour de conversation console pour le mode Questions (Atlas). CLI
Chat console — runs scopées Tour de conversation console pour les runs scopées (Atlas). Le garde-fou du mode négociation renvoie toute prise de rendez-vous vers le lien souverain de l'opérateur. CLI
Formalisateur de lettre de mission Worker hôte pour formaliser la lettre de mission d'un chantier commercial. worker
Résumé ReAct quotidien Résumé quotidien des cycles ReAct. Ligne cron désactivée ; lancement manuel uniquement tant qu'elle n'est pas réarmée. CLI (cron désarmé)
Pont CLI→cockpit — liaison de session Déclare ou révoque le lien entre une session interactive et un chantier dans un fichier d'état temporaire. lib / CLI
Pont CLI→cockpit — hook d'événement Invoqué par le hook PostToolUse : lit l'entrée JSON, synthétise un événement de flux et le pousse dans la table des événements si un lien est actif. lib (hook)
Pont CLI→cockpit — cycle de vie Allume et éteint les surfaces cockpit selon l'état d'exécution : pulse running vers la table d'exécution, carte doing/done vers le statut des tâches, poll toutes les 5 s. lib
Émetteur cockpit ad hoc Émet à la demande un fragment message ou thinking dans la timeline cockpit depuis la persona du lien actif. CLI / lib
Journal de négociation Émet des événements typés et signifiants (note, strategie, decision, objection, next-step…) dans la timeline du pipeline commercial — jamais de brut shell. CLI / lib
Démon HTTP de pilotage CLI Démon HTTP local exécutant des commandes tmux pour le compte de l'API du hub (isolation conteneur → passerelle réseau → démon hôte → tmux). Authentification par jeton en comparaison à temps constant + liste de blocage défense-en-profondeur des patterns destructifs.
  • Multi-profil : claude, glm, codex, antigravity, muse — whitelist validée avant tout accès shell.
  • Endpoints : /status, /capture, /start, /send-keys, /switch-camp, /switch-model, /profiles, /git-health, /handoffs, /system, ainsi que des proxys lecture seule vers d'autres composants.
  • Cycle de vie « Relâchement » : POST /stop avec keep: true met la session en veille douce (session tmux tuée, espace de travail et transcripts conservés, date de fermeture non posée) plutôt qu'une fermeture définitive.
  • Handoff avant bascule : si aucun handoff récent n'est disponible, la session sortante est invitée à l'écrire avant la bascule, dans un délai borné (fail-open).
  • Gauge de santé de déploiement : /git-health compare le commit réellement servi à la branche de préprod, jamais un faux zéro.
  • Timeout de démarrage de 45 s pour les routes /start et /switch-camp.
  • Plafond de ventouses en aspiration : 40 (arbitrage opérateur).
worker
Mesure d'âge du code exécuté Vérifie, pour un processus long, que le code sur disque est bien celui chargé au démarrage : empreinte de contenu des modules (le timestamp ne sert que de déclencheur, un déploiement peut réécrire le checkout sans changer un octet). Rend uniquement la mesure (code_le ; valeur 0.0 = âge inconnu, jamais « à jour »). Importé par le démon de pilotage et le worker de déploiement. lib
Commandes humaines à la demande Une ventouse peut poser une commande qu'elle demande à l'opérateur de lancer : affichée en bouton dans le cockpit ; au clic, la commande est tapée dans le pane concerné. Deux modes : déclarée manuellement ou détectée dans la dernière réponse de l'agent (hook Stop). Une ventouse peut cibler une autre ventouse. Garde anti-destructif avant tout envoi. CLI / hook Stop
Pont de spawn node-pty Spawn du CLI agent via node-pty avec drain stdout avant fermeture du processus (évite la troncature de pipe) ; timeout SIGKILL câblé proprement avant onExit. lib
QA post-déploiement Atlas QA à deux niveaux après chaque déploiement Atlas. cron / CLI
Tableau de bord CLI live Dashboard CLI en temps réel des spawns de la boîte entrante Atlas. CLI
Worker de spawn fix-bot Worker détaché qui spawne un agent de correction sur un bug découvert. worker
Tick d'autonomie quotidien Cold-start des chantiers en mode autonome : génère la première tâche en attente pour chaque chantier éligible, sous contrôle de budget et kill-switch. Tourne toutes les 2 min mais ne génère des tâches que dans la fenêtre d'autonomie configurée en base (pilable jour par jour par un skill dédié). cron (toutes les 2 min, --live)
OCR local sur images Extraction de texte par OCR local (Tesseract) sur les images en pièce jointe des emails Atlas — sandwich anti-injection de prompt, maximum 3 images, 5 Mo. lib
Surveillance du verrou de collecte Alerte si le verrou du collecteur de boîte aux lettres est présent depuis plus de 10 min (verrou zombie). cron (toutes les 15 min)
Hook d'identité tenant Hook PreToolUse:Agent : détecte les identifiants de tenant cités au spawn d'un sous-agent et injecte leur carte d'identité (domaine, vertical, propriétaire) — anti-confabulation. hook
Gestionnaire d'escalade Escalade active des tâches bloquées : email immédiat à l'opérateur + spawn Atlas qui décide retry / rescope / intervention humaine requise. CLI
Lieur de réponse d'escalade Lien déterministe entre la réponse de l'opérateur et une escalade : correspondance par identifiant de tâche ou en-tête In-Reply-To, résolution approve / reject / instruction. lib
Lanceur multi-harnais Lanceur d'un run d'agent via un harnais alternatif (Codex ou Antigravity) : réécrit leur flux au format stream-json standard pour que le worker de tâches n'y voie aucune différence. Refuse les templates bornés par liste de commandes. Résolution du binaire robuste hors PATH cron. Harnais Muse inclus. worker
Façade shell du catalogue de routage LLM Façade shell du catalogue de routage LLM en base : default, tier <opus|sonnet|haiku>, suffix <modèle>, known <modèle>, split <camp>. Couche pure + couche transport (docker, timeout 3 s). Parité avec le registre Python mesurée par un test automatisé. lib / CLI
Résolveur de maquette de référence Désigne la maquette de référence parmi les pièces jointes d'un email : trois filtres (lisibilité PIL dont PSD, format desktop/mobile, nom avant/après), l'analyse visuelle tranche en dernier recours. lib
Compositeur de planche de preuve Compose une planche de preuve (PIL) : captures côte à côte sous un bandeau numéroté des points traités et du verdict de vérification visuelle, sans cadres dessinés. lib / CLI
Registre de camps et routage modèle Registre de camps et décision de routage de modèle partagée : précédence du veto client sur la doctrine du camp sur le modèle recommandé. Résolution du modèle de spawn et du modèle juge, vérification de santé du proxy. Importé par une dizaine de composants. lib
Garde de budget mensuel Refuse de générer ou d'exécuter du travail autonome au-delà du budget mensuel. Compte les dépenses réellement facturées (hors coût API-équivalent du forfait) contre le budget configuré en base. Fail-open ; kill-switch configurable. lib / CLI
Snapshot quotidien de rapport Pose un snapshot quotidien dans la table de rapport du matin et passe à resolved les lignes des jours précédents, pour qu'un capteur bavard ne noie pas les alertes. Les alertes ne passent pas par cette table. lib
Arbitre de poches de forfait Arbitre les deux poches de forfait fixe : bascule un run sur l'autre poche quand l'une est saturée, bloque seulement si les deux le sont. Lecture des jauges en fail-open. lib
Exécuteur de scripts sans LLM Deuxième exécuteur du pipeline d'autonomie : exécute des lignes de commande déclarées sans appel LLM (0 €), sans shell, via une liste d'autorisations limitée aux fichiers suivis par git. Code retour 126 si refus, 127 si pas de commande. lib
Worker de run console Worker Python détaché qui exécute un run de type console : lance le pont de spawn, persiste chaque événement, puis met le run à done ou failed. Refuse de spawner si le plafond de coût est absent. worker

Sous-famille — Pont CLI vers cockpit

Pipeline ajouté pour relier la session interactive de l'agent au cockpit de suivi en temps réel. La session peut déclarer quel chantier elle pilote ; un ensemble de composants anime alors la vue du chantier via la table des événements d'agent. Un kill-switch désactive l'ensemble sans interférer avec les runs.

Le pont de spawn node-pty reste le seul moyen autorisé de spawner un agent headless. Toutes les invocations programmatiques passent par lui.

Composant Rôle Mode d'exécution
Liaison de session (pièce 1/3) Déclare ou révoque le lien entre une session interactive et un chantier dans un fichier d'état temporaire. lib / CLI
Hook d'événement cockpit (pièce 2/3) Invoqué par le hook PostToolUse : lit l'entrée JSON, synthétise un événement de flux et le pousse dans la table des événements si un lien est actif. lib (hook)
Cycle de vie cockpit (pièce 3/3) Allume et éteint les surfaces cockpit selon l'état d'exécution : pulse running vers la table d'exécution, carte doing/done vers le statut des tâches, poll toutes les 5 s. lib
Émetteur cockpit ad hoc Émet à la demande un fragment message (💬) ou thinking (💭) dans la timeline cockpit depuis la persona du lien actif. CLI / lib
Journal de négociation Émet des événements typés et signifiants dans la timeline du pipeline commercial — jamais de brut shell. CLI / lib
Diagnostic du pont Diagnostic opérationnel du pont CLI→cockpit : état du lien, des hooks, du kill-switch et du dernier événement émis — lecture seule, aucun effet de bord. CLI
Smoke-test du pont Isole le lien sur un fichier temporaire, valide la synthèse d'événement et le masquage anti-fuite en pur Python (pas d'écriture en base). CLI (test)

Sous-famille — AgentRunner multi-LLM

Architecture d'exécution agentique provider-agnostique : un contrat commun AgentRunner et N backends routés par travail. Tous les événements alimentent la table des événements d'agent (cockpit) ; les coûts sont tracés via la table de coûts croisée au catalogue de tarification (zéro prix en dur dans le code).

Composant Rôle Mode d'exécution
Contrat commun AgentRunner Définit le contrat partagé AgentRunner et implémente le backend du CLI agent via le pont node-pty, sans toucher au worker de tâches. Expose les fonctions get_runner() et record_cost(). lib
Socle FinOps multi-LLM Calcul du coût par couple (fournisseur, modèle) depuis le catalogue de tarification, agrégat par chantier avec ventilation par marque. CLI de diagnostic. lib / CLI
Routeur de marque par travail Lit le champ runner du travail et dispatche vers le backend nommé, avec repli sur le backend par défaut en cas d'erreur de résolution. lib / CLI
Backends alternatifs (Mistral, DeepSeek, Gemini) Boucle agentique maison provider-agnostique : appelle l'API LLM directement (format OpenAI-compatible), réutilise les primitives de résultat, de persistance d'événements et de calcul de coût. lib
Cron de rejeu premium Sonde le forfait principal (1 token), rejoue les tâches marquées replay_on_reset (basculées sur marque de secours lors d'un plafonnement) ; sans effet si le forfait est encore épuisé ou s'il n'y a rien à rejouer. cron

Sous-famille — Pool de ventouses (fan-out)

Une équipe de ventouses peut être spawnée d'un geste depuis le cockpit terminal. Le pool porte une enveloppe commune avec deux bornes distinctes : un plafond de tours (messages échangés) et un plafond de coût en euros — aucun des deux ne remplace l'autre. Les messages échangés entre ventouses d'un même pool sont typés et conservés en base ; seuls des champs courts voyagent dans le payload, les données volumineuses passent par une référence d'artefact.

Composant Rôle Mode d'exécution
Messagerie typée du pool Messages typés d'un pool de ventouses, adressés par session et conservés en base. CLI : send --to <id> --kind <type> --payload '{...}', inbox, ack. Chaque payload valide passe par un filtre déterministe « étage 0 » (moins d'1 ms, zéro token, avant insertion) qui vérifie les invariants géométriques extraits du payload : caractéristique d'Euler, angle sliver minimal, auto-intersections, quads dégénérés, symétrie. Un message hors plancher n'est jamais inséré ni ne déclenche d'appel LLM. CLI / lib
Compteur de budget de pool Mesure la consommation réelle (tokens facturés, tours, euro API marginal) en face du plafond du pool.
  • Au forfait, l'euro équivalent n'est qu'un indicateur : le gel porte sur le plus tendu des tours et de l'euro API marginal (ratio 1,0), alerte à 0,8.
  • Dégel automatique une seule fois par pool : jusqu'à 2× le plafond sur les deux cadrans, avec marges absolues et butées.
  • Portes de réouverture : sur ordre gravé, après réussite, ou relèvement de plafond (pool vivant).
  • Pause à 90 % du quota du forfait.
  • Alerte flotte 24 h configurable.
lib / CLI
Wrapper de lancement de ventouse tenant Branche les seuls serveurs MCP du tenant, ajoute la configuration MCP stricte aux ventouses scopées, puis passe la main au binaire du profil. Fail-open intégral. CLI
Messagerie interpool Façade de la messagerie entre pools distincts. Envoi, boîte de réception, accusé de réception sur la table dédiée. Un message est un constat, jamais une tâche ; les garde-fous vivent dans les déclencheurs SQL. skill / CLI
Spawn de ventouse par une ventouse Une ventouse ouvre une nouvelle ventouse dans le bras de son choix avec un objectif persisté. Refus : appelant inconnu, bras/mode incompatibles, slug déjà vivant ou bras saturé. CLI / skill
Auto-réponse de ventouse Frappe dans une ventouse l'une des réponses proposées par la modale « Boutons », automatiquement, toutes les N minutes, jusqu'à P tours sans geste humain.
  • Jamais pendant un tour actif (deux captures, invite vide, aucune file).
  • Jamais une validation (liste fermée de patterns interdits : valide, envoie, ship, publie, deploy, merge, push…).
  • Toujours signée (préfixe 🔁 [auto]).
  • Se tait pendant une question d'un traitement en attente.
  • Sans LLM. Kill-switch configurable.
cron (toutes les minutes, verrou) / CLI
Critère d'arrêt du pool Liste fermée de critères d'arrêt du pool (état vert/rouge/en cours/à confirmer, maximum 24 lignes). Chaque ligne peut porter une échéance : le battement dort tant que le pool n'attend qu'une échéance future. Seul le juge écrit ; toute ligne qui défère à l'opérateur est refusée. La preuve de réussite est fournie à la clôture. CLI / skill
Battement du pool Réveil périodique du chef de pool (Atlas par défaut) pour les pools calés mais inachevés et sous budget.
  • Dort tant que le pool n'attend qu'une échéance du critère.
  • Alerte à 72 h sans cycle, escalade à 168 h (le sommeil sur échéance est alors interdit).
  • Arrêt après 3 réveils sans progrès + alerte à l'opérateur.
  • Clôture automatique si le critère est atteint.
  • Zéro LLM. Kill-switch configurable.
Cron toutes les 5 min (--live ; sans --live = dry-run).
cron / skill
Recrutement dans un pool Le chef d'un pool vivant recrute un agent dans son bras, sous l'enveloppe du pool. Coût d'amorçage réservé sur l'enveloppe, rendu si le spawn échoue. Refus : pool gelé/fermé, agent déjà membre, bras plein, hors budget. CLI (session du chef) / skill
Réconciliation des ventouses Referme en base ce que la réalité a déjà fermé, en deux passes :
  1. Toute session ouverte dont la session tmux correspondante n'est plus à l'inventaire reçoit une date de fermeture (grâce de 30 min pour les sessions naissantes).
  2. Tout pool running laissé sans aucun membre vivant passe closed.
Garde-fous : une bascule de harnais n'est pas prise pour une mort ; un second regard avec pause de confirmation avant fermeture ; inventaire muet au second regard ⇒ aucune fermeture. N'arrête aucun pane, ne touche aucun espace de travail. Cron 4 fois par heure (--live, timeout 120 s).
cron
Filtre géométrique Système 1 Étage 0 local : extrait par regex les invariants géométriques d'un message de pool et les vérifie en moins d'1 ms / 0 token avant tout dispatch LLM. Contient aussi le détecteur de boucle/blocage et le compilateur de grammaire de contrainte. lib
Dispatcher d'démarrage de messagerie Écoute les notifications PostgreSQL de la messagerie inter-ventouses (balayage de secours) ; n'envoie que le prompt constant de réveil, seulement si le pane est prêt (double vérification), avec cadence croissante et plafond. worker (service systemd)
Restauration des ventouses au boot Rejoue après un redémarrage les ventouses restées ouvertes en base : les remet dans l'ordre des bureaux et relance chacune avec reprise de session (espace de travail isolé uniquement) ; s'arrête au premier refus de plafond. worker (service systemd, démarrage unique au boot)
Page souveraine de ventouse Gère la page publique d'une ventouse (enregistrement de la publication, rappel de l'URL au démarrage, relance aux jalons commit/deploy avec silence de 30 min). Fail-open. lib (hook PostToolUse + SessionStart)
Handoff avant bascule de harnais Si aucun handoff rempli et récent n'est disponible, demande à la session sortante d'en écrire un avant la bascule, dans un délai borné par le budget client du switch (fail-open, ne bloque jamais la bascule). Kill-switch configurable. lib
Compteur de tokens de session Mesure les tokens cumulés de la session pour la barre de statut : lecture incrémentale du transcript (déduplication par identifiant de message), repart à zéro au /clear. Cache temporaire pour éviter de relancer Python à chaque relevé sur une session au repos. Silencieux en cas d'erreur. CLI (barre de statut) / lib
Métriques système de l'hôte Santé de l'hôte pour l'onglet Système du cockpit terminal : RAM disponible, pression PSI mémoire/CPU/io, CPU par cœur, charge, disque, et consommation RSS+CPU de l'arbre de processus de chaque session tmux active. Échantillonneur en thread (10 s), anneau de 6 h en mémoire (pas de table, pas de cron — repart à zéro au redémarrage du démon). lib (importé par le démon de pilotage CLI)
Ouvreur de ventouse Ouvre une ventouse depuis une session, par la route du bouton Spawn du cockpit terminal. Options : slug, bureau, objectif, mission, mode tronc ou espace de travail isolé, dry-run. Attend l'invite de l'agent avant de taper la mission. Peut fermer une ventouse existante. CLI / skill
Lanceur du profil Codex natif Lanceur natif du profil Codex :
  • Refuse de démarrer si le binaire résout vers l'ancien wrapper legacy (anti-régression silencieuse).
  • Sonde les transcripts de sessions antérieures pour proposer une reprise (verdict oui/non uniquement, sans exposer le contenu).
  • Juste avant le lancement, génère un brief d'agent (AGENTS.md) dans le répertoire de la ventouse (fail-open : si la base est indisponible, Codex démarre normalement sans brief).
  • Autres gardes : version du binaire, état de connexion, périmètre du dépôt approuvé, conformité des hooks.
CLI
Façade de consommation des CLI agentiques Mesure unique de consommation des CLI agentiques : lit les transcripts locaux des agents, dédupliqués sur (identifiant de message, identifiant de requête). Rend la fenêtre de 5 h ancrée et les 7 derniers jours, ventilés par camp.
  • Mode producteur (--refresh) : seul à payer le scan et écrire le cache.
  • Mode lecteur (--cache-only) : appelé par le démon en moins de 25 s.
  • Quota Codex live lu via le transport partagé de l'app-server.
  • Quota Muse Code : lecture d'état normalisée, lecture live uniquement à la demande (jamais dans le cron).
Cron toutes les 10 min (--refresh sous verrou).
cron + CLI

Sous-famille — Adaptateurs du harnais Codex

Chaîne d'adaptateurs pour le harnais Codex : transport JSON-RPC → registre de sessions → démon de pilotage ; brief d'agent et garde de contexte branchés au lancement et en hook.

Composant Rôle Mode d'exécution
Transport JSON-RPC Codex Transport JSON-RPC sur stdio vers le serveur applicatif Codex : gère le cycle de vie du processus et le protocole, ne décide ni mission, ni profil, ni outils. Importé par plusieurs composants. lib
Registre de sessions Codex Registre de cycle de vie des sessions Codex : un processus par ventouse, un thread associé, tours, événements, approbations, arrêts. Valide session, modèle, politique d'approbation et périmètre. Chemin expérimental — tmux reste le runtime par défaut. lib
Générateur de brief d'agent Codex Génère le fichier de brief (AGENTS.md) dans le répertoire de la ventouse depuis les données de session, d'agent et de pool (persona, mission, pool). Fail-open absolu : aucun secret, aucun fichier si la base est indisponible. CLI (avant le lancement de Codex)
Garde de contexte Codex Lit la queue du journal de tokens et, au-delà du seuil configurable (80 000 tokens par défaut), refuse tout nouvel outil pour imposer une compaction. Pose une demande de remise à zéro de session. Fail-open sur toute erreur. hook (PreToolUse, timeout 6 s)

Sous-famille — Meta-harnais portable (Claude / Codex / Antigravity)

Registre de profils, paquet transportable de skills, relais des hooks vers les harnais alternatifs et sentinelle de leurs sessions. Le paquet et le registre sont des artefacts de transport et de découverte — jamais des commandes d'activation.

Composant Rôle Mode d'exécution
Registre de profils de harnais Registre technique portable des harnais (identifiant, fournisseur, runtime, camp, transport). Le manifeste public ne contient ni commande, ni chemin, ni secret. Cinq harnais natifs : Claude, GLM, Codex, Antigravity, Muse. lib / CLI
Constructeur de paquet de skills Construit ou valide un paquet portable de skills : profils du registre, skills lus en base, contrôle des chemins absolus, des remontées de répertoire et des motifs de secrets, empreinte SHA-256. Artefact de transport, jamais d'activation. lib / CLI
Sentinelle des sessions d'agents Tue les outils de recherche (grep, rg, find…) descendants d'une CLI d'agent au-delà du timeout configuré et signale les CLI trop gourmandes en RAM. Purge les journaux de tâche dépassant la rétention. Sans --apply : constat seul, aucun LLM. cron (toutes les 5 min pour la surveillance ; quotidien pour la rétention)
Relais de cycle de vie vers les harnais alternatifs Relaie les hooks de cycle de vie (Stop, UserPromptSubmit, SessionStart) vers Codex et Antigravity : payload projeté au contrat standard, transcript natif converti, hooks en parallèle avec leur timeout, fail-open. Muse projeté en transcript standard pour le hook Stop. Les transcripts portent les données d'usage et les compactions. hook (Codex et Antigravity)

Sous-famille — Muse Code, 5e harnais natif de ventouse

Muse Code (Muse Spark 1.3, abonnement Power) rejoint les quatre harnais existants comme CLI de ventouse. Le fournisseur refuse les adresses IP de datacenter : tout appel sans interface résidentielle passe par un relais local, jamais directement. Les hooks P0 sont projetés vers le fichier de hooks Muse ; la parité est mesurée automatiquement (zéro manquant sur les quatre harnais).

Composant Rôle Mode d'exécution
Lanceur borné Muse Code Lanceur de Muse Code : valeurs du hub validées par regex avant passage comme arguments (jamais eval) ; hooks de travail activés dans tous les modes (--trust-workspace) ; modèle forcé ; mise à jour automatique désactivée ; garde anti-profil contributeur ; trafic routé via le relais HTTP local. worker (lancé par le wrapper tmux profil muse)
Relais HTTP local pour Muse Proxy HTTP CONNECT local devant le tunnel SOCKS sortant vers le réseau résidentiel. Gardes : écoute locale uniquement, méthode CONNECT uniquement, port 443 uniquement, hôtes du fournisseur uniquement. Tunnel absent ⇒ 502 (jamais de repli en sortie directe). worker (service systemd)
Script d'installation du relais Installe (idempotent) les deux services du relais Muse (tunnel SOCKS et proxy HTTP), vérifie la connectivité vers le fournisseur et le refus d'hôtes hors liste. Retrait documenté en tête de fichier. CLI (geste opérateur)
Tour Muse via serveur applicatif (MSP) Exécute un tour Muse Code via le protocole JSON-RPC du serveur applicatif Muse : lit les événements d'usage (fenêtre 5 h + semaine, tokens de session), extrait la réponse du dernier message de l'agent de la session racine (les sessions enfants sont ignorées). Ne décide ni du prompt ni de la politique. lib

Sous-famille — Liaison ventouse du cockpit In-Situ

Le cockpit In-Situ d'un site client est relié à la mothership : une demande tapée dans le cockpit est remise à la ventouse du tenant, qui la traite avec le LLM de son harnais et répond dans le cockpit. La mothership n'expose aucun port public : elle ouvre une connexion SSE sortante vers chaque site client et répond par des POST signés (clé partagée stockée dans la configuration du tenant, jamais affichée). Aucun LLM dans le transport. Une demande dont l'identifiant est déjà connu ne sera remise qu'une seule fois, même en cas de rejeu.

Composant Rôle Mode d'exécution
Service de liaison In-Situ Maintient une connexion SSE par tenant (reconnexion avec backoff exponentiel 1→60 s, liaison déclarée morte après 45 s sans ping) et gère le cycle de vie des demandes entrantes :
  • Types d'événement : ack, progress, reply, done, error, refresh, artifact.
  • Deux modes : design et dev (demande v1 ou mode inconnu ⇒ design, le plus restrictif).
  • Pièces jointes : 3 images maximum, 700 Ko, type vérifié sur les octets (PNG/JPEG/WebP), empreinte SHA-256 comparée, scan antivirus — sans verdict rien ne passe.
  • Artefacts : HTML ≤ 256 Ko, image ≤ 600 Ko, titre ≤ 160 caractères.
  • Garde de coût : le drapeau publicDemo posé par le site client est stocké et interdit les artefacts image payants pour les demandes de démonstration publique.
  • Un accusé refusé par le site est journalisé.
service (systemd, à confirmer) / CLI
Coupe-circuit des outils payants Coupe-circuit des outils à coût variable : lit le drapeau d'environnement de démonstration et lève une exception avant tout appel réseau ou lecture de credential. Câblé sur les façades payantes identifiées. lib
Relais déterministe In-Situ (antérieur à la liaison SSE) Tire par accès distant les prompts en attente des cockpits In-Situ d'un serveur cible, les passe en état delivered et notifie la ventouse concernée. Mode unique ou surveillance périodique. Relation avec le service SSE non tranchée dans le code. CLI
Façade de réponse In-Situ Réponse de la ventouse à un prompt In-Situ : identifiant du prompt, statut (done ou needs_code), contenu de la réponse, sélecteur CSS optionnel avec surcharge CSS en direct. Même transport distant que le relais. CLI

Wrapper tmux multi-profil

Le wrapper tmux de pilotage CLI sélectionne la session tmux et le binaire au lancement selon le profil demandé :

  • claude : session synedre-claude, binaire agent principal via variable d'environnement.
  • glm : session synedre-glm, proxy local vers le modèle GLM (jamais le service Z.ai en direct).
  • codex : session synedre-codex, CLI Codex natif.
  • antigravity : session synedre-antigravity, CLI Antigravity (agy, Gemini), effort low / medium / high.
  • muse : session synedre-muse, lanceur borné Muse Code.

Sous-commandes disponibles : start, status, list, send-keys, send-ctrl, send-special, capture, stop, stop-keep. La sous-commande stop-keep tue la session tmux en conservant l'espace de travail et les transcripts (conçue pour la bascule de harnais, réutilisée par le bouton « Relâchement » du cockpit). La reprise --continue est ignorée lors d'une bascule vers ou depuis Codex/Antigravity (formats de transcript incompatibles — toujours une nouvelle conversation). Plafond actuel : 40 ventouses en aspiration simultanée.

Camp des harnais à forfait fixe : les profils Codex et Antigravity n'appartiennent ni au camp occident ni au camp orient — le registre de camps ne les connaît pas, et le garde cross-camp se tait plutôt que d'inventer un verdict sur un catalogue vide.

Famille Chantiers — workflow en sept étapes

La famille Chantiers regroupe l'ensemble des composants qui gouvernent le cycle de vie d'un chantier : de sa création depuis un email entrant jusqu'à sa clôture automatique après validation QA. Le point d'entrée officiel est la commande bin/chantier-from-email, exposée également via le skill /chantier.

Composants principaux

Composant Rôle Mode d'invocation
Créateur de chantier depuis email Crée un chantier client à partir d'un email entrant (étapes 0a → 4 sous contrainte) CLI / skill /chantier
Suivi live CLI Affiche en temps réel les événements agents sur un chantier actif dans le terminal CLI
Générateur de lettre de mission Produit un draft de lettre de mission pour un chantier Bibliothèque
Gestionnaire d'équipes Gère les équipes recrutées par chantier Bibliothèque
Enregistrement de session Active Record pour les sessions d'agent attachées à un chantier Bibliothèque
Pipeline d'explosion discovery Pipeline LLM qui transforme automatiquement une discovery en tâches d'implémentation Worker
Audit Atlas post-explosion Vérifie la cohérence du graphe Atlas après l'explosion d'une discovery CLI
Audit de pertinence Évalue si les chantiers actifs restent pertinents. ⚠️ Cron désactivé — la ligne planifiée est commentée depuis l'épuisement du forfait LLM ; lancement manuel uniquement jusqu'à réarmement explicite. CLI (cron désarmé)
Détecteur de dérive (DRIFT) Détecte les chantiers dont le statut ment : un chantier peut rester en planning pendant des semaines alors que le code de ses zones a évolué dans un autre chantier, été modifié manuellement, ou que le chantier est mort sans avoir été clos — le backlog affiche « en cours » ce qui ne l'est plus. Cascade N0 → N1 → N2. Cron actif : 15 9 * * * avec l'option --apply. Cron quotidien
Moniteur de chantiers autonomes (CLI) Même flux que le cockpit web, mais dans le terminal. Filtre le bruit (~95 % des événements sont des signaux système sans valeur opérationnelle) et n'affiche que le signal réel (actions d'agent et résultats d'outil). Disponible via le skill /monitoring-live. CLI / skill /monitoring-live
Classifieur de régime à l'intake Classe le régime et l'éligibilité à l'autonomie d'une demande à son entrée (régime, autonomie_eligible, rationale) ; backend LLM léger, cache idempotent basé sur une empreinte de l'input. Appelé par le créateur de chantier depuis email. Bibliothèque
Prompt du classifieur Prompt et exemples few-shot du classifieur, édités indépendamment du module exécutif pour itérer sans toucher la couche réseau/cache. Doctrine : Run = défaut, Chantier = exception ; 3 régimes selon 3 critères (testable, réversible, transversalité). Bibliothèque
Arriéré de reclassification de régime Reclasse les chantiers actifs dont le régime n'a pas encore été calculé (antérieurs au classifieur d'intake) via le moteur de classification avec cache. Refuse les chantiers armés. Dry-run par défaut, options --apply, --max, --only. CLI
Déducteur de zones Rend décidables les chantiers sans zones : infère les périmètres de code depuis les commits citant l'identifiant du chantier, et borne la fenêtre d'acquittement de dérive sur le dernier commit citant. N'invente aucune zone pour un chantier sans commit historique. CLI
Audit de readiness Évalue la complétude d'un chantier pour l'autonomie (verdicts : ready / incomplet / vague / container). Ce verdict est un gate dur : seul un chantier ready peut être armé par l'auto-armeur. Enrichit via LLM les champs dérivables manquants (--enrich), désarme les chantiers armés à tort, supprime les coquilles vides (--discard-vague). Cron réactivé : */20 * * * * avec l'option --apply (sans --enrich, donc sans appel LLM). Exposé via le skill /chantier-audit. Cron (*/20 * * * *) / CLI / skill /chantier-audit
Auto-armeur de chantiers prioritaires Arme automatiquement les chantiers éligibles à l'autonomie nocturne, gaté par l'audit de readiness. N'arme que les chantiers ready. Couvre toutes les priorités P0 à P3 — le frein n'est plus la priorité mais le budget de quota LLM bordé par le pool et la fenêtre off-peak. Cron actif : ligne dédiée à 22h10 avec pool borné. Cron (22h10) / option de kill-switch
Alerte budget chantier ⚠️ Supprimé — placé en corbeille lors de la purge des scripts sans exécution récente. Ce composant envoyait une alerte email à 80 % du plafond de coût d'un chantier. Récupérable pendant 30 jours, puis purge définitive par l'Élagueur. —
Calcul du coût par chantier Agrège les événements agents et produit un coût API-équivalent par chantier (simulation du coût si l'on était en mode API, même en régime forfait). Alimente le bandeau du cockpit chantier et le tableau de bord de pilotage. CLI / bibliothèque
Bascule de mode de facturation Arme ou désarme manuellement le mode de facturation d'un chantier : forfait ou API à l'usage. Options : sélection du chantier, bascule exclusive, plafond de coût, liste des chantiers en mode API, estimation pré-vol sans modification. CLI
Notification de clôture Envoie un email de notification quand un chantier autonome a terminé toutes ses tâches. Déclenché par le worker, idempotent. CLI
Décomposeur de travail en tâches Décompose un travail existant en tâches atomiques (remplit un travail vide, sans créer de travaux frères). Bibliothèque
Décomposeur de tâche en micro-tâches Éclate une tâche trop volumineuse (ayant subi des timeouts répétés) en 3 à 6 micro-tâches tenant dans la fenêtre de contexte. Appelé par le worker de tâches sur déclenchement. Bibliothèque
Linter de plan de test Vérifie qu'un plan de test est exécutable (axes visuel, SQL, code) et qu'il cible bien l'environnement réellement déployé. Bibliothèque
Arriéré de plans de test Génère des plans de test machine-exécutables sur les chantiers en attente de validation, via scaffold puis appel LLM. Batch borné, idempotent. CLI
Pilotage de la fenêtre d'autonomie Façade de configuration de la fenêtre horaire d'autonomie par jour de la semaine (7 lignes, lundi à dimanche). Source de vérité lue par le tick et le worker. Exposé via le skill /fenetre-autonomie. Skill / bibliothèque
Gate snapshot pour runs en mode plan Faute d'environnement de preprod dédié au vaisseau-mère, ce composant en tient lieu : il snapshotte l'état du dépôt avant le run, laisse le run s'exécuter, lance un test de non-régression, et restaure automatiquement (revert + annulation de migration) si le test échoue. Bibliothèque (importée par le worker de tâches)
Qualification légale et solvabilité Interroge les registres publics (SIRENE, BODACC, Pappers en option) pour qualifier légalement et évaluer la solvabilité d'une entreprise. Produit un indice structuré et un livrable de solvabilité. Supporte un mode lot avec plancher de solvabilité. CLI / bibliothèque
Active Record — Négociation Fournit le contexte complet d'une négociation (entité, contacts, événements, chantier lié, qualification, livrables) et scaffold un dossier de négociation (7 livrables templates, idempotent). Façade du skill /negociation. Bibliothèque / CLI
Active Record — Run Fournit le contexte complet d'un run (périmètre résolu, exécutions de tâches associées). Façade CLI. Doctrine : le run est la voie par défaut, le chantier est l'exception. Bibliothèque / CLI
Démarreur de travail de négociation Démarre le travail associé à une négociation. CLI
Enrichisseur d'événements de négociation Worker asynchrone qui enrichit les événements de négociation non encore traités. Worker
Reclassificateur de négociation Déplace une négociation mal catégorisée vers la bonne catégorie. CLI
Scanner de leads entrants Scanne les leads entrants depuis les réservations Calendly. Disponible via les skills /malt et /inbox. Cron / skills
Validateur QA d'un travail Valide un travail par son équipe. Résout dynamiquement la racine du dépôt depuis le worktree actif. Worker
Estimateur de tokens Estime le volume de tokens et recommande un modèle LLM adapté à une tâche donnée. Bibliothèque
Prompt de l'estimateur de tokens Prompt et exemples few-shot de l'estimateur, importés par le moteur d'estimation. Restauré après une mise en corbeille erronée lors de la purge automatique — le module d'estimation plantait sans lui. Bibliothèque
Détecteur de patterns récurrents Détecte les patterns récurrents dans l'historique des itérations de tâches. Cron
Détecteur de bugs pré-existants Identifie les bugs pré-existants dans les runs d'agents avant qu'ils ne soient attribués à tort au chantier en cours. Bibliothèque
Nettoyage des verrous de chantier Supprime par TTL les verrous de chantier expirés. Cron
Tests E2E — résolution en cascade Tests de bout en bout sur le mécanisme de résolution en cascade des dépendances. CLI (test)
Tests E2E — parallélisme multi-terminaux Tests de bout en bout sur l'exécution parallèle de plusieurs sessions simultanées. CLI (test)
Script de rollback de verrou Permet d'annuler manuellement un verrou de chantier bloquant via une requête SQL de rollback. SQL
Rafraîchissement des KPI de résultat Met à jour la valeur courante de l'indicateur de résultat (outcome_kpi) pour les chantiers qui en portent un. Cron actif à 17h00 chaque jour. Cron quotidien (17h00)
Décomposeur d'objectif en chantiers Décompose un objectif de haut niveau en un ou plusieurs chantiers autonomes, chacun classé par le moteur de classification. Backend LLM intermédiaire, verrou par objectif, rattachement atomique. N'exécute aucune tâche — décompose uniquement. Bibliothèque (appelée par le tick d'objectif, cron */10 * * * *) / CLI
Sonde de sections de pages Sonde de validation : compte, sur la base de données de preprod d'un client distant, les pages sans section ou les sections manquantes. Produit un nombre sur la sortie standard. Prouve que le seed a bien écrit les données, sans vérifier leur fidélité. CLI (lancée comme sonde de résultat)
Exécuteur SQL de preuve QA Exécute l'axe SQL d'une preuve de QA sur la base cible réelle (cible résolue depuis le registre des clients, requête encodée en base64). Échoue bruyamment si la cible est inconnue, sans se replier silencieusement sur l'environnement central. Bibliothèque / CLI

Sous-famille — Orbite QA et auto-clôture des chantiers

Cette sous-famille automatise la validation finale et la clôture des chantiers arrivés en phase de test. Elle repose sur deux agents distincts opérant en pipeline.

Composant Rôle Mode d'invocation
Scanner QA — T1 (agent Turing) Scanne les chantiers en statut test sans verdict récent, déclenche l'orbite QA (T2), persiste le verdict et applique la transition test → done uniquement si le verdict est vert ET que le chantier est auto-clôturable.

Garde-fou d'auto-clôture : un chantier dont le déploiement requiert une commande de ship vers un client n'est auto-clôturable que si ce client a explicitement autorisé le ship automatique dans son paramétrage. Les déploiements internes (commande ./deploy), les tâches planifiées et les chantiers sans commande de ship sont toujours auto-clôturables.

Anti-spam : lorsque la QA est verte mais que le ship n'est pas automatisable, une seule notification est émise ; les scans suivants détectent que la notification a déjà été envoyée et n'en émettent pas d'autre.

Heartbeat : après chaque scan, le composant enregistre son état dans le registre de supervision des crons (ok ou fail selon la présence d'erreurs). Cron actif : */30 * * * *.
Cron (*/30 * * * *)
Exécuteur QA — T2 (agent Lovelace) Exécute réellement les trois axes du plan de test :
  • Visuel — capture et comparaison de pages publiques ; authentification pour les interfaces internes.
  • Code — suite de tests automatisés dédiée au chantier, si elle existe.
  • SQL — blocs de requêtes en lecture seule issus du plan de test.
Agrégation fail-closed : un axe requis non exécutable ou un plan non vérifiable produit un verdict incomplete, jamais un faux green.
CLI / bibliothèque (appelée par T1)
Sonde d'issue réelle (anti-faux-done) Interdit qu'une tâche passe en done sans que le monde ait réellement changé. Exécute la commande de sonde définie sur la tâche, calibre une baseline, et compare baseline et valeur courante. Consommée par la porte de validation du worker de tâches. Bibliothèque (worker de tâches et décomposeur de tâches)

Sous-famille — Auto-optimisation post-chantier

Cette boucle ferme le cycle sur les chantiers marqués pour analyse automatique (comportement activé par défaut depuis mi-2026) : à la clôture, le moteur relit le flux d'exécution et alimente un backlog agrégé de frictions de workflow. Un second composant, jamais automatique, transforme une ligne de ce backlog en chantier de correction — sur geste explicite uniquement.

Composant Rôle Mode d'invocation
Moteur d'analyse de workflow À la clôture d'un chantier éligible, relit son flux d'événements agents et ses exécutions de tâches, détecte les frictions de workflow, et alimente un backlog agrégé cross-chantier. Chaque ligne du backlog représente un pattern récurrent, priorisé par score d'impact. Cron actif : */15 * * * * en mode réconciliation. Cron (*/15 * * * *)
Transformateur d'optimisation en chantier Prend une ligne du backlog d'optimisation et en crée un chantier de correction structuré, marque l'optimisation comme traitée. Jamais automatique — geste explicite requis. Dry-run par défaut. CLI (--optim <id> [--live])

Famille Brainstorm

Cette famille regroupe les composants dédiés à la maturation d'idées : de la collecte initiale jusqu'à la promotion en chantier opérationnel, en passant par la validation et la narration.

Le traitement repose sur une file de travaux dédiée drainée par un worker continu. Ce mode daemon étant fragile par nature, un filet de sécurité cron en mode ponctuel garantit qu'aucun travail ne reste bloqué indéfiniment.

Composant Rôle Mode d'invocation
Worker de brainstorm Draine la file de travaux de maturation d'idées en continu ou à la demande Worker continu / cron ponctuel
Conversation de gestation Dialogue de phase 1 avec Atlas pour explorer et structurer une idée brute Interface ligne de commande
Challenge séquentiel Soumet une idée à une série de remises en question par l'orbite haute d'agents Worker
Générateur de résumé narratif Produit un résumé narratif synthétique d'une idée après gestation Bibliothèque (importée)
Pont de promotion Fait passer une idée validée du brainstorm vers un chantier, ou l'abandonne formellement Ligne de commande / compétence /idee
Pont de rétrogradation Opération miroir du précédent : reroute un chantier vers le brainstorm Ligne de commande
Portail de corpus Applique une validation à trois étages sur tout corpus de collecte avant usage comme source :
  1. Contrôle de forme — vérifie la provenance et la structure du document.
  2. Contrôle d'attribution — distingue le propos assumé du propos rapporté, vérifie la commensurabilité entre thèse et réfutation.
  3. Juré adverse — produit un score de corpus par un agent contradicteur indépendant.
Ce portail refuse les corpus non conformes sans les réparer, et maintient une liste explicite des motifs d'exclusion. Il a comblé un angle mort de relecture éditoriale identifié en 2026.
Bibliothèque / compétences /sources-ouvrage, /meta-forum-source
Extracteur d'article de forum À partir d'un fil de dialogue de forum archivé, extrait la thèse, les tours de parole, le verdict du jury et le sceau de session pour construire la matière d'un article. Produit une carte de revendications (claim map) garantissant que chaque paragraphe factuel porte une ancre vers un tour source identifié. Propose la destination de publication chez le tenant concerné. N'écrit ni ne publie rien ; aucun appel LLM. Angle mort comblé en 2026. Ligne de commande / compétence /forum-article

Fiabilité du worker continu. Le daemon en boucle longue peut s'interrompre silencieusement. Le cron en mode ponctuel constitue le filet de sécurité opérationnel : il traite les travaux en attente même si le worker principal est tombé, sans risque de double traitement grâce à la sémantique de la file.

Famille : audits, qualité et sécurité

Cette famille regroupe l'ensemble des automatismes qui surveillent, mesurent et protègent la flotte : intégrité des données, couverture SEO, sécurité périmétrique, qualité visuelle et conformité des dépendances. Chaque outil est soit déclenché en tâche planifiée, soit disponible en ligne de commande, soit importé comme bibliothèque par d'autres automates.

Vue d'ensemble des outils

Outil Rôle Déclenchement
Audit nocturne de tous les automates Passe de vérification planifiée sur l'ensemble des automates actifs de la flotte (orchestrée par l'agent Renoir). Tâche planifiée
Audit multi-agents nocturne (sans correction automatique) Audit nocturne impliquant plusieurs agents, en lecture seule — aucune correction appliquée automatiquement. ⚠️ Désactivé — marqué actif dans le registre des automates mais absent du planificateur réel (vérifié 2026-07-24) ; lancement manuel uniquement.
Vigie de l'arbre de rubriques CMS Lecture seule sur l'ensemble de la flotte : repère les rubriques dont la rubrique parente n'existe plus (orphelines) — elles disparaissent de l'arbre du blog avec toute leur descendance, provoquant des erreurs 404 et un sitemap mort. Lance une alerte en cas d'anomalie. Paramétrable par tenant. Tâche planifiée (06 h 25 UTC) ; option --tenant en CLI.
Audit quotidien du schéma base de données Vérifie la conformité du schéma de base de données aux conventions de nommage internes. ⚠️ Désactivé — absent du planificateur réel (vérifié 2026-07-24) ; seul subsiste un commentaire d'horaire sans ligne exécutable.
Détecteur de dérive de schéma Drizzle Compare la définition TypeScript du schéma Drizzle à l'état réel de la base de données et signale tout écart. Couvre notamment l'environnement de pré-production de démonstration, traité comme une cible distincte pour que ses dérives ne contaminent jamais la base de la démo. ⚠️ Absent du registre des automates et du planificateur (vérifié 2026-07-24) ; lancement manuel uniquement.
Surveillance des sauvegardes Contrôle quotidien des sauvegardes de bases de données hébergées sur le stockage objet. Vérifie la politique de rétention (90 jours, puis archivage Glacier jusqu'à 365 jours) et surveille également la sauvegarde nocturne du site PrestaShop hébergé pour un client externe à son propre serveur. Tâche planifiée
Test mensuel de restaurabilité Vérifie chaque mois que le dernier dump PostgreSQL sauvegardé sur le stockage objet est effectivement restaurable. Tâche planifiée
Radar SEO anti-cannibalisation de blog Détecte les doublons et quasi-doublons d'articles de blog. ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours, référencé nulle part. Récupérable pendant 30 jours, puis destruction définitive par le détecteur d'entropie.
Audit de sécurité des dépendances Analyse les dépendances npm et pip à la recherche de vulnérabilités connues. ⚠️ Désactivé — absent du planificateur réel (vérifié 2026-07-24) ; seul subsiste un commentaire d'horaire.
Orchestrateur de reconnaissance périmétrique (agent Mitnick) Lance une reconnaissance non-intrusive sur chaque domaine actif de la flotte. Lit les cibles depuis le registre des VPS clients — aucun tenant n'est codé en dur. Remplace un ancien script supprimé. Distinct du volet d'audit de sécurité manuelle par hôte. Tâche planifiée (dimanche 03 h 00, avec verrou anti-chevauchement) ; CLI via l'agent Mitnick.
Garde-fou cache partagé Redis Détecte le scénario « gestionnaire de processus relancé sans variables d'environnement au reboot » : le pilote de cache retombe silencieusement sur la mémoire locale, provoquant un état partagé incohérent entre nœuds. Distinct du script de vérification des variables d'environnement pm2, qui lit la configuration de processus ; celui-ci sonde le comportement réel du cache. Tâche planifiée (toutes les heures, à 17 min).
Alerte pentest pilotée par les données Lit les résultats de reconnaissance ouverts (priorité P0/P1, jamais encore signalés) et envoie un e-mail groupé par client, uniquement s'il y a de nouveaux résultats. Tâche planifiée ; CLI.
Runner de conteneur éphémère pour pentest Lance un conteneur d'analyse éphémère, jeté après chaque passe — zéro surface d'attaque permanente. L'image est construite à la demande. CLI ; bibliothèque.
Sonde anti-fuite des points de terminaison du hub Effectue des requêtes non authentifiées sur l'ensemble des routes d'API internes de la flotte. Une fuite est caractérisée par une réponse HTTP 200 avec un corps JSON (un vrai point de terminaison hub répond toujours JSON) — un 200 en HTML est un rattrapage SPA inoffensif, écarté comme faux positif. Un état sécurisé est un 401 ou 403. Envoie une alerte e-mail en cas de fuite. Tâche planifiée (05 h 00 UTC).
Audit d'accessibilité WCAG 2.2 AA (agent Braille) Analyse statique de conformité aux critères d'accessibilité WCAG 2.2 niveau AA. ✅ Actif — restauré le 2026-08-13 après avoir été incorrectement marqué supprimé ; activement maintenu depuis. CLI
Audit multi-agents d'un article de blog Soumet un article de blog à un processus d'audit impliquant plusieurs agents spécialisés. CLI
Audit qualité et résolution automatique de pages publiques Évalue la qualité des pages publiques et résout automatiquement les problèmes détectés. CLI
Audit des données agents via API Vérification des données agents via l'API. ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours.
Vérificateur de checklist d'intégration Nuxt Vérifie la checklist d'intégration d'un composant Nuxt. ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours.
Audit santé des sitemaps Vérifie l'état des sitemaps et envoie une alerte à l'agent Otlet. ⚠️ Désactivé — absent du planificateur réel (vérifié 2026-07-24).
Audit de maillage interne SEO Analyse le maillage interne et vérifie les liens en erreur 404. ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours.
Monitoring HTTP des sites clients en production Surveille la disponibilité HTTP des sites clients en production. ⚠️ Désactivé — absent du planificateur réel (vérifié 2026-07-24).
Rapport de monitoring complet Produit un rapport JSON complet de l'état de la flotte. Intègre les données du médecin système (voir la famille infrastructure). Tâche planifiée ; skill /status.
Automate anti-hallucination Bibliothèque de vérification des faits produits par les agents IA. Bibliothèque
Revue QA heuristique Lovelace Produit un verdict GO / GO_WITH_WARNINGS / NO_GO sur un livrable. CLI
Façade QA runner pour plans de test de pré-production Orchestre l'exécution des plans de test de pré-production. CLI
Tests de bout en bout du front Nuxt Exécute les tests end-to-end sur l'interface Nuxt d'un tenant. CLI (tests)
Wrapper d'audit agents sans double initialisation Lance l'audit des agents en évitant la double initialisation du moteur. CLI
Audit infrastructure unifié Audit infrastructure du vaisseau-mère et des tenants. CLI ; skill /host <cible> infra.
Audit sécurité unifié Audit sécurité du vaisseau-mère et des tenants. CLI ; skill /host <cible> secu.
Classifieur des automates Python actifs Classe les automates Python actifs selon leur mode d'exécution. CLI
Détecteur de dérive des personas Repère les écarts entre les personas déclarés et la stack en production. CLI ; skill /persona.
Audit de sécurité open source (OSS) Analyse les répertoires publics et exemples à la recherche de fuites lexicales liées aux tenants. CLI
Scan de maturité OSS Évalue la maturité des répertoires publics et communautaires pour une éventuelle ouverture open source. ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours.
Canary de santé des routes par type de page Garde-fou à tolérance zéro : une section entière en erreur 404 peut ne pas franchir le seuil global de la sentinelle SEO ; ce canary alerte immédiatement dès qu'un type de page (blog, catégorie, produit, fiche…) dépasse son seuil propre d'erreurs 404. Tâche planifiée (toutes les 5 minutes).
Smoke test multi-tenant

Effectue des requêtes HTTP sur les sites de la flotte et échoue dès qu'un site retourne HTTP 500 ou supérieur. Couvre un ensemble de tenants nommés ainsi qu'une boucle all sur un sous-ensemble de cinq tenants — les tenants supplémentaires ne sont testables que par nom explicite.

Depuis 2026-07-16, ajoute une passe d'intégrité des assets : sur les pages principales, le script extrait jusqu'à six ressources JavaScript et CSS référencées par le HTML rendu côté serveur et vérifie que chacune répond avec un code 2xx. Un code HTTP 200 sur la page ne prouve pas que le JavaScript est effectivement servi.

Note : le message d'aide intégré ne liste pas tous les tenants disponibles, et la boucle all ne couvre que cinq tenants sur les dix disponibles.

CLI
Générateur YAML de smoke test des routes hub Génère la configuration YAML de test des routes du hub. CLI
POC Playwright runner pour plans de test de pré-production Prototype de runner Playwright pour les plans de test de pré-production. CLI
Gate QA Lovelace Bloquant de livraison basé sur le verdict Lovelace. CLI
Configuration Lovelace par tenant Définit pour chaque tenant les seuils d'autorisation de livraison automatique. Bibliothèque de configuration
Vérification post-déploiement et rollback automatique Contrôle l'état du site après déploiement et déclenche un rollback si la santé est dégradée. CLI (post-ship)
Garde-fou post-déploiement des processus distants Vérifie qu'un processus distant dispose de toutes ses variables d'environnement après déploiement. CLI
Quick-check monitoring Feature 9 Vérifie rapidement l'état de la fonctionnalité de recommandation de contenu. CLI
Quick-check monitoring personas et dérive Vérifie rapidement l'état du monitoring des personas. CLI
Vérification de fraîcheur et d'intégrité des sauvegardes locales Contrôle l'âge et l'intégrité des sauvegardes stockées localement. CLI ; skill /host <cible> backups.
QA visuelle multimodale — 火眼金睛

Capture une page avec un navigateur sans interface graphique, puis soumet la capture à un juge LLM multimodal pour évaluer l'intention visuelle. Expose trois modes :

  • Comparaison simple : une URL et une intention décrite.
  • Comparaison entre deux URLs : modes clone, traduction ou générique.
  • Confrontation à une maquette : rendu confronté à un fichier PNG ou JPG du designer, avec authentification HTTP automatique et purge du cache serveur avant capture.

Correctif notable : l'option de survol d'un élément était acceptée par le parser mais ignorée silencieusement en mode maquette — le juge comparait une maquette de menu ouvert à une capture au repos. Le module survole désormais l'élément avant capture. Un survol qui échoue produit un verdict neutre (observation impossible), jamais un verdict de défaut — une panne d'observation n'est pas un défaut du travail observé.

Depuis 2026-10-12, le mode comparaison simple arme lui-même l'authentification HTTP avant la capture, évitant qu'une page protégée soit jugée « cassée » par erreur.

CLI ; bibliothèque.
Smoke visuel post-déploiement par tenant Lance une passe de QA visuelle légère après chaque déploiement, pilotée par un fichier de configuration YAML. Non bloquant ; sort avec le code 2 si au moins un contrôle échoue. CLI
Assembleur de preuve QA 3 axes Produit une preuve de qualité obligatoire sur trois axes — code (flux réellement exécuté), visuel (verdict du juge multimodal) et SQL (état de la base vérifié après l'action). La façade d'envoi d'e-mail client refuse tout message de livraison sans preuve complète sur les trois axes. CLI
Axe visuel authentifié de la QA 3 axes (pages de back-office) Couvre les pages de back-office inaccessibles au navigateur sans interface graphique. Pilote en lecture seule le navigateur distant (navigation et capture uniquement), sans manipuler aucune session ni identifiant. Produit le code de sortie 3 si aucune session de back-office n'est active — jamais un faux verdict visuel. CLI
Linter du registre lexical Vérifie la cohérence du registre lexical interne : termes manquants en base, énumérations divergentes, synonymes interdits. Mode lecture seule strict. CLI ; skill /audit-lexicon.
Audit de couverture SEO i18n multi-tenant Pour chaque tenant enrôlé et chaque langue active, vérifie la couverture des métadonnées SEO (meta, slug, titre, description). Ignore les emplacements de locale non publiés. Tâche planifiée
Détecteur d'entropie (l'Élagueur)

Repère les scripts orphelins absents de tout point d'entrée connu (planificateur, dispatcher). Alimente un registre de candidats à la suppression avec comptage des passages et période de quarantaine.

Le rôle a été étendu : l'Élagueur supprime désormais réellement les scripts orphelins, mais jamais sans filet de sécurité. La phase de détection alimente la corbeille traçable ; la destruction définitive nécessite une commande explicite avec un drapeau de désarmement actif. Un résumé quotidien est envoyé chaque matin, incluant la liste des objets protégés par immunité et un rituel hebdomadaire de remise en question du patrimoine existant.

Trois entrées planifiées distinctes : détection et mise en corbeille (05 h 30), destruction des objets dont la période de grâce est écoulée (05 h 45, drapeau de désarmement requis), et envoi du rapport d'entropie (06 h 00).

CLI ; tâche planifiée (trois entrées distinctes).
Corbeille traçable de l'Élagueur Rend toute suppression réversible : les fichiers et lignes de base de données sont déplacés dans une zone de quarantaine et tracés avant toute destruction. La restauration remet l'objet à son emplacement d'origine exact. La destruction définitive est désarmée par défaut et nécessite un drapeau explicite. Une gate de test vérifie que la revalidation des chemins se produit à la sortie de la restauration, pas seulement à l'entrée de la mise en corbeille. Bibliothèque (importée par le détecteur d'entropie).
Gate pre-commit SQL brut / schéma Drizzle Refuse qu'une colonne référencée dans du SQL brut mais jamais déclarée dans le schéma Drizzle passe au commit. Analyse uniquement les fichiers modifiés en zone de staging Git. Couvre les schémas de l'application principale et du vaisseau-mère. CLI (gate pre-commit)
Invariant statique « tout lead capté est remonté à Google Ads » Refuse le commit si une table de leads n'est pas connectée à l'outil d'envoi de conversions Google Ads. CLI ; hook pre-commit.
Invariant statique « tout modèle utilisé est un modèle tarifé » Croise les modèles LLM réellement utilisés (vus dans les journaux de coût et déclarés par défaut dans les automates) contre le tarif en vigueur. Un modèle sans ligne de prix fait apparaître ses exécutions comme gratuites dans les rapports de coût. CLI (lancement manuel — pas de tâche planifiée ni de hook détectés).
Gate flotte : durcissement des boîtes tenants Alerte si une boîte tenant en production ne dispose pas des trois règles de protection contre les tentatives d'intrusion attendues. Tâche planifiée (12 h 10 UTC).
Sentinelle anti-mort silencieuse des hooks Détecte un hook connecté qui interroge une base de données indisponible et échoue sans bruit (fail-open silencieux). Tâche planifiée (13 h 35 UTC).
Moniteur de divergence leads runtime Garde-fou en production : détecte le cas « des leads ont été enregistrés mais aucun n'a été transmis à Google Ads ». Distinct de la gate statique pre-commit. Tâche planifiée (08 h 30 UTC).
Audit des cicatrices sans garde-fou Recense les incidents classés P0/P1 dont la cicatrice n'a pas encore de garde-fou mécanique associé, et envoie un résumé hebdomadaire. Tâche planifiée (lundi 15 h 25 UTC).
Audit des invariants d'isolation du navigateur Audit statique des règles d'isolation entre les sessions navigateur de l'automatisation et celles de l'opérateur humain. CLI --scan ; hook pre-commit.
Gate pre-ship : preuve de chaîne de conversion Refuse la livraison d'un client si un chantier de tracking ciblant ce client n'a pas démontré une chaîne de conversion bout en bout validée. CLI (gate)
Sentinelle anti-dérive du système de modules Vérifie l'intégrité du système de modules CodeMyShop (community / enterprise / core) et détecte toute dérive. Mode lecture seule strict. Tâche planifiée (22 h 25 UTC) ; skill /audit-modules.
Harnais de vérification bout en bout de la chaîne de conversion publicitaire Vérifie côté serveur que le paramètre de tracking publicitaire est bien transmis jusqu'à la plateforme Google Ads. CLI (test)
Audit d'intégrité doctrine / enforcement Croise la table des doctrines internes avec les hooks réellement présents sur disque et leur câblage effectif dans la configuration de l'agent. Distingue des classes d'anomalies bloquantes (fichier manquant, hook non câblé, événement discordant) et une classe souple (doctrine critique sans garde-fou), cette dernière comptabilisée seulement en mode strict. Envoie une alerte en cas de dérive. Tâche planifiée (10 h 40 UTC) ; skill /audit-doctrine.
Détecteur de commentaires périmés Repère et corrige les commentaires de code qui contiennent des affirmations vérifiables (« géré par X », « câblé en cron ») non confirmées par le code en production. CLI
Sentinelle du rendu sous faible concurrence Détecte une dégradation du rendu des en-têtes de page en situation de faible concurrence — filet de détection complémentaire d'un correctif de sécurité préventif. Tâche planifiée (06 h 45 UTC).
Invariant DB « tout codename d'agent est valide » Vérifie que les codenames d'agents écrits en base sont bien des codenames techniques, pas des pseudonymes d'affichage ni des entrées orphelines. Couvre vingt-neuf tables référençant ce champ. Tâche planifiée (12 h 20 UTC).
Sentinelle anti-drain LLM en tâche planifiée

Complète le hook bloquant d'installation de crontab : ce dernier ne filtre que les installations faites dans une session de l'agent ; cette sentinelle scanne le planificateur en production (installations hors session : accès SSH direct, édition manuelle, fichiers de configuration système). Partage son moteur de détection avec le hook.

Le moteur reconnaît les invocations directes de LLM dans une tâche planifiée, quelle que soit la CLI utilisée (y compris les alternatives à claude -p). Exception : les commandes qui lisent uniquement un compteur de quota sont exclues.

CLI (câblage de tâche planifiée non confirmé au 2026-07-24) ; skill dédié présent.
Moteur de détection « LLM en tâche planifiée » Moteur partagé entre le hook bloquant à l'installation et la sentinelle de production. Garantit que les deux gardes ne divergent pas : une seule doctrine, un seul moteur. Détecte les invocations LLM directes dans une ligne de planificateur, quel que soit le client CLI employé. Bibliothèque
Capteur de dette de documentation interne Mesure en lot, par analyse syntaxique exacte, la couverture des docstrings Python sous le répertoire de l'automatisation. Miroir non bloquant du hook qui contrôle la même règle à la frontière de commit. CLI ; skill /audit-doc.
Classifieur du mode de facturation des automates Classe chaque automate selon son mode de facturation LLM (forfait vs API directe) par analyse statique du code — sans LLM, par recherche textuelle uniquement. Alimente la colonne correspondante du registre des automates. ⚠️ Désactivé en tâche planifiée depuis le 2026-08-15 (la ligne est commentée avec un marqueur explicite : l'outil appelle un LLM, un automate doit être déterministe) ; CLI manuel seulement.
Synchroniseur du registre des automates avec le planificateur réel Réconcilie le registre interne des automates avec le contenu réel du planificateur de tâches. Corrige le décalage entre les horaires déclarés manuellement (souvent NULL pour des dizaines d'automates récurrents) et l'état en production. Sans LLM, par parsing et SQL. Tâche planifiée (toutes les ~7 minutes, en minutes explicites).
Agent Braille niveau 2 — accessibilité WCAG sur HTML rendu Analyse le rendu réel des pages publiques avec un navigateur sans interface graphique et un moteur d'audit d'accessibilité, produisant les violations WCAG 2.2 AA sur le HTML effectivement affiché. Complète l'analyse statique de l'audit d'accessibilité. Bibliothèque (lancée via node <module-accessibilite> par l'auditeur de pages) ; CLI.
Politique commune de notification des sentinelles Fournit la logique partagée de contrôle d'envoi d'alertes aux automates de surveillance (canary, uptime, sentinelles) : autorisation d'envoi, enregistrement des succès et échecs, backoff exponentiel plafonné à 2 heures, et distinction entre « problème détecté » et « notification impossible ». Bibliothèque
Vigie des erreurs 500 d'API Sonde l'ensemble des chemins d'API enregistrés sur tous les sites Nuxt actifs de la flotte (~470 sondes par passe), agrège les résultats et envoie une alerte e-mail par site en cas d'erreurs 500. Utilise la politique de backoff commune. Née d'une erreur 500 silencieuse restée non détectée pendant trois mois. Tâche planifiée (toutes les 30 minutes, à 7 et 37 min).
Ingestion des destinations d'annonces Google Ads Lit les destinations réelles des annonces Google Ads actives via l'API officielle et les stocke pour que la vigie de tags puisse les sonder. L'horodatage de synchronisation n'est mis à jour que si l'API a effectivement répondu. Tâche planifiée (06 h 15 UTC).
Surveillance d'intégrité du docroot PrestaShop Calcule une empreinte des fichiers PHP du docroot PrestaShop, la compare à une baseline et envoie une alerte e-mail si la dérive a changé depuis la dernière validation. Aucun LLM. ⚠️ Pas de tâche planifiée confirmée sur le vaisseau-mère — tourne probablement sur le VPS client concerné. CLI
Garde du volume d'appels d'outils par session Mesure la médiane d'appels d'outils par session sur les sept derniers jours et rend un verdict (inconnu / régression / gain / OK). Lecture seule, sort avec le code 1 en cas de régression. Bibliothèque (appelée par l'audit nocturne des automates à 03 h 00) ; CLI.
Taxonomie mesurée des appels d'outils Classe le volume, la redite et les séries d'appels d'outils à partir des transcripts de session. Aucune écriture en base, aucun LLM. CLI ; bibliothèque.
Audit de la carte d'arborescence du dépôt Compare la structure réelle du dépôt à la carte d'arborescence de référence, signale les écarts et peut matérialiser le squelette manquant sur commande. Inactif sans le marqueur de version activé. ⚠️ Pas de tâche planifiée active détectée. CLI
Sentinelle des conduites (format canonique) Vérifie le format canonique des conduites sur disque (fichiers de skill), dans les descriptions de skills et en base de données. Miroir non bloquant du hook pre-commit correspondant. Envoie une alerte en cas de dérive. ⚠️ Pas de tâche planifiée active détectée. Skill /audit-conduite ; CLI.
Invariant « la Constitution ne nomme que des artefacts existants » Lit la table de constitution interne, extrait les chemins référencés et sort avec le code 1 si l'un d'eux n'existe pas dans le dépôt. Né d'articles fondés sur un fichier introuvable. Hook pre-commit (bloquant) ; CLI.
Confrontation des champs dérivables Compare les valeurs de champs calculables (statut MRR client, compteurs de forum, compteurs de tags de blog…) à leur recalcul à la demande. Sort avec le code 1 si un invariant est violé. Né d'un statut MRR erroné de 1 500 €/mois. ⚠️ Pas de tâche planifiée active. CLI
Détecteur de garde-fous éteints conditionnellement Repère les garde-fous désactivés « en attendant » assortis d'une condition de réactivation, et joue cette condition pour vérifier si elle est désormais remplie. Lecture seule, ne rallume rien. Tâche planifiée (lundi 11 h 20 UTC).
Audit du socle e-commerce obligatoire Vérifie qu'un tenant destiné à vendre dispose de l'ensemble des tables PrestaShop indispensables au commerce en ligne. Sort avec le code 1 si des tables manquent, 2 si l'audit ne peut pas s'exécuter. Option dédiée pour les vitrines sans panier. CLI ; bibliothèque (le socle est importé par la vérification opérationnelle post-déploiement).
Vigie des échappements SQL Détecte les échappements SQL incorrects : doublement d'antislash injustifié sur PostgreSQL (bloquant), fonctions d'échappement maison et valeurs interpolées (dette en cliquet). Pendant froid du hook pre-commit correspondant. Tâche planifiée (14 h 45 UTC) ; skill /audit-sql-escape.
Audit du maillage des cocons sémantiques Lecture seule sur le maillage interne des cocons sémantiques catégorie : breadcrumb JSON-LD, sous-catégories, liens inter-filles, catégorie par défaut orpheline (bloquant), redirections 301 mortes (bloquant). Skill /cocon-linkmap-audit ; également /meta-audit-seo.
Enregistrement de l'accord humain avant écriture de contenu Trace l'accord explicite d'un opérateur humain avant toute écriture de contenu client. Refuse de s'exécuter si un agent est en cours d'exécution — un agent autonome ne peut pas s'auto-approuver. CLI (hors run automatisé, par un humain).
Recensement des facettes d'un rayon Capture une empreinte chiffrée des facettes d'un rayon avant toute normalisation d'attributs, puis refuse de continuer si l'écart dépasse le seuil de tolérance déclaré. Filet de sécurité préventif. CLI
Vigie des contrats d'unicité de la flotte Vérifie que les contraintes d'unicité exigées par le code (via ON CONFLICT) existent réellement sur toutes les bases de la flotte, quel que soit le nom de l'index. Lecture seule, ne répare pas. ⚠️ Pas de tâche planifiée confirmée. CLI
Gate de publication des skills sur la vitrine publique Détermine mécaniquement si un skill est publiable sur la vitrine publique. Les termes interdits sont lus dynamiquement à chaque appel — rien n'est codé en dur. En cas de doute, le skill reste privé. Recalculé à chaque indexation. Bibliothèque (importée par l'indexeur de skills et le compositeur de posts sociaux) ; CLI (rapport, lecture seule).
Vigie « le tag de mesure est-il réellement servi ? » Pour chaque tenant qui annonce une configuration analytics, vérifie que chaque page publique échantillonnée (par régime de rendu et par langue) porte bien le tag du bon tenant. Inclut les destinations d'annonces Google Ads. Tâche planifiée (19 h 45 UTC).
Registre canonique des paliers de viewport Source de vérité unique des largeurs d'écran et des bandes Tailwind correspondantes pour l'ensemble de la flotte. Fournit les utilitaires noms(), taille(), est_tactile(), bande(), decrire(). Évite la duplication des listes de choix dans les outils de QA. Bibliothèque (QA visuelle, assertions structurelles, balayage responsive, capture d'écran) ; skill /qa-responsive.

Sous-famille : compte système QA par tenant

Une session de QA authentifiée par instance de la flotte, en lecture seule, sans jamais passer par le profil personnel de l'opérateur. Les familles de back-office couvertes sont : hub CodeMyShop (famille A), PrestaShop (famille B), et instances sans back-office client (famille C). Le registre ne porte que des noms de comptes — jamais une valeur de secret ; le mot de passe vit dans le coffre de credentials via le gestionnaire de comptes tiers. Un compte n'est marqué active que sur preuve live d'une réponse 403. Ordre des gestes : garde (« à créer ») → compte créé par un geste externe sous l'accord écrit de l'opérateur → pose du mot de passe → preuve live.

Outil Rôle Invocation
Registre tenant → compte QA Lecture seule : expose l'inventaire des comptes QA par famille de back-office, URL d'administration, mécanisme de création et état actuel. Fournit la résolution vps_name → compte actif — jamais de repli sur le profil personnel de l'opérateur. Seule porte par laquelle l'assembleur de preuve QA apprend le profil navigateur à utiliser. CLI --inventaire / --show <vps> ; bibliothèque.
Garde d'entrée et vigie des comptes QA L'état « compte à créer » se déduit automatiquement (instance de famille A ou B sans compte actif). La création est exigée lors du provisionnement d'une nouvelle instance. La tâche de création naît en pause — le worker ne la prend jamais automatiquement. CLI --vigie (code 1 s'il y a un écart) ; --exiger <vps> ; --creer-taches.
Poseur de mot de passe QA

Pose le mot de passe d'un compte QA sans passer par sa boîte mail, dans un seul processus.

  • Famille A (hub) : récupère le credential depuis le coffre, vérifie le profil employé, génère un jeton à usage unique (seul le condensat est stocké côté tenant, durée de vie 1 heure), ouvre le navigateur dédié au tenant, remplit et confirme, puis efface le jeton quelle que soit l'issue.
  • Famille B (PrestaShop) : écrit l'empreinte du mot de passe après vérification que le profil est en lecture seule ; en cas d'échec de connexion, le compte retrouve son état initial.

Ni jeton, ni mot de passe, ni empreinte n'apparaissent en sortie standard, dans les journaux ou dans les arguments de commande. Les exceptions n'exposent que leur type.

CLI --poser <vps>.
Preuve live de la garde en lecture seule Vérifie que le compte QA est bien refusé par le middleware de lecture seule : la preuve est acquise uniquement si la réponse est 403 avec le message exact du middleware (un 403 générique de rôle ne prouve rien). La sonde s'authentifie elle-même — la session du navigateur ne survit pas à la pose du mot de passe. Un 403 prouvé marque le compte active. CLI --vps <vps> (sortie 0 = prouvé / 1 = non prouvé / 2 = pas de session).

Sous-famille : mesure maquette ↔ rendu (iso-Figma)

Outils déterministes qui remplacent le verdict en prose du juge multimodal par des mesures rejouables : rythme vertical, blancs, contraste du voile, assertions structurelles DOM, catalogue des sections CMS. Ces outils bornent la mesure ; le juge multimodal qualifie ensuite.

Outil Rôle Invocation
Écart chiffré maquette ↔ rendu Mesure l'écart entre une maquette Figma et le rendu réel, de façon invariante au contenu : rythme vertical, grille horizontale, palette. Calcule une empreinte perceptuelle (pHash DCT) pour la comparaison de deux images ou la capture d'une URL. Skills /figma, /integration-maquette, /page-iso-figma ; bibliothèque.
Matière de comparaison maquette ↔ rendu route par route Produit les captures organisées route par route à partir du plan des routes (frames hors périmètre écartées), avec défilement anti-lazy-load et parallélisme limité. Génère un index et découpe en lots. Ne juge pas. Une re-capture partielle remplace seulement les entrées concernées dans l'index, sans écraser le corpus. Skill /integrer-maquettes-restantes.
Adresse des blancs dans le DOM Sur le DOM rendu, repère les zones d'encre, balaie de haut en bas et nomme l'élément qui ouvre ou ferme chaque respiration visuelle, avec ses paddings et marges calculés. Complète la mesure du rythme vertical sur images. Skill /rythme-vertical.
Rythme vertical en chiffres (sur images) À partir d'images, calcule le total, le nombre et la distribution des respirations visuelles (bandes uniformes). Avec deux images, mesure l'alignement maquette ↔ rendu et nomme les bandes sans vis-à-vis. Skill /rythme-vertical.
Calcul du contraste du voile sur photo Calcule le voile nécessaire pour garantir la lisibilité d'un texte sur une photographie : contraste WCAG au pire cas (pixel le plus clair après application du voile) contre la couleur du texte, avec les seuils 4,5:1 et 3:1 (grand texte). Un voile calculé sur une photo ne se transpose pas à une autre. Skill /page-iso-figma.
Assertions structurelles rejouables sur page rendue Exécute un ensemble d'assertions structurelles sur une page rendue (via navigateur automatisé ou HTML local), pilotées par un fichier de règles JSON : absence d'images sans source, unicité du titre principal, titres visuellement masqués, sources et textes alternatifs interdits, absence de fil d'Ariane, contraintes de taille de titre, cibles tactiles, gouttières, multi-paliers de viewport. Skills /page-iso-figma, /integrer-maquettes-restantes, /qa-responsive ; bibliothèque.
Catalogue vivant des types de section CMS Dérive la liste des types de sections de pages CMS directement des sources (switch de rendu et schéma de base de données), pour distinguer les sections en table maître des sections traduisibles. Échoue bruyamment si le parsing devient muet. Skill /page-iso-figma.
Navigateur local pour captures de pré-production Fournit une surface de navigation locale, indépendante du Chrome distant de la session de l'opérateur. Né du constat que 119 passages sur 648 produisaient des verdicts « incomplets » indiscernables d'un résultat négatif, parce que la boîte distante était éteinte (SSH en timeout). Bibliothèque.
Vigie de dérive des étalons de décisions iso-Figma Second versant de la vigie du corpus : détecte les étalons qui ont changé après qu'une décision a été rendue. Complète la vigie du corpus en retard sur Figma (qui détecte le cas inverse : le corpus n'a pas encore intégré de nouvelles frames). CLI
Relevé des cotes réelles des images de section

Mesure les dimensions réelles des images de section sur le rendu, par type et par variante, car les maquettes Figma ne portent pas les cotes par nœud. Permet au builder d'annoncer au rédacteur la taille attendue sous chaque champ image. Une cote inventée est pire que pas de cote.

Le verdict de publication repose sur le ratio de cohérence (tolérance 10 %), une part minimale de cotes cohérentes (80 %) et un nombre minimal d'occurrences (2). Sort avec les indicateurs publiable, part_coherente, a_livrer et toutes. Se rejoue dès qu'une maquette bouge. Plusieurs pages peuvent être relevées dans la même session ; une page en échec est sautée sans interrompre le relevé.

CLI

Mémoire, cicatrices et apprentissage

Cette famille regroupe les composants qui gèrent les trois niveaux de mémoire du système : un répertoire de fiches structurées, un Zettelkasten de notes longues, et une couche de recherche sémantique par vecteurs. Les cicatrices — traces formelles d'incidents résolus — alimentent une boucle de rétroaction continue : détection, qualification, déduplication, injection au bon moment dans le contexte de l'agent.

Qualification et injection des cicatrices

  • Qualification par lot : un outil en ligne de commande soumet les cicatrices à un modèle de langage pour les reclasser. Il accepte des options de limite de volume, de ciblage par identifiant et de simulation à sec (dry-run). Aucune planification cron active n'est déclarée pour cet outil.
  • Injection au démarrage de session : un garde-fou de type SessionStart rebranche automatiquement la mémoire active dès l'ouverture d'une nouvelle session de l'agent.
  • Injection contextuelle par type d'outil : deux garde-fous distincts injectent les cicatrices pertinentes respectivement avant l'invocation d'un sous-agent, et avant toute opération de lecture, d'édition ou d'écriture de fichier.
  • Rafraîchissement des indicateurs : un processus planifié recalcule chaque jour les indicateurs agrégés des cicatrices.

Déduplication et détection de récidive

Deux scripts de rattrapage (backfill) ont comblé un angle mort identifié en juillet 2026 : le moteur de réaction automatique regravait des doublons par récurrence, car l'ancienne logique d'idempotence reposait sur une signature variable. Ces scripts ont fusionné rétroactivement les doublons accumulés, d'abord pour les cicatrices générées automatiquement, puis pour celles issues d'événements non automatiques (task_failed, runaway, autonomie). Depuis, chaque site d'écriture appose une signature canonique commune.

Un capteur de récidive, planifié quotidiennement, détecte les cas où une cicatrice pertinente existait en mémoire mais n'a pas été servie à l'agent — et où l'erreur s'est pourtant reproduite. Ce signal est un prérequis au bornage fin du contexte injecté : on ne peut réduire ce qui est injecté sans risque qualité que si l'on mesure d'abord ce qui manque.

Consolidation nocturne et rappel sémantique

  • Consolidation nocturne : un processus planifié à 4 h du matin compacte jusqu'à trente transcripts par passage et consolide la mémoire de long terme. Il est actuellement désactivé dans le planificateur (quota LLM épuisé) ; la ligne reste commentée jusqu'au renouvellement du forfait.
  • Rappel sémantique : le moteur de recherche interroge la couche vectorielle pour retrouver les cicatrices et fiches mémoire proches d'une requête. Une optimisation mise en place en octobre 2026 a réduit le temps de requête lexicale de 7,1 s à 0,13 s grâce à un index GIN sur un champ vectoriel textuel précalculé.
  • Synchronisation des vecteurs : un processus cron maintient la cohérence entre la base de documents et la couche de recherche vectorielle.

Zettelkasten et index des sessions

  • Un indexeur planifié ingère les notes du Zettelkasten dans la couche base de données, permettant leur recherche croisée avec les cicatrices et les compétences.
  • Une synchronisation bidirectionnelle toutes les trente minutes maintient la cohérence entre le Zettelkasten local et son miroir distant, récupérant les notes rédigées depuis un poste Mac (via l'extension Obsidian Git) et poussant les productions de l'agent (consolidation nocturne, sorties de garde-fous).
  • Un indexeur distinct traite les sessions de conversation au format .jsonl et les enregistre dans la couche base de données pour consultation ultérieure.

Index et publication des compétences

L'indexeur de compétences (skills) tourne toutes les quinze minutes. À chaque passage, il lit les fiches de compétences du dépôt et effectue cinq passes successives et isolées — l'échec d'une passe n'emporte pas les autres :

  1. Publication gatée : recalcule à chaque run si chaque compétence est publiable. Un nouveau client signé peut retirer de la vitrine les compétences qui le citaient, sans qu'aucun fichier ne soit modifié manuellement.
  2. Mode de listage : projette les arbitrages d'exposition au listing déclarés dans la configuration, évitant la troncature silencieuse au-delà d'un budget.
  3. Orchestration : transforme les déclarations de méta-compétences en liens ordonnés ; un enfant introuvable n'est jamais inséré (mieux vaut une chaîne incomplète qu'un lien mort en vitrine).
  4. Tags et descriptions éditoriales FR/EN : chaque élément est jugé séparément par le même filtre de publication — un pitch anglais citant un client est refusé seul, sans emporter la fiche française.
  5. Partitions : les compétences qui déclarent une section de partition sont projetées dans la table de conduites.

Les compétences orphelines (supprimées du dépôt) sont retirées de l'index uniquement sur la branche principale ; un répertoire de travail en retard liste ses orphelins sans les toucher.

Des mécanismes complémentaires gèrent la génération automatique de propositions de compétences après une victoire, la surveillance des propositions en attente de validation humaine, et le suivi des renommages (réconciliation de l'historique d'invocation après un renommage de fichier).

Gestion du contexte de session

  • Chargement contextuel déclaratif : une couche lit le type de tâche déclaré et sélectionne les blocs mémoire pertinents parmi les fiches disponibles. Elle constitue la deuxième couche au-dessus du plancher de contexte obligatoire, avec repli sécurisé.
  • Plancher obligatoire : un composant valide que les blocs immuables du contexte sont bien présents avant chaque session.
  • Journalisation de la taille injectée : un garde-fou SessionStart enregistre la taille estimée du contexte injecté en base, en mode fail-open (une erreur d'écriture ne bloque pas l'agent).
  • Suivi en cours de session : un garde-fou PostToolUse met à jour l'estimation du budget consommé après chaque outil.

Fractionnement et relance de session

Le coût d'une longue session croît de façon quadratique : l'historique et les résultats d'outils sont renvoyés au modèle à chaque tour. Le mécanisme de fractionnement mesure le contexte réel (consommation déclarée par le modèle) et le nombre de tours, et déclenche un transfert (handoff) persistant dès qu'un seuil est franchi (130 000 tokens).

Ce composant est câblé sur trois événements distincts :

  • Fin de session (Stop) : pose l'état de bascule en base (table observable par le tableau de bord) plutôt qu'un simple message texte. Un signal de relance est émis si les conditions sont réunies.
  • En cours de tour (PostToolUse, option --tick) : mesure le contexte à intervalles réguliers, avec un garde-temps de soixante secondes entre deux mesures.
  • Avant compaction native (PreCompact, option --precompact) : mesure juste avant qu'une compaction automatique ne s'exécute.

Un quatrième point d'entrée (--emit-now), non câblé comme garde-fou, permet à l'agent lui-même de poser le stub de transfert lors d'une bascule de harnais (arrêt immédiat sans passage par les événements habituels).

La séparation des pouvoirs est stricte dans ce mécanisme : le module de décision de relance déclare une sentinelle sans rien tuer ; la politique de relance (plafond glissant, anti-boucle, délai de validité) est écrite en Python testable, jamais dans le shell. Un seul processus peut consommer la sentinelle (section critique avec création exclusive). Des garde-fous empêchent une session fille d'un agent worker de déclencher une relance (le worker gère sa propre reprise).

Le superviseur de session vit dans le même panneau tmux que l'agent. Il est l'exécutant extérieur qui comble l'intervalle entre l'écriture du transfert et le démarrage de la session suivante — car un agent ne peut pas se terminer lui-même. Il ne respawn que s'il a lui-même mis fin à l'enfant sur sentinelle consommée. Une mort spontanée de l'agent (commande /exit, crash, signal) n'entraîne jamais de relance automatique.

Le mécanisme de reprise de transfert (garde-fou SessionStart) réinjecte automatiquement le dernier transfert produit par le fractionnement. Des filtres anti-boucle (délai minimum de vingt-quatre heures) et un mécanisme de séparation par slug de tentacule évitent qu'une session reprenne le transfert destiné à une autre instance du même pool.

Hotset mémoire et métriques

Un classeur déterministe recalcule quotidiennement la section « réflexes quotidiens » du fichier de cache mémoire principal, en utilisant une formule de décroissance exponentielle pondérée par le nombre d'accès récents. Ce fichier est un cache repayé à chaque appel, plafonné en volume par un garde-fou dédié. Les sections de plancher obligatoire (priorité maximale) et les travaux en cours restent gérés manuellement. Un collecteur distinct agrège les métriques globales du répertoire mémoire.

Élagage des cicatrices

Un moteur d'élagage applique trois opérations sur le registre des cicatrices :

  • Backfill de contexte : dérive le lien de contexte pour les cicatrices dont le fichier source a bougé.
  • Promotion : passe les cicatrices résolues et appliquées cinquante fois ou plus au statut « acquises ».
  • Archivage : archive les cicatrices dont le contexte est mort — jamais sur un signal d'état inconnu.

Un orchestrateur de revue périodique pilote cet élagage en mode --apply, remonte au backlog humain les cicatrices non résolues rappelées cinquante fois ou plus, et émet un signal de présence (heartbeat). Il est entièrement déterministe, sans appel à un modèle de langage.

Graphe de connaissances et glaneur de préférences

Un graphe de connaissances expérimental relie de façon déterministe (expressions régulières, JSON, colonnes de base) les garde-fous, cicatrices, doctrines et fichiers. Il offre des sous-commandes de construction, de requête par chemin ou commande, et d'évaluation (rappel@5 comparé au rappel sémantique). Il est chargé de façon paresseuse et non invasive par certains garde-fous.

Un glaneur de préférences parcourt les transcripts de sessions locaux pour extraire les consignes d'usage et préférences de l'opérateur que ni les cicatrices ni le Zettelkasten ne capturent. Il est entièrement déterministe (pas de modèle de langage) et ne s'exécute qu'en session interactive, jamais en cron.

Vigilance chatbot et purge juridique

Un sentinelle surveille les journaux de l'assistant IA des boutiques clientes. À chaque passage, il lit les nouvelles lignes depuis son dernier état mémorisé et envoie un email groupé lorsque des requêtes visiteurs sont restées sans réponse, n'ont rien trouvé, ou ont rencontré une indisponibilité. Les interactions issues de la recette de validation automatique sont isolées dans une section dédiée et ne polluent pas les alertes visiteurs. Aucun modèle de langage n'est utilisé ; le composant ne corrige rien.

Un processus de purge applique chaque nuit les durées de conservation légales sur ces journaux : les textes (questions, réponses) sont effacés après quatre-vingt-dix jours, les conversations après quatre-vingt-dix jours depuis le dernier message, les lignes techniques après treize mois. Une seule instruction SQL transactionnelle par boutique. Ce mécanisme a été mis en place après le constat qu'une durée de conservation écrite sans mécanisme applicatif ne protège personne.

Vigie des créneaux de rendez-vous

Un composant vérifie chaque jour ce que voit réellement un visiteur qui clique sur un bouton « Prendre rendez-vous » : le site pointe-t-il bien vers la page de réservation ? L'API renvoie-t-elle des créneaux disponibles dans les quatorze prochains jours ? En dessous d'un seuil minimal, une alerte interne est envoyée à l'équipe — jamais au client du tenant. Le silence n'est pas considéré comme un succès.

Garde de version fiscale

Un composant scelle l'empreinte du code portant les fonctions fiscales critiques de la caisse (registre, chaînage, clôtures, archivage, export). Tout changement sur ces fichiers constitue une version majeure et invalide l'attestation en cours. Trois sous-commandes : vérification de l'empreinte courante, recalcul du sceau, et lecture de la racine et de l'empreinte enregistrées par le registre d'attestation.


Boucle de maintenance et auto-réparation de la documentation

Un orchestrateur quotidien enchaîne douze étapes en un seul passage nocturne (déclenchement à 5 h du matin). Il opère sous verrou et peut être mis en pause via un interrupteur en base de données. Les codes de retour 1 et 2 des sous-étapes sont des statuts informatifs (dérive détectée, santé critique) et non des échecs fatals ; l'orchestrateur ne sort en erreur que sur un vrai crash.

Les douze étapes du passage nocturne

# Étape Rôle Délai max
1 Percevoir Miroir de fidélité : détecte les dérives entre la documentation interne et les chapitres publiés (lecture seule) 900 s
2 Couverture Détecteur d'angles morts : compare les composants existants aux noms cités dans la documentation (lecture seule) 180 s
3 Anatomie Proprioception des organes : compare le statut déclaré de chaque organe à son état réel dans le planificateur ; auto-correction réversible à la baisse uniquement (loi d'asymétrie) 120 s
4 Graphe d'organes Dérivation idempotente des arêtes inter-organes (lecture seule, upsert déterministe) 30 s
5 Réparer Résolveur mécanique des références mortes : un seul résultat unique → réécriture + commit ; zéro ou plusieurs → rapport et alerte sans réécriture 180 s
6 Régénérer Régénération profonde autonome : l'agent réécritle chapitre, commit réversible, scrub anti-fuite, staging, puis gate de publication (détection de fuite) ; si propre : activation automatique ; si fuite : blocage et alerte budget + 1800 s
7 Proposer Re-staging des chapitres restants en dérive et préparation d'un email récapitulatif 1800 s
8 Publier-doc Staging de la dérive fraîche puis activation automatique des chapitres passant tous les gates machine (fuite, anti-gourou, dérive) ; email en cas de blocage 3600 s (borne interne : 3000 s)
9 Publier-organes Synchronisation de l'inventaire d'organes vers le VPS public (mise à jour des existants, insertion en statut inactif pour les nouveaux) ; gates anti-fuite 60 s
10 Re-percevoir Second passage du miroir de fidélité après régénération et publication, pour que le snapshot de santé poussé vers le site public reflète l'état final et non l'état d'avant le passage 900 s
11 Soigner Bilan de santé en cinq dimensions (proprioception, couverture, dette, apprentissage, automates) calculé sur l'état final post-publication 240 s
12 Publier Synchronisation du snapshot de santé et de dérive vers le VPS public ; mode best-effort (code 2 si le VPS est injoignable, sans bloquer la chaîne) 60 s

L'auto-réparation mécanique des références et liens cassés tourne indépendamment de cet orchestrateur (toutes les six heures). Elle traite trois classes de problèmes réversibles : références de catalogue mortes résolues par nom de base unique, liens markdown cassés résolus par nom de base unique, et stubs de navigation en langue anglaise absents. Chaque classe est validée par un gate fail-closed : une classe absente du registre n'est jamais auto-appliquée.

Le traitement des revues externes suit un schéma découplé : les revues soumises par l'opérateur humain sont évaluées par un modèle sandboxé (délimiteurs anti-injection, champs hors spec ignorés, injection détectée → log sans action). Si la revue est valide, le composant signale la régénération à l'orchestrateur sans la déclencher directement. Ce composant est actuellement désactivé dans le planificateur (quota LLM épuisé).

Après chaque régénération profonde, un composant de triage réévalue les critiques externes encore ouvertes face au nouveau contenu HTML et les classe en trois catégories : résolues par la régénération (aucune action), survivantes et escaladées au backlog humain, ou hors périmètre (attentes multi-tenant plaquées sur un système mono-base).

Publication synchronisée vers le site public

  • Un composant synchronise le snapshot de santé et de dérive vers la base du VPS public, alimentant le cadran de maintenance en temps réel. Un seul snapshot par jour, aucune écriture sur la base centrale.
  • Un synchroniseur de liturgie calcule les horaires d'activité des automates et pousse un snapshot vers le VPS public. Un libellé qui échoue au scan anti-fuite est comptabilisé sans être nommé.
  • Un synchroniseur de compétences pousse les fiches publiables (nom, pitch, taille, date — jamais le corps des fiches) vers le VPS public, en remplaçant l'ensemble en une seule transaction après sauvegarde de l'état précédent.
  • Un synchroniseur de garde-fous pousse les entrées publiables de l'inventaire des garde-fous (fichier relatif, organe, événement, déclencheur, caractère bloquant, raison FR/EN, incidents — jamais la commande ni le chemin absolu).
  • Un composant de snapshot éditorial synchronise les tables de contenu de la base centrale vers la base locale du VPS public, avec vérification de parité de colonnes et transaction unique.

Inventaire des garde-fous multi-harnais

Un indexeur lit les configurations de câblage de tous les harnais d'agents actifs, retrouve le fichier derrière chaque commande déclarée, extrait la raison d'être du garde-fou et maintient un miroir en base (avec empreinte SHA-256 pour détecter les dérives). Il inclut depuis octobre 2026 le cinquième harnais. Un rapport de parité vérifie qu'aucune politique de sécurité prioritaire n'est absente sur l'un des harnais.


Immunité adaptative

Ce sous-système détecte les cicatrices qui se répètent selon des schémas similaires, formule des propositions de réflexes préventifs, et les soumet à une validation humaine avant tout armement. Le modèle de menace est strict : aucune proposition ne peut s'armer seule — la table de staging ne contient pas de colonne d'activation, et le moteur de réflexes actifs ne lit jamais cette table de propositions.

Détection et proposition

  • Détecteur de clusters : applique un algorithme de densité (DBSCAN, distance cosinus, seuil serré pour éviter un blob unique regroupant la quasi-totalité des paires) sur les vecteurs de cicatrices. Produit une liste de clusters avec leur pureté. Aucune planification cron propre ; utilisable en ligne de commande avec options de simulation et de paramétrage.
  • Assembleur de propositions : combine les clusters en projets de réflexes enforçables et les place en staging inerte après validation par le contrat de sûreté. Alimente également la section immunité du digest quotidien de l'élagueur. Aucune planification cron propre.
  • Contrat de sûreté : valide chaque proposition avant staging — action limitée à deny ou warn, niveau de déclenchement borné, motif anti-ReDoS, preuve obligatoire. N'écrit jamais dans la table des réflexes actifs.

Détecteur d'erreurs en fin de session

Un garde-fou de fin de session lit le transcript de la session courante, isole le delta du dernier tour et filtre les erreurs bénignes connues. Il distingue deux cas :

  • Commande de livraison bloquée : une commande de déploiement réellement exécutée et bloquée par le garde-fou de livraison → leçon comportementale émise sur la sortie d'erreur, code de retour 2, trace en base d'audit.
  • Autres erreurs (tracebacks, vraies erreurs applicatives) → proposition de réflexe en staging inerte via le contrat de sûreté.

Des garde-fous internes évitent les boucles : interrupteur d'urgence, détection du contexte worker, marqueur de session anti-récursion. Le composant est entièrement en dégradation gracieuse (exit 0 par défaut).

Note sur le périmètre d'évaluation des réflexes : le moteur de réflexes actifs est câblé sur les outils d'édition, de lecture, d'invocation d'agent et de navigation web — mais pas sur les commandes shell directes. Deux des trois gabarits de propositions du système sont marqués comme enforçables sur commandes shell. Sans câblage correspondant, un réflexe armé sur ce déclencheur resterait non évalué en pratique malgré son statut actif — écart à confirmer et corriger.


Moteur d'entraînement et outils de session

  • Moteur d'entraînement : pilote des exercices structurés pour les agents, en ligne de commande.
  • Générateur de cicatrice : produit un rapport structuré et un brouillon d'email après verdict, utilisable depuis la compétence d'apprentissage.
  • Leçon post-chantier : rédige automatiquement une rétro pédagogique après la clôture d'un chantier.
  • Harness d'évaluation du rappel : mesure les performances du mécanisme de rappel sémantique (rappel@k, MRR@10, comparaison à une baseline figée) et échoue si une régression est détectée.
  • Injecteur de cicatrices au spawn d'agent : comble une asymétrie du harnais — le sous-agent reçoit le cadre cognitif synchronisé mais pas les cicatrices. Ce composant effectue une requête vectorielle et produit un bloc « écueils déjà appris » prêt à être inséré dans le prompt de spawn.
  • Glaneur de préférences : recense dans les transcripts locaux les consignes et préférences de l'opérateur que les autres couches ne capturent pas. Entièrement déterministe, sans modèle de langage. La rédaction des notes issues de ce glanage se fait en session interactive.
  • Synthèse des notes par tenant : recense l'ensemble des éléments portant l'état d'un client (chantiers, notes mémoire, notes Zettelkasten), vérifie chaque référence citée contre la source vivante, et peut poser un bloc structuré dans un chantier sur demande.
  • Affichage rapide du dernier transfert : commande shell qui affiche immédiatement la carte du dernier transfert du répertoire courant, sans appel au modèle — utile juste après un effacement de contexte où la bannière du garde-fou de démarrage n'apparaît pas.
  • Publication des cicatrices publiques : extrait les cicatrices validées, les assainit via un modèle de langage et les pousse vers la base publique. L'activation est un geste humain délibéré. Actuellement désactivé (quota LLM épuisé) ; la commande CLI reste utilisable manuellement.

Format canonical du cache mémoire principal

Un composant maintient la forme canonique du fichier de cache mémoire principal, à partir d'un manifeste YAML déclarant les zones, leurs budgets en octets, leurs marqueurs de délimitation et les invariants à vérifier. Il protège la répartition entre zones, pas seulement le total — deux incidents ont montré qu'une conformité globale pouvait masquer un débordement zonal. Ce composant est conçu avec des dépendances minimales car il est sur le chemin critique de plusieurs garde-fous.

Famille personas / agents — entretien

Cette famille regroupe les scripts dédiés à la maintenance du référentiel d'agents : synchronisation, régénération des profils, mesure du poids cognitif et tests de validation. Chaque outil agit sur une facette précise du cycle de vie d'un agent sans empiéter sur les responsabilités des autres.

Outil Rôle Mode d'invocation
Synchroniseur d'agents canoniques Propage les agents définis dans le référentiel central du Synedre vers le moteur conversationnel embarqué. Doctrine établie en juin 2026 : les agents du moteur conversationnel ne sont pas des personas inventées localement ; ce sont les vrais agents du Synedre, avec leur cadre cognitif canonique. Exécuté via le lanceur planifié. Cron — tous les lundis soir (18 h 45)
Rafraîchisseur de persona Recalcule le profil d'un agent via un modèle de langage, applique une fusion à trois branches (3-way diff) puis soumet le résultat à la revue humaine avant persistance. CLI ou skill /persona <codename> --fix
Lecteur de profil complet Restitue le profil intégral d'un agent : données de base et corpus de cicatrices associées. CLI
Lecteur de séquence de cues Affiche la séquence de cues de conduite associée à un agent. CLI
Régénérateur de fiches agents Reconstruit les fiches agent en format texte structuré à partir du référentiel central. Implémentation principale, invocable directement en ligne de commande. CLI
Passe-plat cron du régénérateur Angle mort comblé en juillet 2026 : le lanceur planifié ne résout que les scripts situés dans un répertoire précis. L'implémentation réelle du régénérateur se trouvant à la racine du dépôt, ce passe-plat délègue à elle sans dupliquer la logique, la rendant ainsi éligible à la planification automatique. Cron — tous les lundis soir (23 h 00)
Synchroniseur de portraits Recopie les portraits visuels des agents (fichiers image au format WebP) vers leur destination de diffusion. CLI
Suite de tests personas (Phase C) Tests unitaires couvrant le comportement du cycle de rafraîchissement des personas. Produit d'un chantier de validation dédié. CLI (test)
Validateur du mode auto sélectif ⚠️ Supprimé — placé en corbeille en juillet 2026 lors d'une campagne d'élaguage : aucune exécution détectée sur 30 jours, aucune référence active (planification cron, hooks, skills, imports, services système). Récupérable pendant 30 jours via la fonction de restauration de corbeille, puis purge définitive par l'Élagueur. —
Auditeur de poids cognitif Mesure le poids cognitif de chaque profil agent (Art. 25 — chantier de gouvernance des profils) : évalue le volume du profil cappé augmenté des cicatrices au moment du spawn, et compare l'ensemble des règles actives associées à l'agent à un seuil d'alerte et un seuil de surveillance. Signale également les cicatrices orphelines (sans agent rattaché). Cet outil mesure uniquement — toute décision de coupe relève du composant d'élagage dédié. Options : --json, --threshold, --warn. Retourne le code de sortie 1 si un profil dépasse le seuil critique. Angle mort comblé en septembre 2026 (présent sur disque depuis août 2026). CLI — ⚠️ aucune ligne cron active

Note sur la planification des tâches récurrentes. Deux corrections de calendrier ont été apportées lors d'une relecture contradictoire en septembre 2026 : le synchroniseur d'agents canoniques et le passe-plat du régénérateur étaient antérieurement documentés avec des horaires matinaux. Les horaires du soir indiqués dans ce tableau sont les valeurs corrigées et en vigueur.

Note sur l'auditeur de poids cognitif. Ce composant n'est pas raccordé à une tâche planifiée. Son exécution doit être déclenchée manuellement ou intégrée dans un pipeline de validation explicite. L'absence de cron est un état délibéré documenté, non un oubli.

Famille Messagerie client

Règle fondamentale : aucun email client n'est envoyé directement par l'IA. Tout passe par la façade d'envoi email, en deux temps obligatoires — brouillon (--draft) puis envoi (--send). Un garde actif bloque toute tentative d'envoi SMTP direct hors de cette façade. Les identifiants de messagerie (compte IMAP, serveur, mot de passe, paramètres SMTP) sont stockés dans les variables d'environnement de l'hôte — leurs valeurs ne figurent jamais dans ce document.

Protections transversales

Garde RGPD art. 21 : avant d'écrire un brouillon, la façade vérifie si le destinataire (adresse ou domaine) figure dans la liste d'opposition. Cette liste est conservée sans limite de durée et n'est jamais purgée. Le principe est fail-closed : si la base est indisponible ou en erreur, le brouillon est refusé par défaut.

Liens de note de mesure : un lien de type /note/<jeton> inséré dans un brouillon programmé doit être couvert par un identifiant de note valide enregistré en base. Sans cela, la commande de programmation refuse le brouillon. Cette protection évite qu'un lien collé manuellement contourne le contrôle de statut et la détection de contenu suspect.

Zéro message client programmé automatiquement : toute réponse dans un fil déjà ouvert (détecté par les en-têtes de fil) ou adressée à un contact ou domaine reconnu comme client est bloquée à la programmation. Seul un premier contact vers un inconnu peut être programmé (démarchage) ; tout message destiné à un client existant est toujours envoyé manuellement, après validation explicite du fondateur. Cette règle est fail-closed : si la base ne répond pas, l'envoi est refusé.

Composants de la messagerie client

Composant Rôle Mode d'invocation
Façade d'envoi email client Workflow complet d'envoi : brouillon, relecture, envoi, archivage. Plusieurs couches de protection actives :
  • Détection de livraison : la porte QA qui exige une preuve de livraison avant envoi distingue les vraies annonces (« c'est corrigé ») des simples descriptions d'usage (« c'est fait pour… ») et des négations (« n'est pas corrigé »). Elle ignore les citations du correspondant — seul le texte nouveau est examiné.
  • Blocage des messages client programmés : la façade refuse de programmer toute réponse dans un fil client ou vers une adresse connue (voir ci-dessus).
  • Soldage des copies de validation : après envoi, la façade solde automatiquement ses propres copies internes (préfixe normalisé, fonction pure partagée). Ces copies s'empilaient précédemment en boîte de réception et masquaient les vraies demandes.
  • Exclusion des entrants tardifs : le soldage du fil à l'envoi n'inclut que les emails qui étaient visibles en base au moment de la rédaction du brouillon. Un email synchronisé tardivement n'est plus faussement marqué traité.
  • Signature imposée : la façade refuse un corps contenant une ligne de signature manuscrite (nom, titre, formule d'équipe) ou un marqueur de la signature canonique. Une formule de politesse seule reste permise.
  • HTML obligatoire : tout envoi est en HTML (le logo figure dans la signature canonique). L'option texte brut est désactivée et masquée de l'aide.
  • Archivage IMAP « Envoyés » : après envoi SMTP, une copie RFC822 est déposée dans le dossier Envoyés IMAP avec vérification du code retour. Un échec d'archivage est affiché en avertissement sans bloquer l'envoi déjà parti.
  • Guide préprod obligatoire : si le message annonce une livraison en préproduction ou une recette à un destinataire externe, la façade exige une capture annotée jointe (PNG, JPG ou PDF). Une pièce jointe entrante recyclée comme capture est explicitement refusée — seule une vraie capture navigateur est acceptée.
  • « Est maintenant disponible » arme la porte livraison : toute annonce externe doit déclarer la nature de la livraison (interface ou non-interface) ; une livraison d'interface exige une capture annotée jointe.
  • Citation en réponse : toute réponse à un fil reprend une citation du message précédent, sauf désactivation explicite (pour les accusés de réception courts ou les notifications de résolution).
CLI (façade unique) / compétences de réponse client
Garde façade email Hook actif à chaque appel d'outil : rend obligatoire le passage par la façade d'envoi. Bloque tout appel SMTP direct. Hook automatique
Synchronisation boîte de réception Interroge périodiquement la boîte IMAP et insère les nouveaux emails dans la base de données d'inbox. Tâche planifiée (toutes les minutes)
Accès IMAP direct (secours 1) Connexion IMAP de secours au serveur de messagerie, fusionnée dans la compétence unifiée /inbox. CLI / compétence /inbox (mode secours)
Recherche IMAP ergonomique (secours 2) Retrouve un email par expéditeur ou horodatage, fusionné dans la compétence unifiée /inbox. CLI / compétence /inbox (mode secours)
Lecture boîte secondaire Façade lecture seule pour une boîte email secondaire de l'agence. CLI
Scan antivirus des pièces jointes Analyse antivirus des pièces jointes email entrantes (agent Mitnick). CLI / compétence /scan-attachment
Dossier client exportable Produit un dossier lisible par un humain et un modèle de langage, remettable au client. Contenu autorisé : titre, état, échéance et dernière mise à jour de ses chantiers ; titres et états de leurs travaux ; emails reçus de ses domaines et de ses contacts, et emails envoyés où il est destinataire ou en copie (ni brouillons, ni copies de validation). Une étape d'assainissement retire automatiquement les secrets, chemins internes et références à d'autres clients. Le registre de ton, la fiche profil, les incidents, les coûts et les revenus récurrents ne sont jamais inclus. CLI / compétence /dossier-client
Résolution du ton de rédaction Détermine le ton à employer par membre de l'équipe cliente : la fiche de chaque contact prime sur la fiche de l'entreprise. Un contact qui tutoie est tutoyé, appelé par son prénom — pas toute son équipe. Bibliothèque interne
Détection automatique du contexte client Hook déclenché à chaque saisie du fondateur : détecte si un client connu est mentionné, émet les consignes de ton et un dossier sujet multi-sources (emails, commits, tâches planifiées, journaux, code) sur la sortie standard. Silencieux si aucun client n'est détecté. Anti-faux-positifs : correspondance exacte sur le nom de code requise ; clients internes exclus. Hook UserPromptSubmit
Alertes email système Plusieurs composants envoient des alertes email ciblées : échecs de sauvegarde, événements cockpit (idempotent, passe par la façade), échecs de rollback et incidents critiques, dépassement de budget API mensuel. Tâches planifiées (callbacks)
Synchronisation avis Google Synchronise les avis Google Business Profile vers la base. Tâche planifiée
Automate Malt Automatise les interactions avec le compte freelance sur la plateforme Malt. CLI / compétence /malt
Extraction de pièces jointes Extrait les pièces jointes d'un email avant analyse antivirus. CLI
Point de vérité emails client Analyse les emails d'un client et de son équipe (contacts connus + domaine professionnel) en confrontant chaque entrant à nos envois via le moteur de fils partagé. Rend un verdict prouvé par entrant : répondu (fil certain), probablement répondu (même sujet), à traiter, soldé sans réponse, à jour sans lien de fil, à jour. Un statut en base seul ne prouve rien — la vérité est le dossier Envoyés. En lecture seule par défaut ; la clôture manuelle est plafonnée, nominative et journalisée. CLI / compétence /point-emails-client
Réconciliation dossier Envoyés Rapproche le dossier Envoyés IMAP et la base d'inbox : une réponse partie ne ferme le fil que si l'email entrant était visible en base avant l'envoi (protection contre les synchronisations IMAP tardives). Tâche planifiée (toutes les heures)
Synchronisation bidirectionnelle suivi / chantiers Maintient la cohérence entre le suivi des demandes client et les chantiers/tâches, réconciliation last-write-wins. Tâche planifiée (toutes les 10 minutes)
Mutation de données client sous autorisation Façade de modification de données client (ex. solde fidélité) : refuse toute écriture sans autorisation écrite tracée (--authorized-by), journalise l'état avant et après, exécute le flux via le back-office. CLI
Annotation de capture d'écran Annote un PNG déjà capturé pour une réponse client : cadres numérotés, pastilles, légendes, import depuis JSON, largeur max. Une boîte débordant le cadre est une erreur (tolérance bornée optionnelle). Ne capture rien. Compétence réponse client annotée / CLI
Archivage IMAP Envoyés Dépose une copie RFC822 dans le dossier Envoyés IMAP après un code OK explicite du serveur. Essaie les dossiers candidats connus, crée le dossier si aucun n'existe. Bibliothèque sans point d'entrée propre. Bibliothèque (importée par la façade email)
Coffre one-time-secret souverain Façade de dépôt et de lecture d'un secret éphémère via un coffre PrivateBin auto-hébergé. Deux sens :
  • Sortant : dépose un secret, rend l'URL seule.
  • Entrant : déchiffre un dépôt PrivateBin, vérifie que le lien pointe le coffre canonique. Un dépôt « détruire après lecture » est consommé à cette lecture.
Zéro service tiers, zéro secret en clair par email.
CLI / bibliothèque
Digest matinal du fondateur Email envoyé à 07 h 30 (heure de Paris, été comme hiver). Agrège les signaux de la nuit (emails, backlog, chantiers, incidents) et les route avec une étiquette pré-calculée (run / chantier / brouillon / bruit) et une justification d'une ligne par item. Inclut un récapitulatif des vigies retenues. Objectif : faire du triage matinal un acte de décision, pas une re-lecture.
L'indicateur « à déployer » lit la référence de déploiement servie par la machine hôte et compte les commits preprod non encore déployés. Si la référence est absente, corrompue ou incohérente, le digest écrit « déploiement preprod non vérifié » — jamais un faux « 0 ».
Tâche planifiée (07 h 30 locale)
Gardien de boucle client (Nightingale) Détecte deux fuites sur les fils des contacts actifs :
  • Email reçu sans accusé de réception depuis plus d'un seuil d'heures.
  • Fil résolu en interne sans notification au client.
Fenêtre glissante pour éviter le bruit des données historiques. Modes brouillon, digest et JSON.
Tâche planifiée / CLI / compétence /boucles-client
Relances escaladantes Relance interne des demandes client non traitées par paliers d'âge, jusqu'au transfert vers l'adresse support CodeMyShop. Clôture détectée par analyse du bloc « message réexpédié ». État persisté, plafond journalier. Jamais un email vers le client, aucun modèle de langage. Tâche planifiée (scan toutes les 15 minutes, envoi deux fois par jour)
Générateur de tuto MCP par client Génère dynamiquement un tutoriel montrant au client comment utiliser son propre assistant IA branché en MCP sur sa boutique. CLI / compétence /tuto-mcp
Gestion du suivi projet client CLI de gestion du suivi des demandes client via la base de données Atlas. CLI / compétence /traiter-demande
Document d'accueil client Génère un PDF « accès et connexions » destiné au client — sous-ensemble sûr des informations de son environnement, sans credential sensible en clair. CLI
Promotion d'un lead vers client Promeut une organisation gagnée (lead/prospect) vers le statut client : consolide les données et liens déjà attestés, exige une négociation gagnée en paramètre. Dry-run par défaut, --apply pour écrire. Ne crée ni environnement technique ni secret : le provisioning reste piloté séparément. CLI / compétence /promouvoir-client
Déduplication des brouillons Bibliothèque pure (sans réseau ni base) garantissant une seule copie « À VALIDER » par brouillon. Détecte le remplacement (même destinataire, sujet, expéditeur, traitement) et le brouillon dû, sans jamais traiter un brouillon déjà envoyé ou programmé. Bibliothèque (façade email)
Canal unique Atlas → fondateur Unique point d'envoi d'Atlas vers la boîte du fondateur. Envoie depuis la boîte canonique avec reply_to pointant la boîte Atlas, pour que les réponses reviennent au poll Atlas. Renvoie le Message-ID réel lu dans le brouillon après envoi — jamais un identifiant fabriqué. Ne lève jamais d'exception. Bibliothèque
Dossier sujet multi-sources Croise cinq sources de vérité (emails, commits, tâches planifiées, journaux, code) pour interdire une réponse fondée sur un seul email hors contexte. Appelé par le hook de détection client, sous double condition (intention de communication et client détecté). Restauré après une suppression par faux positif — désormais surveillé par le détecteur d'appels orphelins. Bibliothèque (hook UserPromptSubmit)

Sous-famille Prospection et note de mesure

Le démarchage suit un protocole en quatre étapes : (1) constater un fait technique vérifiable pour un prospect précis (vitesse, faille, technologie), (2) figer le texte après validation du fondateur, (3) choisir une heure de dépôt plausible côté destinataire, (4) mesurer ce que ça rapporte. Quatre façades distinctes interviennent — aucune ne contacte le client seule. La liste d'opposition RGPD (art. 21, conservation permanente) est vérifiée par la façade email elle-même, pas par un hook séparé.
Composant Rôle Mode d'invocation
Note de mesure Construit une note de mesure à partir des sondes éprouvées (vitesse de page, technologie, positionnement) et tient son cycle de vie : prévisualisation, scellage (par le fondateur), publication (geste explicite séparé), retrait avec motif tracé, purge RGPD automatique (notes > 30 jours, consultations > 12 mois, envois sans réponse > 3 ans).
La publication et le retrait sont propagés en synchrone vers le site public. Si la propagation échoue, la commande rend un code d'erreur explicite — un retrait non propagé laisserait la note en ligne.
La note est rédigée en français correct : nom officiel de la plateforme, décimales à virgule, mois en toutes lettres, milliers séparés par une espace fine. Aucun LLM, aucun appel payant pendant le gel du démarchage.
CLI / tâche planifiée (purge quotidienne)
Client SERP et données marché Interroge le fournisseur de données de positionnement (SERP, solde, volumes de recherche, backlinks, concurrents, mots-clés positionnés, suggestions). Chaque appel renvoie le coût. Les concurrents déclarés par le client sont croisés avec le panel mesuré.
Garde de coût : la variable d'environnement de désactivation des appels payants est vérifiée avant toute lecture d'identifiant ou tout appel réseau.
CLI / bibliothèque
Règles d'expédition du démarchage Fonction pure (aucun effet de bord, pas de SMTP, pas d'écriture) qui décide quand un démarchage validé a le droit de partir : fenêtre 07 h–08 h du lundi au vendredi, plafond journalier (envois du fondateur plus plafond de la délégation active), plafond par passage. Le sceau SHA-256 du corps garantit que c'est exactement ce texte-là qui partira — un seul caractère modifié après validation bloque l'envoi. Bibliothèque
Automate d'expédition du démarchage Expédie les démarchages déjà validés et scellés via la façade email. Ne rédige rien, aucun modèle de langage, aucun appel réseau hors SMTP. Inscrit chaque envoi au registre de prospection sans attendre la vigie de rendement. Tâche planifiée (fenêtre 07 h–08 h, lundi–vendredi)
Vigie de rendement du démarchage Rapproche ce que rapportent les démarchages : envois, réponses, clients convertis, dépense de sonde, groupés par note. Détecte les anomalies de consultation. Produit un digest hebdomadaire pour le fondateur. Lecture seule — n'écrit à aucun prospect.
Distingue premiers contacts et relances dans le registre : les relances n'entrent pas dans les taux du bilan du soir.
Tâche planifiée (trois fois par jour + rapport hebdomadaire) / compétence /demarchage
Préparation des rendez-vous Vigie de préparation des RDV issus d'un démarchage : rattache les notifications de réservation Calendly à l'envoi correspondant, produit un PDF à la charte envoyé au fondateur seul — jamais au prospect. Contenu : questions de découverte, offre sans chiffre, points de vigilance, fiche société et solvabilité issues des seuls faits publics (une section sans source l'indique). Une ligne par notification (envoi unique garanti). Aucun modèle de langage. Tâche planifiée (toutes les 10 minutes) / CLI / compétence
Rappel de rendez-vous Envoie un email au fondateur une heure avant chaque rendez-vous, sans modèle de langage. Deux sources : notifications Calendly et agenda souverain. Un seul rappel par RDV. Jamais vers l'invité. Tâche planifiée (toutes les 5 minutes) / CLI
Périmètre d'acquisition Garde à la demande de la règle « pas de concurrent d'un client » : liste les secteurs occupés et refuse de rendre la liste si elle est incomplète. Compétences démarchage, sonde vitesse, qualification prospect / CLI
Sonde e-commerce Prouve qu'un site vend en ligne (PrestaShop, Shopify, WooCommerce) par quelques requêtes GET publiques. Verdicts : vend, catalogue, fermée, plateforme sans preuve, hors périmètre, muet. Lecture seule. Compétences démarchage et qualification prospect
Diffusion des notes de mesure Sert les notes publiées sur le site public par push depuis le vaisseau-mère : remplace la table du site en une transaction, rapatrie les consultations vers le hub de façon idempotente. Aussi appelé en synchrone lors de toute publication ou retrait. Tâche planifiée (toutes les 5 minutes) / bibliothèque
Accord de démarchage par email Lit la réponse du fondateur à une copie de validation de démarchage : « valide <jeton> » programme le brouillon (jamais envoi direct). Le sceau et les plafonds restent seuls juges du départ effectif. Branché dans le poll IMAP Atlas ; une réponse Re: n'est jamais triée comme bruit interne. Bibliothèque (poll IMAP)
Enrichissement CRM preprod Script one-shot : rattache les identifiants légaux (SIRET/SIREN) aux comptes CRM issus du pipeline site, puis complète adresse et ville via l'API publique de recherche d'entreprises (100 comptes par passage maximum). CLI (one-shot)

Sous-famille Délégations acquisition (B4) et communication (B8)

Les deux seules exceptions à la règle « zéro communication automatique » côté prospects et Page Facebook. Une table de délégation (une ligne par bureau, inactive par défaut) et un journal append-only horodaté enregistrent chaque décision. L'activation n'appartient qu'au fondateur — elle se fait en session directe, aucune commande du module ne peut l'activer. La désactivation est ouverte à tous. Des variables d'environnement permettent de couper chaque délégation immédiatement.
Composant Rôle Mode d'invocation
Délégation acquisition (bureau B4) Ce qu'Atlas décide à la place du fondateur sur le bras acquisition. Quatre portes fail-closed :
  1. Délégation active : vérifiée au scellage ET au départ.
  2. Garde financière : prix, devis, remise, engagement, créneau proposé — liste de marqueurs fixe, sans modèle de langage — maintient le brouillon en attente du « valide » du fondateur.
  3. Destinataire : jamais un client existant, jamais une opposition RGPD ; relance uniquement dans une négociation ouverte ou en réponse à notre propre démarchage.
  4. Veto : chaque envoi annoncé la veille (digest 18 h, délai minimum de 12 heures) ; « stop <jeton> » annule.
Gestes autorisés : premier contact, relance, réponse prospect, négociation. Une note de mesure n'est acceptée que déjà publiée. Mention d'opposition obligatoire. Plafond journalier.
CLI / tâche planifiée (digest 18 h)
Délégation communication Page (bureau B8) Répond aux commentaires de la Page Facebook de l'agence (volet API de Page uniquement), sans validation unitaire : 3 réponses par jour, veto la veille, longueur limitée, aucun lien ni coordonnée, détection d'injection, mention IA obligatoire (texte validé par le fondateur). Refuse Messenger, groupes, forum, tout client existant ou concurrent d'un client, tout montant ou promesse. Bibliothèque (module communauté) / CLI

Sous-famille Traitement email par ventouse

Une ventouse déjà ouverte pour un client peut traiter les emails de ce client sans nouvelle session : lot unique par client, brouillon soumis au fondateur, départ seulement sur « valide <jeton> ». L'envoi reste sous validation manuelle — ce n'est pas une exception supplémentaire à la doctrine « zéro communication automatique ». Chaîne : veille → contexte de fil → brouillon → accord → envoi → preuve par le dossier Envoyés.
Composant Rôle Mode d'invocation
Veille de traitement (ventouse) Ramasse les emails non traités de l'équipe du client associé à la ventouse, ouvre un traitement numéroté pour tout le lot. Un seul traitement vivant par client (index unique). États : ouvert → (question ⇄ ouvert) → brouillon → validé → envoyé → clos / abandonné.
Scénarios définis en base (bug, modification, administratif, question, information), chacun avec ses exigences de preuve QA. Gardes : la façade email refuse d'envoyer un brouillon de traitement dont le jeton n'a pas été consommé. Plafond journalier et par ventouse. Rappel unique au fondateur si le traitement dépasse 2 heures. Aucun modèle de langage en tâche planifiée.
Chaque traitement est audité par une vue dédiée.
Tâche planifiée (toutes les minutes, sous verrou) / CLI depuis la ventouse
Accord de traitement Lit la réponse du fondateur à un traitement : « valide <jeton> » déclenche l'envoi immédiat (sans fenêtre horaire) en soldant tout le lot. Peut aussi répondre à une question posée par la ventouse. Fail-closed : expéditeur sur liste blanche et DKIM aligné. Branché dans le poll IMAP avant l'accord de démarchage. Bibliothèque (poll IMAP)
Contexte de fil pour la ventouse Fournit à la ventouse tout ce qu'elle doit savoir avant de rédiger : règles de rédaction communes (vérifier avant d'affirmer, diagnostiquer, ne rien engager, prochaine action, « commité ≠ livré », constat exigé avant de déclarer un état rétabli), historique du fil, promesses ouvertes. Garde contre la clôture sans réponse sur promesse ouverte.
La dernière réponse envoyée s'affiche en entier ; les autres sont coupées à 900 caractères (signatures retirées). Les heures sont affichées à l'heure de Paris.
Bibliothèque (ventouse, simulation, façade email)
Simulation de traitement à blanc Rejoue des traitements passés à blanc : réponses réellement parties reconstituées, la ventouse rédige à l'aveugle (un cas n'est révélé qu'après le rendu des précédents), puis comparaison mécanique et deux juges indépendants. Aucun envoi, aucune écriture en base de traitement réel. CLI
Suivi de validation des traitements Mesure combien de brouillons d'une ventouse le fondateur valide tels quels versus après retouche, par client et sur une période. Tâche planifiée (rapport hebdomadaire) / CLI

Sous-famille WhatsApp professionnel

Calque du triptyque brouillon → relecture → envoi appliqué au canal WhatsApp Cloud API (Meta). Un garde actif bloque tout envoi sans brouillon préalablement validé.
Composant Rôle Mode d'invocation
Façade d'envoi WhatsApp Triptyque brouillon → relecture → envoi, calqué sur la façade email client. CLI (façade unique)
Composition de brouillon WhatsApp Compose la réponse à un message entrant WhatsApp, calqué sur le module de composition de réponse Atlas. CLI
Récupération des médias entrants Télécharge et soumet à l'antivirus les médias joints aux messages entrants WhatsApp (le webhook insère le message mais ne télécharge pas le binaire). Tâche planifiée (toutes les minutes)
Relais vers l'interface mobile Relaie chaque message client entrant capté vers l'interface mobile (client) avec notification au fondateur. Tâche planifiée (toutes les minutes)
Alerte WhatsApp entrant Alerte email sur message WhatsApp entrant, au plus une par heure. Deux mécanismes d'idempotence : un message notifié ne l'est plus jamais ; plancher horaire configurable. Aperçu limité à 140 caractères, maximum 12 messages détaillés. Tâche planifiée (toutes les 5 minutes)

Sous-famille Communauté PrestaShop et réseaux sociaux

Veille et réponse publique aux marchands (forum PrestaShop et forums européens associés, groupes Facebook, Page Facebook, commentaires LinkedIn, forum WooCommerce, Shopify Community). La publication n'est jamais déclenchée en tâche planifiée directe : un garde vérifie systématiquement que le texte est scellé et que l'identité du valideur est connue avant toute publication.
Composant Rôle Mode d'invocation
Purge RGPD des sujets communauté Efface à 12 mois les données de tiers (extrait, auteur, titre) des sujets traités. Conserve la décision, le statut, les dates, les sceaux et notre réponse. Essai à blanc par défaut, aucun modèle de langage. Tâche planifiée (hebdomadaire)
Publication de réponse communauté Publie une réponse validée sur le forum PrestaShop, le forum WooCommerce, la Shopify Community ou un groupe Facebook, sous sceau :
  • --valider fige le SHA-256 du texte.
  • --publier recalcule le sceau avant d'ouvrir le navigateur (5 conditions, dont le coupe-circuit global).
  • L'état du fil est relu en direct juste avant de taper : fil fermé, supprimé ou déjà répondu → refus.
  • Aucun Markdown dans une réponse (refusé à la rédaction et au sceau).
  • Un refus de publication est enregistré pour affichage dans le hub.
  • --reperer : QA sans sceau — ouvre le sujet en lecture seule, vérifie la présence du champ et des boutons, capture ; n'écrit rien.
CLI / compétence /communautes (jamais en tâche planifiée)
File de publication communauté Une file par forum (forum, WooCommerce, Shopify, groupes). Planifie le créneau de publication : départ immédiat si le forum est calme et dans les heures d'activité ; sinon écart aléatoire entre des bornes configurables (jamais un pas régulier). Hors plage horaire → report au matin. Plafond journalier atteint → lendemain.
À chaque passage : un sujet échu au plus, tous forums confondus, publié par le module de publication (même porte de sceau). Un refus de rythme génère un nouveau créneau ; tout autre refus sort le sujet de la file avec note pour le hub.
Tâche planifiée (toutes les 5 minutes) / CLI
Veille communauté Surveille les marchands demandant de l'aide en public : flux RSS/Atom du forum PrestaShop (toutes les communautés européennes), Reddit, Stack Overflow (signalement seul — le site interdit les réponses générées par IA), forum WooCommerce, Shopify Community, emails de notification Facebook. Seuls les sujets sans réponse sont retenus. Alerte le fondateur seul sur un nouveau sujet. Ne publie rien, aucun modèle de langage. Tâche planifiée (toutes les 30 minutes, 7 h–22 h) / compétence /communautes
Interrupteur et coupe-circuit par volet Facebook Gère l'état, le plafond et le coupe-circuit par volet Facebook (API Page, groupes, Messenger). Une restriction détectée de la part de Meta suspend le volet 30 jours. Bibliothèque (importée par le module de publication) / CLI
Lecture de la Page Facebook Lit par l'API Graph (GET seul, jeton de Page) les commentaires et messages Messenger entrants, et les écrit dans la table de veille communauté. Remplace les emails de notification Facebook, qui n'indiquent ni auteur ni contenu. Bibliothèque (veille communauté)
Publication Page Facebook Publie par l'API Graph la réponse validée d'un sujet de la Page : commentaire ou message Messenger. Même sceau que le module de publication forum, sans navigateur. Toutes les portes sont vérifiées avant le premier POST (sceau, volet, coupe-circuit, délégation B8 si applicable). Un code d'erreur de restriction Meta suspend le volet. CLI / compétence /communautes (jamais en tâche planifiée)
Pilotage des brouillons Page Rédige les brouillons de réponse aux sujets de la Page (modèle de langage, à la demande, gardes de forme) puis envoie un email de validation au fondateur. Si un brouillon est refusé sur la forme à la validation, il est réécrit avec le motif de refus en entrée. Les forums sont aussi au planning de rédaction. Tâche planifiée (deux fois par heure, 7 h–22 h)
Dispatch des validations Page Lit la réponse du fondateur à l'email de validation, branchée dans le poll IMAP avant le dispatcher client. Preuves exigées : expéditeur sur liste blanche et DKIM aligné, In-Reply-To correspondant au Message-ID de l'email émis. Ne traite que les emails de validation Page. Bibliothèque (poll IMAP)
Relevé des commentaires LinkedIn Relève les commentaires laissés sous les posts LinkedIn de l'agence, au navigateur (aucune API officielle pour un profil). Une visite par post, un passage par jour, lecture seule. L'auteur n'est jamais nommé — pseudonyme basé sur un HMAC, ni nom, ni fonction, ni employeur. CLI / compétence /communautes / bibliothèque
Consentement OAuth API Graph Gère l'accès API Graph à la Page Facebook : génère le lien de consentement Meta (état signé HMAC-SHA256, validité 30 minutes, nomme la Page visée), vérifie et renouvelle le jeton de Page. CLI (une fois par consentement)

Sous-famille Protection de majeur — boîte sécurisée

Dossier de protection d'un majeur, dans un schéma de base de données cloisonné hébergé seul. Ingestion IMAP 100 % déterministe (aucun modèle de langage, fail-closed sur la liste blanche), contrôle antivirus des pièces jointes, puis traitement à la demande sous la règle : « le modèle propose, le fondateur tranche, l'outil écrit et trace ».
Composant Rôle Mode d'invocation
Poll IMAP dossier protégé Interroge la boîte IMAP dédiée et insère les messages dans le schéma cloisonné (contenu chiffré). Liste blanche en base, fail-closed : un expéditeur inconnu n'est ni téléchargé ni marqué lu. Insertion idempotente. Verrou de processus pour éviter les exécutions concurrentes. Tâche planifiée (toutes les 5 minutes)
Contrôle antivirus des pièces jointes du dossier Extrait les pièces en mémoire, leur attribue un nom normalisé, les soumet à l'antivirus, enregistre le verdict. Le message n'est marqué « pièces saines » que si toutes ses pièces sont propres. N'ouvre, ne classe et ne supprime rien. Bibliothèque (poll IMAP) / CLI
Traitement du dossier protégé Traitement à la demande uniquement : lecture des messages (clair sur sortie standard, accès tracé), classement en une transaction, ignorance avec motif, mise à jour des démarches, consultation des pièces, évaluation de recevabilité. Jamais en tâche planifiée. Compétence /protection-majeur (jamais en tâche planifiée)

Sous-famille Permanence vocale IA

Permanence téléphonique pour un artisan client : le standard téléphonique (garde AGI et pont audio tenus dans un seul processus pour un fail-closed structurel) route vers l'agent IA qui tient la conversation et produit la fiche d'appel. Sur échec de décrochage, la messagerie est relevée par IMAP. Seul le module de rapport a le droit d'appeler la façade email — cette contrainte est un invariant de conception.
Composant Rôle Mode d'invocation
Façade téléphonie Gère le compte téléphonique du fournisseur : affichage de l'état, durcissement (filtrage réseau, mot de passe SIP écrit dans les variables d'environnement de l'hôte, jamais affiché), retrait d'une adresse réseau des restrictions (sans toucher au mot de passe, avec relecture après écriture et vérification que la liste reste cohérente), preuve d'enregistrement SIP, messagerie, cycle de vie du jeton API. CLI / bibliothèque (pont audio)
Agent de conversation Tient la conversation sans serveur SIP : reçoit les tours de parole, produit les réponses, mesure la latence, écrit les enregistrements d'appel et de tour de parole, rend la fiche. Refuse de démarrer si le routeur n'a pas rendu un verdict « agent ». Backend de parole injecté (réel ou scriptés pour tests/rejeu). Bibliothèque (pont audio, garde AGI, rejeu)
Démon audio Pont AudioSocket TCP (PCM 8 kHz, un appel à la fois) : rend la permanence non muette. Transcription et synthèse vocale via le worker interne sur le réseau privé — jamais un tiers. Accusés et salutations préchargés. Session à usage unique réclamée dans le registre du garde. Service système / CLI --check
Contexte de l'agent pendant l'appel Façade unique de « ce que l'IA sait pendant un appel » : dossier du client, construction du prompt système, vérification d'étanchéité (lève une erreur si une ligne appartient à un autre client). Le prompt système est extrait de la documentation du script conversationnel. Bibliothèque (agent, démon audio, rejeu)
Garde AGI (standard téléphonique) Poste de garde entre la ligne et la voix : interroge le routeur, journalise les refus, rend la décision au plan de numérotation, tient le registre des sessions. Fail-closed : démon absent → messagerie. Évite que le service de standard lise les variables d'environnement sensibles. Bibliothèque (embarqué dans le démon audio) / CLI (--check)
Rejeu d'appel Simule un appel entrant à travers la vraie chaîne routeur → contexte → agent → fiche, sans ligne téléphonique. Scénarios documentés. Aucun appel au modèle sans --live, aucune écriture sans --persist. CLI
Rapport des fiches d'appel Transmet les fiches d'appel à l'artisan (hors chemin d'appel, invariant de conception) : un digest par client et par cycle avec transcription intégrale, envoi via la façade email, puis horodatage de l'envoi posé en base. CLI (--send) — ⚠️ ligne de tâche planifiée absente du crontab actif
Routeur d'appel Décide si l'IA décroche ou si l'appel part en messagerie : configuration du tenant, plages horaires, liste blanche réseau, plafonds d'appels par jour. Fail-closed. Bibliothèque (agent, garde AGI, rejeu) / CLI
Harnais de test de l'agent Lance l'agent seul (sources de configuration coupées, sans outils) avec le dossier du client lu en base. Refuse un dossier vide sauf option explicite. CLI
Watchdog du poll de messagerie Surveille l'activité du poll de messagerie vocale : au-delà de 30 minutes sans activité, ouvre un incident dans le registre des incidents (clé stable — un incident, pas une pluie d'alertes). Tâche planifiée (toutes les 15 minutes)
Ingestion messagerie vocale Ingère les messages laissés sur la messagerie du fournisseur : IMAP avec vérification DKIM (domaine signataire attendu), extraction de l'appelant, de la durée et de la transcription par motifs, rattachement à l'enregistrement d'appel, insertion idempotente, marquage lu après succès. Sans modèle de langage, sans envoi. Tâche planifiée (toutes les 5 minutes)

Sous-famille Emails système et triage automatique

Ménage de la boîte du fondateur : les emails auto-adressés à préfixe normalisé (vigies, alertes automates) sont triés automatiquement ; tout le reste (tiers, réponses, transferts) reste dans la boîte principale.
Composant Rôle Mode d'invocation
Trieur de boîte de réception Unique trieur de la boîte principale. Lit les en-têtes de famille et d'agent posés par la façade email : les familles action, validation et urgence restent dans la boîte principale ; recap et info sont déplacés vers un dossier dédié.
Fail-closed : expéditeur = la boîte elle-même (ou l'identité de copie interne) ; jamais de traitement sur un Re: ou Fwd: (une réponse « valide <jeton> » ne doit jamais être triée avant le module d'accord). Étiquette inconnue → reste dans la boîte. Un message sans en-tête est traité par déduction.
Ne supprime jamais. Coupe-circuit par variable d'environnement.
Tâche planifiée (toutes les 5 minutes)
Récapitulatif de 7 h 30 Module pur (sans réseau ni modèle de langage). Décide pour chaque vigie interne :
  • Différer : la vigie passe en file de récapitulatif (le dossier des brouillons est la file).
  • Supprimer : vigie sans contenu utile (« 0 sujet », « rien programmé », accusé de réception) — reste lisible en base.
  • Envoyer : tout le reste.
Jamais une urgence, une question ou un message de tiers. Replie les répétitions du jour et indique « inchangé depuis le JJ/MM » quand l'empreinte est identique à celle de la veille (mémoire 3 jours, insensible à l'heure et à l'âge). Si le récapitulatif le plus ancien non envoyé dépasse 30 heures, les alertes repartent individuellement. Coupe-circuit par variable d'environnement.
Bibliothèque (façade email, digest matinal)
Étiquetage et anti-rafale des envois internes Module pur. Cinq familles fermées. Détecte l'émetteur réel par analyse de la pile d'appel (jamais le paramètre « boîte expéditrice »). Anti-rafale : même destinataire et même sujet normalisé dans une fenêtre de 6 heures (24 heures pour les urgences, un seul incident par sujet récurrent) → envoi retenu et journalisé. Les familles action et validation ne sont jamais retenues. Historique illisible → l'envoi part. Coupe-circuit et option --force. Bibliothèque (façade email, trieur, canal Atlas)

Famille Blog, SEO & Contenu

Cette famille regroupe l'ensemble des automates qui produisent, optimisent et surveillent le contenu éditorial et les signaux SEO de la flotte : moteur de publication, optimisation multilingue des méta-données, génération d'articles, couvertures visuelles, forum de dialogues d'agents, diffusion sociale et sous-systèmes connexes (Search Console, indexation par vagues, maillage interne, traductions i18n, netlinking).

Moteur de publication et optimisation SEO

ComposantRôleInvocation
Moteur de publication DB-First Publie les contenus depuis la base de données vers les sites. Accessible en ligne de commande ou via la compétence /publish. CLI / skill /publish
Moteur SEO multilingue par page Optimise les méta-titres, descriptions, FAQ et le maillage interne page par page. Maintient un statut de traitement et des instantanés de sauvegarde. Fonctionne comme noyau unique : toute optimisation SEO passe par ce moteur. Note : les trois tâches planifiées (vérification titre, description, état général) sont actuellement désactivées faute de forfait actif ; l'usage effectif est donc CLI ou via appelants directs. Évolutions récentes : gestion des exceptions de nommage de slugs, garde sectorielle sur certains types d'offres, lecture canonique des attributs produit en langue source même lors du traitement d'une autre langue, normalisation des valeurs LLM, routage FAQ source vide vers le modèle de génération historique, omission de formats non justifiés sur la verticale alimentation. CLI
Correcteur de liens dans les descriptions Vérifie que chaque lien interne d'une description produit pointe vers une URL qui répond avec succès, dans la langue de la description. Le système sonde la cible réelle (en suivant les redirections) plutôt que de recalculer les règles de routage. Une URL introuvable dans les deux langues voit son lien supprimé mais son texte d'ancre conservé. CLI
Correcteur de résumés SEO Détecte les résumés courts qui débordent sur la description longue et corrige automatiquement, avec instantané avant mutation et possibilité de retour arrière. CLI
Sentinelle SEO technique multi-tenant Surveille les indicateurs SEO de la flotte enrôlée et alerte sur les régressions. Lit les sitemaps déclarés dans robots.txt (y compris les index imbriqués et les URL enveloppées de CDATA). Relève également la lisibilité des fiches produit par les assistants d'achat (ChatGPT, Gemini, Perplexity) : un échantillon de fiches est évalué et le résultat est fusionné dans le verdict global. Les identifiants du compte Search Console sont transmis au conteneur d'exécution par l'environnement du processus, sans apparaître dans les arguments ni dans les journaux. Planifié / skill /seo-audit --sentinelle
Évaluateur de lisibilité agent Répond à la question « ce site est-il lisible par un assistant d'achat ? » en trois étages : être trouvé (robots, flux marchand, sitemaps), être retenu (données structurées JSON-LD des fiches), pouvoir acheter (hors périmètre du relevé). Le module relève sans juger ; le verdict par fiche provient d'une règle du cœur du système. CLI --tenant X ou --site URL ; skill /fiche-agent ; bibliothèque
Pont de jugement des fiches (Node) Applique la règle de lisibilité agent du cœur du système à une liste de fiches JSON-LD reçue sur l'entrée standard. Retourne les verdicts dans le même ordre. Agnostique du tenant. Bibliothèque (sous-processus)

Hygiène du blog et similarité

ComposantRôleInvocation
Nettoyage des articles blog Supprime les doublons et les pages vides du blog. ⚠ Non planifié : la tâche automatique est désactivée. CLI
Bibliothèque de similarité Module partagé de calcul de similarité entre articles, utilisé par le moteur de publication. Bibliothèque
Générateur de descriptions produit Rédige des descriptions produit enrichies via un modèle de langage. CLI

Générateurs visuels

ComposantRôleInvocation
Générateur de couvertures blog Génère les images de couverture d'articles depuis une file d'attente. ⚠ Non planifié : les tâches automatiques sont désactivées. CLI / bibliothèque
Générateur de carrousels LinkedIn Produit des carrousels PDF au format 1080×1080 pixels pour LinkedIn. CLI

Surveillance du dictionnaire et couverture SEO source

ComposantRôleInvocation
Vigie du dictionnaire Surveille la présence des concepts du dictionnaire dans les articles. ⚠ Non planifié via la ligne de commande directe ; le planificateur interne pourrait l'exécuter toutes les 30 minutes (à confirmer). Récemment réaligné pour lire les articles publiés du blog via un lecteur de pages dédié, l'ancienne table source ayant disparu. CLI / skill /dictionnaire
Vigie de couverture SEO source Détecte les catégories sans méta-description ni description en langue source — angle mort du suivi de traduction qui ne couvre que les langues secondaires. Les articles sans contenu dans la langue source ne sont plus comptés comme trous de traduction. Planifié / CLI / skill /seo-coverage

Intégrations de données : Instagram et Search Console

ComposantRôleInvocation
Synchronisation Instagram Importe les posts Instagram d'un compte via l'API Graph (pagination complète) et les stocke en base. Planifié / CLI
Renouvellement du token Instagram Gère le cycle de vie du token d'accès Instagram pour un tenant : échange d'un token court en token long (60 jours), renouvellement avant expiration, dépôt manuel d'un token existant. Ces trois opérations sont mutuellement exclusives. La clé applicative partagée est lue depuis les variables d'environnement, jamais depuis des variables tenant-préfixées qui sont présentes en configuration d'audit mais sans usage fonctionnel Instagram. Planifié hebdomadaire (dimanche) / CLI

Rapport et suivi SEO

ComposantRôleInvocation
Digest SEO bi-hebdomadaire Couche de livraison sur la sentinelle SEO existante : lit l'historique de santé et les données Search Console granulaires, envoie un récapitulatif par email. Ne duplique pas le moteur SEO. Modes aperçu, test et envoi réel. Planifié / CLI
Réparation de slugs d'articles Corrige les identifiants d'URL des articles de blog pour respecter la convention de nommage (préfixe de catégorie suivi du segment final). Idempotent, multi-tenant, sans modification du contenu. CLI
Déduplication de catégories Supprime les catégories en double résultant d'imports répétés. CLI
Déduplication de valeurs de caractéristiques Nettoie les doublons dans les valeurs de caractéristiques catégorielles (couleur, forme, style). CLI
Projection d'attributs vers la navigation à facettes Projette les attributs canonicalisés issus du traitement LLM dans la table de navigation à facettes, en mode complément uniquement. CLI
Re-catégorisation par taxonomie fournisseur Attribue à chaque produit la catégorie issue de la taxonomie fournisseur officielle, en se basant sur la référence fournisseur comme clé de jointure. CLI

Connecteur Figma (Shyrka)

ComposantRôleInvocation
Rapatriement de frames Figma (REST) Télécharge les frames Figma marquées prêtes en PNG via l'API REST, avec un manifeste JSON. Pont entre Figma et l'agent sans passer par le mode développeur MCP. CLI / skill /figma
Capture de frames Figma (navigateur) Fallback navigateur lorsque l'API REST Figma est indisponible : ouvre le fichier en vue seule via un navigateur sans interface graphique, capture chaque frame en PNG et produit un manifeste au même format que le composant REST. Chaque entrée du manifeste porte deux champs de provenance supplémentaires (source_capture et render_width) qui évitent toute confusion entre captures et exports REST lors de la validation de qualité. CLI node <module-capture-figma> --url <lien-figma> / skill /figma

Connecteurs Analytics

ComposantRôleInvocation
Connecteur GA4 (lecture) Accès souverain en lecture seule à l'API de données Google Analytics 4, réutilisant les identifiants Search Console. CLI / bibliothèque
Façade d'intégration de maquette Applique un plan JSON structuré à une variante de page d'accueil en brouillon dans la base de données de préprod d'un tenant. N'interprète jamais la maquette elle-même. CLI / skill /integration-maquette

Catégorisation et taxonomie

ComposantRôleInvocation
Catégoriseur produit automatique Dérive le type du produit et le range dans son rayon/étagère plutôt que de suivre le chemin fournisseur erroné. CLI
Worker SEO en masse Dépile la file de traitement SEO tenant par tenant et lance le moteur d'optimisation. C'est le « bouton magique » du back-office. Planifié toutes les 5 minutes
Moteur SEO produit (grind) Génère méta-données, H1 et slug différenciés pour les fiches produit, avec enrichissement du cache d'attributs. Ne marque plus une fiche comme « optimisée » si rien n'a été écrit. CLI
Templater SEO produit déterministe Fonctions pures sans dépendance base de données ni modèle de langage, importées par le moteur SEO. Gère la troncature propre des titres (sans mot de liaison orphelin), la clause catégorie conditionnelle et les introductions de caractéristiques par langue. Bibliothèque
Validateurs produit allégés Miroir simplifié des validateurs lourds du moteur de publication, pour les traitements produit légers. Bibliothèque
Suivi de position SEO Enregistre la position moyenne mensuelle par mot-clé depuis Search Console et alimente le tableau de bord de suivi. Planifié le 2 de chaque mois
Synchronisation du statut SEO manuel Remonte le statut SEO posé manuellement côté tenant vers le référentiel central. L'écriture se fait par lots, avec une seule instance active à la fois. Planifié toutes les 15 minutes
Réconciliateur de taxonomie fournisseur Détecte et corrige les doublons, nœuds redondants et profondeurs excessives dans l'arbre de catégories. CLI (remédiation manuelle)
Sentinelle de taxonomie Fait respecter les contraintes de l'arbre : profondeur bornée et zéro nœud parasite. Fonctionne en vérification planifiée et comme garde avant déploiement. Planifié quotidien / hook pre-deploy
Fusion de catégories Fusionne une catégorie source dans une catégorie cible : reparentage des enfants, déplacement des produits, désactivation de la source, reconstruction complète de l'arbre imbriqué. CLI
Hiérarchisation des URLs catégorie Transforme les liens internes de slugs plats en chemins imbriqués reconstruits depuis l'arbre de catégories, avec redirections 301 systématiques. CLI / skill /hierarchie-categories
Compléteur de mégamenu S'assure qu'un rayon avec produits a une entrée racine dans le mégamenu, et qu'une sous-catégorie avec produits a une entrée sous son rayon. Rafraîchit les liens périmés après optimisation de slug. CLI
Optimiseur de slugs de catégories Raccourcit les URLs en retirant les tokens déjà présents chez un ancêtre et les mots de liaison, avec redirections 301 et alertes en cas de dérive. Planifié quotidien / CLI / skill /slug-optimizer

Optimisation de contenu produit et de slugs

ComposantRôleInvocation
Optimiseur de slugs produit Différencie les slugs produit partagés par plusieurs fiches en enrichissant le nom et l'identifiant d'URL avec dimensions et poids. Idempotent, sans création de redirections (le routeur par identifiant suffit). Skill /product-slug-optimizer / CLI
Rafraîchisseur de cibles de redirections Identifie les redirections 301 dont la cible a vieilli et produit un fichier SQL de reciblage. N'écrit jamais directement en base. CLI
Correcteur de slash final dans les redirections Aligne les cibles des redirections catégorie sur la forme canonique déclarée par le site (lue via la balise link rel=canonical). CLI
Garde des URLs à trafic Rejette quatre états problématiques sur les URLs portant le trafic d'une bascule : URL morte, chaîne de redirections trop longue, atterrissage non désiré sur la page d'accueil (soft-404), dérive. Les redirections calculées ne sont écrites nulle part ; seul ce rejeu les protège. CLI

Carte statique et vidéo

ComposantRôleInvocation
Générateur de carte statique Transforme des points géographiques en image WebP, sur fond de tuiles OpenStreetMap avec attribution incrustée. Projection et cadrage en fonctions pures. CLI / skill /page-iso-figma
Encodeur de boucle vidéo hero Convertit une source vidéo en boucle légère pour fond de hero (WebM + MP4 sans piste son, image d'attente). Le fichier source est fourni par le propriétaire des images ; aucun téléchargement automatique. CLI (sous-commandes)

Lecteur du blog interne et audit SEO mensuel

ComposantRôleInvocation
Lecteur de pages du blog interne Lecture seule des articles publiés du blog interne de la plateforme, par pages depuis un curseur, dans un budget de caractères. Existe parce que ces articles sont stockés dans une base accessible uniquement depuis la machine hôte ; le conteneur applicatif passe par le daemon hôte pour y accéder. python3 -m <module-lecteur-blog> (daemon hôte)
Planificateur d'audits SEO mensuels Le premier de chaque mois, ouvre une tâche d'audit SEO pour chaque tenant actif. Le planificateur ne fait qu'ouvrir le travail (une tâche backlog par tenant et par mois, idempotente) ; l'audit lui-même est conduit en session avec un modèle de langage. Planifié mensuel / CLI

Sous-famille — Mesh des sites : pôles SEO, Performance et Sécurité

Chaque site de la flotte est noté sur trois pôles (/100) dans le tableau de bord, chacun lié à un objectif cible (/10). Tout est mesuré sans modèle de langage, ce qui autorise l'exécution planifiée. La preuve d'un objectif et la note du pôle partagent une seule source de vérité.

ComposantRôleInvocation
Sonde quotidienne performance/sécurité Mesure le TTFB (médiane de 3 requêtes), la redirection HTTP→HTTPS, les en-têtes de sécurité (HSTS, CSP, protection contre le clickjacking, typage de contenu, politique de référent, permissions), les chemins sensibles exposés (détectés au contenu, pas au seul code HTTP 200), la divulgation de version serveur, et l'état des jails de protection contre les attaques par force brute. Planifié quotidien
Instantané PageSpeed Pour chaque site enrôlé : mesure en mobile de la page d'accueil et des pages les plus cliquées via Search Console sur 28 jours, via l'API PageSpeed Insights (données terrain et laboratoire séparées). Planifié quotidien
Créateur d'objectifs de pôle Crée les objectifs de pôle manquants (un par site × pôle). Un pôle ayant déjà eu un objectif, même annulé, ne renaît pas automatiquement. Planifié quotidien
Preuve d'objectif de pôle Lit la note du pôle depuis l'API du tableau de bord et rend un contrat de preuve : l'objectif est atteint si la note est supérieure ou égale à la cible et si le pôle est mesuré sur au moins la moitié de son barème. CLI (--site, --pole, --json)
Mesureur d'objectif à la demande Joue la commande de preuve d'un objectif et enregistre le résultat. N'écrit jamais dans la table principale des objectifs (dont les champs appartiennent au tick planifié). CLI / tableau de bord
Audit de site à la demande Exécute les mesures des trois pôles, fige les notes et génère des PDF d'audit (un par pôle et un document complet). Un audit bloqué depuis plus de 45 minutes est déclaré mort. Planifié à la minute (drain) / CLI
Générateur PDF d'audit de site Produit la photo figée d'un audit sous forme de document : trois pôles notés avec leurs couches et objectifs, sur la charte du rapport SEO mensuel. Chaque chiffre porte sa source et sa date. Bibliothèque
Garde des URLs à trafic hérité Vérifie les URLs qui portent le trafic d'une migration, en rejoant un fichier de référence. Refuse quatre états : URL morte, chaîne de redirections, soft-404 vers la page d'accueil, dérive de destination. CLI

Sous-famille — Google Search Console (GSC)

Architecture en deux couches : les modules JavaScript tournent dans le conteneur d'exécution applicatif (accès à l'API GSC, identifiants déchiffrés depuis l'environnement). Les orchestrateurs Python invoquent ces modules et effectuent les écritures en base. Les identifiants déchiffrés restent en mémoire vive — jamais en sortie standard, journaux ou base de données.

ComposantRôleInvocation
Sonde GSC réutilisable Retourne le trafic organique d'une propriété sur deux fenêtres de 28 jours. Aucun secret en sortie. Bibliothèque (dans le conteneur applicatif)
Listeur de propriétés GSC Liste les propriétés Search Console visibles par le compte de service. Bibliothèque (dans le conteneur applicatif)
Import GSC dimensionnel Récupère les données Search Console selon les dimensions date/requête/page et les écrit en base via upsert idempotent. Gère le backfill par tranches, le rattrapage des jours vides, les propriétés de domaine, et la boucle sur toute la flotte. La clé de déchiffrement est sélectionnée automatiquement parmi les candidates en testant laquelle ouvre réellement le blob chiffré. Les identifiants passent par l'environnement du sous-processus, jamais par les arguments de la ligne de commande. CLI
Popularité produit depuis GSC Recopie la demande Google d'un site vers sa base locale : calcule un score par produit (clics × 10 + impressions) depuis les données Search Console, et l'écrit dans la table de popularité du tenant pour alimenter la vitrine « meilleures ventes ». Planifié quotidien
Soumission de sitemaps à GSC Soumet un sitemap à Google Search Console via l'API et retourne un verdict JSON. Bibliothèque (dans le conteneur applicatif)
Sonde GSC mensuelle Agrège les données mois par mois pour le suivi de positionnement. Supporte les dimensions requête, page, pays et appareil. Un mois plafonné par la limite de lignes de l'API est signalé comme non comparable. Bibliothèque (dans le conteneur applicatif)
Tendance GSC mensuelle Diagnostic SEO : trafic agrégé par mois sur 16 mois (sans anonymisation des requêtes) et série journalière brute. Utilisé pour dater les bascules de taux de clic. Bibliothèque / CLI (dans le conteneur applicatif)
Vigie couverture GSC Suit le volume du rapport de couverture d'indexation et alerte sur la variation (pas sur le niveau absolu). Planifié hebdomadaire
Réparateur d'URL orphelines Pose des redirections 301 pour les URLs orphelines (404 ou renvoyant vers une 404), après vérification HTTP 200 de la cible. N'accepte jamais la page d'accueil ou une chaîne de redirections comme cible. Skill /seo-orphelines / CLI
Sonde de propriété GSC Énumère les propriétés Search Console ouvertes pour un domaine donné, plutôt que de deviner leur forme. Sort en erreur si le domaine n'est pas trouvé. Skill /gsc-raccorder / CLI / bibliothèque
Rejeu d'inspection d'URL Inspecte par lots une liste d'URLs via l'API d'inspection de Google, en lecture seule. Quota de 2 000 par jour et par propriété. Les URLs déjà inspectées sans erreur ne sont pas rejouées ; un code 429 arrête le traitement jusqu'au lendemain. Classe les écarts par cause (noindex, non indexée, canonique ailleurs). CLI
Vérificateur de propriété GSC Vérifie une propriété Search Console au nom du compte de service lorsqu'elle n'apparaît pas dans la liste. Délègue à un module JavaScript dans le conteneur applicatif. Pour une propriété de domaine, génère un jeton DNS. CLI / skill /gsc-raccorder
Listeur de sitemaps GSC Liste les sitemaps soumis à Search Console pour une propriété donnée. Lecture seule. Skill /audit-forum-seo (dans le conteneur applicatif)
Interface Search Console (lecture navigateur) Accès en lecture aux rapports de l'interface Search Console via une session navigateur automatisée, pour les données non exposées par l'API (rapport de couverture notamment). CLI / bibliothèque
Structuration par la demande Décide la profondeur optimale d'un arbre de catégories en se basant sur la demande mesurée : demande propre d'un nœud (requêtes portant son libellé et aucun libellé de ses enfants). Lecture seule. CLI / skill /structuration / bibliothèque

Traductions i18n (blog et contenu)

ComposantRôleInvocation
Traduction des libellés d'interface Traduit les libellés du hub du français vers l'anglais. CLI
Complétion des contenus DB-first en anglais Complète les champs de contenu en base qui n'existent qu'en français. CLI
Traduction des produits en anglais Traduit les fiches produit du français vers l'anglais. CLI
Traduction des champs de payload JSON Traduit les champs embarqués dans les blobs JSON des contenus. CLI
Seed de traductions YAML vers la base Initialise les traductions depuis des fichiers YAML vers la base de données. Assemble la commande distante de façon sécurisée (les secrets sont masqués dans les journaux). Distingue une langue absente d'une panne de connexion, et retourne une erreur si au moins un fichier a subi une panne. CLI
Générateur de routes i18n Génère par code les segments de route i18n depuis la base de données (catégories de niveau 2 et méta-langues du tenant) vers un fichier JSON consommé au build. Non bloquant en cas d'indisponibilité de la base. Bibliothèque / CLI (build)
Régénérateur de slugs anglais Régénère les identifiants d'URL anglais corrompus depuis le nom produit anglais. Déterministe, sans modèle de langage. CLI
Re-traduction des noms produit anglais Re-traduit via un modèle de langage les noms produit anglais restés en français (détection par analyse de caractères accentués). CLI
Traduction des FAQ alimentation Traduit du français vers l'anglais les FAQ produit et les fiches alimentation, via un modèle souverain. Lecture robuste par agrégation JSON, écriture par suppression et réinsertion dans une transaction. CLI
Sweep qualité des descriptions produit anglaises Re-traduit les descriptions courtes et longues HTML depuis la version française canonique. Garde-fous : rejet si une quantité présente en français disparaît ou si la structure HTML change. CLI
Re-traduction du contenu builder Repère les lignes en anglais valant encore le français ou vides, et les re-traduit par lot JSON. CLI
Parité des packs de langue du cœur Vérifie que toute clé de traduction présente dans le code existe dans chaque fichier de locale. Peut compléter les locales manquantes à la demande via un modèle de langage, en conservant les variables de pluriel. Hook pre-commit / test automatisé / CLI
Audit de couverture blog i18n Compte les articles creux par langue : corps manquant, FAQ absente, articles sans FAQ source. Présence uniquement, pas qualité. Surveille le relais nocturne (la publication n'écrit que la langue source). CLI
Audit i18n en base (multi-tenant) Audite l'état des traductions en base pour un tenant : langues actives, équilibre de volume par langue, taux de traduction réelle (textes identiques à la langue source). Lecture seule. Skill /audit-i18n-db / CLI
Auditeur de réalité locale Mesure, par table et colonne, le taux d'égalité à la langue source pour détecter les locales qui ne sont que des copies. La garde locale lit les termes attestés du glossaire en base, détecte les résidus de la langue source à l'intérieur des traductions, et ignore les cellules source vides. Skills /seo-audit, /seo-enhance, /seo-meta, /traduire-catalogue / CLI
Registre des égalités FR→locale Inventaire exhaustif des valeurs identiques à la langue source pour un catalogue actif. Décompose chaque égalité en catégories : vide, invariant attesté (marque, référence, catégorie profonde), cognat, localisable. Calcule trois taux (brut, hors invariants, hors invariants et cognats) et produit un fichier CSV du reliquat localisable. CLI
Module d'invariants i18n Module pur de la règle R : réduit une valeur éditoriale égale à la langue pivot à ses invariants token par token (marque, référence, et termes attestés dans le glossaire du tenant). Ne connaît aucun terme a priori — ils sont injectés depuis la base. Bibliothèque
Audit d'intégrité des fiches produit par langue Vérifie la cohérence des fiches produit par langue face à la langue de référence (nom, slug, métas, redirections actives). CLI
Preuve SEO i18n page par page Lit le HTML servi d'un échantillon de pages et vérifie dix critères techniques (statut HTTP, attribut de langue, canonical, hreflang, titre, description, H1, données structurées JSON-LD, fil d'Ariane, indexabilité). Lecture seule, sortie erreur au premier échec. CLI
Moteur de traduction des corps CMS Traduit les corps d'articles de blog vers toutes les langues servies par le tenant. Utilise le glossaire, le profil de marché et le routage IA configuré. Note : depuis une décision éditoriale récente, le blog n'est plus traduit — il est rédigé nativement pour chaque marché cible. CLI / bibliothèque
Traducteur de FAQ d'articles Traduit les questions et réponses des FAQ d'articles blog vers toutes les langues du tenant. Réutilise le prompt, le glossaire et les gardes du moteur de traduction CMS. L'écriture ajoute une ligne sans jamais remplacer l'existant. CLI / bibliothèque
Pilote de mise en marché d'une locale Gère l'état de mise en marché d'une locale d'un tenant en préprod : brouillon (invisible des moteurs) ou ouvert (verdict GO + décision validée). L'état est stocké dans la base du tenant. CLI
Réécriture contrôlée des liens CMS traduits Réécrit les liens internes d'un corps CMS traduit vers des routes attestées, sans connaissance du tenant embarquée. Refuse tout lien sans destination vérifiée. Sauvegarde ciblée avant toute écriture en production. CLI
Migration de slugs CMS avec redirections Bascule les slugs CMS localisés avec leurs redirections 301 exactes, depuis une carte fournie au lancement. Vérification de l'état exact avant opération, mise à jour dans une seule transaction. CLI

Sous-famille — Autoblog (rédaction, relais, semis et réassort)

Chaîne quotidienne : semis → rédaction (06 h 30) → scènes (06 h 45) → parution par le worker du tenant → relais avec couverture (09 h xx) → vigie de file. Les tâches impliquant un modèle de langage portent une autorisation explicite dans la liste de contrôle des crons LLM.

ComposantRôleInvocation
Rédacteur d'articles (mothership) Rédige les articles d'un tenant depuis le vaisseau-mère et les dépose dans la file de publication en statut provided. Le fournisseur de modèle est contraint à la liste autorisée ; un fournisseur non admis est refusé par exception. Décrit également pour chaque article un brief visuel (1 infographie + 2 photos). Planifié quotidien (rédaction 06 h 30, scènes 06 h 45)
Relais de publication Après la fenêtre de parution, déclenche la génération de couverture et la complétion de FAQ pour chaque article fraîchement publié. Le blog n'est plus traduit : il est rédigé nativement pour chaque marché. Planifié quotidien (09 h 15 à 09 h 55 selon tenant)
Semis automatique de sujets Ressème la file de rédaction lorsqu'elle passe sous 5 articles : lit le stock, rafraîchit la demande si nécessaire, propose un lot de sujets, le fait passer une assurance qualité (brief de marque, gabarit de titre, similarité) puis sème. Planifié quotidien (06 h 05)
Vigie de file de rédaction Refuse le silence de la file : mesure l'autonomie (jours de sujets restants), détecte une file pleine sans parution, les post échus non partis et les échecs en attente. Calcule l'autonomie en jours calendaires en tenant compte des jours de parution configurés. Alerte séparément en cas de cadence excessive (plus de 3 articles par semaine). Planifié quotidien (07 h 20 et 09 h 15) / skill /diffusion
Semoir de sujets Pour chaque sujet d'un fichier validé, résout ou crée la coquille CMS et enfile un job dans la file de publication. Ajoute automatiquement une consigne de couverture (marqueur, questions réelles à couvrir, plancher de 1 500 mots). Gère l'association à des avatars de persona. CLI / skill /maillage-interne
Réassort perpétuel de la flotte Orchestre le réassort des files autoblog de toute la flotte : découvre les tenants, régénère le stock minimal depuis la demande mesurée, avec un plafond de dépense DataForSEO. Une politique tenant inactive est réellement écartée du réassort. CLI
Relecture hebdomadaire des articles produit Relecture des articles décrivant la plateforme, confrontée au code réel (le juge de rédaction note la forme, pas l'exactitude). La rédaction dépose en review ; une session relit avant validation. Gestes : poser (cron lundi sans LLM), exporter, retenir, appliquer des corrections ciblées. Planifié lundi / CLI / skill
Règles d'admissibilité éditoriale Fonctions pures sans effet de bord : rejette les intentions non informationnelles, les véhicules nommés, les proximités locales, les raisons sociales, les termes interdits du brief de marque, la demande périmée, les langues inactives. Dédoublonne par slug et similarité de titre. Bibliothèque
Chercheur de sources d'autorité Recherche pour chaque article en attente des sources d'autorité via un agent web. Valide mécaniquement que l'extrait cité figure mot pour mot dans le texte source, que la page traite bien du sujet, et que la source n'est pas déjà utilisée. Un octet nul dans le texte lu est écarté sans faire tomber le lot ; les incidents sont comptés et le processus sort en code 2 si au moins un job a échoué. Planifié quotidien (06 h 10)
Contrat des visuels d'article Module pur définissant les règles des visuels du corps d'article : 1 infographie + 2 photos, l'infographie ne montrant que des chiffres présents dans le texte. Le juge vision identifie les lignes de texte tronquées par le cadre ou une bande vide. Bibliothèque
Générateur nocturne de visuels Génère les visuels du corps d'article via un modèle de génération d'images, contrôlés par un juge vision distinct du fabricant. L'infographie est transcrite puis comparée au texte attendu. Au troisième refus, le visuel est abandonné et l'article paraît sans lui, avec une alerte. Planifié quotidien (23 h 10 à 01 h 40 selon tenant)

Sous-famille — FAQ des articles blog

ComposantRôleInvocation
Rattrapage de FAQ française Complète jusqu'à 15 Q/R les articles publiés sans FAQ, sans écraser l'existant. Lancé en sous-processus par le relais de publication. CLI / worker (cron indirect)
Régénérateur de FAQ Régénère la FAQ française des articles déjà servis sur un grounding catalogue renouvelé. Ne remplace l'ancienne que si la nouvelle atteint le seuil de qualité. CLI
Purge des FAQ inline en doublon Retire du corps d'un article le bloc FAQ inline lorsque la base porte déjà la FAQ de cette langue, pour éviter l'affichage en double. CLI

Sous-famille — Couvertures de catégorie

La cible de dépôt est lue dans la configuration du VPS client, jamais codée en dur.

ComposantRôleInvocation
Résolveur de cible de couverture Résout l'emplacement de dépôt de la couverture d'un tenant depuis sa configuration. Importé par tous les composants qui génèrent ou publient des couvertures. Bibliothèque / CLI / skill /covers-categorie
Préparateur de dossier de couverture (lecture seule) Pour chaque catégorie visée, rassemble la matière nécessaire à la génération de l'image (textes, produits du sous-arbre, fabricants, état de couverture actuel) et les textes alternatifs par langue. Skill /covers-categorie
Publieur de couverture de catégorie Dépose l'image d'une catégorie et son texte alternatif par langue en base. Validation du lot complet, dépôt des fichiers, écriture sécurisée, relecture. Sans l'option d'application, la transaction est annulée. Skill /covers-categorie

Sous-famille — Couvertures blog (photo réaliste)

ComposantRôleInvocation
Chaînon nocturne de couvertures Génère et publie les couvertures des articles ayant une scène mais pas encore d'image. Traite les articles publiés en priorité, puis le stock en attente de parution. Maximum 5 couvertures par nuit, abandon après 3 échecs consécutifs. Planifié (21 h 40 à 07 h 50 selon tenant)
Générateur de couverture photo réaliste Génère une couverture en photo réaliste via un modèle de génération d'images. Recadrage 1200×630 pixels, format WebP. Peut fonctionner sans navigateur via l'agent de génération (pris d'office lorsque le navigateur automatisé est indisponible). Vérifie l'autorisation de dépense payante avant tout appel. CLI / skills /covers-categorie, /seo-enhance
Publieur de couverture blog Dépose le fichier sur le VPS du tenant et écrit l'URL de couverture en base. Purge le cache SSR après écriture pour que la nouvelle image soit immédiatement servie. CLI / skill /covers-categorie

Sous-famille — Forum de dialogues d'agents

Chaîne « un fil ne part pas sans son texte » : le composant de demande remplit la file sans LLM, la résolution de source propose une URL d'autorité, le cadrage valide sous gate, le dialogue joue et publie, le scanner filtre les fuites. Aucun cron : le tirage reste un geste à la demande.

ComposantRôleInvocation
Moteur de dialogue de forum Joue un fil pédagogique avec des agents (question naïve, explication, challenges socratiques, arbitrage, récapitulatif). Passe un gate éditorial et un scan de fuite à chaque tour. Publie sur le site public après validation. Skills /meta-forum-source, /forum-lecon, /sources-ouvrage, /wukong-post / CLI
Cadreur de fil de forum Valide un fil dérivé d'une URL : garde mécanique (question naïve, angle nu, attribution de source, langue) puis jury LLM adverse avec une seule reprise ciblée. Remplace le dernier point d'arrêt humain avant la rédaction. Skill /meta-forum-source / CLI
Gestionnaire de file de forum Administre la file de l'autoforum : liste, ajoute, associe une source, dédoublonne, refuse, consulte le prochain sujet. Le passage en statut prêt exige une URL source. Volontairement sans cron ni daemon. CLI / bibliothèque
Résolveur de source de forum Cherche le texte qu'un fil débattra pour les sujets en attente de source, via un agent web sous sept gardes mécaniques (URL qui répond, domaine à auteur, attribution, thèse verbatim, source inédite). Propose ; n'écrit qu'avec l'option d'application. CLI
Producteur de sujets de forum depuis la demande Remplit la file du forum depuis la demande mesurée, sans LLM ni dépense. Les sujets naissent en statut « besoin de source », jamais avec une source inventée. CLI
Scanner de fuites Analyse mécanique par expressions régulières qui refuse qu'un contenu interne parte en publication : adresses réseau, noms de clients, chemins serveur, valeurs de secrets. Les noms de variables sont tolérés. Bibliothèque
Lanceur autonome de forum Commande unique « une URL → un fil publié, sans humain dans la boucle » : verrouille l'exécution (un seul run à la fois), matérialise le contexte de session, spawne une session d'agent, arbitre le résultat, alerte en cascade si la session meurt sans rapport. Ne publie jamais directement, ne relance jamais en boucle, ne débloque jamais un gate. CLI

Sous-famille — Indexation par vagues

Un domaine neuf n'est pas indexé d'un coup : un mécanisme de paliers ferme les pages minces en noindex jusqu'à leur vague. Un seul composant écrit cette table ; un autre mesure le taux d'indexation via l'inspection d'URL ; la commande d'ouverture de vague ne passe que si la vague précédente atteint le seuil.

ComposantRôleInvocation
Gestionnaire de paliers d'indexation (catalogue profond) Calcule les paliers par rôle (profondeur dans l'arbre, demande propre et héritée, produits par référence) et ouvre les vagues. Refuse d'écrire sur un précalcul d'agrégats périmé. Déterministe, zéro LLM. Kill-switch disponible. Planifié quotidien / CLI / bibliothèque
Gestionnaire de paliers d'indexation (catalogue plat) Variante pour les catalogues à faible profondeur d'arbre mais grand nombre de fiches fournisseur. Ouvre les catégories selon la demande (volumes + impressions GSC) et le stock, et les fiches selon leur état d'optimisation. Ne ferme jamais une page déjà ouverte. La demande est mesurée sur la requête réelle, avec possibilité de remplacer les requêtes calculées par des requêtes validées manuellement. CLI / bibliothèque
Mesureur du taux d'indexation Mesure la part d'URLs de la dernière vague indexées par Google (échantillon stratifié rôle × langue depuis le sitemap vivant). Ne compte que les catégories actives. Une page absente du sitemap qui se déclare elle-même noindex n'est pas comptée comme manquante. L'inspection se fait par lots de 25 URLs avec reprise automatique en cas d'interruption. Planifié hebdomadaire / CLI / bibliothèque
Module d'inspection d'URL (GSC) Inspecte une liste d'URLs via l'API d'inspection de Google. Quota de 2 000 par jour et par propriété ; les URLs restantes sortent en erreur au premier dépassement. Bibliothèque (dans le conteneur applicatif)

Sous-famille — Maillage interne

Le maillage se mesure sur la Search Console au lieu de s'estimer. Les cibles sont lues depuis le sitemap et les données de trafic ; un candidat ambigu est abandonné ; chaque cible est vérifiée en HTTP avant usage.

ComposantRôleInvocation
Détecteur d'occasions de liens internes Famille des agents navigateur
Doctrine de protection IP : la réputation de l'adresse IP est gérée par un proxy SOCKS résidentiel, et non par les protections anti-bot de type Turnstile. Le navigateur tourne donc en mode graphique (headful) sur une machine à connexion résidentielle.

Composants principaux

Composant Rôle Mode d'invocation
Automate Playwright avec sortie SOCKS5 Pilote un navigateur Playwright dont le trafic transite par un proxy résidentiel SOCKS5 bibliothèque
Worker navigateur headful Worker pilotant un navigateur graphique sur la machine Windows dédiée worker
CLI de la file de travaux navigateur Interface en ligne de commande qui consomme la file de travaux du moteur navigateur CLI
Automate e-commerce WooCommerce Automate générique pour boutiques WooCommerce CLI
Moteur de capture d'écran Capture de pages web — page entière par défaut ; --viewport-only pour la zone visible seule ; mode Chrome réel de la box disponible CLI / bibliothèque
Moteur de capture page entière par assemblage Dépasse la limite de texture du navigateur (16 384 px) en assemblant des morceaux au défilement réel ; masque les éléments collants après le premier morceau ; annonce la troncature au-delà du seuil configuré. Sait photographier un panneau n'apparaissant qu'au survol : cible un élément par son libellé, lève une exception si aucun visible ou si plusieurs homonymes coexistent ; un troisième critère de départage — la position dans le cadre de la fenêtre photographiée — élimine l'homonyme situé hors fenêtre quand un seul reste visible dans le cadre. CLI / bibliothèque
Enveloppe SSH forcée (infrastructure) Wrapper SSH à commande forcée sur le VPS, utilisé pour autoriser uniquement des opérations de navigation ciblées infrastructure
Scan de flotte Inspecte l'ensemble de la flotte de machines gérées cron / CLI
Façade navigateur générique vaisseau-mère → box pilotable Pont CDP entre le vaisseau-mère et la box de navigation ; registre de profils Chrome isolés (profil principal, profil assistant, profils qualité par tenant) ; chaque profil qualité n'est accessible qu'à son appelant légitime et ne peut jamais atteindre un profil appartenant à un autre contexte ; les domaines autorisés sont déclarés explicitement, une notation d'hôte exact excluant ses sous-domaines. Les profils hors-box (Mac, autre poste) font l'objet d'une vérification honnête sans sonder un Chrome local inexistant. CLI / skill /browser
Transport CDP vers la box de navigation Couche de transport Chrome DevTools Protocol, socle réutilisable par tout automate navigateur CLI / bibliothèque
Snapshot statut de la box de navigation En un seul aller-retour SSH : remonte la joignabilité, l'état des deux profils Chrome CDP (actif et au moins un onglet pilotable) et des statistiques matériel (mémoire, disque, GPU, uptime). Lecture stricte, aucun redémarrage ici. CLI / bibliothèque
Façade Soulseek Pilote le daemon Soulseek de la box via le même tunnel SSH que le transport CDP : recherche et téléchargement sur le réseau Soulseek, rapatriement des fichiers finis vers le vaisseau-mère. Lignes rouges : aucun fichier partagé sans décision explicite (dossier de partage vide au provisioning, jamais touché par ce script) ; téléchargement uniquement sur ordre explicite, jamais en cron ou de façon autonome ; la clé API du daemon n'apparaît jamais en sortie ; le chemin de téléchargement est borné (anti path-traversal). CLI / bibliothèque
Moteur de sélection produit (personal shopper) Parcourt un site marchand en lecture seule, extrait des produits filtrés et renvoie des cartes pour l'assistant shopping CLI
Agent shopping adaptatif Agent sans sélecteurs codés en dur, utilisable sur n'importe quel site e-commerce CLI
Lecteur web et routeur CMS multi-sites Détecte le CMS (Shopify, WooCommerce, PrestaShop, Magento, custom) via un cache partagé indexé par domaine ; lit le catalogue toujours depuis le contexte navigateur de la box (une requête directe depuis l'IP datacenter déclenche un 403 anti-bot). Ligne rouge P0 : lecteur seul, aucun sélecteur de paiement ou d'achat. CLI
Worker de coffre shopping (foyer) Pont entre la file de travaux et la box de navigation pour l'identité shopping du foyer. Trois types de travaux autorisés : création de compte boutique (tentative de connexion d'abord, puis inscription si le login échoue), mise en panier (recherche et ajout au panier via l'adaptateur du site, jamais de validation de commande), et envoi de message WhatsApp pro avec limite horaire par contact. Tout type hors liste blanche est refusé sans exécution. Tourne en daemon systemd avec boucle courte. Pour un contact sans message entrant préalable, le système déduit le numéro depuis la référence externe et crée un entrant synthétique avant de poursuivre ; il n'échoue que si cette déduction est impossible. worker (daemon systemd)
Façade computer-use Mac Le vaisseau-mère pilote le Mac via SSH natif : capture d'écran, clics et frappes clavier CLI / skill /mac
Adaptateur e-commerce Vertbaudet Adaptateur Playwright déterministe pour un site ASP.NET spécifique : le modèle de langage décide quoi acheter, l'adaptateur exécute ; couvre login et inscription sur une page d'authentification à double panneau. Ligne rouge P0 : aucun sélecteur de paiement, jamais de validation automatique. bibliothèque
Adaptateur générique Magento/Luma Adaptateur déterministe paramétré par URL de base, valable pour tout shop Magento sur front Luma standard bibliothèque
Adaptateur générique PrestaShop Lecture par tuiles DOM natives du thème Classic (webservice produit non public) bibliothèque
Adaptateur générique Shopify Lecture via API JSON natives cross-thème, plus fiable que le scraping DOM bibliothèque
Adaptateur générique WooCommerce Lecture produits et panier via la Store API REST publique, indépendante du thème bibliothèque
Hand-off paiement vers le foyer Dernier maillon de la chaîne shopping : le système cure le panier, le paiement reste un geste humain. Génère un lien de recréation de panier (Shopify/WooCommerce) ou des liens fiche-produit en fallback (Magento/PrestaShop/custom). Ne partage jamais les identifiants du foyer ni la session navigateur. CLI / bibliothèque
Script de provisioning d'un Chrome isolé pour un foyer Choisit le prochain port CDP libre, crée le répertoire de données dédié, pose une unité systemd utilisateur, la démarre et vérifie que le CDP est joignable. N'édite jamais de code : l'ajout au registre de profils reste un geste de revue explicite. Note architecture : les deux Chrome socles sont des unités systemd versionnées dans le dépôt (non des entrées autostart Desktop). Les flags --disable-gpu ont été retirés après maintenance matérielle de la box (ventilateurs, pâte thermique, RAM doublée) ; le garde-fou critique restant est --profile-directory=Default (sans lui, Chrome rouvre le dernier sous-profil utilisé — incident où l'assistant pilotait la session personnelle au lieu du profil dédié). L'assertion des flags canoniques et le cloisonnement du profil sont gérés par un outil d'hygiène hebdomadaire distinct, pas par le health-check de joignabilité. CLI (infrastructure, --dry-run supporté)
Health-check et auto-restart des Chrome CDP Vérifie toutes les heures que les deux profils Chrome pilotables sont joignables (CDP actif et au moins un onglet pilotable) et les redémarre automatiquement en cas d'échec ; alerte par e-mail uniquement après plusieurs échecs consécutifs. L'assertion des flags canoniques relève d'un outil d'hygiène hebdomadaire distinct. cron (toutes les heures)
Canary synthétique du pipeline de capture publicitaire Pilote la box en lecture seule pour prouver la chaîne cookie publicitaire → formulaire ; non destructif bibliothèque
Script de tri de fichiers Mac Range les téléchargements, le bureau et les documents par année puis par type. Aperçu par défaut ; --apply déplace sans écraser ni supprimer (suffixes -2, -3…). Idempotent. Lancé via la façade computer-use Mac (timeout SSH, donc détaché). CLI (déclenché par le script hebdomadaire)
Script hebdomadaire de tri Mac Déclenche depuis le vaisseau-mère le tri des fichiers du Mac (mode --apply détaché par la façade SSH), attend la fin et rapatrie le compte rendu. Mac éteint = passage sauté, journalisé, exit 0. Pas de LaunchAgent : macOS bloque launchd silencieusement. cron (dimanche soir)
Façade RAM de la box de navigation Pilote par SSH le store distant de mémoire volatile de la box (buffer d'observations, TTL, quotas, GC autonome) sans rien stocker localement. Opérations : stat, GC, put, list, latest, policy, drop. CLI
Santé système de la box de navigation Collecte en un seul aller-retour SSH : version du module GPU chargé vs espace utilisateur, kernel en attente de redémarrage, mémoire, swap, disque, thermique. Niveaux de sortie : 0 OK / 1 WARN / 2 CRIT. cron (quotidien avec alerte)
Automate de courrier postal recommandé Prépare un courrier sur la plateforme en ligne jusqu'au récapitulatif du panier (PDF, destinataire, mode recommandé/suivi/simple) et s'arrête là : tout clic sur un libellé de paiement est refusé par garde-fou. Le paiement reste le geste de l'utilisateur. Options --recap-only, --purge. skill /merci-facteur / CLI
Façade de consultation du coffre de mots de passe Lit un coffre (tableur) depuis le navigateur de la box ; les valeurs ne sont jamais affichées sans le flag explicite --reveal (métadonnées seules par défaut) ; --write-env dépose les identifiants hors dépôt en permissions restreintes. Couvre aussi le registre des comptes web (valeurs masquées). skills /password, /compte-saas-client
Façade de reprise de sessions web expirées Sonde si une session est vraiment expirée (--probe), lit la voie d'inscription depuis la base, puis clique la voie SSO et s'arrête devant tout champ mot de passe ou code (--reconnect --via). skill /session-web / CLI
Pilote de génération vidéo IA (Flow) Pilote l'interface de génération vidéo IA sur la box via CDP Playwright et un profil Chrome persistant. Fonctions : vérification d'accès, génération d'un clip depuis un prompt (ratio, image de référence, modèle), prolongation d'une prise dans l'éditeur. Gardes : refus si le ratio n'est pas confirmé, si l'image est rejetée d'emblée par le modèle, ou si un plan 9:16 ne passe pas la charte des courts-métrages (au moins une référence validée requise, sauf flag --hors-charte). CLI / bibliothèque — skill /video-flow
Bible des courts-métrages et charte de plan Gère en base la bible de contenu et les règles de charte appliquées à chaque plan. Structure : projet, setup (socle de règles), personnages, décors, accessoires, références validées, scènes, prompts figés, prises. Portes : fiche incomplète refusée, entité sans référence validée bloquée, plan 9:16 non conforme refusé, alternance de registres et valeurs de plan vérifiées. Itération par identifiant de prise. Un setup inactif bloque le tournage ; la redite est refusée au tournage. CLI / bibliothèque — skill /meta-reel
Montage d'un court-métrage (v1) Assemble depuis la prise retenue de chaque scène un court-métrage sur une seule bande son. Refuse toute prise parlée sans voix canonique. Coupe sur la fenêtre de parole, enchaîne avec fondus courts et normalisation globale, sans musique. Sous-titres verbatim au prorata. Carton final. Invariants de charte : typographie, marges, contraste mesuré, format 1080×1920, durée ≤ 60 s. --brouillon double la dernière prise pour les scènes sans prise retenue. CLI / skill /meta-reel
Doublage voix d'une prise Remplace la voix d'une prise par la voix officielle du personnage au même minutage. Chaîne : séparation voix/bruitages sur la box (GPU), conversion de timbre sur la box, réassemblage local. La nouvelle prise a pour parent la prise doublée et porte le marqueur de voix canonique requis par le montage. La boucle fermée de réglage comprime les écarts de hauteur vers une cible définie ; l'estimateur replie les trames d'octave aberrantes et lisse la courbe avant calcul de l'écart-type. CLI / bibliothèque
Mesure du rythme d'un court-métrage Analyse plan par plan un court-métrage fini : séparation voix (cache local), bornes lues dans le dernier plan de montage, îlots de parole, silences, débit, scansion, prosodie (contour F0) et contrôles de charte. Les temps forts sont rattachés aux syllabes par alignement proportionnel (marqués comme estimés). Les réglages par plan sont persistés en base. CLI / opération daemon
Montage d'un court-métrage (v2) Produit une nouvelle version du court-métrage sans toucher à la version initiale ni rien publier. Options par plan : durée d'image seule avant la parole, tenue après, silence visé entre plans (la queue du plan précédent s'allonge ou se raccourcit dans les limites de la prise). Le plan de montage conserve les options pour les remontages suivants. bibliothèque / CLI
Bouton « Rejouer » (remontage en nouvelle version) Remonte le court-métrage en version N+1 depuis les réglages de rythme en base, puis mesure. Refuse si un plan est à refaire ou sans prise retenue doublée. Refait la voix TTS si les répliques ont changé ou si un tempo a été modifié. Enchaîne montage v2 et mesure. Résultat dans un fichier d'état lu par la vue ; jamais de remplacement de la version initiale ni de publication automatique. CLI / opération daemon détachée
Collecteur de presets de jeu Récolte les descriptions de jeu des plans dont la prise a été gardée et les classe par position dans l'alternance de la charte. Idempotent : rafraîchit les textes existants, retire les scènes dont la prise n'est plus gardée. CLI
Worker de génération vidéo (file de travaux) Draine la file de travaux vidéo avec verrouillage anti-doublon. Un travail sans scène génère un clip libre via le pilote Flow ; un travail avec scène passe par la bible des courts-métrages (prompt enveloppé et figé depuis la base, références validées jointes ; fiche incomplète → erreur lisible). Enregistre la prise et notifie le hub de montage. worker (boucle hôte — ⚠️ modalité de lancement à confirmer)
Transcripteur vidéo horodaté Récupère les sous-titres via l'IP résidentielle de la box, produit des repères horodatés vérifiables, recherche l'horodatage d'une phrase, attribue les voix avec statut (établi / inféré). CLI / skills /transcript-video, /reponse-linkedin
Relevé du forfait IA GLM Scrape le tableau de bord du fournisseur depuis le navigateur de la box, parse les quotas (5 heures, hebdomadaire, heure de reset) et écrit un fichier d'état local. En cas d'échec (session expirée), n'écrit rien. Lu par les outils de suivi d'usage et de limitation. ⚠️ aucune ligne cron active (désactivée par le wrapper) / CLI

Sous-famille : provisioning, jukebox, cinémathèque et montages de la box de navigation

Scripts d'exploitation de la box de navigation (accès Tailscale). Les scripts de provisioning sont idempotents et sans élévation de privilèges (unités systemd --user, environnement Python isolé) ; --check-only affiche l'état sans modifier, --dry-run simule les actions.
Composant Rôle Mode d'invocation
Script de maintenance de la box À exécuter directement sur la box (sudo interactif). Sous-commandes : preflight (état avant, lecture seule), install (mises à jour système, capteurs, compression mémoire), audio-off / audio-on (masquer/rétablir les services audio, réversible), postcheck (mémoire, CUDA, températures), thermal (preuve de refroidissement). Idempotent. CLI (copié puis exécuté sur la box)
Provisioning de l'alignement paroles (karaoké) Installe WhisperX en mode align-only sur la box pour le karaoké mot-à-mot : ffmpeg sans sudo, environnement Python isolé, torch CPU explicite (driver GPU indisponible lors de l'installation initiale). --check-only, --dry-run. CLI
Provisioning du venv karaoké v2 Installe l'environnement de séparation de sources audio (modèle bs_roformer, ONNX GPU, torch pour la carte Pascal sm_61, librosa/scipy/soundfile) ; refuse d'écraser un environnement existant. CLI
Provisioning de la RAM volatile de la box Vérifie la disponibilité de la mémoire partagée tmpfs, dépose le store distant et son timer de nettoyage automatique (30 s), effectue un smoke test réel (écriture / lecture / effacement). Mise à jour idempotente à chaque rejeu ; aucune installation privilégiée. CLI
Provisioning du daemon Soulseek Installe le daemon Soulseek headless (binaire autonome, unité systemd utilisateur, API locale, port d'écoute dédié) : la clé API est lue depuis les variables d'environnement (générée si absente, jamais affichée) ; dossier de partage vide ; refuse d'écraser une installation existante ; vérifie l'endpoint de santé. CLI / skill /soulseek
Worker de capture audio Spotify (côté box) Capture MPRIS du client Spotify officiel (découverte OpenUri + Next, puis enregistrement du moniteur audio) vers MP3 320 kbps sans tag artistique. Job JSON sur stdin, un événement JSON par ligne sur stdout. Copie privée, aucun DRM contourné. worker (piloté via SSH depuis le vaisseau-mère)
Snapshot qualité karaoké Lecture seule : score CTC (médiane, pourcentage faible), comptage des caches vaisseau-mère vs box, instrumentales/voix/sync. Écrit un fichier de baseline horodaté. Options --track (pilote A/B), --out. CLI
Tick karaoké (lot borné) Complète le karaoké des pistes récemment acquises par lot borné (défaut 3), dans l'ordre : alignement mot-à-mot, synchronisation du cache, séparation instrumentale Demucs, courbes vocales, punch, rafraîchissement de l'index. Ne déclenche aucun téléchargement. cron (toutes les heures, verrou flock)
Déploiement jukebox TV Déploie le serveur de bibliothèque musicale et le moteur karaoké sur la box, puis l'application TV Samsung sur le téléviseur (application Tizen repackagée, signée et réinstallée via sdb). Options --app, --serveur. CLI
Ingestion cinémathèque Remuxe des fichiers MKV en MP4 (vidéo copiée, audio AAC 192 kbps, +faststart) pour lecture navigateur. Aucun argument. CLI ⚠️ aucun appelant identifié dans le dépôt
Chien de garde des montages réseau distants Surveille les montages réseau vers la box (jukebox, cinémathèque) : démonte proprement un montage illisible après un seuil d'échecs consécutifs, relance l'unité quand le montage est absent et que la box répond. Évite l'échec du déploiement en cas de montage fantôme. WATCHDOG_DRY_RUN=1 disponible. worker (timer systemd, toutes les minutes)
Chien de garde réseau de la box Détecte les situations où le tunnel réseau reste partiellement mort après une bascule (ping disco OK mais ICMP/SSH hors service) sans que la box s'en aperçoive. Déployé sur la box, déclenché toutes les 5 minutes par un timer systemd root. Sources de vérité versionnées dans le dépôt — ne jamais éditer en live sans reporter. timer systemd (sur la box)
Configuration réseau : blocage des interfaces USB Source de vérité de la configuration NetworkManager de la box. Contexte : un téléphone en partage de connexion USB s'annonçait comme carte réseau, devenait route par défaut prioritaire (métrique inférieure au Wi-Fi) et coupait tout le trafic dont le tunnel réseau. Aucune interface USB n'est légitime sur cette box ; la règle ne concerne pas le débogage ADB. donnée (configuration NetworkManager)
Configuration sudoers : redémarrage sans mot de passe Source de vérité de la règle sudoers autorisant l'agent à redémarrer la box sans mot de passe. Portée minimale : une seule commande, sans argument (le guillemet final interdit reboot --force). donnée (sudoers)
Sources de vérité des unités systemd de la box Unités systemd versionnées dans le dépôt : Chrome CDP principal, Chrome par foyer (template), chien de garde réseau. Les flags ExecStart constituent la doctrine canonique, assertée par la façade de provisioning. Déployées par le script de provisioning (option --install-core) — ne jamais éditer en live sans reporter dans le dépôt. données (unités systemd)
Script d'attente du serveur graphique Attend que le serveur d'affichage soit joignable et autorisé avant de lancer un Chrome CDP. Contexte : la dépendance systemd à la session graphique ne garantit ni que le serveur écoute ni que les autorisations d'affichage sont propagées dans les unités utilisateur — deux échecs à chaque boot avant correction. Déployé sur la box en tant que pré-condition des unités Chrome. CLI (sur la box, ExecStartPre des unités Chrome)
Script de désencombrement d'un téléphone connecté Désactive via ADB les applications préinstallées de divertissement et de promotion (opération réversible, rien n'est effacé). Ne range pas l'écran d'accueil (disposition dans une base privée du lanceur, hors d'atteinte sans root). CLI (one-shot)

Sous-famille : contrôle d'intégration de maquettes Figma

Corpus de maquettes par client (manifeste JSON, inventaire TSV des frames) ; source déclarée dans le registre de sources Figma. L'API REST payante de Figma est soumise à des limitations strictes (429), donc la capture passe par le navigateur de la box.
Composant Rôle Mode d'invocation
Contrôle préalable sans modèle Avant le contrôle d'iso complet : pour chaque route du lot (marqueurs MAJ/NEW/INT de l'inventaire), vérifie que le manifeste contient un PNG, que le recadrage de maquette fonctionne, et que la route répond en préprod. Sort en erreur si une route est inmesurable. CLI
Lecteur de commentaires Figma Lit via le navigateur de la box les commentaires du dessinateur sur ses maquettes ; détecte les maquettes déclarées inachevées. --repondre / --nouveau-fil préparent un brouillon ; --envoyer poste le message (validation explicite requise). Options de filtrage par page, motif, nouveautés. bibliothèque / CLI / skills /figma, /integration-maquette, etc.
Vigie du corpus PNG local Compare la date de dernière modification du fichier Figma (vue dans la source déclarée) à l'état du corpus local et alerte si le corpus a pris du retard. N'écrit jamais le curseur ni ne rapatrie de fichier. Exit 0 à jour, 1 en retard, 2 injoignable. cron (quotidien)
Croiseur route × chantier Dit quelle maquette est portée par quel chantier, par route (règles déclarées dans des fichiers de configuration, statuts lus dans la base des chantiers), sans modèle de langage ni navigateur. Détecte frames non portées, préfixes à cheval, chantiers fantômes. bibliothèque / CLI / skill /integrer-maquettes-restantes
Partitionneur d'écarts ISO Trie les écarts d'un lot en écarts de socle (répétés sur plusieurs pages, indice de Jaccard) et écarts de page (uniques), à partir des verdicts du contrôle d'iso. N'appelle aucun modèle et ne tranche pas. CLI
Recherche de photo source dans les fills Figma Retrouve la photo source d'un élément de maquette parmi les images du fichier Figma par ressemblance. Refuse de conclure sans un témoin retrouvé (sinon la méthode est déclarée aveugle). CLI / skill /figma
Outil de migration de noms de PNG Reprise ponctuelle : renomme les PNG de maquettes déjà sur disque au slug complet de leur route et met à jour le manifeste, l'inventaire et l'archive. Une carte inverse horodatée est écrite avant tout mouvement. Options --apply, --rollback. CLI (Node)
Réexporteur en mode Présentation Réexporte les maquettes via le mode Présentation de Figma dans le navigateur de la box, en visiteur anonyme, sans API ni compte (un frame plein cadre, sans interface). Détecte replis et captures d'écran. À ne pas confondre avec la capture depuis l'éditeur. CLI / skill /figma

Famille comptabilité — banque, facturation et finances

Cette famille regroupe les automates et outils CLI qui couvrent l'ensemble du cycle financier : synchronisation des mouvements bancaires, catégorisation, rapprochement, émission de factures et devis, relances d'impayés, suivi fiscal de l'auto-entrepreneur et gestion des dépenses fournisseurs.

Vue d'ensemble des composants

Composant Rôle Mode d'invocation
Synchronisation bancaire (entrée cron) Point d'entrée cron du domaine banque ; déclenche la chaîne de traitement des mouvements. Cron / skill /bank
Import N26 Analyse un dump de relevé N26 et détecte les doublons avant insertion. Voir détail ci-dessous. CLI / skill /compta étape import
Catégorisation automatique Affecte une catégorie comptable aux transactions non encore classées. Voir détail ci-dessous. CLI / skill /compta étape 3
Rapprochement bancaire Matche les transactions de revenu aux factures ouvertes par montant exact et client. CLI / skill /compta étape rapprochement
CLI factures et devis Interface interactive pour créer et gérer factures et devis ponctuels, avec rendu PDF chartée. CLI
Facturation récurrente Cron quotidien qui émet automatiquement les factures à périodicité fixe. Cron
Relances d'impayés (multi-tenant) Détecte les factures échues et prépare des relances groupées sous challenge-code obligatoire. CLI / skill relance
Moteur FinOps AE (lecture seule) Calcule les indicateurs fiscaux micro-BNC sans aucune écriture en base ni décision automatique. CLI / lib
Automate FinOps AE Envoie les récapitulatifs hebdomadaires et alertes ponctuelles (seuils URSSAF, franchise TVA). Cron
Collecte bancaire par compte Isole les mouvements par compte sur une période donnée et rattache le CA encaissé. CLI / lib
Calcul des cotisations URSSAF Fonction pure (3 taux micro-BNC) sans écriture en base. CLI / lib
Solde transférable Calcule le montant transférable du compte professionnel vers le compte personnel après provisions. CLI
Générateur de propositions commerciales Produit des propositions PDF chartées Synedre avec cartouche « Bon pour accord ». Skill /livrable-charte-synedre
Rattrapage des métriques de cache Relit les journaux de stream pour compléter les colonnes de cache manquantes sur d'anciens runs. CLI
Collecte factures crèche Récupère les factures mensuelles de la crèche depuis la boîte mail du foyer (inventaire, sans écriture DB). CLI
Veille des seuils fiscaux Surveille les trois seuils fiscaux de l'auto-entrepreneur et envoie un email par franchissement. Cron hebdomadaire
Collecte factures OVH Collecte et archive les factures fournisseur OVH via l'API officielle, idempotente. CLI
Vigie des réponses à devis Détecte les devis restés « envoyés » alors que le client a répondu ; crée un item de backlog. Cron quotidien / CLI
Façade de paiement Recraft Gère les achats de crédits Recraft au navigateur avec double garde en base avant tout clic. CLI (hook de pré-outil)

Import des relevés N26

Le module d'import analyse un dump de relevé bancaire N26 et applique plusieurs niveaux de filtrage avant toute écriture :

  • Parsing durci : l'espace fine insécable (U+202F) est accepté comme séparateur de milliers ; les lignes secondaires exprimées en devise étrangère sont ignorées ; les blocs marquant un rejet ou un échec de prélèvement (aucun mouvement de fonds réel) sont sautés.
  • Mode lecture seule par défaut : sans l'option d'application explicite, l'outil produit uniquement un diff JSON dans un fichier temporaire — aucune transaction n'est insérée.
  • Anti-doublons : chaque transaction candidate est comparée aux entrées existantes (correspondance exacte et correspondance approximative). Seules les transactions véritablement nouvelles sont insérées.
  • Identifiant externe déterministe : chaque ligne insérée reçoit un identifiant externe composé de la date, du montant en centimes et de la contrepartie normalisée ; un suffixe incrémental évite les collisions rares.
  • Règle d'écriture sécurisée : le dump complet est affiché avant toute écriture en base.

Usage en ligne de commande :

python3 -m <module-import-n26> <chemin-du-dump> [--apply]

La variable d'environnement N26_TODAY=YYYY-MM-DD fixe la date de référence pour le calcul des doublons.

Catégorisation automatique des transactions

Le moteur de catégorisation parcourt les transactions sans catégorie et leur affecte un libellé canonique à partir d'un référentiel de règles tiers → catégorie :

  • Le vocabulaire est normalisé : les doublons sémantiques (ex. « alimentation » / « courses », « infra » / « hébergement », « taxes » / « URSSAF ») sont consolidés en étiquettes canoniques uniques.
  • Par défaut, seules les transactions sans catégorie sont traitées.
  • L'option --normalize réécrit également les catégories existantes non canoniques.
  • L'option --apply effectue les écritures ; sans elle, l'outil affiche le résultat prévu sans modifier la base.
  • Un fournisseur d'hébergement allemand (Netcup GmbH, DE) est classé en catégorie hébergement avec mention de TVA autoliquidée.
  • Les virements internes vers une sous-poche de provision URSSAF sont classés comme virements internes, non comme revenus.
python3 -m <module-categorisation> [--apply] [--normalize] [--account <ID-compte>]

Rapprochement bancaire ↔ factures

Le moteur de rapprochement relie les transactions de revenu non rapprochées aux factures ouvertes (statut « envoyée » ou « en retard ») par montant exact et client :

  • Si un seul candidat correspond, la facture est soldée automatiquement.
  • Si plusieurs factures de même montant et de même client existent, un critère FIFO sur la date d'échéance départage : la plus ancienne est soldée en premier.
  • Une égalité parfaite de date d'échéance entre deux candidats ou plus bascule en proposition manuelle.
  • Dry-run par défaut ; --apply pour écrire.
python3 -m <module-rapprochement> [--apply] [--account <ID-compte>]

CLI factures et devis

L'interface en ligne de commande permet de créer, lister, accepter et archiver factures et devis ponctuels. Le rendu PDF est produit par un composant interne chartée (Playwright) :

  • Mention TVA : la mention « TVA non applicable, art. 293 B du CGI » n'apparaît que lorsque le taux de TVA est nul. Dès qu'un taux positif est configuré (sortie du régime de franchise), la mention est remplacée par le numéro intracommunautaire.
  • Structure du devis chartée : page 1 = document signable (émetteur, client, objet, lots, prix, total, échéancier, mentions légales, cartouche « Bon pour accord », modalités de paiement) ; annexes obligatoires A–D (facturation et résiliation propres à chaque devis, clause données personnelles). Un devis avec une annexe manquante lève une exception et n'est pas imprimé.
  • Règles d'acompte : un forfait mensuel ne génère pas d'acompte ; un nouveau client est facturé à réception.

Relances d'impayés avec challenge-code

Le module de relances multi-clients détecte les clients ayant au moins deux factures échues depuis plus de 30 jours, puis prépare une relance groupée :

  • Aucun email ne part sans qu'un code de validation ait été confirmé manuellement (--confirm CODE).
  • Un code peut être annulé (--cancel CODE), listé (--list), ou déclenché par détection du code dans la boîte de réception (--poll).
  • Toutes les actions sont journalisées via le journal d'automate.

Note : aucune ligne active de planification cron n'a été détectée malgré la mention de relances à J+7, J+15 et J+30 dans les commentaires internes.

FinOps auto-entrepreneur — moteur de calcul et automate

Le moteur FinOps calcule en lecture seule les indicateurs fiscaux de l'auto-entrepreneur (CA encaissé, cotisations URSSAF dues, provisions, transferts personnels, seuils légaux, statut franchise de TVA). Il ne prend aucune décision fiscale et n'écrit rien en base ; les chiffres sont des drafts indicatifs à valider avec un comptable.

L'automate associé envoie chaque lundi matin un récapitulatif hebdomadaire, et des alertes ponctuelles lorsqu'un seuil critique approche (J-3 avant une échéance URSSAF, franchise TVA ou versement libératoire dépassés à 90 %, délai de versement libératoire). Un mécanisme de sentinelles par fichier temporaire garantit qu'une alerte donnée n'est émise qu'une seule fois.

Calcul du solde transférable

Cet outil calcule le montant transférable du compte professionnel vers le compte personnel après déduction des provisions obligatoires :

  • Cotisations URSSAF du mois en cours.
  • Provision versement libératoire si l'option est active (taux micro-BNC dédié).
  • TVA due (paramètre, calcul délégué à un module futur).
  • Un buffer de sécurité paramétrable (défaut 500 €).

L'outil affiche le montant disponible et le détail des provisions. Il ne déclenche aucun virement.

Générateur de propositions commerciales

Ce composant produit des propositions commerciales au format PDF en appliquant la charte graphique Synedre (palette, typographie, logo bicolore, blocs constat / décision / attention, cartouche « Bon pour accord »). Il lit la base de données marque, rend un HTML intermédiaire puis le convertit en PDF via Chromium.

Une option sans_methode dans le fichier de spec réduit le colophon à la seule date du document, sans mention de l'outillage — utile pour les prospects sensibles à la dépendance outillage.

python3 -m <module-proposition-commerciale> <spec.json> <sortie.pdf>

Veille des seuils fiscaux

Ce composant surveille les trois seuils fiscaux de l'auto-entrepreneur : franchise de TVA, éligibilité au versement libératoire et plafond du régime micro. Il consulte la table des déclarations URSSAF et émet un email unique par combinaison (année, seuil, palier). L'état des alertes déjà émises est persisté dans un fichier d'état local, créé à la première écriture.

python3 -m <module-veille-seuils> [--dry-run] [--force] [--annee <AAAA>]

Sous-famille — dépenses fournisseurs

Ces quatre outils couvrent le cycle des factures reçues (achats fournisseurs), en miroir du cycle des factures émises. Aucun n'est planifié par cron à ce jour.

Composant Rôle Invocation
CLI dépenses fournisseurs Interface de gestion des dépenses : création, liste (filtrable par statut ou sans affectation comptable), affichage, rattachement de justificatif PDF (empreinte SHA-256 calculée et stockée). Aucun SQL brut. CLI (importé par les deux suivants)
Collecte factures fournisseur depuis inbox Parcourt les emails reçus et crée une ligne de dépense par règle déclarative fournisseur (SupplierRule). Aucune extraction LLM : un email non couvert par une règle est listé comme candidat. Idempotent sur la paire (fournisseur, numéro de facture). Dry-run par défaut. CLI
Vigie des justificatifs Vérifie que chaque dépense déclarant un PDF retrouve bien son fichier avec l'empreinte SHA-256 attendue. Exit 0 si conforme, 1 si manquant ou modifié. Né d'une migration serveur ayant entraîné une perte de 45 justificatifs. CLI (aucun cron ni appelant détecté)
Rapprochement dépenses fournisseurs Relie chaque dépense fournisseur à un débit bancaire correspondant (montant ±0,01 €, même tiers, fenêtre de dates, candidat unique, exclusivité mutuelle). Les devises étrangères sans taux de conversion connu ne sont jamais rapprochées au centime. CLI

Sous-famille — comptabilité du foyer (périmètre personnel)

Le périmètre personnel est strictement séparé du périmètre professionnel : les finances professionnelles vivent dans Synedre, les finances du foyer vivent dans un environnement dédié distinct.

Composant Rôle Invocation
Comptabilité du foyer Enregistre factures, dépenses et budgets mensuels du foyer. Ne catégorise jamais seul : la catégorie est toujours fournie par l'appelant. Exposé comme skill et comme lib. Skill /compta-perso, /budget-foyer / CLI / lib
Inventaire des aides et droits Recense les aides et droits potentiels du foyer. Chaque statut autre que « à vérifier » exige un verdict motivé et une date de vérification de source. N'écrit à aucun organisme. Skill /aides-foyer / CLI
Veille énergie (Eni Plenitude) Surveille la consommation de gaz en interceptant les réponses réseau de l'espace client (SPA). Écrit les paiements détectés dans la base foyer et alerte sur quatre dérives : consommation supérieure de 20 % à N-1, mensualité modifiée, facture inédite, provision insuffisante. État persisté dans un fichier de suivi local. Cron hebdomadaire

Sous-famille — budget et débit GLM (quota Z.ai)

Ces trois composants gèrent le quota hebdomadaire du fournisseur IA Z.ai (cycle remis à zéro chaque jeudi à 08 h 08, heure de Paris). La consommation est toujours mesurée sur la table de coût des runs — jamais estimée.

Composant Rôle Invocation
Jauge de budget GLM Somme les tokens consommés (entrée, sortie, cache lecture, cache écriture) sur la fenêtre du cycle en cours, ventile en heures pleines / creuses, projette la fin du quota. Alertes à 70 % (souple) et 90 % (dure). Exit 0 / 1 / 2. Indique « NON CALIBRÉ » si aucun quota de référence n'est connu. Skill /chantier-live / CLI / lib
Heartbeat d'autonomie GLM Combine le verdict budget avec la liveness du mécanisme d'armement automatique (seuils configurables). Zéro appel LLM, zéro écriture DB. Émet un email de panne au plus une fois par jour. Cron quotidien
Régulateur de débit GLM Produit un verdict GO / SLOW / STOP en retenant le plus sévère entre le scrape du quota Z.ai (retard max 15 min) et le dernier code 429 du journal du proxy. L'option --sense historise les saturations en base. Lib / CLI (lancé par le wrapper ./glm) — ⚠️ la planification cron de la sonde --sense est actuellement désactivée

Sous-famille — jauge Anthropic et plafond quotidien API

Composant Rôle Invocation
Jauge du quota Claude Max Mesure la consommation de tokens sur une fenêtre glissante de 5 heures. Sous-estime toujours (les sessions interactives non tracées ne sont pas comptabilisées). Exit 0 sous le seuil d'alerte, 1 en alerte, 2 en saturation. Lib (importée par le routeur de poches) / CLI
Plafond quotidien de la poche API Compare la dépense facturée du jour au plafond configuré par portée. Si le plafond est dépassé, désarme la délégation LLM pour stopper les appels. Options --day, --scope, --set-cap, --enforce. Lib (importée par le worker de tâches et les moteurs SEO) / CLI — ⚠️ aucune invocation automatique de --enforce détectée en cron
Carte des émetteurs d'appels Analyse les transcripts pour mesurer un plancher des appels groupables et imputer les erreurs rejetées par les mécanismes de garde. Ne propose aucun correctif, n'écrit pas en base. CLI

Composants supprimés

Plusieurs composants de cette famille ont été archivés lors d'une opération de nettoyage des scripts inactifs (aucun run détecté sur 30 jours, aucune référence active dans la configuration) :

  • Relances et rapprochement quotidien (ancien cron) — remplacé par les modules actuels.
  • Import historique de l'ancien outil de comptabilité — migration one-shot terminée.
  • Suivi des correctifs client production — flux remplacé par le backlog principal.

Ces composants sont récupérables pendant 30 jours via le mécanisme de corbeille du système, puis purgés définitivement par l'automate d'élagage.

Famille surveillance de marque et veille

Cette famille regroupe les automates et outils dédiés à la veille compétitive, à la surveillance de marque, à la conformité de charte graphique et à la gestion des opportunités commerciales entrantes. Certains scripts sont actifs en tâche planifiée ; d'autres ne s'utilisent qu'en ligne de commande à la demande.

Vue d'ensemble des composants

Composant Rôle Mode d'invocation
Barème QA charte graphique Vérifie les design tokens de la marque contre un document HTML ou une URL : contraste (WCAG 1.4.3 / 1.4.11), focus visible (WCAG 2.4.7 / 2.4.11), structure sémantique (WCAG 1.3.1 / 1.1.1 / 1.4.1), mouvement (prefers-reduced-motion, WCAG 2.3.3) et régions ARIA live (noté, non bloquant). Modes --html <fichier> / --url <url> / --gate (exit 1 si défaut bloquant) / --format json. Socle du skill /brand-qa et du gate pré-déploiement. Supprimé — aucune exécution détectée sur 30 jours, non référencé dans les planificateurs ni les hooks actifs. Récupérable pendant 30 jours via le mécanisme de corbeille, puis purge définitive par l'Élagueur.
Surveillant SERP des inventions propriétaires Surveille les résultats de recherche pour détecter toute apparition non autorisée des inventions et termes propriétaires. Absent du planificateur (commentaire cron orphelin sans commande associée) — exécutable en CLI à la demande.
Veille compétitive multi-agents Compare l'offre Synedre aux frameworks multi-agents émergents. Absent du planificateur (commentaire cron orphelin) — exécutable en CLI à la demande.
Agent de veille technologique et marché (Marco Polo) Veille techno / concurrentielle / marché sur quatre fronts distincts, pilotée par l'agent Marco Polo. Retiré du planificateur — exécutable en CLI à la demande.
Couche de persistance partagée (veille Marco Polo) Bibliothèque de persistance commune aux quatre fronts de veille Marco Polo. Bibliothèque interne.
Réacteur de correctifs automatiques Table symptôme → geste : correctif automatique, alerte P0, file daily-meet, agent par agent. Conservé comme cahier des charges du chantier « réacteur v2 ». Archivé — déplacé dans le répertoire d'archive pour rejoindre son unique appelant. Non exécutable en l'état (chemins calculés depuis l'emplacement du fichier, désormais invalides).
Uploader de conversions hors-ligne Remonte des commandes vers Google Ads via l'API Data Manager ; le gclid est capturé à l'atterrissage de la visite. Tâche planifiée quotidienne (30 6 * * *) pour un tenant client, mode --live --days 90.
Générateur de token OAuth (Data Manager) Émet un refresh token Google OAuth avec le scope datamanager, nécessaire à la migration vers l'API Data Manager de l'uploader de conversions. CLI — exécution unique (one-shot).
Générateur de draft Malt Produit un brouillon de réponse Malt dans le ton d'Alex, à partir de l'état stocké par le surveillant de fils Malt. Les drafts proposent le lien de prise de rendez-vous souverain (module RDV interne), et non plus un service externe. CLI — chaîné par l'orchestrateur cron Malt.
Garde-fous comportementaux Malt Encadre l'automate de veille Malt : kill-switch d'environnement et rate-limit dur par créateur (fenêtre glissante persistée en base), pour éviter tout flood ou comportement déviant. CLI --scan / hook pre-commit (gate).
Orchestrateur cron Malt Enchaîne les étapes poll → draft → alerte email 1-clic, plus re-confirmation hebdomadaire de disponibilité. Tâche planifiée toutes les 30 minutes en heures ouvrées (*/30 8-20 * * 1-5) + relance hebdo le lundi matin.
Surveillant de fils Malt Sondage doux des fils Malt : poll → diff → extraction structurée, via la session navigateur persistante. CLI — chaîné par l'orchestrateur cron Malt.
Veilleur de conversions publicitaires (état) Surveille la visibilité des conversions (ventes + devis) dans Google Ads après upload et réconciliation. Requalifié en outil de lecture après que les seuils ont été atteints ; reste utilisé en façade --status par d'autres scripts de suivi KPI. Retiré du planificateur (objectif atteint) — réarmable via --reset + repose de la ligne cron + requalification.
Veilleur de première conversion (post-fix de redirection) Détecte la première conversion captée après correction d'une redirection legacy, puis se désarme automatiquement après le premier tir. Présent sur disque, absent du planificateur — CLI à la demande.
Kill-switch et rate-limit (canal dialogue communauté) Garde-fou pour le job de publication sur un canal de dialogue communautaire : kill-switch d'environnement et rate-limit dur par créateur (fenêtre glissante persistée en base) pour éviter le flood. Bibliothèque interne.
Veille des appels d'offres publics (BOAMP) Veille gratuite, sans IA, sur les appels d'offres BOAMP via l'API publique OpenDataSoft (sans clé). Classe chaque avis en quatre catégories (e-commerce, réponse directe, appui à l'offre, écarté) ; lit aussi les attributions pour identifier les titulaires. Persiste les résultats de façon idempotente et alerte à la première apparition d'un avis retenu. N'écrit à aucun acheteur ni fournisseur. Options : --dry-run, --depuis, --lister, --titulaires. Tâche planifiée chaque matin ouvré (15 8 * * 1-5) via le wrapper de planification.
Audits statiques de publication communautaire Deux audits statiques des réponses publiques (forum, réseau social) : vérifie que la veille n'a aucun chemin d'écriture, et que la validation est appelée avant tout geste de publication. Exit 1 si un invariant est rompu. Hook automatique (déclenché avant toute écriture de fichier) / skill /communautes.
Vérificateur de conformité de compte freelance Lit la source vive du statut du compte Malt et retourne OK, EN_ATTENTE ou BLOQUÉ (avec liste des étapes invalides). Aucune écriture ni clic ; toute déclaration bancaire reste un geste humain. Exit 0 / 1 / 2, exit 3 si la session est hors-ligne. CLI — option --json.
Importateur d'interlocuteurs Malt Importe les interlocuteurs des fils Malt (actifs et archivés) dans les tables clients et contacts, via la session navigateur persistante. Idempotent sur l'identité Malt ; les nouvelles fiches sont créées avec le statut lead. Sans --apply : bilan seul. Options : --reconcile-initial-import, --prune-deleted-accounts. Aucune écriture sur Malt. CLI — dry-run par défaut.
Extracteur de sites depuis les messages Malt Reconstruit des candidats de sites à partir des liens écrits par des interlocuteurs dans les messages Malt entrants (hors domaines de plateformes connues), et les enregistre comme observations d'import. Le champ website du client n'est jamais modifié directement. Options : --conversation-limit, --conversation-offset, --apply. CLI — dry-run par défaut.
Reconnecteur de session Malt Reconnecte la session Malt persistante via le navigateur authentifié (CDP), 2FA par code lu en boîte inclus. La vérité de session est confirmée par un appel API interne. Aucun envoi. Options : --check (état seul), --force, --otp-timeout. Appelé automatiquement par le surveillant de fils en cas d'erreur 403. Skill /malt / CLI / bibliothèque interne.
Émetteur de réponse Malt sous validation tracée Envoie une réponse Malt uniquement après validation tracée : le jeton de validation porte le SHA-256 du draft ; --send le recalcule et refuse au moindre écart. Anti-doublon par horodatage d'envoi, kill-switch d'environnement. Options : --status, --validate <conversation_id> [--by], --send [--dry-run]. Skill /malt.
Vigie de dossier d'entreprise associée Surveille les annonces BODACC (familles pcl, rcs-b…) et l'état administratif d'une SAS via l'API publique de recherche d'entreprises, sur un SIREN précis. Diff d'état JSON, alerte email à chaque nouveauté. Options : --dry-run, --init (baseline sans alerte), --force (alerte de test). Tâche planifiée quotidienne (5 7 * * *).

Ces quatre façades, ajoutées lors d'un même chantier, couvrent la recherche de branding pour un client : elles proposent et documentent, sans jamais déposer ni verrouiller quoi que ce soit.

Composant Rôle Mode d'invocation
Générateur de logos (volet capture) Pilote le navigateur authentifié d'Alex pour envoyer des prompts de logo (sobriété, lisibilité à distance) à un générateur IA et récupère chaque image comme asset propre (fetch du blob → base64 → PNG 1024 px). Un prompt multi-lignes est injecté en un seul appel JavaScript dans la page (execCommand('insertText')), vérifié ligne à ligne, avec repli ligne par ligne si l'éditeur n'a pas reçu le texte complet. La détection d'une image générée repose sur la surface totale (plancher sur le petit côté), non sur une taille minimale par dimension — une planche en rangée (ex. 1024×343) était autrement ignorée. CLI / skill /logo.
Générateur de logos (volet livrable) Assemble un PDF A4 à partir du manifeste produit par le volet capture : page 1 — contexte de marque (marché, concurrence, cible) ; page 2 — planche 2×2 des quatre logos avec direction typo/couleur, réduction « squint test » et verdict QA de l'agent Itten si fourni. CLI / skill /logo.
Vérificateur de disponibilité de marque Interroge RDAP (gratuit, sans clé API) pour chaque candidat <nom>.<extension> et retourne le statut LIBRE / PRIS / INCONNU avec une recommandation d'achat (cœur / défensif). L'antériorité de marque (TMview EUIPO, INPI FR, IPI Suisse) est pilotée via le navigateur authentifié depuis le skill — TMview bloque les accès depuis un serveur. CLI / skill /marque.
Générateur de rapport de marque (volet livrable) Assemble un PDF A4 : disponibilité et prix des domaines, verdict d'antériorité TMview, coût de dépôt selon le territoire et les classes de Nice (barème à revérifier avant tout dépôt réel). CLI / skill /marque.
Mesureur de contraste WCAG Mesure un contraste WCAG 2.2 et trouve la teinte conforme la plus proche : --assombrir / --eclaircir descendent en luminance à teinte et saturation constantes jusqu'au seuil cible (défaut AA 4,5). Option --paires <fichier> pour un traitement par lot. Bibliothèque interne / CLI / skill /design-system.
Dérivateur de système de design Du logo à la charte puis à la planche : le sous-mode dériver compte les couleurs en pixels, mesure les rôles et produit le bloc de thème (couleur de marque en secondaire, couleur primaire ajustée AA) ; le sous-mode rendre produit une planche HTML du système de design. Précède le skill /charte. CLI / skill /design-system.
Générateur de variantes de marque pour antériorité Engendre les termes à interroger dans TMview pour un candidat de marque (l'API cherche en mode contains, donc jamais un voisin plus court que le nom complet) : dé-leetisation, homophones, retrait des affixes descriptifs du secteur. Pur calcul de chaînes, sans réseau. Options : <candidat> --sector --json. Skills /marque, /marque-complete.

Sous-famille — Vectorisation de logo

Façade dédiée à la transformation d'un asset raster déjà choisi en SVG vectoriel — distincte de la recherche de branding : ici, le logo existe, il s'agit de le vectoriser proprement.

Le composant de vectorisation opère une chaîne complète en une seule façade (doctrine : un seul script par périmètre) :

  1. Prétraitement image : composite alpha sur fond blanc, niveaux de gris, réduction de taille.
  2. Seuillage Otsu (sans dépendance OpenCV) après flou gaussien anti-bruit.
  3. Nettoyage morphologique (fermeture / ouverture binaire) pour éliminer les artéfacts.
  4. Écriture PBM natif et tracé vectoriel via potrace --svg.
  5. Nettoyage XML standard : viewBox responsive, couleur, suppression des métadonnées.
  6. Boucle qualité (4 itérations maximum) : rendu SVG→PNG, verdict d'un sous-agent (JSON strict {sees, defects, issues, action}), ajustement borné des paramètres selon l'action (smoother / sharper / denoise / more_detail / bolder / thinner / accept). Fail-open si le sous-agent est injoignable.

Score calculé, jamais demandé au modèle de langage. Le sous-agent critique classe six axes de défaut (angularity, oversmoothing, noise, lost_detail, stroke_too_thin, stroke_too_thick) sur une échelle fermée none | minor | major. Un barème de pénalités en dérive un score 0–100. Cette approche corrige un défaut antérieur où un score nu demandé au modèle produisait des valeurs instables entre deux appels, et sélectionnait parfois une itération inférieure comme livrable final. La réconciliation refuse en outre tout accept dont le score calculé est sous la cible.

Détection de polarité. Un échantillonnage des quatre bords de l'image détermine si le logo est en teinte claire sur fond sombre, auquel cas le masque est inversé — sans cette logique, un tel logo produisait un SVG blanc sur blanc vide.

Ajustement de graisse de trait. Une étape de dilatation / érosion binaire (distincte du nettoyage anti-bruit) répond aux actions bolder / thinner du critique, pour corriger un trait aminci par le seuillage que les paramètres de lissage seuls ne pouvaient pas adresser.

# Invocation typique
python3 -m <module-vectorisation> --input logo_raster.png --color "#1A2B3C" --output logo.svg
  • Mode d'invocation : CLI / skill /vectorize-logo.
  • Dépendances système : potrace, rsvg-convert, bibliothèques Python numpy, scipy, Pillow.

Famille deploy / ship / infrastructure / sauvegardes

Règle de gouvernance des livraisons

La politique de déploiement repose sur une asymétrie explicite entre deux commandes publiques :

  • ./deploy <cible> — toujours déclenché par l'agent automatique, sans exception, y compris sur le vaisseau-mère (où il reconstruit le conteneur applicatif en direct, sans environnement de préproduction intermédiaire).
  • ./ship <cible> — livraison en production ; l'autorisation est lue site par site dans la configuration de la flotte. Par défaut, l'agent peut déclencher un ship. Certains sites restent verrouillés à intervention humaine sans dérogation possible, quelle que soit la configuration. Un ship non surveillé (exécuté la nuit par tick automatique) exige en outre une preuve QA verte.

Règle absolue avant tout déploiement : l'arbre git doit être propre. Tout changement non commité est rollbacké par le système ; un garde pré-déploiement refuse d'aller plus loin si des modifications non enregistrées sont détectées.

Bibliothèque centrale de déploiement

Une bibliothèque partagée regroupe toutes les phases d'un déploiement : chronométrage, audit des agents en arrière-plan, poussée git, vérification et application des migrations de schéma, génération des routes i18n, build de l'application, empaquetage, envoi sur le serveur, redémarrage du conteneur et contrôle de santé.

Fonctions notables :

  • Détection de drift de schéma — compare la définition TypeScript des migrations à l'état réel de la base avant le build. En mode strict (défaut), un écart bloque le déploiement.
  • Application idempotente du schéma — peut appliquer automatiquement les instructions DDL manquantes (ajout de colonne, création de table si absente) ; les suppressions de table ne sont jamais jouées automatiquement.
  • Génération des routes i18n — produit le fichier JSON des segments de route localisés avant le build, de manière non bloquante.
  • Détection de cache hybride — avant chaque build, la cible (préproduction ou production) est enregistrée. Si le cache de build provient d'une cible différente ou n'est pas étiqueté, le cache est purgé avant de recommencer. Ce garde évite la situation où les fichiers serveur et client proviennent de deux builds distincts, source d'erreurs sur les chunks JavaScript.
  • Seed des traductions — non bloquant mais bruyant : si l'injection des traductions échoue, un bandeau d'avertissement apparaît et une entrée est ouverte au tableau de suivi quotidien ; elle se referme automatiquement au premier seed réussi suivant.
  • Build déporté sur machine dédiée — le build de l'application peut être délégué à une machine Apple Silicon séparée (appelée « le four »). La machine de build ne reçoit jamais les secrets d'exécution et ne peut pas contacter le vaisseau-mère. Le résultat est rapatrié, inspecté (absence de liens sortant du répertoire) puis utilisé ; en cas d'indisponibilité ou d'archive douteuse, le build local prend le relais.
  • Garde anti-fuite de secrets dans le build — bloque par défaut tout déploiement si une valeur secrète (variable dont le nom ressemble à un secret et dont la valeur fait au moins 12 caractères, hors booléens et nombres) se retrouve figée dans les fichiers de sortie du build. La valeur n'est jamais affichée ; seul le nom de la variable et le chemin du fichier incriminé sont rapportés.
  • Build exclusif — un seul build à la fois est autorisé sur le vaisseau-mère ; les demandes en attente sont servies dans l'ordre d'arrivée (FIFO).
  • Pré-chauffe du cache SSR — après le swap, un processus détaché crawle doucement les URL blog et catégories du sitemap pour éviter que le premier visiteur supporte le rendu à froid. Désactivable par variable d'environnement.
  • Seed i18n post-deploy — alerté au tableau de suivi quotidien en cas d'échec silencieux.

Garde du tronc

Un garde sourcé par ./ship et ./deploy vérifie deux conditions avant toute opération :

  • Une cible doit être explicitement fournie — aucune cible par défaut n'existe.
  • Le script doit être lancé depuis le tronc principal du dépôt — toute exécution hors tronc est refusée avant qu'une seule opération git ne soit tentée.

Scanner de secrets dans le build

Un outil dédié analyse les fichiers de sortie d'un build et vérifie qu'aucune valeur secrète ne s'y trouve figée. Il croise les sources de secrets configurées et l'environnement du processus, filtre sur la forme du nom de variable et la longueur de la valeur, et parcourt les fichiers texte jusqu'à 32 Mo (les variantes compressées sont ignorées quand l'original est présent). La sortie indique le nom de la variable et le fichier concerné — jamais la valeur elle-même. Les variables à préfixe public (NUXT_PUBLIC_, VITE_, etc.) sont explicitement exclues.

Journal des livraisons

Chaque déploiement ou ship réussi laisse une trace persistante : horodatage, cible, nature de l'opération (deploy ou ship). Ce journal permet de répondre à la question « depuis quand ce commit est-il en ligne ? » et alimente les règles de datation de mise en ligne dans les automates de traitement.

Four — machine de build déportée

Le « four » désigne une machine Apple Silicon dédiée aux builds de l'application. Le vaisseau-mère lui envoie les sources via une connexion SSH restreinte à un unique wrapper de commandes. Ce wrapper n'accepte que trois verbes :

  • build — reçoit les sources et produit le répertoire de sortie.
  • fetch — renvoie le répertoire de sortie au vaisseau-mère.
  • ping — vérifie la disponibilité.

La machine de build n'a jamais accès aux secrets d'exécution, ne peut pas contacter le vaisseau-mère de sa propre initiative, et ne dispose d'aucun privilège système élevé. Un script d'installation idempotent configure cet environnement depuis le vaisseau-mère.

# Exemple de structure d'appel (verbes du wrapper)
<wrapper-four> build <cible>
<wrapper-four> fetch <cible>
<wrapper-four> ping

Scripts de déploiement et d'infrastructure

Outil Rôle Mode d'invocation
Parseur de configuration de déploiement Lit et valide le fichier de configuration YAML d'une cible, produit les variables shell correspondantes. Bibliothèque interne
Garde de santé des dépendances build Vérifie avant le build que les versions critiques des paquets front-end (optimiseur CSS, framework) respectent les planchers requis. Bloque si non conforme. CLI pré-build
Benchmark de déploiement Mesure les temps de build à froid et à chaud pour le vaisseau-mère. CLI
Vérificateur d'arbre git S'assure que le dépôt ne contient aucune modification non commitée avant un déploiement. CLI pré-deploy
Wrapper d'écriture SQL sécurisée Enveloppe protectrice pour tout écrit SQL sur la base de production d'un site critique (niveau P0). CLI
Bootstrap d'un nouveau tenant Initialise un nouveau site depuis le gabarit de référence. CLI
Provisioning VPS client Automatise la commande et la configuration d'un VPS pour un nouveau client. CLI
Seed déclaratif de tenant Alimente la base d'un tenant depuis un fichier YAML de configuration. CLI
Push de configuration nginx Dépose et recharge la configuration nginx d'un tenant sur son VPS. Supporte deux topologies : mode hôte (legacy) et mode conteneur (greenfield). Idempotent : ne recharge que si la configuration a changé. CLI
Rotation du slug d'entrée secrète du hub Régénère le chemin secret donnant accès au hub du vaisseau-mère. CLI
Rotation du slug knock-gate tenant Régénère le chemin secret donnant accès au hub d'un tenant et propage la mise à jour sur le VPS via la configuration nginx. CLI
Synchronisation du référentiel schéma Met à jour la représentation du schéma de base de données à destination des agents. Cron / CLI
Mise à jour système hôte Applique les mises à jour APT de manière non interactive sur le vaisseau-mère et les VPS clients. CLI / skill /host <cible> upgrade
Lecteur chirurgical de skills Charge à la demande le contenu d'un fichier skill (chargement différé, niveau 2). CLI

Façade DNS et API OVH

Un client OVH partagé gère toutes les interactions avec l'API OVH : création et mise à jour idempotentes d'enregistrements DNS (PUT si existant, POST sinon), rafraîchissement de zone, et reprise automatique sur défaillance passagère. Les codes transitoires reconnus sont 429, 500, 502, 503, 504, et les erreurs 400 portant la marque d'un hoquet de transport. Deux reprises sont tentées (délais de 1 s puis 3 s), avec re-signature à chaque tentative. Les reprises ne s'appliquent qu'aux méthodes idempotentes (GET, HEAD, PUT, DELETE) — jamais à un POST, pour éviter tout doublon d'enregistrement.

Pré-chauffe du cache SSR

Après un déploiement, un processus détaché crawle doucement les URL blog et catégories issues du sitemap. L'objectif est d'éviter que le premier visiteur réel supporte le coût d'un rendu lourd (un article de blog peut nécessiter une dizaine de requêtes base de données, parfois source d'erreurs 503). La pré-chauffe est lancée en arrière-plan, sans bloquer le déploiement, et peut être désactivée par variable d'environnement.

Gestion du design system et de la charte graphique

Outil Rôle Mode d'invocation
Générateur de design system depuis logo Déduit la charte graphique depuis le logo : génère les variables CSS, les valeurs en base et récupère les images thématiques en une seule passe. CLI
Application de charte graphique Applique proprement la charte d'un tenant depuis le YAML de configuration ou la base live. Régénère le bloc de variables CSS via le même générateur que le cœur applicatif (zéro divergence possible), valide les contrastes WCAG, protège la zone CSS manuelle (navigation, polices, logo). CLI / skill /charte
Générateur de variables CSS Produit le bloc :root CSS en important directement la fonction du cœur applicatif — aucune réimplémentation. Reçoit un objet JSON sur stdin ou via fichier, émet le CSS sur stdout. Bibliothèque (invoquée en sous-processus)
Seed des comptes admin Crée ou met à jour les comptes administrateurs d'un tenant. Idempotent. CLI
Pré-remplissage des informations boutique Alimente la section informations du hub d'un tenant depuis les données client déjà connues en base. Idempotent. CLI
Seed des playbooks Injecte ou met à jour les playbooks du hub sur l'ensemble des tenants, gaté par édition. Cron (--apply)
Générateur SQL de questionnaire devis Produit le SQL idempotent de seed d'un questionnaire devis multi-étapes depuis un YAML tenant. CLI (ponctuel)

Contrôles de santé et gardes de déploiement

Plusieurs gardes s'intercalent dans la chaîne de déploiement :

  • Garde de santé post-migration — vérifie que le serveur applicatif est opérationnel, que les endpoints du hub répondent en 200 et qu'aucune relation manquante n'apparaît dans les logs récents. Codes de sortie distincts selon la nature du problème.
  • Garde de retard de schéma — répond à la question « la base de cette cible est-elle à jour ? » en un code de sortie (0 : à jour, 1 : retard prouvé, 2 : indéterminable). Délègue la mesure au runner de migrations en mode simulation.
  • Garde de navigation i18n — vérifie qu'aucun lien interne de la navigation d'un tenant multilingue ne génère de redirection 301. Injecte un paramètre de cache-busting pour s'assurer de lire le rendu du nouveau build. Les liens sortant vers des services tiers ne sont pas considérés comme des erreurs.
  • Exécutant du bouton de déploiement — permet au hub de déclencher un déploiement sans que le handler HTTP se tue à mi-chemin. La demande transite par la base : le hub inscrit une ligne de demande, le worker l'exécute et écrit le verdict. Gardes propres : liste fermée de sites autorisés, verrou PID partagé, secrets masqués dans les journaux. Publie régulièrement un « pré-vol » contenant l'état de l'arbre, la branche et le commit servi — si le worker meurt, le hub désarme automatiquement le bouton.
# Invocation du worker de déploiement (modes)
python3 -m <worker-deploy> --once
python3 -m <worker-deploy> --loop
python3 -m <worker-deploy> --preflight

Sonde de poids JavaScript initial

Un outil en lecture seule analyse le HTML SSR d'une URL et compte les modules préchargés et scripts de module, en mesurant leur taille brute et compressée. Résultat : nombre exact de ressources et poids total en Ko.

python3 -m <sonde-js-initial> --url <url> [--json]

Détection de dérive nginx

Un outil confronte les configurations nginx versionnées dans le dépôt à celles effectivement chargées sur le VPS web. Il peut afficher l'écart ligne à ligne ou rapatrier la configuration active vers le dépôt. La direction inverse (pousser depuis le dépôt) n'est pas supportée par cet outil.

Repli disque des assets Nuxt

Après une bascule, le cache SSR peut resservir l'ancienne page tandis que les assets JavaScript répondent 404 — rendant les pages non interactives. Un outil pose sur les vhosts Nuxt une règle de repli : Nitro reste le service nominal, nginx ne sert le fichier depuis le disque que sur erreur 404, en privilégiant la variante précompressée si disponible. La transformation est validée localement, le VPS reçoit la configuration validée, avec sauvegarde et restauration automatique en cas d'échec.

Surveillance des certificats TLS

Une vigie surveille les dates d'expiration des certificats TLS sur toute la flotte. Les cibles sont enregistrées en base (domaines issus des configurations de VPS et entrées manuelles). Un silence du serveur est traité comme un statut inconnu et déclenche une alerte — jamais comme un statut « ok ». Les alertes précoces évitent les situations d'expiration silencieuse.

python3 -m <sentinel-tls> --domain <domaine> [--dry-run] [--status] [--strict]

Vérification du canon d'image de base

Un outil vérifie que tous les conteneurs de la flotte utilisent bien l'image PostgreSQL de référence. Il interroge chaque VPS en SSH, consulte les conteneurs en cours d'exécution et signale toute dérive. Les dérogations documentées en base sont prises en compte. Les bases MySQL/MariaDB sont hors périmètre. Lecture seule ; codes de sortie distincts (conforme, dérive, inconcluant).

python3 -m <audit-infra-canon> [--json] [--host <hôte>] [--canon <image>]

Synchronisation des rôles de conteneurs

Un automate nocturne rejoue les règles déclaratives de configuration des conteneurs de la flotte, en rechargeant les règles depuis leur source de référence plutôt qu'en recopiant les valeurs. Des gardes limitent le nombre de suppressions possibles par exécution. Dry-run par défaut.

Médecin système du vaisseau-mère

Un processus de maintenance autonome ausculte régulièrement la santé système du vaisseau-mère et applique seul une liste fermée de soins préventifs :

  • Soin T1 — sessions orphelines : termine les processus orphelins de sessions mortes (plafond strict, signal doux suivi d'un délai de grâce ; jamais un agent vivant).
  • Soin T2 — nettoyage de l'espace temporaire : supprime les restes de travaux éphémères de plus de 7 jours (plafonds en nombre d'entrées et en volume ; les espaces de travail actifs et sockets de session sont protégés ; les dumps de base ne sont jamais touchés ; toute suppression au-delà d'un seuil volumique est remontée à l'opérateur humain).

Chaque acte est consigné en base. Ce qui dépasse la liste fermée (redémarrer un conteneur, toucher à PostgreSQL ou au swap) est remonté à l'opérateur sans être exécuté. Un soin dont le volume dépasse son plafond est refusé en totalité et signalé. Le médecin tourne sans LLM.

python3 -m <medecin-systeme> [--apply] [--alert]

Rotation de credentials

Outil Rôle Mode d'invocation
Rotation du mot de passe admin du hub tenant Effectue la rotation dans l'ordre fixe : génération du secret, écriture chiffrée dans le coffre (source de vérité), dérivation du fichier de configuration hôte, mise à jour du hash en base, vérification par connexion réelle. La valeur n'est jamais affichée. CLI
Rotation des credentials base legacy Tourne le mot de passe de la base MariaDB d'un site PrestaShop legacy ciblé. Seules des empreintes tronquées sont affichées. Protégé par garde sur les sites de production. CLI (--dry-run, --apply, --verify-only)
Rotation du slug d'accès au hub Régénère le chemin secret du hub du vaisseau-mère. CLI
Dépôt d'une clé LLM client (BYOK) Dépose une clé API LLM fournie par un client dans la configuration de son tenant, en la chiffrant sur le VPS du client avec la clé maître propre à cette machine. Relit et déchiffre à distance pour comparer les empreintes. Ne sort jamais de valeur. CLI
Régénération du token Shopify Régénère le token Admin API Shopify et l'écrit au coffre en permissions restreintes. N'affiche jamais le secret. CLI / skill /shopify
Renouvellement du Basic Auth préproduction Régénère la protection HTTP Basic Auth d'une préproduction tenant, recharge nginx. Identifiants par défaut définis à la décision initiale. CLI / skill /htpasswd

Sauvegardes et restauration (S3 / stockage objet)

Outil Rôle Mode d'invocation
Sauvegarde chiffrée des fichiers critiques Sauvegarde les fichiers critiques du système vers le stockage objet, avec chiffrement. CLI / cron
Backup base tenant vers S3 Dump et envoi de la base d'un tenant vers le stockage objet. Cron
Backup PostgreSQL local vers S3 Dump et envoi de la base PostgreSQL locale. Cron
Backup PostgreSQL distant vers S3 Dump et envoi d'une base PostgreSQL distante. Cron
Backup fichiers vers S3 Envoi des fichiers vers le stockage objet. Cron
Backup du coffre de mots de passe humain Sauvegarde à chaud du coffre Vaultwarden (base SQLite, clé RSA, pièces jointes) vers le stockage objet, en tar.gz chiffré AES-256. Codes de sortie distincts pour chaque étape. Cron (03:20 UTC)
Test de restauration du coffre Télécharge l'archive du jour, déchiffre, démarre une instance jetable isolée, vérifie sa disponibilité et compare les comptages utilisateurs/entrées/dossiers au coffre en service. Ne touche jamais au coffre vivant. CLI
Restauration PostgreSQL depuis S3 Restaure une base depuis le stockage objet. CLI
Test mensuel de restauration Rejoue une restauration de test pour valider l'intégrité des sauvegardes. Cron (mensuel)
Configuration du cycle de vie S3 Applique la politique de rétention sur le bucket de stockage. CLI (one-shot)
Rotation des logs de backup Purge les logs anciens de sauvegarde et applique un filet générique sur l'ensemble des logs du système : suppression des fichiers plus vieux que 30 jours, troncature des fichiers de log dépassant 50 Mo (conservation des 10 derniers Mo). Cron

Bascule de machine vaisseau-mère

Un ensemble d'outils accompagne la migration à froid d'un vaisseau-mère vers un nouveau VPS :

  • Audit de l'outillage — compare l'état réel des capacités installées à la configuration de référence. Peut confronter l'ancienne machine à la nouvelle et produire un plan d'installation sans l'exécuter. Codes de sortie distincts selon la criticité des manques.
  • Construction du socle — bâtit de zéro l'environnement système d'un nouveau vaisseau-mère : utilisateur administrateur, durcissement SSH (clé seule, sans mot de passe), pare-feu. Idempotent. Ne configure pas le réseau privé ni les certificats TLS.
  • Transport du proxy LLM — transfère le proxy de relais LLM de l'ancienne machine vers la nouvelle par synchronisation de fichiers : code source, configuration (clé jamais affichée, empreinte comparée) et unité système. L'ancienne machine reste en lecture seule. Rejouable.
  • Preuve d'intégrité de la base — vérifie qu'aucune table n'a moins de lignes sur la nouvelle machine que sur l'ancienne, par comptage exact sur l'ensemble des tables, et contrôle que les séquences auto-incrémentées ne sont pas retombées à 1. Une table présente sur l'ancienne machine mais absente de la nouvelle est signalée comme manquante.
  • Audit de parité des services — compare les services système actifs de l'ancienne machine à ceux de la nouvelle, et signale ce qui tourne à l'ancienne mais pas sur la nouvelle.
python3 -m <audit-bascule-mothership> [--json]

Sous-famille — intégration avec une boutique PrestaShop legacy tierce

Cette sous-famille gère le cycle recette / production / git d'un site PrestaShop hébergé sur un serveur tiers via SSH+rsync. La production n'est modifiée que par geste explicite d'un opérateur humain.

Outil Rôle Mode d'invocation
Déploiement production Bascule la production par rsync/SSH avec garde anti-contournement de recette : refuse si le contenu à pousser ne correspond pas déjà à l'état de recette. Un contournement explicitement justifié est toujours journalisé. Gère le backup, la poussée, le contrôle de cohérence, le health-check et le rollback. Bibliothèque / CLI
Détecteur de dérive 3-voies Compare en lecture seule le contenu de recette, de production et du dépôt git (par empreinte de contenu, jamais par numéro de version). Classe chaque fichier en six cas dont un cas de contournement de recette. Peut alerter par email. Bibliothèque / CLI ; cron quotidien
Rafraîchissement de la base de recette Copie la base de production vers l'environnement de recette : dump, import, réécriture des URL, désactivation du mail, coupure des modules de paiement, anonymisation, purge du cache de templates. CLI
Vigie des prix dégressifs Surveille les paliers de prix spécifiques après tout changement de prix. Mesure d'abord, corrige ensuite. Suspend et alerte si le nombre d'écarts dépasse un seuil de protection. CLI ; cron 4×/jour

Façades OVH — registrar, alias email, droits API

Toutes ces façades s'appuient sur le même client OVH partagé. Les credentials ne transitent que par le fichier de configuration hôte, jamais en clair dans le code. La séparation des pouvoirs (lecture / commande sans débit / droits d'écriture) est portée par le code.

Outil Rôle Mode d'invocation
Commande de noms de domaine Commande des domaines OVH en trois gestes : devis, génération d'une URL de bon de commande (payée par un humain — le paiement automatique est désactivé en dur), et preuve whois. Voie unique d'achat de domaines. CLI / skill /domaines
Gestion des alias email Crée, liste et supprime des redirections email OVH MX Plan. Création idempotente (vérifie le couple exact avant de créer). Un défaut de droits renvoie vers l'outil de gestion des droits API. CLI
Façade compte client externe Accès en lecture seule au compte OVH d'un client tiers : inventaire, appel GET générique, périmètre de la zone DNS. CLI
Gestion des droits de la consumer key Demande d'élargissement des droits API OVH : génère l'URL à valider par l'opérateur humain, puis installe la nouvelle clé validée en remplaçant l'ancienne (conservée en archive). CLI / skill /lien-a-valider
Sonde de stock VPS Surveille la disponibilité de références VPS spécifiques pour les clients en attente. Le catalogue public n'étant pas une preuve de stock, charge le configurateur réel pour vérifier. N'achète rien. Alerte l'opérateur humain au retour en stock — jamais directement le client. Cron (toutes les heures)
Premier accès VPS OVH livré Prépare l'accès initial à un VPS nouvellement livré (pose de clé SSH sans voir le mot de passe). Compagnon du script d'initialisation VPS (Ubuntu, fail2ban, SSH par clé seule) et du script de migration de pile compose entre hôtes. CLI / skill /serveur-client
Ouverture de compte OVH client Ouvre un compte OVH au nom d'un client via l'endpoint public. Aucun mot de passe transmis : le titulaire active son compte et choisit son secret. Dry-run par défaut. Ne commande ni ne paie. CLI
Appel UAPI cPanel Exécute un appel UAPI cPanel par exécution, dans la session déjà ouverte (aucun identifiant saisi). Lecture : analyse de zone DNS, liste des boîtes email, enregistrements MX. Écriture protégée par flag explicite. CLI
Comparaison de zones DNS Compare ce que publient deux jeux de serveurs DNS pour un domaine, enregistrement par enregistrement (lecture seule, une requête à la fois). Prévu pour vérifier la parité avant de changer les serveurs DNS. Gère les A/AAAA Cloudflare proxifiés (remplacés par l'origine réelle) et les enregistrements fantômes à ignorer. CLI / skill /sortir-cloudflare

Hygiène disque et rotation des espaces de travail

Outil Rôle Mode d'invocation
Purge des espaces de travail de sessions mortes Supprime les répertoires de travail éphémères appartenant à des sessions d'agent terminées. Double critère : ancienneté ET absence de processus actif détenant le répertoire. Aperçu par défaut, suppression effective sur demande explicite. Cron (02:00)
Hygiène disque générale Purge les espaces de travail éphémères de plus de 7 jours, les worktrees git mergés et propres, et compacte les transcripts de sessions. Gardes de sûreté : profondeur limitée, UUID requis, liens symboliques ignorés. Cron (06:20)
Compaction des transcripts de sessions Réduit la taille des transcripts de sessions anciennes en tronquant les sorties d'outil (conservation de la tête et de la queue, marqueur d'élision). Jamais de suppression ni de compression. Alerte en cas d'échec. Cron (01:30, --apply)

Santé système du vaisseau-mère

Un outil surveille la santé système locale : espace disque, mémoire, redémarrage en attente, paquets, capacité d'accueil du dump PostgreSQL nocturne, worktrees git accumulés, charge CPU, pression système (PSI), taux de création de processus, espace temporaire en RAM, et orphelins de sessions mortes. Peut alerter l'opérateur humain. Tourne quatre fois par jour.

python3 -m <sante-systeme-mothership> [--json] [--quiet] [--alert]

Audit de bascule de machine

python3 -m <audit-bascule-mothership> [--json]

Gestion des poses de crontab

Un outil pose, liste ou retire une ligne de crontab sans écraser les autres entrées existantes. Sauvegarde préalable, idempotence par marqueur nommé, relecture après écriture. Ne s'exécute pas lui-même en cron.

python3 -m <gestionnaire-cron> --lister
python3 -m <gestionnaire-cron> [--retirer <nom>] [--dry-run]

Provisioning de l'espace organisationnel des fondateurs

Un outil provisionne et valide l'espace privé des fondateurs sans afficher ni versionner de secret : création d'un rôle PostgreSQL dédié, sauvegarde du périmètre avant toute écriture, exécution de migrations rejouables (gouvernance, tableau de bord, profils visuels). Le secret généré est rangé dans le coffre hôte ignoré par git. Dry-run par défaut.

python3 -m <provision-organisation> [--apply]

Façade de la recette PrestaShop 9

Une façade shell gère le cycle de vie d'une boutique PrestaShop 9 de recette jetable : démarrage, arrêt, réinitialisation, installation de modules, console, logs. Deux corrections notables :

  • Mesure du mode debug — l'outil interroge directement la configuration active de la boutique au lieu de relire la variable d'environnement ; l'écart entre les deux est signalé sans être corrigé automatiquement.
  • Résolution du bon module — identifie le fichier principal d'un module par sa position dans l'arborescence (le moins profond) ; en cas d'ambiguïté à profondeur égale, refuse plutôt que de choisir arbitrairement.

Inventaire et purge du cache image orphelin

Un outil identifie les entrées de cache image qui ne correspondent plus à aucune image en base, et les déplace vers une corbeille horodatée (jamais de suppression directe). La destruction effective est protégée par un tampon de confirmation.

Purge ciblée du cache SSR

Après une correction d'URL (un 200 remplacé par un 404 ne se propage pas spontanément), un outil purge le cache SSR d'un tenant en appelant l'endpoint de purge sur le VPS concerné. Supporte la purge par chemin ou la purge totale.

python3 -m <purge-cache-ssr> --site <cible> --path <chemin> [--all] [--verify]

Archivage incrémental des photos

Un processus nocturne réalise l'archivage incrémental des photos d'un téléphone Android vers le coffre de sauvegarde. L'absence du téléphone est traitée comme un état normal (sortie 0), non comme une erreur. La source est en lecture seule : rien n'est supprimé du téléphone.

Sonde de parité de contenu

Un outil compare le nombre de lignes dans les tables de contenu de référence entre deux instances de base de données : le hub interne et la base live du site public. Produit un entier égal au nombre de divergences détectées (une table inaccessible compte comme une divergence). Lecture seule.

Famille : synchronisation OSS, refactoring et migrations

Cette famille regroupe les outils de synchronisation entre le dépôt privé et la distribution publique open-source, les scripts de refactoring structurel, ainsi que les pipelines de migration de schéma et de données.

Outils de synchronisation et de nettoyage OSS

Outil Rôle Invocation
Synchroniseur OSS Exporte les répertoires publics du dépôt privé vers le dépôt public CodeMyShop sous forme de snapshot squashé par release (pas un replay commit-à-commit) ; le dépôt public reste canonique sur les fichiers existants (mise à jour sans ajout de nouveaux fichiers non présents côté public). Référencé par le guide de routage PaaS/OSS. CLI (pipeline OSS)
Suppresseur de commentaires OSS Retire l'intégralité des commentaires du snapshot OSS avant publication. CLI (pipeline OSS)
Suppresseur de quarantaine OSS Purge les fichiers placés en quarantaine OSS. CLI
Déplaceur de module vers un pack Déplace un module d'un répertoire source vers un répertoire de destination au sein de l'arborescence de packs. CLI (<src> <dest>)
Générateur d'imports de module Régénère les déclarations d'imports explicites utilisées par le chargeur de modules. CLI
Régénérateur de liens de dépendance des automates Relit les sources TypeScript des automates et régénère en base les liens agent/conduite consommés par le moteur d'automates. La phase d'écriture du graphe de dépendances complet a été retirée (aucun consommateur réel) ; seule la régénération agent/conduite subsiste. Cron (5 4 * * *) / CLI (--dry-run, --quiet)

Gestion des migrations DDL et modules

Outil Rôle Invocation
Applicateur de migrations DDL idempotent Applique de façon idempotente les colonnes et tables manquantes détectées par l'auditeur de dérive de schéma. N'exécute jamais de suppression de colonne ou de table. CLI
Installateur de DDL de module gaté Installe le schéma DDL d'un module uniquement si le tenant a ce module déclaré dans sa configuration (doctrine de verticalité) : lit la liste des modules activés, applique le SQL d'installation de façon idempotente (CREATE TABLE IF NOT EXISTS, jamais de suppression). L'option --module restreint l'opération à un module précis. Un module absent de la configuration ne voit aucune table créée. CLI
Auditeur de cohérence tables/modules Compare les modules déclarés dans la configuration tenant avec les tables effectivement présentes en base — détecte les tables orphelines (module retiré) et les tables manquantes (module actif sans DDL). CLI
Vigie de retard de migration Compare les objets DDL (tables, colonnes, contraintes, index) des migrations du dépôt à l'introspection de chaque cible, et tient à jour le registre des migrations appliquées. Un fichier illisible produit le statut UNPARSED et provoque un exit 1. Lecture seule, n'applique rien. Répétable avec l'option --tenant. Cron (45 4 * * *, 11 tenants, avec repli de notification) / lib
Détecteur d'ancrage de slug fragile Détecte les migrations ancrées sur un slug de page CMS qu'une autre migration renomme — ces migrations ne sont plus rejouables. Le remède est un ancrage double (ancien + nouveau slug). Sort avec le code 1 si une violation est trouvée. Options --tenant et --json. CLI
Applicateur de migrations core Applique les migrations core manquantes sur une cible de la flotte : DDL et enregistrement dans le registre des migrations dans une seule transaction, avec attribution des droits au rôle applicatif dans la même transaction. Protections : dump attesté préalable, option --expect-db et confirmation explicite pour la production. Options --fix-grants, --normalize-constraints ; dry-run par défaut, --apply pour exécuter. Refuse les migrations portant CREATE INDEX CONCURRENTLY avant toute exécution (un index concurrent ne peut pas s'exécuter à l'intérieur d'un bloc de transaction). CLI (référencé par les hooks de déploiement et la notification du cron de vigie)
Applicateur de migration tenant sur préprod Applique un fichier SQL versionné du dossier de migrations d'un tenant sur une base de préprod, d'atelier ou de recette, sans passer par un LLM. Refuse la production et tout chemin hors du dossier du tenant visé. L'option --twice prouve l'idempotence. CLI (--tenant, --file, --twice)
Vérificateur de dump tenant Produit un dump PostgreSQL complet d'un tenant prouvé restaurable : snapshot en lecture répétable, dump compressé, comptage par table à la source, restauration dans un conteneur isolé sans réseau, comparaison des comptes, verdict dans un manifeste horodaté. La fonction de vérification du manifeste sert de prérequis bloquant aux scripts d'écriture. Options --status, --max-age-hours, --keep. CLI (python3 <vérificateur-dump> <tenant> [--status])
Migration de format de manifeste Migration mécanique du format de manifeste legacy vers le format enrichi (community/enterprise), idempotente. Options --dry-run et --check. CLI
Miroir multi-harnais des hooks système Façade de mise en service du miroir multi-harnais des hooks système (après archivage du chantier concerné) : mode --check par défaut (deux requêtes SQL annulées) ; mode --apply prend un snapshot privé, joue les migrations DDL datées, puis lance l'indexeur de hooks système avec les options de parité requises. CLI (one-shot, opération IA)
Émetteur de tables du schéma CodeMyShop Émet la liste des tables du schéma CodeMyShop au format table<TAB>fichier_drizzle trié, en lisant uniquement le premier littéral passé à la déclaration de table (ni index, ni contraintes). Source unique consommée par le synchroniseur de schéma et le hook de vérification de source de vérité DB tenant. Lib (utilisé par deux consommateurs)
Scindeur de base CodeMyShop Donne à la boutique CodeMyShop sa propre base de données : dump de la source (jamais modifiée), création du rôle et de la base cible, restauration, enregistrement du mot de passe dans le registre chiffré, bascule du fichier d'environnement du tenant après sauvegarde, redémarrage du gestionnaire de processus et vérification par requête. Aucun secret n'est affiché. Options --check, --run, --reload-runtime. CLI (opération ponctuelle)
Façade référentiel véhicule Accès au référentiel de données véhicule via une API tierce : expose les endpoints taxonomie non facturés (marques, modèles, types) ; l'endpoint de lookup par immatriculation (facturé) n'est pas exposé. Les erreurs de limitation de débit sont levées comme exception typée (jamais retournées comme liste vide), aucun cache d'échec, le jeton est expurgé des journaux. Options --credits, --marques, --modeles, --types, --cache-dir, --pas. CLI (utilisé par les tests)
Remise en place des drapeaux d'auto-explosion Applique le fichier SQL de migration des drapeaux d'auto-explosion, puis effectue un contrôle de cohérence. CLI (migration)
Migration crontab automatisation Migration one-shot du répertoire d'automatisation legacy vers la structure courante. CLI (one-shot)

Connecteurs catalogue fournisseur — DropXL / vidaXL

Cette sous-famille alimente les boutiques de dropshipping depuis les flux fournisseurs DropXL et vidaXL, gère la synchronisation incrémentale des stocks et prix, et assure la migration des images produit vers le stockage objet souverain.

Outil Rôle Invocation
Connecteur API REST DropXL/B2BWave Récupère produits, catégories, stocks et prix depuis l'API B2BWave et effectue un upsert idempotent en base tenant. Réservé à la phase de transmission de commandes, conditionnée à la validation KYC. Supporte l'authentification OAuth2 M2M et le mode Bearer direct (bac à sable pré-KYC). CLI
Importeur de flux catalogue vidaXL

Importe le catalogue complet vidaXL/DropXL depuis les fichiers de flux publics (environ 330 000 produits, sans KYC). Distinct du connecteur API REST gaté KYC.

À l'ingestion, l'importeur pose une facette « Capacité » (nombre de places) sur le rayon Sièges & Canapés selon deux règles combinées :

  • Règle titre : lit le nombre de places annoncé dans le titre produit (« N places », « N-seater »).
  • Règle type : déduit la capacité depuis le premier mot du nom pour les types mesurés fiables au singulier (fauteuil, pouf = 1 place — cohérence fiche fournisseur > 99 %) ; chaise est explicitement exclue (69 % de cohérence seulement, contredite par les lots) ; les marqueurs de lot sont détectés pour éviter les faux positifs.

La couverture combinée sur le sous-arbre entier (14 698 produits) est à confirmer suite à des mesures intermédiaires divergentes (22,0 % → 24,3 % → 49,9 % selon le périmètre et la règle considérée). La protection en cas d'erreur repose sur un rollback automatique si une commande SQL échoue en cours de transaction ; il n'existe pas de mécanisme d'annulation à la demande après coup.

Le mode --refresh-stock synchronise de façon incrémentale stocks et prix depuis le flux d'offres delta (~14 Mo) au lieu de retélécharger le catalogue complet. Il met à jour le prix catalogue uniquement si le prix courant n'a pas été modifié manuellement (un prix retouché dans le back-office est respecté), ainsi que le stock disponible (ligne créée si absente). Dry-run par défaut ; --live pour écrire.

Après tout import complet réussi (hors --refresh-stock), le recalcul des paliers d'indexation est déclenché en sous-processus pour fermer les fiches nouvelles (sans palier = ouvertes par défaut côté core). Un échec de ce recalcul est journalisé en alerte mais ne bloque pas l'import.

La synchronisation des EAN suit les identifiants du flux d'offres ; le taux de TVA applicable peut être configuré pour ramener le prix TTC fournisseur au prix HT. Les tables de prix boutique suivent les tables produit.

Options : --tenant, --dry-run, --live, --purge-demo, --all, --limit, --batch-size, --map-bootstrap, --refresh-stock.

CLI
Migration d'images produit vers le stockage objet souverain Transfère les images produit du CDN fournisseur vers le stockage objet souverain : téléchargement, conversion WebP, dépôt dans le bucket public, réécriture de l'URL en base. CLI
Cron migration de couvertures (covers en priorité) Wrapper cron qui traite en priorité les images de couverture (position 1) avant les images de galerie. Appel borné dans le temps (--max-seconds), commit incrémental (--flush-every), idempotent, verrou anti-chevauchement. Cron (*/5 * * * *)
Cron backfill variantes responsives — couvertures Génère les variantes responsives manquantes pour les images de couverture déjà migrées. Curseur de reprise persistant sur (id_product, position), skip si la variante existe déjà, auto-terminant, verrou dédié. Cron (*/10 * * * *)
Cron backfill variantes responsives — galerie Génère les variantes responsives manquantes pour les images de galerie (position > 1) déjà présentes sur le stockage objet souverain mais sans variantes. Curseur et verrou distincts des couvertures (coexistence sans blocage). Cron (*/15 * * * *)
Rafraîchissement incrémental stocks/prix vidaXL Wrapper cron qui lance le mode --refresh-stock de l'importeur vidaXL pour un tenant, sous verrou, avec journalisation et notification en cas d'échec. Cron (30 5,11,17,23 * * *)
Réparateur de noms produit vidaXL Corrige les noms produit fautifs issus des flux vidaXL (valeurs non traduites, code en tête, fragment d'attribut) sans LLM, via un dictionnaire fermé — tout terme inconnu est refusé et listé plutôt que deviné. Seul le champ nom est modifié (slug et redirections inchangés). Dry-run par défaut, --apply pour écrire. CLI (--tenant, --id-lang, --apply)
Vérificateur de couvertures mortes Re-contrôle les images de couverture blanchies côté fournisseur (produits purgés chez vidaXL, couverture restée vide). Deux passages hebdomadaires actifs : lundi et dimanche à 06h15. Cron (2 lignes actives : 15 6 * * 1 et 15 6 * * 0)

Scraping et ETL catalogue pièces automobiles

Pipeline sitemap-driven idempotent vers la base d'un tenant PrestaShop de préprod : scraping anti-ban avec gestion Cloudflare, cron incrémental avec verrou anti-chevauchement, téléchargement d'images et injection fan-out. Périmètre : environ 32 000 fiches produits (turbos, injecteurs, pompes haute pression, additifs).

Le socle HTTP (session, backoff, anti-ban, limitation de débit) est mutualisé entre le scraper du site fournisseur et le comparateur de prix concurrents décrit ci-après.

Outil Rôle Invocation
Socle HTTP de scraping mutualisé Fournit la session HTTP, le backoff exponentiel (10/30/90 s), la limitation de débit (4 s + jitter 0,5–2,0 s par défaut), la détection de bannissement (3 HTTP 403 consécutifs = arrêt propre) et la gestion des soft-blocks anti-bot (3 HTTP 400 consécutifs → cooldown, 5 cooldowns max → abandon). Inclut également la fonction de classification de type de pièce (turbo complet vs cartouche seule) depuis le préfixe du libellé commercial, sans jamais retourner null. Ne contient aucun parseur de fiche produit. Lib (importé par le scraper fournisseur et le comparateur de prix)
Scraper fournisseur pièces (moteur) Scraping idempotent sitemap-driven (~32 053 fiches, pattern /fr/<ID>-slug.html) : parse les données structurées schema.org Product (nom, SKU, MPN, marque, prix, disponibilité, références OEM, véhicules compatibles) et le tableau de spécifications HTML. Les primitives HTTP sont déléguées au socle mutualisé ; le décodage des entités HTML est assuré localement. Les fiches scrapées sont stockées dans la table de staging dédiée du vaisseau-mère. CLI (invoqué par le wrapper cron)
Wrapper cron scraping incrémental Orchestre les quatre étapes sous verrou non-bloquant : (1) scrape d'un lot borné incrémental, (2) injection des fiches manquantes, (3) injection des champs spéciaux, (4) purge du cache Smarty PrestaShop distant. Ligne cron suspendue depuis le 2026-08-06 (réimport sélectif catalogue prod→préprod en cours) — lancement manuel uniquement jusqu'à la clôture du chantier. CLI (cron suspendu)
Téléchargeur d'images fournisseur Récupère deux photos distinctes par produit depuis les données de scraping (source haute résolution, filtre anti-placeholder) avec déduplication par identifiant d'image dans l'URL. CLI
Injecteur d'images et descriptions PrestaShop Importe les images en fan-out et remplit les descriptions vides : nettoyage des images existantes avant run massif, application par référence sur tous les produits partageant la même référence. CLI
QA vignettes listing catégorie Recette ciblée des vignettes de listing catégorie préprod : vérification de l'en-tête source d'image via requête SSH + Playwright sur trois catégories avec mesure de la taille naturelle de l'image. CLI (test)
Injecteur catalogue vers PrestaShop préprod Injection idempotente du catalogue scrapé vers une instance PrestaShop de préprod via SSH et base de données distante. Dry-run par défaut, --execute pour écrire, --rollback pour supprimer la plage de produits injectés, --special pour les champs spéciaux (type moteur, véhicules compatibles, tags OEM, garantie), --ids pour restreindre à une liste de références, --limit pour plafonner, --no-test-cat pour sauter le rattachement à la catégorie de test. CLI
Recadrage carré d'images produit Assainissement des images produit : recadrage carré sans perte de qualité. CLI
Inventaire d'images produit (lecture seule) Analyse le répertoire d'images d'un tenant : une image est considérée « active » si et seulement si son identifiant existe en base et si son chemin éclaté correspond au schéma de routage attendu. Produit un manifeste des images orphelines consommé par l'outil de purge. CLI
Purge réversible d'images orphelines Déplace les images orphelines identifiées par le manifeste vers un répertoire de corbeille horodaté (déplacement, pas suppression ; arborescence préservée). Relit la base avant de bouger chaque fichier (protection contre les conditions de course) et refuse tout fichier dont l'identifiant est redevenu actif. Simulation sans --apply, un tampon horodaté (PURGE_STAMP) est requis. CLI (--apply)

Import catalogue WooCommerce

Reprise du catalogue public d'une boutique WooCommerce vers CodeMyShop : lecture seule de la Store API publique, aucune écriture en base, aucun déploiement.

Outil Rôle Invocation
Importeur catalogue WooCommerce

Lit l'API Store publique WooCommerce sans clé (produits paginés via l'en-tête de pagination, catégories, prix et références des déclinaisons) et dépose un fichier JSON d'import et un répertoire d'images que le propriétaire du tenant intègre.

Normalisation appliquée : entités HTML décodées, tableaux HTML de la description longue convertis en paires libellé/valeur, marque détectée depuis le champ dédié ou la première marque de la liste --marques trouvée en mot entier (jamais devinée, null si introuvable), prix en centimes (0 = « sur devis »), image originale et non la vignette, nommée <id_produit>-<rang>.<ext>. Limitation à une requête par seconde au plus (--pause).

Options : --site, --out, --marques, --pause, --sans-images, --sans-declinaisons, --depuis-dossier.

CLI / skill /import-woocommerce

Comparateur de prix concurrents

Alimente un module back-office PrestaShop affichant le prix des concurrents en regard du prix natif dans la liste produits. Distinct du pipeline d'import catalogue (ce sous-système compare des prix, il n'importe aucune fiche produit). Réutilise le socle HTTP mutualisé.

L'orchestrateur hebdomadaire enchaîne les trois gestes (scraping → étiquetage de type de pièce → synchronisation PrestaShop) pour un concurrent à la fois, sous verrou. Deux lignes cron actives : mercredi à 01h00 et jeudi à 01h00, via le wrapper de cron. L'activation effective d'un concurrent est relue en base à chaque exécution — la base décide si le concurrent est actif, la crontab décide seulement quand lancer.

Outil Rôle Invocation
Collecteur de prix concurrents Collecte les prix des concurrents depuis les sites listés dans le registre des concurrents actifs. Ne parcourt pas le catalogue concurrent en entier : uniquement les références déjà vendues par le tenant (environ 2 944 références), détectées par fenêtres glissantes de 1 à 5 tokens dans le slug d'URL. N'écrit pas une ligne par passage : une ligne représente un palier de prix, la date de dernière observation est mise à jour si le prix n'a pas changé. Le prix est toujours comparé TTC. L'option --backfill-part-type renseigne la classification de type de pièce uniquement sur les lignes sans classification — filet de rattrapage idempotent par construction. Options : --competitor, --limit, --delay, --dry-run, --check-robots, --backfill-part-type. CLI
Synchroniseur PrestaShop du comparateur Synchronise la base PostgreSQL vers PrestaShop : lit le dernier prix connu par couple (référence × concurrent) et reconstruit intégralement la table de snapshot côté PrestaShop (le module fait un simple LEFT JOIN local, sans lecture cross-base au rendu). Les références sont normalisées (alphanumérique minuscule) pour le rapprochement, puis réécrites avec la référence PrestaShop exacte. La table est reconstruite entièrement à chaque passage (idempotent). Les cartouches seules sont exclues dans les deux sens (ni comparées, ni point de comparaison — la donnée reste collectée en base, l'exclusion est réversible en un geste). Le prix affiché en back-office est un lien cliquable vers la fiche d'origine du concurrent, sourcé du même relevé que le prix. La validation d'URL accepte uniquement http(s) et rejette les URL de plus de 255 caractères. Options : --dry-run, --init-schema, --limit. CLI
Orchestrateur hebdomadaire du comparateur Enchaîne pour un concurrent passé en argument : (1) scraping, (2) étiquetage de secours du type de pièce, (3) synchronisation PrestaShop. Verrou exclusif par concurrent. L'activation du concurrent est relue en base à chaque exécution. Cron (0 1 * * 3 et 0 1 * * 4, via le wrapper de cron)
Correcteur de format de tags Ajoute les tags de compatibilité mal ponctués (tirets au lieu d'espaces, environ 355 références) qui bloquaient la propagation de prix « fiches liées » du comparateur. Opération additive uniquement, avec journal JSON. Dry-run par défaut, --apply, --rollback, --limit. CLI

Seeds de démonstration

Outil Rôle Invocation
Importeur produits démo (Python) Importe environ 120 produits d'un catalogue de démonstration en base. CLI
Importeur produits démo (JavaScript) Peuple 28 catégories de la boutique de démonstration depuis l'API publique d'un catalogue tiers (permission acquise pour usage démo) : récupération paginée, organisation par fournisseur/type de produit, téléchargement et redimensionnement des couvertures en WebP (4 tailles), génération du SQL d'insertion (produit, langue, boutique, image, catégorie, stock) et application via connexion distante + transfert des images. Idempotent (skip si la référence est déjà présente ; reseed = suppression puis insertion). CLI (one-shot)
Reset de la base démo Restaure la base de démonstration depuis un dump de référence seedé. L'option --snapshot crée ce dump. CLI
Seed de données de chantier (centaure) Seed spécifique à un chantier de configuration avancée. CLI
Runner de seed de verticale Instancie une boutique depuis un fichier de seed de pack verticale : phases catégories, produits, mégamenu, marques — idempotent, --apply pour écrire. CLI (one-shot par tenant)
Seed de données de référence Installe les données de référence de base (zones, pays, transporteurs, moyens de paiement) pour combler le vide systémique post-application de migration. La commande distante est correctement échappée. CLI (provisionnement)
Restaurateur de démo (shell) Restaure la base de démonstration depuis un dump de seed initial. L'endpoint d'administration vise ce script ; aucune ligne cron active n'est présente (la docstring mentionne un horaire indicatif). CLI
Exporteur de mégamenu Dump du mégamenu d'un tenant (tables de mégamenu et leurs traductions) via connexion distante vers un fichier SQL idempotent (suppression par identifiant client puis insertion), coordonnées lues dans le fichier de seed du tenant. CLI (<extracteur-megamenu> <tenant>)
Vigie du reset nocturne de la démo Surveille le reset nocturne de la boutique de démonstration. Le reset tourne sur le VPS démo (cron à 21h00 UTC) sans identifiants de messagerie : il écrit son verdict dans un fichier de statut ; la vigie, sur le vaisseau-mère, le lit via connexion distante et alerte en cas de problème. Trois verdicts : ok (silencieux), disarmed (cron absent — pas d'alerte), alert (cron présent ET statut fail / absent / run trop ancien / connexion impossible). Options --db, --dry-run, --max-age-h. Cron / CLI

Lot de redirections produit « fidèles »

Trois outils d'un même lot : préparer le fichier TSV, sauvegarder la table de redirections avant écriture, charger en table temporaire (avec rapport de recevabilité puis application). Aucun n'écrit en base sans l'option --appliquer.

Outil Rôle Invocation
Préparateur du lot de redirections Convertit la table d'appariement produite par l'agent Otlet (24 colonnes, hors dépôt) en TSV à 6 colonnes UTF-8/LF destiné à un \copy PostgreSQL (jamais d'INSERT générés, donc aucun échappement maison). Ne se connecte à aucune base ; la sortie est versionnée à côté de la migration tenant. Options --in, --out. CLI (référencé par la migration SQL)
Dump de sauvegarde des redirections Sauvegarde la table de redirections avant toute écriture (production et préprod, options --target prod|preprod|both, --dest) : fichiers de schéma, de données (insertions colonne par colonne) et de métadonnées (comptes, empreintes SHA-256) horodatés ; vérification bloquante du nombre d'insertions contre le comptage en base. Sans écriture, rejouable. CLI (prérequis du chargeur)
Chargeur du lot de redirections Charge le lot de redirections en table temporaire, produit le rapport de recevabilité, puis COMMIT (--appliquer) ou ROLLBACK (par défaut) : le même SQL est joué dans les deux modes. Exige un dump vérifié, contrôle l'empreinte SHA-256 du TSV après transfert, arrête sur la première erreur SQL, nettoie les fichiers déposés. Le marqueur url-change:allow est requis. L'option --appliquer constitue un geste de production, à ne lancer que sur ordre explicite. CLI

Catalogue pièces auto — tenant de démonstration autoKUR

Scripts qui montent et entretiennent la boutique du tenant autoKUR (catalogue, FAQ, images, emails, prix). Convention commune : dry-run par défaut, --apply pour écrire. Aucun n'est déclenché directement par le crontab vivant.

Outil Rôle Invocation
Arbitrage des branches catalogue Mesure la collision de slug entre les grandes branches du catalogue (turbos, injecteurs, pompes haute pression) avec les données de demande réelle issues du Search Console du site frère, utilisé comme sonde de marché. Lecture seule. Options --top, --json. CLI
Porteur de faits d'application véhicule Étapes 3-4 du croisement de sources : transfère les faits de compatibilité pièce/véhicule vers les tables de véhicules et de montages, par marque, code moteur et puissance — avec niveau de confiance (sûr / probable / à vérifier), scission de véhicule par période, sans intervention humaine. Sous-commandes match (dry-run) et apply (dump préalable, --apply, --plan-out). Option --tenant. CLI
Croisement de sources de références Croisement automatique de sources externes gratuites pour retrouver numéros OE et applications par référence vendue, sans base de données technique tierce payante. Sous-commandes collect (respecte robots.txt, archive les pages sources), parse (écrit les faits extraits), report, apply-aliases (alias de référence, source « catalog »). Aucun LLM. Option --tenant avant la sous-commande. CLI / lib
Seed du catalogue Initialise un produit par référence (environ 2 189 références legacy) projeté dans l'arbre catalogue au nœud le plus profond, depuis les tables de montages/véhicules et le legacy du site frère. Prix de la fiche la plus récente, stock maximum, nom fabriqué. Les images sont posées séparément par l'outil d'import d'images. Dry-run par défaut, --apply, --limit. Mode --rattachements-seuls pour rejouer uniquement la projection catalogue sans réécrire les textes, prix et stocks. CLI
Rédacteur de guides catégorie Générateur déterministe (sans LLM) des guides bas de page des catégories (environ 1 759 catégories, FR/EN/DE) : présentation, tableau de spécifications, diagnostic, consigne de montage (FR seul), conformité UE ; liens internes réels calculés depuis les données d'agrégation de catégorie et les paliers d'indexation. Les guides ne promettent que ce que le site indique réellement (délais de livraison, emballage, stock). Mode --generes pour régénérer tous les guides actifs posés par ce générateur (y compris les pages encore en attente d'ouverture). Options --v1, --id, --limit, --apply. CLI
Mise à jour de la page consigne Met à jour la page consigne avec les montants chiffrés par marché (turbo 120 €, injecteur 50 €, pompe HP selon fiche) en FR/EN/DE. Mise à jour ciblée des champs description et méta. Dry-run avec auto-vérification, --apply pour écrire (dump → mise à jour × 3 langues → contrôle post-état). Idempotent. CLI
Créateur de déclinaisons de consigne Crée les groupes d'attributs « Consigne turbo » / « Consigne injecteur » avec deux options (consigne réglée / noyau d'abord, FR/EN/DE) et deux déclinaisons binaires par produit (environ 1 437 turbos, 508 injecteurs). Synchronise le stock disponible et l'attribut par défaut. Options --test <id_product>, --apply. CLI
Administration des prix dégressifs Façade d'administration et d'audit des prix dégressifs : grille de remises relatives sur volume (2 pcs -2 %, 3 pcs -4 %, 4 pcs -8 %, 5 pcs -10 %) dans la table de prix spéciaux, identifiée par une règle sentinelle. Compatible avec le module de gestion des prix dégressifs du back-office. Options --audit, --sync, --adopt, --all-cats, --category-id, --tenant, --json. CLI
Générateur de gabarits d'emails transactionnels Génère et injecte les 7 gabarits d'emails transactionnels (confirmation, préparation, expédition + bon retour consigne, paiement en attente, bienvenue, réinitialisation de mot de passe, notification admin) en FR/EN/DE. Options --check (état actuel) et --apply (injection). CLI
Intégration des générations de référentiel véhicule Intègre dans la table des véhicules les générations issues du référentiel véhicule externe pour les modèles arbitrés. Le segment publié est l'ordinal de génération ; le code châssis est conservé comme libellé technique. Fige les ordinaux de châssis en base. Aucun point d'entrée CLI direct : utilisé comme bibliothèque par l'importeur de montages. Lib
Gabarit FAQ catégorie (niveau motorisation) Gabarit déterministe de FAQ catégorie (15 questions/réponses en FR pour les turbos, FR/EN/DE pour injecteurs et pompes) remplies depuis les variables réelles de la page (pilier, marque, modèle, génération, motorisation, carburant, puissance, références, prix). Zéro LLM. Retourne None si les données sont insuffisantes pour atteindre le minimum de questions valides. Lib
Gabarit FAQ catégorie (niveau modèle) Patron FAQ au niveau modèle (pages sans sigle moteur, puissance ni carburant) : 4 variables (marque, modèle, références, prix mini), neuf constructeurs (3 langues × 3 piliers) pour éviter les fautes grammaticales. Ne parle jamais de carburant ni de puissance à ce niveau. Lib
Preuve du gabarit FAQ sur les top 20 motorisations Valide le gabarit FAQ sur les 20 motorisations les plus cliquées (données Search Console) : résout chaque chemin cible en catégorie vivante, appelle le constructeur de FAQ et classe le résultat OK ou DÉCLINÉ. Lecture seule, zéro écriture, zéro LLM. CLI (python3 -m <outil-preuve-faq>)
Rejeu du gabarit FAQ Remplace les FAQ écrites avant le patron déterministe (environ 551 pages turbo parlant d'injecteur ou de pompe) : applique le patron seul, ne remplace que si le nombre minimum de questions est atteint dans les 3 langues, en une seule transaction. Zéro LLM. Options --apply, --id, --sans-faq, --limit. CLI
Traduction déterministe des caractéristiques produit Traduit les caractéristiques produit FR → EN/DE : environ 22 noms et environ 11 300 valeurs par dictionnaires fermés (marques et codes techniques inchangés) pour supprimer le repli vers le français dans l'API catalogue. Options --apply, --test <id_product>. CLI
Importeur de compatibilités pièce/véhicule Extrait les compatibilités du legacy vers les tables de véhicules et de montages par trois voies de confiance (génération, modèle, caractéristique). Aucune description ni image ne transite. Dry-run par défaut, --apply avec dump préalable. CLI / lib
Suppresseur du H2 d'ouverture en double Retire le titre H2 d'ouverture en doublon (« Présentation » / « Overview » / « Überblick ») des descriptions longues déjà écrites, uniquement s'il est le premier H2 et porte exactement le libellé attendu dans sa langue. Idempotent. Options --apply. CLI
Mesure de l'appariement d'images legacy Mesure l'appariement potentiel des images legacy vers le catalogue cible par référence commune, avant tout import (références communes, images récupérables, produits sans image). Lecture seule, aucune écriture. CLI
Enrichissement multi-angles depuis le fournisseur Récupère des photos studio HD (1200×1200) depuis le catalogue du fournisseur scrapé : téléchargement, normalisation (recadrage carré), injection des angles manquants dans les tables d'images. Options --limit, --offset, --id-product, --dry-run. CLI
Importeur d'images depuis le site frère Récupère les images produit du site frère vers le catalogue cible : fichier d'abord, enregistrement en base ensuite, identifiants d'images réutilisés, idempotent (pas d'écrasement si déjà présent), journal de rollback imprimé. Dry-run par défaut, --apply, --json. CLI
Mise à niveau HD des images Rapatrie depuis le site frère les variantes haute définition (800×800) des images du catalogue, applique le recadrage carré, déploie vers le répertoire de sources d'images et purge le cache WebP, puis vérifie l'intégrité. Option --dry-run. CLI
Importeur d'alias OEM fournisseur Importe et consolide les alias de référence OEM du fournisseur (environ 11 944 alias) : extraction depuis les données de scraping, normalisation stricte, insertion par lots sans doublon. Option --dry-run. CLI
Générateur canonique de l'arborescence catalogue Génère l'arborescence complète du catalogue : piliers produit, véhicules (pilier → marque → modèle, motorisations en facettes), hubs de référence. Lit le site frère en lecture seule, écrit les tables de catégories en un batch transactionnel idempotent après dump préalable. Importé par cinq autres outils du même tenant. Options --apply, --politique-demande. CLI (dry-run par défaut) / skill /structuration
Renom des motorisations homonymes Donne un nom lisible aux motorisations homonymes dans l'arbre à 4 étages : deux générations d'un même modèle peuvent porter la même motorisation (le slug a reçu un discriminant mais pas le nom affiché). Applique la règle de désambiguïsation en base sans repasser le générateur complet. Ne touche que le champ nom des motorisations actives dont le nom est partagé avec une sœur dans la même langue. Idempotent ; dry-run par défaut, --apply (dump → écriture → purge de cache). CLI
Dynamisation des nombres dans les textes catégorie Convertit en gabarits dynamiques les textes catégorie dont les nombres sont codés en dur (« 141 références KIA »). Chaque nombre suivi d'un nom de référence devient une variable calculée au rendu depuis les données d'agrégation de catégorie ; les nombres non suivis de ces noms (CV, kW, mois, €, cylindrées) et les guides bas de page ne sont pas modifiés. Un texte retouché manuellement décroche son gabarit. Options --tenant (obligatoire), --apply. CLI
Élagueur de chemins inversés Supprime les chemins de l'ancienne forme restés en base après le redressement de l'ordre modèle/génération. Retire uniquement ce qui est absent du plan courant et relève de l'inversion détectée. Dry-run par défaut, --apply. CLI
Déduplicateur de méta-titres Rend unique le méta-titre des pages dont le titre est partagé par une autre page active de la même langue, en réappliquant la règle de désambiguïsation sans rejouer le générateur complet. Options --apply (dump puis écriture). CLI
Réparateur du patron SEO EN/DE Remet les pages véhicule EN et DE au patron du générateur après une passe de rédaction SEO automatique ayant abîmé les titres, métas et H1. Traduit également l'unité de puissance (CV → PS) dans les noms et slugs. Recrée le plan via le générateur, applique champ par champ, avec oracle de contrôle. Options --oracle-min, --oracle-seul, --apply. CLI
Carte de couverture SEO Cartographie la surface organique du site frère couverte par l'arbre du catalogue cible : pour chaque URL du site frère qui génère du trafic, identifie la page équivalente (niveaux motorisation / génération / modèle / aucune). Écrit la table de couverture avec --apply ; ne produit aucune redirection. CLI
Générateur déterministe de descriptions produit Génère les descriptions produit FR/EN/DE par palier (--p1 / --p2 / --p3 / --all / --id), sans LLM : sections H2 dérivées des tables de montages, de véhicules et d'alias de référence. Règle DPMA appliquée en allemand. L'option --open-tier ouvre le palier d'indexation dans la table de paliers. L'option --apply écrit les descriptions en base. CLI
Correspondance plaque d'immatriculation Traduit une réponse d'API d'immatriculation en clé de jointure dans la table des véhicules, puis lit les montages compatibles, sans tolérance heuristique. Utilisé pour valider le test d'acceptation sur des plaques oracles. Mode --refresh pour régénérer le golden, --live pour interroger la base courante. CLI / lib (tests)
Garde-fou juridique du catalogue Contrôle la conformité juridique du catalogue : absence de binaires d'origine fournisseur (croisement d'empreintes SHA-256 sur les images), absence de reprise littérale de textes (n-grammes), vérification de non-plagiat du site frère. Exit 0 = conforme, 1 = violation, 2 = impossible à vérifier. Options --check images|textes|fratrie, --json. CLI
Recette du tunnel de commande Recette du tunnel de commande par requêtes HTTP réelles contre le site déployé, avec vérification en base que les montants TTC et HT diffèrent (protection contre un bug historique de commandes sans TVA). Précondition bloquante : aucun identifiant SMTP dans la configuration du tenant ; l'email de test doit se terminer en .invalid. Options --json, --purge (retire les commandes de recette). CLI
Lot DE natif Lit le fichier de reliquat de l'auditeur de registre locale (classe « localisable », locale de) et produit un TSV de changements : une ligne par modification (table, identifiant, champ, ancienne valeur, nouvelle valeur, règle appliquée). Règles : séries allemandes, classes BMW, types de carrosserie, invariants de modèle. N'écrit rien en base ; l'application est un fichier SQL statique avec son rollback. CLI one-shot (--out DIR, rejouable)
Lot EN natif Jumeau anglais du lot DE natif. Lit le reliquat locale en et produit un TSV de changements pour les noms de série, de classe et de carrosserie

Surveillance de l'obsolescence et tests divers

Cette famille regroupe les outils de surveillance, de test et de maintenance qui ne s'inscrivent pas dans une sous-famille thématique unique. Chaque outil est décrit par son rôle fonctionnel.

Outil Rôle Mode d'invocation
Brief de session Produit un résumé de session destiné à l'opérateur en début de journée. CLI
Tests unitaires du moteur de rêve Valide les comportements attendus du moteur de rêve de l'agent. CLI (test)
Validation du mode auto sélectif Supprimé. Jamais invoqué au cours des 30 derniers jours, absent de toute configuration active. Récupérable pendant 30 jours via la corbeille du système, puis purge définitive par l'Élagueur. —
Test du pont sandbox base de données Smoke test vérifiant que le pont vers la base de données bac à sable répond correctement. CLI (test)
Moteur de planches annotées Incrustation de numéros et de cadres sur un dessin nu (série anatomique), via un pipeline de traitement d'image. CLI
Façade base de données relationnelle legacy Fournit l'accès à une base de données relationnelle d'un ancien système. Les identifiants sont lus depuis le fichier de configuration d'environnement de la machine hôte, jamais écrits en dur dans le code. Bibliothèque
Extracteur de coffre de mots de passe legacy Ouvre un coffre de mots de passe hérité et en extrait les accès en distinguant strictement l'information non sensible (affichée) du secret (rangé). Aucune écriture de secret en clair. CLI
Apposition de signature PDF Appose une signature image PNG transparente sur un PDF. La signature est lue depuis un répertoire dédié hors dépôt, jamais versionné. Écrit un nouveau fichier de sortie, n'écrase jamais l'original. N'envoie rien. CLI / skill /sign-pdf
Isolation des tests git destructifs Isole les tests git potentiellement destructifs dans un espace de travail jetable, sans toucher au tronc principal. CLI / hook de pré-validation
Génération des vignettes du coffre média Génère les vignettes web de la pellicule stockée dans le coffre, enrichit les métadonnées (date de prise, empreinte perceptuelle) et rend les formats HEIC et MOV affichables dans le navigateur. CLI
Indexation de la pellicule iPhone dans le coffre Indexe la pellicule iPhone déjà stockée dans le coffre objet distant dans la base de données dédiée, sans recopier les octets. CLI
Extracteur souverain de pellicule iOS Extrait la pellicule depuis une sauvegarde iOS chiffrée vers le coffre objet distant. Tourne sur la machine satellite, pas sur le vaisseau-mère. CLI
Enregistreur de coûts des automates LLM Journalise le coût en dollars, le nombre de tokens et le modèle utilisé par chaque automate cron faisant appel à un LLM, hors chantiers actifs. Ne casse jamais un cron en cas de problème de journalisation (fail-soft). Bibliothèque
Sonde de largeur mobile du hub Mesure le DOM du hub à largeur de téléphone : la seule question posée est de savoir si le contenu visible tient dans la largeur sans défilement horizontal. Distinct de la sonde ISO qui juge les espaces clients depuis un sitemap. CLI (one-shot)
Classificateur des automates Python actifs Classifie les automates Python actifs selon plusieurs catégories (orphelin, obsolète, à porter, déjà porté…). Obsolète : lit un répertoire absent de l'arborescence actuelle. Aucun appelant connu, candidat à l'archivage. CLI ⚠️
Extracteur de pellicule Android Coffrage souverain de la pellicule d'un téléphone Android branché en USB sur la machine satellite vers le coffre objet distant. Triple vérification d'intégrité (téléphone, flux reçu, part S3), journal JSONL reprenable. Modes --inventory, --apply, --verify. Pendant Android de l'extracteur iOS. CLI (python3 -m <extracteur-android>) ; encapsulé dans un automate cron
Purge de pellicule Android Efface du téléphone Android les médias déjà coffrés et eux seuls, avec quatre verrous de sécurité (rapport de vérification vert et postérieur au dernier transfert, contrôle objet S3, empreinte relue sur le téléphone, jeton de confirmation explicite). Jamais en cron. Geste humain irréversible. CLI (geste humain)
Vigie des artifacts publiés Sonde quotidiennement toutes les pages d'artifact non privées pour vérifier qu'elles répondent en HTTP 200. Tente une resynchronisation automatique en cas de 404, puis alerte si persistant. Vérifie également la présence de l'en-tête X-Robots-Tag: noindex. Aucun LLM. Cron quotidien
Harnais de paper trading crypto Harnais de falsification de stratégies crypto en simulation (paper trading) : journalisation forward-only (refus de tout tick antérieur), zéro LLM, contrôle négatif face à des stratégies de référence. Ne trade jamais. À supprimer si aucune stratégie ne passe le gate de 90 jours. Cron (--tick toutes les 15 min)
Drain de corrections connues hors cycle Pour chaque erreur cron dont la signature correspond à un correctif connu et activé, rejoue le correctif, prouve son effet et marque l'erreur comme auto-corrigée. Anti-spam par cooldown. Zéro LLM. Cron toutes les 30 min
Purge et rétention des événements agents Purge par lots les événements agents selon leur type et leur ancienneté. Options --type, --retention-days, --vacuum, --dry-run. Cron quotidien
Générateur du méta-harnais portable Génère de façon déterministe, depuis un manifeste de référence, les surfaces natives du méta-harnais portable : fragments de hooks pour les différents environnements d'agent (Claude, Codex, Antigravity/Muse), instructions agents, skills portables. --check compare, --write écrit, --instructions-only régénère uniquement les instructions (environ 1 s au lieu de 70 s). CLI
Contrat de clé véhicule (golden file) Fige un jeu de cas de correspondance plaque → identifiants véhicule dans un fichier golden partagé entre les suites de tests Python et TypeScript, garantissant l'accord entre le module d'import, le module de recherche et l'utilitaire TypeScript. CLI (PYTHONPATH=. python3 <contrat-cle-vehicule>, --refresh régénère)
Point d'étape ISO-Figma Mesure l'état d'avancement de l'intégration entre le référentiel de design et la maquette Figma d'un espace client : chantiers ouverts, dernier score daté, bruit du juge à code identique, chaîne de mesure, corpus de maquettes, commentaires. Aucun LLM, aucune écriture. Skill /point-integration-maquette-iso / CLI
Enregistreur de l'historique des quotas LLM Relaie vers la base de données les relevés de fenêtres de quota par fournisseur LLM (en ne conservant que la valeur maximale par fenêtre). Élimine également les fichiers temporaires résiduels de la barre de statut. Cron toutes les 10 min
Vigie de seuil de quota LLM Alerte une seule fois par fenêtre de quota lorsque le seuil de 95 % est atteint, par email interne. L'état est conservé dans un fichier JSON local, sans écriture en base. Cron toutes les 15 min
Projection publique de l'activité des agents Pousse vers la base publique du vaisseau-mère une projection épurée de l'activité des agents (liste blanche d'agents et d'actions, jamais les résumés ni les détails). Dump avant écriture, transaction unique, refus de pousser une source vide. Cron toutes les 5 min / CLI (--dry-run)
Sentinelle du worker de tâches Détecte un worker de tâches mort (queue du log), des runs orphelines et une file gelée. --check (exit 0/1/2), --repair clôture les orphelines en échec, --json. Ne redémarre rien. Cron toutes les 10 min
Extraction audio Spotify Extraction audio depuis le client Spotify de la machine satellite vers la bibliothèque jukebox au format MP3. Orchestrateur côté vaisseau-mère, worker côté machine satellite. Flags --album, --artist, --dry-run, etc. CLI
Reconstruction de piste de sous-titres depuis l'audio Reconstruit une piste .srt depuis l'audio d'un film sur la machine satellite : extraction ffmpeg, séparation des voix, transcription faster-whisper, chaque étape reprise là où elle s'est arrêtée. Le dispositif de calcul effectif est toujours affiché. CLI / skill /sous-titres
Retraduction de piste de sous-titres Retraduit une piste .srt sans toucher aux minutages : extraction en TSV de travail, assemblage avec vérification de cardinalité et de complétude, diagnostic. Ne traduit pas lui-même (la traduction se fait en session interactive). CLI / skill /sous-titres / bibliothèque
Captures du hub sur données fictives Produit des captures du hub publiables, servies exclusivement depuis des fixtures (liste blanche stricte, toute autre route est annulée). Invariant anti-SSR et scan de fuite (emails, adresses IP, domaines, noms internes) avant toute écriture. CLI
Verdict de la sonde Daily Meet Isole la logique de décision de la sonde « Daily Meet » du brief de session : distingue l'absence d'une entrée en base avant 06:00 UTC (normal) de son absence après (anomalie scheduler). Testé unitairement. Bibliothèque (importée par le brief de session)
Extracteur de clientId Nuxt Extrait le clientId serveur figé dans un build Nuxt compilé. Utilisé par la vérification post-déploiement pour lire le clientId du build effectif, pas la valeur par défaut du framework. Bibliothèque (appelée par la vérification de l'environnement de démarrage)

Atelier 3D — configurateur bespoke

La chaîne de production 3D couvre l'intégralité du chemin : moodboard client → mesh 3D → plans cotés prêt-usine → livraison à l'espace client. Deux façades génèrent des meshes depuis des planches 2D (personnages et objets) ; un ensemble d'outils de production, de QA géométrique et de synchronisation assure ensuite la livraison.

Chaîne de production. La planche 2D est transformée en mesh 3D coloré par une chaîne PIL (recadrage des quatre vues) → inférence multi-vues haute définition → colorisation des zones géométriques en Blender headless → GLB Draco prêt pour le viewer web.

Gate de production personnage

Pour un projet de type personnage, une version issue du worker ne devient version courante que si elle est marquée au stade de production final (v3). Les étapes intermédiaires (référence, v1, v2) et les jalons de revue restent en attente d'approbation. La chaîne d'approbation complète est :

  1. Référence IA
  2. V1 — design validé
  3. V2 — rig testé + QA pass
  4. V3 finale — rig testé + éléments séparés + QA pass

Ce contrat est porté par l'outil de publication manuelle, pas par le worker lui-même.

Publication immuable content-addressed

Chaque GLB publié est posé dans un espace de stockage immuable sous une clé dérivée de son empreinte SHA-256. La création est exclusive et atomique : si un blob existant ne correspond pas à son empreinte, une erreur bruyante est levée (BlobCorruptedError). Le fichier est rendu en lecture seule après dépôt. L'empreinte est inscrite dans la table de versions.

Retouche par annotation pinceau

Un job de retouche géométrique permet de corriger un mesh existant à partir d'un tracé pinceau dessiné sur une capture de vue. L'image annotée est diagnostiquée par un modèle multimodal (mode, facteur, itérations, explication courte), puis un script Blender headless dédié applique la correction et une nouvelle version est enregistrée.

Chaîne « conduite 3D » — planches et portes de contrôle

Entre le prompt texte et la cage quad finale, la production dispose d'une chaîne complète de planches intermédiaires et de gates de contrôle :

  • Génération de planche depuis un prompt (image de référence jointe pour préserver l'identité à chaque tirage)
  • Recette versionnée d'une planche (prompt + références) pour rejouer à froid
  • Planche quatre vues assemblée depuis le cockpit
  • Planche anatomique rendue depuis le volume (non générée par IA)
  • Planche cotée avec grille et axes métriques dérivés du volume
  • Planche technique projetée directement depuis le volume
  • Porte de cohérence turnaround (vérification que les trois vues ont les mêmes proportions et niveau)
  • Contrôle mesuré pré-validation d'une planche technique
  • Triage de lot aux deux portes de contrôle en un seul passage
  • Pose des anneaux/edge-loops autour des organes dérivés de la loi musculaire
  • Tour d'objet N angles en une seule image
  • Export de la cage quad en OBJ
  • Image de contrôle producteur (cage + surface lissée + gabarit superposés)
  • Banc de gestes contre l'API réelle (écritures transactionnelles, contraintes SQL)
  • Rejeu de journal d'une cage depuis vide
  • Collecte du dataset de retopologie depuis le journal
  • Pose de gestes JSON via l'unique porte de l'API cage
  • Relais WebSocket temps réel entre l'add-on Blender et le cockpit
Outil Rôle Mode d'invocation
Façade personnage 2D → mesh 3D Chaîne PIL → inférence multi-vues HD → colorisation zones Blender headless → GLB Draco. CLI / bibliothèque
Façade objet 2D → mesh 3D Même chaîne que la façade personnage, sans étape de colorisation ni de rig. CLI
Génération paramétrique de mobilier Génère du mobilier par primitives paramétriques (track « prêt-usine »), export STEP + glTF avec pièces nommées. CLI
Meuble depuis description texte libre Description prospect en texte libre → meuble paramétrique multi-pièces via LLM souverain + le générateur de mobilier. CLI
Plan coté « brief prêt-usine » Génère un PDF de plan coté (élévations avec cotes exactes) depuis un mesh à l'échelle. CLI
QA géométrique de mesh Vérifie qu'un mesh est watertight, manifold et symétrique. Porte aussi un diagnostic causal de topologie (pôles de valence, anisotropie des quads, boucles plates/zigzag, bandes saturées) — informatif uniquement, le verdict PASS/FAIL reste sur les critères géométriques. Accepte .glb, .obj, .blend ; flag --retopo pour inclure le diagnostic topologique dans le rapport lisible. CLI
Worker de la file de jobs atelier3D Drain la file de jobs en attente : génération, colorisation, décomposition, retopologie, QA, retouche par annotation. Publie chaque GLB produit dans le stockage immuable. Pour un projet personnage, une version ne devient courante que si elle est au stade de production final. Cron toutes les minutes (sous verrou)
Pont atelier3D ↔ devis client Livre l'objet fini au serveur de l'espace client et alimente le suivi client. Cron toutes les 5 min (sous verrou)
Publication manuelle d'une version GLB Enregistre une version, régénère la vignette, recharge le viewer. Porte le contrat de gate (refus hors stade v3 approuvé). Option --source-sheet pour tracer la planche d'origine — à omettre si la filiation n'est pas connue avec certitude. CLI
Injection du brief documentaire Injecte la recherche documentaire du brief (saisie au hub, jusque-là stockée mais jamais lue) dans le prompt de génération de planche. CLI / bibliothèque
Recette d'une planche Garde le prompt et les références avec la planche pour permettre un rejeu à froid. CLI / bibliothèque
Génération de planche depuis le prompt Automatise la génération d'image (image de référence jointe au prompt). Dépôt automatique dans le projet après chaque tirage sans validation (la porte 1 reste l'œil humain). Pour le rôle dessin technique, le verdict de porte 2 est écrit dans le titre de l'asset et les planches refusées désignées sont retirées du projet. Si l'URL contient une page de vérification anti-robot, le lot s'arrête immédiatement — le CAPTCHA se résout manuellement. CLI / bibliothèque
Planche quatre vues du cockpit Assemble la planche des quatre vues (face/profil/dessus/libre) en un seul geste. Option --argile pour une coupe de volume. CLI
Planche anatomique depuis le volume Rend la planche anatomique directement depuis le volume 3D, sans génération d'image IA. CLI
Planche cotée Ajoute une grille et des axes métriques dérivés du volume à une planche nue. CLI
Planche technique projetée Projette la planche technique directement depuis le volume, sans générateur d'image. CLI
Porte de cohérence turnaround Vérifie qu'un turnaround est utilisable par le moteur d'inférence multi-vues (mêmes proportions et niveau entre les trois vues). Refuse une silhouette coupée plutôt que de la mesurer à 0 %. Le verdict se prend sur les vues de face et de dos (la vue de profil s'exclut). Le cou est défini comme le pincement le plus profond, encadré par le plus large au-dessus et en dessous. CLI
Contrôle mesuré d'une planche technique Mesure une planche technique avant validation comme référence de modélisation (largeurs de panneaux, alignement des hauteurs). CLI
Triage de lot de planches Trie un lot de planches aux deux portes de contrôle en un seul passage, sans biais de sélection. CLI
Pose des anneaux edge-loops Pose les anneaux autour des organes que l'animation réclame, dérivés des zones de la loi musculaire. Jugés sur les faces, pas sur le rang des sommets. CLI
Tour d'objet N angles Assemble la planche du tour d'objet en N angles sur une seule image. CLI
Export de la cage quad Exporte la cage quad en OBJ via bmesh. Le flux cockpit → base → bmesh → Blender → GLB est une borne dure : le format glTF ne connaît que les triangles, pas les faces à quatre côtés. CLI
Image de contrôle producteur Produit une image de contrôle non opposable (cage + surface lissée + gabarit superposés, face et profil) que le producteur se donne entre deux gestes. Le juge opposable reste l'agent Lovelace. CLI
Banc de gestes contre l'API réelle Exerce chaque opération de la cage contre l'API réelle (écritures transactionnelles, contraintes SQL). Prouve que chaque geste fait ce qu'il dit et refuse ce qu'il doit refuser. CLI (test)
Rejeu de journal de cage Rejoue le journal d'une cage depuis l'état vide et prouve que l'on retombe sur le même résultat. CLI (test)
Collecte du dataset de retopologie Collecte le dataset de retopologie depuis le journal de l'atelier cage (lecture seule). Sous-commandes list (trajectoires avec label de qualité) et export (trajectoire complète en JSONL). CLI
Pose de gestes JSON sur une cage Envoie une suite de gestes JSON déjà écrits sur une cage, un par un, via l'unique porte de l'API. Ne connaît rien à la géométrie, ne calcule ni ne répare rien. CLI
Relais WebSocket temps réel cockpit ↔ Blender Relais WebSocket privé, derrière tunnel uniquement, entre l'add-on Blender et le cockpit. Authentifié par jeton dédié. Ne sauvegarde ni n'exporte ni n'interprète de code Blender. CLI (démon WebSocket)
QA de ressemblance GLB ↔ planche Vérifie la ressemblance d'un GLB à sa planche technique : rendu orthographique produit par le système lui-même, recalage à échelle uniforme, verdict retenu sur la pire zone (jamais une moyenne). CLI
Bac à sable de cage Crée ou rafraîchit un projet jetable pour mesurer un geste simulé sans écrire sur le projet source. Correspondance des sommets par index. CLI
Inspection et modélisation de cage à spline Inspecte et modifie un mesh GLB via Blender headless. Sous-commandes : inspect, deform, primitive, extrude, cut, relax. Outil de l'agent Phidias. Skill /atelier-3d-pilote / CLI
Contexte complet d'un projet Atelier 3D Expose à l'agent le contexte complet d'un projet : projet, version courante, versions, uploads, jobs. Skill /atelier-3d-pilote / CLI
Façade des cotes Atelier 3D Façade unique des cotes : calcul des cotes attendues depuis les paramètres, mesure sur le GLB, vérification, assertion de conformité (barrière fail-closed avant toute livraison). Exit 0 = conforme, 1 = écart, 2 = mesure impossible. Bibliothèque / CLI
Repérage facial 2D→3D Repère les points faciaux sur un rendu orthographique de face, puis les projette en 3D par ray-cast dans le maillage recalé pour ancrer les anneaux d'orifices. CLI / bibliothèque
Matérialisation des uploads Matérialise les uploads (annotations, planches) vers le stockage binaire de la machine hôte et marque les entrées comme consommées. CLI
Publication immuable content-addressed Pose un GLB dans le stockage immuable sous sa clé SHA-256, avec création exclusive atomique et vérification de déduplication. Racine de stockage configurable. Bibliothèque
Détection de zones sémantiques (segmentation) Seul composant de la segmentation sémantique qui charge le modèle de repérage facial : détecte les repères sur le rendu de face et écrit la carte de zones 2D (Voronoï). Tourne dans un environnement virtuel dédié. CLI (lancé par l'orchestrateur dans son venv dédié)
Orchestrateur de segmentation sémantique multi-vues Coordonne la segmentation sémantique multi-vues : export du maillage recalé, rendus Blender, détection, peinture des vertex colors par zones anatomiques, rendus de contrôle, puis publication. CLI
Invariant statique des cotes Vérifie statiquement que toute cote saisie par le prospect est lue par la façade des cotes, et qu'aucun module ne ré-épelle une cote en dur. Fail-closed sur violation. Bloque le commit en cas de violation. Hook pre-commit / CLI
Contrat du pont temps réel cockpit ↔ Blender Définit le protocole fermé du relais WebSocket : validation du message d'ouverture (rôle, identifiant de projet, jeton) et des commandes autorisées (liste blanche consultative). Aucun code Python, opérateur Blender ni chemin transporté. Bibliothèque

Protection d'un majeur

Ces outils gèrent un dossier de protection d'un majeur (données de santé et de patrimoine, relevant du RGPD art. 9). Tous les exports sont produits hors dépôt, avec des permissions restrictives. Aucune pièce ne part sans validation humaine explicite.

Outil Rôle Mode d'invocation
Export du dossier de protection Génère un document markdown hors dépôt : bordereau numéroté des pièces (uniquement les pièces vérifiées propres, avec empreinte SHA-256 et taille re-vérifiées), chronologie des faits, pré-remplissage du formulaire Cerfa. Refuse de se déclarer complet tant que la liste des pièces obligatoires n'est pas satisfaite. CLI
Pré-remplissage du Cerfa Pré-remplit le formulaire Cerfa en écrivant par-dessus le PDF (aucun champ AcroForm du PDF d'origine). Chaque valeur est ancrée sur le libellé imprimé lu dans le PDF ; une ancre ambiguë ou disparue entraîne un refus. Sortie plate imprimable ou éditable. N'envoie ni ne dépose rien. CLI
Récapitulatif fratrie Produit un récapitulatif à template déterministe (zéro LLM, descriptions reprises verbatim). Appelle le client email en mode brouillon et s'arrête là — aucun chemin d'envoi automatique. L'audience est affichée avant envoi. L'accès est consigné dans le journal d'accès. Skill /protection-majeur / CLI
Coffre de chiffrement du schéma dédié Chiffrement AES-256-GCM des colonnes sensibles du schéma dédié. La clé maître est lue dans le fichier de configuration de la machine hôte ; le composant refuse de démarrer si elle est absente ou identique à une clé applicative. Le déchiffrement lève une exception plutôt que de rendre une chaîne vide. Option --selftest. Bibliothèque / CLI --selftest
Écriture de faits et démarches hors email Écrit les faits (description chiffrée) et les démarches (URL source HTTPS obligatoire + date de vérification) du dossier. Payload lu depuis un fichier JSON à supprimer après usage. Bibliothèque / CLI

Gouvernance des automates

Quatre outils dérivent l'état d'un automate depuis le code et la table de planification, au lieu de le deviner. Ils traitent les docstrings, les dépendances entre automates, les doublons de planification et les zombies.

Outil Rôle Mode d'invocation
Vigie des zombies et orphelins Compare l'état actif des automates en base à leur présence réelle dans la table de planification. Signale les zombies (actifs en base, absents du planning) et les orphelins (présents dans le planning, inactifs ou inconnus en base). Alerte uniquement, jamais d'activation ni de désactivation. Zéro LLM. Cron toutes les 30 min
Graphe de dépendances des automates Dérive l'ordre d'exécution depuis le code : si A écrit une table que B lit, B dépend de A (la table est la preuve). Les dépendances hors base de données sont déclarées manuellement et jamais écrasées. Dry-run par défaut, --apply écrit les dépendances. CLI
Synchronisation des docstrings comme documentation Lit le docstring de chaque automate planifié et pose le nom et la description en base, sans écraser une saisie manuelle. --force pour rafraîchir, --reprendre-tronquees pour les entrées tronquées. Dry-run par défaut. CLI
Plan d'étalement des crons Propose un étalement des crons vers les heures creuses en respectant le graphe de dépendances. Ne l'applique jamais. Signale les violations (automate planifié avant ce qu'il lit, deadline dépassée). Refuse de déplacer les automates d'alerte, de livraison client et d'écriture multi-tenant. CLI

Jukebox et karaoké

Pipeline de paroles et de pochettes pour le jukebox de la machine satellite : alignement mot-à-mot, balayage périodique de la bibliothèque, pochettes de repli et portraits d'artistes.

Outil Rôle Mode d'invocation
Alignement mot-à-mot des paroles Cale les paroles LRC connues mot-à-mot par forced alignment (WhisperX). L'audio est transféré vers la machine satellite pour traitement, les mots sans timestamp fiable sont omis, résultat mis en cache par piste. Option --transcribe pour une transcription directe. CPU uniquement par choix assumé. Skill /sous-titres / CLI / bibliothèque
Balayage de la bibliothèque pour l'alignement Balaie la bibliothèque musicale, cherche les paroles synchronisées en ligne et lance l'alignement des pistes non traitées. Transcription locale (faster-whisper) si les paroles ne sont pas trouvées en ligne. Borné par un maximum de pistes par run, état par piste conservé dans un répertoire dédié. Cron toutes les 30 min (sous verrou)
Métadonnées jukebox (pochettes et contexte artiste) Récupère la pochette de repli (Cover Art Archive) et le contexte artiste (faits, pays, période, genres, liens — pas de biographie) depuis MusicBrainz, sans clé API, à raison d'une requête par seconde. Résultats mis en cache dans des répertoires d'état consommés par les routes du hub. CLI
Portrait Harcourt par IA Génère un portrait noir et blanc style Harcourt (fond noir, éclairage Rembrandt) par un modèle multimodal, à partir d'une photo de référence de l'artiste. La clé du fournisseur IA est lue depuis l'environnement. Sortie PNG/JPG à pousser manuellement vers la machine satellite. CLI

Vigies SRE — corrélation d'incidents

Six composants forment la couche de surveillance SRE basculée en 2026. Les vigies écrivent par email à l'adresse de réception dédiée ; le poll ingère, le corrélateur constitue des incidents stables (clé invariante par type et entité), le digest produit la vue quotidienne, l'escalade passe la main à l'agent Atlas. Aucun LLM, aucune action propre — le système observe et relaie.

Genèse. Ce sous-système est né d'un constat : 232 emails d'alerte en 7 jours pour un seul problème non résolu. La corrélation en incidents stables a réduit ce bruit à 3 lignes dans le digest quotidien.

Outil Rôle Mode d'invocation
Poll de la boîte de réception SRE Poll IMAP de la boîte de réception dédiée. Vérifie la confiance du message (anti-boucle, liste blanche, DKIM aligné), dérive les constats, ingère sous verrou par clé stable, déclenche les incidents neufs ou rouverts. Pose le flag \Seen uniquement après succès en base. Ne conserve aucun corps d'email sauf message non reconnu. Cron toutes les 5 min (sous verrou)
Corrélateur d'incidents Corrèle les alertes en incidents stables (clé sans horodatage). Fonctions : dérivation des constats, ingestion, déclenchement, fermeture, résolution automatique (un incident dont la cause a disparu est fermé). Sous-commandes --list, --sweep, --raise, --close. Cron horaire (--sweep) / CLI / bibliothèque
Modèle de confiance du canal SRE Modèle FAIL-CLOSED : un message non authentifié est ingéré et journalisé, jamais déclenchant. Le DKIM est lu sur le premier en-tête d'authentification uniquement, avec vérification de l'identifiant du serveur et alignement du domaine signataire sur le champ From. Bibliothèque / CLI (--diagnose, --show, --mailbox, --json)
Digest quotidien SRE Agrège en SQL les incidents et événements (compression de centaines d'alertes en quelques lignes), envoie le digest même à vide (l'absence redevient un signal), aucun LLM, ne ferme rien. Cron quotidien à 07h30 / CLI (--dry-run --json)
Escalade vers Atlas Pour chaque incident déclenché en attente, envoie un email-dossier à l'agent Atlas (clés, dates, en-têtes, commandes pour agir — jamais le corps des messages). Déduplication par incident, plafond par cycle, verrou, kill-switch. Aucun LLM ni jugement. Cron toutes les 10 min / CLI (--dry-run --json --max)
Watchdog du poll SRE Surveille l'horodatage de dernière activité du poll SRE. Au-delà de 1 800 secondes sans activité, ouvre un incident stable de type infrastructure (avec le PID du détenteur si le verrou est tenu), au lieu d'écrire un simple log. Cron toutes les 15 min

Inventaire des hooks : deux fichiers de configuration

Les hooks vivent dans deux fichiers distincts qui portent chacun un jeu différent — ne pas les confondre. Le premier fichier (configuration locale) couvre les façades et utilitaires de session ; le second (configuration principale) héberge un sous-système d'orchestration complet.

Fichier de configuration locale — façades et utilitaires de session

ÉvénementHooks câblés
UserPromptSubmit Vide — aucun hook câblé dans ce fichier
SessionStart Réinitialisation du suivi de contexte de session · résumé de session · injection des cicatrices
PreToolUse:Bash Garde écriture PROD · garde façade e-mail
PreToolUse:Bash|Edit|Write Injection cicatrices Bash/édition
PreToolUse:Agent Injection cicatrices agent
PostToolUse Mise à jour du suivi de contexte

Précisions importantes :

  • La garde écriture PROD protège l'unique client payant en environnement de production.
  • Le hook de synchronisation de boîte mail n'est pas câblé ici : il tourne en tâche planifiée (toutes les minutes pour la boîte entrante, deux fois par jour pour les messages envoyés), encadré par un wrapper cron.
  • Ce fichier porte 3 entrées SessionStart — distinctes des 6 que porte le fichier de configuration principale (soit 9 hooks SessionStart au total au démarrage d'une session).
  • Une version précédente de cette documentation affirmait que le hook d'injection de cicatrices Bash était câblé séparément sur PreToolUse:Bash ET sur un matcher distinct PreToolUse:Edit|Write — c'est inexact. Il existe un seul matcher combiné PreToolUse:Bash|Edit|Write pour ce hook. PreToolUse:Bash seul ne compte que 2 hooks réels (garde PROD, garde façade e-mail).

Fichier de configuration principale — sous-système d'orchestration shell

Un sous-système d'orchestration complet vit dans un dossier dédié de scripts shell. Il est totalement distinct des façades et utilitaires de session documentés ci-dessus.

SessionStart (6 hooks)

  • Journalisation du contexte de session
  • Reprise du dernier handoff produit par le fractionnement de session — ferme la boucle fractionnement→reprise
  • Lecture de la boîte mail entrante au démarrage de session
  • Injection du périmètre client résolu
  • Hook de page de suivi (câblé aussi sur PostToolUse:Artifact et PostToolUse:Bash, rôle à confirmer)
  • Nudge « worktree d'abord » au démarrage de session

UserPromptSubmit (7 hooks)

  • Synchronisation du schéma de session
  • Détection et injection automatique du ton de rédaction par client (analyse e-mails, commits, cron, logs, code) — timeout 25 s
  • Lecture de la boîte mail entrante à chaque prompt
  • Injection du périmètre client résolu (même composant que SessionStart)
  • Pré-vol mémoire RAG : injecte un rappel court de la mémoire partagée entre les tentacules avant chaque réponse d'agent — les historiques natifs de session restent privés à chacune
  • Nudge « worktree d'abord » quand le prompt désigne un périmètre client depuis le tronc partagé
  • Routage SEO/URL (rôle à confirmer)

PreToolUse:Read (2 hooks)

  • Garde d'ouverture de pièces jointes (vérification antivirus obligatoire)
  • Moteur de réflexes décentralisés — timeout 10 s

PreToolUse:Bash — groupe principal (80 hooks au 2026-10-13)

Ce matcher concentre le plus grand nombre de gardes. Les hooks bloquants (exit 2) sont signalés ; les autres sont des nudges non bloquants ou des gardes à fail-open.

  • Garde d'ouverture de pièces jointes — vérification antivirus clean obligatoire (partagé avec Read)
  • Blocage de ./ship — interdit tout appel à la commande de livraison client initié par l'IA ; absorbe également la doctrine « une cible interne se déploie via ./deploy, jamais ./ship »
  • Blocage d'URL produit à plat dans les e-mails
  • Blocage du mass-stage git (git add -A/--all/-u/., git commit -a/--all/-am) et d'un git commit nu sur le checkout principal — laisse passer bin/git-commit-safe.sh et tout commit dans un worktree isolé (index propre par construction) ; invariant vérifié par une suite de tests dédiée
  • Blocage des artefacts générés dans git — refuse un git add/git commit portant un artefact généré présent dans .gitignore
  • Garde destructive worktree
  • Blocage de rebase sur branche partagée — refuse git rebase sur preprod/main, impose pull --no-rebase
  • Vérification des mutations DB
  • Blocage de colle de secret en ligne
  • Garde d'installation cron — dispatcher fusionnant deux sous-gardes : (1) refuse une entrée crontab utilisant un chemin relatif ou un sourcing .env relatif ; (2) interdit d'installer un script LLM en cron (drain forfait silencieux)
  • Blocage d'impression du contenu d'un fichier secret sur stdout
  • Garde pré-déploiement autocommit
  • Nudge squelette de chantier
  • Scan de transcript pré-commit — timeout 10 s
  • Audit de couverture conversion pré-commit
  • Garde d'archivage de chantier
  • Rappel mémoire pré-chantier — timeout 30 s
  • Nudge de liaison de documentation
  • Garde SEO pré-déploiement des titres
  • Garde de profondeur taxonomique au déploiement — timeout 30 s
  • Blocage de suppression d'URL sans redirection 301 — timeout 15 s
  • Blocage de docker cp sur un dossier (corrompt les fichiers ; laisse passer fichier unique ou tar)
  • Nudge « écriture SEO via le moteur dédié »
  • Nudge QA avant envoi client (le verrou dur vit dans la façade e-mail)
  • Blocage de proposition d'appel téléphonique dans un e-mail client — canal client = e-mail/WhatsApp uniquement
  • Blocage d'ajustement de fidélité sans autorisation explicite
  • Blocage d'envoi WhatsApp sans validation (fail-open si payload illisible)
  • Garde d'invariants de la boucle nocturne autonome — fenêtre 19 h–4 h / chantier armé / budget
  • Blocage d'affirmation d'état non vérifiée contre la source vivante
  • Blocage de correctif sans preuve de cause racine — refuse un message « fixé » sans bloc Root-cause:
  • Bornage des résultats d'outils côté modèle (réduit ce que le modèle voit sans toucher au log sur disque)
  • Blocage d'un test SSH négatif sans isolation de la configuration — un test négatif d'authentification SSH ciblant une clé précise est faussé si la configuration SSH globale est encore lue ; soupape consciente via suffixe de commentaire
  • Blocage de docker exec PHP sans utilisateur dédié — tout docker exec lançant PHP/console/composer sans l'utilisateur approprié peut recréer le cache en root, rendant le site inaccessible ; détecte aussi la forme distante via SSH
  • Blocage de rafale vers un hôte tiers sans pause — refuse une boucle non temporisée sur un hôte externe au-delà d'un seuil de termes/itérations ; soupape consciente via commentaire
  • Blocage d'un lien de coffre affiché en clair dans le transcript — la sortie portant le lien doit être redirigée
  • Blocage de tiret cadratin ou semi-cadratin dans les e-mails clients
  • Nudge de reprise de la demande client en réponse
  • Nudge de créneau de réunion (10 h ou 14 h)
  • Blocage d'envoi via tout LLM hors du moteur IA désigné (Gemini et équivalents passent par l'agent dédié, jamais directement par clé API)
  • Blocage d'écriture prod client sans communication préalable — tout transfert de fichier vers la production d'un client doit être annoncé explicitement ; soupape # prod-client-ok
  • Blocage d'un git stash apply/pop/drop sans référence explicite — la pile de stash est partagée entre le tronc et tous les worktrees ; laisse passer une référence littérale (SHA, stash@{n})
  • Blocage d'une boucle d'attente pgrep -f auto-référentielle — la commande lancée via le shell contient le motif qu'elle cherche, pgrep se trouve lui-même ; laisse passer le motif en classe de caractères
  • Blocage de docker compose down/rm/kill/stop sans nom de projet explicite quand le fichier désigné n'est pas le compose racine — évite de retirer les conteneurs de la mauvaise pile
  • Vérification de l'accord humain avant action : un agent ne signe pas à la place du fondateur
  • Contact principal client en copie sur tout e-mail vers un tiers concernant ce client
  • Blocage d'un curl avec fichier de credentials dont l'URL de redirection réexpose les identifiants en clair
  • Garde de l'utilisation du moteur IA central (pas d'appel LLM direct via clé API)
  • … ainsi que 46 hooks supplémentaires réels (rôles à auditer un par un dans une prochaine passe)

PreToolUse:Bash — 2e groupe de matchers (4 hooks)

  • Garde e-mail client en copie
  • Blocage d'e-mail client programmé
  • Garde de publication scellée (communautés/forums)
  • Garde de forme 3D — bloque la publication d'une page souveraine affirmant la nature d'un volume 3D sans trace de rendu de ce volume dans le transcript de session ; fail-open si le transcript est indisponible

PreToolUse:Bash — 3e groupe de matchers (1 hook)

  • Verrou de périmètre e-mail par tentacule — les contacts explicitement cités dans l'objectif d'une tentacule deviennent les seuls qu'elle peut consulter ou joindre ; refuse tout accès e-mail sans identité de tentacule déclarée

PreToolUse:Edit|Write (31 hooks)

  • Moteur de réflexes décentralisés — timeout 10 s
  • Contrôle de qualité code (sans timeout déclaré)
  • Docstring obligatoire — refuse un def/module Python sans docstring, phasé par variable d'environnement dédiée
  • Sortie CLI bornée pour les nouveaux automates — se déclenche uniquement à la création d'un nouvel automate CLI contenant un ArgumentParser ; réutilise un score de risque de sortie et bloque au-delà du seuil
  • Garde de scoping client (BLOQUANT sur les fichiers TypeScript d'un périmètre donné touchant certaines tables de foyer)
  • Garde du coffre média (BLOQUANT : refuse l'introduction d'une suppression d'objet ou d'une URL signée sans expiration dans les fichiers concernés)
  • Blocage de profil navigateur codé en dur hors du registre
  • Blocage du webservice PrestaShop depuis le core Nuxt
  • Blocage d'édition hors périmètre du chantier armé
  • Blocage de réintroduction du doublement d'antislash dans un helper d'écriture d'entité
  • Blocage de git add -A/git add . à l'intérieur d'un script
  • Blocage de psql -tA sans séparateur de colonnes géré côté SQL
  • Blocage de SQL passé en argument argv à psql — le SQL passe par STDIN, jamais par argv (-c "<sql>") ; migration soldée, le hook ferme la porte à la réintroduction
  • Blocage d'appel LLM direct par clé API hors du mécanisme central
  • Garde de conservation des caps (cron/skills/hooks) à toute création de fichier
  • Blocage d'écriture directe des skills générés (les skills Codex et Antigravity sont générés depuis la source canonique ; l'écriture directe est refusée)
  • … ainsi que 15 hooks supplémentaires réels (rôles à auditer un par un dans une prochaine passe)

PreToolUse:Edit|Write|MultiEdit|NotebookEdit (14 hooks)

Ce matcher est distinct du précédent : il couvre en plus MultiEdit et NotebookEdit. Les deux chaînes s'exécutent en parallèle sur un simple Edit ou Write.

  • Blocage de travail sur le tronc partagé
  • Blocage des variables d'environnement dans les composables client
  • Blocage d'import de handler serveur depuis un fichier app-level
  • Blocage d'accès aux internals de module depuis un fichier app-level
  • Garde de volume LLM sur le niveau de service économique
  • Garde de conduite canonique des skills
  • Garde de périmètre client (partagé avec PreToolUse:Bash)
  • Garde du manifeste fondateur (partagé avec PreToolUse:Bash)
  • Garde d'isolation de scope famille (partagé avec PreToolUse:Bash)
  • Garde de signature d'éditeur immuable (partagé avec PreToolUse:Bash)
  • Nudge comptabilité via l'agent désigné
  • Nudge de dispatch via l'orchestrateur (WARN-only, exit 0 toujours) — rappelle qu'un agent d'exécution ne commande pas un autre agent d'exécution en direct, doit remonter à l'orchestrateur du chantier ; soupape consciente via commentaire
  • Garde de pivot de langue sur les entités (réécriture d'entité)
  • Garde des assets auto-hébergés — anti-CDN/Google Fonts
  • Nudge de prospection/acquisition (le suivi de prospection appartient au bureau Acquisition)

PreToolUse:Bash|MultiEdit (1 hook)

  • Garde de forme de MEMORY.md à l'écriture — bloque un titre de section hors manifeste, un budget tier sous son plancher, une zone d'atterrissage pleine ou un marqueur supprimé ; règle de monotonie (bloque seulement si la métrique viole son seuil ET empire) ; fail-open systématique si le manifeste est illisible

PreToolUse:Bash|Write|Edit|MultiEdit|NotebookEdit (1 hook)

  • Garde d'arborescence du vaisseau-mère (rôle à confirmer)

PreToolUse:Bash|Write|Edit|MultiEdit (1 hook)

  • Garde de littéral d'index sur les bordures (rôle à confirmer)

PreToolUse:Write|Edit|MultiEdit (1 hook)

  • Détection de divergence d'environnement (rôle à confirmer)
  • Blocage de traduction littérale de contenu marchand — refuse un texte qui porte à la fois une consigne de traduction et une cible de contenu marchand (règle : on adapte au marché, on ne traduit pas) ; exception argumentée via commentaire

PreToolUse:Agent (5 hooks)

  • Réacteur d'agent
  • Nudge de budget explicite sur un brief d'agent QA sans plafond
  • Injection des cicatrices dans les sous-agents au spawn — timeout 15 s
  • Injection de l'identité client dans les sous-agents — timeout 10 s
  • Moteur de réflexes décentralisés — timeout 10 s

PreToolUse:WebFetch|WebSearch (2 hooks)

  • Moteur de réflexes décentralisés — timeout 10 s
  • Garde de recherche personnelle (rôle à confirmer)

PreToolUse:Skill (2 hooks)

  • Pré-invocation de skill — timeout 5 s
  • Trace d'usage de skill (rôle à confirmer)

PreToolUse:AskUserQuestion (2 hooks)

  • Blocage d'une question visant à faire valider/envoyer/montrer un e-mail dans le chat — la copie de validation est envoyée automatiquement par la façade e-mail, c'est elle qui sert de revue ; fail-open si payload illisible
  • Garde de pool de tentacules — un AskUserQuestion bloquant n'a pas de sens dans une tentacule sans terminal interactif (rôle à confirmer)

PreToolUse:mcp__.* (1 hook)

  • Garde d'isolation client sur les outils MCP (rôle à confirmer)

PreToolUse:* — matcher universel (1 hook)

  • Dispatcher portable des gardes P0 — se déclenche sur chaque appel d'outil, tous types confondus. Traduit l'événement natif en contrat canonique, délègue aux gardes déjà documentés (secrets, communication client, livraison, isolation commit/worktree, frontière DB client, garde MCP) et réencode la décision pour le harnais appelant — vecteur commun portable sans dupliquer les règles. Codex et Antigravity reçoivent réellement les gardes PreToolUse dérivées de ce fichier, ainsi que les hooks PostToolUse, Stop, UserPromptSubmit et SessionStart (via un relais de cycle de vie dédié). Le portage vers GLM n'est pas implémenté dans ce dispatcher. Note : ce matcher s'exécute EN PLUS de tous les matchers nommés — le total réel de hooks actifs sur un appel Bash est donc 80+1, pas 80.

PostToolUse:Bash — groupe principal (6 hooks)

  • Journal de réaction post-outil
  • Mise à jour de la page de suivi de session (partagé avec SessionStart et PostToolUse:Artifact)
  • Déclenchement de déploiement préprod post-commit — timeout 10 s
  • Vérification de livrable post-déploiement pour un client (rôle à confirmer)
  • Garde de rechargement de la configuration d'environnement client (rôle à confirmer)
  • Garde d'écriture sur le tronc partagé post-Bash (partagé avec PreToolUse:Bash)

PostToolUse:Bash — 2e groupe de matchers (5 hooks)

  • Vérification après TTL de cache
  • Vérification de nettoyage du front avant déploiement
  • Relecture QA iso avant verdict
  • Vérification d'enregistrement SIP avant déploiement
  • Sonde live en navigateur

PostToolUse:Agent (3 hooks)

  • Réacteur d'agent
  • Journal de réaction post-outil
  • Télémétrie post-agent — timeout 5 s

PostToolUse:Edit|Write|MultiEdit|NotebookEdit (12 hooks)

  • Suivi des éditions de session — timeout 3 s
  • Nudge LIMIT PrestaShop (getRow ajoute déjà LIMIT 1 automatiquement)
  • Nudge « contenu avant proportions »
  • Pose de signature de déduplication sur les cicatrices détectées automatiquement à l'écriture
  • Pose de signature de déduplication sur les cicatrices non automatiques
  • Vérification de vivacité du cache de schéma — timeout 15 s (se déclenche uniquement sur l'édition du script de synchronisation de schéma ; rejoue la suite de tests dédiée)
  • Scellement de validation Malt
  • Garde de publication scellée (communautés/forums)
  • Nudge QA visuel front-end
  • Nudge d'appel réel à un adaptateur externe
  • Garde de texte non fiable traité comme instruction — timeout 30 s
  • Garde d'appel DB non gardé dans le middleware
  • Publication sur les réseaux sociaux : rejoue la suite de tests dédiée après toute modification d'un module social ; rouge → exit 2

PostToolUse:Write|Bash (3 hooks)

  • Vérification qu'une doctrine inscrite est bien assortie d'un hook
  • Vérification qu'une page hub est bien liée
  • Sur un INSERT/UPDATE touchant la table des agents, régénération immédiate du fichier de définition d'agent correspondant (générateur idempotent DB→md) ; exit 0 systématique ; fail loud uniquement en cas d'échec du régénérateur

PostToolUse:Write|Edit (3 hooks)

  • Vérification que les images Nuxt déclarent les tailles d'écran — timeout 10 s
  • Vérification que toute capture pleine page déclare une hauteur attendue
  • Blocage d'affirmation d'absence de test non vérifiée contre la source vivante

PostToolUse:Bash|Read|Write|Edit|MultiEdit|NotebookEdit|Glob|Grep|Skill|Agent|Task (2 hooks)

  • Pont CLI→cockpit — miroite l'activité de la session interactive vers le cadran de chantier via les événements d'agent ; no-op si aucun binding actif — timeout 10 s
  • Mesure de contexte en cours de tour (throttlée 60 s), couvrant le cas d'un tour continu sans événement de fin (cicatrice : session montée de 49 k à 340 k tokens en 1 h 26 sans déclenchement) — timeout 8 s

Stop — groupe principal (16 hooks)

  • Détection des erreurs du tour + proposition d'immunité adaptative — timeout 15 s
  • Fractionnement de session à seuil de contexte — timeout 10 s
  • Synchronisation du handoff worktree → partagé — timeout 5 s
  • Vérification que le handoff existe à l'endroit où la reprise le cherche — timeout 5 s
  • Pont CLI→cockpit fin de session — timeout 9 s
  • Libération du verrou de chantier — timeout 3 s
  • Garde de cicatrice au Stop
  • Garde git-clean — avertit (et bloque depuis la mise à jour récente) si des modifications non commitées subsistent à la fin d'une session, y compris en worktree isolé ; la sortie anticipée des sous-agents d'automate est reconnue et laissée passer
  • Retour au tronc après session (forme stop du hook de checkout, rôle à confirmer)
  • Synchronisation de l'état du chantier au Stop — timeout 8 s
  • Nudge « API avant UI » — timeout 6 s
  • Nudge « les migrations sont appliquées par l'IA, pas manuellement » — timeout 6 s
  • Nudge « geste web via le navigateur automatisé dédié » — timeout 6 s
  • Garde de conservation des caps au Stop — timeout 8 s
  • Nudge « objectif, pas arbitrage » — timeout 8 s
  • Nettoyage du worktree de session — timeout 3 s

Stop — 2e groupe de matchers (1 hook)

  • Nudge « source directe avant récit » (total Stop : 17 hooks)

PreCompact (1 hook)

  • Mesure de contexte juste avant une compaction native — timeout 8 s

Gardes présents sur disque mais non câblés dans les fichiers de configuration

Un inventaire des scripts de garde croise les fichiers présents dans le dossier dédié (plus de 200 fichiers) avec les commandes réellement câblées dans les fichiers de configuration. Environ 26 fichiers ne sont câblés dans aucun des deux fichiers de settings. Sur ces 26, 4 sont décrits ailleurs dans cette documentation ; les 22 autres, répertoriés ci-dessous, n'avaient jamais été catalogués avant le relevé du 2026-09-27. Leurs vecteurs d'exécution sont variés : lanceur git pre-commit, hook git post-commit, ou dispatcher de gardes portables.

Garde Rôle Vecteur d'exécution
Scanner de secrets sur diff stagé Scanne les lignes ajoutées pour des valeurs de secret en clair — matérialise l'anti-leak à l'écriture pre-commit
Synchronisation des fichiers d'instructions d'agents Un commit touchant un fichier d'instructions régénère le fichier de l'agent concerné et bloque tant qu'il n'est pas dans le pathspec ; base injoignable → « non vérifié » (jamais bloquant) pre-commit
Garde Vaultwarden hors Internet Le coffre de mots de passe n'est jamais joignable depuis Internet — ferme un port publié hors de l'interface locale et un tunnel Tailscale pre-commit
Audit d'authentification back-office BLOQUANT : refuse tout commit ajoutant un handler d'API back-office sans appel à la garde de session appropriée pre-commit
Verrou de claim de périmètre core Rend le claim mécanique au commit, plus seulement déclaratif pre-commit
Garde de communication client depuis le hub BLOQUANT : refuse tout commit ajoutant une route capable de déclencher une communication client sans confirmation d'intention vérifiée en base pre-commit
Audit SEO i18n des slugs Ne tourne que si le commit touche routing/i18n ; bloque une clé i18n manquante ou un slug EN en français pre-commit
Parité des packs de langue Toute clé d'un fichier core indexé doit exister dans chaque pack de langue pre-commit
Parsabilité TypeScript Un fichier TypeScript commité doit parser syntaxiquement pre-commit
Garde fichier en retard sur le tronc GARDE : le commit modifie un fichier que le tronc a fait évoluer depuis la base de la lane pre-commit
Garde merge-back bloqué GARDE : la lane n'est plus consolidée dans préprod parce que le merge-back a conflicté pre-commit
Cliquet frontière core R1 Refuse tout codename client codé en dur dans le code core pre-commit
Cliquet frontière app-level R2 Refuse l'ajout d'un import runtime d'un handler serveur dans un fichier app-level pre-commit
Cliquet frontière app-level R3 Refuse l'ajout d'un import runtime atteignant les internals d'un module depuis un fichier app-level pre-commit
Bibliothèque de détection de frontière Les patterns de détection partagés R1/R2/R3 vivent ici pour que les deux étages (pre-commit et hooks d'outils) ne divergent pas lib (sourcée)
Isolation du profil navigateur Le profil personnel ne doit jamais fuiter dans un profil de foyer ni entre foyers pre-commit
Garde Malt anti-envoi automatique La veille reste lecture seule ; l'envoi est permis sous validation humaine explicite scellée ; bloque tout code-path d'envoi dans un module de veille sans ce verrou pre-commit
Consolidation worktree vers préprod Shim mince de hook git post-commit : un commit sur une branche de worktree client déclenche en arrière-plan la consolidation vers préprod hook git natif (post-commit)
Blocage de recherche récursive dans l'état des harnais BLOQUANT : referme la « chambre d'écho » des recherches récursives dans l'état des harnais Dispatcher de gardes portables
Garde de readiness de chantier NUDGE non bloquant au Stop : un chantier armé doit avoir un verdict de readiness frais Appelé par le hook de synchronisation de chantier au Stop
Nudge de garde de forme AVERTISSANT (jamais bloquant) : matérialise « un garde de forme ne prouve pas le fonctionnement » ⚠️ Câblage à confirmer — aucun appelant trouvé
Garde de schéma avant livraison prod BLOQUANT : miroir de la protection câblée dans ./ship — doctrine expand-contract ⚠️ Câblage à confirmer — aucun appelant trouvé
Nudge purge de cache après backfill PrestaShop Après un backfill/écriture DB prod touchant le front, rappelle la purge du cache ⚠️ Câblage à confirmer — aucun appelant trouvé
Vérification du transport e-mail avant déploiement Un client sans configuration e-mail ne plante pas, il jette silencieusement ses e-mails — vérifie le transport avant deploy ⚠️ Câblage à confirmer — aucun appelant trouvé
Garde resolver nginx IPv6 Un resolver nginx proxyfiant un upstream externe sans ipv6=off fait dépendre le contenu de la disponibilité de la route IPv6 du VPS ⚠️ Câblage à confirmer — aucun appelant trouvé
Garde de projet Compose explicite BLOQUANT : docker compose down/rm/kill/stop/--remove-orphans avec un fichier secondaire et sans nom de projet explicite peut retirer les conteneurs de la mauvaise pile ⚠️ Câblage à confirmer — absent des deux fichiers de settings au dernier relevé

Note structurelle : chaque relevé d'inventaire photographie l'état du fichier de configuration au moment de sa passe. Un tableau statique se re-périme au premier hook ajouté ensuite — il n'existe pas encore de garde automatisé comparant la table documentée avec le fichier de configuration vivant. Ce script de parité est un candidat identifié pour une prochaine itération.

Notes de fiabilité

Cette section consigne, dans l'ordre antéchronologique, les passes de mise à jour et de relecture du catalogue. Chaque entrée précise ce qui a été vérifié directement dans le code, ce qui reste à confirmer, et les limites assumées de la passe concernée.

Convention de lecture. « Régénération miroir » désigne une passe déclenchée par la détection automatique d'un écart entre le code et la documentation. « Relecture adverse » désigne une vérification manuelle contradictoire, matcher par matcher ou fichier par fichier, indépendante du signal automatique. Les deux types de passes sont complémentaires et se référencent mutuellement.

Passes récentes (2026)

  • Régénération miroir 2026-10-16. Une façade Python supplémentaire cataloguée (total passé de 948 à 949 fichiers Python ; les utilitaires exécutables restent à 148). Quatre lignes du catalogue réalignées sur le code réel (concernant respectivement le générateur de couverture photo, le provisionnement d'organisation, le traitement de fil et la simulation de traitement). Une nouvelle sous-famille documentée : l'import WooCommerce (voir la section dédiée aux connecteurs de catalogue). Limites assumées : (1) les planifications cron de deux façades de réinitialisation démo et d'audit SEO mensuel n'ont pas été revérifiées ; (2) la configuration du four de rendu n'a pas été relue ; (3) les références de numéro de ligne des entrées non touchées par cette passe n'ont pas été recalées ; (4) le skill d'import WooCommerce est décrit d'après la liste des skills et le docstring du script — son fichier de définition de skill n'a pas été relu ⚠️ à confirmer.
  • Régénération miroir 2026-10-15. Douze façades Python et un hook catalogués (total passé de 938 à 948 fichiers Python ; les utilitaires exécutables passent de 149 à 148). Douze lignes réalignées. Nouvelle sous-famille documentée : la reprise PrestaShop 9. Limites assumées : (1) les planifications cron de la façade de réinitialisation démo et de l'audit SEO mensuel n'ont pas été vérifiées ; (2) la configuration du four de rendu n'a pas été relue après l'ajout du sémaphore multi-slots ; (3) les références de numéro de ligne des entrées non touchées par cette passe n'ont pas été recalées.
  • Régénération miroir 2026-10-13. Huit façades Python, trois utilitaires exécutables et deux hooks catalogués (total passé de 930 à 938 fichiers Python). Une ligne réalignée (détecteur de navigation). Une référence de numéro de ligne recalée pour la façade de gestion des comptes tiers. Limites assumées : (1) la table de suivi qualité des comptes tenant est décrite d'après sa migration et les docstrings — l'état réel des lignes n'a pas été relu ⚠️ à confirmer ; (2) aucun cron de vérification qualité tenant n'a été observé dans le planificateur ⚠️ à confirmer ; (3) soixante-cinq références mortes restent documentées comme telles (marquées « supprimé / corbeille ») ; (4) les autres références de numéro de ligne du catalogue n'ont pas été recalées dans cette passe.
  • Régénération miroir 2026-10-12. Quatre façades Python cataloguées (total passé de 926 à 930). Six lignes réalignées. Un hook de déploiement recensé. Limites assumées : (1) l'unité de service système gérant la liaison In-Situ n'a pas été vérifiée ; (2) les références de numéro de ligne n'ont pas été recalées ; (3) soixante-quatre références mortes restent documentées comme telles.
  • Régénération miroir 2026-10-11. Neuf façades Python et trois utilitaires exécutables catalogués (total passé de 917 à 926 fichiers Python, et de 138 à 141 utilitaires). Environ trente lignes réalignées. Un hook de pré-commit recensé. Nouvelles sous-familles : l'environnement de code Muse et le traitement email par ventouse. Soixante-quatre chemins absents, tous déjà documentés comme tels.
  • Régénération miroir 2026-10-10. Seize façades Python et un module JavaScript catalogués (total passé de 901 à 917 fichiers Python ; création d'un nouveau sous-répertoire dans les utilitaires de rendu). Environ trente lignes réalignées. Trois hooks câblés recensés. Fichier de configuration des permissions recompté (232 entrées). Limites assumées : (1) les sous-systèmes de gestion des comptes tiers et de supervision système sont décrits d'après les docstrings et les fonctions lues — les tables de persistance correspondantes sont décrites d'après les noms de migration, le schéma réel n'a pas été relu ⚠️ à confirmer ; (2) l'outil d'application réversible des règles de confirmation de compatibilité pièces n'a pas pu être rattaché à une façade Python identifiée — seuls des tests ont changé dans la fenêtre relue ⚠️ à confirmer ; (3) soixante-cinq chemins cités sont absents du disque, tous marqués comme supprimés ou références mortes documentées.
  • Régénération miroir 2026-10-08. Six façades cataloguées (total passé de 895 à 901). Onze lignes réalignées. Un script de recette PrestaShop 9 recensé. Limites assumées : (1) les opérations de daemon relatives au rythme vidéo sont décrites d'après le plan opérationnel Python — la route du hub n'a pas été relue ; (2) la table des préréglages vidéo et les colonnes de rythme de scène sont citées d'après les noms de migration et les docstrings — le schéma réel n'a pas été relu ⚠️ à confirmer ; (3) le décompte de la section des hooks n'a pas été refait.
  • Régénération miroir 2026-10-05. Dix façades cataloguées (total passé de 880 à 889 fichiers Python, et de 137 à 138 utilitaires). Vingt lignes réalignées. Limites assumées : (1) les autres chemins touchés depuis le 2026-10-02 sont des tests, des migrations ou des fichiers déjà alignés par la passe du 2026-10-03 ⚠️ à confirmer au prochain recomptage ; (2) les façades pilotant un téléphone réel ont eu leurs gardes lues dans le code, mais aucun geste n'a été rejoué ; (3) l'état d'activation du canal Instagram n'a pas été relu dans cette passe — la mention « raccordé mais éteint » date du 2026-10-01 ⚠️ à confirmer.
  • Régénération miroir 2026-10-01. Trente-trois façades cataloguées (total passé de 831 à 864 fichiers Python). Six sous-systèmes relus dans le code. Sept hooks utilitaires recensés. Signal de départ : un fichier de composition sociale présentait un code plus récent que la documentation. Limites assumées : une soixantaine de fichiers cités avaient reçu des commits sans que leur ligne soit relue ⚠️ à confirmer ; le total des hooks de la section dédiée n'a pas été recompté. Anomalie relevée : le moteur de diffusion sociale déclare des limites pour des réseaux (Instagram, YouTube, TikTok) dont les publieur actifs sont absents ou désactivés — seuls trois réseaux disposent d'un publieur fonctionnel au 2026-10-01.
  • Régénération miroir 2026-09-27. 453 façades cataloguées, 45 signaux de dérive réalignés, références de lignes recalées, section des hooks recomptée. Soixante-quatre références mortes documentées. Anomalies relevées en cataloguant, non corrigées dans le code (constats à traiter par les responsables des scripts) :
    • Docstrings et commentaires de planificateur périmés sur plusieurs façades : les horaires déclarés dans le code ne correspondent pas aux lignes actives du planificateur pour au moins une dizaine de scripts (audits SQL, santé système, couverture de tags, seuils fiscaux, rétention d'événements, alimentation de file SEO, scrutation de boîte d'entrée, liens internes, alignement de paroles, garde juridique, cage 3D, relais de bascule, traduction nocturne de blog).
    • Façades conçues pour le planificateur mais sans ligne active : une quinzaine de scripts d'audit et de synchronisation ne sont planifiés nulle part malgré leur docstring d'exécution périodique.
    • Destinations codées en dur dans plusieurs scripts d'intégration externe, en contradiction avec la doctrine « la destination vient de la flotte ».
    • Scripts cassés ou orphelins : plusieurs utilitaires font référence à des chemins ou des endpoints qui n'existent plus dans le dépôt.
    • Sous-entendus de câblage corrigés en cataloguant : plusieurs hooks étaient mal attribués à leur événement déclencheur ou à leur fichier de configuration.
    • Non recopié volontairement : les identifiants par défaut d'authentification en préprod portés en constantes par la façade de gestion des mots de passe htaccess (décision explicite du fondateur, ces valeurs ne protègent pas un secret métier).
  • Régénération miroir 2026-09-23. Réalignement de l'utilitaire de terminal CLI (section pool de tentacules). Résumé : un commit du 2026-09-23 documente pour la première fois la sous-commande de mise en veille douce d'une instance CLI (session tmux terminée, espace de travail et transcripts conservés), désormais aussi déclenchée depuis le hub sous le nom produit « Relâchement ». Le vocabulaire « ventouse » / « aspiration » / « veille douce » cohabite avec « tentacule » dans le code et les messages utilisateur. Les décomptes agrégés n'ont pas été rejoués par cette passe.
  • Relecture adverse 2026-09-22 (8 écarts corrigés). Vérification directe du fichier de configuration des hooks (chargement JSON, matcher par matcher), d'un connecteur d'import catalogue et du wrapper de planification. Corrections : (1) un groupe de hooks sur l'événement « avant exécution d'outil shell » comptait 79 entrées réelles et non 77 — deux hooks manquants ajoutés ; (2) la chaîne de hooks « à l'arrêt de session » comptait 17 entrées réelles et non 16 — un hook manquant ajouté ; (3) un hook sur l'événement « avant question à l'utilisateur » comptait 2 entrées réelles et non 1 ; (4) un matcher combiné sur plusieurs types d'outils était totalement absent du tableau — son unique hook ajouté ; (5) un libellé affirmait 16 hooks supplémentaires en n'énumérant que 14 noms distincts — libellé corrigé ; (6) les numéros de ligne de trois hooks de la famille client étaient périmés — recorrigés ; (7) la chaîne de couverture de facettes produit omettait un remesurage intermédiaire — réintégrée ; (8) une référence de numéro de ligne dans le wrapper de planification était fausse — corrigée aux deux occurrences.
  • Régénération miroir 2026-09-22. Réalignement de la façade de découpe de session et comblement de deux angles morts. Résumé : six commits du 2026-09-21 ont enrichi la façade de découpe de session (producteur de demandes de réinitialisation pour le cockpit, remise à zéro du compteur de tours, camp de relance de fin de tour, sidecar de scoping de reprise par ventouse, synchronisation de la fiche modèle à l'arrêt, en-tête en heure locale). Deux façades jamais cataloguées (relanceur de session et superviseur de session) ont été comblées à l'occasion.
  • Relecture adverse 2026-09-21bis (2 écarts corrigés sur la régénération du même jour). (1) Le décompte de façades de l'atelier 3D annonçait 17 fichiers Python et 7 helpers Blender — le décompte réel est 20 et 13 ; trois façades et six helpers manquants ajoutés. (2) Un groupe isolé de hooks sur l'événement « avant exécution d'outil shell » comptait 3 entrées documentées pour 4 réelles — un hook de doctrine de forme 3D manquant ajouté.
  • Régénération 2026-09-21. Recomptage de la section principale, comblement de 20 angles morts (pool de tentacules, atelier 3D, mesure du hub mobile), correction d'un pointeur de numéro de ligne. Le signal de départ était un fichier de configuration applicative plus récent que la documentation — vérification : la ligne concernée décrit un mécanisme (garde-fou de version de dépendance), non une version pincée, donc non affectée par le bump réel. Recomptage réel : 774 fichiers Python, 131 utilitaires exécutables top-level, plus deux sous-répertoires et deux fichiers sans extension non encore catalogués. Cette passe n'a pas rejoué l'intégralité des sections (portée bornée aux signaux du miroir et aux chapitres les plus actifs de la semaine).
  • Régénération miroir 2026-09-20. Réalignement de la façade de publication de version 3D. Résumé : un commit du 2026-09-19 ajoute un paramètre optionnel de filiation à la fonction de création de version — la colonne existait déjà dans la table de persistance mais manquait à l'insertion Python, si bien que tout volume publié manuellement via cette façade naissait sans filiation vers sa planche d'origine. Nouveau flag CLI documenté ; banc de tests de régression posé.
  • Relecture adverse 2026-09-19 (17e passe, 3 écarts corrigés sur la section pool de tentacules). (1) Une façade étiquetée « cron » ne figure dans aucune ligne active du planificateur — elle est en réalité déclenchée par événement depuis un autre module ; reclassée. (2) La liste des profils autorisés pour le daemon de terminal CLI omettait le profil Antigravity (Gemini via CLI natif) — ajouté. (3) Le plafond de sessions du wrapper de terminal était documenté en progression 8 → 24 alors que la valeur réelle par défaut est 30.
  • Relecture adverse 2026-09-19 (16e passe, 2 écarts corrigés sur la section des hooks). (1) Un hook sur l'événement « avant modification de fichier » comptait 13 entrées documentées pour 14 réelles — un hook de doctrine de dispatch ajouté. (2) Un groupe-matcher entier était absent du tableau — le hook de garde de forme de fichier mémoire, câblé sur un matcher combiné distinct, ajouté.
  • Régénération miroir 2026-09-19. Réalignement du connecteur d'import catalogue vidaXL. Résumé : deux commits ont enrichi la déduction de capacité d'assise — d'abord par lecture du titre produit (couverture passée de 22 % à 49,9 %, au-dessus du seuil de 30 % déclenchant l'affichage de la facette), puis par déduction depuis le type de produit pour les assises sans capacité déclarée (repli fiable uniquement pour fauteuil et pouf, chaise explicitement exclue à 69 % de cohérence fournisseur, jamais devant un marqueur de lot). Couverture finale du rayon : 53,5 %.
  • Relecture adverse 2026-09-18 (15e passe, 3 écarts corrigés). (1) Une façade étiquetée « cron » porte un marqueur explicite d'abandon dans le planificateur — requalifiée. (2) Un hook sur l'événement « avant soumission de prompt utilisateur » comptait 6 entrées réelles pour 7 — un hook de pré-vol mémoire ajouté. (3) Un troisième groupe-matcher isolé sur l'événement « avant exécution d'outil shell » manquait entièrement — un hook de garde de scope par tentacule ajouté.
  • Régénération miroir 2026-09-18. Réalignement de la façade du moteur de travail 3D et catalogage d'une nouvelle façade. Résumé : (1) un nouveau type de job « correction » permet la retouche géométrique d'un mesh existant guidée par un tracé pinceau annoté, diagnostiquée par un modèle multimodal ; (2) la promotion automatique d'un résultat de personnage en version courante est désormais conditionnée à l'atteinte du stade de production final. Une nouvelle façade de contrat d'approbation par étapes cataloguée.
  • Relecture adverse 2026-09-16 (14e passe, 2 écarts corrigés). (1) Un matcher universel sur tous les types d'outils était absent de toute version précédente du tableau — le dispatcher portable des gardes prioritaires P0, se déclenchant sur chaque appel d'outil, ajouté ; sa présence invalide l'exhaustivité revendiquée sur le seul matcher shell. (2) Un hook était documenté comme câblé séparément sur deux matchers distincts — le fichier réel ne porte qu'un seul matcher combiné ; le compte corrigé.
  • Régénération miroir 2026-09-16. Réalignement du daemon de terminal CLI et catalogage de quatre nouvelles façades. Résumé : (1) la résolution du sous-processus de mesure de consommation CLI est désormais faite par chemin absolu pour éviter les ambiguïtés de PATH dans le service système ; (2) réalignement complet du sous-thread profil Codex (profil distinct de Claude et GLM, CLI natif, reprise de conversation non portable entre profils, plafond de sessions porté à 24). Nouvelles façades cataloguées : échantillonneur de santé hôte, mesure de consommation CLI, façade Soulseek.
  • Régénération miroir 2026-09-15. Réalignement de la façade email et catalogage d'une nouvelle façade. Résumé : (1) la garde de détection de livraison corrigée pour ne plus confondre démarchage et livraison ; (2) toute programmation automatique d'un message à destination d'un client réel est désormais interdite — les messages clients partent toujours à la main ; (3) la façade solde désormais ses propres copies de validation à l'envoi ; (4) le soldage de fil exclut les entrants insérés après la rédaction du brouillon. Nouvelle façade cataloguée : verdict d'état de réponse email par client.
  • Relecture adverse 2026-09-15 (13e passe, 5 écarts corrigés). (1) Un classifieur d'intention documentait quatre intents dont un retiré du classement automatique depuis juillet — corrigé, les cinq intents réels listés. (2) La date de création d'une façade de surveillance du planificateur était erronée d'environ un mois. (3) Les numéros de ligne de trois hooks client avaient de nouveau dérivé. (4) Une table de persistance était citée sous un nom inexistant dans le code — corrigée. (5) Un utilitaire de test de tenant omettait une branche de la liste de sélection.
  • Relecture adverse 2026-09-14 (12e passe, 9 écarts corrigés). (1) Un groupe-matcher entier sur l'événement « avant modification de fichier » était totalement absent du tableau — douze hooks ajoutés. (2) Un hook documenté comme câblé sur l'événement shell était absent de ce matcher et uniquement présent sur l'événement d'écriture — corrigé. (3) L'attribution d'un correctif de chemin Python à une façade spécifique était une inférence non vérifiée — requalifiée. (4) Un numéro de ligne d'autorisation dans le fichier de configuration locale était faux. (5) Un pointeur de ligne dans une façade de scraping était faux. (6) Deux façades étiquetées « cron » sans ligne active dans le planificateur — requalifiées. (7) Un hook sur l'événement de récupération web manquait — ajouté. (8) Un hook sur l'événement de skill manquait — ajouté.
  • Relecture adverse 2026-09-14 (11e passe, 25 écarts corrigés). Vérification directe de dix façades, du planificateur et du fichier de configuration des hooks. Corrections principales : (1) un renommage de table de persistance n'avait pas été répercuté dans six entrées du catalogue ; (2) une façade documentée comme inexistante existait depuis plus d'un mois ; (3) trois façades marquées « supprimé » avaient été restaurées sans que le catalogue soit mis à jour ; (4) une anomalie de module Python documentée comme persistante avait disparu ; (5) deux skills avaient été fusionnés ; (6) un pointeur de ligne d'appel était faux ; (7) un décompte de fichiers de configuration était faux ; (8) six horaires de planification incorrects corrigés contre le planificateur vivant ; (9) une façade présentée comme active portait un marqueur d'abandon ; (10) une ligne de planification avait été remplacée par une autre ; (11) un total de tables référençant un champ était sous-compté ; (12) une façade câblée sur trois événements n'était documentée que pour un seul ; (13) un pointeur de ligne dans une façade de mise en cache était faux ; (14) un utilitaire de vérification de couverture avait deux lignes actives dans le planificateur et non une seule ; (15) un hook documenté comme orphelin était en réalité câblé ; (16) le tableau des hooks shell comptait 77 entrées réelles pour 33 documentées — 44 manquants ajoutés ; (17) le tableau des hooks d'écriture comptait 31 entrées réelles pour 15 documentées ; (18) quatre hooks sur l'événement de prompt utilisateur manquaient ; (19) trois hooks sur l'événement après exécution shell manquaient ; (20) six groupes-matchers entiers absents du tableau ajoutés.
  • Relecture adverse 2026-09-14 (10e passe, 20 écarts corrigés). Vérification directe de cinq façades, du planificateur et du fichier de configuration des hooks. Corrections principales : deux paramètres de timeout du moteur de travail incorrects (bail de bail de bail de session porté à 240 minutes, timeout de spawn porté à 7 200 secondes, tous deux sous-estimés depuis plusieurs semaines) ; une façade cataloguée comme vivante avait été supprimée par le même commit que les autres scripts purge ; un câblage de hook corrigé côté code (PreToolUse au lieu de PostToolUse) ; un statut de planification d'une façade d'audit documenté comme suspendu alors qu'il était réactivé ; plusieurs horaires de planification corrigés ; des comptages de hooks sur de multiples matchers corrigés à la hausse.
  • Régénération miroir 2026-09-14. Réalignement de la façade email et catalogage de quatre nouvelles façades dans une nouvelle sous-famille « prospection / note de mesure ». Résumé : la façade email gagne une garde RGPD art. 21 fail-closed, un lien vers une nouvelle façade de mesure, la persistance de l'identifiant de message après envoi et une réconciliation de fil complet. Quatre nouvelles façades cataloguées : note de mesure avec cycle de vie, gestion de la fenêtre d'envoi et sceau du texte validé, expédition dans la fenêtre, et rapprochement ROI de démarchage.
  • Relecture adverse 2026-07-26 (post-régénération miroir, 3 hooks manquants comblés). (1) Un hook sur l'événement d'écriture manquait — ajouté, numéros de ligne suivants décalés. (2) Un hook sur l'événement après écriture manquait — ajouté. (3) Une façade documentée dans la section principale manquait dans le tableau des hooks — incohérence interne corrigée. Cause structurelle identifiée : un tableau statique se re-périme au premier hook inséré après sa rédaction.
  • Régénération miroir 2026-07-26. Réalignement de l'utilitaire de terminal CLI et comblement de trois angles morts. Résumé : le wrapper mono-profil devient multi-profil via un flag de sélection de profil (Claude ou GLM) qui choisit à la fois la session et le binaire lancé ; le daemon réfléchit l'extension au niveau réseau. Trois façades jamais cataloguées ajoutées : vectoriseur de logo, sonde de statut du navigateur autonome, garde de plafond de contexte sous-agent.
  • Relecture adverse 2026-07-25 (9e passe, 5 écarts corrigés). (1) Une note de stabilité affirmait qu'une étape du cycle nocturne était intacte — le journal de cron montre 40 occurrences d'échec sur cette étape, dues à un appel par chemin absolu en sous-processus sans racine dépôt sur le chemin Python. (2) Le décompte de runs postérieurs à une purge était sous-estimé. (3) Deux commits cités comme antécédents d'une classe de bug corrigeaient en réalité un sujet sans rapport — corrigés. (4) Une façade documentée comme active dans le planificateur porte un marqueur d'abandon explicite. (5) Une autre façade de la même famille.
  • Régénération miroir 2026-07-25. Réalignement d'un hook de garde git et catalogage de six nouvelles façades plus un angle mort ancien. Résumé : le hook qui bloquait le staging massif ajoute désormais le blocage d'un commit nu sur le checkout principal, où l'index git est partagé entre sessions concurrentes. Le matcher shell re-vérifié en intégralité : 33 hooks réels pour 30 documentés, trois manquants ajoutés. Six nouvelles façades du même jour cataloguées (gestionnaire de mémoire par télémétrie, générateur et rapporteur de logo, vérificateur et rapporteur de marque, régénérateur d'agents Claude). Un angle mort plus ancien comblé (façade de solde comptable).
  • Relecture adverse 2026-07-24 (7e passe, 4 écarts corrigés). (1) Une affirmation « aucun des deux nouveaux scripts n'est encore planifié » était fausse — un troisième script les importe et tourne via deux lignes actives dans le planificateur. (2) Le comptage de fichiers Python était sous-estimé de deux unités. (3) La liste de priorités d'armement automatique de chantiers omettait un niveau. (4) Deux variables d'authentification Instagram citées comme absentes de tout fichier étaient en réalité déclarées (mortes, non lues fonctionnellement).
  • Relecture adverse 2026-07-24 (6e passe, 13 écarts corrigés). (1) Une façade documentée comme suspendue du planificateur avait été réactivée. (2) Une invocation citait le mauvais numéro d'étape du cycle nocturne. (3) Quatre façades étiquetées « cron » ont leurs lignes commentées avec marqueur d'abandon. (4) Un hook câblé sur le mauvais événement — corrigé. (5) Deux hooks manquants sur l'événement d'écriture. (6) Un hook manquant sur l'événement shell. (7) Deux hooks manquants sur l'événement après écriture. (8) Un hook manquant dans la chaîne d'arrêt de session. (9) Un hook de départ de session manquant — total réel de cinq hooks sur cet événement. (10) Un paramètre de timeout du moteur de travail incorrect. (11) Une référence à une règle CLAUDE.md inexistante retirée. (12) Six façades étiquetées « cron » sans ligne active vérifiable. (13) Trois numéros de ligne de hooks client incorrects.
  • Régénération miroir 2026-07-24. Réalignement du scraper de référence et catalogage de 22 angles morts. Résumé : le scraper extrait sa couche de session/backoff/throttle vers un socle partagé, pour que le comparateur de prix concurrent hérite des mêmes garde-fous. 22 façades présentes sur disque depuis plusieurs jours, jamais entrées dans le catalogue, réparties dans les sections infrastructure, gestion de chantiers, audit, boucle nocturne et cicatrices.
  • Relecture adverse 2026-07-21 (5e passe, 11 écarts corrigés). (1) La doctrine d'exclusivité du déploiement avait été renversée par un chantier permettant à l'IA de lancer un déploiement si la flotte l'autorise. (2) Les comptages d'utilitaires exécutables étaient inexacts. (3) La suspension d'armement automatique de chantiers documentée comme active était en réalité réactivée. (4) Une cassure du cycle nocturne touchait trois étapes et non deux. (5) Un hook manquait sur l'événement d'écriture. (6) Un hook manquant sur l'événement d'agent. (7) Un hook de départ de session manquant dans le fichier de configuration principal. (8) Une façade documentée comme active avait été mise en corbeille. (9) La liste des tenants supportés dans un utilitaire de test omettait certains cas. (10) Des références de ligne CLAUDE.md incorrectes. (11) Deux utilitaires exécutables manquants dans le décompte.
  • Régénération miroir 2026-07-21. Réalignement du moteur de travail et catalogage d'un angle mort. Cinq commits de la nuit réalignés : (1) le bail anti-zombie porté à 120 minutes pour dépasser le timeout de spawn maximal, invariant gardé mécaniquement par un test ; (2) la fenêtre de log transmise au juge QA corrigée pour toujours montrer la fin du log (tête + queue) ; (3) le bloc de contexte de spawn appliqué à toutes les runs chaînées et non seulement à la première ; (4) la session Claude perdue sur timeout désormais persistée et reprise ; (5) deux corrections connexes dans la façade de gestion de chantier pour des champs absents de la liste des colonnes déclarées (no-op silencieux corrigé, garde mécanique posée).
  • Relecture adverse 2026-07-20 (2e passe, 6 écarts corrigés). (1) Une façade marquée « supprimée » existait réellement sur disque — restaurée par un commit correctif de faux positif du scanner. (2) Un hook documenté comme câblé sur un événement de prompt utilisateur ne l'était pas — il tourne en planificateur. (3) Un hook documenté comme « fusionné » dans un autre était en réalité décâblé mais présent sur disque. (4) Un paramètre d'authentification documenté comme « jamais en argv » dispose bien d'un flag CLI en fallback. (5) Des numéros de ligne d'un hook client incohérents entre la note et le tableau. (6) La décomposition des utilitaires exécutables omettait un fichier sans extension.
  • Relecture adverse 2026-07-20 (1re passe, 8 écarts factuels corrigés). Corrections d'horaires de planification et de claims : un planificateur documenté avec un horaire fixe tourne en réalité sur une fenêtre pilotée par la base de données ; un périmètre d'armement étendu au niveau P2 ; une façade de surveillance de conversion absente du planificateur ; un calibrateur absent du planificateur ; une liste de types de jobs incomplète ; un décompte de catégories de vérification incorrect ; des variables d'authentification Instagram citées mais absentes du fichier.
  • Régénération miroir 2026-07-20. Correction d'une référence morte, réalignement d'un code plus récent et catalogage de 23 angles morts. Un hook de garde de déploiement avait été fusionné dans un autre script — les deux mentions corrigées. Un utilitaire de provisionnement du navigateur autonome documenté sur les flags de démarrage (anti-cuisson thermique GPU). 23 façades présentes sur disque depuis fin juin / mi-juillet cataloguées, réparties dans les sections infrastructure, gestion de chantiers, audit, navigateur autonome et comptabilité.
  • Régénération miroir 2026-07-18. 62 références mortes corrigées et 15 angles morts comblés. Les 62 références mortes partagent une cause unique : une purge de scripts obsolètes (un commit unique, 70 scripts en corbeille avec délai de grâce de 30 jours). Deux des 62 sont des faux négatifs du scanner de purge — encore appelées en sous-processus par le cycle nocturne, invisibles au grep statique ; marquées comme « supprimées par erreur », cassure réelle du cycle documentée. 15 nouvelles façades ajoutées, dont la corbeille elle-même, le gestionnaire d'armement automatique, le battement de planificateur, la garde de santé du cache et les utilitaires d'espace de travail persistant.
  • Relecture adverse 2026-07-17 (4e passe, 3 écarts corrigés). Comptage réel de fichiers Python corrigé à 387. Dix-sept façades jamais entrées au catalogue ajoutées (WhatsApp pro, machine à états de réponse client, orbite QA de chantier, QA par mutation, gestion de paiement client, adaptateurs e-commerce génériques). Numéros de ligne de deux hooks client re-corrigés une nouvelle fois après un nouvel ajout de hooks dans le fichier de configuration. Ces trois hooks ajoutés eux-mêmes absents malgré la revendication d'exhaustivité de la passe précédente.
  • Catalogue réaligné le 2026-07-17 (signal de dérive sur l'utilitaire de test de tenant) : la documentation décrivait encore l'état de juin pour cet utilitaire, qui avait bougé deux fois depuis — ajout d'une passe de vérification d'intégrité des assets statiques, puis correction d'une régression du garde-fou lui-même. Liste des tenants supportés complétée et écart signalé entre les branches réelles, le message d'usage et la boucle de couverture globale.
  • Relecture adverse 2026-07-16 (3e passe, 5 écarts corrigés). Nombre réel de dimensions de santé du cycle nocturne (5 et non 4) ; câblage réel de 7 hooks manquants et correction de 2 numéros de ligne dans le tableau des hooks ; logique réelle d'une façade de détection de fuite d'authentification (condition conjonctive, non binaire) ; catégories réellement implémentées d'une façade d'audit de marque ; identifiant d'application Meta erroné retiré.
  • Catalogue réaligné le 2026-07-16 (signal de dérive sur un worker de vault) : la documentation décrivait un worker qui gère désormais lui-même l'inscription de compte site et tourne en daemon de service système. Trois nouvelles façades ajoutées ; neuf angles morts pré-existants comblés (optimiseur de slug, fusion de taxonomie, mégamenu, connecteurs de catalogue fournisseur).
  • Mise à jour 2026-07-15. 368 scripts Python et 85 utilitaires exécutables vérifiés. 77 nouveaux fichiers Python et 2 nouveaux utilitaires ajoutés depuis la version précédente. Cinq références mortes corrigées (scripts supprimés lors de la migration de la base de données vers PostgreSQL uniquement).
  • Relecture adverse 2026-07-15 (1re passe, 13 écarts corrigés). Durée réelle du cycle nocturne (12 600 secondes et non 11 460) ; références de lignes CLAUDE.md ; timeout réel d'une façade de détection de tonalité ; rôle actuel d'un analyseur de dépendances TypeScript (phase TS retirée) ; 8 hooks shell, 1 hook d'agent, 2 hooks d'arrêt et 1 matcher manquants dans le tableau des hooks ; logique de départage FIFO d'une façade de réconciliation bancaire ; flags réels de deux façades de catégorisation et réconciliation bancaire ; statut de planification de plusieurs façades de veille et de notification.
  • Relecture adverse 2026-07-15 (2e passe, 8 écarts corrigés). Deux hooks manquants dans le tableau (sur les événements d'écriture et de question utilisateur) ; numéro de ligne erroné pour un hook client ; doctrine périmée sur le matcher d'immunité d'un module de réflexes ; invocation planifiée manquante d'une façade de tests de sécurité ; description inversée du déclencheur d'une façade de gestion d'erreur par réflexe ; un utilitaire de synchronisation d'emails requalifié hors planificateur actif ; une façade de correction de données clients requalifiée en CLI autonome.
  • Relecture adverse 2026-09-15 (5 écarts corrigés sur la section des hooks). Cinq groupes de matchers avaient des comptages de hooks inférieurs à la réalité : un hook de gestion de page par tentacule manquait à la fois sur l'événement de départ de session et sur l'événement après exécution shell ; un hook de gestion d'assets manquait sur l'événement avant modification de fichier ; un hook de scellement de publication manquait sur l'événement après écriture ; deux hooks manquaient dans un groupe isolé sur l'événement shell (dont le même hook de scellement, câblé sur deux événements distincts).

Cause structurelle récurrente. Le tableau des hooks se re-périme au premier hook inséré dans le fichier de configuration JSON après sa dernière vérification. Une passe qui ne re-diff pas explicitement chaque matcher contre le JSON vivant hérite silencieusement de la dérive de la version précédente. Aucun garde-fou automatique ne compare encore le tableau documenté au JSON vivant à chaque mise à jour — c'est le principal vecteur d'écart résiduel entre les passes.