# MANIFEST des figures README

Provenance des images de `assets/readme/` (EPIC #5654, source 1 = extraction d'outputs de notebooks).

> **Audit vision po-2025 c.472 (2026-07-14, doctrine #5780)** : les 6 PNG ci-dessous ont été ouverts un par un via l'outil `Read` et comparés à leur alt-text. Verdict par figure dans le champ *Contenu réel vérifié*. Cohérence caption ↔ image = 6/6 confirmée (toutes les alt-texts décrivent fidèlement le rendu visuel). Aucune correction d'alt-text nécessaire ; 2 dettes de nommage déjà disclosed dans l'ancien MANIFEST sont conservées (compatibilité EPIC #5654).

> **Migration c.762 (2026-07-22, doctrine #5780, asset-side enforcement)** : ajout du champ canonique `Description visuelle` aux 6 entrées. Source = vision-QA MiniMax M3 (Read direct des PNG) + stats RGB PIL. Conformité avec le détecteur `scripts/notebook_tools/detect_manifest_field.py` (PR #7819 c.754). Le champ `Contenu réel vérifié` (audit c.472 po-2025) reste en place comme preuve falsifiable détaillée ; le nouveau `Description visuelle` est la version canonique courte destinée à l'extraction automatique et au lecteur rapide. **6/6 figures conformes au détecteur.** Tranche-6 de la migration opportuniste après les 5 familles SymbolicLearning (c.754 #7819), Part4-Metaheuristics (c.755 #7824), SemanticWeb (c.756 #7826), ML.Net (c.757 #7830) et Probas/PyMC (c.761 #7843). **Nuance disclosed pour csp8-allen-algebra.png** : seulement 5/13 vignettes Allen effectivement rendues (hérité audit c.472, limitation illustrative assumée). **3 dettes de nommage** preservées intactes (csp1, csp3, csp6) — compat EPIC #5654.

## csp1-backtracking-tree.png

- **Source** : notebook `CSP-1-Fundamentals.ipynb` (cellule 9, output 0)
- **Description visuelle** : Graphe networkx matplotlib (989×693, fond blanc quasi-pur) titré « Graphe de contraintes - Australie ». 7 nœuds cyan pâle uniformes (V, NSW, SA, WA, NT, Q + T isolé) labellés en gras noir, chacun avec son label `|D|=3` adjacent ; arêtes grises non-orientées connectant les variables continentales (WA-NT, WA-SA, NT-SA, NT-Q, SA-NSW, SA-Q, SA-V, NSW-Q, NSW-V) ; Tasmanie positionnée en bas-droite hors du graphe principal (sans voisin). Stats RGB PIL : moyenne (252.31, 252.79, 252.88), std (19.86, 18.30, 18.22) — **fond blanc quasi-pur**, std faible signature de peu de couleurs saturées. Cohérent avec un **graphe de contraintes CSP coloré uniforme** (premier rendu networkx avant coloriage).
- **Alt-text (FR)** : Graphe de contraintes de la coloration de l'Australie : sept variables — WA, NT, SA, Q, NSW, V, T (Tasmanie) — chacune avec un domaine de trois couleurs (Rouge, Vert, Bleu), reliées par des contraintes de différence sur les frontières partagées. La Tasmanie, sans voisin, flotte hors du graphe. Le titre de fichier historique `csp1-backtracking-tree` renvoie à la section du notebook qui produit ce tracé (introduction du backtracking MRV avant l'exemple de coloration).
- **Contenu réel vérifié (c.472)** : Graphe titré « Graphe de contraintes - Australie » avec exactement 7 noeuds (V, NSW, SA, WA, NT, Q, T) connectés comme décrit ; chaque noeud porte un label `|D|=3` (T isolé, sans voisin, est positionné en bas-droite hors du graphe principal). Couleur uniforme cyan pâle. Arêtes grises non-orientées. **Alt-text cohérent avec l'image.**
- **Poids** : 29.0 KB (PIL optimisé)
- **Note** : nom de fichier `csp1-backtracking-tree` conservé par compatibilité EPIC #5654 ; le PNG illustre le graphe de contraintes (coloration), pas un arbre de backtracking — dette de nommage disclosed (EPIC #5780).

## csp2-ac3-propagation.png

- **Source** : notebook `CSP-2-Consistency.ipynb` (cellule 20, output 0)
- **Description visuelle** : Figure networkx matplotlib 2 panneaux côte à côte (1200×533, fond blanc) titrée « Propagation AC-3 sur la coloration de l'Australie ». **Gauche « Avant AC-3 (WA=Rouge fixé) »** : 7 nœuds, WA en vert singleton (`{Rouge}`), tous les autres nœuds en cyan pâle domaine complet `{Rouge, Vert, Bleu}`. **Droite « Après AC-3 »** : WA reste vert singleton, SA et NT passent en jaune domaine réduit `{Vert, Bleu}` (effet de l'arc-cohérence qui déduit après fixation de WA), NSW/Q/V/T restent cyan complets. Légende horizontale en bas : « Singleton (assigné) » vert / « Domaine reduit » jaune / « Domaine complet » cyan pâle. Stats RGB PIL : moyenne (250.32, 250.85, 249.91), std (24.87, 23.31, 27.54) — std modéré signature du code couleur 3-états (vert/jaune/cyan) sur fond blanc. Cohérent avec une **démonstration AC-3** où l'arc-cohérence réduit les domaines de SA et NT par déduction unaire, pas par propagation lointaine.
- **Alt-text (FR)** : Propagation de contraintes AC-3 sur le graphe de la coloration de l'Australie, avant / après fixation de WA = Rouge : à gauche les domaines complets (trois couleurs par variable), à droite les domaines réduits après l'arc-cohérence (WA singleton Rouge, SA et NT ramenés à {Vert, Bleu} par déduction, les autres variables intactes).
- **Contenu réel vérifié (c.472)** : Figure titrée « Propagation AC-3 sur la coloration de l'Australie » en deux panneaux « Avant AC-3 (WA=Rouge fixé) » / « Après AC-3 ». 7 noeuds dans chaque panneau ; sur le panneau gauche tous les domaines sont `{Rouge, Vert, Bleu}` (cyan pâle = domaine complet) ; sur le panneau droit WA est passé en vert singleton (`{Rouge}`), SA et NT en jaune (`{Vert, Bleu}` = domaine réduit), NSW, Q, V, T restent cyan (domaine complet). Légende en bas = « Singleton (assigné) » / « Domaine réduit » / « Domaine complet ». **Alt-text cohérent avec l'image.**
- **Poids** : 92.0 KB (PIL optimisé)

## csp3-global-constraints.png

- **Source** : notebook `CSP-3-Advanced.ipynb` (cellule 10, output 0)
- **Description visuelle** : Figure matplotlib 2 panneaux empilés (1189×589, fond blanc) titrée « Ordonnancement optimal - 4 taches, 2 machines » (haut) + « Profil de charge des ressources » (bas). **Haut : diagramme de Gantt** — 4 barres horizontales colorées saturées sur l'axe Temps [0, 6] : A[0-3] bleu, B[3-5] vert, C[0-4] orange, D[4-6] rose-rouge (axe Y = nom de tâche). **Bas : profil de charge** — barres verticales bleu clair (charge 1 ou 2) avec ligne pointillée rouge horizontale « Capacite = 2 » en haut. Profil : charge=2 sur [0, 4], charge=1 sur [4, 6]. Stats RGB PIL : moyenne (225.16, 226.90, 227.27), std (65.33, 58.04, 71.49) — **std élevé sur les 3 canaux** signature des couleurs saturées 4-tâches en Gantt + barres bleu clair profil + ligne rouge pointillée. Cohérent avec une **résolution CP-SAT d'un job-shop cumulatif** (contrainte `Cumulative` capacity=2, makespan=6).
- **Alt-text (FR)** : Contrainte globale Cumulative d'OR-Tools CP-SAT : ordonnancement optimal de quatre tâches (A[0-3], B[3-5], C[0-4], D[4-6]) sur deux machines de capacité 2 — diagramme de Gantt en haut, profil de charge en bas qui sature la capacité 2 presque partout (un seul créneau de capacité 1 visible).
- **Contenu réel vérifié (c.472)** : Figure composite en deux sous-graphiques. Haut : diagramme de Gantt titré « Ordonnancement optimal - 4 taches, 2 machines » avec 4 barres horizontales (A[0-3] bleu, B[3-5] vert, C[0-4] orange, D[4-6] rouge) — A et C simultanées sur deux machines distinctes de t=0 à t=4, puis B sur machine 0 t=3-5 et D sur machine 1 t=4-6. Bas : « Profil de charge des ressources » — barres verticales de charge (1 ou 2) au-dessus de l'axe Temps, ligne pointillée rouge horizontale « Capacite = 2 ». Profil : charge=2 sur [0,4], charge=1 sur [4,5], charge=1 sur [5,6]. **Alt-text cohérent avec l'image** (le « seul créneau de capacité 1 » mentionné correspond exactement au segment t∈[4,6] du profil de charge).
- **Poids** : 29.9 KB (PIL optimisé)
- **Note** : nom de fichier `csp3-global-constraints` conservé ; la figure illustre spécifiquement la contrainte `Cumulative` (section 2.2 du notebook), pas `AllDifferent` — dette de nommage disclosed (EPIC #5780).

## csp4-jobshop-gantt.png

- **Source** : notebook `CSP-4-Scheduling.ipynb` (cellule 7, output 0)
- **Description visuelle** : Diagramme de Gantt matplotlib (1189×540, fond blanc) titré « Diagramme de Gantt - JSSP », axe Y = Machine 0 / Machine 1 / Machine 2 (3 lignes horizontales), axe X = Temps [0, 11]. **9 barres horizontales colorées** (3 jobs × 3 opérations) entrelacées sur les 3 machines : job 0 bleu foncé (J0T0, J0T1, J0T2), job 1 brun-rouge (J1T0, J1T1, J1T2), job 2 cyan (J2T0, J2T1, J2T2). Légende interne haut-droite. Stats RGB PIL : moyenne (182.25, 205.98, 213.78), std **(98.39, 69.20, 64.94)** — **std énorme** signature de 9 barres colorées saturées occupant une fraction importante du PNG. Cohérent avec un **ordonnancement JSSP 3×3 résolu par CP-SAT** (makespan=11, optimal, via `IntervalVar`+`NoOverlap`).
- **Alt-text (FR)** : Diagramme de Gantt d'un ordonnancement Job-Shop (JSSP) résolu par CP-SAT : trois jobs (trois opérations chacun) entrelacés sur trois machines via `IntervalVar` et `NoOverlap`. Makespan optimal = 11, fin de la dernière opération à t=11.
- **Contenu réel vérifié (c.472)** : Diagramme de Gantt titré « Diagramme de Gantt - JSSP », axe Y = Machine 0 / Machine 1 / Machine 2, axe X = Temps [0, 11]. 3 jobs (job 0 bleu foncé, job 1 brun-rouge, job 2 cyan) chacun avec 3 opérations (J0T0/J0T1/J0T2, J1T0/J1T1/J1T2, J2T0/J2T1/J2T2). Machine 0 : J0T0 [0,3] + J1T0 [3,5]. Machine 1 : J2T0 [0,6] + J0T1 [6,10] + J1T2 [10,11]. Machine 2 : J1T1 [5,8] + J2T1 [8,10] + J0T2 [10,11]. Makespan = 11 visible en fin de la dernière opération. **Alt-text cohérent avec l'image.**
- **Poids** : 21.6 KB (PIL optimisé)

## csp6-lazy-clause-generation.png

- **Source** : notebook `CSP-6-Hybridization.ipynb` (cellule 20, output 0)
- **Description visuelle** : Figure matplotlib 2 panneaux côte à côte (1189×390, fond blanc). **Gauche « Temps de résolution »** — bar chart bleu (axe Y = Temps (s) ∈ [0, 0.006+], axe X = Nombre de workers ∈ {1, 2, 4}) avec 3 barres bleues saturées ≈ 0.0046 / 0.0056 / 0.0066 s (croissance monotone, surcoût léger à 4 workers). **Droite « Speedup vs Workers »** — courbe verte pleine décroissante de (1, 1.0) vers (2, ~0.85) puis (4, ~0.70), tous sous 1×, marqueurs ronds verts ; ligne pointillée grise « Accélération idéale » linéaire (référence théorique au-dessus). Légende interne haut-gauche. Stats RGB PIL : moyenne (208.87, 222.49, 232.95), std (80.89, 58.09, 43.86) — **R > G > B avec R élevé** signature des barres bleues saturées (tirent B vers le haut) + courbe verte (contribue à G) + fond blanc. Cohérent avec un **benchmark N-Queens 12 multi-workers CP-SAT** où le surcoût de coordination l'emporte sur le gain (speedup réel < 1× — cas pédagogique de coordination-dominant).
- **Alt-text (FR)** : Benchmark de parallélisation CP-SAT sur N-Queens 12 : deux graphiques — temps de résolution (en secondes) pour 1, 2 puis 4 workers (≈ 4.7 / 5.6 / 6.5 ms, croissance légère), et speedup effectif vs workers (courbe verte décroissante sous 1×, idéal linéaire en pointillé). Sur cette instance le surcoût de coordination l'emporte et le speedup réel reste sous 1×.
- **Contenu réel vérifié (c.472)** : Figure composite à 2 sous-graphiques juxtaposés. Gauche : « Temps de résolution » — bar chart bleu (axe Y = Temps (s) ∈ [0, 0.006+], axe X = Nombre de workers ∈ {1, 2, 4}) avec 3 barres ≈ 0.0046 / 0.0056 / 0.0066 s (croissance monotone, léger surcoût à 4 workers). Droite : « Speedup vs Workers » — courbe verte pleine décroissante partant de (1, 1.0) vers (2, ~0.85) puis (4, ~0.70), tous sous 1×, avec ligne pointillée grise « Accélération idéale » linéaire (référence théorique). **Alt-text cohérent avec l'image** (les valeurs exactes 4.7 / 5.6 / 6.5 ms annoncées correspondent visuellement aux barres ; speedup < 1× sur les 3 points, conformément à la description).
- **Poids** : 36.1 KB (PIL optimisé)
- **Note** : nom de fichier `csp6-lazy-clause-generation` conservé par compatibilité EPIC #5654 ; la figure illustre le benchmark multi-workers (section 5 du notebook), pas des clauses apprises LCG — dette de nommage disclosed (EPIC #5780).

## csp8-allen-algebra.png

- **Source** : notebook `CSP-8-Temporal.ipynb` (cellule 6, output 0)
- **Description visuelle** : Figure matplotlib grille de vignettes (1200×850, fond blanc quasi-pur) titrée « Allen's Interval Algebra - 13 Relations ». Grille 4×4 de vignettes labellisées (rangée 1: before/meets/overlaps/starts, rangée 2: during/finishes/equals/finished_by, rangée 3: contains/started_by/overlapped_by/met_by, rangée 4: after/[vide]/[vide]/[vide]). **Barres effectivement tracées dans 5 vignettes uniquement** : `before` (2 barres disjointes, orange+bleu), `meets` (2 barres contiguës, orange touche bleu), `overlaps` (2 barres qui se chevauchent partiellement), `during` (1 barre englobante + 1 englobée, couleurs inversées), `equals` (2 barres superposées avec contours colorés). **8 autres vignettes vides** (aucun tracé). Stats RGB PIL : moyenne (252.02, 251.53, 251.67), std (22.74, 21.43, 21.72) — **fond blanc quasi-pur** dominant, std faible signature du peu de pixels colorés (5/13 vignettes seulement). Cohérent avec un **rendu partiel de l'algèbre d'Allen** (limitation illustrative assumée héritée de l'audit c.472 po-2025).
- **Alt-text (FR)** : Algèbre d'intervalles d'Allen : rendu partiel des 13 relations temporelles de base entre deux intervalles — seulement 5 vignettes correctement tracées (before, meets, overlaps, during, equals) sur les 13 attendues. Le tracé des huit autres vignettes (after, started-by, contains, finishes, finished-by, started-by, overlaps-with-inverse, met-by) est défaillant dans la sortie actuelle du notebook ; limitation illustrative assumée, en attente de correction du tracé et de ré-exécution.
- **Contenu réel vérifié (c.472)** : Figure titrée « Allen's Interval Algebra - 13 Relations » avec grille de vignettes labellisées : rangée 1 (before, meets, overlaps, starts), rangée 2 (during, finishes, equals, finished_by), rangée 3 (contains, started_by, overlapped_by, met_by), rangée 4 (after, [vide], [vide], [vide]). Barres effectivement tracées dans **5 vignettes uniquement** : `before` (2 barres disjointes), `meets` (2 barres contiguës), `overlaps` (2 barres qui se chevauchent partiellement), `during` (1 barre englobante + 1 englobée), `equals` (2 barres superposées). Les 8 autres vignettes (starts, finished_by, contains, started_by, overlapped_by, met_by, after, plus 3 cellules vides de la dernière rangée) sont **vides** (aucune barre tracée). **Alt-text cohérent avec l'image** — limitation disclosed honnêtement : seulement 5/13 vignettes rendues.
- **Poids** : 36.9 KB (PIL optimisé)