Quinze ships pour un compilateur du droit
La roadmap intégrée comprend quinze ships : douze principaux et trois ships dits "-bis" qui correspondent à des extractions ou des ponts spécialisés. Chaque ship apporte des éléments de la liste A (manques), active des éléments de la liste B (beautés) et atténue des éléments de la liste C (limites), tels que définis dans la Partie 17 — Méta-critique. La roadmap n'est pas un calendrier — c'est un graphe de dépendances qui dit ce qui doit exister avant quoi, et ce qui peut avancer en parallèle.
Ship 1 — Smoke Dumas (le compile error politique)
Le ship fondateur. Un seul cas historique typé : la décision Conseil constitutionnel n°95-65 du 11 janvier 1995. Produit un compile error tant que la procédure démocratique requise n'est pas explicitement déclarée. Contenu : Common.France1995.Erard.Dsl + Law.France1995.Erard.Dsl + Commons.France1995.Erard.Dsl + Law.Commons.Bridge (cinq sous-projets : Core, Roslyn, SourceGenerator, Analyzers, Cli) + Law.France1995.Sample. Active B.5 (transparence radicale par la démonstration). C'est la preuve de concept sur laquelle tout le reste s'appuie — cf. Partie 10 — Trace Dumas pour le détail du compile error en huit étapes.
Ship 2 — Law.QualityGate (couverture juridique alinéa par AC)
La transposition du quality gate existant au texte de loi. Introduit [VagueByDesign] (A.1), active l'auto-réflexivité des cadres (B.7) et la transparence (B.5), et ajoute la mention obligatoire dans les diagnostics (C.3 : "Ce résultat est calculé par compilation. Il ne remplace pas un avis juridique humain."). Cf. Partie 11 — Law.QualityGate.
Ship 3 — Citizen.Dsl (le citoyen comme locuteur)
La racine Citizen.Dsl + une première instance Citizen.France2026.Etalab.Dsl + le bridge Law.Citizen.Bridge (cinq sous-projets). Active B.6 (élimination structurelle du non-recours — Mathilde compile son cas et découvre ses droits) et B.10 (émancipation). Commence à baisser la barrière d'entrée (C.2). Cf. Partie 8 — Commons.Dsl et Citizen.Dsl.
Ship 4 — UI Blazor WASM (le droit dans le navigateur)
Un éditeur Roslyn-in-browser pour les citoyens sans environnement de développement. Effondre la barrière d'entrée (C.2) en permettant à Mathilde de compiler son cas depuis un navigateur web, sans installer .NET ni Visual Studio. Active B.6 et B.10 en les rendant accessibles au grand public.
Ship 4-bis — Lex Studio (VSCodium pour juristes)
Le pattern RStudio/Rider/Jupyter/Overleaf appliqué au droit. Distribution VSCodium + neuf extensions Lex.* qui masquent C# derrière une UI orientée juriste. Résout A.7 (front-end syntaxique juriste-friendly) et A.8 (multilinguisme via .resx). Active B.1 (formation juridique — l'étudiant en droit travaille dans un IDE pensé pour lui). Résout C.6.b (asymétrie d'accès pour les juristes) et rend C.12 (écart culturel) opérationnellement gérable. Cf. Partie 15 — Lex Studio.
Ship 5 — Packaging NuGet juridique
Packaging .nupkg avec RepositoryCommit cryptographique, signature X.509, [ReleaseNotes] typés. Active B.2 (reproductibilité scientifique — joindre le .nupkg au papier de recherche). Atténue C.7 (signatures contre la désinformation). Cf. Partie 13 — Versioning, packaging, distribution.
Ship 5-bis — Law.Dsl.MetaModel + LawDslGenerator (le méta-générateur)
Refactoring du Ship 1 pour extraire les descriptions M2 et régénérer les instances. Le méta-générateur lit une LegalDslDefinition (l'intention d'un cadre) et émet le cadre complet — 90% du squelette est généré, l'auteur n'écrit que la définition et les méthodes Validate(). Atténue C.1 en réduisant le coût marginal de typage d'un facteur dix environ. Cf. Partie 7 — Law.Dsl + LawDslGenerator.
Ship 6 — Registre et distribution
Registre de démonstration BaGet local + workflow consommateur + advisories LEGAL-2026-* (type GHSA pour le droit). Résout A.5 (effet rétroactif via versioning), intègre A.13 (pipeline LLM/Legifrance). Active B.2 et B.6. Atténue C.8 via un daemon my-cases-watcher qui recompile les cas citoyens toutes les 24 heures et notifie les changements pertinents.
Ship 6-bis — Catala.Bridge (le pont français le plus important)
Le pont vers Catala pour les calculs monétaires. Résout A.12 (calcul monétaire — Catala excelle là-dedans, le projet s'appuie dessus au lieu de le concurrencer). Active B.4 (effet international — la collaboration franco-française renforce la crédibilité internationale) et B.6 (le CIT001 de Mathilde inclut maintenant le montant exact de la Prime d'activité, calculé par Catala). Atténue C.5 en réduisant la dépendance à l'écosystème Microsoft via l'intégration d'OCaml.
Ship 7 — Adoption institutionnelle
Le premier cadre officiel : Etalab ou la DINUM publie Common.France2026.Etalab.Dsl signé. C'est un acte politique, pas technique — le Ship 7 est le moment où une institution de l'Etat reconnaît le système comme canal de publication juridique. Active B.4 (avantage géopolitique français). Atténue C.1 en réduisant l'asymétrie du typage par l'adoption massive.
Ship 8 — Jurisprudence.Dsl (l'interprétation sans modification)
Le DSL pour la jurisprudence : [Arret], [Considerant], [Reverse(typeof(ArticleX))], [Confirme], [InterpretationRetenue]. Résout A.2 (jurisprudence comme couche d'interprétation) et A.3 (hiérarchie des normes). Active B.9 (paix par l'explicite — les divergences de jurisprudence sont exhibées comme données typées). Atténue C.9 (la marge d'appréciation judiciaire est mieux modélisée tout en restant préservée).
Ship 9 — Tests, simulations, observabilité
Tests de propriétés sur les invariants politiques, simulations what-if, observabilité OpenTelemetry anonymisée à k-anonymity-50, mirrors HA. Résout A.4 (FeatureTensionAnalyzer) et A.6 (multi-juridictionnel via Law.International.Bridge). Active B.3 (droit climatique compilable via Common.Climate.Dsl) et B.8 (archéologie juridique computable). Atténue C.10 (Cybersyn — IsHumanRequired flags systématiques) et C.4 (ratio [VagueByDesign] minimum 5% vérifié en CI).
Ship 10 — Judge.Dsl + Lawyer.Dsl (les autres acteurs du droit)
Les DSLs pour les juges et les avocats. Résout A.9 — le système modélise enfin les quatre acteurs du droit : législateur, citoyen, juge, avocat. Active B.1 (formation juridique pour les professions judiciaires) et B.10 (émancipation étendue aux justiciables assistés par des outils typés).
Ship 11 — OralCitationIndexer + AdditionalFiles
L'oralité juridique comme données première classe. Enregistrements audio, transcriptions, indexation par timestamp, vérification d'intégrité par hash, lecture au timestamp précis dans Lex Studio, validation par STT Whisper en CI. Résout A.7 (la langue juridique orale est tracée). Active B.5 (fin de la séparation loi votée / débat parlementaire — le citoyen remonte à la minute du débat). Atténue C.15 (l'oralité juridique est tracée cryptographiquement).
Ship 12 — Logique non-monotone + SIG
Moteur Datalog/ASP pour la non-monotonie du droit + NetTopologySuite pour les calculs géographiques. Résout A.10 (non-monotone) et A.11 (géographie fine). Active B.3 (climat = géographie : les zones de protection environnementale sont des polygones vérifiables) et B.4 (effet international — le SIG est universel).
Graphe de dépendances
Le graphe suivant montre les dépendances strictes entre ships. Toute flèche signifie "le ship source doit être terminé avant que le ship cible puisse commencer".
Ship 1 (Smoke Dumas) ──┬──→ Ship 2 (QualityGate) ──┬──→ Ship 3 (Citizen.Dsl)
│ │
└──→ Ship 9 (Tests/Obs) ├──→ Ship 4 (Blazor citoyen)
├──→ Ship 4-bis (Lex Studio juriste)
├──→ Ship 5 (packaging)
└──→ Ship 8 (Jurisprudence)
Ship 5 ──→ Ship 5-bis (LawDslGenerator) ──→ Ship 6 (registre) ──┬──→ Ship 6-bis (Catala.Bridge)
├──→ Ship 7 (adoption Etalab)
└──→ Ship 11 (oralité)
Ship 8 (Jurisprudence) ──→ Ship 10 (Judge.Dsl + Lawyer.Dsl)
Ship 9 ──→ Ship 12 (non-monotone + SIG)Ship 1 (Smoke Dumas) ──┬──→ Ship 2 (QualityGate) ──┬──→ Ship 3 (Citizen.Dsl)
│ │
└──→ Ship 9 (Tests/Obs) ├──→ Ship 4 (Blazor citoyen)
├──→ Ship 4-bis (Lex Studio juriste)
├──→ Ship 5 (packaging)
└──→ Ship 8 (Jurisprudence)
Ship 5 ──→ Ship 5-bis (LawDslGenerator) ──→ Ship 6 (registre) ──┬──→ Ship 6-bis (Catala.Bridge)
├──→ Ship 7 (adoption Etalab)
└──→ Ship 11 (oralité)
Ship 8 (Jurisprudence) ──→ Ship 10 (Judge.Dsl + Lawyer.Dsl)
Ship 9 ──→ Ship 12 (non-monotone + SIG)Les ships parallélisables (si les contributeurs sont assez nombreux) : Ships 2 et 9, Ships 3 et 4 et 4-bis, Ships 5 et 8, Ships 6-bis et 11, Ships 10 et 12. Jusqu'à cinq ships peuvent avancer en parallèle simultanément.
Limitations non résolues (acceptées comme structurelles)
Certaines limitations de la Partie 17 ne sont résolues par aucun ship, parce qu'elles sont de nature politique ou temporelle, pas technique :
C.1 (asymétrie du typage) — la résolution est l'adoption massive (Ship 7), elle-même politique. Stratégie : patience, modèle B/C, documentation d'onboarding, LawDslGenerator.
C.6.a (asymétrie d'autorité entre publishers) — problème de confiance institutionnelle, hors scope technique. Le ConsensusScorer rend les divergences visibles, mais ne les résout pas.
C.10 (risque Cybersyn) — vigilance permanente, pas un ticket à clore. Manifeste politique du projet, [VagueByDesign] abondants, IsHumanRequired flags.
C.13 (inertie institutionnelle) — délai de dix ans et plus, intrinsèque. Acceptation lucide.
C.14 (fatigue des contributeurs) — pareil que Wikipédia. Documentation, onboarding, mentorat.
L'infrastructure (système fixe)
L'infrastructure complète — des quatre DSLs racines aux bridges, du quality gate à l'UI Blazor, de Lex Studio au registre — représente environ 13 000 lignes de code et environ 263 tests. C'est la taille d'un projet .NET de complexité moyenne, faisable par une personne en 9 à 12 mois.
Le détail par composant :
// Ordres de grandeur — infrastructure seule
// (ni cadres de contenu, ni corpus juridique)
public static class InfrastructureEstimate
{
// Ship 1+2+3 : système Law × Commons + QualityGate + Citizen
public const int CoreSystemLoc = 7_440;
public const int CoreSystemTests = 213;
// Ship 4 : UI Blazor WASM
public const int BlazorLoc = 2_500;
public const int BlazorTests = 20;
// Ship 4-bis : Lex Studio (VSCodium + 9 extensions TypeScript)
public const int LexStudioLoc = 3_000;
public const int LexStudioTests = 30;
// Total infrastructure
public const int TotalLoc = CoreSystemLoc + BlazorLoc + LexStudioLoc; // ~12 940
public const int TotalTests = CoreSystemTests + BlazorTests + LexStudioTests; // ~263
}// Ordres de grandeur — infrastructure seule
// (ni cadres de contenu, ni corpus juridique)
public static class InfrastructureEstimate
{
// Ship 1+2+3 : système Law × Commons + QualityGate + Citizen
public const int CoreSystemLoc = 7_440;
public const int CoreSystemTests = 213;
// Ship 4 : UI Blazor WASM
public const int BlazorLoc = 2_500;
public const int BlazorTests = 20;
// Ship 4-bis : Lex Studio (VSCodium + 9 extensions TypeScript)
public const int LexStudioLoc = 3_000;
public const int LexStudioTests = 30;
// Total infrastructure
public const int TotalLoc = CoreSystemLoc + BlazorLoc + LexStudioLoc; // ~12 940
public const int TotalTests = CoreSystemTests + BlazorTests + LexStudioTests; // ~263
}Le contenu (corpus juridique typé)
Le contenu — le corpus du droit français typé en C# — est d'un tout autre ordre de grandeur. Le Code civil seul représente environ 2 280 articles, soit environ 70 000 lignes de code typé. Le Code du travail : environ 10 000 articles, soit environ 300 000 lignes. Le Code de l'environnement, le Code de la sécurité sociale, le Code de la consommation, le Code de l'éducation, le Code pénal, le Code général des impôts, la Constitution et les décisions du Conseil constitutionnel, la jurisprudence de la Cour de cassation et du Conseil d'Etat : au total, entre 30 000 et 50 000 articles, soit environ 1 200 000 lignes de code typé.
Le ratio infrastructure/contenu
La conclusion est brutale : l'infrastructure, c'est rien — environ 13 000 lignes, faisable seul. Le contenu, c'est l'oeuvre d'une génération. Et c'est exactement la même asymétrie que MediaWiki et Wikipédia :
MediaWiki : environ 500 000 lignes de code, environ 50 ingénieurs, écrit en quelques années. Wikipédia : environ 60 millions d'articles, des millions de contributeurs, écrit sur 25 ans. Rapport infrastructure/contenu : 100 à 1 000 fois. Pour le droit typé, c'est le même ordre de grandeur.
Le coût marginal d'un alinéa typé est d'environ 6 lignes de code — moins de lignes que de mots dans le texte d'origine. Le typage compresse. Et chaque ligne est navigable, refactorable, testable, F12-able.
// Coût marginal d'un alinéa typé : ~6 LOC
// Le texte d'origine fait ~50 mots — le typage compresse
namespace Law.France2026.Etalab;
[Article("L132-4", Space = typeof(France), Period = typeof(Year2026),
Codification = "Code de l'environnement")]
public sealed class ArticleEnvL132_4
{
[Paragraph(1, Text = "L'eau et les milieux aquatiques sont des éléments "
+ "du patrimoine commun de la nation.")]
[Measure(MeasureKind.Regulation, typeof(DrinkingWater))]
public void Paragraph1() { }
}// Coût marginal d'un alinéa typé : ~6 LOC
// Le texte d'origine fait ~50 mots — le typage compresse
namespace Law.France2026.Etalab;
[Article("L132-4", Space = typeof(France), Period = typeof(Year2026),
Codification = "Code de l'environnement")]
public sealed class ArticleEnvL132_4
{
[Paragraph(1, Text = "L'eau et les milieux aquatiques sont des éléments "
+ "du patrimoine commun de la nation.")]
[Measure(MeasureKind.Regulation, typeof(DrinkingWater))]
public void Paragraph1() { }
}Sept niveaux de vérification
Comment savoir que ça marche ? Sept niveaux, du plus local au plus intégré.
Niveau 1 — Chaque package compile à vide. Les solutions Common.Dsl, Law.Dsl, Commons.Dsl, Citizen.Dsl, Law.Commons.Bridge compilent sans erreur avec les instances de démonstration.
Niveau 2 — Le CommonDslGenerator produit du code. La compilation de Common.France1995.Erard.Dsl génère les fichiers attendus dans obj/Debug/*/generated/ : Symbols.g.cs, France1995ErardRegistry.g.cs.
Niveau 3 — Le FrontierCrossingDetector est testé en isolation. Tests unitaires purs sur Law.Commons.Bridge.Core, sans Roslyn : bien manquant, frontière manquante, procédure manquante, transitions valides, articles filtrés par Espace/Temps.
Niveau 4 — Les analyzers structurels passent. Tests unitaires par diagnostic (LAW_FR2026_TYP_*, CMN_FR2026_TYP_*, SYM_*), au moins un test par code diagnostic.
Niveau 5 — Le smoke test cas Dumas end-to-end. La compilation de Law.France1995.Sample échoue avec le diagnostic LOI003. Après ajout de [DemocraticProcedure(typeof(ParliamentaryDebateTwoReadings), DateRef = "1995-01-09")], la compilation réussit et obj/.../generated/Law.Commons.Cross.g.cs existe.
Niveau 6 — Le Law.QualityGate sur le sample. L'exécution du CLI quality gate sur l'assembly compilée du sample génère law-quality-report.json et law-dashboard.html (heatmap article par alinéa).
Niveau 7 — Gate de progression Métacratie. Le Ship 1 est la phase 1-2 du bootstrap documenté dans le plan de co-planification du projet. Le compile error politique sur Dumas 1995 est la première gate de la métacratie concrète.
Prochaine étape — formaliser, pas coder
Ce plan est un brouillon dense de ce que pourrait être le projet. La prochaine étape n'est pas de coder. C'est de formaliser. Huit étapes de formalisation préparent le terrain avant d'écrire une seule ligne de code — parce que coder sans ces fondations serait construire quelque chose qui ne tient pas politiquement, philosophiquement ou stratégiquement.
Etape 1 — Le manifeste politique. Un document d'environ dix à quinze pages qui présente le projet à un public non-technique : philosophes, juristes, militants, fonctionnaires, journalistes. Avec les filiations Chomsky, Whitehead, Roussel, Sowa, Meyer, Catala mises en avant. Cette série de blog en est la première approximation publiable.
Etape 2 — La spécification formelle de META(Ex × Ty). Un document court (environ cinq pages) qui pose les axiomes : qu'est-ce qu'un Espace, qu'est-ce qu'un Temps, comment se composent-ils, qu'est-ce qu'une instance de DSL juridique sur (Ex × Ty), qu'est-ce qu'un bridge entre deux DSLs sur la même (Ex × Ty). C'est la constitution mathématique du projet — cf. Partie 4 — META(Ex × Ty) pour la version informelle.
Etape 3 — La spécification de LawDslGenerator. Sa grammaire d'entrée (les LegalDslDefinition), ses garanties de sortie (les projets générés), son contrat de bootstrap récursif (le fixed point Sowa). La distinction "vocabulaire d'attributs" et "valeurs concrètes" doit être formalisée explicitement — cf. Partie 7 — Law.Dsl + LawDslGenerator.
Etape 4 — Cartographie de la filiation intellectuelle. Un document dédié qui développe en engagements substantiels (trois à cinq paragraphes par auteur) chacune des six filiations principales, plus les filiations additionnelles (Foucault sur Roussel, Latour sur le parlement des choses, Lessig, Castoriadis, Supiot). Cf. Partie 3 — Filiation intellectuelle pour la version publiée.
Etape 5 — Le cas d'école pédagogique. Prendre la décision Dumas 1995, la typer entièrement (trois à cinq articles minimum), montrer le compile error, montrer le Quick Fix, montrer l'attestation cryptographique. Une trentaine de pages avec captures d'écran de Lex Studio (mocked au besoin). C'est l'équivalent du "Hello World" du compilateur juridique.
Etape 6 — Le sous-périmètre minimal du Ship 1. Pas tout le droit français, ni même tout le droit constitutionnel : uniquement les cinq à dix articles nécessaires pour reproduire le compile error sur Dumas 1995. C'est environ cinquante alinéas typés à la main, environ trois jours de travail. C'est le plus petit chemin vers la démonstration.
Etape 7 — Identifier deux à trois contributeurs initiaux. Un juriste constitutionnaliste pour valider le typage des articles. Un développeur Roslyn expérimenté pour challenger l'architecture du bridge Source Generator. Un philosophe pour challenger les filiations. Sans ces trois personnes, le projet reste solipsiste et personne d'autre ne peut le reprendre. Le projet est un commun : il a besoin de sa communauté fondatrice.
Etape 8 — Préparer la rencontre avec l'équipe Catala. INRIA Prosecco, Denis Merigoux et collaborateurs. Pas pour demander la permission — pour proposer une collaboration. Le Catala.Bridge (Ship 6-bis) est l'outil concret de cette collaboration. Le rendez-vous lui-même est l'événement politique le plus important du projet à court terme, parce qu'il est la preuve que le projet ne prétend pas remplacer Catala mais s'appuyer dessus.
Mot de fin — le plan de l'outil, pas le plan du commun
Ces huit étapes de formalisation sont préparatoires au code. Tant qu'elles ne sont pas faites, coder serait prématuré. Et quand le code commencera, il ne fera pas le travail à la place des humains.
Le Ship 1 ne vise pas à typer le Code civil. Il vise à prouver trois choses : que c'est possible (sur un seul cas historique), que c'est utile (le compile error politique est visible, navigable, expliqué), et que c'est forkable (un autre auteur peut reprendre Common.France1995.Erard.Dsl et l'amender en Common.France1995.LaQuadrature.Dsl avec des choix de typage différents).
Tout ce qui suit est l'oeuvre du commun que le Ship 1 enclenche. Ce plan est le plan de l'outil, pas le plan du commun. Personne ne peut typer le droit français seul. L'infrastructure permet à des milliers de personnes de typer des morceaux, et le compilateur joint les morceaux en un tout cohérent. La comparaison avec MediaWiki et Wikipédia n'est pas une analogie — c'est une prédiction structurelle. L'infrastructure est petite, le contenu est immense, et les contributeurs sont la seule force qui peut combler l'écart. Le travail de l'architecte est de rendre l'infrastructure suffisamment accueillante pour que les contributeurs viennent.
C'est la dernière partie de cette série. Dix-huit parties pour décrire un projet qui n'existe pas encore comme code, mais qui existe déjà comme plan contestable — et c'est tout l'objet de la publication. Si une seule personne lit ces dix-huit parties et en tire une objection que je n'avais pas vue, le travail aura été utile. Si trois personnes les lisent et veulent contribuer, le commun aura commencé.
Pour aller plus loin
- Partie 17 — Méta-critique : manques, beautés, limites (précédente)
- Hub de la série
- Partie 1 — Le projet : pourquoi un compilateur pour le droit pour revenir au point de départ
- Partie 10 — Trace Dumas pour le coeur démonstratif du Ship 1
- Partie 3 — Filiation intellectuelle pour les garanties épistémologiques