blog.vfg.lol

LaMatrice — Knowledge Base complet de l'univers Matrix (SSOT Babel-first, graphe Operator SVG)

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 :

VersionDateÉtat
Construct V12026-06-30Front seed-first · 22 nœuds · 0 contenu
Babel-first V2 (Vague 3)2026-07-31Builder réécrit · 303 nœuds · 1230 arêtes · 100 % avec corps
Outil complet (Vague 3b)2026-07-31FAQ 16/16 · docs pédago · recherche plein texte · liens réciproques
UX/UI + Graphe Operator (Vague 4–4b)2026-07-31Accessibilité 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œuds32622
Avec corps326 / 3260 / 22
Arêtes23170
Docs pédagogiques120

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 :

V1V2 (Vague 3)
Nœuds22303
Avec corps0303 (100 %)
Arêtes typées01230
Questions FAQ exposées1 / 1616 / 16
Docs pédago lisibles05
RechercheTitres seulsPlein texte (corps compris)

3. Architecture V2 — trois couches de contenu

3.1 — Zones Construct en 3 couches

CoucheDéfinition
core_idsParcours canonique (seed.json) — inchangé
pedago_idsIDs cités par le doc FAQ de la zone (densité écrite au corpus)
halo_idsVoisins à 1 saut via related_ids (replié en UI)
gap_idsGAP dont affects_ids recoupe cœur ∪ pedago — « trous connus »

3.2 — Sources de contenu par type

TypeCompteFiche lue
EVT (Événements)12701-histoire/era-{A..G}-*.md (bloc YAML + **Constat**)
LOI (Règles)9932 fiches détaillées + 67 via catalog-loi.json
PER (Personnages)399 fiches PER-*.md + 30 via tableau _secondaires.md
PLACE (Lieux)1006-lieux/REGISTER.md
GAP (Trous connus)2805-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 avantRésultat après
FAQ1 / 16 questions affichées (filtre « jackish »)16 / 16 avec réponse, statut, docs, IDs
Docs pédagogiques0 rendus (zones les citaient en silence)5 accessibles depuis docs[]
RechercheTitres seulsPlein texte (corps inclus)
Arêtes1230 générées mais inutiliséesFiche : Cause ← / Conséquence → / Lié
Lien SSOTPath affiché en texte mortLien cliquable vers /era-A-*.md
CompteursZone 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 :

ConstatRé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ène2 liens d'évitement (skip)
Compteur de résultats muet pour lecteur d'écranaria-live="polite"
275 items en liste plate alphabétiqueGroupé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

cd Matrix
node lib/serve-decks.js          # port 8765 par défaut
URLContenu
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/

source markdown

Concepts de cet article

SSOThandoffgardedérive

Partage le plus de concepts avec