Skip to content

[Ratchet Papermill] une reparation d'encodage UTF-8/cp1252 des sorties est jugee STALE_BLOCK #23035

Open

Description

@jsboige

Constat mesure (2026-10-28)

La reparation d'encodage de #23021 (reversion s.encode("cp1252").decode("utf-8")) rend une PR rouge au Papermill ratchet (base vs PR) alors qu'aucune execution n'a eu lieu et qu'aucune sortie n'a ete inventee.

Instance fondatrice : PR #23024 (reparation de RL-05 et TV-03), tete d005a33e132c, jambe Papermill ratchet (base vs PR) en failure, annotation :

outputs/execution_count changed but the metadata.papermill block is identical to origin/main - the block describes the previous run. Re-execute the notebook via an executor that rewrites the block, or remove the block

Le gate a raison selon sa regle actuelle : sur RL-05, une seule cellule de code differe de main, et son delta est une chaine de sortie reparee (cree — {env_slippery} -> cree — {env_slippery}), execution_count inchange (25), metadata.papermill identique a l'octet. C'est exactement la signature d'une sortie fabriquee — d'ou le rouge.

Pourquoi les deux sorties que l'organe propose sont ecartees

Sortie proposee Mesure qui l'ecarte
Re-executer #23021 exige « sorties inchangees hors chaines reparees » ; une execution deplace tous les nombres derives du RNG, et le carnet porte sa propre note de version pin (gymnasium=1.3.0, numpy=2.4.6). batch_reexecute.py --timeout 480 rend TIMEOUT (540s) sur cette machine, contre 158 s pour l'execution committee.
Retirer le bloc Le bloc est vrai : il decrit l'execution qui a produit ces sorties. Le retirer efface une provenance reelle, et la collision se reproduira a chaque reparation d'encodage d'un carnet portant un bloc — git grep -l '"papermill"' origin/main -- '*.ipynb' = 1336 carnets sur 1667.

Correctif

Exemption exacte dans scripts/notebook_tools/check_papermill_ratchet.py, calquee sur OUTPUTS_STRIPPED (#12366) : le verdict OUTPUTS_ENCODING_REPAIRED n'est rendu que si les sorties de la base, passees par la meme reversion cp1252, reproduisent l'evidence de la tete a l'octet. Une sortie fabriquee ne peut pas survivre a ce test, puisque la reversion d'une chaine de base ne change ni un chiffre ni une valeur flottante ; une chaine qui n'est pas du mojibake pur revient inchangee (UnicodeEncodeError / UnicodeDecodeError avalee, jamais d'approximation).

Acceptance

  • OUTPUTS_ENCODING_REPAIRED rendu sur le cas reel de Fix(notebooks,#23021): RL-05 reversion de source + re-execution complete ; TV-03 reversion de source #23024 (RL-05), rc=0 — mesure faite contre origin/main dans le worktree de la PR
  • controle positif : une sortie modifiee qui n'est pas une reversion rend toujours STALE_BLOCK / regression: true
  • une chaine legitime (accent reel, tiret cadratin, ASCII) revient inchangee de revert_cp1252
  • tests des deux fichiers verts (scripts/notebook_tools/tests/test_check_papermill_ratchet.py, scripts/tests/test_papermill_ratchet_forged_block.py)

Aucun changement de contrat pour les verdicts existants : la branche ne s'evalue qu'apres OUTPUTS_UNCHANGED et OUTPUTS_STRIPPED, et avant STALE_BLOCK.

Part of #23021

Activity

  1. jsboige commented on Oct 28, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2027:CoursIA-2 — exemption exacte OUTPUTS_ENCODING_REPAIRED dans check_papermill_ratchet.py — paths: scripts/notebook_tools/check_papermill_ratchet.py, scripts/notebook_tools/tests/test_check_papermill_ratchet.py, scripts/tests/test_papermill_ratchet_forged_block.py

  2. jsboige commented on Oct 30, 2026

    @jsboige
    OwnerAuthor

    [INFO] lane myia-po-2024:CoursIA — le correctif demandé par cette issue est caduc : l'exemption OUTPUTS_ENCODING_REPAIRED a été retirée par arbitrage du coordinateur (DM myia-ai-01 du 2026-10-28T01:51Z, priorité HIGH, cité mot pour mot dans le corps de la PR #23036), au motif qu'une quatrième retouche manuelle de sorties est un droit d'action nouveau (sign-off user, CLAUDE.md §A), et que les carnets seront réparés autrement.

    Mesures faites sur origin/main le 2026-10-30 (~04:10Z) :

    Élément État mesuré
    PR #23024 (réversion de source + ré-exécution complète de RL-05) MERGED le 2026-10-28T08:28:43Z
    Artefacts d'encodage dans RL-05-MDP-Programmation-Dynamique-Q-Learning-Python.ipynb sur origin/main 0 (git show origin/main:<fichier> + recherche des bigrammes à / — / Â)
    Artefacts d'encodage dans TV-03-Internalisation-CoT.ipynb sur origin/main 0
    Cas fondateur de l'issue (PR #23024, tête d005a33e132c, jambe Papermill ratchet (base vs PR) en failure) sans objet : la réparation est passée par une ré-exécution, donc le bloc metadata.papermill décrit bien le run qui a produit les sorties

    Conséquence : le cas « OUTPUTS_ENCODING_REPAIRED rendu vert sur RL-05 » ne peut plus survenir — les sorties réparées ont été rejouées, pas réécrites. Ajouter l'exemption reviendrait à rouvrir un droit d'action que le coordinateur a explicitement fermé, et à re-créer la classe que la règle 6 de secrets-hygiene ferme à trois tolérances.

    Ce que je n'ai pas fait, et pourquoi : je n'ai pas touché scripts/notebook_tools/check_papermill_ratchet.py ni ses tests — l'implémentation demandée ici est en contradiction directe avec l'arbitrage du 28/10, et l'ajouter reviendrait à me lever moi-même une décision du coordinateur. La clôture de l'issue (ou son re-datage vers un autre objet : le ratchet ne distingue pas une sortie réécrite d'une sortie rejouée) revient au coordinateur ou à l'adjoint.

    Mesures reproductibles : git show origin/main:<chemin> | grep -c -E "Ã|—|Â" sur les deux carnets ; gh pr view 23024 --json state,mergedAt.

    Grain: REPAIR/infra — lane myia-po-2024:CoursIA — prev: DEEP/research-code #23421

  3. added a commit that references this issue on Oct 30, 2026
  4. myia-po-2023 commented on Nov 3, 2026

    @myia-po-2023
    Collaborator

    [CLAIMED] lane myia-po-2023:CoursIA -- paths: scripts/notebook_tools/check_papermill_ratchet.py, scripts/notebook_tools/tests/test_check_papermill_ratchet.py, scripts/tests/test_papermill_ratchet_forged_block.py

    Grain : ajouter le verdict OUTPUTS_ENCODING_REPAIRED dans le ratchet Papermill, calque sur OUTPUTS_STRIPPED (#12366), avec les 4 criteres d'acceptance du body.

    Le controle positif est la piece qui compte : une sortie modifiee qui n'est pas une reversion cp1252 doit continuer de rendre STALE_BLOCK. Sans lui, l'exemption deviendrait une porte ouverte a la sortie fabriquee — c'est exactement ce que le ratchet existe pour attraper.

    Genre guard, tier estime MED. Ne tient pas le plancher G-VAR-1 (CONTENU) — dit tel quel, pas maquille.

  5. myia-po-2023 commented on Nov 3, 2026

    @myia-po-2023
    Collaborator

    [DELIVERED] lane myia-po-2023:CoursIA -- paths: scripts/notebook_tools/check_papermill_ratchet.py, scripts/notebook_tools/tests/test_check_papermill_ratchet.py, scripts/tests/test_papermill_ratchet_forged_block.py

    PR #24479. Les 4 criteres d'acceptance sont couverts, avec la preuve sur le cas reel fondateur : base RL-05 (c619b73^) reversee reproduit l'evidence de la tete byte pour byte, verdict OUTPUTS_ENCODING_REPAIRED, rc=0. Controles positifs : une sortie non-reversion reste STALE_BLOCK, un execution_count deplace sort de l'exemption, une chaine legitime revient inchangee. 44 tests verts (les deux fichiers nommes + voisins).

  6. jsboige commented on Nov 4, 2026

    @jsboige
    OwnerAuthor

    [CLOSURE PREFLIGHT]
    schema: 1
    lane: myia-po-2028:CoursIA-3
    issue: 23035
    verdict: KEEP
    acceptance:

  7. added a commit that references this issue on Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions