Repository navigation
docs(slides,#15023): ancrer l'arc de 03-logique sur son corpus (24 ancres, 3 slides neuves) - #15865
Merged
Merged
Conversation
…cres, 3 slides neuves) Le deck 03-logique (129 slides) ne citait qu'un seul lien relatif et zero notebook du depot, alors que le corpus qui l'exerce existe (SymbolicAI/Tweety, SMT, Planners, SemanticWeb, Argument_Analysis, SmartContracts ; Search/ Applications). Ajout de 24 ancres in-slide (59 citations notebook, style relatif du deck 05) et de 3 slides de contenu tirrees des notebooks : resolution inverse/ILP, MUS-MCS et noyaux d'insatisfiabilite, logiques de description et OWL. Acceptance #15023 : zero ancre terminale, >=1 slide neuve par tranche, liens morts repares. Mesure : 60 liens relatifs, 0 casse, 0 label menteur ; scan de composition du depot inchange (hors_canvas 3, chevauchements 0, aucune erreur de rendu introduite) ; slidev build OK. +172 / -0 sur un seul fichier ; slides.marp.md non touche (precedent #15818). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01
pushed a commit
that referenced
this pull request
Sep 13, 2026
…des/**/slides.md (#15871) `slides/` n'etait dans le scope d'AUCUN des deux organes de liens : la tranche #15023 (PR #15865) a ecrit 17 liens relatifs morts sur 03-logique et les deux organes rendaient « 0 casse ». Meme mode de defaillance que #7422 (index.md pourrissait parce que rien ne le regardait). - check_docs_links.py : scope deck `slides/**/slides.md` (DECK_DIR), resolu DEPUIS le repertoire du deck (le `..` sort de slides/ vers MyIA.AI.Notebooks/). Le scope reste deck-only, mesure : slides/**/*.md = 119 fichiers, 734 casses/1367 (analysis/, extracted/, *.marp.md) -- l'elargir rougirait toute PR. - DeckScopeEmpty : slides/ present sans aucun deck => exit 2 explicite, jamais un « 0 casse » depuis une portee vide (piege 1 de l'issue). - --expect-broken N : controle positif en bande (modele scan_slidev_composition.py). Arme et non atteint => exit 2. Matrix mesuree sur un lien casse volontairement : bare=1, --expect-broken 1=1 (controle satisfait), --expect-broken 2=2, --check --base origin/main=1 (regression non excusee). Advisory « controle non arme » confinee au bare scan : --check garde son contrat d'une ligne unique. - check_link_label_agreement.py : DECK_GLOB + meme garde anti-scan-silencieux. Le predicat existant n'a PAS ete assoupli : il compare un identifiant de famille extrait des DEUX cotes, donc le basename sans extension et la glose hors crochets ne le concernent pas (l'egalite naive label==basename ferait 108/108 faux positifs, mesure). - fast_lane_registry.py : le garde check-links declenche maintenant sur slides/** -- sans quoi une PR deck-only (#15865) ne lance jamais l'organe (entree de registre != cablage). La parite test trouve AUSSI que .claude/agents/** et .claude/skills/** etaient scannes depuis #7422 sans jamais declencher le garde : couverts. Mesures sur origin/main : 702->720 fichiers, 6845->6953 liens (+108, le compte exact de l'issue), 0 casse avant/apres ; label organ 2076->2093 fichiers (+17 decks, _archive exclu -- divergence documentee et epinglee), 0 desaccord sur tout le depot. Acceptance 4 : l'etat des 17 liens casses n'est PAS dans l'historique git (les deux commits de #15865 sont deja a 60 liens / 0 casse -- mesure). Demontree par reconstruction : lien casse volontairement sur un deck => detecte et nomme (slides/05-theorie-des-jeux/slides.md:116), restaure par cp backup. Closes #15867. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This was referenced Sep 13, 2026
Merged
feat(symbolicai,#15949): volet 3/3 - encarts hommage Stearns (automates LL(k) + pire cas TSP)
#15966
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Grain: DEEP/slides — lane myia-po-2026:CoursIA — prev: DEEP/ml #15548
Deck
03-logique— l'arc conceptuel ancré sur son corpus (59 citations, 3 slides neuves)See #15023 (tranche partielle : un deck par tranche, l'epic reste ouverte).
Contexte
#15023 mesure que les decks de l'arc principal citent zéro notebook du dépôt. Sur
origin/main(77575efeb), le deck03-logiqueporte 1 seul lien relatif (.claude/rules/wsl-kernels.md, Quick-start Lean) : 129 slides de logique — KB agents, Wumpus, résolution, DPLL, SAT, FOL, modale, argumentation, SMT, planification, DL/OWL, smart contracts — sans un seul renvoi vers les notebooks qui les exercent. Le corpus existe :SymbolicAI/{Tweety,SMT,Planners,SemanticWeb,Argument_Analysis,SmartContracts},Search/Applications.Acceptance corrigée par ai-01 (le comptage
grep -icE 'ipynb'était devenu la cible) : (1) zéro ancre terminale — chaque référence vit dans la slide qui traite son sujet ; (2) ≥1 slide de contenu neuve tirée du notebook ; (3) liens morts réparés au passage.Livrable — Périmètre : 1 fichier
slides/03-logique/slides.mduniquement, +172 / −0 (git diff --numstat=172 0) : aucune ligne supprimée (3 slides insérées, 24 ancres ajoutées en queue de flux, 9 blocs<style scoped>de densité, 2 contraintes de largeur ajoutées dans des blocs préexistants).*Notebooks : [Basename](../../MyIA.AI.Notebooks/...)*(convention du deck 05, verdict « conforme ») — jamais de bloc « Corpus associé » terminal.slides.marp.md(jumeau Marp) non touché — précédent feat(slides,#15023): deck 06 ancré sur le corpus réel — 20 refs in-slide + 2 slides neuves (PAC Lean, GRPO/RLVR) #15818 (la dernière tranche de contenu n'a touché queslides.md).Ce que la mesure a rattrapé — et qui serait passé en CI
1. Mon premier plan d'ancrage était faux : 17 des 59 liens pointaient dans le vide
Le plan avait été construit sur des chemins supposés, pas sur l'arbre :
mainPlanners/Planners-3-State-Space.ipynb01-Foundation/,02-Classical/,03-Advanced/,04-NeuroSymbolic/SMT/Z3-Python-01-Introduction.ipynbSMT/Z3-API/Z3-Python-01-Introduction.ipynbZ3-Python-14-Optimize-MaxSAT.ipynbSMT/Z3-Linq2Z3/14_Optimize_MaxSAT.ipynb(nomNN_Sujet)SmartContracts/SC-14-Formal-Verification.ipynbSmartContracts/03-Foundry-Testing/SC-14-…Search/App-23-…Search/Applications/Hybrid/App-23-…SW-12-GraphRAG.ipynbSW-12-Python-GraphRAG.ipynbAucun organe CI ne l'aurait vu.
scripts/check_docs_links.pyaSCAN_SCOPES = ["CLAUDE.md", "index.md", "PARCOURS.md", "docs/", ".claude/rules/", ".claude/agents/", ".claude/skills/"]—slides/n'y est pas.scripts/notebook_tools/check_link_label_agreement.pyaSCAN_GLOBS = ("MyIA.AI.Notebooks/**/*.ipynb", "MyIA.AI.Notebooks/**/README.md", "docs/**/*.md")—slides/n'y est pas non plus. Un « 0 lien cassé » de ces deux outils ne dit rien d'un deck, alors que l'acceptance de #15023 s'appuyait dessus.Instrument construit pour combler le trou, avec contrôle positif — c'est lui qui a trouvé les 17 :
05-theorie-des-jeux(référence saine)03-logiqueavant réparation03-logiqueaprès réparationLe contrôle n'est pas décoratif : le même instrument, sur un deck sain, rend 0 — il discrimine.
2. Trois défauts de composition que j'ai introduits, mesurés puis corrigés
L'ancre est le dernier élément en flux de chaque slide ; sur les slides déjà à ras, elle pousse le flux hors du canvas 980×552.
<style scoped>:font-size: 0.88em+ margesh2resserrées — cf. « Systèmes à maintenance de vérité », « Décomposition hiérarchique »), appliqué à 9 slides de la tranche : « Unification », « Resolution en FOL », « Resolution inverse… », « Logiques d'ordre supérieur », « Expliquer l'incohérence… », « Applications », « Web sémantique », « Logiques de description et OWL », « Smart Contracts ». Aucune suppression de contenu : on reclaim de la hauteur, on ne retire rien.recouvrement, cf slides: scan_slidev_composition.py est aveugle au recouvrement texte-image (occupation 6->0 sur un deck qui empire) #15351) sur « Décomposition hiérarchique » (img_036) et « Web sémantique » (pileimg_039/040/043). Corrigé en bornant le dernier paragraphe en flux :.slidev-layout > p:last-of-type { max-width: … }, largeur calculée depuis le bord gauche de l'image (right:58px; width:200px→ x=722 ;right:30px; width:320px→ x=630).<p>littéral, que Vue lit comme du balisage →Tags with side effect (<script> and <style>) are ignored in client component templates, et les slides « Web sémantique » et « Ontologies » rendaient « An error occurred on this slide ». Détecté par un signal indirect : le compteurrecouvrementsest passé de 5 à 2 en « réparant » trois slides que je n'avais pas touchées — résultat implausible, donc investigué. Corrigé en retirant les chevrons du commentaire (issue 15351 au lieu de#15351). Aucun organe ne signale directement « cette slide n'a pas rendu » (cf. résiduel n°3).Non-régression de composition — instrument canonique du dépôt
scripts/notebook_tools/scan_slidev_composition.py, deck entier, les deux états servis en parallèle (worktreeorigin/mainvs branche), résultats alignés par contenu (text_head) — les numéros ne sont pas comparables, la branche ajoutant 3 slides :origin/main(129 slides)hors_canvas(contenu)hors_canvas(boîte seule)chevauchementsrecouvrements(ADVISORY)occupation(ADVISORY)Zéro régression sur tous les signaux. Les 3 slides en débordement de contenu le sont déjà sur
main(« Sémantique de la logique propositionnelle », « Règles d'inférence », « Définition d'un domaine de planification ») — hors de ma tranche.Contrôle de stabilité : le même deck
mainscanné deux fois rend exactement les mêmes compteurs (3/8/0/5/33). Le signal ne bouge pas tout seul ; les écarts observés pendant le travail (7 recouvrements, puis 2) étaient la conséquence de mes propres slides cassées, pas du bruit de l'instrument.Le « rendu » se mesure sur le build de production, pas sur le serveur de dev
Pendant la campagne A/B, le serveur de dev a affiché « An error occurred on this slide » sur quelques slides de
maincomme de la branche. J'ai d'abord attribué cela au contenu (diagrammemermaidde la slide « Cartographie des 24 notebooks »). C'était faux — la console navigateur donne la cause réelle :C'est une résolution de module du serveur de dev local (
lz-string, dépendance de Slidev), pas un défaut du deck : le symptôme est apparu sur 1 ou 3 slides selon le moment de la sonde, et symétriquement des deux côtés de l'A/B.La mesure qui fait foi est le build de production (DOM pré-rendu, pas de bundler de dev, pas de
lz-stringen ESM à la volée) :slidev build.slidev-pagedans le DOMLe contrôle positif n'est pas décoratif : une première marche de navigation rendait « 132 slides, 0 erreur » sur une page 404 de mon propre serveur statique (
python -m http.serverne fait pas de repli SPA :/<n>n'existe pas comme fichier). Un « 0 erreur » sans contrôle positif ne vaut rien. La slidemermaidmise en cause rend correctement.Acceptance #15023
layout: endcheck_slidev_structure.py→ 0 constatslidev buildexit 0 (1088 modules) et le build de production rend 132/132 slides : 0 texte vide, 0 « An error occurred », contrôle positif « Cartographie des 24 notebooks » trouvé (slide 98). Mesuré sur le DOM pré-rendu — cf. section « Le rendu se mesure sur le build »style.cssde deckRésiduel — signalé, non traité (sujets distincts)
slides/**hors du scope des deux vérificateurs de liens (check_docs_links.pySCAN_SCOPES,check_link_label_agreement.pySCAN_GLOBS). L'acceptance de slides: l'arc de cours principal ne cite aucun notebook du depot (6 decks a zero, 103 notebooks GenAI ignores par le deck 08) #15023 les invoquait ; ils ne regardent pas les decks. Les 17 liens morts écrits puis réparés ici seraient passés sans bruit. → issue à ouvrir.lz-string— dépendance Slidev qui ne fournit pas d'exportdefaultdansnode_modules(SyntaxError: … does not provide an export named 'default'). Symptôme : des slides affichent « An error occurred on this slide », en nombre variable et des deux côtés de l'A/B. Le build de production, lui, rend les 132 slides. C'est un défaut d'environnement (prebundle/node_modulesdeC:\dev\CoursIA\slides), pas de contenu — mais il pollue toute campagne A/B faite sur le serveur de dev. → signalé.hors_canvasinchangés). C'est ce qui a failli laisser passer mon propre défaut n°3 (commentaire CSS avec<p>) — détecté seulement par unrecouvrementsqui baissait, c'est-à-dire l'inverse du réflexe attendu. → signalé.slides/README.md:50est faux sur la taille de ce deck : annonce~1969lignes ; réalité2774surmain,2946sur cette branche. Déjà faux de ~800 lignes avant ma tranche → l'inventaire demande un ré-audit complet, pas une retouche de ligne. Signalé, non corrigé (un sujet par PR).slides/03-logique/analysis/mapping-20260419.mddécrit un état Slidev de 53 slides (2026-04-19) contre 132 aujourd'hui. Obsolète indépendamment de cette tranche.0.88em, les 2 largeurs d'ancre et les 3 slides neuves méritent un regard à capacité vision (lane CoursIA-2 / merge-gate) — cette lane (GLM) ne voit pas les rendus.Base — à jour au moment du push, en retard de 21 commits à l'instant du rapport
Branche issue de
origin/main77575efeb;origin/mainest depuis passé àc29574410(21 commits d'avance). Aucun de ces 21 commits ne toucheslides/:Le merge est donc sans conflit et le catalogue est byte-identique à
main(cette PR ne touche aucun artefact généré). Je ne force-push pas (règlegit-workflow.md) : la mise à jour de la base revient au merge-gate / coordinateur, si elle est jugée nécessaire.Reproductibilité
Le vérificateur de liens deck-scoped (et le trou de scope ci-dessus) est un script de session, reproduit dans le fil de #15023.
🤖 Generated with Claude Code