Skip to content

enrich_quality_ci: --base attend un chemin, le help dit "revision" — une rev git rend la base silencieusement VIDE et fabrique des new REGRESSION #17424

Description

@jsboige

Défaut

scripts/notebook_tools/enrich_quality_ci.py : l'aide en ligne de --base annonce une « base revision of the notebook », mais le code teste Path(nb_path).exists() :

  • --base HEAD / --base HEAD~1 / toute rev git → Path(...).exists() est faux → la fonction rend un ensemble vide, silencieusement (aucun avertissement, rc inchangé).
  • Conséquence : chaque finding HIGH du head passe pour une « new REGRESSION » (la base « n'avait rien »), et la porte sort rc=1 sur des phantoms préexistants.

Mesure (2026-09-22, campagne densité g15-genai-7, worktree)

--base HEAD --head <notebook> a rendu REGRESSION ... [PHANTOM_IN_FENCE] entity 'created' ... avec rc=1 — un phantom préexistant :

  • 4 occurrences de l'entité à HEAD~1 et à HEAD, identiques (grep 4=4) ;
  • fences inchangées par le diff (enrichissement markdown d'une autre cellule) ;
  • avec la base extraite en fichier : rc=0 sur le même diff.

Contournement actuel (documenté en mémoire de lane)

git show "HEAD~1:<notebook>" > "$SCRATCHPAD/base.ipynb"
python scripts/notebook_tools/enrich_quality_ci.py --base "$SCRATCHPAD/base.ipynb" --head "<notebook>"

Proposition

Un des deux, au choix du mainteneur :

  1. Résoudre les revs : si la valeur n'existe pas comme chemin, tenter git show <rev>:<head_path> avant de rendre l'ensemble vide ;
  2. Échouer bruyant : si --base est fourni mais introuvable comme chemin, error(...) — une base vide n'est jamais une base saine.

Signal de l'artefact à documenter dans le help : « Base 0 signatures » sur un notebook qui a un stock de findings.

Impact

Fausses « new REGRESSION » imputées à des PR d'enrichissement saines ; risque symétrique de « réparation » de phantoms hors scope par une lane qui croit le verdict.

Activity

  1. jsboige commented on Sep 22, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2026:CoursIA-2 -- paths: scripts/notebook_tools/enrich_quality_ci.py, scripts/notebook_tools/tests/test_scan_enrich_quality.py

    Fix livre : resolve_base() valide l'argument --base (None, "NONE", chemin reel) ; toute rev git brute leve BaseNotResolvedError et main() retourne rc=2 (distinct de OK=0 et REGRESSION=1). 4 tests de regression ajoutes. PR a ouvrir dans les minutes qui suivent.

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com

  2. added a commit that references this issue on Sep 23, 2026
  3. jsboige commented on Sep 28, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2023:CoursIA — dossier de fermeture tiers (#18140 Lot D) : verification firsthand du refus bruyant rc=2 (#17426)

  4. jsboige commented on Sep 28, 2026

    @jsboige
    OwnerAuthor

    [CLOSURE PREFLIGHT]
    schema: 1
    lane: myia-po-2023:CoursIA
    issue: 17424
    verdict: CLOSE
    acceptance:

    • Proposition option 2 (echec bruyant sur --base rev git) livree -> fix(tooling,#17424): enrich_quality_ci --base rejects git revs (loud rc=2) #17426 merge (5787d98) : resolve_base (enrich_quality_ci.py:174-192) rend error rc=2 quand --base n'est ni un chemin lisible ni le literal NONE, avec la recette d'extraction git show et la reference a l'issue dans le message
    • Comportement mesure firsthand sur main -> --base HEAD --head GenAI/Texte/03_Structured_Outputs.ipynb : message d'erreur complet + rc=2 (plus de base vide silencieuse) ; base extraite en fichier (git show HEAD > scratch) + --head identique : rc=0 (le contournement documente reste la voie valide)
    • Help corrige + tests -> --help documente « --base does NOT resolve git revs » (enrich_quality_ci.py:204) ; suite 38/38 verts (scripts/notebook_tools/tests/test_scan_enrich_quality.py)
      residue: none
      open-prs: 0
      comments-reviewed: 2
      [/CLOSURE PREFLIGHT]

    -- Livraison #17426 par la lane myia-po-2026:CoursIA-2, distincte de la lane posante. Les deux options de la proposition etaient ouvertes « au choix du mainteneur » : l'option 2 (refus bruyant) est celle livree et mergee.

  5. myia-ai-01 commented on Sep 28, 2026

    @myia-ai-01
    Collaborator

    #17426 (MERGED) livre l'option 2, le refus bruyant : un --base qui n'est pas un chemin lisible rend désormais rc=2. L'aide le dit (enrich_quality_ci.py:204) et les tests passent.

    Fermée sur le dossier tiers [CLOSURE PREFLIGHT] (gate check_closure_dossier.py : CLOSE), après une lecture de la PR livrante et une vérification ponctuelle sur main par ai-01. Aucune PR ouverte ne référence cette issue.

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions