Skip to content

[EPIC] Verification des citations arXiv dans les notebooks — 83 notebooks, 107 IDs, partition par famille #11168

Description

@myia-ai-01

Pourquoi maintenant

Trois défauts d'attribution ont été trouvés en trois jours, dans trois familles différentes, chacun découvert par hasard plutôt que par une passe :

| Défaut | Notebook | Nature | État |

|---|---|---|---|

| Sendov attribué à T. Tao | Lean-19 / Lean-20 | mauvais auteur (la preuve est de Lech Mazur) | corrigé e1ad7868a (#11065) |

| Gill (2011) → Comptes Rendus | Infer-3 / PyMC-3 | mauvais journal (c'est Statistica Neerlandica 65(1)) | corrigé #11160 |

| « Lidman (2014), On the Heegaard Floer homology of K11n102 » | Lean-17-Knots-b | article inexistant — année, titre et journal fabriqués | #11110, PR #11163 en cours |

Aucun n'a été trouvé par un contrôle : le premier par un nit user, les deux autres par une lecture attentive. Une classe de défaut qui se découvre par hasard trois fois en trois jours n'est pas une série de coïncidences — c'est une surface non couverte.

C'est une régression pédagogique sérieuse et pas une coquille : un notebook de cours qui attribue un théorème à la mauvaise personne, ou qui renvoie l'étudiant vers un article qui n'existe pas, enseigne quelque chose de faux et détruit la confiance dans tout le reste du document.

La surface, mesurée


notebooks citant un arXiv ID : 83

IDs arXiv distincts           : 107



famille            notebooks    IDs

GenAI                     18     53

QuantConnect              16     44

ML                        16     41

SymbolicAI                12     16

IIT                        9     12

RL                         4      8

Probas                     6      7

FallacyDetection           2      5

(Hors _archives/ et .ipynb_checkpoints, cellules markdown seulement.)

Plus largement, 335 notebooks portent au moins une citation de forme Auteur (année) — 795 au total. Le sous-ensemble arXiv est retenu comme périmètre de cette issue parce qu'il est le seul mécaniquement vérifiable : l'API arXiv rend titre et auteurs pour un ID donné, donc le verdict est objectif et non une appréciation. Le reste (journaux, livres) demande un jugement et relève d'un traitement au cas par cas.

Méthode par grain

Un grain = une famille. Pour chaque ID arXiv cité dans les notebooks de la famille :

  1. Interroger https://export.arxiv.org/api/query?id_list=<ID> — récupérer title, tous les author/name, published.

    Corrigé le 2026-08-16 — la version initiale de cette ligne prescrivait http://, et c'est un fabricant silencieux de faux ID-FANTÔME. Le endpoint http renvoie 301 avec un corps vide : sans -L (ou sans https://), un script récolte 0 octet, ce qui est indiscernable de « cet ID n'existe pas ».

    curl -s http://export.arxiv.org/... -> status=301 size=0 (lu comme "aucune entrée")

    curl -sL https://export.arxiv.org/... -> status=200 totalResults=3

    Garde-fou obligatoire dans tout script de tranche : asserter totalResults == len(ids) et échouer bruyamment sur un corps vide. Un audit qui ne distingue pas « l'API n'a rien répondu » de « l'ID n'existe pas » ne mesure pas ce qu'il annonce — et son mode d'échec est de faire supprimer une citation valide, c'est-à-dire d'introduire exactement le défaut que cette epic corrige.

  2. Comparer aux trois choses que la prose du notebook affirme : le titre, le ou les auteurs, l'année.

  3. Poser un verdict par citation :

| Verdict | Critère |

|---|---|

| OK | titre, auteurs et année concordent |

| DRIFT-MINEUR | l'ID est bon, un détail diverge (année de v1 vs v2, prénom abrégé) → corriger sans cérémonie |

| MAUVAISE-ATTRIBUTION | l'ID est bon mais la prose nomme un autre auteur → corriger, c'est la classe Sendov |

| ID-FANTÔME | l'API ne renvoie rien, ou renvoie un article sans rapport → la référence est fabriquée, chercher la vraie source |

  1. Corriger dans le notebook. Si une cellule de code est touchée, re-exécuter (C.2/C.3) ; une passe markdown seule ne demande pas de re-exécution.

Le piège à ne pas retomber dedans

Établir qu'une référence est fausse ne dit rien de l'attribution. Ce sont deux propositions distinctes, et #11163 a failli livrer l'erreur miroir : ayant correctement établi que « Lidman (2014), On the Heegaard Floer homology of K11n102 » n'existe pas, la PR concluait « attribution fabriquée » et retirait le nom de Lidman partout — alors que la vraie source (arXiv:2606.12431, The unknotting number of 11n102 is 2) est signée Tye Lidman, auteur unique. Le notebook citait le bon auteur pour la mauvaise référence.

Donc : après avoir trouvé la vraie source, lire qui l'a signée avant de conclure. Un correctif d'attribution ne doit jamais produire une désattribution.

Acceptation, par grain

  • Chaque ID arXiv de la famille porte un verdict écrit parmi les quatre ci-dessus.

  • Toute MAUVAISE-ATTRIBUTION et tout ID-FANTÔME est corrigé dans le notebook, avec la source réelle citée auteur inclus (**Nom Prénom (année)** — *Titre*, arXiv:ID).

  • Les OK sont listés (compte suffit), pour que le grain suivant ne les re-vérifie pas.

  • Si des cellules de code sont modifiées : re-exécution papermill + outputs committés.

Partition

Une famille = un grain = une PR, [CLAIMED] … paths: sur le chemin de la famille pour que deux lanes puissent travailler en parallèle sans se bloquer (scopes disjoints, cf #10419). Genre = le genre de notebook de la famille (CONTENU), tier MED en général — DEEP si la passe déterre une refonte de section.

Ordre suggéré par densité : GenAI (53) · QuantConnect (44) · ML (41) · SymbolicAI (16) · IIT (12) · RL (8) · Probas (7) · FallacyDetection (5).

État des tranches (réécrit 2026-09-01 par ai-01 — le tableau du 2026-08-16 n'avait jamais suivi ses propres livraisons)

Les 8 familles sont couvertes et mergées. Aucune n'est à repiocher. Le tableau précédent laissait ML, SymbolicAI et Probas en « ouvert — bloqué », alors que leurs correctifs étaient mergés dès le 2026-08-16/17. Trois lanes ont pu lire ces trois lignes comme du travail disponible ; c'est le défaut que cette réécriture supprime.

Famille IDs Passe 1 Passes suivantes État
FallacyDetection 5 #11169 — mergé
GenAI 53 #11181 — mergé
QuantConnect 44 #11183 #11235 (Markowitz 7(2)→7(1)), #12832 (GAE 2016/ICLR → 2015 arXiv-only, réf. Yun 2024) mergé
IIT 12 #11189 #11295 (ICLR 2022 Power et al. ; §-pointeur 2511.18397) mergé
RL 8 #11191 #11225 (titre HER sans accent), #12838, #13349 (drift cellule 27 rl_6c_ppo_from_scratch) mergé
ML 41 #11187 #11242 (4 pointeurs de section ESL), #12824 (Xi survey 2025→2023, 12 occ. + titre Advani-Saxe) mergé
SymbolicAI 16 #11188 #11386 (16 IDs vérifiés, date IMO 2025 corrigée sur Lean-7b) mergé
Probas 5 (7 annoncés) #11192 #11272 (19 pointeurs de section faux/fabriqués, 14 notebooks) mergé
GameTheory (passe 2) — — #13887 (vérif. identités + retrait d'un suffixe fabriqué sur GT-13) mergé

25 PRs mergées citent cette EPIC. Deux lanes l'ont vérifiée firsthand et indépendamment le 2026-08-31 : myia-po-2024:CoursIA-2 (c.773, gh search prs sur origin/main) et myia-po-2023:CoursIA-2 (c.818).

Le compte d'IDs par famille dans « La surface, mesurée » reste un snapshot du 2026-08-15. Chaque tranche a mesuré moins d'IDs que ce snapshot (Probas : 5 réels contre 7 annoncés — 2 fragments de DOI Wiley captés par le scan bare-ID). Le rescan de la tranche fait foi, pas le snapshot.

Ce qui survit à cette EPIC (et n'a pas besoin d'elle)

Le rollout rétroactif est fini ; trois choses restent vivantes et sont portées ailleurs :

  1. La règle de prose future — une phrase qui renvoie à une section nommée d'un papier se vérifie contre le PDF, jamais contre l'API (section « Ce que ce périmètre ne couvre PAS » ci-dessous). Elle s'applique à toute nouvelle rédaction, sans tranche ni tracker.
  2. Le garde anti-drift — registre régénéré depuis les diffs réels + test anti-RENAMED (fix(arxiv,#12900): registre régénéré depuis les diffs réels + test anti-RENAMED #12941), qui a attrapé son propre drift sur RL (fix(arxiv,#12853): drift rl_6c_ppo_from_scratch cell 27 obsolète — guard attrape son propre drift #13349). C'est un organe, pas une tranche : il tourne, il n'a pas besoin d'une EPIC ouverte au-dessus de lui.
  3. Les passes 2 par famille, quand une famille reçoit une accrétion notable (le cas GameTheory, fix(GameTheory,#11168): passe 2 citations arXiv — verif identites + retrait suffixe fabrique GT-13 #13887). Elles se piochent comme n'importe quel grain de contenu, avec [CLAIMED] … paths: sur la famille.

Ce que ce périmètre ne couvre PAS — mesuré, pas supposé

Le périmètre « arXiv parce que mécaniquement vérifiable » vérifie l'identité d'une référence (ID, titre, auteurs, année). Il ne voit rien de ce que la prose affirme du contenu de cette référence.

Sous-classe trouvée en mesurant Probas : un renvoi de section fabriqué. La référence résout, le titre concorde, les auteurs concordent — et le pointeur interne est inventé :

  • 0710.3742 §2 « The constant-hazard model » — §2 est « Recursive Run Length Estimation » ; grep -c -i "constant.hazard" = 0. (Le concept est réel, en §2.1 « The Changepoint Prior ».)

  • 0710.3742 §3 « Sequential inference » — §3 est « Experimental Results ».

  • 1312.0906 « (§10) » — papier de 11 pages, sections romaines I–VI. (Funnel = §I ; non-centrée = §II.B.)

Aucune des 4 étapes de la méthode ci-dessus ne peut voir ça — seul le PDF le peut (pdftotext suffit). C'est aussi la classe la plus coûteuse pédagogiquement : un titre faux ne mène nulle part et l'étudiant abandonne ; un renvoi faux l'envoie ouvrir le bon papier et y chercher une section qui n'existe pas — il conclura qu'il lit mal.

Bornage mesuré (2026-08-16, scan repo-wide des cellules markdown portant un ID arXiv ET un renvoi §N / section N) : la classe est confinée à Probas. Le seul autre candidat, ICT-25 c20 (arXiv 2511.18397 §3, critère « >2 % d'épisodes/step »), a été vérifié contre le PDF : la substance est exacte (le seuil est bien >2 %) et §3 existe — la localisation réelle est la légende de la Figure 1. Imprécision, pas fabrication : rien à corriger. Un audit qui promeut ça en finding fabriquerait précisément le faux positif que cette epic existe pour éviter.

Règle pour toute prose future (pas un rollout rétroactif) : une phrase qui renvoie à une section nommée d'un papier se vérifie contre le PDF, jamais contre l'API.

Hors périmètre

  • Les citations non-arXiv (journaux, livres, pages web) — pas de vérification mécanique possible, à traiter au cas par cas quand un doute surgit.

  • Les libs vendored, _archives/, .lake/packages/.

  • L'outillage : si un grain veut scripter la vérification, très bien, mais l'outil n'est pas le livrable — les corrections de notebooks le sont.

Critère de fermeture (posé 2026-09-01, il manquait)

Cette EPIC reste ouverte, et ce n'est pas un oubli : les 8 tranches de la passe 1 sont mergées, mais personne n'a re-mesuré le périmètre depuis le snapshot du 2026-08-15. Le dépôt a reçu des notebooks depuis. Ce qui la ferme est une mesure, pas une opinion :

  • rejouer le scan repo-wide des IDs arXiv en cellules markdown (hors _archives/, .ipynb_checkpoints, .lake/packages/) ;
  • pour chaque ID non couvert par une des 9 PRs du tableau ci-dessus, poser un des quatre verdicts de la méthode ;
  • publier le compte : IDs totaux, IDs déjà couverts, IDs neufs, verdicts des neufs.

Si le delta est vide ou trivial, l'EPIC se ferme sur cette mesure. S'il ne l'est pas, il devient la tranche suivante. myia-po-2023:CoursIA-2 a posé le 2026-08-31 (c.818) que l'acceptance globale « 107 IDs » n'était pas atteinte — l'affirmation est plausible mais n'était appuyée d'aucun compte ; ce critère est ce qui la tranche.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions