Skip to main content
Welcome. This site supports keyboard navigation and screen readers. Press ? at any time for keyboard shortcuts. Press [ to focus the sidebar, ] to focus the content. High-contrast themes are available via the toolbar.
serard@dev00:~/cv

La séparation qui manquait

Qwant n'est pas un langage. C'est un dossier : des personnes, une société, une relation de travail, des événements, des écrits, des prétentions et des décisions. Le confondre avec un DSL revient à confondre une phrase avec la grammaire qui permet de l'écrire.

La série adopte donc trois niveaux seulement :

Niveau Fichier Question
M2 dsl.dsl Comment décrit-on un langage métier ?
M1 citizen.dsl, french-labor-2026.dsl, citizen-labor.dsl Quels types permettent de parler d'un litige prud'homal ?
M0 qwant.dsl Quels objets et relations composent ce dossier précis ?
Diagram
Figure 1 — La chaîne compilable. Qwant.Case est un graphe d'instances M0 ; il ne devient jamais une définition de langage.

M2 : le monde qui décrit les langages

Le méta-domaine possède son propre langage ubiquitaire. Une définition de langage contient des modules ; un module possède des concepts ; un concept porte propriétés, relations et invariants. Aggregate, Entity, ValueObject et Enum sont des spécialisations descriptives de Concept.

Le diagramme suivant est généré par MermaidProjector depuis dsl.dsl.

Diagram
Figure 2 — Le méta-modèle M2 décrit les briques DDD utilisables par les langages M1.

Ce M2 est auto-décrit : le bootstrap C# sait lire la forme YAML minimale, puis le compilateur vérifie que dsl.dsl contient bien les concepts nécessaires pour décrire dsl.dsl. Il n'est pas nécessaire d'introduire un M3 métier dans cette série.

M1 : le monde prud'homal composable

Trois langages conservent leurs frontières :

  • Citizen possède Actor, Fact, Assertion, Evidence et Provenance ;
  • FrenchLabor2026 possède Employee, Company, EmploymentContract et EmploymentRelationship ;
  • CitizenLabor compose les deux et ajoute LaborClaim, PrudhomalProceeding, Judgment et Appeal.

Le shared kernel est petit : identifiants, dates, références et provenance. Un licenciement n'est pas déplacé dans Citizen ; une pièce n'est pas redéfinie dans chaque domaine juridique.

Diagram
Figure 3 — Le monde prud'homal M1 résulte d'une composition explicite, sans grand héritage juridique transversal.

M0 : le dossier Qwant

Le niveau M0 contient des identités concrètes. audit-cdc désigne un événement ; qwant-uses-bing une observation soutenue par P31 ; ASSERT-AUDIT-CONCEALMENT la proposition contestée selon laquelle Bing aurait été dissimulé pendant l'audit.

Cette différence est décisive. Une pièce peut soutenir une assertion sans rendre cette assertion vraie. L'arrêt de 2022 est représenté par ASSESSMENT-CA-2022 et relié à l'assertion : l'appréciation de la cour ne réécrit ni la pièce ni l'événement.

Diagram
Figure 4 — Projection M0 de qwant.dsl. Les cylindres sont des pièces, les losanges des assertions et les rectangles des faits, claims ou appréciations.

Où DDD et DSL s'intriquent

DDD fournit les frontières et les responsabilités : qui possède Fact ? qui peut qualifier une rupture ? où vit la provenance ? Le DSL rend ces décisions écrites, parseables et vérifiables.

L'intrication n'est donc pas « DDD produit forcément du code ». Elle se situe dans quatre opérations :

  1. extraire le vocabulaire avec les experts ;
  2. placer chaque concept dans un bounded context ;
  3. écrire les invariants qui empêchent les glissements de sens ;
  4. compiler les modèles concrets contre ce vocabulaire.

La suite commence par le sommet : dsl.dsl, le langage des langages.

⬇ Download