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 :
- Gardé Babel comme SSOT (Single Source of Truth) — les fiches propriétaires sont la source autoritaire
- Réécrit
front/build.jspour lire les fiches au lieu des seuls catalogs - 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
relatednon 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/IDpour 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
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émantiquef131fa4— docs: annote HANDOFF-BABEL-FIRST-V2 avec hash commit et tag v0.4.08dfd915— Front Babel-first V2 : restaure le contenu perdu, outil complet3f1de3a— 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 :
- Visualisations manquantes : timeline fine des événements · carte du monde physique · arbre généalogique des programmes
- Export : PDF complet · JSON pour intégration tierce · Markdown avec lien SSOT
- Annotation : annotations utilisateur (localStorage) · commentaires sur les fiches
- Performance : indexation full-text côté serveur · cache en mémoire des requêtes fréquentes
- 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/