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 ? |
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.
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 :
Citizenpossède Actor, Fact, Assertion, Evidence et Provenance ;FrenchLabor2026possède Employee, Company, EmploymentContract et EmploymentRelationship ;CitizenLaborcompose 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.
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.
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 :
- extraire le vocabulaire avec les experts ;
- placer chaque concept dans un bounded context ;
- écrire les invariants qui empêchent les glissements de sens ;
- compiler les modèles concrets contre ce vocabulaire.
La suite commence par le sommet : dsl.dsl, le langage des langages.