From e7bf50613592564aa3a215441c8461d75744259d Mon Sep 17 00:00:00 2001 From: Jean-Sylvain Boige Date: Sat, 24 Oct 2026 22:25:34 +0200 Subject: [PATCH 1/4] Fix(docs,#20222): etat du protocole aligne sur les mesures du 2026-10-24 - reproductibilite de run1 confirmee par un second tirage independant (graine 42, 200 items) : feuille, cle et source aux memes empreintes SHA-256, memes effectifs par famille - chaine sample -> render -> convert -> score exercee de bout en bout, avec un controle de plomberie explicitement etiquete comme tel - trois feuilles de passage 1 rendues (200 enonces chacune) ; le kit pilote n'en portait qu'une la ou le critere 2 en exige trois - Q25 est repondue depuis le 2026-10-12 : la ligne ne decrit plus un arbitrage en attente mais une execution (recruter 3 evaluateurs) Co-Authored-By: Claude Sonnet 5.5 --- .../GenAI/FallacyDetection/data/external_eval/PROTOCOL.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md b/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md index 656bd1e4659..34fd4df15e9 100644 --- a/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md +++ b/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md @@ -103,5 +103,8 @@ Un identifiant qui afficherait la graine (forme `eval--`) la donne - [x] Instrument d'échantillonnage + tests (ce grain). - [x] Échantillon réel `run1` (2026-10-20, table mergée via #20315 ; **re-émis le 2026-10-23** après le fix dedup du builder) : le corpus aligné (225 paires, `data/academic/aligned/`) est construit par `build_aligned_eval_corpus.py` — 128 joins exacts, 97 par pont déclaré (un rationale par pont), 44 exclus motivés, **unicité (texte, nœud) garantie à l'émission** (3 paires démultiplicées fusionnées, libellés sources dans `source_labels` ; la première émission dupliquait des paires, ce qui rendait la campagne inmesurable — c.6373865101). Tirage : 200 items, graine 42, stratifiés sur **6 familles** (17-56 par famille) ; la 7ᵉ (Tricherie) est **mesurée à 0 paire source** dans le gold MAFALDA entier — aucun span ne porte son unique label L2 (`Fallacy of proportion`). `sheet.jsonl` / `key.jsonl` / `manifest.json` (empreintes SHA-256 de la source, de la feuille et de la clé) vivent hors dépôt : `G:\Mon Drive\MyIA\IA\external-eval-20222\run1\` (circulation §6 — organisateur seul) ; la première émission (défectueuse, jamais circulée) est préservée dans `run1-superseded-20261023\`. -- [ ] Panel d'évaluateurs : arbitrage user Q25 (recommandation lane : étudiants des cours, TP guidé). -- [ ] Campagne d'annotation + mesures (§4) + re-vues (§5). +- [x] **Reproductibilité de `run1` confirmée par un second tirage indépendant** (2026-10-24, lane `myia-po-2028:CoursIA`) : relancé sur le corpus aligné courant, `--n 200 --min-per-family 10 --seed 42`, le tirage rend un `sheet.jsonl` **octet pour octet identique** à celui de `run1` — même empreinte source `8f2dc776…`, même empreinte feuille `f66058b6…`, même empreinte clé `4b66ace4…` et mêmes effectifs par famille (17/22/56/44/27/34). La propriété « même graine = même échantillon » du §2 est donc tenue par une mesure, pas seulement par un test unitaire. Copie du tirage conservée hors dépôt : `…\external-eval-20222\run1-200-po2028\sample\` — `run1\` reste la référence de la campagne. +- [x] **Chaîne complète exercée de bout en bout** (2026-10-24, même lane) : `sample_external_eval.py` → `render_annotation_sheet.py render` → `… convert` → `score_external_eval.py`. Contrôle d'étanchéité **de plomberie, pas une mesure** : trois feuilles de réponses recopiées depuis la clé elle-même donnent alpha nœud 1,000, alpha branche 1,000, exactitude 1,000 (IC Wilson 0,994-1,000) et 0 item à revoir. Ce que ce contrôle prouve est que la feuille rendue est **remplissable** et que le mesureur consomme la forme exacte que `convert` produit ; il ne dit **rien** de l'accord entre humains (§4), et ses artefacts portent `_plumbing_control` dans leur chemin pour ne jamais être pris pour une campagne. +- [x] **Feuilles d'annotation du passage 1 rendues** (2026-10-24) : trois documents de 200 énoncés (`eval_a`, `eval_b`, `eval_c`), chacun avec son gabarit CSV et son manifeste de rendu, sous `…\external-eval-20222\run1-200-po2028\pass1\`. L'espace de réponse fermé y est la section « 6 familles, 16 nœuds » ; aucun énoncé ne porte son nœud ni sa famille (vérifié : la feuille ne porte que `item_id` et `text`). Le kit `pilot_voie_i\` livré le 2026-10-24 ne portait qu'**une** feuille (`pilot-01`) là où le critère 2 en exige trois. +- [ ] **Panel humain** : Q25 est **répondue** depuis le 2026-10-12 (« OK pour i ou ii », citée dans le corps de #22233) — le pilote 30-50 paires est autorisé, cette ligne ne décrit donc plus un arbitrage en attente mais une **exécution** : recruter ≥ 3 évaluateurs indépendants, leur remettre les feuilles du passage 1, récupérer les CSV remplis. Choix de la voie (pilote 30-50 paires avant la campagne complète, ou campagne 200 directe) à trancher par le coordinateur. +- [ ] Campagne d'annotation + mesures (§4) + re-vues (§5) — aucune des deux ne peut être produite par un agent : elles exigent des évaluateurs humains. From e676bf1626db45791c37c34885cf5a6dd3b69575 Mon Sep 17 00:00:00 2001 From: Jean-Sylvain Boige Date: Sun, 25 Oct 2026 00:51:00 +0200 Subject: [PATCH 2/4] =?UTF-8?q?Fix(docs,#20222):=20trois=20observations=20?= =?UTF-8?q?NanoClaw=20sur=20PROTOCOL=20--=20=C2=A72=20chemin=20reel=20du?= =?UTF-8?q?=20test,=20=C2=A73=20Q25=20alignee=20sur=20=C2=A77,=20=C2=A77?= =?UTF-8?q?=20feuille/evaluateur=20demeles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - §2 : le chemin cite est scripts/fallacy_detection/tests/test_sample_external_eval.py (derive preexistante, ligne non touchee par la PR initiale). - §3 : la voie pilote/campagne est tranchee par Q25 (2026-10-12) ; l'identite et la modalite des evaluateurs restent a decider -- plus de contradiction avec §7. - §7 : la phrase finale confondait feuille et evaluateur ; reformulee (une feuille par evaluateur, le critere 2 exigeant trois evaluateurs independants). Le constat sur le kit pilot_voie_i quitte le document pour le fil de #20222, ou il est reposte. Co-Authored-By: Claude Sonnet 5.5 --- .../GenAI/FallacyDetection/data/external_eval/PROTOCOL.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md b/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md index 34fd4df15e9..eb0ff1c663b 100644 --- a/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md +++ b/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md @@ -24,7 +24,7 @@ python scripts/fallacy_detection/sample_external_eval.py \ --n 200 --min-per-family 10 --seed 42 ``` -L'outil garantit, par construction et par tests (`tests/test_sample_external_eval.py`) : +L'outil garantit, par construction et par tests (`scripts/fallacy_detection/tests/test_sample_external_eval.py`) : - **plancher stratifié** : chaque famille de premier niveau ≥ 10 paires, sinon refus fail-closed nommant la famille déficiente ; - **aveugle structurel** : `sheet.jsonl` (feuille évaluateur) ne contient jamais le nœud cible **ni sa famille de premier niveau** (la liste fermée des familles reste connue des évaluateurs — c'est l'espace de réponse du passage 1 — mais la famille correcte d'un item est la première moitié de la réponse : la porter sur la feuille rendrait le seuil « branche » du §4 circulaire) ; `key.jsonl` (correction, qui porte la famille pour la stratification) est un fichier séparé ; @@ -62,7 +62,7 @@ restent soumis au §6. ## 3. Évaluateurs -- **≥ 3 évaluateurs indépendants** (l'arbitrage du panel — qui sont les humains, et sous quelle modalité — est l'objet de la question user Q25, registre de la lane). +- **≥ 3 évaluateurs indépendants** (la **voie** — pilote ou campagne — a été tranchée par la question user Q25 le 2026-10-12 ; l'identité des évaluateurs et la modalité de recrutement restent à décider au moment de l'exécution). - **Passage 1 « annotation nue » (obligatoire)** : l'évaluateur voit le texte et la liste des familles de premier niveau ; il choisit la famille, puis le nœud dans la famille. Il ne voit **ni la définition des nœuds, ni aucun exemple** — c'est le passage qui mesure la retrievability « à froid ». - **Passage 2 « avec définitions » (optionnel, séparé)** : mêmes items, définitions des nœuds visibles. Il mesure l'apport des définitions, jamais il ne remplace le passage 1. @@ -105,6 +105,6 @@ Un identifiant qui afficherait la graine (forme `eval--`) la donne - [x] Échantillon réel `run1` (2026-10-20, table mergée via #20315 ; **re-émis le 2026-10-23** après le fix dedup du builder) : le corpus aligné (225 paires, `data/academic/aligned/`) est construit par `build_aligned_eval_corpus.py` — 128 joins exacts, 97 par pont déclaré (un rationale par pont), 44 exclus motivés, **unicité (texte, nœud) garantie à l'émission** (3 paires démultiplicées fusionnées, libellés sources dans `source_labels` ; la première émission dupliquait des paires, ce qui rendait la campagne inmesurable — c.6373865101). Tirage : 200 items, graine 42, stratifiés sur **6 familles** (17-56 par famille) ; la 7ᵉ (Tricherie) est **mesurée à 0 paire source** dans le gold MAFALDA entier — aucun span ne porte son unique label L2 (`Fallacy of proportion`). `sheet.jsonl` / `key.jsonl` / `manifest.json` (empreintes SHA-256 de la source, de la feuille et de la clé) vivent hors dépôt : `G:\Mon Drive\MyIA\IA\external-eval-20222\run1\` (circulation §6 — organisateur seul) ; la première émission (défectueuse, jamais circulée) est préservée dans `run1-superseded-20261023\`. - [x] **Reproductibilité de `run1` confirmée par un second tirage indépendant** (2026-10-24, lane `myia-po-2028:CoursIA`) : relancé sur le corpus aligné courant, `--n 200 --min-per-family 10 --seed 42`, le tirage rend un `sheet.jsonl` **octet pour octet identique** à celui de `run1` — même empreinte source `8f2dc776…`, même empreinte feuille `f66058b6…`, même empreinte clé `4b66ace4…` et mêmes effectifs par famille (17/22/56/44/27/34). La propriété « même graine = même échantillon » du §2 est donc tenue par une mesure, pas seulement par un test unitaire. Copie du tirage conservée hors dépôt : `…\external-eval-20222\run1-200-po2028\sample\` — `run1\` reste la référence de la campagne. - [x] **Chaîne complète exercée de bout en bout** (2026-10-24, même lane) : `sample_external_eval.py` → `render_annotation_sheet.py render` → `… convert` → `score_external_eval.py`. Contrôle d'étanchéité **de plomberie, pas une mesure** : trois feuilles de réponses recopiées depuis la clé elle-même donnent alpha nœud 1,000, alpha branche 1,000, exactitude 1,000 (IC Wilson 0,994-1,000) et 0 item à revoir. Ce que ce contrôle prouve est que la feuille rendue est **remplissable** et que le mesureur consomme la forme exacte que `convert` produit ; il ne dit **rien** de l'accord entre humains (§4), et ses artefacts portent `_plumbing_control` dans leur chemin pour ne jamais être pris pour une campagne. -- [x] **Feuilles d'annotation du passage 1 rendues** (2026-10-24) : trois documents de 200 énoncés (`eval_a`, `eval_b`, `eval_c`), chacun avec son gabarit CSV et son manifeste de rendu, sous `…\external-eval-20222\run1-200-po2028\pass1\`. L'espace de réponse fermé y est la section « 6 familles, 16 nœuds » ; aucun énoncé ne porte son nœud ni sa famille (vérifié : la feuille ne porte que `item_id` et `text`). Le kit `pilot_voie_i\` livré le 2026-10-24 ne portait qu'**une** feuille (`pilot-01`) là où le critère 2 en exige trois. +- [x] **Feuilles d'annotation du passage 1 rendues** (2026-10-24) : trois documents de 200 énoncés (`eval_a`, `eval_b`, `eval_c`), chacun avec son gabarit CSV et son manifeste de rendu, sous `…\external-eval-20222\run1-200-po2028\pass1\`. L'espace de réponse fermé y est la section « 6 familles, 16 nœuds » ; aucun énoncé ne porte son nœud ni sa famille (vérifié : la feuille ne porte que `item_id` et `text`). Une feuille par évaluateur, le critère 2 exigeant trois évaluateurs indépendants. - [ ] **Panel humain** : Q25 est **répondue** depuis le 2026-10-12 (« OK pour i ou ii », citée dans le corps de #22233) — le pilote 30-50 paires est autorisé, cette ligne ne décrit donc plus un arbitrage en attente mais une **exécution** : recruter ≥ 3 évaluateurs indépendants, leur remettre les feuilles du passage 1, récupérer les CSV remplis. Choix de la voie (pilote 30-50 paires avant la campagne complète, ou campagne 200 directe) à trancher par le coordinateur. - [ ] Campagne d'annotation + mesures (§4) + re-vues (§5) — aucune des deux ne peut être produite par un agent : elles exigent des évaluateurs humains. From 18d8c8a733e107f38de2ab916d2cac9ab5fab09e Mon Sep 17 00:00:00 2001 From: Jean-Sylvain Boige Date: Sun, 25 Oct 2026 03:56:20 +0100 Subject: [PATCH 3/4] =?UTF-8?q?Fix(docs,#20222):=20=C2=A72bis=20--=20chemi?= =?UTF-8?q?n=20complet=20du=20test=20de=20rendu,=20comme=20=C2=A72?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La revue NanoClaw signalait la derive de chemin en §2 (corrigee au commit precedent). §2bis portait la meme derive, une ligne plus loin : le document citait `tests/test_render_annotation_sheet.py` quand le fichier vit sous `scripts/fallacy_detection/tests/`. Les deux sections citent desormais le chemin reel, verifie dans l'arbre. Co-Authored-By: Claude Sonnet 5.5 --- .../GenAI/FallacyDetection/data/external_eval/PROTOCOL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md b/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md index eb0ff1c663b..2ff670b476e 100644 --- a/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md +++ b/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md @@ -50,7 +50,7 @@ python scripts/fallacy_detection/render_annotation_sheet.py convert \ --out .../pass1/.jsonl ``` -Trois points que le rendu tient par construction (`tests/test_render_annotation_sheet.py`) : +Trois points que le rendu tient par construction (`scripts/fallacy_detection/tests/test_render_annotation_sheet.py`) : - **l'aveuglement est vérifié à l'entrée** : une feuille portant un champ autre que `item_id` et `text` est refusée — passer `key.jsonl` par erreur échoue au lieu de publier les étiquettes ; - **l'espace de réponse est la liste des nœuds**, groupée par famille, sans définition ni exemple : c'est exactement ce que le passage 1 du §3 autorise à montrer ; From 6252b7de19a6b1a9a14202fdff4cefcffaec9d3f Mon Sep 17 00:00:00 2001 From: Jean-Sylvain Boige Date: Sun, 25 Oct 2026 17:01:10 +0100 Subject: [PATCH 4/4] Fix(review,#22406): section 3 -- la voie est autorisee par Q25, non tranchee MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reponse a la reserve Hermes 5641329931 : le correctif precedent alignait section 3 sur la mauvaise moitie de section 7 (« tranchée » vs « à trancher »). Formulation ciblee par le reviewer : autorisation de voie (Q25, « OK pour i ou ii »), le choix pilote/campagne reste au coordinateur. Le document porte desormais un etat unique de Q25. Co-Authored-By: Claude Sonnet 5.5 --- .../GenAI/FallacyDetection/data/external_eval/PROTOCOL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md b/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md index 2ff670b476e..fca560da19e 100644 --- a/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md +++ b/MyIA.AI.Notebooks/GenAI/FallacyDetection/data/external_eval/PROTOCOL.md @@ -62,7 +62,7 @@ restent soumis au §6. ## 3. Évaluateurs -- **≥ 3 évaluateurs indépendants** (la **voie** — pilote ou campagne — a été tranchée par la question user Q25 le 2026-10-12 ; l'identité des évaluateurs et la modalité de recrutement restent à décider au moment de l'exécution). +- **≥ 3 évaluateurs indépendants** (la **voie** — pilote ou campagne — est autorisée par la question user Q25 le 2026-10-12, qui n'a pas tranché entre les deux ; le choix reste au coordinateur, cf. §7, et l'identité des évaluateurs et la modalité de recrutement restent à décider au moment de l'exécution). - **Passage 1 « annotation nue » (obligatoire)** : l'évaluateur voit le texte et la liste des familles de premier niveau ; il choisit la famille, puis le nœud dans la famille. Il ne voit **ni la définition des nœuds, ni aucun exemple** — c'est le passage qui mesure la retrievability « à froid ». - **Passage 2 « avec définitions » (optionnel, séparé)** : mêmes items, définitions des nœuds visibles. Il mesure l'apport des définitions, jamais il ne remplace le passage 1.