Trois propriétaires sémantiques
Citizen répond à une question générale : comment un citoyen constitue-t-il un dossier sourcé ? Il possède Fact, Assertion, Evidence et Provenance.
FrenchLabor2026 répond à une autre question : comment représenter une relation de travail française ? Il possède Employee, Company, EmploymentContract, la classification, les mesures disciplinaires et la rupture.
CitizenLabor ne recopie pas ces définitions. Il importe les deux langages et possède leur articulation : CitizenLaborCase, LaborClaim et PrudhomalProceeding.
Le shared kernel minimal
Le partage porte sur les mécanismes qui doivent signifier exactement la même chose partout : identifiants, date valide, date de connaissance, chemin de pièce, empreinte et provenance. Il ne contient pas Dismissal, BingDataTransfer ou SyntecClassification.
Cette retenue évite deux erreurs opposées :
- tout placer dans un gigantesque « droit français » couplé à chaque modification ;
- recopier Evidence dans chaque contexte et perdre la traçabilité entre eux.
Composition textuelle
language:
id: CitizenLabor
level: M1
imports:
- { id: Citizen, path: citizen.dsl }
- { id: FrenchLabor2026, path: french-labor-2026.dsl }
concepts:
CitizenLaborCase:
kind: aggregate
extends: Citizen.CitizenCase
relationships:
employment:
target: FrenchLabor2026.EmploymentRelationship
cardinality: onelanguage:
id: CitizenLabor
level: M1
imports:
- { id: Citizen, path: citizen.dsl }
- { id: FrenchLabor2026, path: french-labor-2026.dsl }
concepts:
CitizenLaborCase:
kind: aggregate
extends: Citizen.CitizenCase
relationships:
employment:
target: FrenchLabor2026.EmploymentRelationship
cardinality: oneLes préfixes sont des frontières, pas du bruit. Citizen.Fact et FrenchLabor2026.EmploymentRelationship montrent immédiatement qui peut changer leur définition.
Les trois sources M1 sont citizen.dsl, french-labor-2026.dsl et citizen-labor.dsl. Elles rendent maintenant possible la description du cas Qwant en M0.