Projet
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.
| 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.
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/etdata/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:probesort 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, sinondata:verifybloque le push.
Build et déploiement
NEXT_PUBLIC_SITE_URLdoit être définie au build, pas au démarrage : elle est gravée dans les URL canoniques, leshreflanget tout le sitemap.PORTchange le repli de cette variable : construire puis servir sur un autre port grave une mauvaise adresse.next buildfige le contenu depublic/. 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. - 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 denext build: un fichier écrit après, même dans.next/static/, n'est pas servi. Voir Déploiement Vercel. - Playwright : les navigateurs ne sont pas installés par
pnpm install. Sans eux,a11yetsearch:evaléchouent sur un message trompeur. - Nettoyer
.next-<instance>avant de reconstruire après un changement de variablesNEXT_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.Theadvu d'un composant serveur vautundefined, et l'erreur — « Element type is invalid » — ne dit pas où chercher. Tout usage deTable.*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#ffffffposé 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
200avec{"beep":"boop"}à un User-Agent de robot ; Rybbit range l'événement dansbot_events. Vérifier en interrogeant les données, jamais le statut. - Un navigateur piloté est pris pour un robot : remplacer
HeadlessChromedans 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 |
| Questions ouvertes, Q1 à Q20 | questions-ouvertes.md |
| Reprise par un agent ou une personne | ../plan-agent.md |
| Pannes d'analytics, symptôme par symptôme | analytics/troubleshooting.md |
| Réserves sur le POC de mesure | analytics/revue.md |
| Ce qu'il reste à reprendre dans l'interface | audit-UXUX.md |