View as:

MaQI M3 — Data sources cartography (explore / validate / negotiate)

cosmon worker (maqi-m3-data-sources-86f5)

Idée — MaQI M3 : cartographie des sources de données

Statut : capturée (step 1/3 de idea-to-plan). Cette note documente l'idée et son intention. L'évaluation de faisabilité (step 2) et le plan actionnable (step 3) suivront dans ce même fichier, comme addenda.

1. Résumé en une phrase

Transformer le catalogue M1 (liste curée de providers) en une cartographie vivante et exploitable des sources de données MaQI, où chaque entrée porte un statut opérationnel (explorée, validée, à négocier) et une trace de ce qui manque pour passer à l'étape suivante.

2. Contexte (d'où vient l'idée)

Le sprint M1 (cf. docs/sprint/2026-04-14-maqi-sprint.md) a produit :

Ce catalogue est une photographie d'intention : il dit ce que CAL a en tête. Il ne dit pas :

Autrement dit, M1 a posé l'inventaire. M3 doit poser la topographie opérationnelle qui lui donne sens.

3. Motivation

Trois forces poussent vers M3 dès maintenant :

  1. Dette d'exploration. Plusieurs entrées du catalogue sont marquées to_document ou to_scrape sans que personne n'ait encore regardé ce qu'elles livrent réellement (ex. ICEYE, Quant Insight, Babbl, OpenInfraMap). Le coût marginal d'un premier regard est très faible ; le coût de ne pas regarder s'accumule à chaque décision d'achat.
  2. Dette de validation. Nous avons reçu du S&P Global et un dump historique RavenPack (cf. docs/data-anomalies.md §2 : année 2020 manquante) sans relire en détail ce qui est utilisable. Tant que nous n'avons pas une carte validée des champs et des périodes couvertes, toute promesse de livrable est fragile.
  3. Dette de négociation. Le sprint M1 liste sept providers to_negotiate (Databento, Premialab, SocGen Index, Macrobond, Turnleaf, Tradition Bond LOB, RavenPack). Sans cartographie commune, chaque négociation repart de zéro : on ne sait pas quel argument, quel contact, quel besoin rattacher à chaque demande. Charles-Albert absorbe implicitement cette mémoire, ce qui est à la fois fragile et peu scalable pour l'équipe.

4. Scope initial

Dans le scope

Hors scope (volontairement)

5. Hypothèses de travail (à challenger en step 2)

#HypothèseRisque si fausse
H1Le catalogue M1 est exhaustif pour ce que CAL a en tête aujourd'hui.Découverte tardive d'un provider omis, qui casse le scope.
H2Chaque provider peut être documenté en < 1 h par un humain avec accès web.Le coût d'exploration explose pour les sources opaques.
H3Un format markdown-par-provider + YAML typé est suffisant (pas besoin d'une vraie DB).Difficulté à faire des requêtes transverses si le volume grossit.
H4La validation est possible en lecture seule (pas besoin de setup compute/ingest lourd).Nécessité de mobiliser l'infra prévue pour des sprints ultérieurs.
H5Les négociations en cours peuvent être résumées sans exposer de détails confidentiels dans le repo.Obligation de gérer un store secret séparé.

6. Formes possibles du livrable (à arbitrer en step 3)

Les trois options ne sont pas exclusives. L'arbitrage step 3 décidera laquelle (ou quelle combinaison) devient le squelette et laquelle devient l'accessoire.

7. Critères de succès

M3 est terminé quand :

  1. Chaque provider du catalogue M1 a un statut opérationnel et une dernière date de revue remplis, quel que soit le format retenu.
  2. Au moins un livrable du Master (Colab démo, notebook, article) est explicitement rattaché à au moins une source validée, pour qu'on puisse dire : "ce livrable tient parce que cette source est utilisable".
  3. Charles-Albert peut, en ouvrant le repo, corriger la cartographie sans avoir à demander un accès ou à lire un YAML.
  4. L'équipe peut répondre, sans consulter CAL, à la question : "Cette source, on en est où ?"

8. Questions ouvertes (à traiter en step 2–3)

9. Rattachement au sprint

Cette idée étend le sprint 2026-04-14-maqi au-delà du livrable M1. Elle ne remplace rien du M1 ; elle compose avec lui :

Les artefacts M1 restent intouchés tant que M3 n'a pas été validé.

10. Étapes suivantes (molécule)


Addendum step 2 — Évaluation de faisabilité

Ajouté le 2026-04-14 (step 2/3 de idea-to-plan). Cet addendum confronte les hypothèses H1–H5 du capture step, chiffre grossièrement le coût d'exploration par catégorie de provider, et tranche sur les trois options de livrable (A / B / C).

A. État de l'art repo (ce qui existe déjà)

Relecture des artefacts M1 et annexes :

Implication : M3 n'a pas besoin d'inventer un format. Il doit composer avec ce qui existe (YAML stable + markdown humain + ADR pour les décisions structurantes).

B. Confrontation des hypothèses H1–H5

#HypothèseVerdictJustification
H1Le catalogue M1 est exhaustif.Partiellement vrai.Exhaustif pour ce que CAL a déjà mentionné. Pas exhaustif pour ce qu'il peut ajouter. La cartographie doit rester ouverte à l'extension — ne pas fermer la liste.
H2< 1 h de documentation par provider.Vrai pour la majorité, faux pour 3–4 cas.Pour les sources à URL publique + 1 page CGU (MarineTraffic, IMF PortWatch, OpenInfraMap, ICIS, Babbl, Brain Company, Quant Insight, NewMark) : < 30 min. Pour les sources opaques (ICEYE, Turnleaf/GDELT, Tradition Bond LOB, Shipfix) : plusieurs heures, voire une semaine d'attente email. Pour les sources déjà en notre possession (5 flux S&P Global + Databento NASDAQ + RavenPack dump) : la validation demande de lire vraiment les fichiers, donc plusieurs heures par flux.
H3Markdown-par-provider + YAML typé suffit.Vrai à court terme, à réévaluer à 50+ providers.Le volume actuel (22) est trivialement gérable par fichiers plats. Option B (un .md par provider) est tenable. L'option A (tout-YAML) sature en lisibilité dès qu'on ajoute des notes libres de plus de 5 lignes. L'option C (matrice croisée) est utile pour le pilotage mais en plus, pas à la place.
H4Validation en lecture seule.Vrai partiellement.Pour les flux Xpressfeed (S&P), il faut déjà un environnement qui parse les fichiers livrés — ce n'est pas juste de la lecture, c'est un mini-pipeline d'ingest minimal (décompression, ouverture, comptage de lignes, inspection de schéma). Faisable sans compute cloud, mais pas trivial. Pour Databento (.dbn.zst), idem. Pour RavenPack, idem. \(\Rightarrow\) M3 doit prévoir un sous-livrable "check d'ingest minimal", pas juste des notes textuelles.
H5Négociations résumables sans secret.Vrai si on s'interdit les prix et les NDAs.Le repo peut porter : qui, quand, statut ("email envoyé", "en attente", "signé"). Le repo ne doit pas porter : prix, conditions commerciales, draft de NDA, historique d'emails privés. Décision naturelle : un champ negotiate_log court dans le YAML + un pointeur opaque (ref: <short-id>) vers un store externe pour le détail sensible. Le store externe sort du scope M3.

C. Typologie effective (4 classes, coût décroissant)

La relecture du catalogue fait émerger 4 classes de providers qui ne coûtent pas la même chose à documenter :

  1. Classe I — owned, needs validation (5 entrées). S&P Global Compustat, Transcripts, GICRS, ESG Physical Risk, Panjiva. Coût unitaire : 2–4 h (décompression, inspection de schéma, lecture de la licence, sample d'un enregistrement dans un notebook).
  2. Classe II — owned legacy, needs verification (2 entrées). Dump RavenPack (trou 2020), lot Databento NASDAQ. Coût unitaire : 1–2 h (vérifier ce qu'on a, compléter les anomalies connues).
  3. Classe III — public URL, needs lightweight exploration (8 entrées). MarineTraffic, IMF PortWatch, OpenInfraMap, ICIS, EuropeanReports, Ardian/Artefact (notebook Colab + HF dataset), Babbl, Quant Insight, Brain Company, NewMark. Coût unitaire : 15–30 min (ouvrir la page, lire le about, screenshot, noter CGU/licence, statut explored).
  4. Classe IV — opaque / contact-only, needs email log (7 entrées). TheForecastingMachine, Shipfix, SpaceKnow, Databento négociation, Premialab, SocGen Index, Macrobond, Turnleaf, Tradition Bond LOB, RavenPack flux, ICEYE. Coût unitaire : 5 min d'écriture + N jours d'attente (juste maintenir le log de négociation).

Coût total estimé :

ClasseNCoût/unitéCoût totalBloquant ?
I53 h15 hCompute léger requis
II21.5 h3 hNon
III820 min\(\approx\) 3 hNon
IV75 min< 1 hDépend de tiers (async)
Total22\(\approx\) 22 h de travail actif

Lecture : M3 est faisable par un humain en une semaine-équivalent si les flux Xpressfeed sont accessibles depuis une machine locale. La partie "attente négociations" (classe IV) est asynchrone et ne bloque pas les autres classes.

D. Contraintes dures (à respecter sans discussion)

Issues de docs/cal/tech-solutions.md + règle M1 :

E. Arbitrage A / B / C

Re-confrontation des trois options de livrable du capture step, à la lumière de B–D :

Décision retenue : B (principal) + A (squelette enrichi) + C (vue dérivée). Les trois se complètent et aucun ne remplace les autres. Ce trio sera validé par un ADR en step 3.

F. Risques et parades

RisqueProbabilitéImpactParade
R1 — Les flux Xpressfeed ne sont pas accessibles depuis une machine locale (classe I non livrable).MoyenneHautCommencer par un unique flux (Compustat) comme spike de validation avant de déclarer le format de validation.
R2 — La cartographie devient un bureau de tickets parallèle à cosmon.MoyenneMoyenImposer que chaque action M3 (explore/validate/negotiate) soit tracée dans le fichier provider, pas dans une issue séparée. Les issues cosmon ne naissent que si un provider est blocked.
R3 — Charles-Albert n'adopte pas le format (retour au docx).FaibleHautGarder le README humain du M1 comme porte d'entrée. Tout ajout M3 doit passer par un markdown lisible sans YAML.
R4 — Dette d'exploration qui regrandit après une semaine (nouveaux providers ajoutés par CAL).HauteFaiblePrévoir dans le plan step 3 une règle de résynchronisation : à chaque resync des docs CAL, diff des providers mentionnés, nucléation automatique d'un enfant pour chaque nouveau provider.
R5 — Les molécules enfants (classe I) bloquent sur le compute.MoyenneMoyenScinder explicitement les tâches de classe I en read-only describe (faisable local) vs ingest-pipeline (à renvoyer vers un futur sprint engine).

G. Verdict global

M3 est faisable en une semaine-équivalent de travail humain actif, sous deux conditions :

  1. Accès local aux flux Xpressfeed déjà livrés par S&P Global (sinon la classe I bascule hors scope et l'effort tombe à \(\approx\) 7 h).
  2. Acceptation du format B + A + C (un .md par provider, le YAML comme squelette enrichi, une matrice dérivée).

Les hypothèses H1, H2, H3, H5 tiennent moyennant raffinement (voir ci-dessus). H4 (lecture seule) est à affaiblir : la validation classe I / II demande un micro-pipeline d'ingest, pas de la simple lecture.

Go pour step 3. Le plan actionnable doit :


Addendum step 3 — Plan actionnable

Ajouté le 2026-04-14 (step 3/3 de idea-to-plan). Cet addendum fige les décisions sous forme de plan exécutable, liste les molécules enfants nucléées (toutes temp:warm), et verrouille les préalables d'infrastructure.

1. Décisions figées

2. Préalables d'infrastructure

Avant de pouvoir tackle la classe I, il faut :

Les classes II, III, IV n'ont pas de préalable dur et peuvent être tackle-ées immédiatement.

3. Molécules enfants à nucléer (toutes temp:warm)

Chaque enfant est une molécule task-… avec la formule par défaut (tackle-verify-done), scopée à une classe et paramétrée par la liste explicite des providers à traiter. Tags obligatoires : maqi, m3, data-sources, temp:warm.

Enfant (ID)FormuleScopeProvidersEffortOrdre
task-20260414-90f9task-workClasse I — owned, validatespgmi-compustat, spgmi-transcripts, spgmi-gicrs, spgmi-esg-physical-risk, spgmi-panjiva\(\approx\) 15 h (bloqué sur P1)après P1
task-20260414-ababtask-workClasse II — legacy, verifyravenpack (dump), databento (lot NASDAQ)\(\approx\) 3 hlibre
task-20260414-a6dftask-workClasse III — public URL, exploremarinetraffic, imf-portwatch, openinframap, icis-fertilizers, europeanreports, ardian-artefact-fundamentals, babbl, quant-insight, braincompany, newmark-risk, iceye\(\approx\) 3 hlibre
task-20260414-653etask-workClasse IV — opaque, negotiate logtheforecastingmachine, shipfix, spaceknow, databento, premialab, socgen-index, macrobond, turnleaf, tradition-bond-lob, ravenpack (flux)< 1 h actif + asynclibre

Chaque enfant porte les tags temp:warm, maqi, m3, data-sources, et class:<i|ii|iii|iv>. Tous sont auto-liés à cette idée via un edge DecayedFrom/DecayProduct.

Note : la classe III telle que nucléée inclut ICEYE, Brain Company, NewMark Risk et Quant Insight bien qu'ils soient classés to_document dans le catalogue. Ce sont tous des sites publics documentables en lecture, donc bien classe III (pas IV) pour la cartographie. Le YAML les gardera en to_document tant qu'une décision d'achat / scrape n'aura pas été prise.

Chaque molécule enfant doit, à sa clôture :

  1. Avoir créé les docs/providers/<id>.md pour tous les providers de sa classe (squelette minimum : frontmatter + section Explore non vide).
  2. Avoir enrichi chaque entrée YAML correspondante avec operational_status, last_reviewed, detail_doc, linked_deliverables (liste vide acceptable au démarrage).
  3. Avoir mis à jour docs/providers/cartography.md avec la ligne correspondant à sa classe.
  4. Porter le tag temp:warm dès la nucléation (contrainte formula idea-to-plan).

4. Commande de nucléation

Les enfants seront nucléés par ce worker à la fin de ce step, via :

cs nucleate task --var topic="MaQI M3 classe I — validate owned S&P Global feeds" \
  --var scope="M3/class-I" --var parent="idea-20260414-86f5"
# puis tag immédiatement :
cs tag task-<id> --add temp:warm
cs tag task-<id> --add maqi
cs tag task-<id> --add m3
cs tag task-<id> --add data-sources

(Commande réelle exécutée plus bas, capturée dans la sortie du worker et dans les commits d'état cosmon.)

5. Livrables du step 3

Au moment de cs complete pour cette molécule :

6. Ce qui ne fait PAS partie du plan

7. Critère de complétion de l'idée

idea-20260414-86f5 est cs complete quand :