Aller au contenu

Parcours thématique des décisions

Cette page propose un tour cohérent des décisions du dépôt, regroupées par thème plutôt que par numéro. Elle s’adresse à un nouveau venu : plutôt que de lire les 88 ADR dans l’ordre chronologique, suis le fil ci-dessous pour comprendre pourquoi le dépôt est fait comme il est.

Pour la liste exhaustive par numéro (et le statut de chacun), voir l’index. Pour le quand ouvrir un ADR, voir la fin de l’index.

Par où commencer ? Si tu ne lis que trois décisions, lis 0002 (comment le dépôt est organisé), 0035 (ce que le dépôt cherche à être) et 0028 (comment la documentation reste fiable).

Les décisions de vocation : à qui s’adresse le dépôt, et quelle posture il adopte. À lire en premier — elles éclairent toutes les autres.

En résumé. Cette section pose ce que le dépôt veut être. La décision-chapeau est 0035 : Atlas est un dépôt généraliste et ouvert, et tout ce qui y est produit (code, documentation, identifiants, ADR) reste neutre vis-à-vis d’un domaine, d’une marque et d’un établissement, pour qu’un contributeur de n’importe quel horizon puisse le reprendre. 0031 en décline le versant outil — un logiciel générique et multi-tenant, pensé pour la contribution inter-établissements — et 0012 le versant éditorial — un ton factuel, sans positionnement promotionnel ni framing institutionnel. Les trois disent la même posture sous trois angles ; 0035 est le principe directeur, 0031 et 0012 ses applications.

La structure du monorepo : son découpage, ses frontières, ses conventions de nommage. (Un monorepo est un dépôt unique qui héberge plusieurs sous-projets au lieu d’un dépôt par projet.)

En résumé. La colonne vertébrale est 0002 : le dépôt est découpé en huit catégories, chacune avec ses propres règles, ce qui fixe où va chaque sous-projet. Sur ce squelette se greffent des règles de placement et de nommage : la logique métier vit dans packages/, les CLI (outils en ligne de commande) restent minces et s’y adossent (0008) ; atlas est la source canonique dont l’app standalone amarre est dérivée (0009). Côté publication, les paquets purement internes sont marqués private (0011) et ceux qui sont publiés suivent la convention de nommage atlas- (0022). 0003 sert d’exemple concret : un paquet scindé entre catégorie assets et catégorie cli pour respecter ces frontières. 0055 amende 0002 en ajoutant une 9e catégorie dataops/ : le code DataOps (Dagster, dbt) y vit en Python natif, hors du paradigme Node/TypeScript — et précise du même coup que 0008 (logique dans packages/) et 0005 (Effect) ne portent que sur le périmètre TypeScript.

Les choix de technologies et leurs raisons — dont quelques contraintes subies plutôt que choisies.

En résumé. Le paradigme du code métier est Effect, une bibliothèque de programmation fonctionnelle pour TypeScript (0005) ; un cadrage de 2026-06 l’étend de simple « langage de description » à véritable couche d’exécution, détaillé dans six ADR de socle — runtime central (0045), frontière avec SvelteKit (0046), stratégie de validation (0047), modèle d’erreur HTTP (0048), convention de test (0049) et limite de l’audit knip (0050). Le socle applicatif retient SvelteKit (front), Hono (API) et Bootstrap (UI) (0006), et deux plateformes externes sont intégrées (0007). Plusieurs décisions ici ne sont pas des choix mais des contraintes assumées : un SDK figé en 25.x (0010), un lint Svelte volontairement strict (0020), des ranges de versions ~ sur les paquets publiables (0024) et une dette amont sur storybook:build, documentée pour éviter de la rechercher en vain (0023).

Le DevSecOps : ce qui garantit qu’une modification ne casse rien et reste sûre. (Le DevSecOps intègre la sécurité directement dans la chaîne de développement et de livraison.) C’est le cœur de la crédibilité du dépôt public.

En résumé. Le périmètre est cadré par 0001 : le chantier est complet côté dépôt, et les neuf items dépendant d’une coordination externe sont reportés sine die, chacun avec son bloquant. La discipline de contribution est posée et jamais contournée : Conventional Commits à scopes restreints (0014), hooks Git via lefthook (0015), et branch protection sur main (0016) ; la CI s’allège selon les chemins modifiés sans affaiblir cette protection (0034). La publication des paquets est signée par OIDC sur deux registres (0017). La posture de réponse sécurité fixe un SLA de remédiation des findings (alertes des outils d’analyse) (0018) et acte que le rôle de security champion reste vacant (0027) ; toute exception aux règles se trace explicitement (0019). Enfin, un volet cloud-native (12-factor) : auditer régulièrement (0039), rendre les caches partageables via un backing-service plutôt qu’un fichier local (0040) et authentifier le service CRF (0041).

La politique de documentation : pour qui on écrit, à quels niveaux, et comment on empêche la doc de mentir.

En résumé. Le lecteur visé et la langue sont fixés par 0013 : on écrit en français pour un public non-expert. 0025 organise l’écriture en trois niveaux (surface, profondeur, inline) pour servir à la fois le néophyte et l’expert. Le principe anti-mensonge est 0028 : la doc est un miroir contrôlable du code — ce qui est dérivable du code est généré et vérifié en CI, le reste est audité (présence, liens, cohérence), de sorte qu’une dérive casse la CI. 0032 en précise la mécanique pour les indicateurs : distinguer le contenu généré déterministe (vérifié par diff) du snapshot (append-only) pour historiser sans rendre la CI instable. Enfin 0036 documente l’outil qui construit cette documentation (migration VitePress → Astro Starlight) et pourquoi on en a changé.

6. Le pipeline de collaborations (le grand projet)

Section intitulée « 6. Le pipeline de collaborations (le grand projet) »

Le chantier applicatif central : transformer des données de citations en recommandations de collaboration, à travers une plateforme DataOps. (Le DataOps applique au traitement de données les pratiques d’automatisation et de qualité du DevOps.)

En résumé. 0029 pose l’architecture V1 : une plateforme DataOps alignée sur les standards du marché (lakehouse Parquet + DuckDB, transformations dbt, orchestration Dagster, qualité de données, index PostgreSQL/pgvector pour l’exploration), un flux mensuel qui va des citations brutes aux paires de chercheurs et leurs features. Le contrat producteur ↔ consommateur reste Parquet + manifest, et les fonctionnalités les plus avancées (LLM génératif notamment) sont renvoyées à un palier 2. 0033 tient le contrat d’interface entre l’application atlas et le cluster qui l’exploite : il est la source de vérité unique des points de contact (stockage objet S3, base PostgreSQL/pgvector, orchestrateur, lineage, exposition…), fixe les conventions et formats mais pas les valeurs propres à une instance, et impose que tout changement d’un point de contact se reflète dans la même pull request que le code ou l’infrastructure concernés. 0054 amende 0029 sur l’ingestion : pour couvrir toute la base OpenAlex (works + authors), la source devient le snapshot S3 (copie complète exportée, synchronisée de façon incrémentale par date), l’API REST étant reléguée aux compléments ciblés.

Le RGPD : ce qui relève du dépôt et ce qui relève de chaque déployeur.

En résumé. 0026 trace la ligne de partage : l’institutionnel (validation des bases légales, désignation du responsable de traitement) reste hors dépôt et relève de chaque établissement exploitant ; le dépôt ne décide pas à leur place. 0030 rouvre ce cadre pour le cas précis du profilage de collaborations et tranche les bornes techniques côté code : un traitement en opt-out fondé sur une base légale d’intérêt public (à confirmer par le DPO de l’établissement), où la déclaration d’alliances par l’utilisateur filtre l’affichage et non l’ingestion, et où le droit d’opposition (art. 21) retire effectivement une personne du mart et de l’index. Les deux ne se contredisent pas : 0030 outille, côté code, ce que 0026 laisse à l’exploitant.

Des décisions ponctuelles : un cas particulier, une politique locale, une dette qu’on choisit de porter en connaissance de cause.

En résumé. Ces décisions n’ont pas de portée transverse ; elles tranchent un cas local en l’assumant. 0004 retient des volumes anonymes pour la sandbox sillage-sandbox, un choix d’isolation propre à cet environnement. 0021 assouplit la politique de dépendances dans les sandboxes, là où le risque est contenu et où la rigueur appliquée au reste du dépôt serait disproportionnée.

Plusieurs ADR apparaissent dans plus d’un thème (par exemple 0031 touche à la vocation et au RGPD, 0030 au pipeline et à la conformité) : c’est normal, une décision structurante rayonne sur plusieurs sujets. Le classement ci-dessus privilégie l’angle le plus utile à un premier parcours.