# Les briques de CRISalid

import { Mermaid } from "../../../src/components/Mermaid";

> **En bref :**
> CRISalid n'est pas une application mais une suite de 21 dépôts. **Cinq briques forment le produit** : l'annuaire, le moissonneur, le graphe, l'API et SoVisu+. Elles tournent ensemble sur l'instance de développement de Paris-Saclay.
> Les autres sont des référentiels, de l'outillage ou des expériences d'IA **qui ne tournent pas** sur l'instance. Aucune n'est une vitrine publique : c'est la brique que la [Partie 1](/01-cadrage-saclay/02-scenarios/01-partie-1-vitrine-marque-blanche) propose d'ajouter à la suite.

## Le circuit des briques

<Mermaid
  title="Les cinq briques du produit et ce qui les entoure"
  caption="En plein : les briques du cœur, toutes observées sur l'instance de développement. En pointillé : les référentiels d'appoint et la vitrine, qui n'existe pas encore. Le circuit détaillé des données est dans Comprendre CRISalid."
  chart={`flowchart TB
    AN["L'annuaire<br/>personnes et laboratoires"]
    MO["Le moissonneur<br/>publications de HAL, OpenAlex,<br/>scanR, IdRef"]
    GR[("Le graphe<br/>rapproche et consolide")]
    API["L'API<br/>accès pour les applications"]
    SVP["SoVisu+<br/>espace des chercheurs"]
    REF["Référentiels<br/>organisations, thèmes,<br/>vocabulaires"]
    VIT[["Vitrine publique<br/>à construire"]]
    AN --> GR
    MO --> GR
    GR -->|"demande de moissonnage"| MO
    GR --> API --> SVP
    SVP -.->|"corrections"| GR
    REF -.-> GR
    GR -.->|"extrait"| VIT
    classDef core fill:#DCFCE7,stroke:#16A34A,color:#14532D
    classDef aux fill:#F1F5F9,stroke:#94A3B8,color:#334155,stroke-dasharray: 4 3
    class AN,MO,GR,API,SVP core
    class REF,VIT aux`}
/>

Le schéma de référence du circuit des données, de la source au chercheur, est dans [Comprendre CRISalid](/03-crisalid/00-reperes/comprendre-crisalid). Ce que l'instance a montré de chaque brique est dans [Ce que montre l'instance](/03-crisalid/06-instance-saclay/00-ce-que-linstance-demontre).

## Les 21 dépôts

La colonne **Statut** porte sur l'existence de la brique : **Observé sur instance (dev)** quand elle tourne sur l'instance de développement de Paris-Saclay, **Confirmé** quand seul le code a été lu, **À confirmer** quand un service semblable tourne sans qu'on ait pu le rattacher au dépôt. Les huit statuts sont définis dans [Sources et preuves](/03-crisalid/00-reperes/sources-et-preuves).

| Dépôt | Nom usuel | Rôle en une phrase | Utile à la vitrine ? | Statut | Lien |
|---|---|---|---|---|---|
| **Cœur : le produit** | | | | | |
| crisalid-directory-bridge | L'annuaire | Charge personnes, laboratoires et rattachements depuis l'annuaire de l'établissement | **Oui** : sans lui, pas de chercheurs par unité | Observé sur instance (dev) | [fiche](/03-crisalid/02-sous-projets/coeur/crisalid-directory-bridge) |
| svp-harvester | Le moissonneur | Va chercher les publications d'un chercheur dans les bases ouvertes | **Oui** : c'est la source des publications | Observé sur instance (dev) | [fiche](/03-crisalid/02-sous-projets/coeur/svp-harvester) |
| crisalid-ikg | Le graphe | Rapproche les doublons et écrit une version consolidée de chaque fait | **Oui** : l'extrait de la vitrine en sort | Observé sur instance (dev) | [fiche](/03-crisalid/02-sous-projets/coeur/crisalid-ikg) |
| crisalid-apollo | L'API | Donne aux applications un accès structuré au graphe | **Indirect** : pas d'export, et sa clé ouvre aussi l'écriture | Observé sur instance (dev) | [fiche](/03-crisalid/02-sous-projets/coeur/crisalid-apollo) |
| SoVisuPlus | SoVisu+ | Espace où le chercheur consulte et corrige ses données | **Oui**, pour la [Partie 2](/01-cadrage-saclay/02-scenarios/02-partie-2-contribution-chercheurs) | Observé sur instance (dev) | [fiche](/03-crisalid/02-sous-projets/coeur/sovisuplus) |
| crisalid-deployment | L'assemblage | Recette qui lance toutes les briques ensemble, avec un interrupteur par brique | **Indirect** : conditionne l'exploitation | Confirmé | [dépôt](https://github.com/CRISalid-esr/crisalid-deployment) |
| **Référentiels et intégration** | | | | | |
| crisalid-org-registry | Le registre des organisations | Liste mondiale (ROR) et française (UAI) des organisations, pour reconnaître une affiliation sous ses diverses graphies | **Indirect** | À confirmer | [dépôt](https://github.com/CRISalid-esr/crisalid-org-registry) |
| crisalid-taxi | Le classement par thèmes | Range une publication dans l'un des 4 516 thèmes d'OpenAlex | **Indirect** : base de parcours thématiques | À confirmer | [dépôt](https://github.com/CRISalid-esr/crisalid-taxi) |
| crisalid-vocab-search | Les suggestions de mots-clés | Propose des termes contrôlés pendant la saisie | Non | Partiel | [dépôt](https://github.com/CRISalid-esr/crisalid-vocab-search) |
| svp-jel-proxy | Le vocabulaire d'économie | Copie locale de la classification JEL des sciences économiques | Non | À confirmer | [dépôt](https://github.com/CRISalid-esr/svp-jel-proxy) |
| aiosparql | Bibliothèque SPARQL | Outil de programmation du moissonneur ; pas un service | Non | Confirmé | [dépôt](https://github.com/CRISalid-esr/aiosparql) |
| **IA et expérimentation** (aucune ne tourne sur l'instance) | | | | | |
| crisalid-agents | L'assistant et la recherche d'experts | Répond à des questions sur le graphe et trouve les chercheurs d'un thème | **Indirect**, plus tard | Confirmé | [dépôt](https://github.com/CRISalid-esr/crisalid-agents) |
| crisalid-ai-skills | La boîte à outils de requêtes IA | Treize requêtes prédéfinies, en lecture seule, que l'assistant a le droit d'utiliser | **Indirect** : modèle pour l'export | Confirmé | [dépôt](https://github.com/CRISalid-esr/crisalid-ai-skills) |
| doccano | L'outil d'annotation | Des personnes indiquent si deux notices décrivent la même publication | Non | Confirmé | [dépôt](https://github.com/CRISalid-esr/doccano) |
| svp-training-data | La préparation des exemples | Extrait des paires de notices à annoter | Non | Confirmé | [dépôt](https://github.com/CRISalid-esr/svp-training-data) |
| crisalid-ai-duplicate-record-detection | La détection de doublons par IA | Carnet d'entraînement d'un modèle de langage, sans service | Non | Expérimental | [dépôt](https://github.com/CRISalid-esr/crisalid-ai-duplicate-record-detection) |
| graphrag-experiments | Le premier prototype d'assistant | Remplacé par l'assistant actuel | Non | Expérimental | [dépôt](https://github.com/CRISalid-esr/graphrag-experiments) |
| **Historique et outillage** | | | | | |
| SVP-mockups | Les maquettes de SoVisu+ | Écrans cliquables avec des données fictives, [en ligne](https://crisalid-esr.github.io/SVP-mockups/) | Non : montrent une cible, pas un état | Confirmé | [dépôt](https://github.com/CRISalid-esr/SVP-mockups) |
| svp-k8s | L'ancien déploiement Kubernetes | Déploiement dans le cloud de Google, abandonné | Non | Partiel | [dépôt](https://github.com/CRISalid-esr/svp-k8s) |
| maintenance | La page d'indisponibilité | Affiche « service momentanément indisponible » pendant une intervention | Non | Confirmé | [dépôt](https://github.com/CRISalid-esr/maintenance) |
| **Référence externe** | | | | | |
| CERIF-Core | Le modèle européen | Modèle d'euroCRIS dont CRISalid s'inspire sans l'implémenter | **Indirect** | Confirmé | [modèle de données](/03-crisalid/01-donnees/modele-de-donnees) |

**Licences.** Neuf dépôts n'ont pas de licence claire, dont l'annuaire, le registre des organisations et Taxi. Le détail et ses conséquences pour la réutilisation sont dans [Exploitation et gouvernance](/03-crisalid/03-fonctionnement-transversal/exploitation-et-gouvernance).

## L'assemblage et l'hébergement

Le dépôt d'assemblage (crisalid-deployment) réunit la recette Docker Compose qui lance les briques ensemble, l'authentification et le bus de messages. Il porte aussi le [site de documentation officiel](https://crisalid-esr.github.io/crisalid-deployment/), dont la vue d'ensemble est encore « à venir » : **la documentation officielle ne contient aucun schéma d'architecture**. Le déploiement Kubernetes y est annoncé mais n'est pas fourni, et l'ancien dépôt Kubernetes est abandonné : **Docker Compose est la seule voie disponible**. Sur l'instance de développement, **toute la pile tourne sur un seul hôte**, bases de données comprises (Observé sur instance (dev)). Sauvegarde, ordonnancement, supervision et versions : [Exploitation et gouvernance](/03-crisalid/03-fonctionnement-transversal/exploitation-et-gouvernance).

## Ce qu'il faut savoir des autres briques

<details>
<summary><strong>Registre des organisations</strong> : une liste figée à janvier 2025</summary>

- Il importe ROR et la liste des établissements français, puis les expose en lecture seule au graphe.
- La version de ROR est **inscrite en dur** dans le code : les mises à jour ultérieures ne sont pas reprises automatiquement (Confirmé).
- Un service de ce type tourne sur l'instance, sans rattachement établi à ce dépôt (À confirmer). Pas de licence.

</details>

<details>
<summary><strong>Taxi</strong> : le classement par thèmes, sans licence</summary>

- Il compare le titre et le résumé d'une publication aux 4 516 thèmes d'OpenAlex par calcul sémantique ; le graphe l'appelle quand il est configuré.
- La taxonomie est présente dans le graphe de l'instance, et des services de calcul sémantique y tournent ; **quel service attribue les thèmes n'est pas établi** (À confirmer).
- Pas de fichier de licence ; seule une mention « MIT » figure dans les métadonnées. Son état de travail est perdu à chaque recréation du conteneur, ce qui relance tout le calcul (Confirmé).

</details>

<details>
<summary><strong>Vocab Search</strong> : seule l'autocomplétion fonctionne</summary>

- Il suggère des termes de thésaurus pendant la saisie, dans SoVisu+ notamment.
- Seule la route d'**autocomplétion** existe ; la recherche complète est un fichier vide (Partiel).
- Ajouter un thésaurus impose de reconstruire le service. Sans usage pour une vitrine.

</details>

<details>
<summary><strong>Vocabulaire d'économie (JEL)</strong> : un serveur Fuseki figé</summary>

- Le moissonneur l'interroge pour décrire les publications d'économie ; il est servi par un serveur Fuseki, sans authentification, à garder sur le réseau privé.
- Les données viennent d'une **archive web de 2024**, le serveur d'origine étant hors service : aucune mise à jour automatique (Confirmé).
- Sa présence sur l'instance n'est pas établie (À confirmer).

</details>

<details>
<summary><strong>L'assistant et la recherche d'experts</strong> : le seul point à suivre</summary>

- Le traitement « quels chercheurs pour ce thème ? » répond à la question qu'une vitrine veut servir, en vingt-cinq secondes environ par thème selon ses auteurs (Déclaré).
- Il dépend d'un modèle de langage et du rattachement des chercheurs à leurs unités, aujourd'hui limité à 51 unités sur 235 ([données observées](/03-crisalid/06-instance-saclay/01-donnees-observees)).
- Non déployé : à réexaminer une fois les rattachements complétés.

</details>

<details>
<summary><strong>Ancien déploiement Kubernetes et bibliothèque SPARQL</strong> : sans enjeu pour la décision</summary>

- svp-k8s déployait SoVisu+ chez Google, un espace par établissement. Il ignore les briques récentes et n'est plus maintenu : il ne doit pas servir de base à un hébergement à Paris-Saclay.
- aiosparql est une copie d'une bibliothèque libre (Apache 2.0), utilisée par le moissonneur pour interroger IdRef et le vocabulaire JEL. Rien à exploiter ni à décider.

</details>

## Hors périmètre de décision

Dix dépôts n'entrent pas dans la décision sur la vitrine : les six d'IA, les trois d'historique et d'outillage, et CERIF-Core. **Pourquoi** : aucun ne tourne sur l'instance de Paris-Saclay ; aucun ne produit ni ne transforme les données qu'une vitrine affiche ; les maquettes montrent une cible, pas un état. CERIF-Core est une spécification externe : ce que CRISalid en reprend, et ce qui manque (projets, financements, dates des rattachements), fait foi dans [Le modèle de données](/03-crisalid/01-donnees/modele-de-donnees).

Une exception utile : **la boîte à outils de requêtes IA** (crisalid-ai-skills). Ses requêtes prédéfinies, en lecture seule, sur les personnes, les structures et les publications, sont un modèle pour écrire le service d'export de la vitrine.
