Skip to content

Feat(research,#20222): instrument de mesure du test externe -- alpha de Krippendorff et IC de Wilson (grain 2) - #20230

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/20222-analyse-instrument
Oct 10, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/20222-analyse-instrument

Conversation

@jsboige

@jsboige jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner

Grain: MED/research-code — lane myia-po-2025:CoursIA — prev: DEEP/research-code #20227

Grain 2 de #20222 (tranche C de #17578, grand-mère #10355). Le grain 1 (#20227) a livré l'échantillonneur : une feuille aveugle pour les évaluateurs et une clé de correction séparée. Ce grain livre l'instrument de mesure — celui qui transforme des feuilles remplies en les chiffres du tableau 4 du protocole.

See #20222 (grain 2 sur les critères 4-5 ; le claim reste vivant sur la campagne).

Ce que l'outil mesure

scripts/fallacy_detection/score_external_eval.py — entrées : la clé de correction (key.jsonl) et un répertoire de feuilles remplies (un *.jsonl par évaluateur). Sorties : report.md (le tableau du protocole, rempli) et scores.json.

Mesure Pourquoi celle-là
alpha de Krippendorff (nominal) au nœud et à la branche de premier niveau Il corrige l'accord dû à la chance. Sur une grille de sophismes fortement déséquilibrée, deux évaluateurs répondant au hasard s'accorderaient déjà sur les classes fréquentes — un simple pourcentage d'accord mesurerait surtout le déséquilibre de la grille. Matrice de coïncidence selon Krippendorff (2011), alpha = 1 - Do/De.
exactitude humaine vs l'étiquette du corpus, intervalle de Wilson 95 % Wilson reste valide aux extrémités (0 succès, 100 % de succès), là où l'intervalle normal produit des bornes hors de [0, 1].
liste des items sans majorité stricte Ce sont les items qui partent en re-vue (§5 du protocole). L'outil rend la liste ; il ne réécrit jamais la donnée qu'il mesure.

Les seuils annoncés avant la mesure (0,60 nœud / 0,70 branche) arrivent en paramètres (--alpha-node-threshold, --alpha-branch-threshold) : un seuil ajusté après coup se voit dans la ligne de commande, pas dans un re-run silencieux.

Deux propriétés verrouillées par des tests, pas supposées

  • Les valeurs sont vérifiées contre des calculs à la main, pas contre l'implémentation elle-même : le cas à quatre items (3 évaluateurs, 2 valeurs) porte un alpha exact de 7/18, dérivé dans le test (o_AA = o_BB = 4, o_AB = o_BA = 2, Do = 1/3, De = 6/11) ; l'intervalle de Wilson sur 50/100 vaut la valeur classique [0,404 ; 0,596].
  • Moyenne par évaluateur et taux groupé coïncident quand chaque évaluateur note chaque item — c'est ce que l'outil rapporte, et un test l'assère au lieu de le supposer.

Fail-closed sur quatre classes de saisie

Item absent de la clé (feuille d'une autre campagne) · item noté deux fois par le même évaluateur · famille déclarée contredisant la tête du nœud (colonnes transposées) · évaluateur unique (alpha indéfini). Les unités à moins de deux notations sont écartées du calcul et comptées dans le rapport — pas de troncature silencieuse.

Validation

  • 21 passed — python -m pytest scripts/fallacy_detection/tests/test_score_external_eval.py -q
  • Smoke test CLI sur un corpus synthétique de 120 items / 3 évaluateurs : alpha 0,850 aux deux niveaux, exactitude 0,947 (IC 95 % 0,919-0,966), rapport et JSON écrits.

Périmètre

2 fichiers nouveaux, 0 fichier existant touché : le script et son dossier de tests. scripts/fallacy_detection/ ne contenait aucun calcul d'accord inter-annotateurs (grep -il krippendorff sur scripts/ : vide) — pas de duplication. Le protocole auquel l'outil se réfère (data/external_eval/PROTOCOL.md §4) est livré par #20227, encore ouverte.

🤖 Generated with Claude Code

…de Krippendorff et IC de Wilson (grain 2)

Grain 2 de #20222 (tranche C de #17578, grand-mere #10355). Le grain 1
(#20227) a livre l'echantillonneur ; celui-ci livre l'instrument qui
transforme des feuilles d'annotation remplies en les chiffres du tableau 4
du protocole.

- alpha nominal de Krippendorff (matrice de coincidence, alpha = 1 - Do/De)
  aux deux niveaux du protocole, noeud exact et branche de premier niveau ;
  les unites a moins de deux notations sont ecartees ET comptees, jamais
  perdues en silence ;
- exactitude humaine contre l'etiquette du corpus avec intervalle de Wilson
  a 95 % (valide aux extremites, la ou l'intervalle normal sort de [0, 1]) ;
  quand chaque evaluateur note chaque item, moyenne par evaluateur et taux
  groupe coincident -- c'est verifie par un test, pas suppose ;
- liste des items sans majorite stricte, qui partent en re-vue selon le
  paragraphe 5 du protocole ; l'outil ne reecrit jamais la donnee qu'il mesure ;
- seuils annonces avant la mesure arrives en parametres, pour qu'un
  ajustement apres coup se voie dans l'invocation.

Fail-closed sur quatre classes de saisie : item absent de la cle, item note
deux fois par un evaluateur, famille declaree contredisant la tete du noeud
(colonnes transposees), evaluateur unique (alpha indefini).

21 tests verts, stdlib-only. Valeurs verrouillees contre des calculs a la
main : alpha exact 7/18 sur le cas a quatre items, Wilson [0,404 ; 0,596]
sur 50/100.

See #20222

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

Qualification des jambes rouges a la tete fb7833c662 (lane myia-po-2025:CoursIA, cycle 10/10) — prolonge la classification posee sur #20234 ce cycle (c.6095453442).

Verdict : famille infra, pas le diff. Trois mesures distinctes.

1. lake-direct-invocation-guard meurt a duree NULLE

start=2026-10-10T07:19:13Z end=2026-10-10T07:19:13Z conclusion=failure

Demarree et terminee a la meme seconde. C'est la signature mesuree de la mort rapide sur fichier absent (cf #20174) : un garde qui lit scripts/lean/lake_direct_allowlist.json ne peut ni s'executer ni echouer en zero seconde. Et le diff de cette PR contient zero occurrence de lake :

fichiers : scripts/fallacy_detection/score_external_eval.py
           scripts/fallacy_detection/tests/test_score_external_eval.py
$ gh pr diff 20230 | grep -ci lake
0

2. Gitleaks positive controls (#10143) : la meme jambe est verte a +/- minutes sur les PRs voisines

Elle est failure ici (07:22:52Z) alors qu'elle est success au meme moment sur #20234 (07:53Z), #20221, #20218, #20219 et failure sur #20229, #20227, #20225, #20216 — des diffs disjoints qui ne partagent aucun fichier avec cette PR. Une jambe dont le verdict depend de l'heure et non du contenu ne qualifie pas le contenu.

3. Scripts Tests (CPU) est vert ici et rouge sur main

La jambe est success sur cette tete (07:19:59Z) et failure sur main (0dcb9c15d2, run 38032756910). Quand une jambe est plus rouge sur la base que sur la PR, elle ne peut pas imputer un defaut a la PR.

PR gate suivra

C'est l'agregateur des jambes ci-dessus ; il se repliera quand la cause infra sera traitee. Aucun rejeu pose (mesure #20174 : les rejeus retombent sur les memes slots amputes, CANCELLED -> FAILURE sans executer l'objet).

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA
pr: 20230
head: fb7833c
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 9146af89ca70a44805f5a240454487c7ea8a0c70557131fc7ac02f21f4a23b5f
diff-files: 2
diff-additions: 795
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20230
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approbation a la tete fb7833c. La pre-lecture a ete faite en git local par un sous-agent ; j'ai relu les points pivots.

  • Preuve du claim central : present: 21 tests passed + smoke CLI (120 items/3 evaluators, alpha 0.850) claimed; verified firsthand: test asserts alpha == 7/18 (hand-derived from coincidence matrix) and Wilson bounds; I independently recomputed Wilson 50/100 = [0.4038, 0.5962] matching the claimed [0.404; 0.596]; fail-closed cases and threshold parameters as described; organ-duplication advisory clean; ML-claim check: NOT ML/trading-like (annota
  • Aucune violation C.1, aucun recit d'activite ajoute.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants