# Plan d'action

:::tip{title="En bref"}

- **Fait au 25/10/2026** :
  - le socle en marque blanche, avec deux instances qui tournent : Paris-Saclay et Paris 1 (démonstration) ;
  - la moisson complète de 11 sources, régénérée intégralement le 25/10/2026 ;
  - la fusion et la publication des fiches en JSON et Markdown ;
  - les sites générés statiquement, avec la recherche Pagefind ;
  - la mesure de couverture et l'observabilité.
- **Reste** :
  - obtenir les arbitrages ([questions ouvertes](/projet/questions-ouvertes)) : liste des Graduate Schools, règle des personnes, accès scanR et OpenAlex ;
  - tester la vitrine sur les données CRISalid ([Projection](/projection/test-donnees-crisalid)) ;
  - écrire les présentations manquantes ;
  - traiter l'i18n et les pages éditoriales propres à chaque instance.
- Les cases cochées sont faites **et vérifiées** (tests, build, contrôle des pages). Le détail technique est dans [architecture/](/architecture) et [decisions/](/decisions).
  :::

## État

| Brique                           | Où                                                           | État                                                         |
| -------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| Configuration d'instance validée | `instances/*/research.config.ts`, `src/config/`              | Fait, 2 instances                                            |
| Moisson complète                 | `pnpm data:extract` → `data/raw/`                            | 18 sources sur 20 ; theses.fr en échec sur les deux, voir Q3 |
| Qualité et liens                 | `pnpm data:links`, `data/coverage/<instance>/qualite.md`     | Fait                                                         |
| Accessibilité                    | `pnpm a11y`                                                  | 0 violation automatique                                      |
| Couverture par source            | `pnpm data:probe` → `data/coverage/`                         | Fait, historique daté                                        |
| Fusion et publication            | `pnpm data:build` → `data/public/`                           | Fait                                                         |
| Sites                            | `pnpm build:<instance>`                                      | Saclay : 23 444 pages, Paris 1 : 4 802 (fr + en)             |
| Recherche                        | Pagefind                                                     | 18/20 sur les deux instances (27/10/2026, ADR 009)           |
| Observabilité                    | [exploitation/observabilite.md](/exploitation/observabilite) | Fait                                                         |
| CRISalid                         | [Projection](/projection)                                    | Instance de test branchée (29/10/2026) ; test à faire        |

## TODO par phase

### Phase 0 — Socle et décisions

- [x] Configuration d'instance et son schéma validé
- [x] Sondes de couverture sur 9 sources ouvertes, par instance
- [x] Choix de la seconde instance (Paris 1, ADR 007)
- [ ] Usage du proxy scanR validé par le MESR (Q1)
- [ ] Clé OpenAlex (Q2)
- [x] Liste officielle des structures : annuaire de l'établissement (issu de BiblioLabs), rapproché du RNSR (ADR 013)
- [ ] Validation des écarts annuaire / RNSR et rattachements aux Graduate Schools (Q7, Q8)
- [ ] Décision : vitrine propre ou Studio scanR (audit, « Valeur ajoutée »)

### Phase 1 — Sources

- [x] Moissonneurs RNSR, scanR, HAL (publications, AureHAL, domaines), ROR, Wikidata, ORCID, OpenAIRE, theses.fr, OpenAlex, annuaire institutionnel
- [x] Manifeste par instance, écriture atomique, reprise source par source
- [x] AureHAL interrogé par numéro RNSR : 69 % des structures reliées à HAL au lieu de 45 %
- [ ] Relancer theses.fr, en échec sur les deux instances (Q3) ; OpenAlex a répondu sans clé le 25/10/2026, à confirmer dans la durée (Q2)
- [x] ~~Moissonneur ANR~~ **écarté après mesure** (27/10/2026) : le jeu
      `fr-esr-aap-anr-projets-retenus-participants-identifies` ne couvre que **14 %** des 3 057
      projets ANR publiés (435 appariés) et n'apporterait qu'un résumé manquant. Or scanR ne
      donne d'URL pour **aucun** projet ANR, et cette URL se déduit du code du projet
      (`https://anr.fr/Projet-<code>`, vérifié par échantillon, un code inventé répondant 404) :
      **99 % des projets ANR ont désormais un lien**, sans source nouvelle à maintenir ni 15 Mo
      de brut par instance
- [ ] Moissonneur IdRef (résolution des personnes sans IdHAL ni ORCID) — **suspendu** : il
      élargirait la population publiée, or la règle de publication des personnes attend l'avis de
      la DPO (Q11). Écrire le moissonneur avant l'arbitrage reviendrait à préparer une collecte
      que la DPO peut refuser
- [x] Les 248 fiches de l'annuaire lues via le sitemap (chemins à plusieurs niveaux du CEA compris) : moisson complète, 248 sur 248
- [ ] Export BiblioLabs au lieu de la lecture des pages publiques (Q4)
- [ ] Moissonneur et sonde CRISalid sur l'instance locale de l'audit (Q6)
- [ ] Sonde « sites des unités » : lien vivant, fraîcheur

### Phase 2 — Fusion

- [x] Structures : RNSR ∪ scanR, priorités de champs, provenance par champ
- [x] Groupes et thématiques calculés par domaines HAL, repli RNSR (ADR 011)
- [x] Personnes filtrées par activité HAL récente (ADR 010)
- [x] Projets scanR ∪ OpenAIRE
- [x] Liste manuelle des membres d'un groupe (`assignment: 'manual'`)
- [x] Tests de fusion sur jeu figé (`tests/fixtures/raw/`), sans réseau : 7 tests
- [x] Rapport de qualité (`data/coverage/<instance>/qualite.md`) : libellés divergents, structures orphelines, fiches incomplètes, liens morts
- [x] Contrôle des liens sortants (`pnpm data:links`) ; les liens morts cèdent la place à la source suivante

### Phase 3 — Publication et rendu

- [x] JSON et Markdown par entité (`data/public/<instance>/`)
- [x] Pages : accueil, structures, fiche structure, groupes, thématiques, chercheurs (index alphabétique et fiches), projets, recherche, « À propos des données »
- [x] Génération statique de toutes les fiches, sitemap complet, redirection `/centres`
- [x] Données structurées schema.org sur les fiches de structures
- [ ] Écrire `sync_runs` à chaque publication (aujourd'hui : horodatage de `stats.json`)
- [ ] Rédaction des présentations manquantes : 49 structures de Paris-Saclay sur 248 (20 %), 31 sur 37 à Paris 1 (84 %). La liste s'exporte pour la communication : `pnpm data:export` → `data/export/<instance>/presentations-manquantes.csv`. Ces textes ne peuvent pas être générés : ils décrivent des unités réelles
- [x] Contrôle d'accessibilité (axe, WCAG 2.1 AA) : 0 violation, revérifié le 27/10/2026 sur les deux instances après la refonte du parcours de recherche ; audit RGAA humain restant

### Phase 4 — Recherche

- [x] Pagefind, filtres par type et groupe, structures en tête des résultats, mesure de l'issue des recherches
- [x] Jeu de 20 requêtes de référence par instance (`pnpm search:eval`) : **18/20** sur les deux, après correction de deux comportements de Pagefind 1.4.0 ([ADR 009](/decisions/recherche-pagefind)). Les deux échecs restants par instance tiennent au vocabulaire des fiches visées
- [ ] Si nécessaire : Meilisearch et recherche d'expertise sémantique

### Phase 5 — Marque blanche

- [x] Thème calculé depuis 4 couleurs, logos, libellés et navigation pilotés par la configuration
- [x] Deuxième instance (Paris 1) qui tourne avec sa seule configuration
- [x] Un dossier de build et un port par instance
- [x] Version anglaise sous `/en` : dictionnaire typé, libellés d'instance, hreflang, index de recherche par langue (ADR 012)
- [x] Pages légales au nom de l'éditeur de l'instance
- [ ] Contenu juridique des pages légales, validé par le service juridique et la DPO
- [x] Parseur d'annuaire générique, modes `pages` et `cards`, configuré par instance ; Paris 1 branché sur son annuaire (ADR 013)
- [ ] Découpage `packages/core`, `packages/ui`, `apps/*` si une instance doit diverger (Q17)

### Phase 6 — CRISalid et gouvernance

- [x] Accès en lecture à l'instance CRISalid de développement de Paris-Saclay (DiBISO, 29/10/2026)
- [ ] Test de la vitrine sur un extrait CRISalid ([protocole](/projection/test-donnees-crisalid))
- [ ] Adaptateur CRISalid (priorité 0 dans la fusion)
- [ ] Circuit de correction : signaler → source d'origine
- [ ] Validation des fiches par les directions d'unité ; procédure de retrait (Q13)

### Phase 7 — Ouverture du code

- [x] Licence : MIT, appliquée par défaut ([ADR 014](/decisions/licence)) — titulaire des droits à nommer et choix à confirmer par la DSI
- [ ] Guide « créer son instance » (base : [architecture/marque-blanche.md](/architecture/marque-blanche))
- [ ] Présentation à la communauté CRISalid

## Décisions prises

[ADR 007](/decisions/instances-marque-blanche) instances, [ADR 008](/decisions/chaine-de-donnees-ouvertes) chaîne de données, [ADR 009](/decisions/recherche-pagefind) Pagefind, [ADR 010](/decisions/publication-des-personnes) personnes, [ADR 011](/decisions/rattachement-par-domaines) rattachement par domaines. Les questions en attente sont dans [questions-ouvertes.md](/projet/questions-ouvertes).
