# 🛡️ DOCTRINE AUTO-COHÉRENCE OLYMPUS
> **Type** : loi de fonctionnement (référence absolue, complète Mona Lisa)
> **Version** : v1.0 — 28/04/2026
> **Statut** : doctrine active. Toute violation = drift à corriger.
> **À utiliser par** : tous les chats Claude, tous les développements, tous les commits
---
## ⚡ Principe central
> **Tout document du CODEX est auto-cohérent avec la SSoT (`OLYMPUS_STATE.json`) en permanence — ou il n'existe pas.**
Un document drifté n'a pas le droit d'exister silencieusement. Soit il est corrigé automatiquement, soit il est bloqué à la création/au commit.
---
## 🎯 Pourquoi cette doctrine
Le système OLYMPUS a une **Single Source of Truth** (`OLYMPUS_STATE.json`). Mais la SSoT seule ne suffit pas : si la doc, le code et les HTML contiennent des copies en dur de chiffres/versions, ils dérivent silencieusement à chaque mise à jour. C'est un drift.
L'**audit (détection)** seul ne suffit pas non plus — il oblige à corriger manuellement, ce qui finit par être oublié.
L'auto-cohérence **ferme la boucle** : détection → correction → prévention, automatique, à 4 niveaux.
---
## 🔄 Les 4 niveaux d'enforcement
### Niveau 1 — Auto-correction sur déclenchement
**Outil** : `drift_audit.py --fix` (ou `--fix-aggressive`)
**Action** : scan + remplacement regex selon les règles, snapshot Mona Lisa avant chaque écriture, log dans `MNEMOSYNE/02_ETAT/DRIFT_AUDIT_LOG.md`.
**Quand** : appel manuel, ou orchestré par les niveaux 2-3.
### Niveau 2 — Auto-correction au boot
**Outil** : CERBER (`01_SERVEUR/CERBER/cerber_server.py`) lance `drift_audit --fix --quiet` dans son `on_startup` AVANT de spawn NEXUS.
**Action** : à chaque démarrage de la stack, le système s'auto-soigne.
**Garantie** : un OLYMPUS qui boot est un OLYMPUS sans drift.
### Niveau 3 — File watcher sur la SSoT (en cours)
**Outil** : daemon Python (à venir : `AXIOM/state_watcher.py`) qui surveille `OLYMPUS_STATE.json`.
**Action** : à chaque modification de la SSoT, déclenchement immédiat de `drift_audit --fix`.
**Garantie** : impossible de modifier la SSoT sans propagation immédiate.
### Niveau 4 — Hook git pre-commit (en cours)
**Outil** : `.git/hooks/pre-commit` qui lance `drift_audit --strict` (exit 1 si drift_count > 0).
**Action** : aucun commit ne peut introduire un drift.
**Garantie** : la branche ne peut pas régresser en cohérence.
### Niveau 5 (objectif futur) — Data-binding par construction
**Pattern** : les HTML utilisent `v?` rempli au runtime par `auto-info.js` lisant la SSoT. Le code Python lit `OLYMPUS_VERSION` depuis la SSoT au démarrage. Les .md utilisent des includes ou un templating Jinja.
**Garantie** : drift impossible par construction, plus de regex à maintenir.
---
## 🚦 Pattern Mona Lisa appliqué à l'auto-correction
L'auto-correction suit la doctrine Mona Lisa stricte :
1. **Snapshot horodaté** de chaque fichier original avant toute modification → `99_BACKUP/drift_autofix_TIMESTAMP/`
2. **Log d'audit** détaillé de chaque session (avant/après, règles appliquées, fichiers modifiés) → `MNEMOSYNE/02_ETAT/DRIFT_AUDIT_LOG.md`
3. **Aucune suppression** — seulement écriture en place avec backup
4. **Mode safe par défaut** (`--fix`) ne touche que les règles `fix_safe=True` (remplacements non-ambigus). `--fix-aggressive` requis pour les règles ambiguës.
→ En cas d'erreur, le retour arrière est trivial : copier les fichiers du `99_BACKUP/drift_autofix_*` vers leur emplacement d'origine.
---
## 📖 Création d'un nouveau document — naissance auto-cohérente
Tout nouveau document HTML/MD/JSON canonique DOIT respecter ces règles :
### Règle 1 — Pas de chiffres figés
- ❌ Ne jamais écrire « OLYMPUS v10.1.0 » en dur dans un fichier nouveau
- ✅ Utiliser un placeholder (``) ou récupérer depuis la SSoT au runtime
### Règle 2 — Enregistrement dans la SSoT
- Tout nouveau document canonique DOIT être listé dans `OLYMPUS_STATE.json._consumers` (s'il consomme la SSoT) ou `drift_targets.html_actifs_via_data_bind` (s'il est data-bindé) ou `drift_targets.html_offline_via_drift_audit` (s'il a des chiffres en dur scannés par drift_audit).
### Règle 3 — Validation pré-commit
- Avant de commiter un nouveau document, lancer `python drift_audit.py --strict` doit retourner 0.
### Règle 4 — Pattern de copie pour reproduire un doc existant
- Si tu copies un document A pour en créer un document B, tu hérites des éventuels chiffres en dur. Lance `drift_audit --fix` sur le nouveau pour les recaler immédiatement.
---
## 🌐 Lien avec le CODEX-umbrella
L'auto-cohérence est ce qui donne sa **vitalité** au CODEX (système documentaire vivant). Sans elle, le CODEX est une photo statique qui se périme. Avec elle, le CODEX est un organisme qui se maintient à jour de lui-même.
Voir [VOCABULAIRE_OLYMPUS.md § CODEX-umbrella](VOCABULAIRE_OLYMPUS.md) pour la définition complète.
---
## 🔗 Outils en place
| Outil | Localisation | Rôle |
|---|---|---|
| `OLYMPUS_STATE.json` | `C:\OLYMPUS\OLYMPUS_STATE.json` | SSoT — la vérité |
| `drift_audit.py` | `01_SERVEUR/NEXUS/AXIOM/drift_audit.py` | Détecte + corrige |
| CERBER on_startup hook | `01_SERVEUR/CERBER/cerber_server.py` | Auto-fix au boot |
| `DRIFT_AUDIT_LOG.md` | `MNEMOSYNE/02_ETAT/DRIFT_AUDIT_LOG.md` | Journal des auto-fixes |
| Snapshots | `99_BACKUP/drift_autofix_*` | Mona Lisa — retour arrière |
---
## 🎬 Mode opératoire pour Vivien
**Tu n'as plus besoin de gérer les drifts manuellement.** Le système s'occupe de :
- Te détecter une dérive (drift_audit en cours)
- La corriger automatiquement (auto-fix au boot, file watcher)
- Enregistrer chaque action (audit log)
- Préserver le retour arrière (snapshots Mona Lisa)
**Ton seul rôle** :
1. Mettre à jour `OLYMPUS_STATE.json` quand tu fais évoluer le système (ajout module, nouveau port, etc.)
2. Vérifier `DRIFT_AUDIT_LOG.md` de temps en temps si tu veux voir ce que le système a corrigé
3. Si une auto-correction t'a surpris ou cassé quelque chose, le snapshot Mona Lisa est dans `99_BACKUP/drift_autofix_TIMESTAMP/`
---
## 📝 Historique
| Date | Version | Changement | Auteur |
|---|---|---|---|
| 28/04/2026 | v1.0 | Création — formalisation de la doctrine après mise en place de drift_audit --fix + boot integration CERBER | Claude Sonnet 4.6 + Vivien |
---
**Fin de la doctrine.**
---
_Migre F:->C: par docs_portability_light 2026-05-10_