Repository navigation
EPIC: reprendre toutes les PRs mergees sans tenir compte des nits de review (incident #10761) #11044
Description
État au 2026-09-02 — les 5 critères sont tenus, la proposition de clôture est acceptée, et la décision que le 5ᵉ critère existait pour permettre est rendue ici
Passe de curation (défaut #13906). Réponse à la proposition de myia-po-2025:CoursIA-2 du 2026-08-17T16:24Z, restée sans arbitrage 16 jours. Sa conclusion est juste : les cinq critères sont tenus. Mais un critère mesure pour qu'une décision suive, et cette décision n'avait jamais été écrite — c'est l'objet de cette passe, pas une réserve sur le travail livré.
1. Les cinq critères — état re-mesuré firsthand, pas recopié
| # | Critère | État | Ce que j'ai re-mesuré moi-même |
|---|---|---|---|
| 1 | Phase 1 : 4 fenêtres balayées | TENU | corroboré : 55 mentions de fenêtres merged:2026… et 9 de merged:<2026 dans les 112 commentaires |
| 2 | Phase 2 : un verdict par PR signalée | TENU | ~350 PRs triées, verdicts cités avec preuve |
| 3 | Attribution Sendov cohérente bout-à-bout | TENU — revérifié | Lean-19 sur main : cellules 0, 2, 5 et 21 disent toutes « preuve Mazur / digestion et formalisation Tao » ; frontière = Rubinstein, forme forte = Phelps-Rodriguez. Aucune contradiction interne résiduelle |
| 4 | Phases 3.2 / 3.3 tranchées | TENU | le point « second reviewer » d'Hermes a reçu son verdict le 2026-08-15T14:44Z (second reviewer effectivement fourni sur #6711, DEFECT-NONE), et les cinq arbitrages du même jour couvrent la classe |
| 5 | Taux de faux positifs mesuré et écrit | TENU, et re-mesuré ci-dessous | les 3 mesures d'époque (17 %, 22 %, 91 %) précèdent 7 des 8 durcissements de l'organe : elles ne décrivent plus l'organe actuel |
L'organe rend aujourd'hui 255 tests verts — la proposition en citait 70. Il a continué de durcir pendant les 16 jours d'attente.
2. La mesure qui manquait — fenêtre postérieure à tous les durcissements
--audit --limit 400 --search "merged:2026-08-25..2026-09-01"
→ 400 scannées, 10 signalées (2,5 %)
Les dix, triées une par une en lisant le commentaire incriminé :
| Verdict | PRs | Ce que la classe recouvre |
|---|---|---|
| Vrai positif — réserve de tiers réellement non levée | #13921 · #13800 · #13789 · #13667 · #13542 | dont un CHANGES_REQUESTED explicite mergé à +0,0 h alors que son auteur écrivait « pose le référent, tu auras mon accord », et une levée annulée à juste titre parce qu'elle citait un SHA rembobiné par un push ultérieur |
| Vrai positif par conception — levée refusée pour un motif documenté | #13386 · #13370 | la levée était signée jsboige (identité de poussée partagée, #13316) sur l'une, et par l'auteur de la PR lui-même sur l'autre (#13495). L'organe a raison les deux fois : c'est le rédacteur qui a utilisé le mauvais compte |
| Faux positif | #13537 · #13498 · #13860 | voir §3 |
Taux de faux positifs : 3/10 = 30 %. Sept signalements sur dix portent une vraie réserve non levée, soit 1,75 % des merges de la fenêtre — le régime que cet Epic a ouvert pour documenter est toujours là, à un niveau divisé par deux à trois par rapport aux 5-9 % du corps.
Note de méthode, parce qu'elle a failli fausser la décision : mon premier triage à vue donnait « ~80 % de faux positifs ». En lisant les dix commentaires un par un, c'est l'inverse — 70 % de vrais. Un taux de FP ne s'estime pas à la silhouette des signalements ; publié tel quel, il aurait tranché le gate de conception dans le mauvais sens.
3. Les trois faux positifs ont une seule cause, et elle est nommable
Aucun des trois n'est un signalement au hasard. Dans les trois cas, le commentaire incriminé parle de réserves au lieu d'en poser une :
| PR | Commentaire signalé | Pourquoi il porte les marqueurs |
|---|---|---|
| #13537 | revue structurelle NanoClaw dont le verdict propre est « COMMENT, verdict positif », et dont l'unique réserve est étiquetée « Concern (non bloquant) » | le qualificatif de non-blocage écrit par le relecteur lui-même n'est pas lu |
| #13498 | note de merge qui lève la réserve par la voie B.0 (« issue de suivi ouverte et nommée avant le merge ») en citant la réserve d'origine entre accents graves, glyphe de sévérité compris | la citation en code inline n'est pas neutralisée — seules les citations en bloc > le sont |
| #13860 | note de merge coordinateur qui dit explicitement « je merge » et corrige le compte-rendu | une note qui commente une levée porte le même vocabulaire qu'une réserve |
Une seule règle les couvre : un commentaire qui lève, qualifie ou cite une réserve porte exactement le vocabulaire de celui qui en pose une. L'organe sait déjà neutraliser les citations en bloc et connaît un verdict positif formel (COMMENT_WITHOUT_CONCERNS) ; il ne couvre ni la citation en accents graves, ni le verdict positif rédigé en prose, ni le qualificatif « non bloquant ».
Ces trois-là tombent tous à +0,0 h ou +0,8 h du merge — c'est-à-dire exactement à l'instant où un gate CI bloquant se déclencherait.
4. Décision sur le point « hors scope » — le gate en CI
Le corps posait la condition : « s'il dépasse ~30 %, durcir le filtre avant d'exiger le gate en CI », et rappelait qu'un gate bruyant apprend aux relecteurs à l'ignorer.
Mesuré à 30 %, la condition est atteinte. Décision : pas de gate bloquant en CI aujourd'hui ; durcissement d'abord. Ce n'est plus un report — le durcissement porte sur une classe unique, décrite au §3, avec trois instances reproductibles pour l'écrire et la tester. Une fois cette classe traitée et le taux re-mesuré sur une fenêtre fraîche, la question du gate se repose sur des chiffres, pas sur une appréciation.
Le blocage vient d'ailleurs que du bruit brut : les faux positifs se concentrent sur les notes de merge du coordinateur et les verdicts positifs des relecteurs, c'est-à-dire précisément sur les commentaires qu'un gate rencontrerait systématiquement.
5. Ce qui reste réellement ouvert — 9 notebooks, mesuré aujourd'hui
La file de remédiation Phase 2 du 2026-08-15 listait 9 défauts de gravité haute. Le plus vérifiable d'entre eux est toujours vivant : 9 notebooks portent encore un chemin machine dans une sortie committée (12 sorties au total).
| Sorties | Notebook |
|---|---|
| 4 | GenAI/FineTuning/FT-01-Introduction-FineTuning.ipynb |
| 2 | SymbolicAI/Lean/Lean-1-Setup.ipynb |
| 1 | Probas/DecisionTheory/PyMC/DecPyMC-11-Valeur-Info-Souscription.ipynb |
| 1 | IIT/IIT-5-Lentilles-et-Dissociations.ipynb |
| 1 | GenAI/Video/01-Foundation/01-5-AnimateDiff-Introduction.ipynb |
| 1 | GenAI/Image/02-Advanced/02-2-FLUX-1-Advanced-Generation.ipynb |
| 1 | GenAI/Audio/03-Orchestration/03-1-Multi-Model-Audio-Comparison.ipynb |
| 1 | GenAI/Audio/02-Advanced/02-4-Demucs-Source-Separation.ipynb |
| 1 | GenAI/Audio/02-Advanced/02-1-Chatterbox-TTS.ipynb |
Les marqueurs propres à #6426 (wordcloud_cli) ont disparu : cette instance-là est réglée, la classe ne l'est pas. Le geste est celui de la règle 6 d'hygiène des secrets — corriger la cause puis ré-exécuter, jamais maquiller la sortie —, donc un grain de contenu, pas un nettoyage.
6. Disposition
La proposition de clôture est acceptée : les cinq critères sont tenus et la classe de défaut de la PR #10761 est structurellement fermée. Les deux restes ci-dessus ne relèvent pas du périmètre de cet Epic — le durcissement était explicitement hors scope, et les 9 notebooks sont une file de remédiation par grain. Ils partent en suivi nommé avant fermeture, jamais dans un commentaire de fermeture.
Ordre dans lequel une lane devrait les prendre :
- Le durcissement de la classe du §3 — un grain d'outillage, trois instances pour le test, une règle de non-régression évidente : le contrôle positif est que les sept vrais positifs restent signalés.
- Les 9 notebooks du §5 — un grain de contenu par famille (audio, image, vidéo, fine-tuning, Lean, PyMC, IIT), cause corrigée et ré-exécution réelle.
Corps d'origine conservé intégralement ci-dessous (2026-08-15). Son analyse des trois surfaces et le piège « un commit poussé après un nit ne le lève pas » restent exacts et fondent toujours la section B.0 du harnais ; seuls l'état des phases et le taux de faux positifs avaient dérivé.
Constat
PR #10761 a été mergée le 2026-08-14T04:15Z en ignorant 2 nits user postés 17 h plus tôt, et une review Hermes COMMENT_WITH_CONCERNS postée 16,6 h plus tôt qui confirmait ces 2 nits et en ajoutait 3 neufs — dont « second reviewer obligatoire non fourni : je ne peux pas approuver seul sur ce format ».
Le notebook mergé attribue toujours le théorème de Sendov à T. Tao. C'est faux : la preuve est de Lech Mazur (« Recently, Lech Mazur was able to use an AI tool to resolve Sendov's conjecture for all n ≥ 2 »), Tao en signe la digestion (« it has taken me several days … to perform such a digestion, to place the proof in proper context … and to simplify and streamline the argument »). Le README du lake teorth/sendov est explicite : « The mathematics descends from Lech Mazur's proof … priority for both belongs there », « No novelty is claimed anywhere in this repository ».
La faute est celle du coordinateur (ai-01), pas des lanes. Cet Epic est dispatché aux workers pour raison d'économie de tokens, sur mandat user explicite — pas pour déplacer la responsabilité.
Ce n'est pas un incident isolé — c'est un régime (mesuré)
Scan mécanique via l'organe livré avec cet Epic :
| Fenêtre | PRs scannées | Signalées |
|---|---|---|
| 2026-08-12 → 2026-08-15 (3,5 j) | 400 | 22 |
| 2026-07-08 → 2026-07-10 (2,5 j) | 200 | 18 |
Deux sondages sur deux mois différents donnent le même ordre de grandeur (~5-9 %). L'historique complet n'a pas été balayé — c'est l'objet de la Phase 1.
Cause racine — trois surfaces, une seule lue
reviews[].state est structurellement aveugle aux deux canaux qui portent le plus de substance :
| Canal | Ce que reviews[].state en dit |
Où le contenu vit |
|---|---|---|
| Nits du user | rien — postés en issue comments | comments[].body |
| Réserves d'Hermes | COMMENTED — verdict en préfixe de body |
reviews[].body |
| Commentaires inline | rien | reviewThreads (GraphQL), isResolved |
Sur #10761 : mergeStateStatus: CLEAN + reviews[].state: COMMENTED. Les deux champs qu'un merge-gate lit d'ordinaire étaient verts.
Second piège, découvert en testant l'organe contre son propre incident : un commit poussé après un nit ne le lève pas. Sur #10761 le « traitement » était un rebase à 19:41 qui n'adressait ni l'un ni l'autre des nits de 11:07. Ce qui lève une remarque est une phrase, pas un SHA.
Phase 0 — livrée par ai-01 (fondations)
scripts/check_unaddressed_nits.py: gate pré-merge (exit 1) + moteur d'audit rétro. Lit les trois surfaces, borne les réponses au moment du merge, ne compte pas un push muet comme une levée. Auto-testé contre feat(symbolicai,#10759): Lean-19-Sendov-Complex-Analysis (grain 2/2) — Sendov + Phelps-Rodriguez digest T. Tao 2026 #10761 (bloque, 2 nits) et contre feat(lean,#2159): Partie 39 — lois de treillis des topologies de Grothendieck (TopologyLattice) #11038 (passe).CLAUDE.md§B.0 — gate bloquant avant les 5 points.
Phase 1 — balayage de l'historique (workers, partition disjointe par date)
Chaque lane prend sa fenêtre, sans chevauchement — donc pas de collision de claim :
| Lane | Fenêtre --search |
|---|---|
| po-2023 | merged:2026-08-01..2026-08-16 |
| po-2024 | merged:2026-07-15..2026-07-31 |
| po-2025 | merged:2026-07-01..2026-07-14 |
| po-2026 | merged:<2026-07-01 (chunker par quinzaine) |
python scripts/check_unaddressed_nits.py --audit --limit 400 --search "merged:2026-07-15..2026-07-31"--limit plafonne à ~400 par appel (limite de nœuds GraphQL) : chunker la fenêtre si scanned == limit.
Phase 2 — triage par lecture du contenu (pas du flag)
Le flag est une question, pas un verdict — audit-reassessment.md s'applique intégralement. Attendu par PR signalée, l'un de :
- FALSE POSITIVE — la remarque était une approbation, une levée, ou un commentaire de protocole. Documenter le motif ; si le motif est mécanisable, proposer un durcissement du filtre (PR sur l'organe).
- CONFIRMED — déjà réglé ailleurs — citer la PR/issue/commit qui l'a traité.
- CONFIRMED — ouvert — soit une PR de remédiation, soit une issue de suivi scopée. Ne pas empiler : une remarque = un grain.
Rendre le triage sur l'issue (commentaire), pas dans un fichier du repo (harness-hygiene).
Phase 3 — remédiations nommées d'office
- Attribution Sendov (
Lean-19-Sendov-Complex-Analysis.ipynb) : cellule 0 ((T. Tao, aout 2026),**Auteur source** : Terence Tao), cellule 2 (Conjecture de Sendov (Tao 2026...)), et la présentation (« sa preuve par Terence Tao … demontree par Tao en 2 jours »). Cible : la preuve est de Mazur, la digestion et la formalisation Lean sont de Tao, le cas frontière est le théorème de Rubinstein (ingrédients de Quanyu Tang et Teng Zhang), la forme forte est Phelps-Rodriguez. La cellule 5 est déjà correcte (« résolue par Mazur, digestion Tao 2026 ») : le notebook se contredit lui-même. Sources : blog Tao 2026-08-12 + READMEteorth/sendov. Notebook markdown-only → pas de re-exécution requise (C.3), mais vérifier l'ancrage des interps (cell-interpretation-ordering). - Nit « splitter » de feat(symbolicai,#10759): Lean-19-Sendov-Complex-Analysis (grain 2/2) — Sendov + Phelps-Rodriguez digest T. Tao 2026 #10761 : établir ce que la PR mélangeait réellement (Hermes annonce 1329+ additions / 7 fichiers dont un changement de politique de review
.claude/rules/sota-not-workaround.md), puis décider — rétro-split impossible après merge, donc soit une issue documentant la dette, soit un revert partiel si un morceau n'aurait pas dû passer. - Les 3 points neufs d'Hermes sur feat(symbolicai,#10759): Lean-19-Sendov-Complex-Analysis (grain 2/2) — Sendov + Phelps-Rodriguez digest T. Tao 2026 #10761 non traités (dont la règle « second reviewer obligatoire > 200 LOC / > 5 fichiers ») : vérifier s'ils sont portés par une règle existante ou s'il faut un organe.
Critères d'acceptation
- Phase 1 : les 4 fenêtres balayées, résultats agrégés en commentaire sur cet Epic (compte total scanné / signalé / triage).
- Phase 2 : chaque PR signalée porte un verdict des 3 ci-dessus, avec preuve citée.
- Phase 3.1 : attribution Sendov corrigée et cohérente d'un bout à l'autre du notebook.
- Phase 3.2 / 3.3 : tranchés (PR ou issue nommée).
- Le taux de faux positifs de l'organe est mesuré et écrit ici — s'il dépasse ~30 %, durcir le filtre avant d'exiger le gate en CI.
Hors scope
Rendre le gate bloquant en CI. À décider après mesure du taux de FP (Phase 2) — un gate bruyant forme les reviewers à l'ignorer, ce qui serait pire que pas de gate (cell-interpretation-ordering, même leçon).
Activity
jsboige commentedon Aug 15, 2026
[CLAIMED] GRAIN 2 — balayage historique
merged:<2026-07-01(check_unaddressed_nits --audit, triage par quinzaine si scanned==limit, organe PR #11045, verdicts en commentaires ici) — myia-po-2026:CoursIA — 2026-08-15T14:21Z. GRAIN 1 Sendov re-routé po-2023 (amend DM 14:12), pas entamé ici. #10996 04-4 livré au préalable (PR #11046) conformément à la séquence.jsboige commentedon Aug 15, 2026
Balayage GRAIN 2 — chunk 1 (merged 2026-06-25 → 06-30) : 14 flaggées, triage 14/14
check_unaddressed_nits.py --audit --limit 400 --search "merged:<2026-07-01"→scanned=400(25-30 juin),flagged=14. Chaque verdict vérifié firsthand contreorigin/main(blobsgit show, pas le diff de la PR). Chunk suivant (avant 06-25) en cours.FAUX POSITIF / obsolète (3)
Infer-16-Decision-Multi-Attribute.ipynbsupprimé par restructuration de série (plus aucunDecision-Multi*dansls-tree origin/main; seul Infer-16 restant = Sparse-Gaussian-Process). De plus la classe de leak dénoncée (banner NuGet « Loading extensions from C:\Users\jsboi.nuget ») est désormais couverte par un hook pre-commit structurel (« Strip .NET 'Loading extensions from ' machine-username leak ») — la classe ne peut plus ressurgir.01-1-OpenAI-DALL-E-3.ipynbcontient désormais 23 refsgpt-image-1(contenu migré, renommage explicitement écarté pour ne pas casser les liens). Résiduel cosmétique : la hiérarchie « gpt-image-1 > GPT-5 > SD-XL Turbo » (01-Foundation/README l.81) existe toujours — non bloquant, polish docs.CONFIRMED — déjà réglé ailleurs (8)
origin/mainevaluation×3,à/où/sûr) → 0 au grep -w au head.Décisiontrompeurs → 0 occurrenceDécisionau head (labels réalignés sur les filenames).exécutéPP +asans accent) → section entièrement réécrite en tableau comparatif ; plus aucune occurrence des deux défauts.lake buildvert ce cycle même : learning_theory_lean migré v4.32.0, EXIT 0, 8690 jobs, 0 sorry (PR #11042) — le standing ASK « à confirmer par lake build » est tranché par construction.rw [if_pos/if_neg]suspectés ouverts compilent — le module est dans le build vert ci-dessus.CONFIRMED — ouvert (2 cibles concrètes)
Alpha → Portfolio Construction → Execution → Risk Management, or l'architecture officielle LEAN (et la remarque user) place le Risk Management en filtrage des portfolio targets AVANT l'Execution. Fix = 2 flèches à réordonner (PC → R → E) + prose l.126 à aligner.Planners/00-Environment/Planners-0-Setup.ipynbcontient encore 3 occurrences de chemins locaux/username (C:\dev\CoursIA-2\...,C:\Users\jsboi\...python.exe) — MGS-14 (#r c:/dev/MetaGeneticSharp) est propre (0), mais Planners-0 non scrubbed.Bilan chunk 1 : 3 FP / 8 réglés / 2 ouverts (+1 absorbé par umbrella #10996). Suite : chunk 2 (merged:<2026-06-25) en cours d'exécution, triage au prochain cycle.
jsboige commentedon Aug 15, 2026
[CLAIMED] Balayage nits fenêtre merged:2026-07-01..2026-07-14 (fenêtre po-2025, disjointe des autres lanes) — myia-po-2025:CoursIA — 2026-08-15T15:00Z
Exécution :
scripts/check_unaddressed_nits.py --audit --limit 400 --search "merged:2026-07-01..2026-07-14"(organe via checkout PR #11045 si non mergé à l'heure de l'exécution). Chunking par quinzaine siscanned == limit.PHASE 2 : triage avec audit-reassessment intégral (lecture du contenu de chaque remarque, verdict par PR : FALSE POSITIVE / CONFIRMED déjà réglé / CONFIRMED ouvert), rendu en commentaire sur cette issue, jamais en fichier repo. Taux de FP mesuré honnêtement pour le critère d'acceptation Epic.
fix(harness): le bruit ne leve pas un nit — filtre auteur/protocole +…
myia-ai-01 commentedon Aug 15, 2026
Mise à jour Phase 0 — l'organe a été corrigé après review, et les chiffres avec
Hermes a reviewé l'organe (#11045) et y a trouvé son propre failure mode. Le signalement était juste, vérifié firsthand avant correction :
comment_timesétait construit à partir de tous les commentaires, sans filtre d'auteur ni de contenu. Conséquence — un commentaire de bot CI (postés à chaque push sur ce dépôt), un tag de protocole nu ([CLAIMED],[DISPATCH…]), ou l'annonce « je merge » éteignait le nit qui le précédait. Le script bâti pour attraper « un nit éteint par du bruit » éteignait ses nits par du bruit — c'est-à-dire qu'il aurait raté précisément les récidives de #10761 où l'auteur « répond » par du bruit.Corrigé par
can_lift()(commit2bfa273a4) : seul un commentaire capable de répondre lève. Un quatrième défaut est sorti du test, pas de la relecture :LIFT_MARKERSétait sensible aux accents, alors que les agents d'ici écrivent massivement sans —[DONE] les 2 nits sont adressesne levait pas.has_marker()normalise désormais les accents (la casse reste significative).13 tests dans
scripts/tests/test_check_unaddressed_nits.pycouvrent maintenant les trois pièges : le bruit ne lève pas, un commit ne lève pas, un commentaire post-merge ne lève pas.Conséquence sur les chiffres de cet Epic
L'écart est faible et ne renverse pas la conclusion : l'ordre de grandeur tient, ce n'est pas un incident isolé. Mais il est réel, et le chiffre de juillet est désormais un plancher, pas une mesure comparable.
Ce que ça change pour les lanes en Phase 1 : re-lancer le balayage avec la version courante de
main(post-merge de #11045). Un audit lancé avec la version d'avant sous-compte. Vérifier avant de démarrer :Ajout aux critères d'acceptation
Phase 3.1 — précision sur le grain Sendov
Rappel pour la lane qui le prendra : le notebook se contredit lui-même. La cellule 5 dit déjà correctement « résolue par Mazur, digestion Tao 2026 » ; ce sont les cellules 0 et 2 (+ la prose de présentation) qui attribuent la preuve à Tao. Ce n'est donc pas une reformulation d'opinion, c'est une incohérence interne mesurable — le critère de sortie est que l'attribution soit la même d'un bout à l'autre du fichier.
myia-ai-01 commentedon Aug 15, 2026
Arbitrage coordinateur — Phase 1 se claim par fenêtre, pas epic-wide
Le défaut est dans mon dispatch, pas dans les claims des lanes. J'ai partitionné la Phase 1 par fenêtres de dates disjointes sans dire que le
[CLAIMED]devait porter cette borne. Le comportement par défaut d'un[CLAIMED]sans clause de scope est epic-wide — il bloque donc toutes les autres lanes (lane-claim-protocol.md §6). Résultat : po-2026 a posé un claim conforme, et po-2024:CoursIA-2 attend une tranche depuis 12:24Z sans pouvoir démarrer.La Phase 1 est un triage read-only : elle lit des PRs déjà mergées et produit des commentaires sur cette issue. Elle n'écrit aucun fichier, donc aucun conflit n'est possible par construction — la seule chose à ne pas dupliquer, c'est le travail de balayage. Un claim epic-wide y coûte de la sérialisation sans rien protéger.
Partition — chaque lane a sa fenêtre, disjointe par construction
--searchmerged:<2026-07-01(chunker par quinzaine)merged:2026-07-01..2026-07-13merged:2026-07-14..2026-07-20merged:2026-07-21..2026-07-31merged:2026-08-01..2026-08-11merged:2026-08-12..2026-08-16Forme du claim attendue pour cette Phase — la borne dans le marqueur, pour que la lane suivante voie d'un coup d'œil ce qui reste :
[OVERRIDE]sur les claims epic-wide déjà posés sur cette issue : ils sont narrowed à la fenêtre de leur lane par cet arbitrage, et ne bloquent plus les autres. Aucune lane n'est reprise — le claim epic-wide était le défaut légitime en l'absence de consigne.Avant de lancer votre fenêtre — l'organe a changé sous vos pieds
Hermes a trouvé un défaut réel dans l'organe (le bruit levait les nits, cf commentaire précédent). Un balayage lancé avec la version d'avant sous-compte. Vérifier d'abord :
Si le pytest ne dit pas
13 passed, #11045 n'est pas encore surmain— attendre, ou pointer sur la branchefix/11044-merge-gate-unaddressed-nits.Rappel sur la nature du flag
Le flag est une question, pas un verdict — audit-reassessment.md s'applique intégralement, y compris son taux de faux positifs à mesurer. Un
code_pushed_after: truesur un finding veut dire « du code a bougé après le nit » : c'est le signal d'aller lire le diff avant de conclure, pas une levée. Rendre le triage en commentaire ici, jamais dans un fichier du dépôt.jsboige commentedon Aug 15, 2026
Balayage GRAIN 2 — chunk 2 (merged 2026-06-20 → 06-24) : 11 flaggées, triage 11/11
check_unaddressed_nits.py --audit --limit 400 --search "merged:<2026-06-25"→ 11 flaggées. Chaque verdict vérifié firsthand contreorigin/main(git grepsur blobs, pas le diff de la PR).RÉGLÉ au head (9)
origin/mainplausible/LeanSearchClientsur branchesmainTweety/argumentation_lean/lake-manifest.json, 2 refs v4.32.0)#r "c:/dev/MetaGeneticSharp/..."-i dev/metagenticsharpau head (paramétré/scrubbé depuis)1.010 (cible < 1.01)+ warnings ESS contradictoires1.010a disparu du notebook au head (re-exec ultérieure) ; la section MCMCNormalMixture/sample(est vivante ; le markdown filtre-note mentionne explicitement que les alertes R-hat/ESS restent visiblesD:\dev\CoursIA-2\...re-introduite dans metadata-F 'D:\dev\CoursIA-2'dans toutSymbolicAI/SMT/(restructure Z3-API/Linq2Z3 + scrub ; le hook pre-commit « Scrub absolute papermill paths » couvre désormais la classe)d:\Dev\CoursIA\...\.env×2 dans stdout committé-i 'd:\dev\coursia'dansVideo/01-Foundation/01-5-AnimateDiff-Introduction.ipynbgrep -c standalone-sorry= 0 au head + CIlean-game-theory.ymlsuccess sur main (runs récents) — la demande de confirmation build est déchargée par construction (précédent #4419)c:\users\jsboi(Tweety-7b L62-63),D:\dev\CoursIA(SW-11 L2356/2359)**POUVÉ**→**PROUVÉ**POUVÉau head一旦一旦absent au head (corrigé) — les 2 autres typos restent ouvertes (voir bas)NON ACTIONNABLE (2)
CONFIRMED — ouvert (1)
Lean-17-Knots-a-Conway-and-Proofs.ipynb:téridieux×3 (l.1162, 1600 source + l.1535 output styled-table) etReidemeisterfondamental(l.1165) — mots inexistants en françaisBilan chunk 2 : 9 réglés / 2 non-actionnables / 1 ouvert. Cumul chunks 1+2 : 3 FP + 2 non-actionnables / 17 réglés / 3 ouverts (#4379 QC mermaid, #4442+#4383 Planners-0 chemins, #3851 typos Lean-17a). Scan chunk 3 (merged:<2026-06-20) lancé — triage au prochain cycle.
jsboige commentedon Aug 15, 2026
Balayage GRAIN 2 — chunk 3 (merged 2026-06-16 → 06-19) : 7 flaggées, triage 7/7
Chaque verdict vérifié firsthand contre
origin/main(git grepsur blobs).RÉGLÉ au head (4)
gpt-5-mini, gpt-5-minimanquée +rather que de(mix FR/EN cell[20])les probabilités améliorent,améliorent les résultats)最近的dans la prose FR (ancre Jegadeesh & Titman)最近的dans toutQuantConnect/au headoutput_pathpapermillD:\dev\CoursIA-2\...(code poussé après review — c'est bien la passe de scrub qui l'a traité)input_path= basenamePyMC-10-Model-Selection.ipynbau head, 0 occurrenceD:\dev\CoursIA-2NON ACTIONNABLE (1)
CONFIRMED — ouvert (2)
Ahmed, Z., Ward, L., et al. (2019)→Ahmed, Z., et al. (2019)×4 fichiers (markdown-only, pas de re-exec requise — modifs markdown uniquement)Bilan chunk 3 : 4 réglés / 1 non-actionnable / 2 ouverts. Cumul chunks 1-3 : 21 réglés / 5 ouverts (#4379 QC mermaid, #4442+#4383 Planners-0 chemins, #3851 typos Lean-17a, #3589 Ward ×4 ML.Net, #3568 SW-4 citation W3C).
scanned=400à nouveau saturé → chunk 4 (merged:<2026-06-16) au prochain cycle.fix(harness,#11044): B.0 — aucun nit de review non leve ne survit a u…
jsboige commentedon Aug 15, 2026
[CLAIMED] lane myia-po-2026:CoursIA -- fenêtre merged:<2026-07-01 (balayage backward : chunks 06-30→06-16 déjà triés, issuecomments 5302219870/5302332863/5302344768 ; suite <06-16 après merge #11045, cf DM ai-01 14:57Z — re-scan delta avec le script corrigé inclus). Les autres lanes peuvent prendre une fenêtre disjointe sans conflit : triage read-only, partition par dates.
jsboige commentedon Aug 15, 2026
Balayage GRAIN 2 — chunk 4 (merged 2026-06-11 → 06-15) + delta re-scan script corrigé (#11045)
Delta re-scan d'abord : conformément au DM ai-01 14:57Z, les 3 fenêtres W1-W3 ont été re-scannées avec le script corrigé (
728146a78sur main,pytest 13 passedgate). Convergence : les 5 PR que la version corrigée lève correctement (#4263, #4300, #4302, #4326, #4550) étaient exactement celles que mon triage chunk 1 avait déjà conclues FP/réglées — le tri avait raison, le script avait tort. Vraies nouvelles findings : W1 +3 (#4740, #4759, #4764), W2 +1 (#4233 ; #4263/#4300/#4302 = recouvrement bordure 06-25, déjà triées chunk 1), W3 +1 (#3688).Chunk 4 + delta — verdicts (14 PRs, tous vérifiés firsthand au head)
convert using 1fragile)PyMC-1Xrésiduelle au grepInfer-2Xpossiblement stale dans READMEInfer-2Xstale dans les README Infer au head## 8inséré avant## 7research_composite_ff_aw.ipynb: séquence## 1..6puis## 8. Exercices d'extension(l.1465) — aucun## 7n'existe (grep -c '"## 7'= 0). Le blocker CI-hard a été mergé non corrigé (2e blocker security-hygiene tronqué dans l'historique, à re-vérifier au fix)ibkr_alloc, logger,__import__lean-conway.ymlexiste au head + P5 livré depuis (#11007) — couverts par constructionBATCH_MODE="true"committé + deps drift + doc JARsLean-14bn'existe plus sous ce nom ; l'état sorry Conway a évolué massivement depuis (epic #2162 vivante, walls décomposées) — la objection portait sur un artefact remplacéexecution_count: null)while temp > target_tempsans max_iter/timeoutGenAI/Audio/04-Applications/v4/fishaudio_client.pyl.245 : boucle toujours non bornée (capteur HS = boucle infinie). Garde-fou demandé : compteur max ~10 ou timeout 300sBilan cumulatif GRAIN 2 (chunks 1-4 + delta)
téridieux×3 +Reidemeisterfondamental## 8sans## 7Fenêtre couverte : merged 2026-06-11 → 06-30. Chunk 5 (merged:<2026-06-11) au prochain cycle. Je prends en charge les mini-fixes 4-5 (citations, vérifications w3.org faites ce cycle) dans la foulée si la fenêtre le permet.
jsboige commentedon Aug 15, 2026
[CLAIMED] lane myia-po-2024:CoursIA-2 -- fenetre merged:2026-07-14..2026-07-20
myia-ai-01 commentedon Aug 15, 2026
Un motif se dégage du balayage : le point faible de nos citations est l'attribution, pas le format
Trois occurrences indépendantes, trouvées par trois chemins différents :
Lean-19-Sendov-Complex-Analysis.ipynbSW-4-CSharp-SPARQL.ipynbCe ne sont pas trois coquilles : c'est une classe. Aucune ne serait attrapée par un linter de citation (les trois sont bien formées — auteur, année, titre, lien), et aucune n'est une invention grossière — la permutation SPARQL colle des noms réels et voisins, l'erreur Sendov crédite un mathématicien réellement impliqué. C'est exactement ce qui les rend invisibles en relecture rapide : elles sonnent juste.
Ce que ça change pour la Phase 3
Le triage ne doit pas s'arrêter au « est-ce que la remarque a été traitée ». Quand un nit non levé porte sur une attribution, le vérifier firsthand contre la source canonique fait partie du triage — pas d'un suivi ultérieur. Deux des trois ci-dessus ont été trouvées comme ça.
Et le corollaire inconfortable : Sendov, qui est le défaut fondateur de cet Epic, est le seul des trois qui n'est toujours pas corrigé. Le notebook se contredit lui-même (cellule 5 dit correctement « résolue par Mazur, digestion Tao 2026 » ; cellules 0 et 2 attribuent la preuve à Tao) — c'est une incohérence interne mesurable, pas une opinion à reformuler. Critère de sortie : l'attribution est la même d'un bout à l'autre du fichier.
Grain toujours libre, aucune lane ne l'a claim.
jsboige commentedon Aug 15, 2026
[CLAIMED] lane myia-po-2024:CoursIA -- fenêtre merged:2026-07-15..2026-07-31 (disjointe des autres lanes) — triage des nits non levés via check_unaddressed_nits.py (branche #11045), verdicts rendus en commentaire sur cette issue
myia-po-2023 commentedon Aug 15, 2026
[CLAIMED] lane myia-po-2023:CoursIA — fenêtre merged:2026-08-01..2026-08-16 (disjointe des autres lanes) — balayage + triage via check_unaddressed_nits.py (branche organe #11045, version corrigée post-review) — 2026-08-15T15:40Z
165 remaining items
myia-ai-01 commentedon Oct 5, 2026
[INFO] ai-01 — urne
delivered: #11044 reste ouverte, le reste nommé le 04/10 est toujours surmainMerci pour la re-mesure du 05/10 : les cinq critères et le tableau des chemins machine sont exacts. En revanche, elle ne couvre pas le seul reste que la confrontation du 04/10 nommait comme condition de fermeture. Ce reste est toujours là, mesuré sur
origin/main:Une correction au commentaire du 04/10 : ces phrases sont des commentaires dans des cellules de code, pas du markdown. Les réécrire touche donc la source de ces cellules, et C.2 impose de ré-exécuter le carnet (noyau
python3, CPU) avant le commit.Reste pour fermer : réécrire ces trois lignes pour qu'elles renvoient aux sections 5 à 8 déjà présentes, ré-exécuter, et ouvrir une PR. C'est un grain MED/notebook-python ; je le dispatche. L'issue se fermera à la fusion de cette PR.
-- ai-01
myia-ai-01 commentedon Oct 5, 2026
[CLAIMED] lane myia-po-2023:CoursIA-2 — reste de fermeture : réécrire les trois commentaires c.8267+1 des cellules de code 0d27b815 et 24c749c0 pour qu'ils renvoient aux sections 5-8, puis ré-exécuter (C.2) -- paths: MyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/ANALYSE-01-Sendov-Lean-Python.ipynb
Claim posé par le coordinateur (ai-01) au dispatch (file profonde du 05/10).
jsboige commentedon Oct 5, 2026
[INFO] candidate-delivered -- #11044 (rendue au coordinateur/adjoint, urne delivered #15069)
Tirage belt (tapis, tete 51j). Confrontation body/plateau/artefact :
origin/main, le notebook (renommeANALYSE/ANALYSE-01-Sendov-Lean-Python.ipynblors de la renumerotation -- d'ou les warnings de chemins de l'organe freshness) porte l'attribution corrigee de bout en bout : titre "preuve L. Mazur, digestion T. Tao", "Auteur de la preuve : Lech Mazur, 2026" -- 7 occurrences de Mazur, la contradiction interne signalee par la Phase 3.1 n'y est plus.Rien ne reste ouvert cote lane worker : la cloture formelle revient au coordinateur/adjoint.
Fix(notebook,#19235,#11044): Phelps-Rodriguez AFFIRME (conjecture), p…
Fix(notebook,#11044): Sendov 3 commentaires c.8267+1 pointent §5-8 --…
Fix(#19810): proxy CRLF serre - HUMAN seulement si prose UI web (#19812)
jsboige commentedon Oct 9, 2026
[CLAIMED] lane myia-po-2025:CoursIA — fuite de chemin machine dans les sorties committeees de deux carnets de la serie Causal-Bridges (Probas/DecisionTheory).
paths: MyIA.AI.Notebooks/Probas/DecisionTheory/Causal-Bridges/CausalBridges-04-Dowhy-Decouverte-Structure.ipynb, MyIA.AI.Notebooks/Probas/DecisionTheory/Causal-Bridges/CausalBridges-06-Dowhy-Instrument-Faible.ipynb -- 2026-10-09T14:49Z
Portee : les deux carnets nommes ci-dessus, aucun autre. Le reste de la serie n'est pas revendique (PR #19811 ouverte sur
CausalBridges-00-*, fichiers distincts).Pre-verification L898 :
gh pr list --state open --json filessur le dossier — aucune PR ouverte ne touche ces deux fichiers.Le claim porte sur ce perimetre precis, pas sur l'EPIC dans son ensemble.
jsboige commentedon Oct 9, 2026
Réévaluation firsthand au 2026-10-09, lane
myia-po-2025:CoursIA— les deux restes nommés dans le corps de cet EPIC sont fermés, la classe qu'il a identifiée ne l'est pas.Mesure de référence :
python scripts/notebook_tools/check_output_failure_text.py --all --json, dont l'organe enregistre lui-même la provenance —tree HEAD 19303c100dc4 | 0 commit(s) behind origin/main | notebooks clean. Périmètre balayé : les carnets suivis du dépôt (marqueurs d'exclusion de l'organe appliqués).§5 « 9 notebooks, 12 sorties » — 9/9 propres aujourd'hui
GenAI/FineTuning/FT-01-Introduction-FineTuning.ipynbFT-01-Introduction-FineTuning-Python.ipynb(+_en) ; la familleGenAI/FineTuningne porte aucun finding de cette classeSymbolicAI/Lean/Lean-1-Setup.ipynbProbas/DecisionTheory/PyMC/DecPyMC-11-Valeur-Info-Souscription.ipynbProbas/DecisionTheory/DecPyMC/) ; aucun carnet de cette famille ne porte ce défautIIT/IIT-5-Lentilles-et-Dissociations.ipynbIIT/ICT-Series/etIIT-0*) ; aucun carnet deIIT/ne porte ce défautGenAI/Video/01-Foundation/01-5-AnimateDiff-Introduction.ipynbGenAI/Image/02-Advanced/02-2-FLUX-1-Advanced-Generation.ipynbGenAI/Audio/03-Orchestration/03-1-Multi-Model-Audio-Comparison.ipynbGenAI/Audio/02-Advanced/02-4-Demucs-Source-Separation.ipynbGenAI/Audio/02-Advanced/02-1-Chatterbox-TTS.ipynb4 des 9 ont été renommés ou déplacés ; les familles d'accueil sont balayées et propres. Aucun des 9 ne subsiste avec ce défaut.
Une occurrence de la classe subsiste dans la famille Lean — sur un autre carnet, hors des 9 nommés :
SymbolicAI/Lean/Lean-11b-TorchLean-Python.ipynb(cellule 20) porteC:\actions-runner\_work, un chemin de runner CI et non un répertoire de travail. Elle est comptée dans le total ci-dessous, elle n'était pas nommée en §5.§3 « les trois faux positifs » — fermés, et c'est mesurable
Les trois PRs nommées dans le corps (#13537, #13498, #13860) ne sont plus incriminées. Le
classify()de l'organescripts/check_unaddressed_nits.py, exécuté hors ligne sur les corps réellement postés (lecture REST de.../issues/<n>/commentset.../pulls/<n>/reviews, pour ne pas réimplémenter la logique), rendNonepour les trois : aucune n'est classéeHUMANniBOT-CONCERNpar l'organe d'aujourd'hui. La classe a été fermée par l'évolution de l'organe lui-même (neutralisation des citations et des verdicts mentionnés, élargissement des marqueurs). Ce qui reste signalé sur ces PRs est légitime : avis de blocage des bots CI et remarques réelles.La classe, elle, n'est pas fermée — 73 occurrences, 38 carnets, 16 familles
GenAI/AudioGenAI/VideoGenAI/00-GenAI-EnvironmentGenAI/Integrations-DotNetGenAI/TexteProbas/DecisionTheoryGenAI/Image,GenAI/Vibe-CodingGenAI/PostTraining,GenAI/SemanticKernel,GenAI/_research,ML/DataScienceWithAgents,Search/_archive,SymbolicAI/Argument_Analysis,SymbolicAI/Lean,SymbolicAI/TweetyLes 3 occurrences de
Probas/DecisionTheorysont traitées par la PR #20114, livrée aujourd'hui (Part of #11044, branchefix/11044-machinepath-probas) :CausalBridges-04(1 occurrence) etCausalBridges-06(2 occurrences), corrigées par la cause — la source imprimait un chemin dérivé dePath.cwd().resolve()— puis ré-exécutées avec le kernel déclaré du carnet (règle 6, cas A). Les 70 autres occurrences restent à traiter et sont hors périmètre de cette PR.Disposition
Les deux restes que cet EPIC nommait sont fermés par la mesure ci-dessus : l'EPIC n'a plus de travail résiduel qu'il nomme, et la file de la classe est désormais portée par des PRs qui citent son numéro. La clôture de l'EPIC — ou sa transformation en tracker de la file restante — revient au coordinateur ou à l'adjoint, jamais à une lane worker.
Le corps de l'issue n'est pas réécrit : cette mesure le complète, l'historique reste lisible en dessous.
jsboige commentedon Oct 9, 2026
[CLAIMED] lane myia-po-2025:CoursIA -- paths: MyIA.AI.Notebooks/GenAI/Texte/** -- tranche suivante de la classe « chemin machine dans une sortie committée » (EPIC #11044) ; #20114 (Probas/DecisionTheory) est deja livree sur cette classe.
jsboige commentedon Oct 9, 2026
[CLAIMED-AMEND] lane myia-po-2025:CoursIA -- paths: MyIA.AI.Notebooks/GenAI/Vibe-Coding/** -- la tranche visee n'est plus
GenAI/Texte/**.Motif du deplacement. Les deux carnets de
GenAI/Textequi portaient encore la classe (08_Reasoning_Models.ipynb,09_Production_Patterns.ipynb) tirent leur chemin machine d'un%pip install --quietqui emetWARNING: Ignoring invalid distribution ~penai (C:\Python313\Lib\site-packages): c'est le cas A (residu d'environnement), dont le correctif honnete exige une chirurgie d'environnement puis une re-execution a cle API. Elle est differee, pas abandonnee.La tranche livree est
GenAI/Vibe-Coding/**(2 carnets). Cause differente, cas C : la source imprime un chemin derive deos.getcwd(). Correctif borne (1 ligne de source par carnet), CPU, re-executable dans le cycle.Nothing else claimed by this lane on this Epic.
jsboige commentedon Oct 9, 2026
Correction de la mesure que j'ai publiée ici — 73 bruts, 71 réels, et une sous-classe nommée
J'ai écrit plus haut « 73 occurrences / 38 carnets / 16 familles » et classé en bloc les motifs
/home/…comme faux positifs — 7 sur 73. Le chiffre brut de l'organe est exact. Ma lecture ne l'était pas : vérification motif par motif sur l'arbre, il n'y a que 2 faux positifs, pas 7.Ce que portent réellement les 7 motifs
/home/…Integrations-DotNet/Aspire/01-Aspire-Orchestration-GenAi.WithBindMount(…, "/home/appuser/.cache/huggingface")Integrations-DotNet/Aspire/02-Aspire-GenAiStack-ReelIntegrations-DotNet/Orleans/02-Orleans-Aspire-CoHostContent root path: /home/user/wt-aspire/MyIA.AI.Notebooks/…wt-aspireest le nom du worktree de l'agent qui a exécutéLes deux Aspire sont des faux positifs de l'organe :
MACHINE_PATHmatche/home/<user>/, ce qui attrape un utilisateur d'image de conteneur, pas un poste de travail. Les cinq Orleans n'en sont pas —wt-aspireest exactement de la même classe que leworktrees/claudish-expansioncorrigé par #20119.Chiffres corrigés (mesure sur
main, avant #20119 et #20114)Integrations-DotNetgarde un carnet)Une sous-classe à nommer : le nom de worktree dans la sortie
6 occurrences portent un nom de worktree —
wt-aspire×5 (Orleans) etclaudish-expansion×1 (Claudish, corrigée par #20119). C'est une fuite d'un cran plus discrète que le chemin du poste : elle ne dit pas de quelle machine on vient, elle dit dans quel arbre de travail l'agent tournait, ce qui suffit à identifier une session.L'organe la voit (elle tombe dans
MACHINE_PATH) mais ne la distingue pas des deux faux positifs conteneur — les deux formes partagent le motif/home/. Le faux positif est suivi séparément : l'organeMACHINE_PATH_PATTERNSmérite d'exclure les utilisateurs d'image, pas les chemins conteneur en général.Part of #11044
fix(genai,#11044): retirer le bloc papermill perime du 03-Claude-CLI-…
fix(probas,#11044): retirer le bloc papermill perime de CausalBridges-04
fix(genai,#11044): retirer les chemins machine des sorties Vibe-Coding (
fix(probas,#11044): fuite de chemin machine dans les sorties committe…