# Points de blocage et points d'attention

Tout ce qui bloque, tout ce qui mord. Les détails sont dans les pages d'origine ; celle-ci sert
à ne rien chercher deux fois.

## Ce qui bloque, et qui ne dépend pas de nous

Cinq points de **priorité 1** empêchent l'ouverture publique, quelle que soit la qualité du code.
Les messages sont rédigés et les pièces jointes se produisent en une commande
(`pnpm data:export`) : voir [a-faire-valider.md](/projet/a-faire-valider).

| Interlocuteur             | Ce qu'on attend                                    | En attendant                                                            |
| ------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------- |
| Direction de la recherche | Rattachement des laboratoires aux Graduate Schools | Calculé par domaines HAL, affiché « proposé »                           |
| Direction de la recherche | Liste officielle des laboratoires                  | Annuaire de l'établissement, **83 structures du RNSR en sont absentes** |
| DPO                       | Quelles personnes publier                          | ≥ 3 publications HAL depuis 2022                                        |
| DPO                       | Procédure de retrait d'une fiche                   | Aucune                                                                  |
| Juridique et DPO          | Contenu des pages légales                          | Textes génériques                                                       |

Et une question que rien de technique ne tranchera : **la valeur ajoutée face à HAL, scanR et aux
sites des unités n'est pas établie.** C'est le critère d'arrêt du projet, inscrit en phase 0 du
[plan d'action](/projet/plan-action).

## Ce qui bloque et qui est à nous

- **Trois fournisseurs d'analytics en parallèle** sont un dispositif de comparaison, pas une
  cible. Rybbit coûte à lui seul 5 conteneurs et la moitié des 2,1 Gio mesurés.
- **Deux requêtes de référence sur vingt** échouent par vocabulaire des fiches visées, pas par
  défaut de l'outil. Le jeu de requêtes ne doit pas être ajusté pour faire monter le score.
- **Les présentations manquantes** — 49 structures sur 248 à Saclay, 31 sur 37 à Paris 1 — ne
  peuvent pas être générées : elles décrivent des unités réelles.

## Les pièges, par domaine

### Données

- **`data/raw/` et `data/public/markdown/` ne sont pas versionnés.** Après un clone, tout
  régénérer : ~25 min et 2,5 Go. Les **JSON publiés**, eux, sont dans le dépôt (18 Mo) — Vercel
  construit à partir d'eux.
- **`data:probe` sort en code 1** dès qu'une source échoue, donc toujours avec theses.fr.
  `pnpm data:all` échoue en fin de chaîne alors que tout le reste a réussi.
- **theses.fr** échoue sur les deux instances. **OpenAlex** répond sans clé, mais le budget
  gratuit reste épuisable.
- **L'annuaire Saclay n'affiche pas les codes d'unité** : le rapprochement passe par le RNSR,
  présent sur 97 % des fiches.
- Toute régénération doit être suivie de `pnpm data:freeze`, sinon `data:verify` bloque le push.

### Build et déploiement

- **`NEXT_PUBLIC_SITE_URL` doit être définie au build**, pas au démarrage : elle est gravée dans
  les URL canoniques, les `hreflang` et tout le sitemap.
- **`PORT` change le repli** de cette variable : construire puis servir sur un autre port grave
  une mauvaise adresse.
- **`next build` fige le contenu de `public/`.** Pagefind s'exécutant après, un serveur démarré
  pendant l'écriture de l'index sert des 404 jusqu'à redémarrage — et la page de recherche accuse
  le build. Attendre la fin complète du script, pas la ligne « Indexed … pages ».
- **Pagefind déduit la racine du site de l'emplacement de son script.** Servi ailleurs que sous
  `/pagefind/`, il préfixe toutes ses URL de résultat : les titres restent justes, les liens
  cassent. Voir [exploitation/deploiement-vercel.md](/exploitation/deploiement-vercel).
- **Sur Vercel, les pages pré-rendues ne sont pas dans `.next/server/app/`.** L'adaptateur de la
  plateforme les range sous `.next/server/route-cache/` : un script qui cherche le HTML au chemin
  habituel n'en trouve aucun. Et la liste des fichiers déployés est arrêtée à la fin de
  `next build` : un fichier écrit après, même dans `.next/static/`, n'est pas servi. Voir
  [Déploiement Vercel](/exploitation/deploiement-vercel).
- **Playwright** : les navigateurs ne sont pas installés par `pnpm install`. Sans eux, `a11y` et
  `search:eval` échouent sur un message trompeur.
- **Nettoyer `.next-<instance>`** avant de reconstruire après un changement de variables
  `NEXT_PUBLIC_*` : des reconstructions successives ont déjà laissé un chunk absent servi en 500.

### Interface

- **Le thème Mantine contient des fonctions** : il ne doit être instancié que dans `AppProviders`.
- **Les sous-composants Mantine ne traversent pas la frontière serveur.** `Table.Thead` vu d'un
  composant serveur vaut `undefined`, et l'erreur — « Element type is invalid » — ne dit pas où
  chercher. Tout usage de `Table.*` vit dans un fichier `'use client'`.
- **Une couleur ne porte jamais un statut seule** : le vert et le rouge employés sont à ΔE 4,1 en
  deutéranopie. Icône et mot obligatoires.
- **Deux jeux de couleurs de statut** : aplats à 3:1 contre la surface, texte à 4,5:1.
- **Aucune couleur en dur** hors de `src/theme/tokens.css` : un `#ffffff` posé dans un composant
  casse silencieusement les instances dont la charte n'est pas blanche.

### Mesure

- **Un code HTTP 2xx ne prouve rien.** Umami répond `200` avec `{"beep":"boop"}` à un
  User-Agent de robot ; Rybbit range l'événement dans `bot_events`. Vérifier en interrogeant les
  données, jamais le statut.
- **Un navigateur piloté est pris pour un robot** : remplacer `HeadlessChrome` dans le
  User-Agent, sinon le test mesure le filtre antirobot.
- **Les vues partent tout de suite, les événements attendent 5 s** (`flushIntervalMs`). Un test
  qui ferme le navigateur avant mesure son propre empressement.
- **Le jeton d'API Matomo expire** en annonçant « aucun événement retrouvé », alors que tout est
  stocké.
- **Comparer un total ne détecte rien** : un contrôle « supérieur à zéro » a laissé passer une
  vue sur deux et une page mal attribuée. Mesurer un écart avant/après.

## Où regarder

| Sujet                                       | Page                                                                                   |
| ------------------------------------------- | -------------------------------------------------------------------------------------- |
| Qui valide quoi, messages prêts             | [a-faire-valider.md](/projet/a-faire-valider)                                          |
| Questions ouvertes, Q1 à Q20                | [questions-ouvertes.md](/projet/questions-ouvertes)                                    |
| Reprise par un agent ou une personne        | [../plan-agent.md](https://github.com/waxland/saclay-research/blob/main/plan-agent.md) |
| Pannes d'analytics, symptôme par symptôme   | [analytics/troubleshooting.md](/analytics/exploitation/troubleshooting)                |
| Réserves sur le POC de mesure               | [analytics/revue.md](/analytics/bilans/revue)                                          |
| Ce qu'il reste à reprendre dans l'interface | [audit-UXUX.md](/interface/audit-ux-ui)                                                |
