Skip to content

fix(scripts,#12858): detect_code_in_markdown_cells --json stdout is now pure JSON, baseline identity on stderr - #13236

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/12858-detect-code-stderr
Aug 27, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/12858-detect-code-stderr

Conversation

@jsboige

@jsboige jsboige commented Aug 27, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard — lane myia-po-2024:CoursIA-2 — prev: MED/slides #13230 (c.574)

fix(scripts,#12858): detect_code_in_markdown_cells --json stdout is now pure JSON, baseline identity on stderr

See #12858.

Origine

detect_code_in_markdown_cells.py imprime une ligne d'identité baseline: <path> (<n> entries) sur stdout avant le json.dumps(...) du mode --json. La sortie stdout n'est donc plus du JSON pur, ce qui casse tout consommateur en aval (jq, scripts CI en pipe, parse Python).

Hermes a releve ce concern en review de #12779 (declare non-bloquant et ouvert avant le merge conformement a CLAUDE.md §B.0). Le fix demande : "stderr-baseline-line au lieu de stdout".

Fix

Deplace la ligne d'identite baseline de stdout vers stderr. stdout reste reserve a la sortie structuree (JSON en mode --json, format humain en mode --report). stderr reste le canal operateur humain, compatible avec 2>/dev/null ou redirection separee.

Code (scripts/notebook_tools/detect_code_in_markdown_cells.py:468) :

# #12858 : la ligne d'identite part sur stderr -- stdout doit rester
# pur en mode --json (consommateurs : jq, scripts CI en pipe, etc.).
print(f"baseline: {baseline_path} ({len(baseline)} entries)", file=sys.stderr)

Tests

scripts/notebook_tools/tests/test_detect_code_in_markdown_cells.py :

  1. Nouveau test_json_mode_stdout_is_pure_json_baseline_on_stderr : lance --json MyIA.AI.Notebooks, verifie que stdout est parsable par json.loads() (objet racine avec cles total, new, baseline_size, findings) et que stderr contient la ligne baseline: ....

  2. Mise a jour test_check_without_baseline_defaults_to_canonical_rc0 : la ligne d'identite est maintenant attendue sur stderr (assert "baseline:" in proc.stderr) au lieu de stdout.

12/12 tests passent dans test_detect_code_in_markdown_cells.py. Suite scripts/notebook_tools/tests/ complete : 5050 passed, 2 skipped (run 3min30, aucune regression).

Diff

 scripts/notebook_tools/detect_code_in_markdown_cells.py            |  4 ++-
 scripts/notebook_tools/tests/test_detect_code_in_markdown_cells.py | 39 +++++++++++++++++++---
 2 files changed, 38 insertions(+), 5 deletions(-)

Hors scope

  • Aucun consommateur externe de detect_code_in_markdown_cells.py n'a ete trouve dans le repo (grep -rn sur scripts/ et .github/). Le seul caller est le test lui-meme, qui est mis a jour ici.
  • Le mode --check continue d'ecrire ses messages FAIL: sur stderr (comportement pre-existant, inchange). Seule la ligne d'identite baseline a ete deplacee.

Acceptance #12858

  • Sortie --json est du JSON pur sur stdout (verifie par json.loads(stdout)).
  • Ligne d'identite baseline deplacee sur stderr.
  • Test pytest couvre les deux flux (stdout JSON pur + stderr baseline line).
  • Aucune regression sur la suite notebook_tools (5050 tests verts).

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

…ow pure JSON, baseline identity on stderr

Le mode --json de detect_code_in_markdown_cells.py polluait stdout avec
la ligne 'baseline: <path> (<n> entries)' avant le json.dumps, ce qui
cassait tout parse JSON en aval (jq, scripts CI, pipelines). Deplace
la ligne d'identite sur stderr (canal operateur humain, compatible
avec `2>/dev/null` ou redirection separee).

Test : ajout de test_json_mode_stdout_is_pure_json_baseline_on_stderr
qui verifie que stdout est parsable par json.loads() et que stderr
porte la ligne d'identite. Test existant
test_check_without_baseline_defaults_to_canonical_rc0 mis a jour :
baseline -> stderr.

Suite notebook_tools : 5050 passed, 2 skipped (3min30).

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