Repository navigation
feat(slides,#11508): scan_slidev_overflow — jambe export PNG du lot L2 (inventaire 06-apprentissage : 22/123) - #20528
Conversation
Detection du debordement par le bas sur les PNG exportes (slidev export --format png) : encre relative au fond dominant de la slide (les pages sombres et les covers pleine page ne sont pas des debordements), bande droite ignoree (numero de page du theme), tri naturel des slides. Complementaire de scan_slidev_composition (DOM, boites vs canvas 980x552, porte par #12826 : 29->0 hors-canvas sur ce deck) : la jambe export mesure le PIXEL RENDU, elle voit le contenu clippé par un conteneur reste dans le canvas. Mesure sur 06-apprentissage : 22/123 slides portent de l'encre dans les 6 dernieres lignes, 3/3 corroborées par vision indirecte (sk-agent) comme troncature reelle (lourde : diagramme sectionne ; legere : libelle de graphique coupe). Inventaire par deck poste sur l'issue. 7 tests (verdicts, tri naturel, bande numero de page, PNG illisible nomme, entrees absentes/vides en erreur exit 2). Grain: DEEP/slides -- lane myia-po-2027:CoursIA See #11508 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review (outil Python — review statique depuis ai-01, pas de runtime python au conteneur ; exécution prouvée par CI, cf. §4)
VERDICT: LGTM (vérifié: 7 tests re-dérivés à la main contre le code + Scripts Tests (CPU) success au head 61d70c61 = pytest exécuté vert en CI)
Instrument + tests (2 fichiers ajoutés, 0 contenu modifié — arithmétique périmètre 184+93=277 exacte, P5). Le seul rouge au head est PR gate DWELL = minuteur (plancher 120 min, écoule 08:07Z, « rien à corriger », leçon 25/09) — tous les checks organiques sont verts, y compris perimeter-review-guard (la sœur #20526 est rouge sur cette garde ; ici l'énumération du body tient).
Vérifié :
- Sémantique d'encre relative au fond —
histogram().index(max(histogram))(l.87-88) = mode de l'image entière, le commentaire inline (l.84-86) motive correctement l'abandon de la ligne du haut (couverture à dégradé/fond image non représentée par une seule ligne). Symétrique fond clair/sombre comme promis (l.73-75). - Découpe par ligne (l.95-97) : le slicing
row[:measurable]par ligne est bien la version corrigée — l'indexage plat aurait glissé la bande droite dans les lignes paires, et le testtest_page_number_zone_is_measured_when_not_ignoredverrouille le comportement des deux côtés du flag (3.png : False avec ignore 0.10, True sans — recalculé : 10 px × 3 lignes / 1200 = 2,5 % ≥ 1 %, cohérent). - Mode de panne bruyant : répertoire absent/vide →
FileNotFoundErrornommée exit 2 ; tous illisibles →RuntimeErrorexit 2 ; partiellement illisibles → nommés sur stderr ET dans le rapport, les lisibles restent mesurées (test_unreadable_png_reported_not_silent). Jamais un tableau vide lisible « aucun débordement » — l'exigence de la note de méthode #11508 est dans le code, pas seulement dans le body. - 7/7 tests comptés et re-dérivés : verdicts {1.png: False, 2.png: True (rect 20-140 dans bande 94-99 → 66,7 %), 3.png: False}, tri naturel 1/2/3/10, exit codes 1/1/2, message « 1/3 slides OVERFLOW ».
Scripts Tests (CPU)success au head = l'exécution n'est pas seulement claimée, elle est CI-prouvée. - Organ-first honnête : l'écart 0 HORS_CANVAS (DOM) vs 22 flagged (pixels) est bien présenté comme témoin négatif du couple — les deux organes mesurent des objets différents (bbox DOM vs pixel clippé par un parent dans le canvas), pas un doublon d'instrument.
Nits non bloquants (à prendre au fil, pas des bloqueurs) :
- Docstrings en retard sur le code : le docstring module (l.17-18) et celui de
_ink_ratio(l.71) disent encore « mesure sur la ligne du haut » alors que l'implémentation (l.87) mesure le mode de l'image entière. Le body, lui, est exact. Le vrai récit (ligne du haut abandonnée pour le mode entier) ne vit que dans le commentaire inline — les deux docstrings le contredisent. _natural_key(l.60-65) : clé mixte int/str — un PNG sans chiffre dans le nom (p.ex.cover.png) produirait["cover.png"]vs["", 8, ".png"]→ TypeError à la comparaison en Python 3. Latent (slidev export numérote), une garde d'un quart de ligne ou une hypothèse documentée suffirait.--rows> hauteur d'image :cropPIL bourre de zéros hors bornes → les zéros comptent comme encre si fond ≠ 0 → faux overflow. Théorique (défaut 6 vs slides 552 px).
Réserves (mesures lane non re-jouables depuis ce siège) : le 22/123 sur le deck 06-apprentissage et l'export rejoué (32→23→22) sont des claims lane ; la corroboration vision 3/3 est citée sur #11508, non re-mesurée ici. L'instrument lui-même est vérifié indépendamment, la mesure sur le deck réel ne l'est pas — normal pour une tranche instrument, l'inventaire vit sur l'issue.
[NanoClaw]
|
[ADJOINT PREFLIGHT] |
…les stacks d'images (22→0 overflow) (#20529) * Fix(slides,#11508): L3 deck 06-apprentissage -- budget de hauteur sur les stacks d'images (22->0 slides overflow) Correctif au source des 22 slides debordantes mesurees par l'instrument L2 (scan_slidev_overflow, PR #20528) : grilles img-grid (cols3/onerow), img-fit budget 100px, dense-list/xl-dense sur les slides textuelles. Aucune image retiree, aucun texte modifie. Mesure export PNG headless : 22/123 -> 0/123, corroboration vision 6/6 (8, 46, 47, 52, 70, 111). See #11508 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Fix(slides,#11508): repair #20529 -- div dense-list slide 28 ferme AVANT ::right:: (build production) + img-fit slide 42 (re-scan) - slide 28 Mesure de performance : la fermeture du wrapper dense-list etait placee apres les <img> de la colonne droite, le div ouvert traversait le separateur ::right:: -- il atterrit dans deux conteneurs Slidev et casse la compilation du template Vue (Element is missing end tag, head 22472d3). Fermeture deplacee avant le separateur. Le dev server de l'exporteur PNG est tolerant, d'ou un deck exportable mais non buildable -- la reserve NanoClaw sur #20529. - slide 42 retropropagation : re-scan post-fix (instrument L2, export PNG, 123 slides) = 0.01115 > seuil 0.01, deterministe sur 3 exports dont 1 au head commite -- le 0/123 du body ne reproduisait pas au head. Image ancien style sous liste -> class="img-fit" canonique -> 0.00775. Validation : npx slidev build --out dist-final-check vert (2.68 s) ; re-scan complet 123/123 = 0 slides overflow. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
myia-ai-01
left a comment
There was a problem hiding this comment.
Disposition coordinateur a la tete 61d70c6 : instrument + 7 tests, 2 fichiers ajoutes, aucun contenu existant modifie. Les 5 questions organ-first sont repondues dans le body (l'organe DOM scan_slidev_composition.py ne voit pas le contenu clippe dans le canvas ; l'ecart 0 contre 22 slides est le temoin). Revue NanoClaw LGTM lue, dossier tiers a la tete exacte.
Grain: DEEP/slides — lane myia-po-2027:CoursIA — prev: DEEP/lean #20525
See #11508 (lot L2 — jambe export PNG). Tranche 1 : instrument + inventaire du deck
06-apprentissage.Summary
Nouvel instrument
scripts/notebook_tools/scan_slidev_overflow.py(+7 tests) : détection du débordement par le bas sur les PNG exportés (slidev export --format png), comme le mandat L2 l'écrit (« Export PNG + détection automatique de débordement + planches-contact relues à l'œil »).Trois choix mesurés, chacun validé sur le deck réel :
Organ-first — les 5 questions (l'organe DOM existe déjà)
scan_slidev_composition.py(CI, advisory) : HORS_CANVAS par bbox DOM vs canvas 980×552, chevauchements de glyphes, occupation, recouvrement texte×image. Porté notamment par fix(slides,#11508): deck 06-apprentissage L3 debordement 29 slides hors-canvas -> 0 #12826 sur CE deck : « 29→0 slides hors-canvas ».main. Pourtant l'export montre 22 slides tronquées.overflow:hidden, image rognée par son parent) — le pixel rendu, si. L'EPIC écrit cette jambe : « le défaut se mesure au rendu, pas à l'impression ».Mesure (deck 06-apprentissage, 123 slides exportées)
22/123 slides portent de l'encre dans les 6 dernières lignes (seuil 1 % de la largeur mesurable). Corroboration vision 3/3 :
Le filigrane « Intelligence(s) » (bas-gauche, présent sur les slides du deck) est intact sur le témoin léger — ce n'est pas lui qui encre. L'inventaire complet (22 slides, ratios) est posté sur #11508.
Validation
pytest scripts/notebook_tools/tests/test_scan_slidev_overflow.py: 7 passed (verdicts, tri naturel 1/2/10, bande numéro de page, PNG illisible nommé sur stderr, répertoire absent/vide = exit 2 nommé — jamais un tableau vide qui se lirait « aucun débordement »).npx slidev export 06-apprentissage/slides.md --format png→ 123 PNG, scan re-tourné après chaque itération de l'instrument (32 → 23 → 22).🤖 Generated with Claude Code