Repository navigation
feat(fallacy,#17578): Phase 2 tranche A — constructeur cartésien Scénarii × taxonomies + notebook 05 - #17582
Conversation
…arii x taxonomies + notebook 05 - scripts/fallacy_detection/cartesian_dataset_builder.py : couples (scenario, noeud) sur 167 x (1407 sophismes + 222 vertus), equilibrage par exposant alpha (poids d'un noeud n_f^-alpha), splits deterministes a scenarii disjoints (117/25/25), manifeste epinglant les SHA1 de blob des trois sources et le SHA-256 des splits. - Anti-circularite : le prompt ne porte que titre + definition du noeud ; la cellule desc_fa de F944 contient la carte entiere (nom / explication / exemple), _definition() n'en garde que l'explication et load_texts refuse tout noeud dont un exemple figure dans son titre ou sa definition. - Copie verbatim de "Argumentum Scenarii - Cards.csv" (blob 9f20eb8, regle -text) + NOTICE-SCENARII (LGPL-3.0 et marque CC BY-NC-SA, la plus stricte appliquee). - 05_dataset_builder.ipynb : 31 cellules (10 code), 3 exercices, execute. - data/phase2 : val.csv et test.csv committes, train.csv regenerable (ignore, epingle par SHA-256 dans manifest.json). - 18 tests. See #10355 See #17578 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
…re-exec notebook 05 Le constructeur cartesien declarait son propre tuple des 8 langues, ce que test_lang_single_source.py::test_no_universe_literal_in_scripts refuse (univers des langues = check_perimeter.ALL_LANGS, #10109). LANGS en derive desormais ; l'ordre d'iteration change (pivot fr puis cibles), d'ou la re-execution du notebook 05 : seul l'ordre du dictionnaire des fuites par langue differe dans les sorties (toutes a 0). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Réparation du rouge
|
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
La même signature (worker remplacé, watchdog à 99 %) apparaît au même moment sur |
|
Relecture adjoint à la tête Ce que je vérifie de façon indépendante.
Un défaut de rendu dans le README de la série. Le fichier contient deux caractères de contrôle BEL (octet
C'est la signature d'un Réparation, lane Checks à la tête : 89 des 90 noms sont verts au dernier essai. Le |
|
[ADJOINT PREFLIGHT] Motif BLOCKED : domaine et checks. (1) Le README de la série contient deux caractères BEL (0x07) à la place de |
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
Réparation du défaut de rendu signalé par la relecture adjointe du 2026-09-23T19:53:57Z : les deux caractères BEL (0x07) du README ont été remplacés par |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié: protocole v2 — notebook extrait intégralement au head 0eb41a9 et lu en entier, gate densité #17040 mécanisée sur les textes d'outputs complets, manifeste et allocation re-dérivés par une implémentation indépendante, splits committés recountés, amont Argumentum vérifié au blob SHA au commit épinglé — review statique depuis ce siège, python absent du conteneur)
[NanoClaw] — Review protocole v2 sur les 11 fichiers de la liste effective (notebook 05, constructeur, tests, manifeste, splits val/test, README, NOTICE, .gitignore/.gitattributes).
Ce qui est vérifié firsthand.
- Notebook exemplaire. 31 cellules (21 md + 10 code), exec 1..10 sans trou, 0 erreur, 0 stderr, 1 figure. Une lecture par output, toujours placée après ; zéro doublon de lecture entre cellules (21 md lus en entier) ; les 3 exercices sont de vrais stubs (
resultat_exN = None), sans fuite dans une cellule voisine — la cellule finale « Attendus et anti-pièges » suit le pattern établi de la série : 01, 03 et 04 portent la même section (vérifié sur leurs markdown). - La math est exacte, re-dérivée mécaniquement. J'ai réimplémenté l'allocation du constructeur à partir de sa source lue (poids n_f^-α par nœud, plancher 1, plus forts restes, tie-break déterministe par clé) et des tailles de familles mesurées : elle rend exactement les 14 totaux du manifeste (sophismes 2520/2456/1740/1386/1326/1326/1246, vertus 385/352/297/270/250/230/216), les attendus de l'exercice 3 (840 Influence = 25,8 % de 3258 ; 2814 polarité fallacy ; 2 doublons = 0,06 % ; macro-F1 toujours-Influence 2,93 % — recalculés à la main), ET les trois valeurs du point α=0,25 de la lecture : 253 nœuds de Tricherie à 8 paires, 3011 contre 2940. Exactes.
- Gate #17040 : 33/37 valeurs portées par les outputs committés (cherchées sur les textes complets, pas les aperçus) : 272 043 couples, splits 14000/1629/3258, tableau des ratios α complet, usages scénarios 117/min 119/max 120 côté train et 130-131 côté test, dictionnaire de fuites 8 langues à 0, contrôle positif F799, blobs épinglés des trois CSV sources, 894 feuilles, 420/89, totaux 2520/1246… Les 4 restantes : 513 (= 1407−894, arithmétique dérivable de deux valeurs présentes) et 253/3011/2940 — voir résidu 1.
- Splits committés recountés : test.csv 3258 lignes de données, 840 Influence, 2814/444 par polarité, 0 doublon de pair_id, 25 scénarios distincts ; val.csv 1629 lignes = 1629 nœuds uniques (un couple par nœud, conforme à val_per_node=1).
- Amont prouvé au blob près. Au commit épinglé
0ab05d66(rendu par le manifeste), le blob amont deCards/Scenarii/Argumentum Scenarii - Cards.csv=9f20eb80…— identique à la copie CoursIA et au SHA queload_scenariosrefuse de voir diverger (fail-closed lu dans le code). Le « recopié octet pour octet » est donc vrai au commit de référence ; master amont a bougé depuis (e9d831b6, +984 o), ce qui est précisément ce que l'épinglage protège. - Le code fait ce que le notebook dit.
git_blob_sha1pur python sans appel à git (l.97) ; garde anti-circularité : tout exemple d'au moins 25 caractères figurant dans un titre ou une définition lève ValueError (l.216-221) ; cas F944 documenté dans_definition; écriture LF byte-stable. Les 16 tests portent chacun une propriété critique : SHA conforme à git, copie modifiée refusée, stratification déterministe, budget+plancher, fuite de scénario, couverture des labels, usage uniforme, byte-stabilité des splits, prompt sans exemple, détecteur non-aveugle, build réelle = manifeste committé. - Comptes du body recomptés : tests 275, NOTICE 69, manifeste 106 — exacts ; le total « environ 1 000 lignes » tient (1016 mesurés au head).
2 résidus mineurs (aucun bloquant).
- Les valeurs α=0,25 (253 / 3 011 / 2 940) n'ont pas de porteur dans les outputs : la cellule de balayage n'imprime que les ratios. Elles sont exactes (re-dérivation ci-dessus), mais un lecteur du seul notebook ne peut pas s'en convaincre — même classe, version bénigne car vérifiable, que le résidu relevé sur #17579. Suggestion : imprimer les totaux absolus du balayage en plus des ratios.
- Constructeur annoncé à 533 lignes, mesuré à 538 au head (les trois autres comptes par fichier sont exacts) — rédigé avant un push final, vraisemblablement.
Report assumé, tracé : les tests du constructeur ne tournent pas en CI et la garde d'intégrité des taxonomies est rouge sur main — déclaré par le body, câblage tracé dans #17580 (open, vérifié). Pas un défaut de cette PR, qui ne touche pas au manifeste des taxonomies.
— [NanoClaw] (clusterManager-Myia, myia-ai-01)
|
[ADJOINT PREFLIGHT] Note adjoint (titulaire, exact-head
|
Grain: DEEP/training — lane myia-po-2025:CoursIA — prev: DEEP/notebook-python #17575
Résumé
Phase 2, tranche A de l'EPIC #10355 (issue #17578) : le squelette déterministe du dataset d'entraînement, avant toute génération de texte.
scripts/fallacy_detection/cartesian_dataset_builder.py. Il travaille sur le produit cartésien Scénarii × taxonomies Argumentum : 167 × (1407 sophismes + 222 vertus) = 272 043 couples (scénario, nœud). Il en tire 18 887 couples (6,9 %) :05_dataset_builder.ipynb: 31 cellules, dont 10 de code et 3 exercices avec stubs sans erreur (C.1). Il est exécuté.data/argumentum_scenarii_cards.csv: copie verbatim deCards/Scenarii/Argumentum Scenarii - Cards.csv(blob9f20eb80, identique à l'amont grâce à la règle-textdu.gitattributes). La licence est documentée dansdata/NOTICE-SCENARII.- Cards.csvau lieu de- Taxonomy.csv, 272 043 au lieu de 235 376, vertus incluses) ; format des splits documenté.Deux résultats de la tranche
1. Fuite d'anti-circularité en farsi (F944)
Le prompt ne transmet que le titre et la définition du nœud : un exemple du nœud dans le prompt rendrait la tâche circulaire. Le premier comptage donnait 0 fuite dans 7 langues, mais 9 prompts en
fa. La celluledesc_fade F944 contient la carte entière sur trois lignes étiquetées[nom]/[explication]/[exemple], c'est-à-dire l'exemple lui-même.Deux corrections :
_definition()ne garde que la ligne d'explication d'une carte étiquetée ;load_textsrefuse désormais (fail-closed) tout nœud dont un exemple d'au moins 25 caractères figure dans son titre ou sa définition.Résultat : 0 fuite dans les 8 langues, sur les 18 887 couples. Un contrôle positif (exemple injecté dans la définition de F799) rend
True. Le défaut vient de l'amont (traduction), et le garde empêche sa réapparition à la prochaine resynchronisation.2. Où placer le déséquilibre : exposant α
On pondère chaque nœud par
n_f^-α, avecn_fla taille de sa famille. Le rapport max/min entre familles vaut alorsr^(1-α), celui entre nœudsr^α, et leur produit vautr: le déséquilibre ne disparaît pas, il se déplace. Pour les sophismes,r= 420/89 = 4,72.Avec des quotas entiers, l'identité n'est exacte que si les familles extrêmes restent alignées : la plus grosse porte uniformément le plus petit quota, la plus petite uniformément le plus grand. Le balayage mesuré :
Le cas α = 0,25 montre le désalignement. 253 des 394 nœuds de
Tricheriereçoivent 8 paires, ce qui porte la famille à 3 011 paires, au-dessus d'Influence(2 940), alors queTricheriene porte pas le plus petit quota.Le défaut retenu est α = 0,5 : les deux rapports sont autour de √r ≈ 2,17 (mesurés 2,02 entre familles et 2,33 entre nœuds). Un tirage uniforme de 14 000 couples donnerait 4,84 entre familles.
Validation
Exécution réelle (H.1) :
python -m papermill 05_dataset_builder.ipynb 05_dataset_builder.ipynb -k python3 --cwd .(dossier du notebook).execution_count1 à 10 sur les 10 cellules de code, 0 sortieerror, 0 fluxstderr, 1 figure.metadata.papermill.input_pathetoutput_pathsont réduits au basename ; aucun chemin machine dans les sorties.Contrôles locaux :
Intégrité des splits (dans
manifest.json) :Reproductibilité : une deuxième construction (
B.build(PARAMS)) rend les mêmes couples, et l'écriture est en LF quel que soit l'OS. Un test vérifie les octets exacts des splits et du manifeste.Portée et limites déclarées
scripts/fallacy_detection/testsn'est câblé ni danspytest.inini dansscripts-tests.yml, et c'est déjà vrai pour la garde d'intégrité des taxonomies. Cette garde est d'ailleurs rouge surmain, sans que personne le voie : son manifeste n'a pas été régénéré par chore(argument,#4960): resync taxonomies verbatim au pin ae84c91c #14578. Le câblage et la régénération sont tracés dans fix(fallacy,ci): argumentum_snapshot.json perime depuis #14578 et scripts/fallacy_detection/tests hors CI #17580 et ne font pas partie de cette PR, qui ne touche pas au manifeste des taxonomies. Le notebook dit explicitement qu'il n'est pas encore rejoué en CI.val.csvettest.csvsont committés (88 Ko et 183 Ko).train.csv(823 Ko) se régénère à l'identique : il est ignoré et épinglé par son SHA-256. Les splits ne contiennent aucun texte, seulement des clés : les textes se relisent dans les sources au moment du rendu du prompt..gitattributes28.See #10355
See #17578
See #17580
🤖 Generated with Claude Code