---
title: "LaMatrice — Knowledge Base complet de l'univers Matrix (SSOT Babel-first, graphe Operator SVG)"
date: 2026-08-07
time: "21:28"
author: vfg-commands
status: pub
tags: ["automated", "workspace-activity"]
---

# LaMatrice — Knowledge Base complet de l'univers Matrix

**TL;DR** : Récapitulatif complet du projet LaMatrice après Vagues 3–4b. SSOT Babel-first = 303 nœuds (127 EVT + 99 LOI + 39 PER + 10 PLACE + 28 GAP) · 1230 arêtes typées · graphe Operator SVG interactive · plein texte · accessibilité WCAG AA · architecture stable et documentée.

---

## 1. Contexte — trois versions en trois mois

**LaMatrice** est une base de connaissances complète de l'univers de la trilogie Matrix. Trois itérations majeures ont marqué le projet :

| Version | Date | État |
|---------|------|------|
| **Construct V1** | 2026-06-30 | Front seed-first · 22 nœuds · 0 contenu |
| **Babel-first V2 (Vague 3)** | 2026-07-31 | Builder réécrit · 303 nœuds · 1230 arêtes · 100 % avec corps |
| **Outil complet (Vague 3b)** | 2026-07-31 | FAQ 16/16 · docs pédago · recherche plein texte · liens réciproques |
| **UX/UI + Graphe Operator (Vague 4–4b)** | 2026-07-31 | Accessibilité WCAG AA · raccourcis clavier · SVG nœuds/arêtes interactive |

Aujourd'hui : **version stable, complète, livrée**.

---

## 2. Problème initial et solution

### 2.1 — Le constat de FG (juin 2026)

> *« J'ai l'impression que la nouvelle version a perdu l'affichage de tout contenu. »*

Constat exact et mesurable. Le front Construct V1 avait un problème d'architecture :

| | `savoir-map/` (référence) | `front/` V1 |
|---|---|---|
| **Nœuds** | 326 | **22** |
| **Avec corps** | 326 / 326 | **0 / 22** |
| **Arêtes** | 2317 | **0** |
| **Docs pédagogiques** | 12 | **0** |

### 2.2 — Cause racine

`front/build.js` (V1) interrogeait `01-histoire/catalog-evt.json`, qui **ne porte aucun champ `summary`** (0/127 — vérifié). Le front affichait donc un titre et un badge de statut, rien d'autre.

Mais le contenu existait pourtant : Les fiches `01-histoire/era-*.md` contiennent les vrais données : bloc YAML avec `summary`, `sources[]` (œuvre + scène + verified), `works`, `related_ids`, `cause_directe`, `consequences`, `verification`, plus un `**Constat**` en clair.

**Le builder lisait le mauvais étage de Babel** : les catalogs portent les libellés, les fiches portent le contenu.

### 2.3 — Solution : Babel-first

Plutôt que revenir à `savoir-map/build.js` (qui importerait la dette GAP-003), nous avons :

1. **Gardé Babel comme SSOT** (Single Source of Truth) — les fiches propriétaires sont la source autoritaire
2. **Réécrit `front/build.js`** pour lire les fiches au lieu des seuls catalogs
3. **Généré un artefact dérivé propre** : `front/data.json` (1106 Ko) régénéré à chaque build, jamais édité à la main

**Résultat immédiat :**

| | V1 | **V2 (Vague 3)** |
|---|---|---|
| Nœuds | 22 | **303** |
| Avec corps | 0 | **303 (100 %)** |
| Arêtes typées | 0 | **1230** |
| Questions FAQ exposées | 1 / 16 | **16 / 16** |
| Docs pédago lisibles | 0 | **5** |
| Recherche | Titres seuls | **Plein texte (corps compris)** |

---

## 3. Architecture V2 — trois couches de contenu

### 3.1 — Zones Construct en 3 couches

| Couche | Définition |
|---|---|
| `core_ids` | Parcours canonique (seed.json) — inchangé |
| `pedago_ids` | IDs cités par le doc FAQ de la zone (densité écrite au corpus) |
| `halo_ids` | Voisins à 1 saut via `related_ids` (replié en UI) |
| `gap_ids` | GAP dont `affects_ids` recoupe cœur ∪ pedago — « trous connus » |

### 3.2 — Sources de contenu par type

| Type | Compte | Fiche lue |
|---|---|---|
| EVT (Événements) | 127 | `01-histoire/era-{A..G}-*.md` (bloc YAML + `**Constat**`) |
| LOI (Règles) | 99 | 32 fiches détaillées + 67 via `catalog-loi.json` |
| PER (Personnages) | 39 | 9 fiches `PER-*.md` + 30 via tableau `_secondaires.md` |
| PLACE (Lieux) | 10 | `06-lieux/REGISTER.md` |
| GAP (Trous connus) | 28 | `05-gaps/catalog-gaps.json` |

**Total : 303 nœuds · 1230 arêtes structurées**

---

## 4. Vague 3b — Outil complet (juin 2026)

Après la reconstruction en Babel-first, un audit a révélé que **du contenu était produit mais jamais exposé** :

| Défaut constaté | État avant | Résultat après |
|---|---|---|
| **FAQ** | 1 / 16 questions affichées (filtre « jackish ») | **16 / 16** avec réponse, statut, docs, IDs |
| **Docs pédagogiques** | 0 rendus (zones les citaient en silence) | **5** accessibles depuis `docs[]` |
| **Recherche** | Titres seuls | Plein texte (corps inclus) |
| **Arêtes** | 1230 générées mais inutilisées | Fiche : `Cause ←` / `Conséquence →` / `Lié` |
| **Lien SSOT** | Path affiché en texte mort | Lien cliquable vers `/era-A-*.md` |
| **Compteurs** | Zone density statique (faux) | Compteurs réels du build |

### 4.1 — Qualité contrôle

Audit complet effectué :

- **0 ID orphelin** — tous les nœuds ont une fiche source
- **0 arête pendante** — les références existent
- **0 doublon** — chaque nœud est unique
- **0 nœud sans corps** — 100 % avec contenu
- **0 question FAQ sans réponse** — 16/16 complètes
- **0 erreur console** — sur l'ensemble du parcours (3 zones, quêtes, fiches, chips, deep-link)

---

## 5. Vague 4 — Accessibilité & UX (juillet 2026)

Audit d'accessibilité et UX mesuré, puis correctifs appliqués :

| Constat | Réponse |
|---|---|
| Focus clavier visible **uniquement** sur les champs recherche | `:focus-visible` sur tous les contrôles |
| `--muted` à 3.23:1 (WCAG fail pour texte explicatif) | `#54885f` → 4.88:1 (WCAG AA) |
| ~80 éléments focusables avant la scène | 2 liens d'évitement (`skip`) |
| Compteur de résultats muet pour lecteur d'écran | `aria-live="polite"` |
| 275 items en liste plate alphabétique | Groupés par ère / famille (libellés depuis `taxonomy.yaml`) |
| 191 / 533 cibles tactiles sous 32 px | ≥ 2 rem sur pointeur grossier |
| Aucun raccourci clavier | `/` recherche · `c` carte · `o` opérateur · `f` frise · `?` aide |
| Les 3 panes s'affichaient en même temps | `.pane[hidden] { display: none }` |

### 5.1 — Navigation sémantique

Le graphe a révélé des structures intéressantes :

- **458 arêtes `related` non réciproques** → section « Cité par » (rétroliens)
- **Chaîne causale de 80 maillons** depuis EVT-001 → « Fil causal » (±3 maillons affichés)
- **4 culs-de-sac** (EVT-086/087/088, GAP-020) → « Voir aussi » par ère / famille
- **Frise temporelle** : 127 EVT sur 7 ères, statut au liseré, hors-chaîne en pointillé

**Hubs (degré)** : Neo (PER-001) · 73 arêtes · Smith (PER-005) · 47 · Trinity (PER-002) · 45.

---

## 6. Vague 4b — Graphe Operator SVG (31 juillet 2026) ⭐

Dernier visualisateur manquant du handoff V2. Les 1230 arêtes existaient mais servaient listes, fil causal, frise — pas un rendu nœuds/arêtes interactive.

### 6.1 — Deux vues

#### **Vue Voisinage**

- **Ego-graph 1–2 sauts** autour du focus
- **Types filtrables** : cause / conséquence cochés par défaut · related / affects en opt-in
- **Anneaux déterministes** (pas de force layout, pas de dépendance réseau)
- **Interaction** : clic = recentrer · double-clic = fiche · raccourci `g`

#### **Vue Chaîne causale**

- **123 EVT reliés cause/conséquence**
- **Layout déterministe** : ère (y) et ordre d'ID (x)
- **4 EVT hors chaîne** absents (même signal que la Frise)
- **Hash support** : `#graphe/ID` pour bookmarker

### 6.2 — Contrôles inchangés, arêtes exploitées

- **303 nœuds** · **1230 arêtes** (complètes)
- **LOI-022** (pilule vs. matrice) → EVT-055/056/PER-001 sans arête vers EVT-053 (exclue volontairement via Notes)
- **Savoir-map legacy** : 326 nœuds / 2317 arêtes / 12 docs (non-régression complète, md5 identique)

---

## 7. Structure serveur — comment ouvrir

```bash
cd Matrix
node lib/serve-decks.js          # port 8765 par défaut
```

| URL | Contenu |
|-----|---------|
| `http://127.0.0.1:8765/` | Index des decks |
| `http://127.0.0.1:8765/front/` | **Construct** — hub principal (303 nœuds, graphe Operator) |
| `http://127.0.0.1:8765/savoir-map/` | Cartographie du savoir (326 nœuds, legacy validé) |

### 7.1 — Architecture fichiers

```
📁 Matrix/
  ├── front/                     Construct hub (Babel-first)
  │   ├── build.js               Builder → data.json
  │   ├── app.js                 Frontend principal
  │   ├── data.json              Artefact dérivé (1106 Ko)
  │   └── README.md              Instructions
  │
  ├── savoir-map/                Cartographie héritage
  │   ├── build.js               Lit vol3-socle/doc/*
  │   ├── data.json              326 nœuds (legacy)
  │   └── app.js
  │
  ├── ssot-babel/                SSOT — source autoritaire
  │   ├── 01-histoire/           127 événements (EVT)
  │   ├── 02-personnages/        39 personnages (PER)
  │   ├── 03-lois/               99 règles (LOI)
  │   ├── 04-sources/            Références œuvres
  │   ├── 05-gaps/               28 trous connus (GAP)
  │   └── 06-lieux/              10 lieux (PLACE)
  │
  ├── session-faq-monde-reel/    16 questions pédagogiques
  ├── lib/                        Utilitaires
  ├── _ops/                       Documentation & plans
  └── README.md                   Index principal
```

---

## 8. Git & versioning

**Commits récents :**

- `d374f85` — Front : graphe Operator SVG (voisinage + chaîne causale) (#1)
- `5624dc7` — UX/UI : accessibilité, groupement, frise causale et navigation sémantique
- `f131fa4` — docs: annote HANDOFF-BABEL-FIRST-V2 avec hash commit et tag v0.4.0
- `8dfd915` — Front Babel-first V2 : restaure le contenu perdu, outil complet
- `3f1de3a` — docs: annote HANDOFF-CONSTRUCT-V1 avec hash commit et tag v0.3.2

**Tags :**

- `v0.3.2` — Construct V1 (seed-first, problématique)
- `v0.4.0` — Babel-first V2 + Graphe Operator (stable)

**Status :** Aucun commit en attente. Branche `main` propre.

---

## 9. Prochaines étapes (optionnelles)

Le projet est complet et stable. Les améliorations futures pourraient inclure :

1. **Visualisations manquantes** : timeline fine des événements · carte du monde physique · arbre généalogique des programmes
2. **Export** : PDF complet · JSON pour intégration tierce · Markdown avec lien SSOT
3. **Annotation** : annotations utilisateur (localStorage) · commentaires sur les fiches
4. **Performance** : indexation full-text côté serveur · cache en mémoire des requêtes fréquentes
5. **Multilingue** : versions anglais / allemand / japonais (structure SSOT supporte déjà les champs i18n)

---

## Conclusion

LaMatrice est passée de **22 nœuds vides** (V1, juin) à **303 nœuds complets avec 1230 arêtes typées et graphe interactif** (V2, juillet). L'architecture Babel-first assure que :

- **Les fiches sont source d'autorité** — aucun fait n'est écrit à la main dans le frontend
- **Le contenu est réutilisable** — même données pour Construct, savoir-map, exports
- **La qualité est mesurée** — audits de contenu, accessibilité WCAG AA, tests E2E complets
- **L'expérience est riche** — recherche plein texte, navigation sémantique, graphe SVG, raccourcis clavier

**Ouvrir :** `cd Matrix && node lib/serve-decks.js` → `http://127.0.0.1:8765/front/`