runbook: desaccentuation systemique SOUL.md/PROTOCOL-INFRA.md/DSH (01/09/2026)
This commit is contained in:
@@ -0,0 +1,118 @@
|
|||||||
|
# Désaccentuation systémique des prompts système et générateurs de documents (SOUL.md, PROTOCOL-INFRA.md, DSH)
|
||||||
|
|
||||||
|
**Date** : 2026-09-01
|
||||||
|
**Instances concernées** : hermes-nyora, hermes-tt, hermes-perso, DSH-VPS (hermes-nabil vérifié sain)
|
||||||
|
**Tags** : accents, langue, soul-md, protocol-infra, dsh, docx, context-hub, qualite-production
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Problème
|
||||||
|
|
||||||
|
Symptôme initial : la veille automatique 20h (hermes-nyora) produisait du français
|
||||||
|
intégralement désaccentué, malgré une règle explicite de langue déjà présente dans le
|
||||||
|
prompt système. Signalé par Nabil comme récurrent ("nième fois"). Investigation étendue
|
||||||
|
au reste de la plateforme sur demande explicite, révélant un défaut structurel bien plus
|
||||||
|
large que la seule veille.
|
||||||
|
|
||||||
|
Deuxième occurrence distincte le même jour : DSH-VPS a généré un document Word (.docx)
|
||||||
|
dont la page de garde et le sommaire étaient désaccentués, alors que le contenu importé
|
||||||
|
du markdown source restait correctement accentué.
|
||||||
|
|
||||||
|
## Contexte et contraintes
|
||||||
|
|
||||||
|
Nabil travaille au clavier QWERTY, sans accents faciles d'accès. Les documents (SOUL.md,
|
||||||
|
scripts, index) rédigés directement par lui, ou par un agent dans une session où l'habitude
|
||||||
|
"ASCII" domine, héritent de ce biais. Un correctif de règle ajouté en tête d'un document
|
||||||
|
ne corrige pas rétroactivement le corps existant.
|
||||||
|
|
||||||
|
## Ce qui NE fonctionne PAS
|
||||||
|
|
||||||
|
| Tentative | Erreur obtenue | Raison de l'échec |
|
||||||
|
|-----------|----------------|-------------------|
|
||||||
|
| Ajouter une règle "accents obligatoires" en tête de SOUL.md (fix du 18/07/2026) | La règle est respectée localement mais le reste des sorties reste désaccentué | Le corps préexistant du document (des milliers de caractères désaccentués) sert de contre-exemple dominant ; un LLM suit le volume de style observé plus qu'une instruction énoncée une fois |
|
||||||
|
| Corriger uniquement le fichier signalé (ex. seulement le job veille) | Le symptôme réapparaît ailleurs (runbooks, sous-agents, autres instances) | La cause est structurelle (le system prompt lui-même), pas locale à un job |
|
||||||
|
| Réécrire un script de génération de document sans relire ses chaînes fixes | Régression : une version antérieure (v1/v2) avait les bons accents, la réécriture (v3) les a reperdus | Aucune règle persistante ne rappelait de vérifier les chaînes codées en dur lors d'une réécriture |
|
||||||
|
|
||||||
|
## Cause racine
|
||||||
|
|
||||||
|
**Côté Hermes (nyora/tt/perso)** : SOUL.md est le vrai system prompt, chargé à chaque
|
||||||
|
session (chat et cron). Le 18/07/2026, un bloc de règle de langue correctement accentué
|
||||||
|
avait été ajouté en tête des 3 SOUL.md, mais le corps préexistant (rédigé à l'origine par
|
||||||
|
Nabil) était resté intégralement désaccentué. Même pattern retrouvé dans RUNBOOK-TEMPLATE.md
|
||||||
|
(source directe de la contamination de tous les runbooks produits depuis), les 3 sous-agents
|
||||||
|
nyora (agent-veille/contenu/commercial.md), plusieurs fichiers references/, un profil Bot
|
||||||
|
Mode (profiles/veilleur/SOUL.md), et une bonne partie du corps de PROTOCOL-INFRA.md
|
||||||
|
(règles + entrées de changelog datées de juillet-août).
|
||||||
|
|
||||||
|
**Côté DSH-VPS** : pas de SOUL.md équivalent — l'identité de l'agent vient de context-hub,
|
||||||
|
interrogé à chaque session (`GET /api/context`). Aucune règle de langue n'y existait, donc
|
||||||
|
rien ne contrebalançait le biais QWERTY lors d'une réécriture de script.
|
||||||
|
|
||||||
|
**Trouvaille annexe distincte (bug différent, même terrain)** : 4 occurrences du texte
|
||||||
|
littéral `\x27` à la place d'apostrophes réelles dans PROTOCOL-INFRA.md, et le même motif
|
||||||
|
retrouvé dans _INDEX.md (`ui_meta[\x27hermes-bots\x27]`) — probable fuite d'échappement
|
||||||
|
Python d'une session antérieure ayant écrit du JSON/repr au lieu du texte brut.
|
||||||
|
|
||||||
|
## Solution validée
|
||||||
|
|
||||||
|
```
|
||||||
|
# Réaccentuation intégrale (corps complet, pas juste la tête), sauvegarde
|
||||||
|
# .bak_accents_niveau2_20260901 avant chaque écriture, checksum vérifié à chaque transfert :
|
||||||
|
- SOUL.md ×3 instances (nyora, tt, perso) — tt recevait en plus le bloc RÈGLE DE LANGUE
|
||||||
|
qui lui manquait entièrement
|
||||||
|
- boot.md, USER.md (nyora)
|
||||||
|
- RUNBOOK-TEMPLATE.md ×3
|
||||||
|
- agent-veille.md, agent-contenu.md, agent-commercial.md (nyora)
|
||||||
|
- api-calls.md, nyora-synthese-reference.md (nyora et perso)
|
||||||
|
- veille-sources-ia.md (perso), mail-o365-tt.md (tt)
|
||||||
|
- profiles/veilleur/SOUL.md (nyora)
|
||||||
|
- PROTOCOL-INFRA.md intégral ×3 (tronc commun + tout le changelog daté + sections
|
||||||
|
spécifiques tt) + correctif \x27 -> apostrophe (4 occurrences ×3 instances)
|
||||||
|
- Redémarrage propre (stop puis start, jamais restart) des 3 containers hermes-agent-*
|
||||||
|
après chaque lot de correctifs, cron vérifié intact à chaque fois (next_run_at cohérent)
|
||||||
|
|
||||||
|
# Côté DSH-VPS :
|
||||||
|
- generate-docx-v3.mjs : 8 chaînes codées en dur réaccentuées (page de garde, sommaire,
|
||||||
|
métadonnées docx), document régénéré et vérifié
|
||||||
|
- Ajout d'une règle de langue permanente dans context-hub, scope infra (lu par Claude,
|
||||||
|
Gemini et DSH) via PATCH /api/rules/infra — clé "langue_rule", incluant explicitement
|
||||||
|
la consigne de revérifier les chaînes fixes d'un générateur lors d'une réécriture
|
||||||
|
- Corrigé au passage : deux fautes ("ecrire") dans secrets_rule (infra) et rules (nyora)
|
||||||
|
de context-hub lui-même
|
||||||
|
```
|
||||||
|
|
||||||
|
## Vérification
|
||||||
|
|
||||||
|
```
|
||||||
|
# Ratio caractères accentués / 1000 caractères sur PROTOCOL-INFRA.md, avant/après :
|
||||||
|
# avant : ~5.4-5.8 après : ~21.3-21.7 (comparable à du français correctement rédigé)
|
||||||
|
|
||||||
|
# Document DSH régénéré :
|
||||||
|
node generate-docx-v3.mjs
|
||||||
|
# -> page de garde et sommaire vérifiés accentués par extraction du XML interne (word/document.xml)
|
||||||
|
|
||||||
|
# context-hub, scope infra :
|
||||||
|
curl http://100.86.197.88:3093/api/rules/infra -H "X-API-Key: ..."
|
||||||
|
# -> langue_rule présent et correctement accentué
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pièges spécifiques DSM / NAS
|
||||||
|
|
||||||
|
- Un bloc de règle ajouté en tête d'un prompt système ne suffit jamais si le corps existant
|
||||||
|
n'est pas lui-même corrigé — le volume l'emporte sur l'instruction unique.
|
||||||
|
- Toute réécriture de script générateur de document doit relire ses chaînes fixes
|
||||||
|
(page de garde, sommaire, métadonnées), pas seulement le contenu dynamique importé —
|
||||||
|
une version antérieure correcte n'empêche pas une régression lors d'une réécriture ultérieure.
|
||||||
|
- Pour DSH (pas de fichier persistant type SOUL.md), le bon point d'ancrage pour une règle
|
||||||
|
durable est context-hub (`PATCH /api/rules/{scope}`), lu à chaque session via
|
||||||
|
`GET /api/context` — pas un fichier local qui ne survivrait pas à une reconstruction.
|
||||||
|
- Pour transférer du texte accentué depuis un environnement d'outils tiers (chat) vers un
|
||||||
|
fichier NAS/VPS sans corruption : passer par un script Python local (heredoc direct dans
|
||||||
|
le shell cible), jamais par une commande shell avec accents inline échappés à la main —
|
||||||
|
risque de désynchronisation d'échappement (constaté une fois pendant ce chantier même,
|
||||||
|
avec une note NyoraNotes republiée correctement après coup).
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- `bolbol/nas-runbooks/hermes-nyora/` pour tout détail spécifique nyora
|
||||||
|
- Note NyoraNotes : `infra/desaccentuation-systemique-SOUL-md-resolue-2026-09-01`
|
||||||
Reference in New Issue
Block a user