Skip to content

fix(notebooks,#17066): Lab12b/Lab12c — fusion des paires de lectures, markdown seul - #17564

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/17066-lab12bc-consolidation
Sep 23, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/17066-lab12bc-consolidation

Conversation

@jsboige

@jsboige jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2025:CoursIA-2 — prev: MED/notebook-python #17053

fix(notebooks,#17066): Lab12b/Lab12c — les paires de lectures sont fusionnées, rien n'est supprimé au hasard

Régime #17066. Cette PR reprend, découpée, la partie Lab12b/Lab12c de #17053, passée en brouillon (auto-mesure : 44 des 54 cellules que #17053 supprimait portent une analyse chiffrée). Markdown seul. Les cellules de code, leurs sorties et les métadonnées sont identiques octet pour octet.

Défaut sur main

Dans les deux notebooks, trois sorties de code sont lues deux fois de suite : d'abord une cellule « Lire … » ajoutée par #16408, puis une cellule « Lecture du résultat » qui existait avant. L'organe check_duplicate_sections compte 4 « Lecture du résultat » par notebook. Une quatrième lecture de chaque notebook (Lab12b cellule 6, Lab12c cellule 18) est seule sous son code : elle avait seulement le titre générique.

(b) Par doublon : ce que portait chaque lecture, ce qui est gardé

Geste : dans chaque paire, la cellule « Lire … », plus précise, garde son id et son titre. Elle absorbe les faits propres à « Lecture du résultat », puis cette dernière est retirée. Chaque affirmation retenue a été relue contre la sortie de la cellule de code.

Lab12b-Sequential-Orchestration

Sortie lue « Lire … » (gardée) « Lecture du résultat » (absorbée puis retirée) Ce qui passe dans la cellule gardée
code 5, plan déclaré — (lecture unique) e94cc1c8 contenu intégral, retitré « Lire le plan imprimé avant l'exécution »
code 8, chaîne exécutée 802c08d1 : verdict, outil, dernier désigné 972f711e : agent_hands = plan la phrase sur agent_hands = ('planner', 'coder', 'executor', 'verifier'). Non repris : « ses chiffres dans la réponse finale viennent de l'outil ». La sortie ne réimprime aucun chiffre (VERDICT : COHÉRENT + une phrase), et 802c08d1 le dit déjà.
code 12, plan réduit f4661380 183d6975 « changer le cours d'un handoff C5 = réécrire l'instruction d'un agent », « les deux contrats cohabitent sans se recouvrir »
code 16, mémoire/isolation af39bdbd 6f912ec4 « dans l'ordre désigné, chacun ayant lu ses prédécesseurs », « commune à l'intérieur d'une chaîne, jamais entre chaînes »

Lab12c-Agent-Handoff

Sortie lue « Lire … » (gardée) « Lecture du résultat » (absorbée puis retirée) Ce qui passe dans la cellule gardée
code 5, arbre 71916c53 98d9afea « exactement un sous-agent », la phrase ADK et non moteur SK (#14058)
code 9, tour de handoff d306970b : avertissement de cache 3ae24fe5 : compteurs les deux lectures portaient des faits distincts (compteurs vs avertissement). Fusion en une cellule à deux paragraphes, retitrée « Lire le tour de handoff : un transfert décidé par le LLM, et son coût caché ». Les compteurs passent en premier, citées tels qu'imprimés (Agent final : verificateur).
code 13, séquence appelant 341f4684 05373620 le nom traces de la liste, « par décision du modèle »
code 17, trois tours — (lecture unique) 33ca4d98 contenu intégral, retitré « Lire les trois tours : un handoff durable »

(a) Plan ordonné des notebooks réparés

Lab12b-Sequential-Orchestration.ipynb (25 cellules)

  1. Lab 12b : Désignation séquentielle — le contrat C4, l'orchestrateur explicite au-dessus d'ADK

  2. 1. Configuration

  3. code — import sys
  4. Lire la configuration attestée : quel moteur a produit ces sorties

  5. 2. La chaîne déclarée : quatre spécialistes, un plan explicite

  6. code — from utils.adk_runtime import build_agent, dataset_profile
  7. Lire le plan imprimé avant l'exécution : la stratégie est une donnée

  8. 3. La chaîne en action : chaque spécialiste prend le relais

  9. code — import asyncio
  10. Lire le verdict final : une vérification affichée, pas réimprimée

  11. 4. Désignation C4 vs handoff C5 : l'ordre posé avant, pas décidé pendant

  12. code — async def plan_reduit():
  13. Lire le plan réduit en chiffres : deux mains, zéro outil, quatre agents

  14. 5. Mémoire commune intra-chaîne, isolation inter-chaînes

  15. code — async def memoire_et_isolation():
  16. Lire l'historique : sept messages, un agent qui triple, aucune fuite

  17. 6. Exercices

  18. Exercice 1 — Vérificateur en tête

  19. code — # Exercice 1 : a completer
  20. Exercice 2 — Le plan n'appartient pas aux agents

  21. code — # Exercice 2 : a completer
  22. Exercice 3 — Compteur de désignation

  23. code — # Exercice 3 : a completer
  24. Lire les trois exercices : l'échelle des contre-contrats

  25. 7. Conclusion

Lab12c-Agent-Handoff.ipynb (25 cellules)

  1. Lab 12c : Handoff entre agents — le contrat C5, le transfert natif câblé et observable

  2. 1. Configuration

  3. code — import sys
  4. Lire la configuration attestée : le même moteur que la chaîne, pour comparer

  5. 2. L'arbre d'agents : un codeur assisté par un vérificateur

  6. code — from utils.adk_runtime import build_agent
  7. Lire l'injection native : l'outil de transfert que nous n'avons pas écrit

  8. 3. Le handoff en action : la main passe au vérificateur

  9. code — import asyncio
  10. Lire le tour de handoff : un transfert décidé par le LLM, et son coût caché

  11. 4. Handoff C5 vs désignation C4 : deux contrats distincts

  12. code — from utils.adk_runtime import build_agent
  13. Lire la séquence côté appelant : deux conversations mono-main

  14. 5. Le transfert, tour à tour

  15. code — async def mains_tour_par_tour():
  16. Lire les trois tours : un handoff durable, pas un écart d'un tour

  17. 6. Exercices

  18. Exercice 1 — Détecteur de handoff manquant

  19. code — # Exercice 1 : a completer
  20. Exercice 2 — Chaîne à trois agents

  21. code — # Exercice 2 : a completer
  22. Exercice 3 — Isolement des hiérarchies

  23. code — # Exercice 3 : a completer
  24. Lire les trois exercices : détecter, étendre, isoler

  25. 7. Conclusion

(c) Verdict de séquence

Chaque cellule de code d'expérience est suivie d'une seule lecture, titrée par ce qu'elle lit. Les sections 1 à 7 sont dans le même ordre qu'avant, et les exercices ainsi que leur lecture (8c667a0e, c60ff957) ne sont pas touchés. Aucune cellule n'est déplacée.

(d) Organes, à la tête contre origin/main

Organe Lab12b Lab12c
check_duplicate_sections 4 → 0 porteur (rc=0) 4 → 0 porteur (rc=0)
detect_md_content_loss --check rc=0, 0 finding (8527 → 8108 car. normalisés) rc=0, 0 finding (8267 → 8078)
detect_notebook_plan_loss rc=0, 4 titres retirés, SUBSTANCE_FOUND ×4 rc=0, SUBSTANCE_FOUND ×4
check_split_reading_cells clean clean
detect_consecutive_code_cells aucune suite aucune suite

Ces comptes sont nécessaires, pas suffisants (not_an_acceptance_criterion). La preuve de lecture, ce sont les tableaux (b).

(e) Code intact

Comparaison JSON des cellules code et des métadonnées, base origin/main contre la tête : identiques dans les deux notebooks, 8 cellules de code chacun, sorties et execution_count compris. Aucune re-exécution n'est due (exception C.2, modifications markdown seules). git diff --stat : 2 fichiers, +11/−121.

Rapport à #17053

#17053, de la même lane, touche aussi ces deux fichiers, mais elle est en brouillon et ne sera pas mergée en l'état. Sa partie Lab12b/Lab12c supprimait les cellules « Lire … » et gardait les « Lecture du résultat » retitrées, ce qui perdait le contenu propre à chacune. Cette PR la remplace pour ces deux fichiers.

See #17066 · See #17040 · See #17053

🤖 Generated with Claude Code

…b12c

Chaque sortie lue deux fois ("Lire ..." puis "Lecture du resultat") est
fusionnee en une seule lecture : la cellule "Lire ..." garde son id et
absorbe les faits propres a l'autre, puis celle-ci est retiree. Les deux
lectures uniques sont retitrees. Markdown seul, code/outputs/metadonnees
identiques octet pour octet.

See #17066
See #17040

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 7.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 10.2s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.8s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 12.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 6.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.8s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 46.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 6.1s

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

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

@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 2
  • Code cells validated: 16
  • 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

Copy link
Copy Markdown
Contributor

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

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.

@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17564
head: 6912658
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 09f1ea0ec3d186ede5d1df6ea5595b09f753be0ae976599e23e2264b65f346b0
diff-files: 2
diff-additions: 11
diff-deletions: 121
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17564 (fix(notebooks,#17066): Lab12b/Lab12c — fusion des paires de lectures, markdown seul) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 23, 2026
@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17564
head: 6912658
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: aab871a882be2008ab7cdf08e81e9df86cab2a37590b3ad2107e5c16893ce1ed
diff-files: 2
diff-additions: 11
diff-deletions: 121
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 879f29d into main Sep 23, 2026
87 of 88 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 24, 2026
…-> ratchet (#17611)

Le garde passe de per-notebook advisory a un ratchet base vs PR : rouge
seulement si la PR AUGMENTE les lectures scindees sur un carnet touche
(lecture ajoutee OU compte de paires qui monte) -- les 272 findings
herites de main restent grandfathered.

Quatre mecanismes de faux positif corriges et epingles par mutation
(3/11 PR mergees rouges avant, 0/11 apres ; controle positif #17028 :
8 empilements reels, ses 2 revisions en place exemptees) :
- id reconnu ou qu'il soit en base (decalage d'index, #17564)
- encart sans code execute au-dessus (_reads_code_above, #17484)
- renommage resolu a l'ancien chemin (--name-status -M)
- revision en place d'une lecture, meme sans id (signal topologique)

Guard.name == job.name renommes ensemble ; self-test 5/5 en pre-contrôle ;
check_17464_positive_control 26+16 intact ; suites 164 passed.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants