ADR
ADR-0003 — Identité canonique, cycle de vie des sources et projections reconstruisibles
Sur cette page
- Statut :
Accepté - Date : 2026-09-02
- Portée : toute entité canonique, toute source importée, toute représentation linguistique et tout futur moteur de réconciliation
- Décision de validation : D1–D6 obligatoires ; D7 défini comme contrat anticipé ; D8 explicitement différé
- Jalon de preuve initial : S1.6 — Independent Source Proof
- Références :
planning/epics/scientific-knowledge-layer-roadmap.md, ADR-0001, ADR-0002,docs/scientific/knowledge-model.md,docs/scientific/scientific-principles.md,planning/epics/b0-hadith-persistence-contract.md
1. Contexte#
ISNAD doit pouvoir intégrer plusieurs recueils, dictionnaires de rijāl, éditions, commentaires et traductions sans transformer chaque import en nouvelles entités concurrentes. Il doit aussi pouvoir retirer une source erronée sans casser les identités stables, les liens, les autres sources ni l'application.
Les cas qui motivent cette décision sont notamment :
- une même valeur arabe représentée en français par
Abu,Abou,Abūou d'autres variantes ; - une mention tronquée telle que
عائشة بنت أبيou « Aïcha bint Abu », qui ne doit ni être complétée silencieusement ni créer automatiquement une nouvelle personne ; - plusieurs dictionnaires décrivant le même narrateur avec des informations complémentaires ou contradictoires ;
- une source qui doit être mise en quarantaine, retirée de la projection courante ou exceptionnellement purgée ;
- de futurs traitements nocturnes lourds qui proposeront des rapprochements sans devenir eux-mêmes la source de vérité.
L'architecture existante fournit déjà provenance, témoins d'acquisition, assertions, preuves, décisions de réconciliation, crosswalks et séparation acquisition/aval. Cette ADR fixe les invariants qui doivent empêcher les futures automatisations de contourner ces fondations.
2. Décision#
2.1 Invariants D1–D8#
| ID | Invariant | Décision | Horizon d'implémentation |
|---|---|---|---|
| D1 | Identité canonique indépendante des sources | Une source apporte des observations, assertions et preuves ; elle ne possède jamais l'identité canonique. Aucun retrait de source ne peut supprimer en cascade une personne canonique. | Obligatoire dès les contrats de persistance ; preuve HADITH en S1.6 |
| D2 | Représentations et alias séparés de l'identité | Arabe source, arabe normalisé, forme française préférée, translittération savante et alias sont des représentations typées d'une même entité. Le français n'est jamais une clé d'identité. | Contrat obligatoire maintenant ; vertical slice typé en E4, sans table polymorphe universelle anticipée |
| D3 | Mention distincte de la personne | Le texte rencontré dans une source, la mention extraite et la personne canonique sont trois niveaux distincts. Une mention non résolue peut être persistée sans créer de Narrator. | Obligatoire dans le chemin HADITH ; preuve en S1.6 |
| D4 | Fusion canonique traçable et réversible | Une fusion conserve un survivant, un redirect de l'ancien identifiant, la décision, la preuve et l'historique. Aucun DELETE silencieux du doublon. | Contrat obligatoire maintenant ; implémentation narrateur en E4/E7 |
| D5 | Cycle de vie explicite des sources | Cycle logique minimal : ACTIVE → QUARANTINED → WITHDRAWN. La purge physique est une opération administrative exceptionnelle, distincte, avec tombstone minimale. | Primitive HADITH en S1.5 ; preuve sur source indépendante en S1.6 ; généralisation après un second cas réel |
| D6 | Projection dérivée, déterministe et reconstruisible | La projection courante n'est jamais la source de vérité. Elle est recalculable à partir de l'ensemble effectif des témoins, assertions et décisions versionnées. Même entrée effective + mêmes versions ⇒ même sortie. | Obligatoire en S1.5 ; preuve en S1.6 |
| D7 | Traductions multiples et versionnées | Le texte source exact reste immuable ; les traductions sont des variantes versionnées ; une décision séparée désigne éventuellement la traduction préférée. | Contrat défini maintenant ; moteur et persistance détaillée différés au vertical slice concerné |
| D8 | Agents batch nocturnes différés | Aucun scheduler, agent LLM ou auto-enrichissement n'est développé dans E1. Les futurs agents seront des producteurs de propositions et de preuves, jamais des auteurs silencieux de vérité canonique. | Après les fondations d'identité, provenance et réconciliation |
2.2 Contrat de représentation linguistique#
Le concept est transversal, mais l'implémentation physique reste typée par bounded context jusqu'à ce que deux cas réels structurellement différents justifient une généralisation.
Exemple conceptuel :
Narrator #123
canonical_ar أبو بكر الصديق
normalized_ar ابو بكر الصديق
preferred_fr Abou Bakr al-Siddiq
alias_fr Abu Bakr al-Siddiq
transliteration Abū Bakr al-Ṣiddīq
Toutes ces formes conduisent à la même identité. Modifier la préférence d'affichage ne modifie aucun identifiant, isnād, hadith ou lien scientifique.
2.3 Contrat mention → candidat → identité#
témoin source immuable
↓
mention extraite non résolue
↓
candidats classés
↓
décision sourcée et versionnée
↓
identité canonique
Une mention tronquée reste conservée verbatim. Une complétion ou un rapprochement est une assertion révisable avec méthode, score, preuves et décision. Une décision annulée ne réécrit pas le témoin source.
2.4 Retrait d'une source#
Le retrait logique suit cet ordre :
- enregistrer une décision auditée de changement de statut ;
- exclure la source de l'ensemble effectif utilisé par les projections courantes ;
- invalider ou mettre en révision les décisions dépendant exclusivement de cette source ;
- reconstruire les projections affectées à partir des autres contributions actives ;
- conserver les identifiants stables, redirects, décisions et tombstones nécessaires à l'audit ;
- publier explicitement l'état
UNSUPPORTED/ « preuve courante insuffisante » lorsque plus aucune contribution active ne justifie une donnée, sans la présenter commeCANONICAL_CURRENT.
WITHDRAWN ne réécrit ni ne détruit le témoin importé. Une purge physique, si elle est légalement ou scientifiquement nécessaire, est une procédure distincte et ne peut effacer la trace minimale de retrait.
2.5 Fusion canonique#
Une fusion future doit au minimum porter :
loser_id
survivor_id
decision_id
reason
evidence_refs
effective_at
superseded_by_merge_id?
Toute ancienne URL ou référence vers loser_id doit se résoudre vers survivor_id. Une décision ultérieure peut superséder la fusion sans falsifier son historique.
Aucune table générique canonical_entity_merge n'est imposée maintenant. E4 doit d'abord implémenter le cas réel des narrateurs ; une abstraction transversale ne sera envisagée qu'après un second bounded context.
2.6 Contrat de traduction versionnée#
Le modèle conceptuel minimal est :
source_segment immutable
↓
translation_variant[] (langue, modèle/auteur, prompt/protocole, version, date)
↓
translation_review / decision
↓
preferred_translation projection
Un champ français unique écrasé à chaque retraduction est interdit pour les corpus scientifiques. D7 ne déclenche en E1 ni traduction massive, ni appel de modèle, ni nouvelle table universelle.
2.7 Futurs agents nocturnes#
Les futurs agents consommeront les mêmes ports et écriront dans les mêmes journaux de propositions, preuves et décisions que les traitements interactifs. Ils devront :
- enregistrer version de code, moteur, modèle de connaissance et règles ;
- distinguer score de classement, confiance d'identité et décision ;
- respecter l'auto-override interdit sur une décision humaine validée ;
- rester rejouables et idempotents ;
- placer les cas ambigus en révision ;
- ne jamais modifier directement un témoin source ou une identité canonique.
3. Placement dans la roadmap#
S1.5 — mécanismes minimaux#
S1.5 fournit, pour le vertical slice HADITH uniquement :
- persistance d'une mention brute sans création de narrateur ;
- rattachement explicite à la provenance ;
- cycle logique minimal de la source ;
- exclusion déterministe des sources non effectives ;
- point de reconstruction des projections ;
- interdiction des cascades destructrices source → entité canonique.
S1.5 ne développe aucun agent nocturne, aucune fusion générique, aucun moteur d'alias et aucun moteur de traduction.
S1.6 — preuve sur source indépendante#
S1.6 est le premier jalon de preuve de D1, D3, D5 et D6. La même source indépendante utilisée pour prouver le pipeline doit servir à démontrer :
- import initial ;
- persistance d'au moins une mention non résolue sans création de personne ;
- second import sans doublon et sans perte aval ;
- mise en quarantaine puis retrait logique de la source ;
- absence de suppression en cascade d'une identité canonique ;
- reconstruction déterministe depuis l'ensemble effectif restant ;
- fonctionnement de l'application et visibilité explicite des données devenues non supportées.
S1.6 vérifie aussi, par matrice de conformité, que le modèle n'empêche pas D2, D4 et D7. Il n'en anticipe pas l'implémentation.
E3, E4 et E7#
- E3 généralise provenance et cycle de vie après un second cas documentaire réel.
- E4 implémente formes de noms/alias typées, résolution mention → narrateur et redirect de fusion canonique.
- E7 applique conflits, supersession, invalidation et réconciliation aux dépendances de sources retirées.
4. Critères de conformité#
Une évolution est non conforme si elle :
- utilise une graphie française comme clé de personne ;
- crée un narrateur uniquement parce qu'une mention n'a pas été résolue ;
- fait porter l'existence d'une entité canonique par une seule ligne source avec suppression en cascade ;
- écrase une traduction précédente ;
- supprime un doublon canonique sans redirect ni décision ;
- rend impossible la reconstruction d'une projection ;
- permet à un agent automatique d'écraser une décision humaine validée ;
- cache qu'une donnée ne dispose plus de preuve active.
5. Conséquences#
Positives#
- imports multi-dictionnaires sans duplication systématique ;
- corrections et fusions révisables ;
- retrait sûr d'une source ;
- stabilité des identifiants et des liens ;
- traduction massive ultérieure sans écrasement ;
- agents nocturnes remplaçables et auditables.
Coûts acceptés#
- davantage de tables ou relations typées dans les vertical slices futurs ;
- reconstruction et invalidation plus complexes qu'un CRUD direct ;
- maintien de tombstones et redirects ;
- nécessité de distinguer état scientifique courant et historique complet.
6. Alternatives rejetées#
- Normaliser directement
AbuenAboudans les données existantes : détruit la provenance et confond affichage et identité. - Créer une personne pour chaque forme rencontrée : multiplie les doublons et rend la fusion destructive.
- Faire posséder une entité canonique par sa première source : rend le retrait de source dangereux.
- Supprimer physiquement une source en cascade : brise l'audit, les liens et les décisions.
- Stocker une seule traduction mutable : empêche comparaison, révision et reproductibilité.
- Construire immédiatement un framework universel d'identité/traduction/merge : viole la règle de généralisation après deux cas réels.
- Développer les agents nocturnes dans E1 : automatise avant d'avoir démontré les invariants de persistance et de reconstruction.