Skip to content

slides-composition-advisory : le contrôle positif n'est jamais armé en CI — un scanner mort rendrait le même vert #15545

Closed

Description

@myia-ai-01

Le défaut

scan_slidev_composition.py porte un contrôle positif (--baseline-slide) dont l'existence
est précisément la réponse à « ce scanner mesure-t-il encore quelque chose ? ». L'appel CI ne
l'arme pas :

# .github/workflows/slides-composition-advisory.yml:212
python scripts/notebook_tools/scan_slidev_composition.py \
  --url "http://localhost:$PORT/" \
  --slides-md "$MD" \
  --github-annotations \
  --out "$DECK_REPORT" > /tmp/scan_$PORT.log 2>&1

Sans ce flag, « 0 occurrence » est indistinguable d'un chemin mort. Ce n'est pas une crainte
théorique : la PR #15381 vient de mesurer exactement ce cas sur le signal CHEVAUCHEMENT v1 —
glyphBBox ouvrait sur if (!el.firstChild) return null;, et un <img> étant un void element,
la branche image placée après ce garde n'a jamais été atteinte. Le signal a rendu 0 pendant
toute sa vie, et le vert a été lu comme une absence de défaut.

Le rapport pose déjà controle_positif_warning quand le contrôle n'est pas armé — il est donc
visible pour qui ouvre le JSON, ce que personne ne fait sur un job advisory vert.

Ce qu'il faut

  1. Armer --baseline-slide dans l'appel CI (le deck de contrôle et son numéro de slide restent à
    fixer — un choix par deck, ou un deck de fixture dédié).
  2. Décider ce que fait le job quand le contrôle positif lui-même ne rougit pas : c'est la seule
    condition où un advisory a le droit d'être bruyant, puisqu'elle ne dit rien des decks mais tout
    de l'instrument. Meta-défaillance, au même titre que le « serveur slidev jamais prêt » déjà
    traité en ::error dans ce workflow.

Provenance

Observation OBS 1 de la review NanoClaw sur #15381 (2026-09-09T12:50Z), vérifiée firsthand à
.github/workflows/slides-composition-advisory.yml:212 avant ouverture. La PR #15381 est mergée
sans traiter ce point : son livrable est le prédicat, pas le câblage du contrôle.

See #15381 · See #15351

Activity

  1. added a commit that references this issue on Sep 11, 2026
  2. jsboige commented on Sep 11, 2026

    @jsboige
    Owner

    Grain: MED/guard — lane myia-po-2026:CoursIA — prev: LIGHT/readme #15559

    [CLAIMED] lane myia-po-2026:CoursIA -- armer --baseline-slide dans l'appel CI slides-composition-advisory (fixture de contrôle dédiée) + ::error méta-défaillance quand le contrôle positif ne rougit pas. Paths: .github/workflows/slides-composition-advisory.yml, scripts/notebook_tools/scan_slidev_composition.py (lecture), fixture deck.

  3. jsboige commented on Sep 11, 2026

    @jsboige
    Owner

    [RELEASED] lane myia-po-2026:CoursIA — Grain MED/guard — livrable PR #15561 (head 6c903ed).

    1. ✓ --baseline-slide armé dans l'appel CI — via fixture deck committée slides/_composition-control/slides.md (défaut HORS_CANVAS déterministe slide 2 : p absolu top:600px sur canvas 552, indépendant fontes/thème ; aucun objet git requis contrairement au contrôle local 6cabc82).
    2. ✓ Méta-défaillance ::error quand le contrôle ne rougit pas : 4e cause (fix(slides): 5 decks Slidev sur 16 ne construisent pas (3 classes de cause, pre-existant) #8807 trap 1) — exit 2 (baseline non signalée), serveur fixture jamais prêt, rapport illisible → exit 1. Le contrôle tourne inconditionnellement (même nuits sans deck impacté).

    Preuve e2e locale (slidev réel + playwright) : controle_positif_ok: true, exit 1, slide 2 flaggée bbox [0,600,240,640]. 3 tests d'intégrité fixture verrouillent le contrat (--baseline-slide 2). 15/15 verts.

  4. added a commit that references this issue on Sep 11, 2026
  5. added a commit that references this issue on Sep 11, 2026
  6. added a commit that references this issue on Sep 13, 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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions