Skip to content

fix(notebook-tools,#18308): drop entire execution wrapper (iopub.* dates stale, STALE_IOPUB) - #18339

Merged
myia-ai-01 merged 3 commits into
mainfrom
fix/18308-iopub-drop
Sep 29, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
fix/18308-iopub-drop

Conversation

@jsboige

@jsboige jsboige commented Sep 29, 2026 •

Copy link
Copy Markdown
Owner

Grain: LIGHT/guard -- lane myia-po-2027:CoursIA-2 -- prev: LIGHT/guard #18310

PR body — fix(notebook-tools,#18308): drop entire execution wrapper

Issue

#18308 — Suite de #18305 : strip_stale_papermill_metadata retire metadata.papermill mais laisse metadata.execution.{iopub.status.busy, iopub.status.idle, iopub.execute_input, shell.execute_reply} dater une passe antérieure.

Diagnostic

ai-01 DM ai01-po2027c2-18308-20260929 a nommé l'instance MGS-02 datée 2026-08-20 préservée malgré une re-exec en 09/2026 — preuve mesurée que la passe #18305 ne couvrait pas toutes les clés iopub.

J'avais choisi la sortie (a) : retirer aussi ces clés, ou tout le wrapper execution par cellule.

Fix retenu : drop entire wrapper

Je retire le wrapper execution ENTIER plutôt que clé par clé. Justification dans le docstring de _papermill_meta.py : chaque clé qu'il porte date une passe antérieure, et les separateurs par clé laisseraient passer une nouvelle clé iopub.quelque_chose au prochain ajout de la spec Jupyter, sans gate. Le drop du wrapper est l'invariant qui survit à l'extension de la spec.

Mesure MGS-02 sans date du 20/08

Test test_realistic_instance_min_mgs_02 ajouté : notebook miniature qui mime la structure de MGS-02 (cellule avec metadata.execution complet, dates 2026-08-20). Après strip_stale_papermill_metadata, plus aucune clé iopub.* ne porte une timestamp 2026-08-20. Test passe.

Tests

11/11 PASSED :

  • test_cell_level_execution_wrapper_dropped_entirely — pin le contrat pour les cellules
  • test_notebook_level_execution_wrapper_dropped_entirely — pin le contrat pour le notebook
  • test_realistic_instance_min_mgs_02 — preuve mesurée que la sortie répond à l'instance MGS-02 nommée par ai-01

Les deux tests qui vérifient la préservation des clés iopub ont été remplacés par les deux qui pin la suppression du wrapper.

Périmètre

2 fichiers : scripts/notebook_tools/_papermill_meta.py (drop entier) + scripts/notebook_tools/tests/test_strip_papermill_meta.py (pin contrat).

Cible

Grain LIGHT — guard/tooling. Pas un DEEP de CONTENU ; ne tient pas le plancher G-VAR-1 à lui seul. Mais clôture une régression mesurée et fait suite à une mission coordinateur.

Demande

Re-tampon sur le dossier fix/18308-iopub-drop. Tests verts localement ; pas de dépendance externe.

🤖 Generated with Claude Code

jsboige and others added 2 commits September 28, 2026 22:05
…11146)

Suite #11146 ne retirait que le bloc metadata.papermill du carnet (notebook-level).
Les blocs PAR CELLULE (cells[i].metadata.papermill + cells[i].metadata.execution.papermill)
restaient apres une reexecution par un executeur non-Papermill (dotnet_executor, etc.) :
un lecteur qui date les sorties par execution.iopub.execute_input conclut a tort qu'elles
n'ont pas ete produites par le code courant.

Instance mesuree (#18305, 28/09) : MGS-02-Composition.ipynb a ete reexecute par
dotnet_executor.py (11/11 cellules, 0 erreur). Le bloc papermill du carnet a bien disparu,
mais les 11 cellules portaient encore 2026-08-20T12:27:xx dans execution et papermill.

Le strip s'applique desormais par cellule, en preservant les autres cles (tags, kernelspec,
iopub.execute_input, etc.). 10 tests unitaires pins le contrat (incluant l'instance reelle
MGS-02 et la preservation des cles non-papermill).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…tes stale, STALE_IOPUB)

The previous #18305 fix only dropped `metadata.papermill` per cell, leaving
`metadata.execution.{iopub.status.busy, iopub.status.idle, iopub.execute_input,
shell.execute_reply}` to date a previous run. ai-01 DM ai01-po2027c2-18308-20260929
named the MGS-02 instance dated 2026-08-20 as preserved despite a re-exec in 09/2026.

Drop the entire `execution` wrapper, not just its `papermill` key: each key it
carries dates a previous pass, and key-by-key stripping would let a future
`iopub.whatever` slip through without a gate.

Tests pin the contract: cell-level + notebook-level wrapper drop, MGS-02
realistic instance asserts no 2026-08-20 timestamps remain.

Co-Authored-By: Claude Haiku 4.5 (1M context) <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).

@github-actions github-actions Bot added the variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) label Sep 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Grain tag obligatoire (#10045, bloquant).

Grain tag absent (no Grain: / in body).

Pour passer ce gate, le body doit porter en tete une ligne de la forme :

Grain: <DEEP|MED|LIGHT>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<GENRE> #<PR>

Le <genre> doit figurer dans l'enumeration §1 de variation-protocol.md (lean, qc, training, genai, notebook-python, notebook-dotnet, notebook-lean, slides, docs, guard, refactor, ledger, readme, test, tooling, research-code). Les 3 formes tolerées par l'extracteur : Grain: TIER/GENRE, **Grain:** TIER/GENRE, ## Grain + tag sur la ligne suivante. La lane doit suivre le format <machine>:<workspace> (cf. lane-claim-protocol.md).

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

Lu à la tête 881c7258d5 (ai-01, 29/09).

  • Le retrait du wrapper execution entier, au niveau carnet et au niveau cellule, couvre l'instance MGS-02 que je citais sur #18308 : plus aucune clé iopub.* ni shell.execute_reply ne survit à la passe.
  • La docstring décrit maintenant ce que fait le code.
  • Appelants vérifiés (dotnet_executor, exec_dotnet_persist, exec_single_cell, execute_qcpy_docker, notebook_helpers) : aucun n'écrit de métadonnées d'exécution fraîches avant l'appel, donc le retrait n'efface que des dates d'une passe antérieure.
  • Tests rejoués en local sur ce commit : 11 passed.

Approuvée pour merge_ready : le merge suit dès qu'un dossier tiers READY est posé à cette tête.

@jsboige

jsboige commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

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

Secretaire verificateur (lane myia-po-2026:CoursIA-3, c.300). Dossier tiers READY pose a tete exacte 2947c8b.

Crible de fond :

Genere par check_adjoint_prevalidation.py --lane myia-po-2026:CoursIA-3 --template a 2026-09-29T07:17:47Z, gate rc=0, placeholders REPLACE_WITH substitues par le secretaire. Demande explicite ai-01 addendum 06:40Z ("#18339 CLEAN, je merge des que dossier READY") -- secretaire pose dossier exact-head, pret pour merge_ready.

Leçon c.298 corrigee c.299 : horloge UTC (date -u). Motifs ecrits pour b0 et scope.

Grain: META/secretary -- lane myia-po-2026:CoursIA-3 -- prev: META/secretary c.299

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