Skip to content

Fix(audit,#19451): differencier-les-assistants -- lecture de la discriminabilite apres la cellule qui la produit, chiffres derives reformules - #24398

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/19451-diff-assistants
Nov 3, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/19451-diff-assistants

Conversation

@jsboige

@jsboige jsboige commented Nov 3, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python -- lane myia-ai-01:CoursIA-2 -- prev: MED/docs #24348

Summary

Correction d'audit du carnet MyIA.AI.Notebooks/GenAI/Plateformes-Conversationnelles/differencier-les-assistants.ipynb (partition Plateformes-Conversationnelles de l'EPIC #19451). Trois defauts de coherence prose/sorties, mesures a la main contre les sorties commitees, corriges en markdown seul.

1. La lecture de la discriminabilite etait placee avant la cellule qui la produit. La cellule de code discriminabilite (exactitude 0.47, hasard 0.17) est le dernier bloc de code du carnet, alors que le bloc « Lecture du resultat » qui commente 0,47 et 0,17 se trouvait dans l'introduction, plusieurs cellules plus tot. Le bloc est desormais place immediatement apres la cellule qui porte la sortie ; l'introduction ne cite plus aucun chiffre (PR review discipline 4bis : la lecture suit la cellule dont la sortie porte la valeur citee).

2. La table des 15 paires ne reproduisait pas la sortie. La cellule du tableau imprime les 15 paires triees par rang des prompts ; la version markdown n'en reproduisait que 6, dans un autre ordre, avec des libelles divergents. La table markdown reproduit desormais les 15 lignes, dans l'ordre imprime.

3. L'exercice 2 comptait cinq reponses au lieu de six. Le tableau precedent compte six reponses correspondantes ; la correction en comptait cinq.

Chiffres derives reformules (C.4 / C.5). La lecture citait un quotient (« un facteur 2,8 »), un ecart-type (« 4,9 sigma ») et un compte exact (« 17/36 »), aucun de ces trois nombres n'etant imprime ; elle citait en outre deux seuils (« au-dela de 0,30 », « au-dela de 0,80 ») adosses a aucune sortie. Les seuils non ancres sont retires, les valeurs derivees sont reformulees en mots ou rapportees a leurs termes imprimes (0.47 / 0.17). La provenance des chiffres pointe desormais la cellule de code qui porte les parametres de collecte (temperature, graine) au lieu de les recopier : la source unique de ces parametres est le code.

Diagnostic derive

Cause : (b) claim anterieure fabriquee. La lecture avait ete ecrite contre une disposition de cellules differente de celle du carnet livre ; les deux seuils (0,30 / 0,80) n'etaient adosses a aucune sortie, et le quotient, l'ecart-type et le compte exact etaient des grandeurs derivees, jamais imprimees.

Verdict : CAUSE_FIXED.

La correction porte sur la prose uniquement : aucune cellule de code n'est touchee (les 12 cellules de code sont byte-identiques a origin/main), aucune sortie n'est reecrite, aucune valeur n'est re-alignee sur une execution fraiche. Les seules valeurs citees desormais sont celles imprimees par les cellules de code du carnet. La re-execution n'est pas due au sens de C.2 / C.3 (aucune cellule de code modifiee) : la collecte interroge un point d'entree LLM, ses sorties ne sont pas reproductibles hors de ce run.

Preuves

Organes rejoues sur la tete de branche :

  • check_markdown_claims_output.py : verdict CLEAN, 0 finding
  • check_stale_claims.py : anomaly_count: 0
  • check_interp_positioning.py : findings total : 0
  • check_exec_ratchet.py : changed notebooks : 0 / regressions : 0
  • validate_pr_notebooks.py : passed: true, forensic_verdict: EXEC_PROVED (12 cellules de code)
  • audit_c1_c3.py --base origin/main --head HEAD : 1/1 notebooks clean
  • check_output_collapse.py : regressed: false (5223 -> 5223)
  • check_source_collapse.py : regressed: false (11108 -> 11108)
  • check_prose_quantitative_claims.py : [OK]
  • check_activity_leak.py : [OK]

Les valeurs citees ont ete verifiees a la main contre les sorties commitees : matrice de Jaccard et rangs, exactitude 0.47 / hasard 0.17, les 36 reponses annoncees par la cellule de comptage, attribution des lignes de la matrice de confusion, 15/15 changements de rang.

Réponse à la revue structurelle du 03/11

Les deux reserves de la revue sont traitees sur la tete 595a468d3d32, en markdown seul : aucune cellule de code n'est touchee, donc aucune re-execution n'est due (C.2/C.3), et les sorties commitees (papermill du 27 octobre 2026) restent la source de verite.

Reserve Traitement
Le pointeur « les trois lignes qui suivent disent ou le signal est fort et ou il manque » est faux : les trois elements qui suivent sont les trois lectures du meme chiffre Corrige en markdown (commit 595a468d3d32). La repartition du signal, assistant par assistant, se lit dans la matrice de confusion qu'imprime la cellule de code conf (cellule d'index 17, id eeb8a5e9), commentee dans « La signature de la redondance » (cellule d'index 18, id 3c2d1abd) : le pointeur est remplace par cette designation exacte.
La provenance retrograde temperature=0.3 / seed=7 en « temperature basse et graine fixe (les valeurs exactes sont dans le code) » Corrige en markdown (commit 595a468d3d32). Les deux valeurs sont byte-exactes dans interroger (cellule de code 23b58f40, temperature=0.3, seed=7) : elles sont restituees, avec la cellule en regard. Un datum de reproductibilite juste ne peut pas disparaitre au profit d'un renvoi.

See #19451

🤖 Generated with Claude Code

…iminabilite apres la cellule qui la produit, chiffres derives reformules

Trois defauts mesures sur la tete :
- la lecture de 0,47 etait placee AVANT la cellule de code qui la produit (cellule 14) ;
- la table des 15 paires (cellule 21) ne reproduisait pas la sortie imprimee (ordre et libelles) ;
- l'exercice 2 comptait cinq reponses correspondantes au lieu de six (cellule 25).

C.4 : les valeurs citees hors des sorties sont reformulees (quotient, ecart-type, compte
exact) ; les seuils non ancres (0,30 / 0,80) sont retires. C.5 : la provenance pointe
desormais la cellule de code qui porte les parametres de collecte (source unique)
au lieu de les recopier.

Cellules de code inchangees (12, byte-identiques a origin/main) -> aucune
re-execution due.

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

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-ai-01:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-11-03) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.8s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 24.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.3s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 14.5s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

github-actions Bot commented Nov 3, 2026

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).

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 12
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Nov 3, 2026

@clusterManager-Myia clusterManager-Myia 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.

VERDICT: LGTM (vérifié: extraction notebook COMPLET base 419b61a8 → head 1c564f40, 29→30 cellules id-alignées)

[NanoClaw] revue structurelle protocole v2 — l'artefact porteur est le notebook GenAI/Plateformes-Conversationnelles/differencier-les-assistants.ipynb, extrait intégralement via contents?ref= aux deux têtes ; les sorties ne sont jamais lues en brut (empreintes type/mime/taille/sha8).

Ce que j'ai mesuré

0 cellule de code touchée — confirmé par id, pas par index. Cellules 29 (base) → 30 (head), delta = exactement 1 cellule markdown insérée (78349c52, index 16) + 4 cellules markdown modifiées (84229be5, 085a0eaf, ffc668ac, f25cf4c0). Aucun id supprimé/ajouté ailleurs. Les 12 cellules de code sont byte-identiques : 0 diff de source, 0 diff d'execution_count (1→1 … 12→12), 0 diff de sortie (empreintes identiques sur les 12), 0 diff de metadata hors décalage d'index. La revendication « prose uniquement » du body est exacte.

Placement (défaut n°1) — vérifié, pas relayé. 78349c52 est inséré immédiatement après la cellule de code 5c105df6 dont la sortie imprime exactitude : 0.47 (hasard = 0.17). L'introduction 84229be5 ne cite plus aucun chiffre : son bloc « Lecture du résultat : 0.47 vs 0.17, un facteur 2.8× » a disparu, et le chemin d'accès 1a7baf4e → 93939d1b → … → 84229be5 → 5c105df6 → 78349c52 est cohérent. La référence cellule de code \discriminabilite`résout bien : la fonctiondiscriminabiliteest définie dans5c105df6(et nonmatrice_tfidf`, qui n'en est que la première ligne).

Table des 15 paires (défaut n°2) — reproduite au caractère près. J'ai comparé les 15 lignes du markdown de 085a0eaf à la sortie imprimée par 54b2b933 : les 15 paires, les 30 valeurs d(prompts)/d(réponses) et les 15 couples de rangs sont identiques, dans l'ordre imprimé (ex. documentation / expression 0.87 / 0.84 / 6 → 1 ; style / expression 0.84 / 0.49 / 8 → 15). La version base n'en portait que 6, hors ordre. L'en-tête « La voici dans l'ordre imprimé » est exact.

Exercice 2 (défaut n°3) — « six réponses » est la bonne valeur. La sortie de 23b58f40 imprime 6 assistants x 6 sondes = 36 réponses et exactitude_par_sonde(…, len(SONDES)) reçoit nb_sondes=6 : par indice de sonde il y a bien 6 réponses (une par assistant), pas 5. Le tableau précédent en compte six, comme écrit.

Chiffres dérivés reformulés (C.4/C.5) — mesurés un à un. Disparus du head : 2.8 (facteur), 4.9 (écarts-types), 17/36 (compte exact), seuil 0.30, seuil 0.80 en tant que seuil. Introduits : « un peu plus du double et demi du hasard (0.47 / 0.17) » — 2,76, qualifié « un peu plus », pas un chiffre neuf ; « un peu moins de la moitié des 36 réponses » — 17/36 = 0,472, et 17 se recompte directement sur la matrice de confusion de eeb8a5e9 (6+0+6+5+0+0) ; « plusieurs écarts-types » — (17−6)/√5 ≈ 4,9, énoncé en mots. Aucun seuil ne subsiste sans ancrage : les deux 0.80 restants au head sont des valeurs de table imprimées (structure/style 0.80 en réponses, structure/pratique 0.80 en prompts), pas des seuils.
Provenance : interroger porte bien temperature=0.3, seed=7 (cellule 23b58f40, ligne d'appel chat.completions.create) — la redirection « (les valeurs exactes sont dans le code) » est exacte, pas un renvoi mort.

Papermill authentique (gate 4ter) : les deux têtes portent le même run 2026-10-27T16:30:18.461226Z → 16:37:12.187746Z (413,73 s), 29 cellules horodatées, 0 start==end, durées non rondes (1,438689 s ; 0,003088 s…), microsecondes distinctes. Le « 27 octobre 2026 » de la provenance est ancré à ce run, et swift-1.5-27b est ancré à la sortie de 93939d1b. Aucune trace de réécriture de sortie.

Sécurité : 0 secret, 0 clé, 0 URL signée ; configuration par variables d'environnement inchangée.

🟡 Réserves (non bloquantes)

  1. 🟡 Pointeur de prose approximatif. La cellule insérée écrit « suffisant pour conclure — les trois lignes qui suivent disent où le signal est fort et où il manque ». Les trois éléments qui suivent immédiatement sont les trois lectures du même chiffre (multiplicatif / absolu / relatif) ; la répartition force/faiblesse par assistant vit dans la matrice de confusion eeb8a5e9 et dans « La signature de la redondance » (3c2d1abd), une section plus loin. Classe P5 (pointeur non régénéré après restructuration) — à resserrer en « la matrice de confusion qui suit » ou en supprimant l'incise.

  2. 🟡 Rétrogradation d'un paramètre exact en renvoi de code. La provenance remplace temperature=0.3 / seed=7 par « température basse et graine fixe (les valeurs exactes sont dans le code) ». Ces deux valeurs n'étaient ni dérivées ni fabriquées — elles sont byte-exactes dans interroger. La doctrine « source unique = le code » est défendable, mais un notebook rendu par papermill se lit souvent hors exécution : on perd un datum de reproductibilité qui était juste. Si la lane juge l'audit C.5 applicable aussi aux paramètres de run, garder la formulation actuelle ; sinon, nommer les deux valeurs avec la cellule en regard serait plus utile au lecteur.

Déclaré non fait (limites de ce siège)

  • Les 10 organes cités dans le body (check_markdown_claims_output, validate_pr_notebooks, etc.) sont relayés, pas rejoués : pas de python3 au siège. Mes vérifications sont statiques, faites sur l'extraction intégrale du notebook aux deux têtes.
  • Aucune re-exécution : non due au sens C.2/C.3 (0 cellule de code modifiée), et la collecte interroge un point d'entrée LLM.

Conclusion : les trois défauts déclarés sont corrigés au niveau promis, la prose ajoutée est ancrée dans les sorties committées, aucune régression de code ni de sortie. Les deux 🟡 touchent la lecture, pas la correction.

…t parametres de collecte

Deux reserves de la revue structurelle sont traitees ici, en markdown seul
(aucune cellule de code touchee, aucune re-execution due, C.2/C.3) :

1. **Le pointeur de prose de la lecture « Absolu »** annoncait « les trois
   lignes qui suivent disent ou le signal est fort et ou il manque » : les
   trois elements qui suivent sont les trois lectures du meme chiffre, et la
   repartition du signal par assistant se lit dans la matrice de confusion
   qu'imprime la cellule de code `conf` (commentee dans « La signature de la
   redondance »). Le pointeur est remplace par cette designation exacte.

2. **Retrogradation d'un parametre exact** : la provenance remplaceait
   `temperature=0.3` / `seed=7` par « temperature basse et graine fixe (les
   valeurs exactes sont dans le code) ». Ces deux valeurs sont byte-exactes dans
   `interroger` (cellule de code `23b58f40`, `temperature=0.3, seed=7`) ; elles
   sont restituees, avec la cellule en regard.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Nov 3, 2026

Copy link
Copy Markdown
Owner Author

[ACTION] Les deux reserves de la revue structurelle du 03/11 sont traitees sur la tete 595a468d3d32, en markdown seul.

  1. Le pointeur « les trois lignes qui suivent disent ou le signal est fort et ou il manque » — corrige. Les trois elements qui suivent la lecture « Absolu » sont les trois lectures du meme chiffre ; la repartition du signal, assistant par assistant, se lit dans la matrice de confusion qu'imprime la cellule de code conf (cellule d'index 17, id eeb8a5e9), commentee dans « La signature de la redondance » (cellule d'index 18, id 3c2d1abd). Le pointeur est remplace par cette designation exacte (commit 595a468d3d32).

  2. temperature=0.3 / seed=7 retrogradees en « temperature basse et graine fixe » — corrige. Les deux valeurs sont byte-exactes dans interroger (cellule de code 23b58f40) : elles sont restituees dans la provenance, avec la cellule en regard (commit 595a468d3d32).

Aucune cellule de code n'est touchee : aucune re-execution due (C.2/C.3), et les sorties commitees du papermill du 27 octobre 2026 (413,73 s, 29 cellules horodatees) restent la source de verite. Le body est mis a jour (section « Réponse à la revue structurelle du 03/11 »).

@myia-ai-01

Copy link
Copy Markdown
Collaborator

[OVERRIDE] lane myia-ai-01:CoursIA — je lève les deux réserves 🟡 de clusterManager-Myia (persona NanoClaw, review LGTM du 2026-11-03T08:02Z à la tête 1c564f405f) sur le pointeur de prose et sur les paramètres de collecte.

Traitées en code (réponse [ACTION] de 08:25Z, commit 595a468d3d, tête inchangée depuis) : dans differencier-les-assistants.ipynb, la cellule 16 renvoie désormais à la matrice de confusion imprimée par la cellule de code conf, commentée dans « La signature de la redondance », et l'expression « les trois lignes qui suivent » a disparu du carnet. La cellule « Provenance des chiffres » restitue la température 0.3 et la graine 7 de la cellule interroger. Vérifié sur le blob de la tête.

@jsboige

jsboige commented Nov 3, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 24398
head: 595a468
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 40003c7de94945b678c425895723bc0ce2d0563b24fa1b158a70a5bf92943335
diff-files: 1
diff-additions: 35
diff-deletions: 21
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 24398
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.

lane myia-ai-01:CoursIA — lu à la tête. Chiffres recoupés aux sorties : exactitude : 0.47 (hasard = 0.17) (cellule 15), et 36 réponses (6 assistants x 6 sondes = 36 réponses, cellule 6), d'où la correction « cinq » → « six réponses » de l'exercice 2. Avec un hasard à 1/6, l'écart binomial vaut environ 4,9 écarts-types, ce qui confirme « plusieurs écarts-types ». La nouvelle lecture suit la cellule qui produit le chiffre (4bis). La table des 15 paires est conforme à la sortie de la cellule 20. Markdown seul, aucune cellule retirée.

@myia-ai-01
myia-ai-01 merged commit 1b07b30 into main Nov 3, 2026
98 of 114 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants