Architecture
ISNAD — Domain Layer V1
Sur cette page
Date : 2026-08-27
Statut : fondation
Objectif : introduire une couche src/domain/ sans casser l’existant, afin que les 5 prochaines années de développement s’appuient sur des entités et des contrats stables.
1. Vue d’ensemble#
L’architecture ISNAD adopte une structure en couches inspirée du Clean Architecture / Ports & Adapters :
| Couche | Rôle | Localisation |
|---|---|---|
| UI | Affichage, interaction, internationalisation | src/app/, src/components/, src/core/i18n.tsx |
| Application | Pages serveur, server actions, orchestration légère | src/app/[locale]/... |
| Domain | Entités, repositories (interfaces), services (interfaces), types métier | src/domain/ |
| Infrastructure | Adapters Supabase, workers Quality Engine, search, fichiers | src/infrastructure/ |
| Quality Engine | Pipeline de qualité des données (hash gate, graphe de dépendances) | scripts/quality-engine/ |
| Knowledge Engine (futur) | Ingestion et normalisation des sources savantes | scripts/knowledge-engine/ (à créer) |
| Reasoning Engine (futur) | Raisonnement scientifique sur les chaînes et les hadiths | src/domain/reasoning/ ou service dédié |
2. Domain (src/domain/)#
Le domaine contient uniquement :
entities/— objets métier purs (Narrator,KnowledgeSource,KnowledgeEntry,Assertion,Evidence,Hadith,Chain,Commentary).repositories/— interfaces de persistance (NarratorRepository,HadithRepository,KnowledgeRepository).services/— interfaces de services métier (AnalysisService,NarratorService,HadithService).types/— types transversaux (Decision,Confidence,EvidenceType).
Contraintes :
- Aucune dépendance vers Supabase, Next.js, React,
scripts/. - Aucune logique SQL.
- Les entités sont des objets de données typés, immutables par convention.
3. Infrastructure (src/infrastructure/)#
src/infrastructure/ est vide en V1. Il accueillera les adapters :
supabase/NarratorRepositorySupabase.tssupabase/HadithRepositorySupabase.tssupabase/KnowledgeRepositorySupabase.tsquality-engine/QualityEngineRunner.tssearch/SearchAdapter.ts
Règle d’or : la couche infrastructure ne contient que du mapping et du wiring. Toute logique métier reste dans src/domain/.
4. UI / Application#
La UI ne doit plus appeler directement supabase.from(...). À terme, les pages et composants consommeront :
- des server actions qui utilisent les services domaine,
- les repository adapters injectés par l’application.
En V1, aucune page n’est modifiée : la fondation est posée, le raccordement se fera dans une tâche ultérieure.
5. Quality Engine#
Le Quality Engine (scripts/quality-engine/) reste un framework indépendant. Il traite des entités techniques (alignements, passages, chaînes) et produit des Decision.
À terme, un adapter dans src/infrastructure/quality-engine/ permettra au domaine de déclencher des runs et de consommer leurs résultats sans connaître les détails du graphe de dépendances.
6. Knowledge Engine (futur)#
Le Knowledge Engine est le pipeline d’ingestion et de normalisation des sources savantes :
- transformer Taqrīb, Tahdhīb al-Kamāl, Mīzān, etc. en
KnowledgeEntry, - extraire des
Assertionatomiques, - les rattacher à des
Evidencesourcés.
Il s’appuiera sur les entités src/domain/entities/ comme contrat de sortie.
7. Reasoning Engine (futur)#
Le Reasoning Engine répondra à la question :
« Le Prophète ﷺ a-t-il réellement dit cela ? »
Il consommera :
- les
AssertionetEvidencedu Knowledge Engine, - les
ChainetHadithdu corpus, - les
Decisiondu Quality Engine.
Il produira un argument scientifique structuré (hypothèses, preuves, contradictions, conclusion).
8. Schéma architectural#
Flèches :
UI / Applicationdépend deDomain.Infrastructureimplémente les interfaces deDomain.Enginesconsomment les adaptersInfrastructure.Domainne dépend de rien d’autre.
9. Règles de dépendance#
src/domain/ne peut importer que depuissrc/domain/.src/infrastructure/peut importersrc/domain/.src/app/etsrc/components/doivent passer parsrc/domain/via des server actions.scripts/quality-engine/reste autonome mais produit des valeurs compatibles avecsrc/domain/types/Decision.ts.
10. Prochaines étapes#
- Implémenter les adapters Supabase dans
src/infrastructure/. - Créer des server actions qui injectent les adapters dans les services domaine.
- Migrer progressivement les pages (
narrators/[id],chain) pour utiliser les services domaine. - Implémenter le Knowledge Engine en sortie du modèle
src/domain/entities/. - Construire le Reasoning Engine une fois que les assertions et les chaînes sont structurées.
V1 — fondation. Aucun comportement modifié, aucune page touchée.