Repository navigation
[Audit #17073] Série GenAI — partition NanoClaw #19451
Description
Activity
[NanoClaw] Audit campagne #17073 —
MyIA.AI.Notebooks/GenAI/00-GenAI-Environment/00-1-Environment-Setup.ipynb(14 cellules, extraction v2.1) — premier audit de la série, issue ouverte ce cycle sur le modèle #17093/#18244. État global sain : exécution réelle committée (25/06/2026, APIs 2/2, score 85/100 = barème 25+50+10 exact, image base64 1 547 260 chars), prose et sorties cohérentes, barème du score juste (100), navigation propre, 0 doublon, ec séquentiel. 2 findings :1. orphan-statement — cellule
CODE[2] id=9ef8fd65.
Extrait : « # Parameters\nBATCH_MODE = "true" » — la cellule Parameters (papermill) n'injecte queBATCH_MODE, variable définie et lue nulle part ailleurs du notebook (les paramètres réelsnotebook_mode,api_provider,skip_widgets,debug_level,test_generation,validation_modesont définis dansCODE[1] id=0a1e91f2et consommés plus bas).
Pourquoi : une cellule Parameters qui n'injecte aucune variable consommée est du bruit mort — et elle écrase le contrat papermill du notebook (le batch réel ne peut rien régler via elle).2. stale-claim — cellule
CODE[4] id=6aa2eef6(message d'aide du else.envabsent), à rapprocher deMD[7] id=6db1483d.
Extrait : « 📖 Copiez .env.template vers .env et configurez vos clés API » — or le dépôt porteMyIA.AI.Notebooks/GenAI/.env.example(vérifié ls-tree @7b2336565 ; aucun.env.templaten'existe) et la prose MD[7] dit correctement « Créer le fichier depuis .env.example ».
Pourquoi : l'apprenant qui arrive sans .env reçoit du code une instruction pointant un fichier inexistant, contredite par la prose du même notebook — c'est exactement le mauvais moment (premier notebook, premier blocage).— NanoClaw (myia-ai-01), cycle 479 campagne #17073, partition NanoClaw.
[NanoClaw] Audit campagne #17073 —
MyIA.AI.Notebooks/GenAI/00-GenAI-Environment/00-2-Docker-Services-Management.ipynb(17 cellules : 10 markdown / 7 code, execution_count 1→7 séquentiel, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5)Passe mécanique + couche pédagogique — 4 findings, chacun prouvé par extrait :
F1 —
stale-claim— cellule MD[5] (id 325febcc)Variables globales créées :
DOCKER_AVAILABLE = True: Docker CLI est accessibledocker_manager: Instance du gestionnaire de services
Pourquoi : la lecture de la cellule 3 annonce
docker_managercomme variable globale créée, alors que l'output committé de CODE[4] (ec=3) ne porte que « ✅ Helpers GenAI importés / ✅ Docker CLI détecté / 🔧 Services gérés: … » — l'instance n'est créée qu'à CODE[6] (ec=4), deux cellules plus loin.F2 —
stale-claim— cellule MD[16] (id dc11c2cb)- Gerer les services via la classe DockerServiceManager
Pourquoi : la classe ne porte que
run_command,get_docker_info,list_services(CODE[6]), et CODE[12] fait retomberstart/stop/restartsur «⚠️ Action {action} non implémentée dans cette démo » — le bilan attribue au carnet une capacité de gestion (démarrage, arrêt) qu'il ne fournit pas ; le README du module annonce pourtant « démarrage, arrêt et monitoring ».F3 —
output-uninterpreted— cellule MD[11] (id 09155a64), lecture de CODE[10] (id eba4ee26, ec=5)| Connectivite | Test de ports (socket) | Services accessibles sur ports |
Pourquoi : l'output committé de CODE[10] rend
🔴 Jupyter (:8888),🔴 Ollama (:11434),🔴 Redis (:6379),🔴 PostgreSQL (:5432)— 4 des 5 services GenAI injoignables, un seul ✅ (ComfyUI) — or la prose entière du carnet ne contient aucune occurrence de « 🔴 » ni de « non accessible » ; MD[15] conclut même « Services actifs | L'infrastructure fonctionne | Passer aux notebooks de generation » alors que CODE[14] recommande surservices_count(20 conteneurs actifs, dont aucun ne porte les noms des 5 services listés dansmanaged_services). Remède = réécrire MD[11] pour nommer les états observés — jamais ajouter une seconde lecture (frontière #13410) ; tout enrichissement resterait un candidat, pas un élément de travail.F4 —
paraphrase-stack— cellules MD[7] (id a1a87a40) et MD[8] (id 7ba55bce)MD[7] : « Méthodes disponibles : » puis « -
run_command(cmd, timeout): Execute une commande système avec gestion des erreurs »
MD[8] : « |run_command(cmd, timeout)| Execute une commande Docker avec timeout | Dict avec success/stdout/stderr | »Pourquoi : deux cellules markdown adjacentes empilent la même liste des trois méthodes (mêmes noms, mêmes descriptions) et la même « Note technique » sur
subprocess.run()/capture_output; MD[8] « Presentation du DockerServiceManager » est placée après l'interprétation de l'instanciation (MD[7]), donc présente la classe une fois son usage déjà interprété.Classes portées ailleurs (pas de re-description ici) : doublons de sections → #17066 (00-2 ne figure pas dans la liste de travail des porteurs, donc rien à signaler) ; paramètres déclarés jamais consommés → proposition d'organe sur #17073 (seuil >3 atteint :
service_timeout,health_check_retries,show_logs,auto_restart,self.services_status, plusskip_widgetsinjecté en chaîne par la cellule injected-parameters alors que CODE[1] le déclare booléen). Aucune passe d'organes ce cycle : l'artefact ai-01 n'est pas publié sur #17073.Case
00-2cochée dans la checklist de cette issue.[NanoClaw] Audit campagne #17073 —
MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/09-Aspire-Harness-CopilotSdk.ipynb(36 cellules : 25 markdown / 11 code, execution_count 1→11 séquentiel, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel .net-csharp)Passe mécanique + couche pédagogique — 1 finding prouvé par extrait ; 3 occurrences de classes gelées versées au dossier des organes (une ligne chacune, pas de re-description) ; doublons renvoyés à #17066.
F1 —
reading-before-code— cellule MD[9] (id 7328af87), lit un objet affiché en CODE[11] (id 973cadf0, ec=4)Lecture : Le fichier
Program.csest le point d'entrée du harness. Il implémente les différents modes :authpour vérifier l'authentification,modelspour lister les modèles disponibles,askpour un tour complet avec prompt, eteventspour consommer le flux SessionEvent.Pourquoi : cette « Lecture » suit la cellule CODE[8] (
dotnet build, output = « La génération a réussi. 0 Avertissement(s) 0 Erreur(s) ») qu'elle ne lit pas, et décrit un fichier que le carnet n'affiche que deux cellules plus loin (CODE[11],ShowFile("…/Program.cs", 1, 40)) — la lecture est détachée de son objet, et la sortie de build reste sans aucune lecture.Occurrences de classes gelées (gel campagne, dashboard coordination :
stale-claim,exercise-mismatch,figure-missing) — versées en une ligne, pas déposées :stale-claim— MD[3] (id 23a9269b) : « L'amorçage a réussi et a créé le projet compagnonCopilotHarness.Appdans l'arborescence » — CODE[2] ne fait que résoudre le RepoRoot et afficher le chemin (output : « amorcage OK -- projet compagnon : … ») ; le.csprojpré-existe puisqu'il est affiché juste après (CODE[5]).stale-claim— MD[27] (id 39bc4368) : « L'histogramme raconte le tour dans l'ordre :session.start→session.model_change(résolution deauto) → … » — l'output committé de CODE[25] est un histogramme alphabétique à compte 1 (aucune information d'ordre), et MD[26] (id d9a9d331) donne un autre ordre (session.model_changeen dernier) : les deux lectures du même output se contredisent, l'ordre cité n'est pas dans la sortie. → organe fix(ci,#18354): organes stale-claim + factual-mislabel -- etapes du workflow advisory existant (tranches 1+2) #18402 + extensions R1/R2 (c.6008669903).stale-claim/exercise-mismatch— MD[28] (id 7c8fabe3) et les outputs committés de CODE[30]/CODE[32]/CODE[34] impriment « voir TODO dans Program.cs » — leProgram.cscommitté (89 lignes) ne contient aucun TODO (0 occurrence, insensible à la casse) et aucun stubusage/memoire/catalogue: son switch ne porte queauth/models/ask/events. Les trois exercices renvoient l'apprenant à une ancre inexistante — le point le plus pénalisant du carnet pour un étudiant seul. → organes exercise-mismatch (c.5768531684) et stale-claim « signatures citées » (c.6008669903 R2).
Doublons → #17066 (porteur, pas re-décrit) : le worklist de #17066 crédite ce carnet de 4 sections
dup_readingen trop ; re-mesuré ici : 5 paires « Lecture » + « ### Interprétation » lisant chacune le même output (csproj CODE[5], auth CODE[13], catalogue CODE[17], ask CODE[21], events CODE[25]) — gate #17040 « max 1 lecture par output ».Couche pédagogique — état : arrivée bien placée (récap intro scoping exactement la série The Unexpected AI Stack 01-06 ; les carnets 07/08 du dossier sont d'autres arcs — Epic #1210 semantic-fleet, curriculum Roslyn — et ne relèvent pas de ce récap) ; exercices gradués (usage → mémoire → catalogue) avec avertissement de coût premium ; limites honnêtes (BYOK non exercé, quota consommé). Les faiblesses sont celles listées ci-dessus.
Note de process : à compter de ce cycle, conformément au gel des classes (dashboard coordination, « >3 occurrences ⇒ stop findings individuels »), les occurrences de classes gelées sont versées en une ligne au dossier de l'organe concerné au lieu d'un finding individuel. Rétroactivement, les 2 findings
stale-claimdu cycle 480 (00-2, F1/F2) sont à lire comme telles (organes déjà proposés).Case
Aspire/09cochée dans la checklist de cette issue (PATCH vérifié : exactement 1 occurrence remplacée).[NanoClaw] Audit cycle 482 —
Integrations-DotNet/CopilotSDK/01-GitHub-Copilot-SDK-Binding.ipynbPorteur : non ; artefact ai-01 toujours absent de #17073 (SANS organes). Mécanique saine : 25 cellules (md=17/code=8), ec 1→8 séquentiel, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel
.net-csharp, exécution réelle committée (échec quota géré honnêtement par catch dédiés). Le header «Lecture du résultat» ×4 = rhythm volontaire un-par-section, contenus distincts — pas un doublon.Findings (3) :
- stale-claim — cellule
MD[5](id8f517b2e, Lecture §1) :
«
Runtime portnon-zero : le SDK a démarré le CLI en subprocess, qui ouvre un port local pour le dialogue SDK ↔ CLI. Ce numéro n'est pas un port LLM, c'est le port de la machinerie interne.»
AucunWriteLinedu notebook n'imprime de «Runtime port» et la sortie committée de CODE[4] = 3 lignes quota + warning CS8632 — la lecture décrit une sortie que ni le code ni les outputs ne produisent.- stale-claim — cellule
MD[5](id8f517b2e, Lecture §1) :
«Réponse factuelle attendue : « La capitale de la France est Paris. » — le modèle
gpt-4.1est routé via le providergithubpar défaut, donc factuel.»
Contredit par le code du même notebook — CODE[4] (id2caeceaa) : «Modele du CLI par defaut : gpt-4.1 a ete retire des plans Copilot (erreur "Model gpt-4.1 is not available" mesuree en 2026-09)». La lecture affirme au présent un routage que le notebook lui-même documente comme retiré.- prerequisite-gap — cellule
MD[0](id94d2ee94, Prérequis) :
«- GitHub Copilot CLI installé et authentifié […] - Aucun Docker requis (le CLI bundle est natif ; pas d'Aspire AppHost dans cette tranche).»
La liste oublie le build préalable deCopilotAgent.App, exigé dès la cellule 4 (CODE[4] : «Re-executer ce notebook apres avoir builde le projet CopilotAgent.App au moins une fois») et pour ledotnet run --no-buildde §4 — le prérequis n'est révélé qu'en échec à mi-parcours.Note (pas un finding) : les renvois «règle C.1» (Exercice 3) et «règle H.1» (§4) pointent des règles internes de lane définies nulle part dans le notebook — jargon opaque pour l'apprenant, candidat nettoyage léger.
Couche pédagogique : arrivée bien placée après Aspire/04 (axes A1/A2 cités et liés deux fois) ; paliers 1→4 bien décomposés (dialog → streaming → Scrutor → composition) ; sorties interprétées à chaque section ; exercices stubbés propres avec critères de validation. Chapeau et conclusion balancent correctement le scope.
Case cochée ci-dessous. Ledger NC mis à jour (cycle 482).
- stale-claim — cellule
[NanoClaw] Audit cycle 482 —
Integrations-DotNet/CopilotSDK/01-GitHub-Copilot-SDK-Binding.ipynbPorteur : non ; artefact ai-01 toujours absent de #17073 (SANS organes). Mécanique saine : 25 cellules (md=17/code=8), ec 1→8 séquentiel, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel
.net-csharp, exécution réelle committée (échec quota géré honnêtement par catch dédiés). Le header «Lecture du résultat» ×4 = rhythm volontaire un-par-section, contenus distincts — pas un doublon.Findings (3) :
- stale-claim — cellule
MD[5](id8f517b2e, Lecture §1) :
«
Runtime portnon-zero : le SDK a démarré le CLI en subprocess, qui ouvre un port local pour le dialogue SDK ↔ CLI. Ce numéro n'est pas un port LLM, c'est le port de la machinerie interne.»
AucunWriteLinedu notebook n'imprime de «Runtime port» et la sortie committée de CODE[4] = 3 lignes quota + warning CS8632 — la lecture décrit une sortie que ni le code ni les outputs ne produisent.- stale-claim — cellule
MD[5](id8f517b2e, Lecture §1) :
«Réponse factuelle attendue : « La capitale de la France est Paris. » — le modèle
gpt-4.1est routé via le providergithubpar défaut, donc factuel.»
Contredit par le code du même notebook — CODE[4] (id2caeceaa) : «Modele du CLI par defaut : gpt-4.1 a ete retire des plans Copilot (erreur "Model gpt-4.1 is not available" mesuree en 2026-09)». La lecture affirme au présent un routage que le notebook lui-même documente comme retiré.- prerequisite-gap — cellule
MD[0](id94d2ee94, Prérequis) :
«- GitHub Copilot CLI installé et authentifié […] - Aucun Docker requis (le CLI bundle est natif ; pas d'Aspire AppHost dans cette tranche).»
La liste oublie le build préalable deCopilotAgent.App, exigé dès la cellule 4 (CODE[4] : «Re-executer ce notebook apres avoir builde le projet CopilotAgent.App au moins une fois») et pour ledotnet run --no-buildde §4 — le prérequis n'est révélé qu'en échec à mi-parcours.Note (pas un finding) : les renvois «règle C.1» (Exercice 3) et «règle H.1» (§4) pointent des règles internes de lane définies nulle part dans le notebook — jargon opaque pour l'apprenant, candidat nettoyage léger.
Couche pédagogique : arrivée bien placée après Aspire/04 (axes A1/A2 cités et liés deux fois) ; paliers 1→4 bien décomposés (dialog → streaming → Scrutor → composition) ; sorties interprétées à chaque section ; exercices stubbés propres avec critères de validation. Chapeau et conclusion balancent correctement le scope.
Case cochée ci-dessous. Ledger NC mis à jour (cycle 482).
- stale-claim — cellule
[NanoClaw] Audit cycle 483 —
Integrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynbPorteur : non ; artefact ai-01 toujours absent de #17073 (SANS organes). Mécanique saine : 17 cellules (md=8/code=9), ec 1→9 séquentiel, 0 doublon Jaccard>0.55, 10 headers tous distincts, 0 CJK, nbformat 4.5, kernel
.net-csharp, seed déterministeRandom(42), valeurs mesurées cohérentes (médianes 192702/69417 ticks → ratio 2,78x exact ; injection 0 ligne = 0 attendu). Liens../Aspire/distilled-axes-registry.mdet notebook Roslyn vérifiés existants sur l'arbre. DomaineTranscriptionJobcohérent avec la série Aspire, position dans la série explicite et correcte.Findings (5) :
- stale-claim — cellule
MD[2](idd12fcaa4, §1) :
«Le modèle est déclaré en C#, et c'est déjà le premier point de la differential : la table n'existe que comme propriété typée du
DbContext(Transactions.Jobs).»
Transactions.Jobsne désigne rien dans le notebook : le contexte défini en CODE[3] (id00d9ce3e) estTranscriptionContextavecDbSet<TranscriptionJob> Jobs, table"TranscriptionJobs"— résidu de renommage de draft (aucune classe/propriétéTransactionsn'existe).- output-uninterpreted — cellule
CODE[5](idacb35224, ec=3) :
sortie : «Requete typée compilee et executee : 5 job(s) termine(s) de plus de 100s / job_007.wav 151s confiance=0,320 … job_004.wav 203s confiance=0,513»
Aucune cellule markdown ne lit ce résultat : MD[6] ouvre §3 (ToQueryString) sans le mentionner, et MD[4] n'annonce que le mécanisme — le tri croissant 151→203s et les confiances ne sont interprétés nulle part.- reading-before-code — cellule
MD[8](ide5a4878f, §4) :
«Voici une mesure honnête — pas un benchmark de production. […] le point à retenir, une fois la mesure lue : le gain est relatif (…) mais absolu de l'ordre de la microseconde.»
La lecture du benchmark est écrite AVANT la mesure CODE[9] ; le ratio 2,78x effectivement mesuré n'est relu par aucun markdown ensuite — la seule « lecture » du résultat est unConsole.WriteLinedans le code lui-même, et le notebook n'a aucune lecture placée après un output.- exercise-mismatch — cellule
CODE[13](id0f6f18d1, ec=7, Exercice 1) :
énoncé : «ecrire une requete compilee qui renvoie les jobs en Echec, tries par duree desc» — stub : «var nbEchec = 0; // TODO etudiant : ctx.Jobs.Count(j => j.Statut == StatutJob.Echec)» puis «nb jobs en echec (a completer) = {nbEchec}»
Le contrat du stub (un compteur) ≠ l'énoncé (requête compilée renvoyant la liste triée durée desc) : compléter le stub tel quel n'exécute pas l'exercice annoncé.- solution-leak — cellule
CODE[14](id306f8732, ec=8, Exercice 2) :
«string sql2 = ""; // TODO etudiant : ctx.Jobs.OrderBy(j => j.Id).Skip(5).Take(10).ToQueryString()»
Le TODO contient la solution littérale de l'exercice (« afficher le SQL d'une requete avec Take(10) + Skip(5) ») — y compris l'ordreSkippuisTakequi était précisément le point à découvrir.Notes (pas des findings) : (a) MD[8] affirme que la requête directe « recalcule » la traduction à chaque exécution — EF Core maintient un cache de plans de requête, la nuance contredit la doc mais n'est pas prouvable par extrait interne ; (b) la normalisation enum→int visible dans le SQL du §3 (
"Statut" = 1) n'est expliquée que dans un commentaire de CODE[9] (§4) — remark de placement.Case cochée ci-dessous. Ledger NC mis à jour (cycle 483).
- stale-claim — cellule
Audit NanoClaw cycle 484 —
GenAI/Integrations-DotNet/Orleans/01-Orleans-Grains-Agents.ipynb(lane #17073, fire 14:05Z)Porteur : dernier axe non distillé de la Part 1 (registre #10473). Désignation vérifiée contre l'arbre : les six autres axes cités en intro sont réellement livrés — Aspire (série 01-09), OTEL (
Aspire/03-Aspire-Observabilite), Channels (Aspire/04-Aspire-Streaming-Agent), Roslyn (Aspire/06-Aspire-GardeFous-Roslyn), EF Core (EFCore/01, audité cycle 483), CSharpRepl (Vibe-Coding/docs/CSharpRepl-Live-Patching).Passe mécanique : 16 cellules (md=8, code=8), ec 1→8 séquentiel, 11 headers distincts, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel .net-csharp, fichier 31 648 o.
Findings : aucun. Toutes les valeurs croisées prose↔outputs sont exactes :
gpt-5.6-luna=1625 (3 appels cumulés),whisper-1=2100, total concurrence 2125 = attendu (1625+500, écart 0 imprimé), 50 totaux intermédiaires distincts, état conservé après nouvelle référence, historique alpha 2 lignes / beta 1 ; exercice 1 : 1625 × 40¢/1k = 65¢ (arithmétique exacte) ; exercice 3 : attendus 1700/800/900, cohérents (800+900=1700).Notes (non-findings, qualités vérifiées) :
- Structure exemplaire lecture-après-code : trois paires CODE→Lecture (build, demo, vérification). Frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 respectée partout — chaque lecture suit sa cellule, aucune n'est dupliquée.
- Exercices = spécifications sans leak : les solutions vivent dans le lab adjacent
OrleansAgentLab/Grains.cs(présent dans l'arbre :Grains.cs,OrleansAgentLab.csproj,Program.cs), et les outputs témoins affichent honnêtement les stubs (-1 cents,"", compteurs à 0) au lieu de simuler des résultats. - Garde fail-loud CODE[6] : les invariants sont vérifiés par
Debug.Assert+throwsur la sortie réelle parsée (aucun nombre magique en prose) ; la lecture MD[7] cite la mesure (écart 0, 2/1 lignes) qui figure bien dans l'output. - Garde SOTA CODE[14] : vérifie le vrai package
Microsoft.Orleans.Server10.3.1, leUseOrleansréel et les 2 interfaces de grains. - Conclusion « limites honnêtes » (persistence, clustering, timers/streams/transactions, placement) clôt sans sur-promesse.
Couche pédagogique : peau d'apprenant — aucun gap détecté. Le survol des headers suit une progression nette : pourquoi → build → demo → invariants → interprétation → 3 exercices progressifs (coût / état interne / routage grain-à-grain) → garde SOTA → limites. Le point 3 de la lecture du demo (somme 1625+500 vs produit naïf, turn-based) est une des meilleures explications du modèle acteur du corpus audité jusqu'ici.
Case cochée :
Integrations-DotNet/Orleans/01-Orleans-Grains-Agents.ipynb.Audit NanoClaw cycle 485 —
GenAI/Integrations-DotNet/Orleans/02-Orleans-Aspire-CoHost.ipynb(lane #17073, fire 15:05Z)Passe mécanique : 32 cellules (md=17, code=15), ec 1→15 séquentiel, 21 headers distincts, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel .net-csharp, fichier 57 176 o.
Finding (1) :
- Cellules : CODE[3] (id
a10878eb, commentaire du code) contre les outputs de CODE[12], CODE[16], CODE[19], CODE[21], CODE[23] (ids17bc6137,e9a318e4,6566e42c,91563a31,6a03c9ef). - Extrait verbatim : CODE[3] déclare
// Chemin affiché RELATIF au dépôt : aucun chemin machine dans les sorties committées.— or CODE[12] out0 committé afficheContent root path: /home/user/wt-aspire/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/OrleansAspireLab(idem dans les quatre sorties de scénario suivantes). - Classe :
stale-claim - Pourquoi : la claim générale d'hygiène est falsifiée par cinq outputs committés du ClientDriver qui impriment un chemin machine non filtré — la politique d'anonymisation existe dans le notebook (CODE[7] nettoie
?t=<jeton>et les chemins de la CLI Aspire) mais elle ne couvre pas la ligneContent root pathémise par le runtime .NET du process client séparé ; la claim a été vraie pour des runs filtrés, plus pour ce run.
Notes (non-findings, qualités vérifiées) :
- Toutes les valeurs croisées prose↔outputs sont exactes : deux Guid distincts, « 2 tours » retrouvés par Guid, compteur
'qwen3-coder'cumulé (860 tokens, non cité en prose — pas de nombre fabriqué), événementsStarting → Running/Service silo-orleans-gateway ... Readycités en MD[10] présents mot pour mot dans le journal CODE[9], garde SOTA 3/3 (Orleans 10.3.1 silo+client, AppHost+AddOrleans, nuspecAspire.Hosting.Orleanssans aucun packageMicrosoft.Orleans.*— la « précision honnête » de MD[10] point 3 est mesurée, pas affirmée). - Chaîne d'identité vérifiée de bout en bout : le Guid extrait par la garde CODE[14] (
97ce4c00-…-b95f398f7325) est celui de la conversation A du demo CODE[12] et celui retrouvé par le resume CODE[16] — la prose ne cite jamais un Guid qui ne figure pas dans les outputs. - Structure lecture-après-code respectée partout (build→lecture, démarrage+événements→interprétation, demo→lecture, resume→interprétation) : une seule lecture par output, aucune dupliquée — frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue.
- Exercices = spécifications sans leak : les trois scénarios affichent honnêtement les stubs (
resume -> "",A=0 (attendu 800), B=0 (attendu 900),-1 cents), les attendus cités en MD[20]/[22]/[24] correspondent aux témoins, et l'arithmétique ex3 est exacte (1625 × 40¢/1k = 65,00). Le piège pédagogique du lab orchestré (relance du silo ~15 s avant chaque itération, MD[18]) est assumé et démontré. - Gardes fail-loud : CODE[14] et CODE[16] throwent sur invariant violé de la sortie réelle ; CODE[26] throw sur garde SOTA ; CODE[30] vérifie le port libéré.
Couche pédagogique : peau d'apprenant — aucun gap. Le tableau comparatif 01 vs 02 dès l'intro installe les deux deltas (orchestration, identité générée), chaque changement est motivé avant d'être exécuté (« Pourquoi ces deux changements »), et le lien arrière vers le notebook 01 couvre le prérequis modèle acteur. Progression nette : build → démarrage orchestré → identités → reprise par adresse → exercices (résumé → routage grain-à-grain → coût partagé) → garde SOTA → dashboard vivant → arrêt propre → limites honnêtes (persistance volatile, mono-silo, ports fixes, dashboard non automatisable) et conclusion en tableau de parité. La section « Le dashboard, vivant » est introduite avant sa cellule par une phrase d'annonce, sa lecture est inline dans l'output — pas de seconde lecture.
Claims structurelles vérifiées contre l'arbre : le lab
OrleansAspireLab/contient exactement ses quatre pièces déclarées (apphost.cs,Silo/,ClientDriver/,Grains/Grains.cs) plusaspire.config.json, et le registreAspire/distilled-axes-registry.mdréférencé en intro existe.Case cochée :
Integrations-DotNet/Orleans/02-Orleans-Aspire-CoHost.ipynb.- Cellules : CODE[3] (id
Audit NanoClaw cycle 486 —
GenAI/Integrations-DotNet/Orleans/03-Orleans-Persistance-Redis.ipynb(lane #17073, fire 16:05Z)Passe mécanique : 29 cellules (md=16, code=13), ec 1→13 séquentiel, 25 headers distincts, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel .net-csharp, fichier 55 859 o.
Findings : aucun. Toutes les valeurs croisées prose↔outputs sont exactes :
TTL -> -1,DBSIZE = 1, la clé complèteorleans-persistence-lab/state/persistentsession/session-redis/session, le hash à deux champsdata/etag, le JSON"$type":"OrleansPersistenceLab.SessionState, …"avecTurns/TokenTotal, le message de conflit avecETag=., les témoins d'exercices (tours=-1sentinelle,300/500 -> Falsesans écriture, même ETag avant/après le stub ex1), et la garde NuGet (Microsoft.Orleans.Persistence.Redis 10.3.1,Microsoft.Orleans.Server 10.3.1,StackExchange.Redis 2.11.0transitif).Notes (non-findings, qualités vérifiées) :
- La seule valeur non imprimée par un output — la décomposition « 240 tokens cumulés (40 + 80 + 120) » de la lecture §3 — est sourcée dans le lab adjacent :
OrleansPersistenceLab/Program.csappelleAppendTurnAsync(..., 40 * i)pour i=1..3. Vérifiée, pas fabriquée. - Cohérence interne des outputs committés : l'ETag
47974d75…lu par le process de relecture (CODE[6]) est exactement celui stocké dans le hash Redis (CODE[12] HGETALL) — la preuve documentaire et la preuve par relecture se recoupent. - Deux gardes fail-loud vérifiant les constats contre les sorties réelles : CODE[10] (pids distincts, état conservé via Redis / perdu via mémoire, ETag identique) et CODE[16] (écriture de B refusée, seul le tour de A stocké, ETag relu = ETag de A) — aucune constante magique en prose.
- Structure lecture-après-code exemplaire : une lecture par output (démarrage, build, write/read Redis, write/read mémoire, document Redis, conflit, témoins groupés des trois exercices, garde SOTA), aucune dupliquée — frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue.
- Exercices sans leak : les indices donnent la direction (l'opération dédiée distincte de
WriteStateAsync, borner les tentatives, rejouer la mutation aprèsReadStateAsync) sans écrire le code ; la lecture des témoins MD[23] apprend explicitement à lire ce que chaque stub laisse voir, y compris la fausse piste mesurée du ex1 (SessionStatevide →a revoir). - Garde SOTA forte : versions résolues par NuGet (pas déclarées), branchement vérifié dans les sources (
AddRedisGrainStorage("sessions",[PersistentState("session", "sessions")]), serveur réel interrogé, throw si la chaîne est incomplète.
Couche pédagogique : peau d'apprenant — aucun gap. Le tableau 01/02/03 d'intro installe le delta (où vit l'état, ce qui le détruit) et répond directement à la limite de volatilité laissée par les deux notebooks précédents ; chaque concept arrive au bon endroit (fournisseur injecté avant la survie, document Redis avant le conflit ETag qui s'appuie sur
etagdu hash) ; la distinctionServiceIdvsClusterIdest introduite en §4 puis exploitée en §5 pour fabriquer le conflit — pas décorative. Progression : conteneur → build → survie Redis/mémoire → document → concurrence optimiste → 3 exercices (clear/écriture conditionnelle/reprise sur conflit = les trois opérations deIPersistentState<T>) → garde → arrêt propre → limites honnêtes (durabilité de Redis elle-même non mesurée, conflit fabriqué assumé, migrations non exercées, branchement Aspire renvoyé au notebook 04).Claims structurelles vérifiées contre l'arbre : le lab
OrleansPersistenceLab/tient bien en trois fichiers (Grains.cs,Program.cs,.csproj) comme annoncé §1 ; le notebook 04 et le registre des axes référencés en conclusion existent tous deux.Case cochée :
Integrations-DotNet/Orleans/03-Orleans-Persistance-Redis.ipynb.- La seule valeur non imprimée par un output — la décomposition « 240 tokens cumulés (40 + 80 + 120) » de la lecture §3 — est sourcée dans le lab adjacent :
Audit NanoClaw cycle 487 —
GenAI/Integrations-DotNet/Orleans/04-Orleans-Aspire-Cluster-Redis.ipynb(lane #17073, fire 17:05Z)Passe mécanique : 44 cellules (md=28, code=16), ec 1→16 séquentiel, 31 headers distincts, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel .net-csharp, fichier 104 776 o — le plus gros de la série.
Findings : aucun. Croisements prose↔outputs tous exacts, y compris les plus fins :
- L'identité de silo
S<ip>:<port>:<génération>définie en §4 avant d'être nécessaire : générations imprimées150084232(démarrage),150084245sur nouveau port 46851 (réplique redémarrée en fin de section 6 — la prose annonçait « nouveau port de silo et nouvelle génération »),150084290×2 sans aucune ligne Dead après le redémarrage complet (« la table repart de zéro ») — les trois états vérifiés dans le hash Redis. - « N'est pas une constante » (§5) : la lecture annonce que la ligne de colocalisation varie et que l'exercice 2 la remesure « avec un résultat qui n'a pas de raison d'être le même » — l'exercice livre
8/16contre13/16en section 5, et MD[38] prédisait « un compte sous 16, qui n'égale pas forcément celui de la section 5 ». La variabilité est enseignée au lieu d'être figée. - Détection de panne : « 3 sondes manquées × 5 s = 15 s » calculé en tête de cellule (
ProbeTimeout=5,NumMissedProbesLimit=3), premier succès à 15,4 s après 11 échecs HTTP 500 espacés d'environ une seconde — la prédiction et la fenêtre d'échec sont toutes deux committées, avec l'avertissement que la forme varie d'une exécution à l'autre. - Arrêt propre : tours 3→4 sur PID différent (31016→31027), ligne
Deaddans la table, état relu depuis Redis, redémarrageaspire resource start— chaque affirmation de la lecture correspond à une ligne d'output. - Redémarrage complet :
94écritures pas encore sur disque / dernier instantané il y a40 s/AOF actif : Falseexplique la perte ;tours=0, etag=(aucun)relu,volumes montés = aucun, conteneur orphelin laissé paraspire stopet retiré (1), appartenance repartie à zéro. - Témoins d'exercices conformes aux claims MD[38] : ex1 « aucun volume, le Redis redémarre vide » (imprimé), ex2 « attribut (aucun) + sous 16 » (imprimé), ex3 « le rejeu ajoute un second tour » avec trois ETag distincts (
0e51…→c357…→1fbe…, imprimés). - Garde SOTA : 4 booléens
True— versions résolues par NuGet (Orleans 10.3.1 +Clustering.Redis10.3.1 +Persistence.Redis10.3.1,Aspire.StackExchange.Redis13.4.6), AppHost déclarant clustering/stockage/répliques,UseOrleans()sans argument vérifié au crible hors commentaires, serveur réelredis:8.6.
Notes (non-findings, vérifiés) :
- « Mesuré avec la CLI 13.5.2 et l'AppHost 13.4.6 » (limites honnêtes) : la version de CLI n'est imprimée par aucun output (seul « CLI Aspire presente : True » l'est ; l'AppHost 13.4.6 l'est via la garde SOTA). C'est une métadonnée d'environnement de la mesure orphelin — dont le résultat (conteneur encore en marche après
aspire stop, retiré par identifiant :1) est imprimé deux fois. Non contredite par les outputs, pas déposée. - Les PID du
describeinitial (30904/30894) diffèrent de ceux rapportés ensuite par les activations (31027/31016) : deux sources distinctes (propriétéexecutable.pidd'Aspire vs PID rapporté par le grain via l'API). Aucune claim de prose ne relie les deux ; « autre process / PID différent » s'appuie uniquement sur la seconde source, internement cohérente d'une cellule à l'autre. - Politique d'hygiène codée dans le LabShell avec sa portée exacte : le jeton du dashboard est réellement masqué dans l'output committé (
?t=<jeton local omis>), et la regex des chemins locaux est bornée par construction aux lecteurs isolés Windows (C:\…, lookbehind documenté) — le chemin Unix/root/.aspire/logs/…visible en sortie ne viole pas la portée codée, et aucune prose ne revendique une hygiène plus large. Écart net avec le stale-claim relevé au cycle 485 sur le notebook 02 (claim de prose « aucun chemin machine » falsifiée par 5 outputs) : ici l'hygiène est un mécanisme montré, pas une assertion.
Couche pédagogique : peau d'apprenant — aucun gap. Le tableau 01/02/03 d'intro installe le delta (appartenance Redis vs
UseLocalhostClustering, répliques, zéro code d'infra au silo) ; la génération est introduite en §4 avant que l'arrêt propre ne la rende visible, et le redémarrage complet en exploite la conséquence (table repartie à zéro) ; l'appartenance est vue de trois points de vue (runtimeIManagementGrain, hash Redis brut, proxy HTTP) avant toute conclusion ; chaque scénario de mort isole une variable — l'annonce (arrêt propre), le silence (Process.Kill+ sondes), la perte totale (Redis lui-même) — et l'activation unique (8 tours,activations distinctes : 1, throw sinon) précède le placement qui la complique. La lecture du placement est le meilleur moment du notebook : elle calcule pourquoi la colocalisation n'est pas garantie puis fait vérifier par l'exercice que le compteur a bougé. Exercices sans leak (indices directionnels, solutions vérifiées solubles tenues hors du dépôt, classeVerifà trois issues témoin/à revoir/OK). Limites honnêtes closes en tableau (Redis sans réplication, 2 silos/1 machine, pas de client externe, proxy de dev, geste de nettoyage à revérifier sur version ultérieure).Claims structurelles vérifiées contre l'arbre :
OrleansClusterLab/=apphost.cs,Silo/Program.cs,Silo/Grains.cs,Silo/Silo.csproj,aspire.config.json— conforme à l'annonce §1.Case cochée :
Integrations-DotNet/Orleans/04-Orleans-Aspire-Cluster-Redis.ipynb— série Orleans soldée 4/4 (01: 1 finding stale-claim sur 4 notebooks, 02, 03, 04 : 0).- L'identité de silo
Audit NanoClaw cycle 488 —
GenAI/Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/configurer-chatbots-par-l-api.ipynb(lane #17073, fire 18:05Z)Première entrée NC dans la série AI-Engine-WordPress (20 notebooks, dont 03-1-Chatbots = 7).
Passe mécanique : 21 cellules (md=14, code=7), ec 1→7 séquentiel, 14 headers distincts, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel python3, fichier 28 714 o.
Findings : 3 (stale-claim ×3).
-
Cellule MD[11] id=39280045 (repris en MD[20] id=0e3d80ab) — extrait : «
maxTokensdu document n'est pas une borne stricte. Mesure sur cette instance :maxTokensà 96 dans le JSON du chatbot, le modèle a produit 3775 tokens. Passe au niveau de la requête (champmaxTokensdu POST/ai/completions), le plafond est respecté — mais la réponse peut alors être vide » — classe : stale-claim — pourquoi : les valeurs citées (96 → 3775, puis « 128 tokens, 0 caractère visible » en Provenance) ne figurent dans aucun output committé et contredisent la table imprimée deux cellules plus haut (maxTokens 1024 chezvalmontetcomite) ainsi que les tokens réels committés (completion_tokens 1828/2001) — l'apprenant ne peut rien vérifier, alors même que le phénomène enseigné (le plafond document n'est pas une borne : 1024 → 1828/2001) est prouvé par les outputs de cette exécution. -
Cellule MD[11] id=39280045 — extrait : « Si la différence compte (moderation, filtrage, role metier), il faut la verifier par la mesure, jamais la supposer — c'est la lecon des grains 7-8 de
cadrer-les-agents.md. » — classe : stale-claim — pourquoi : le document cible (lien valide, fichier présent) ne contient aucun « grain » — ses sections sont « Mécanisme 1 — cadrer par le catalogue », « Mécanisme 2 — cadrer par le prompt », « Le piège central »… — le renvoi interne « grains 7-8 » ne correspond à aucune structure existante du document pointé. -
Cellule MD[1] id=1aea394a — extrait : « |
configurer-chatbots-par-l-api(ce notebook) | lire, dupliquer, écrire et interroger des chatbots | | notebooks suivants | RAG/embeddings, agents MCP, formulaires, WooCommerce | » — classe : stale-claim — pourquoi : trois des quatre volets annoncés existent (03-3 RAG-et-Embeddings, 03-4 MCP-Server, 03-2 Forms) mais aucun notebook WooCommerce n'existe dans l'arbre (mesuré sur main, casse insensible) et le README racine de la série ne mentionne WooCommerce que comme contexte du terrain livresagités (catalogue de la boutique) — le panorama de série annonce un volet notebook inexistant.
Croisements prose↔outputs exacts (non-findings) : trois
botId(default/valmont/comite) et 54 champs par document ;gpt-5.5/0.8/4096 vsqwen3.6-35b-a3b/0.6/1024 exacts dans la table ; « Ecriture acceptee : True » + relecture['default','valmont','comite']+ « instructions persistees : True » ; la même question posée mot pour mot aux deux personas ; la mesure de vocabulaire partagé imprimée (49/100 (49%)) sans être figée par la prose, avec l'avertissement de non-déterminisme — la variabilité est enseignée au lieu d'être cachée. Le lien../../../cadrer-les-agents.mdrésout bien versPlateformes-Conversationnelles/cadrer-les-agents.md(c'est la référence interne qui est morte, pas le lien). Le renvoi «livresagites-parcours.md, parcours 0 : module Client » aboutit en deux sauts : le Parcours 0 est un bandeau de déménagement explicite vers01-Architecture/architecture-en-modules.md, qui porte bien les trois familles Client / Server / Admin — redirection fonctionnelle, non déposé. «apiKeyest vide sur les chatbots de cette instance » : métadonnée d'environnement non contredite par les outputs (l'allowlist interdit par construction d'imprimer la valeur). « Chaque exercice se vérifie d'une ligne de test » : aucune ligne de test n'est fournie dans le fichier, mais la phrase reste lisible comme une propriété des exercices (« vérifiable d'une ligne ») — pas prouvable comme faute, non déposé.Gates #17040 : une lecture markdown par output de code, placée après (MD[5]←CODE[4], MD[8]←CODE[7], MD[11]←CODE[10]) ; zéro narration d'exercice (stubs vides, aucune solution) ; aucune prose de remplissage.
Couche pédagogique : peau d'apprenant — arrivée impeccable. L'ordre canonique est confirmé par le README 03-Functional : la chaîne « par son API » commence par
presenter-ai-engine-par-son-api(placé dans 03-5, les dossiers sont thématiques, pas séquentiels — le README l'explicite), puis ce notebook — le positionnement « deuxième de la série » de MD[0] est correct. Le survol du notebook 1 montre que tous les prérequis y sont posés : mêmes helpers (api(),clean_text(),extrait()), catalogue des routesmwai/v1, les chatbots en lecture (sa section 3), une première completion réelle survalmont(sa section 4) — zéro gap. La progression lire → écrire (read-modify-write, idempotence posée AVANT le POST qui l'utilise) → interroger (mesure comparative) est exactement décomposée ; l'exercice 3 compose les exercices 1+2 aveccopier_configuration()déjà vue ; la découverte « un chatbot est un document JSON » est introduite par l'output (54 clés imprimées) avant d'être commentée. Les deux réponses LLM sont interprétées une fois chacune, la mesure honnête du persona (« oriente, ne garantit pas ») est le meilleur moment pédagogique du notebook. Prose aérée, trois niveaux de lecture annoncés et tenus, limites closes en Provenance.Note de série : les 3 stale-claims relèvent de la même famille que les ratés documentés aujourd'hui sur #17073 pour l'organe
check_stale_claims(#18354) — deux sont des renvois inter-documents (grains 7-8, WooCommerce) que l'organe ne couvre pas s'il ne vérifie que les valeurs citées vs outputs. Sous le seuil « >3 occurrences » : dépôt individuel, pas de proposition d'organe de ma part ; l'information est versée ici pour la lane qui suit #18354.Case cochée :
GenAI/Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/configurer-chatbots-par-l-api.ipynb(1ʳᵉ de la série AI-Engine-WordPress).-
Audit NanoClaw cycle 489 —
GenAI/Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynb(lane #17073, fire 21:05Z)Passe mécanique : 27 cellules (md=16, code=11), ec 1→11 séquentiel, 12 headers distincts, 0 doublon Jaccard>0.55, 0 CJK, nbformat 4.5, kernel python3, fichier 40 175 o.
Findings : 3 (stale-claim ×3).
-
Cellule MD[17] id=55937dd8 — extrait : « Le refus attendu est 403 « No authorized files to delete » — a distinguer soigneusement du 400 « No valid files to delete » du contrat mal forme (section suivante) : le premier dit ce fichier n'est pas a toi, le second dit je ne trouve aucun fichier dans ta demande. » — classe : stale-claim — pourquoi : le code 403 et son message exact sont cités verbatim (et la distinction 403/400 est le cœur du propos de la cellule) alors que l'unique output committé du test croisé (CODE[16] ec=6) dit « VALMONT_ADMIN_PASSWORD absent : test croise non execute » — aucune sortie de ce run ne porte ce 403, et le Bilan le réaffirme (« 403 croise pour l'etranger ») : invérifiable par l'apprenant qui exécute le notebook tel qu'il est committé.
-
Cellule MD[22] id=7e154c54 — extrait : « Cinq routes, dont
downloadetfinetune— la derniere ouvre la porte au ajustement de modeles depuis les fichiers de l'installation (une fonctionnalite dont la gratuite ne montre que la porte). » — classe : stale-claim — pourquoi : la cellule censée l'imprimer (CODE[21] ec=8, « la carte du miroir admin ») n'a aucun output committé (vérifié dans le JSON brut du fichier) — ni « cinq routes », nidownload, nifinetunene sont étayés par la moindre sortie du notebook, alors que la lecture en tire une leçon de contraste entre les deux namespaces. -
Cellule MD[1] id=910dfb27 (dernière ligne de la table de série, clôturée par le Bilan MD[22] : « Avec cette dixieme note, la serie a couvert les quatre faces, la regie des environnements, les donnees structurees, l'autorisation deleguee et la memoire ephemere. ») — extrait : « |
donner-une-memoire-ephemere-au-chatbot-par-l-api(ce notebook) | fichiers : la memoire ephemere | » — classe : stale-claim — pourquoi : le README 03-Functional (ordre canonique restauré, note de méthode docs(ai-engine,#12127): tranche 5 — 03-Functional/ + 19 notebooks reclassés #13434) compte onze notebooks dans la chaîne « par son API » —joindre-un-fichier-au-chatbot-par-l-api.ipynb(11ᵉ, « ferme le dossier pièces jointes » : comment un fichier téléversé entre-t-il dans une completion) existe sur main mais n'apparaît ni dans la table ni dans le Bilan, qui donne la série pour close à dix notes — l'apprenant qui arrive par ce panorama rate la suite directe du notebook qu'il vient de lire.
Croisements prose↔outputs exacts (non-findings) : TTL « exactement 1:00:00 — 60 minutes » vérifié par la soustraction committée ; 400 « Purpose is required. » verbatim ;
refId= 32 caractères hexadécimaux, nom du fichier dans l'URL rendue (comparaison octet pour octetTrue) ; ficheid: 4/userId: 4sur carte vide ; « expire a : 0:59:59.686609 » et « 0,31 seconde s'est deja ecoulee » (3600 − 3599,686609 = 0,313 s) ; 400 « No valid files to delete » cette fois mesuré (output de CODE[18]) ;{'success': True, 'deleted': 1}puistotal final : 0— le cleanup rend l'état initial, prouvé partotal. La coupure du flux stdout de CODE[12] (« total : » / « 1 » en deux morceaux) est un artefact de flux, pas du notebook.Non-findings arbitrés : « un appel a files/list sur une instance propre rend zero fichier » vs
id: 4— l'écart est assumé et enseigné par le notebook lui-même (« la carte ment par omission », MD[13]) ; « deux uploads du meme contenu recevront deux refIds differents » est explicitement marqué « deduit du role du refId et non mesure dans ce run » — la distinction prouvé/raisonné est déclarée, c'est la discipline de la série ; « le code du plugin montre » (partition des visiteurs anonymes par session) est présenté comme lecture du code externe, pas comme une mesure de run, et n'est contredit par aucun output. Renvis inter-documents vérifiés : « grain 6 » =parler-au-chatbot-en-visiteuret « grain 9 » =interroger-lassistant-de-lediteurconformes à l'ordre du README ; les trois routesmwai-ui/v1/files/*sont bien visibles dans la carte de routes du grain 9 ; « le sondage » et « les quatre faces du grain precedent » sont la langue de la série (constatés dans g9).Gates #17040 : chaque lecture suit la cellule qu'elle lit, une lecture par output (CODE[18] porte trois outputs, lus par MD[20] pour les refus et MD[19] pour le total final) ; zéro narration d'exercice (stubs
pass, cahier des charges sans solution) ; pas de prose de remplissage.Couche pédagogique : peau d'apprenant — arrivée exemplaire en 10ᵉ de la chaîne. Les prérequis sont déclarés (instance jetable,
VALMONT_EDITOR_PASSWORDposée par le grain 8, uploadswww-data) et le helperlogin_wordpress+nonce_de_wpadminest redéfini in extenso : aucun gap même sans relecture. La progression — carte vide → refus (purpose) → upload réel → TTL vérifié par soustraction → propriété → delete par refus → miroir admin — décompose la difficulté à chaque étape, et l'exercice 2 rattrape proprement le test croisé sauté. Les meilleurs moments : « la carte ment par omission » (l'id interne qui ne redescend jamais) et les trois précautions du TTL (la fiche declare sans executer ; photographie, pas chronometre ; horodatages naifs) — niveau d'honnêteté rare. Chaque sortie est interprétée une fois (frontière #13410 respectée). Les trois stale-claims sont d'autant plus regrettables qu'ils contredisent la discipline affichée par le notebook lui-même (« distinguer ce qui est prouve par les sorties de ce qui s'enonce par raisonnement », MD[10]).Note de série : 3ᵉ cycle consécutif à exactement 3 stale-claims sur AI-Engine-WordPress (488, 489). Deux des trois présents (le 403, les cinq routes) sont des valeurs citées hors outputs — la famille même des ratés documentés pour l'organe
check_stale_claims(#18354) ; le troisième (table de série incomplète vs README) est un renvoi inter-document qu'un organe valeurs-seul ne couvre pas. Toujours ≤3 occurrences : dépôt individuel, pas de proposition d'organe de ma part ; l'information est versée pour la lane #18354.Case cochée :
GenAI/Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynb(2ᵉ de la série AI-Engine-WordPress).-
[NanoClaw] Audit #17073 — cycle 490 —
Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/interroger-lassistant-de-lediteur-par-l-api.ipynb(grain 9/11 de la chaîne « par son API », case cochée, 12/268)Extraction
47 322 o → 28 cellules (15 md / 13 code), ec=1..13 séquentiel, kernel python3, cjk=0, 0 doublon Jaccard, 0 header identique (rien pour #17066). Lecture intégrale des markdown (26,7 Ko, sous le plafond) + sorties texte intégrales.
Findings
1. stale-claim — renvoi « grain 21 » inexistant
- Cellule : MD[20]
- Extrait : « le serveur refuse avec "The environment is required." : exactement l'erreur à froid du grain 21, ici déclenchée par le client »
- Classe :
stale-claim - Pourquoi : le parcours n'a aucun grain 21 (chaîne canonique = 11 grains ; census des renvois sur les 20 notebooks : partout 1..10, « 21 » unique à cette cellule) — l'erreur « à froid » est celle du grain 7 (
obtenir-donnees-structurees, qui la cite en MD d'intro et la reproduit « Appel à froid » en section 1, vérifié firsthand).
2. stale-claim —
chatIdcité sans aucun output- Cellule : MD[12]
- Extrait : « Le contrat réel est
newMessage— et il s'accompagne d'options découvertes de la même façon :instructions,messages,envId,model,chatId» - Classe :
stale-claim - Pourquoi :
chatIdn'apparaît dans aucune cellule de code ni aucun output committé (0 occurrence sur le notebook entier) ; le Bilan cite correctement les quatre champs validés — la phrase sur-déclare ce que le run prouve (gate Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 : valeur citée absente des outputs).
3. mineur — paraphrase-stack intra-cellule
- Cellule : MD[18]
- Extrait : « rend "Le lynx.". La mémoire n'a jamais été dans le serveur. La mémoire de conversation n'est pas dans le serveur : elle est à la charge du client, qui renvoie le fil »
- Classe :
paraphrase-stack - Pourquoi : même proposition énoncée deux fois de suite — couture d'édition, une des deux phrases à retirer.
Vérifications fondées (positives)
Position 9/11 exacte dans la chaîne canonique du README 03-Functional ; table MD[1] = grains 1..8 exacte ; « tour des faces » clos à 9 sans contradiction avec les grains 10-11 (pièces jointes, ouverts ensuite) ; prérequis
consent.editorcorrectement attribué au grain 8 ; tous les recoupements citations/outputs fondés (403rest_cookie_invalid_nonce, 400 « Empty message. », usage 45/10/55 soit « 10 tokens pour sept mots », L'éléphant./Lion., Chat/Le lynx. avec False/True, envId 200 / model 500) ; frontière #13410 respectée (une lecture par output, aucune empilée) ; exercices calibrés sur les sections 5/7/9. Pédagogie saine : renvois grains 1/2/4/5/6/8 tous exacts.Famille #18354 (stale-claims de renvoi sur cette série) : 4e cycle consécutif touché, 2 occurrences ici (sous le seuil d'organe).
— NanoClaw (myia-ai-01) [audit 22:2xZ]
[NanoClaw] Audit #17073 — cycle 491 —
GenAI/Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/joindre-un-fichier-au-chatbot-par-l-api.ipynb(grain 11/11 de la chaîne « par son API », case cochée ci-dessous — 13/268)Extraction
42 877 o → 26 cellules (16 md / 10 code), ec=1..10 séquentiel, kernel python3, cjk=0, 0 doublon Jaccard, 0 header identique (rien pour #17066). Lecture intégrale des markdown (29,4 Ko, sous le plafond) + sorties texte intégrales.
Findings — classe
stale-claim×4 sur ce grain : seuil >3 atteint → organe proposé sur #170731. stale-claim — renvoi « grains 3 et 9 » fautif sur le 3
- Cellule : MD[25] (Bilan)
- Extrait : « Le fil de la serie croise ici trois lecons anterieures — le contrat decouvert par refus (grains 3 et 9), le silence des couches qui ne signalent pas ce qu'elles droppent (grain 7) »
- Classe :
stale-claim - Pourquoi : le grain 3 (
administrer-les-formulaires) ne contient aucun refus committé (0 × « refus », 0 × 400/403 — son contrat y est « ecrit par l'experience », via « erreur exploitable ») ; le grain du contrat-par-refus est le 6 (parler-au-chatbot-en-visiteur: « reponse est un refus sec »,refus.status_code, « le nonce a refuse »), aux côtés du 9 (403rest_cookie_invalid_nonce+ 400 « Empty message. », vérifié cycle 490). Le couple correct est 6 et 9 — même famille [Audit #17073] Implémenter les organes stale-claim et factual-mislabel (gates) — en retard 8 j / 0 j #18354 que le « grain 21 » du cycle 490.
2. stale-claim —
newFileIdscité sans aucun output- Cellule : MD[6]
- Extrait : « La route lit
newFileId(et sa forme pluriellenewFileIds), pasfileId» - Classe :
stale-claim - Pourquoi : la forme plurielle
newFileIdsn'apparaît dans aucune cellule de code ni aucun output committé (1 occurrence au total du notebook = la citation elle-même) ; seul le singulier est prouvé par le run (cellules code 7 et 14) — la parenthèse sur-déclare le contrat (gate Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040), même classe quechatIdau cycle 490.
3. stale-claim — anecdote de run non committé
- Cellule : MD[13]
- Extrait : « la premiere image de test etait un unique pixel semi-transparent, et la reponse « surface verte claire et unie » etait exacte (le pixel etait vert a moitie opace) »
- Classe :
stale-claim - Pourquoi : la réponse citée entre guillemets n'existe dans aucun output committé — 0 occurrence sur les 20 notebooks du sous-arbre AI-Engine-WordPress (seule la citation elle-même matche) ; le lecteur ne peut ni la vérifier ni la rejouer (même sous-classe que le 403 « No authorized files » du cycle 489).
4. stale-claim — « 74 caracteres » contre un canary committé de 71
- Cellule : MD[15]
- Extrait : « Etre vu coute plus cher que lire. Le canary texte fait 74 caracteres ; entre dans le prompt comme message, il couterait de l'ordre de sa propre longueur »
- Classe :
stale-claim - Pourquoi : le canary committé (
CANARY = "MON-SECRET-EXTERNE-7341 : le colibri de Valmont dort au nord du jardin.", source de la cellule code 5 + écho en output) mesure 71 caractères (mesuré depuis le fichier) ; la valeur citée est fausse — la déduction qui suit (« une quinzaine de tokens ») vaut pour 71 comme pour 74, l'erreur est purement factuelle.
Vérifications fondées (positives)
Position 11/11 exacte : table MD[1] = chaîne canonique des 11 grains, croisée exacte avec le README 03-Functional. Renvis fondés : « sixieme grain » = face visiteur/session anonyme ✓ ; « null silencieux du septieme grain » ✓ (7 occurrences explicites dans
obtenir-des-donnees-structurees) ; « mesure par effet de bord observable » grain 10 ✓ (TTL par soustraction, cycle 489) ; 400 « Purpose is required. » du grain précédent ✓ (3 occurrences dans ses outputs committés) ; partition du dixieme grain ✓. Tous les constats du run sont fondés : 200 silencieuxfileId(canary False, purpose inchangé, 105 tokens) ;newFileId→ purposeanalysis+query_session862bcbf0 ≠ sessionId soumis 2aa021cc,query_envIdvide, 105 ; PNG construit et auto-décodé (pixels (200,30,30)/(30,60,200) exacts) ; « Les deux couleurs dominantes sont le rouge et le bleu. » + rouge/bleu True + 170 ; contrôle négatif (réponse vide, rouge False) ; nettoyage delete 2 / total final 0. Arithmétique MD[15] (105 plancher, +65 pour 128 pixels) fondée sur les outputs. Frontière #13410 respectée (une lecture par output, aucune empilée). Cosmétique : coquilles isolées (« opace », « Le sonde du jour »).Famille #18354 : 5e cycle consécutif touché — 9 occurrences de
stale-claimsur les 3 derniers grains (10 : 3, 9 : 2, 11 : 4). Seuil >3/notebook atteint ici → proposition d'organe déposée sur #17073.— NanoClaw (myia-ai-01) [audit 23:2xZ]
[NanoClaw] Audit #17073 — cycle 492 —
GenAI/Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/parler-au-chatbot-en-visiteur-par-l-api.ipynb(grain 6/11 de la chaîne « par son API », case cochée ci-dessous — 14/268)Ordre canonique et niveau PROPOSÉS (inchangés, cf. cycles 488-491, à valider par le user) : 1 presenter → 2 configurer-chatbots → 3 administrer-les-formulaires → 4 piloter-wordpress-par-mcp → 5 brancher-plusieurs-providers → 6 parler-au-chatbot-en-visiteur (ce cycle, position 6/11 exacte) → 7 obtenir-des-donnees-structurees → 8 autour-du-consent-oauth → 9 interroger-lassistant-de-lediteur → 10 donner-une-memoire-ephemere → 11 joindre-un-fichier ; niveau apprenant proposé : intermédiaire (REST WordPress + cycle session/nonce ; la série garde son arc admin → agent → visiteur).
Extraction
29 041 o → 25 cellules (16 md / 9 code), ec=1..9 séquentiel, kernel python3, cjk=0, 0 doublon Jaccard, 0 header identique (rien pour #17066). Lecture intégrale des markdown (19 Ko, sous le plafond) + sorties texte intégrales.
Garde-fou population VERT : 763 = 763 (added 0 / removed 0, head
6aa6ba8d) ; blob audité82a0a0b5= contenu extrait (sha vérifié). Skip : aucun — les 160 PR ouvertes de CoursIA contrôlées fichier par fichier, zéro ne toucheAI-Engine-WordPress(une seule PR au-delà du cap de 80 fichiers, #19502, vérifiée par pagination complète : 108 fichiers, aucun GenAI).Findings — classe
stale-claim×3 sur ce grain1. stale-claim — « neuf champs » contre 8 champs committés
- Cellule : MD[16] (id
5a10691a) - Extrait : «
replyreelle,usagecompte (prompt 77 | completion 1388), neuf champs de reponse dontactions,blocks,images» - Classe :
stale-claim - Pourquoi : l'output committé de la cellule code 5 (ec=5) liste 8 clés —
['actions', 'blocks', 'images', 'reply', 'responseId', 'shortcuts', 'success', 'usage']— et le compte « neuf » n'apparaît dans aucun output : c'est un compte dérivé d'une liste imprimée (angle mort (a) de l'organe [Audit #17073] Implémenter les organes stale-claim et factual-mislabel (gates) — en retard 8 j / 0 j #18354), donc invisible pour un contrôle appariement nombre-à-nombre.
2. stale-claim — « six routes » contre « cinq routes » pour le même objet, à deux cellules d'écart
- Cellule : MD[5] (id
74743b15), contre MD[3] (id1e7ccd31) - Extrait : « La liste des six routes de
mwai-ui/v1se lit comme un cahier des charges du visiteur : soumettre un chat (chats/submit), un editeur (editor/submit), gerer des fichiers (upload,list,delete) » - Classe :
stale-claim - Pourquoi : les deux lectures décrivent le même output (cellule code 1, ec=2) avec deux comptes différents — MD[3] écrit « cinq routes seulement », MD[5] « six routes » tout en n'énumérant que 5 endpoints ; l'output imprime 6 lignes dont la première (
/mwai-ui/v1) est l'index du namespace, pas une route. Quel que soit le compte retenu, une des deux cellules est fausse (compte dérivé, même angle mort (a)).
3. stale-claim — le handshake attribué à
mwai-ui/v1alors que la cellule poste dansmwai/v1- Cellule : MD[10] (id
3a7eec59), contre la cellule code 3 (id35adba2f) et MD[24] (id463396c0) - Extrait : « Le handshake
mwai-ui/v1rend quatre choses, et chacune a son role dans la conversation a venir. » - Classe :
stale-claim - Pourquoi : l'amorçage est posté sur
/wp-json/mwai/v1/start_session(cellule code 3) et la section « Provenance et limites » du notebook le liste elle-même en « endpoint verifie ici (firsthand) : ...POST /mwai/v1/start_session» — ormwai/v1est le namespace de l'administrateur selon la table MD[3], tandis quemwai-ui/v1n'expose quechats/submit,editor/submit,files/{upload,list,delete}: le renvoi de namespace est faux des deux côtés (sous-famille « attribution fautive », rejointe par le grain 4 qui touche lui aussimwai/v1, mesuré ×7 dans ses sources committées).
Vérifications fondées (positives)
Position 6/11 exacte (table MD[1] = chaîne canonique, grain 6 « la face navigateur : session, nonce, conversation anonyme » ✓). Toutes les valeurs citées sont présentes dans les outputs :
sessionId 5024de59...,nonce dd9b3f...,prompt 77 | completion 1388,GET /discussion-valmont/ -> 404,401 | rest_forbidden,7namespaces,botId default,stream True. Renvoi MD[14] « comme le 401 du serveur MCP, grain 4 » fondé (vérifié dans les sources committées du grain 4 : 401 ×5, « forbidden » ×4, « refus » ×4). « Les cinq sections » ✓ (5 sections numérotées dans les commentaires de code). Frontière #13410 respectée : une seule lecture par output, aucune empilée ; la lecture desnull(MD[8]) porte sur les deux clés imprimées, sans doublon. Outputs non fake : une seule complétion LLM réelle, texte variable annoncé comme tel (MD[13]/MD[24]), tokens non ronds (77/1388/1465), 9/9 cellules exécutées en séquence. Exercices : la formule « Chaque exercice se verifie d'une ligne de test » est une convention de série (formulation et stubs identiques sur le grain 3,return [], sans cellule de test là non plus) — pas un défaut propre à ce grain, rien déposé.Famille #18354 — organe
stale_claims6ᵉ cycle consécutif touché : 7 occurrences de
stale-claimsur les 4 derniers grains (10 : 3, 9 : 2, 11 : 4, 6 : 3). Les 3 instances de ce cycle sont versées à la proposition d'organe déjà déposée sur #17073 (c.5753922238 / c.5755052253 / c.6027293394), sans amendment : elles relèvent des deux sous-familles existantes (« compte dérivé d'une liste imprimée » ×2, « attribution de namespace » ×1). Au-delà du seuil >3/notebook, les occurrences suivantes de cette classe ne seront plus déposées individuellement — elles iront à l'organe.— NanoClaw (myia-ai-01) [audit 00:1xZ]
- Cellule : MD[16] (id
66 remaining items
[NanoClaw — cycle 559, 10/10 08:16Z] — série GenAI / Audio (02-Advanced)
Notebook :
MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-4-Demucs-Source-Separation.ipynb— 37 cellules (23 md / 14 code), 13 118 007 o (WAV embarqués), blob maina617a58f, extraction first-hand (0 lecture de JSON brut). Run committé 2026-08-20 19:20:24→19:20:32, Mode batch, devicecuda(RTX 3090), ec 1→14 strictement séquentiels, CJK 0, doublons Jaccard AUCUN, 33 headers sans paire identique. Nav « << 02-3 MusicGen » / « Suivant >> 03-Orchestration/03-1 » : les deux cibles résolues contre l'arbre git du head, OK. Avec ce carnet, le dossier Audio est complet (plus aucun reste sur 01-/02-/03-/04-).F1 —
fake-output· code 29id=3f9669c0· « STATISTIQUES DE SESSION … Date : 2026-08-20 19:20:32 … Resume des stems separes : drums : RMS=0.0260, Peak=0.5033 … vocals : RMS=0.0081, Peak=0.1623 » · les sorties committées de ce run se contredisent entre elles : (a) chronologie impossible — code 4 (ec=3) imprime le départ « Date : 2026-08-20 19:20:24 », code 10 mesure « Modele charge en 1.7s », code 17 mesure « Separation terminee en 15.31s », donc la séparation ne peut se terminer avant ~19:20:41, or code 29 (ec=12) imprime « 19:20:32 » — l'épilogue est horodaté ~9 s AVANT la fin de la séparation qu'il récapitule ; (b) code 29 réimprime le dictstem_resultsrempli par code 17 avec des valeurs différentes (vocals RMS 0.0119→0.0081 soit −32 %, other Peak 0.4829→0.5368 soit +11 %) — rien entre ec=7 et ec=12 ne mute ce dict. Les sorties proviennent d'au moins deux exécutions cousues dans un run affiché ec 1→14 (gate #17040, outputs fake).F2 —
paraphrase-stack· md 30id=27887774+ md 31id=876f56bd· « ## Exemple guide : Separation et Remixage Creatif avec Metriques de Qualite … 1. Créer une fonctionseparate_and_evaluatequi : … 3. Experimentation creative : … Un remix "karaoke" … un remix "acapella" … calculer le SDR (Signal-to-Distortion Ratio) approximatif » puis « ## Section 5 : Exemple guide Pratique - Pipeline de Separation avec Metriques … vous implementerez deux fonctions principales » · le même exercice guidé est posé deux fois à la suite : md 30 donne l'énoncé complet (mêmes deux fonctions, mêmes 3 remixes, même SDR, avec indices), puis md 31 re-pose le brief paraphrasé avant les stubs (code 32id=607151a5implémente exactementseparate_and_evaluate+create_custom_remix) — empilement typique campagne densité, invisible au Jaccard car c'est une paraphrase, pas une copie.F3 —
navigation-misplaced· md 31id=876f56bd· « ## Section 5 : Exemple guide Pratique - Pipeline de Separation avec Metriques » · la Section 5 s'ouvre après la cellule de clôture du carnet : code 29 (ec=12) imprime « PROCHAINES ETAPES … Notebook Demucs Source Separation termine - 19:20:32 » et la conclusion (md 36) n'arrive qu'après les exercices — les Sections 1 à 4 précèdent toutes leur code, la 5e et ses exercices vivent après l'épilogue statistique.stale-claim ×4 — comptées, organe #18402 (cumul Audio 67 → 71) :
- md 0
id=160674c7· « Technologies : Meta Demucs v4 (htdemucs_ft), ~4 GB VRAM » (+ prérequis « GPU NVIDIA avec au moins 4 GB VRAM ») vs OUT[10] « VRAM utilisee : 0.64 GB » — écart ×6. - md 11
id=3a59dc27· « | Temps de chargement | runtime machine-dep : 2.6s (observe) | » vs OUT[10] « Modele charge en 1.7s » — la valeur « observée » (2.6 s) n'existe dans aucune sortie committée (+53 % vs 1.7 s) ; les 3 autres lignes du tableau sont exactes. - md 18
id=fadb1259· « 15.31 s pour 10 s d'audio signifie que la séparation n'est pas un traitement temps réel — un morceau de 3 minutes demande une quarantaine de secondes » — l'extrapolation du ratio mesuré (1,53×) donne ~276 s (~4 min 35 s), facteur ~7 : la phrase se contredit dans sa propre lecture. - md 21
id=4b3a362e· « | Boost basse | Augmenter bass +3dB | » vs OUT[22] « Bass boost (+6dB) : {'drums': 1.0, 'bass': 2.0, 'vocals': 1.0, 'other': 1.0} » — les 3 autres lignes du tableau des cas d'usage correspondent aux 4 remixes exécutés, celle-ci non.
Mineurs comptés, non déposés : md 7
id=99061a39« ## Dependances GPU Optionnelles … Pour les activer: / Sans ces dependances, le notebook s'executera en mode API uniquement » — template inachevé (la liste annoncée par « Pour les activer: » n'existe pas) et contredit frontalement md 5id=83a69f24« Demucs est un modèle entièrement local … aucune cle API n'est requise » à deux cellules d'écart — récidive ×3 (cycles 557 01-5 Kokoro, 558 02-1 Chatterbox, 559) ; code 2id=95a99de8« BATCH_MODE = "true" » paramètre orphelin (jamais lu — code 26 testenotebook_mode/skip_widgets), déjà compté sur 00-1, non re-déposé ; numérotation : « Exercice 1 » (md 19), « Exercice 2 » (md 24), puis deux « Exemple guide » non numérotés (md 30, md 31), puis « Exercice 3 » (md 34) — deux consignes à rendre hors numérotation entre le 2 et le 3 (aval de F2) ; md 36id=a97ba7c8conclusion template au titre slug illisible (« les aspects essentiels de 02 4 demucs source separation »).Vérifié sans réserve : md 14
id=5ffb827c— les 4 caractéristiques du tableau = CODE[13] exactement (impulsions 120 BPM = interval 0,5 s ; basse 80 Hz ; voix 300±50 Hz ; accord C5/E5/G5 = 523,25/659,25/783,99 Hz), mix stéréo 10 s ✓ ; md 18 (hors instance n°3) — tableau « Valeur mesurée » exact ligne à ligne vs OUT[17] : 15,31 s, ratio ~1,5× recalculé juste, shape [1, 4, 2, 441000], les 8 RMS/crêtes ; md 23id=a25190a4— figure 5 axes +stems_waveforms.png+ 4 remixes avec volumes exacts (colonne « Qualité résultante » qualitative, non vérifiable, non comptée) ; md 11 — VRAM 0,64 GB, 4 sources, 44100 Hz exacts ; exercices 1/2/3 — stubs TODO propres (code 20/25/35), indices exacts, 0 fuite de solution ; tableaux SDR « littérature » explicitement disclaimés (« pas des mesures de ce carnet »).Frontière #13410 (output-uninterpreted) : respectée — chaque sortie majeure porte sa lecture placée après son code (OUT[4]→md 5, OUT[10]→md 11, OUT[13]→md 14, OUT[17]→md 18, OUT[22]→md 23, OUT[26]→md 27), aucune lecture en double, aucun enrichissement ajouté.
Skip : 0 — 136 PRs open croisées au pré-vol, aucune ne touche
GenAI/Audio/02-Advancedni Demucs.Garde population : VERT 772/772 (
origin/main07593d0bd, added 0 / removed 0, diff d'ensembles surgit ls-tree -r -zdu clone blobless). Artefact organes ai-01 toujours absent de #17073 → aucune passe d'organes (python3 indispo au siège).Désignation 560 =
GenAI/00-GenAI-Environment/00-7-Terminal-Long-Runs.ipynb(dernier non-audité du dossier 00-GenAI-Environment ; notebook le plus récent de la partition NC, ajouté 08/10 via PR #19803).— NanoClaw (myia-ai-01) [08:16Z]
- md 0
[NanoClaw — cycle 560, 10/10 09:14Z] — série GenAI / 00-GenAI-Environment
Notebook :
MyIA.AI.Notebooks/GenAI/00-GenAI-Environment/00-7-Terminal-Long-Runs.ipynb— 25 cellules (15 md / 10 code), 35 611 o, blob main2266bdd3, extraction first-hand (0 lecture de JSON brut). Run committé jeu. 2026-10-08 00:45:02 → 00:45:23 (horodaté par les sorties tmux elles-mêmes — cohérent avec l'ajout du carnet via PR #19803 le 08/10), ec 1→10 strictement séquentiels, CJK 0, doublons Jaccard AUCUN. Nav « ← 00-6 Local Docker Deployment » + lienREADME.md: les deux cibles résolues contre l'arbre git du head, OK (dernier carnet du dossier, pas de « Suivant », conforme). Avec ce carnet, le dossier 00-GenAI-Environment est complet (00-1 → 00-7).F1 —
fake-output· md 12id=286436d0+ code 6id=2034852d· « la boucleforrelève la progression toutes les 6 secondes. Le pattern est exactement ce qu'on applique à un vrailake build: à chaque tick,capture-paneramène les dernières lignes, on peut afficher un indicateur ou arrêter la boucle sur un mot-clé (lake build rc=0) » · les sorties committées de code 6 (ec=7) contredisent la narration : les quatre relèvescapture-panesont vides —--- t=6s ---,--- t=12s ---,--- t=18s ---puis--- fin ---sont chacune suivies de rien, alors quebuild_simexécuteecho "[$(date ...)] Compiling $module..."directement dans le pane (pas de redirection, contrairement à la démo 1) : la démonstration que la lecture décrit n'a pas eu lieu dans le run committé, et la lignelake build rc=0n'apparaît dans aucune sortie du carnet (gate #17040). La capture vide de code 3 (ec=4), elle, est expliquée (sortie redirigée vers/tmp/tmux-demo.log) — c'est le vide de code 6 qui invalide la prose.stale-claim ×1 — comptée, organe #18402 (cumul dossier 00-GenAI-Environment 0 → 1) :
- md 6
id=458fd695· « après 6 secondes, le log montre lestick 1àtick 3— lefora bien tourné » vs OUT[code 2] (ec=3) : le log committé montretick 1 at 00:45:02…tick 4 at 00:45:08— quatre ticks, pas trois ; le fond (session survolante) tient, la valeur citée est fausse.
Mineurs comptés, non déposés : références de cellules « cellule 4 » (md 0), « cellule 7 » (code 7), « cellule 15 » (code 8) — vérifiées exactes en numérotation 1-indexée des cellules physiques, aucune faute ; md 13 « Le carnet doit s'exécuter end-to-end même non-complété » — vérifié : aucun
raise, stubspass, code 9 (ec=10) rend « Verdict supervise_tmux : None (attendu: OK) » sans erreur ; le carnet dévie du gabarit des siblings (pas de « ## 🎯 Objectifs d'Apprentissage / ## 📚 Prérequis », remplacés par « Pourquoi ce carnet » + prérequis inline md 0) — écart de style sans impact, non déposé ; 00-6 ne pointe pas en avant vers 00-7 (nav écrite avant l'ajout du 08/10) — hors périmètre ce cycle (00-6 déjà audité), compté.Vérifié sans réserve : md 3 — « tmux 3.x courant » / OpenSSH livré : OUT[code 0] « tmux 3.4 (rc=0) », « OpenSSH_9.6p1 » ✓ ; md 5 — « une ligne toutes les 2 secondes pendant 24 secondes » = code (12 ×
sleep 2) et ticks committés 00:45:02→00:45:23, session listée partmux ls✓ ; md 9 — mini-serveur « meurt avec elle (daemon=True + server.shutdown()) » = code exact, réponse « hello from WSL » ✓ ; md 10 — « unps -ef | grep sshmontre les tunnels actifs » lu honnêtement : OUT[code 5] « aucun tunnel ssh détecté » ; md 12 (hors F1) — le bloc « Adaptation au vrai Lean » citelake exe cache getet l'issue #19735, vérifiée open firsthand (« Lean-34 — lake build cold cache depasse le timeout 1800s en re-execution »), et le siblingLean-03b-Formalized-Formal-Logic-Lean-Python.ipynbcité en md 14 existe dans l'arbre (1 matchls-tree) ; exercices 1/2/3 — stubs TODO propres, indices exacts, 0 fuite de solution ; honnêteté pédagogique remarquable (md 9 : « on ne peut pas tester un vrai tunnel SSH sans machine distante », cellule d'illustration qui ne prétend pas se connecter).Frontière #13410 (output-uninterpreted) : respectée — chaque sortie majeure porte sa lecture placée après son code (OUT[code 0]→md 3, OUT[code 1]→md 5, OUT[code 2]→md 6, OUT[code 3]→md 7, OUT[code 4]→md 9, OUT[code 5]→md 10, OUT[code 6]→md 12), aucune lecture en double ; la sortie d'exercice (code 9) est autoporteuse (bloc de test qui imprime son propre verdict). Aucun enrichissement ajouté.
Skip : 0 — 143 PRs open croisées au pré-vol (fichiers PR par PR ; garde page-2 sur la seule PR à 100 fichiers = #19664, fichiers CI uniquement), aucune ne touche le notebook.
Garde population : VERT 772/772 (
origin/main07593d0bd, added 0 / removed 0, diff d'ensembles surgit ls-tree -r -zdu clone blobless). Artefact organes ai-01 toujours absent de #17073 (scan des 273 commentaires : les derniersmyia-ai-01sont des relais coordinateur) → aucune passe d'organes (python3 indispo au siège).Désignation 561 =
GenAI/Image/01-Foundation/01-1-OpenAI-DALL-E-3.ipynb(dossier Image/01-Foundation vierge côté NC : 7 restants, dont 01-5c ajouté récent déjà SOURCÉ au ledger ; reprise du balayage série par série après la clôture d'Audio et du dossier 00).— NanoClaw (myia-ai-01) [09:14Z]
- md 6
[NanoClaw — cycle 561, 10/10 10:15Z] — série GenAI / Image/01-Foundation
Notebook :
MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-1-OpenAI-DALL-E-3.ipynb— 37 cellules (21 md / 16 code), 6 946 060 o, blob main9d0abc95, extraction first-hand (0 lecture de JSON brut ; les 4 figures committées vérifiées par empreinte, jamais chargées). Run committé mer. 2026-10-07 03:26:01 → 03:27:57, ec 1→16 strictement séquentiels, CJK 0, doublons headers AUCUN. Nav « Index → ../README.md » + « Suivant → 01-2 » : les deux cibles résolues contre l'arbre git ✓. Point d'entrée du dossier par design (README 01-Foundation : API cloud d'abord, « simples et immédiates ») ; note d'honnêteté documentaire DALL-E 3 → gpt-image-1 (mddalle3-gpt-image1-disclosure) vérifiée exacte contre les sorties.F1 —
fake-output· md 11id=eg2-lecture+ code 9id=eg2-mesure· « La mesure : à ce tirage, l'imagevividest plus saturée (135,6 contre 111,0, soit +24,6 sur 255) et plus lumineuse (86,1 contre 78,6) que l'imagenatural» · aucune des 4 valeurs citées n'existe dans les sorties committées, qui donnentvivid : saturation moyenne 136.6 | luminosite moyenne 84.5/natural : saturation moyenne 123.3 | luminosite moyenne 93.1— la lecture décrit un tirage antérieur non mis à jour, et le sens même est inversé : le run committé anaturalPLUS lumineuse (93,1 > 84,5) alors que la lecture affirme vivid plus lumineuse et réserve l'inversion à « un tirage antérieur » (gate #17040 : citation absente = fabriquée).stale-claim ×2 — comptées, organe #18402 (cumul dossier Image/01-Foundation 0 → 2) :
- code 11
id=f28d27b1· « Style 'vivid' pour images créatives, 'natural' pour réalisme / Qualité 'hd' pour impression, 'standard' pour web / DALL-E 3 Standard (1024x1024): ~$0.040 par image / DALL-E 3 HD: ~$0.080 » vs la démonstration du carnet lui-même : l'exemple guidé 2 prouve questylen'est PAS transmis (payload = model/prompt/n/size/quality, sortie « Les deux requetes etaient identiques ») et gpt-image-1 n'accepte que low/medium/high/auto — 'hd'/'standard' produit une erreur 400 ; le bloc conseils de l'ère DALL-E 3 n'a pas suivi la migration alors que la même cellule imprime « Modèle utilisé: gpt-image-1 ». - md 14
id=ed100025· « La Section 5 montre des prompts optimisés avec : … » — aucune section numérotée n'existe dans le carnet (renvoi flottant d'une numérotation antérieure ; les prompts optimisés vivent dans le bloc non numéroté « Fonction de generation et prompts »).
Mineurs comptés, non déposés : le CHALLENGE BONUS et les « References savantes » (md 14) sont placés AU MILIEU du carnet (entre le bloc conseils code 11 et l'exemple guidé 3), le challenge renvoyant en avant à « l'exemple guidé 3 » qu'il précède ; md 12 « le mode interactif vous invite a tester vos propres prompts » vs run committé en branche batch (« [batch] Mode batch - Interface interactive desactivee ») — dualité auto-documentée dans le code, prose écrite pour la branche non exécutée ; md 3 « repli (fallback) automatique vers gpt-image-1 » — aucun fallback à l'exécution dans le run : model_name=gpt-image-1 dès la config (PR #4230), le mécanisme décrit n'est pas observable dans les sorties ; md 16 cite « 18 % / 21 % / 15 % » et « 49 % / 32 % / 64 % » de « trois exécutions successives pendant l'intégration » — explicitement attribuées à d'autres runs, invérifiables par nature (pas une violation de gate).
Vérifié sans réserve : md 3 — « le résultat commité montre
Connexion API OpenAI reussie - 0 modeles DALL-E disponibles» ✓ EXACT (sortie code 3) ; md 9 — payload{model, prompt, n, size, quality}✓ identique au code, tableau du groupe « More saturated » ✓ ; md 7 « À savoir » — fallback revised_prompt = prompt d'origine ✓ dans le code ET les sorties (« Prompt revise : aucun renvoye par l'API (gpt-image-1) » ×3) ; md 8 — « pour les trois niveaux, l'API n'en renvoie aucun » ✓ ×3 ; md 16 (eg3) — TOUTES valeurs exactes : pixels chauds 15,1 % → 64,3 % (+49,2 pts), froids 84,8 % → 35,6 %, luminosité −4,1 (189,5 → 185,5), « 17 et 78 mots » ✓ ; conclusion — Forge SD XL Turbo (01-4) ✓, Qwen-Image-Edit (01-5) ✓,03-1-Multi-Model-Comparison✓ existe dans l'arbre (03-Orchestration/) ; exercices 4-6 — stubs TODO propres, indices d'une précision remarquable (HSV 0-255, circularité de la teinte, masque S<30, secteurs chauds/froids), 0 fuite de solution ; renumérotation interne « exemple guidé N = exercice N » cohérente (eg1-3 = exercices 1-3 devenus guidés, exercices étudiants 4-6).Frontière #13410 (output-uninterpreted) : respectée — exactement UNE lecture par exemple guidé, placée APRÈS son code (eg1 → md
eg1-lecture, eg2 → mdeg2-lectureaprès la cellule de mesure, eg3 → mdeg3-lecture), aucune doublée, aucune avant son code ; la démo (code 6) reste sans lecture dédiée — pas une violation de gate (maximum 1, pas minimum). Aucun enrichissement ajouté.Skip : 0 — 144 PRs open croisées au pré-vol (fichiers PR par PR), aucune ne touche le notebook.
Garde population : VERT 772/772 (
origin/main07593d0bdinchangé, added 0 / removed 0). Artefact organes ai-01 toujours absent de #17073 (274 commentaires) → aucune passe d'organes (python3 indispo au siège).Désignation 562 =
GenAI/Image/01-Foundation/01-2-GPT-5-Image-Generation.ipynb(dossier Image/01-Foundation : 6 restants après ce cycle ; ligne checklist 01-5c ajoutée ce cycle, absente comme 00-7 l'était).— NanoClaw (myia-ai-01) [10:15Z]
- code 11
[NanoClaw — cycle 562, 10/10 11:10Z] — série GenAI / Image/01-Foundation
Notebook :
MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-2-GPT-5-Image-Generation.ipynb— 30 cellules (16 md / 14 code), 90 222 o, blob maincab830ab, extraction first-hand (0 lecture de JSON brut). Run committé 2026-06-24 06:44:53, ec 1→14 strictement séquentiels, CJK 0, doublons headers AUCUN. Nav « Index → ../../README.md (GenAI) » + « Précédent → 01-1 » + « Suivant → 01-3 » : les trois cibles résolues contre l'arbre git ✓ ; la conclusion renvoie à04-1-Educational-Content-Generation✓ existe (Image/04-Applications). Arrivée au bon moment après 01-1 (génération → analyse), ordre du README respecté.F1 —
reading-before-code(défaut SYSTÉMIQUE, 4 occurrences, 1 dépôt) · mdvkgiro82pk7(cellule 14) · « La cellule précédente lance trois appels successifs sur l'imageArchitecture Historique… | Quick | 206 | 942 | 7.76s | » · la cellule précédente réelle (code66a1b41e) ne fait que LISTER les exemples — les trois appels et le tableau cités sont produits par code368e963bplacé APRÈS la lecture, qui décrit donc une sortie que l'apprenant n'a pas encore sous les yeux (gate #17040 : lecture placée APRÈS la cellule lue). Même inversion ×3 : mdjxwlftsm05(« la cellule précédente appelle analyze_image_with_gpt5() … 114 caractères ») avant codea01bfa80qui génère l'alt text ; mdhtbu4le2fb(« la cellule précédente tente input() ») avant code0bc5a8f8; mdgkk2vqpxov(« la cellule précédente catalogue cinq domaines ») avant code03146442. Les QUATRE premières lectures du carnet (on4ridys1z,c9dx4xmi4ka,9un0u6qzrtv,r56pmixdacs) sont correctement placées — l'inversion commence à la moitié du carnet, signature d'une insertion ancrée à la mauvaise cellule. Candidat organe (marqué comme tel) :check_reading_placement— toute md « Lecture du résultat » doit suivre la cellule de code dont elle cite les sorties.stale-claim ×4 — comptées, organe #18402 (cumul dossier Image/01-Foundation 2 → 6) :
- md
a07f0ce4(Ressources complémentaires) · « Templates éducatifs :docs/genai-phase2-templates.md» — fichier ABSENT de tout le dépôt (ls-tree recursif, 0 hit). - md
a07f0ce4· « Standards CoursIA :docs/genai-images-development-standards.md» — ABSENT également (0 hit repo-wide). - md conclusion (cellule 30, sans id) · « le modèle ne se contente pas de générer des images à partir d'un prompt texte, il analyse et produit dans un même flux » + « GPT-5 […] couvrant l'axe compréhension + génération » — le carnet ne démontre AUCUNE génération :
analyze_image_with_gpt5()ne fait que POST/chat/completions(image en entrée, texte en sortie) ; aucun output du run ne contient d'image produite par GPT-5. Le titre « Analyse et Génération d'Images » porte la même sur-promesse. - md
a07f0ce4(Prochaines étapes) · « Combinez avec DALL-E 3 pour génération + analyse » — DALL-E 3 retiré au profit de gpt-image-1, comme la disclosure du carnet précédent (01-1 md 3) l'établit ; l'ère citée est celle que le dossier vient de quitter.
Les 4 instances sont sémantiques/externes (liens morts, capacité non démontrée, ère de modèle) — hors périmètre direct de check_stale_claims.py (citation-vs-output), note de périmètre comme cycles 551/560/561.
Mineurs comptés, non déposés : md 7 obs. 3 « 206 caractères est dans la plage WCAG (<125) après trim » — 206 > 125, l'affirmation est auto-contradictoire (l'alt text conforme du carnet fait 114 chars via prompt dédié, pas via quick + trim) ; paramètre Papermill injecté
BATCH_MODE(code17aab9f8) jamais lu dans le carnet — orphelin (dans 01-1 la branche batch est prise, ici c'estnotebook_modequi pilote tout) ; figure-missing — les 4 images URL analysées ne sont jamais affichées (matplotlib importé pour « visualisation locale optionnelle », jamais utilisé) : la « surprise factuelle » Colisée→Gran Vía est invisible pour l'apprenant sans ouvrir l'URL à la main ; en-tête md 0 « Module : 01-Images-Foundation » vs dossier réelImage/01-Foundation.Vérifié sans réserve : md 3 — deps +
Mode: interactive, Analyse: detailed, Niveau: university, Langue: francais, Max tokens: 4000✓ EXACT (sortie code 3) ; md 4 — 26 modèles ✓,Contexte: 400000pour openai/gpt-5 ✓, 1 050 000 pour 5.5-pro/5.4-pro ✓ (« 2.6× plus » = 2,625 ✓) ; md 7 — tableau comparatif INTÉGRALEMENT exact contre les sorties committées (206/942/7.76s, 2606/1791/19.14s, 2908/2256/25.73s, coûts $0.0037/$0.0113/$0.0155, reasoning_tokens 192→320→704) ; md 9 — alt text 114 caractères + citation VERBATIM ✓ (sortie code 10) ; md 11 — « Mode interactif non disponible (exécution automatisée) » ✓ (sortie code 12, except EOFError réel du run) ; md 12 — les 5 domaines + template Médecine ✓ verbatim (sortie code 13) ; exercices 1-3 — stubs TODO propres (Exercice a completer), indices précis (structure prompt, ≤125 chars, 3 modes), 0 fuite de solution ; usage exemplaire deusage/cost_detailsdans les lectures de la 1re moitié — c'est ce qui rend l'inversion de placement d'autant plus nette.Frontière #13410 (output-uninterpreted) : respectée en DENSITÉ (exactement 1 lecture par sortie majeure, aucune doublée) — le défaut F1 est de POSITION, pas de redondance ; aucune réécriture proposée (candidate marquée, jamais élément de travail).
Skip : 0 — 131 PRs open croisées au pré-vol, aucune ne touche le notebook.
Garde population : VERT 773/773 — drift +1 SOURCÉ firsthand :
GameTheory/SocialChoice/09-Committees-STV-Monroe-ChamberlinCourant.ipynbajouté par merge7a0521584(PR #19372, EPIC #19263, 10/10) ; population-nc.json mis à jour (772→773), head9d3b6110c. Artefact organes ai-01 toujours absent de #17073 (275 commentaires, derniers = lignes additives NC) → aucune passe d'organes.Désignation 563 =
GenAI/Image/01-Foundation/01-3-Basic-Image-Operations.ipynb(dossier Image/01-Foundation : 5 restants après ce cycle).— NanoClaw (myia-ai-01) [11:10Z]
- md
[NanoClaw — cycle 563, 10/10 12:08Z] — série GenAI / Image/01-Foundation
Notebook :
MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-3-Basic-Image-Operations.ipynb— 43 cellules (28 md / 15 code), 3 756 503 o, blob maind395a7cd, extraction first-hand (0 lecture de JSON brut). Run committé 2026-09-27 19:58:27, mode batch (.env non trouve), PIL 11.3.0, ec 1→15 strictement séquentiels, CJK 0, doublons headers AUCUN, aucun couple md au Jaccard > 0.35. Nav résolue contre l'arbre git ✓ : « Index → ../../README.md », « précédent → 01-2-GPT-5-Image-Generation.ipynb », « suivant → 01-4-Forge-SD-XL-Turbo.ipynb » ; les 3 tutoriels cités (dalle3-complete-guide.md,gpt5-image-analysis-guide.md,educational-workflows.md) existent ✓. Arrivée au bon moment après 01-2 (analyse d'image → manipulation d'image) ; le carnet lui-même désigne sa place (Section 5 : « image de test … chargée depuis URL en Section 1 »).F1 —
exercise-mismatch· mdedf341ad(cellule 20, Exercice 3) + code6e1e5d75(cellule 21) · consigne « 3. Presenter les résultats dans un DataFrame avec une ligne par (filtre, canal) », dont le gabarit décommentable porte# df_hist = pd.DataFrame(rows)puis# print(df_hist.pivot(index='filtre', columns='canal', values='median'))· pandas n'est ni importé par le carnet ni dans la cellule de dépendances (les 7 paquets contrôlés sont PIL, requests, matplotlib, numpy, dotenv, ipywidgets, IPython —numpyest bien importé ennp,pdn'existe nulle part) : l'apprenant qui suit l'exercice tel qu'écrit tombe surNameError: name 'pd' is not defined. Énoncé et gabarit cohérents entre eux, mais désynchronisés des dépendances réelles.stale-claim ×5 — comptées, organe #18402 (cumul dossier Image/01-Foundation 6 → 11). Ces cinq instances opposent une lecture du paquet densité à la sortie committée : le carnet a été ré-exécuté le 27/09 URL redevenue joignable, et ces lectures décrivent le run précédent (hors ligne, image de test
Generated) — un fait de méthode, pas cinq coquilles indépendantes.- md
interp-load-013(cellule 9) · « L'URL de démonstration était indisponible (timeout réseau) : le notebook bascule sur son image de test déterministe — un gradient RGB 800x600 en modeGenerated» — la sortie committée dit l'inverse : « ✅ Image chargée depuis URL … 📦 Format: JPEG » (800x600 RGB, ~1406.2 KB). - md
interp-api-013(cellule 27) · « les trois variantes (1024x1024, 1792x1024, 1024x1792) pèsent ici 5.5–9.4 KB » — sortie : « ✅ 1024x1024: 1110.2 KB / ✅ 1792x1024: 1608.5 KB / ✅ 1024x1792: 1636.7 KB » (facteur ~100). - md
interp-api-013· « l'image JPEG de 18 031 octets devient une chaîne de 24 044 caractères (~23.5 KB) … (24 044 caractères décodés en 18 031 octets) » — sortie : « Base64 encoded: 84340 chars / Payload size: ~82.4 KB / Round-trip vérifié : 84340 caractères -> 63253 octets décodables ». - md
interp-geom-013(cellule 12) · « LeUserWarningsur les glyphes DejaVu Sans visible dans la sortie » — ce warning n'apparaît dans aucune sortie committée ; les occurrences du motif dans le fichier sont le commentaire de la cellule 5 (« ET n emet pas le UserWarning Agg dont la traceback fuitait le chemin temporaire du kernel »), c'est-à-dire la note disant que le backend a été choisi précisément pour l'éviter, et la phrase elle-même. - sortie
9f06e8c5(cellule 35, récapitulatif) · « Notebooks Suivants : 02-1-Prompt-Engineering-Visual.ipynb / 02-2-Multi-Model-Comparison.ipynb / 03-1-Advanced-Image-Processing.ipynb » — les trois sont absents de l'arbre (0 hit en ls-tree récursif) : le dossier 02-Advanced commence à02-2-FLUX-1-Advanced-Generation.ipynb, et le 03-1 réel est03-1-Multi-Model-Comparison.ipynb.
Note de périmètre : contrairement aux cycles 551/560/561/562 (instances sémantiques/externes — liens morts, capacité non démontrée, ère de modèle), ces cinq-ci sont des citation-vs-output (valeur citée absente de la sortie committée) : elles tombent DANS le périmètre direct de
check_stale_claims.py. C'est la première fois que la famille est capturable par l'organe, et non seulement comptable.Mineurs comptés, non déposés : md
interp-formats-013(cellule 33) affirme « Régime dual … la hiérarchie s'inverse » à propos de la compression d'une photo haute résolution — branche que le run n'exécute pas ; seule la branche gradient est committée, l'affirmation est donc posée comme fait (candidat d'enrichissement, marqué comme tel, jamais élément de travail) ; deux blocs de clôture successifs — cellule 41guide-suivant-013puis cellule 42cell-63bd4614, cette dernière générique (« Ce notebook a permis d'explorer les aspects essentiels de 01 3 basic image opérations… ») ; en-tête md 0 « Module : 01-Images-Foundation » vs dossier réelImage/01-Foundation(même mineur qu'au cycle 562).Vérifié sans réserve : cellule de dépendances (code 5) — les 7 paquets réellement requis sont tous dans la liste contrôlée, sortie « Toutes les dependances sont disponibles » ✓ ; md
interp-env-013— PIL 11.3.0, mode batch,.env non trouve, widgets disponibles ✓ exacts ; mdinterp-geom-013(hors point 4) — resize (400,300)/(1200,900), rotation 45°→(990,990) et 90°→(600,800), thumbnail (200,150), « 8 transformations effectuées » ✓ ; mdinterp-filters-013— « 14 filtres/effets appliqués » et les 5 familles ✓ verbatim ; mdinterp-exif-013— « 1 tags EXIF importants », « Total tags EXIF: 13 », Orientation 1, métadonnées PNG personnalisées ✓ ; mdinterp-api-013(hors points 2-3) — image lisse 512x512 → 2.0 KB ✓, image dense 768x768 refusée par le contrat de taille (« 1770929 octets > 512000 octets autorisés ») ✓, c'est bien le ValueError du run ; mdinterp-formats-013— JPEG_Q75 61.0 KB, WEBP_Q90 76.5 KB, PNG 561.2 KB, ratio 0.399, « Économie maximale: 89.1% », ~1406 KB, « chargée depuis URL en Section 1 » ✓ TOUS exacts ; mdinterp-widgets-013—skip_widgets=True, désactivation propre en batch ✓ ; mdnote-debug-013— la Section 7 convertit bien RGBA→RGB avant JPEG, la Section 2 montre resize ET thumbnail ✓ ; exercices 1-3 (et l'exemple guidé) — stubsExercice a completerpropres, une seule sortie par stub, 0 fuite de solution ; 3 figures PNG committées (571 220 / 1 710 856 / 1 333 200 o), aucun output fake (pas de N/A, pas de QuantBook seul, pas de nombre rond isolé).Frontière #13410 (output-uninterpreted) : respectée — les 10 cellules
interp-*/note-debugsont placées APRÈS la cellule dont elles décrivent la sortie, jamais deuxinterp-*pour la même sortie (les cellules 36-37 qui suivent le récapitulatif ont des rôles distincts : lecture du résultat, puis note de débogage) ; aucune réécriture proposée (candidat marqué, jamais élément de travail).Skip : 0 — 127 PRs open croisées au pré-vol, aucune ne touche
GenAI/Image/01-Foundation.Garde population : VERT 773/773 — head
603300c00f57c4d091784ea5ca6b4d444b3c5551, added 0 / removed 0 (aucun drift à sourcer). Artefact organes ai-01 toujours absent de #17073 (276 commentaires, derniers = lignes additives NC) → aucune passe d'organes.Désignation 564 =
GenAI/Image/01-Foundation/01-4-Forge-SD-XL-Turbo.ipynb(dossier Image/01-Foundation : 4 restants après ce cycle — 01-4, 01-5, 01-5b, 01-5c).— NanoClaw (myia-ai-01) [12:08Z]
- md
[vllm] 1 dossier(s) livrés à 12:13Z (01-4-Forge-SD-XL-Turbo) par DM RSM
[vllm] 3 dossier(s) livrés à 13:11Z (01-5-Qwen-Image-Edit, 01-5b-Qwen-Image-Edit-2509, 01-5c-Qwen-Image-21-Workflows) par DM RSM
[NanoClaw — cycle 564, 10/10 13:12Z] — série GenAI / Image/01-Foundation
Notebook :
MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-4-Forge-SD-XL-Turbo.ipynb— 28 cellules (16 md / 12 code), 9 611 060 o, blob mainc09284ba, extraction first-hand (0 lecture de JSON brut). ec 1→12 strictement séquentiels, CJK 0, doublons headers AUCUN, aucun couple md au Jaccard > 0.55. Nav résolue contre l'arbre git ✓ : « Index → ../../README.md » (GenAI/README.mdexiste), « Précédent → 01-3-Basic-Image-Operations.ipynb », « Suivant → 01-5-Qwen-Image-Edit.ipynb » (les deux présents). Arrivée au bon moment après 01-3 (manipulation d'image → génération locale Forge). Le carnet s'annonce lui-même comme le volet local du dossier : URLturbo.stable-diffusion-webui-forge.myia.io,.envattendu dansGenAI/,FORGE_USER/FORGE_PASSWORD.F1 —
block-pasted-wrong-section· mdbb33087f(cellule 5) et md84b5eaa7(cellule 17)Deux cellules markdown dont le contenu intégral est un docstring Python nu — les guillemets triples sont rendus littéralement à l'écran, et la prose attendue n'existe pas :
bb33087f:"""/Vérification du statut de l'API et affichage d'une bannière visuelle/"""(77 caractères, rien d'autre) — introduit la cellule245d391d(ec=3) qui affiche la bannière de statut.84b5eaa7:"""/Techniques Avancées de Génération/Ce bloc explore des techniques avancées pour améliorer vos générations:/1. Reproductibilité avec seed fixe/2. Exploration créative avec seeds aléatoires/3. Génération batch optimisée/"""(226 caractères) — introduit la cellule7b1a4121(ec=9), qui implémente exactement ces trois techniques.
Le contenu est le bon, à la mauvaise place : un titre de section et son chapeau ont été collés comme docstring dans une cellule markdown (ou l'inverse), au lieu d'être du markdown. Effet apprenant : les deux sections charnières du carnet (statut API, techniques avancées) s'affichent avec des triples guillemets parasites et sans hiérarchie de titre, alors que les 14 autres cellules md du même carnet utilisent correctement
##/###. 2 occurrences dans ce carnet (< seuil de 3) → findings individuels, pas de proposition d'organe. Je n'ai pas pu établir l'échelle hors de ce carnet (le code-search GitHub n'indexe pas le contenu.ipynb: contrôle positifbanniere= 45 hits sur des.md/.py, contrôle négatifgenerate_with_seed= 0 alors que la fonction est bien dans le carnet) — claim restreinte à ce fichier.F2 —
exercise-mismatch· mdb233da93(cellule 19, Exercice 2) + coded884489c(cellule 20) contre code7b1a4121(cellule 18, ec=9)La consigne demande une comparaison paramétrique : « 2. Testez au moins 3 valeurs de
cfg_scale(1.0, 2.0, 4.0) / 3. Testez au moins 2 samplers différents (DPM++ 2M,Euler a) / 4. Observez et comparez les résultats ». Or l'helper que l'apprenant est invité à utiliser —generate_with_seed(prompt: str, seed: int), défini cellule 18 — fige les deux paramètres à tester :"cfg_scale": 2.0, "sampler_name": "DPM++ 2M"
et son corps n'expose aucun paramètre
cfg_scale/sampler_name. Le gabarit de l'exercice (d884489c) définit biencfg_values = [1.0, 2.0, 4.0]etsamplers = ["DPM++ 2M", "Euler a"], boucle dessus, mais appellegenerate_with_seed(prompt_fixe, seed=seed_fixe) # TODO etudiant : utilisez generate_with_seed en passant cfg_scale et sampler_name— un TODO littéralement insatisfiable : passer ces deux arguments lèveTypeError: generate_with_seed() got an unexpected keyword argument. La sortie committée montre le résultat : six lignes identiquesTest : cfg=1.0, DPM++ 2M…Test : cfg=4.0, Euler apuisExercice a completer— six appels aux paramètres identiques, aucune image comparée, l'énoncé et son propre outil se contredisant. L'exercice ne peut pas être fait tel qu'écrit sans réécrire l'helper de la cellule 18.stale-claim ×4 — comptées, organe #18402 (cumul dossier Image/01-Foundation 11 → 15). Le carnet cite « ~18s » comme latence fixe de génération en quatre endroits, tous contredits par la sortie committée de la cellule
7b1a4121(ec=9) :✅ Batch terminé: 3/3 succès en 8.7s— soit ≈2,9 s/image, et par le propre avertissement du carnet (5fb555e4, cellule 9) qui pose que « le temps exact dépend du GPU … il s'observe à l'exécution de la cellule suivante, pas dans un nombre figé » :- md
a23ad93d(cellule 1) · « Performance: ~18s pour génération 512×512 (4 steps) ». - code
245d391d(cellule 6) · la bannière HTML générée porteGénération rapide 4-steps • Performance ~18s— chaîne en dur dans le code, donc re-rendue à chaque exécution. - md
c36e7b8c(cellule 21) · « Timeouts courts: Génération prend ~18s, timeout < 30s risqué ». - md
47afc16f(cellule 27) · « … résolution512×512, latence ~18s par image ».
Fait de méthode : les quatre citations décrivent un run antérieur (le même « ~18s » qu'au cycle 563 sur 01-3, où le carnet avait été ré-exécuté le 27/09 après rétablissement de l'URL) — ce n'est pas quatre coquilles indépendantes mais une valeur figée propagée, ce que la mesure committée (2,9 s/image) réfute d'un facteur ~6.
Mineurs comptés, non déposés : (a)
a791f513(cellule 2) et546c829a(cellule 3) décrivent le même flux d'authentification en deux blocs successifs (encadré ASCII puis mermaid, la cellule 3 disant elle-même « reprend la logique … décrite ci-dessus ») — redondance assumée par le texte, candidate à consolidation ; (b)382be6c9(cellule 23) annonce « La requête échoue après 60 secondes » et proposeTIMEOUT = 90 # au lieu de 60, alors que le carnet définit déjàTIMEOUT = 90(3fc1fc62, cellule 4, ec=2, commentaire « Couvre le chargement à froid du modèle ») — la valeur citée est périmée au sein du carnet, mais c'est une citation-vs-code, hors du périmètre nominal decheck_stale_claims.py(citation-vs-output) ; (c)3fc1fc62(cellule 4) importe deux foisosetfrom dotenv import load_dotenv; (d)53e3c112(cellule 22) s'intitule « Exemple 4 » sans Exemple 3 ni 2 ni 1 dans le carnet — numérotation orpheline ; (e)a23ad93d(cellule 1) porte un titre anglais « Use Cases » au milieu d'un carnet français ; (f)382be6c9(cellule 23) et51b98993(cellule 26) présentent tous deuxGUIDE-APIS-ETUDIANTS.mdcomme « Documentation API Complète » via../../../../docs/archive/suivis/genai-image/…: le chemin résout ✓ mais pointe dansdocs/archive/— guide vivant rangé aux archives, à rapatrier (candidat d'enrichissement, marqué comme tel, jamais élément de travail) ; (g) trois cellules de clôture md consécutives en fin de carnet (382be6c9Tips/Troubleshooting, puis249cdb76Exercice 3, puis51b98993+47afc16f).Vérifié sans réserve : cellule de dépendances
3fc1fc62— sortie « Toutes les dependances sont disponibles » +.env charge depuis: .env✓ ;245d391d(ec=3) — bannière de statut + « ✅ API Forge accessible et prête à l'utilisation »,display_datatext/html ✓ ; figures — les 11 appelsset_title/suptitledu carnet titrent effectivement chaque planche (comparaison de variationsComparaison: Impact des Variations de Prompt,Exploration Créative: Même Prompt, Seeds Différents,Génération Batch Thématique), les 7 sortiesimage/pngcommittées ont toutes leur<Figure size … with N Axes>✓, aucune image non légendée ; 2 stubs d'exercice (610,801:print("Exercice a completer")) — 0 fuite de solution, une seule sortie par stub ; réponses committées cohérentes avec les prompts affichés (✅ Image générée (512×512)après chaque🎨 Génération en cours:), 3 variations de prompt et 3 seeds aléatoires rendues en planches de 3 ✓ ; aucun output fake (pas de N/A, pas de QuantBook seul, pas de nombre rond isolé) ;7b1a4121— les seeds affichés (387196 / 160912 / 552089) sont bien aléatoires et distincts ✓.Frontière #13410 (output-uninterpreted) : respectée — chaque lecture précède immédiatement la cellule dont elle décrit la sortie (ordre CODE→MD régulier de
9ef8fd65à47afc16f), jamais deux lectures pour une même sortie ; aucune réécriture proposée (le point (f) ci-dessus est un candidat marqué, pas un élément de travail).Skip : 0 — 133 PRs open croisées au pré-vol (pagination complète, fichiers de chaque PR lus), aucune ne touche
GenAI/Image/01-Foundation.Garde population : VERT 773/773 — head
2efe466967e959c9c60e4424e4c4d3abf37ccd8e, added 0 / removed 0 (aucun drift à sourcer). Artefact organes ai-01 toujours absent de #17073 (derniers commentaires = lignes additives NC sur l'organe #18402) → aucune passe d'organes ; le pointeur[vllm] 1 dossier(s) livrés à 12:13Z (01-4-Forge-SD-XL-Turbo)de #19451 est signalé mais livré hors de mon siège (DM RSM), non consulté.Désignation 565 =
GenAI/Image/01-Foundation/01-5-Qwen-Image-Edit.ipynb(dossier Image/01-Foundation : 3 restants après ce cycle — 01-5, 01-5b, 01-5c).— NanoClaw (myia-ai-01) [13:12Z]
[NanoClaw — cycle 565, 10/10 14:11Z] — série GenAI / Image/01-Foundation
Notebook :
MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-5-Qwen-Image-Edit.ipynb— 33 cellules (18 md / 15 code), 971 932 o, blob mainfe3e186a, extraction first-hand (0 lecture de JSON brut). ec 1→15 strictement séquentiels, CJK 0, doublons headers AUCUN (60 headers, aucun identique), aucun couple md au Jaccard > 0.55. Nav résolue contre l'arbre git ✓ : « Index → ../../README.md », « Précédent → 01-4-Forge-SD-XL-Turbo.ipynb » — mais aucun lien « Suivant » alors que01-5b-Qwen-Image-Edit-2509.ipynbexiste et que la conclusion du carnet y renvoie explicitement (cf. mineurs). Arrivée au bon moment après 01-4 : le carnet pose ComfyUI (queue + polling) comme second backend après l'API REST Forge, architecture Phase 29 (trois loaders séparés, CFGNorm, TextEncodeQwenImageEdit).F1 —
block-pasted-wrong-section· mdc9320969(Bonnes Pratiques, table « Optimisation Performance ») et mda2ed9f00(section « Pattern Image-to-Image »)Deux blocs dont le contenu appartient à un autre carnet (générique SDXL/Forge), collés dans un carnet dont TOUTE l'architecture repose sur des règles contraires :
c9320969: la table « ### 2. Optimisation Performance » recommande| **cfg** | Minimal | 7-8 optimal |et pose| **denoise** | Minimal | N/A |. Or la règlecfg=1.0(CFGNorm gère l'amplification, pas le CFG classique) est énoncée cinq fois ailleurs dans ce même carnet : table des paramètres («| **cfg** | 1.0 | Doit rester a 1.0 car CFGNorm gere l'amplification |»), pattern i2i réel, indices de l'Exercice 3 («cfgdoit rester a 1.0 »), inputs du gabarit ("cfg": 1.0, # cfg=1.0 obligatoire), conclusion. Etdenoiseest LE paramètre enseigné tout du long (table 0.1/0.5/0.9, expérience 0.2/0.5/0.8, Exercice 2) — pas « N/A ». Un apprenant qui réglerait cfg à 7-8 sur ce pipeline obtiendrait exactement les artefacts que la conclusion du carnet promet d'éviter.a2ed9f00: la section « Workflow: 1. Load Image → 2. CLIP Vision Encode → Encoder image / 3. CLIP Text Encode → Encoder prompt édition → … » décrit un pipeline IP-Adapter/SD classique : ces deux nodes n'existent dans aucun des trois workflows réels du carnet (11 + 12/14 + 12 nodes : tous encodent le prompt viaTextEncodeQwenImageEditet l'image viaVAEEncode, avecConditioningZeroOuten négatif — jamais de CLIP Vision Encode). La section correcte existe deux cellules plus loin ; celle-ci enseigne un vocabulaire de nodes que l'apprenant ne verra nulle part.
2 occurrences dans ce carnet (< seuil de 3) → findings individuels, pas de proposition d'organe.
F2 —
progression-break· md6b0cfba1(et md02b39df7) contre codef8377a10(ec=10) et code0ae4672d(ec=11)Le carnet construit une expérience de
denoiseen deux temps —02b39df7pose méthodologie, hypothèse et config ;6b0cfba1annonce l'exécution : « La configuration du test d'exploration est prete. La cellule suivante execute la comparaison des différentes valeurs du paramètredenoiseet affiche les résultats cote a cote. » — mais aucune sortie committée n'exécute cette comparaison :f8377a10(ec=10, la cellule du test) : zéro sortie committée ; sa branche test s'arrête àresults_denoise = [].0ae4672d(ec=11, « la cellule suivante » désignée) : ne fait que définir des helpers — sortie committée : « ✅ Fonctions comparaison avant/après définies … 💡 Décommentez les exemples ci-dessus pour tester avec vos images ».- La boucle 0.2/0.5/0.8 ne vit que dans le stub de l'Exercice 2 (
748ed8f5, ec=12), dont la sortie se termine par « Exercice a completer ».
L'arc méthodologie → exécution → lecture des résultats est cassé au maillon central : l'exécution affirmée au présent n'existe dans aucun output, et la lecture promise (« résultats cote a cote ») n'a rien à lire. (Nuance honnête :
f8377a10contient un garde-fou batch « Skip: test denoise necessite image uploadee » — mais ce message lui-même est absent des sorties committées, la cellule n'en a aucune.)stale-claim ×2 — comptées, organe #18402 (cumul dossier Image/01-Foundation 15 → 17). La même valeur figée « 5-10 secondes » présentée comme latence/temps attendu, contredite par les DEUX sorties committées du carnet :
- md
5f600ebe(cellule 1, table caractéristiques) · «| **Latence Typique** | 5-10 secondes |». - md
561a6819(pré-cellule hello world) · « Temps attendu: 5-10 secondes (512x512) ».
Contre :
464d7878(ec=5) « ✅ Complet en 321.4s » (premier run à froid) et8620219d(ec=9) « ✅ Complet en 67.3s » / « Edition complete en 67.3s » (run chaud) — facteur 7 à 32 selon le régime. Le carnet SAIT que la valeur est fausse : son propre client documentemax_wait: 900s : le premier run doit charger Qwen Image Edit en VRAM(98a0a453, ec=3). Même famille que « ~18s » des cycles 563-564 : valeur figée d'un run antérieur propagée dans deux cellules.Mineurs comptés, non déposés : (a)
927efa2d(ec=2) importe deux foisosetfrom dotenv import load_dotenv; (b)b8a7388b— lecture scindée : sa 1ʳᵉ phrase interprète le test de connectivité de464d7878(3 cellules plus tôt, séparée par tout l'Exercice 1), sa 2ᵉ annonce correctementfc95b446; (c) nav sans lien « Suivant » (cf. en-tête) alors que 01-5b existe ; (d)15d72cb2(Ressources) lieGUIDE-APIS-ETUDIANTS.mdvia../../../../docs/archive/suivis/genai-image/…— le chemin résout ✓ mais range un guide vivant aux archives (même constat que cycle 564 sur 01-4, candidat d'enrichissement marqué, jamais élément de travail) ; (e) même cellule : « Qwen-VL Quick Start: Guide rapide édition images » classé Débutants, alors que la même cellule prend soin de poser Qwen-VL comme « distinct du modèle d'edition Qwen-Image-Edit enseigne ici » — une ressource VLM présentée comme guide d'édition.Vérifié sans réserve : configuration
927efa2d— « Toutes les dependances sont disponibles »,.env charge depuis: .env, « API: http://127.0.0.1:8188 (LOCAL_MODE=True) », « Token: configure » ✓ ; hello world464d7878— 11 nodes, workflow queued (UUID affiché), image chat 512×512 rendue en figure titrée, 321.4s ✓ ; édition8620219d— source « chat tigre » uploadée (input (2).png), panneau avant/après 1200×500 (2 axes) affiché ET sauvegardé « assets\readme\img1-qwen-edit2.png » ✓ ; cohérence inter-cellules :db2a6654(ec=15) re-vérifie les deux assets gallery — « OK img1-qwen-edit.png (281 KB) / OK img1-qwen-edit2.png (472 KB) », exactement les fichiers que8620219ddit avoir sauvés ✓ ; les 4 exercices sont de vrais stubs sans fuite (d421f0da:workflow_buggy = None;748ed8f5: boucle d'en-têtes seulement ;618d0c92: loaders Phase 29 fixés + TODO sur image/prompt/denoise uniquement, rappel « cfg=1.0, scheduler='beta' » dans la sortie ;77267186:result = None+ auto-test sur faux client qui lèveConnectionError→ « renvoie None ») ✓ ; le bonustester_prompts_exerciceest explicitement étiqueté « EXEMPLE GUIDE, pas l'exercice » avec l'appel commenté — pas une fuite ✓ ; références savantes correctement différenciées (arXiv:2508.02324 rapport Qwen-Image vs 2308.12966 Qwen-VL, distinction énoncée dans le texte) ✓ ; aucun output fake (pas de N/A, pas de QuantBook, pas de nombres ronds isolés) ; aucun doublon de section ni de bloc.Frontière #13410 (output-uninterpreted) : respectée — aucune sortie n'a deux lectures, aucune réécriture proposée. Les deux figures majeures (chat hello-world
464d7878, panneau avant/après8620219d) n'ont PAS de lecture postérieure — candidats d'enrichissement marqués comme tels, jamais éléments de travail.Skip : 0 — pré-vol du cycle (133 PRs open croisées, fichiers de chaque PR lus) : aucune ne touche
GenAI/Image/01-Foundation.Garde population : VERT 773/773 — head
2efe466967e959c9c60e4424e4c4d3abf37ccd8e, added 0 / removed 0. Artefact organes ai-01 toujours absent de #17073 → aucune passe d'organes.Désignation 566 =
GenAI/Image/01-Foundation/01-5b-Qwen-Image-Edit-2509.ipynb(dossier Image/01-Foundation : 2 restants après ce cycle — 01-5b, 01-5c).— NanoClaw (myia-ai-01) [14:11Z]
[vllm] 2 dossier(s) livrés à 14:12Z (02-3-Stable-Diffusion-3-5, 02-4-Z-Image-Lumina2) par DM RSM
[vllm] 2 dossier(s) livrés à 15:14Z (02-2-FLUX-1-Advanced-Generation, 02-5-Bonsai-Image-Ternary) par DM RSM
[NanoClaw — cycle 566, 10/10 16:20Z] — série GenAI / Image/01-Foundation
Notebook :
MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-5b-Qwen-Image-Edit-2509.ipynb— 42 cellules (27 md / 15 code), 6 104 931 o, blob main9b63b26d, extraction first-hand (0 lecture de JSON brut, empreintes sha8 sur les 6 images committées). ec 1→15 strictement séquentiels. Nav résolue contre l'arbre git ✓ : « Précédent → 01-5-Qwen-Image-Edit » ✓, « Suivant → 01-5c-Qwen-Image-21-Workflows » ✓ (existe dans l'arbre). Arrivée au bon moment après 01-5 : le carnet réutilise le client ComfyUI de 01-5 et monte en gamme (denoise, masques programmatiques, batch, CFGNorm).F1 —
stale-claim· mdgjiyry24wsw(« Interpretation : Résultats de l'Inpainting »)Extrait : « L'inpainting a remplace la zone masquee par un nouvel élément : | Cohérence spatiale | Le laptop s'integre naturellement dans la scene | | Qualité des bords | La transition avec l'arriere-plan est fluide grace au masque adouci | | Consistance lumineuse | L'eclairage du laptop correspond a l'ambiance du coffee shop | »
Pourquoi : la cellule d'exécution adjacente (ec=9) porte dans ses sorties committées « 🚀 Soumission du workflow... / API non disponible: Exception / Workflow defini - necessite API ComfyUI active » — aucune image n'a été générée dans le run committé. Le tableau interprète des résultats d'inpainting qui n'existent dans aucun output : trois observations qualitatives fabriquées de toutes pièces (gate #17040, valeur citée absente des sorties). C'est la classe exacte que l'organe
check_stale_claimsne peut pas attraper (aucune valeur de mesure chiffrée) — sémantique, hors périmètre #18402.F2 —
reading-before-code· md sans id (entre le client ec=3 et les workflows ec=4)Extrait : « Génération de l'image réussie avec dimensions 1024x768. »
Pourquoi : placée juste après la cellule de health-check (sorties committées : « État du service: healthy / VRAM: 21.7 / 25.8 GB libre »), elle annonce une génération réussie et des dimensions qui n'apparaissent dans les sorties qu'à la cellule ec=5 (« Dimensions: (1024, 768) »), six cellules plus bas. À sa position, la claim lit une sortie qui n'existe pas encore — la lecture devance le code qu'elle prétend lire.
F3 —
block-pasted-wrong-section· mdcell-0(en-tête) et mddw2367dvov(objectifs)Extraits :
cell-0« # Qwen Image Edit 2509 - Édition Avancée d'Images / Module : 02-Images-Advanced / Niveau : Intermédiaire/Avancé / Durée estimée : 45 minutes » ;dw2367dvov« ## Qwen Image Edit 2509 - Édition Avancée d'Images / Module : 02-Images-Advanced / Niveau : Intermédiaire/Avancé / Durée estimée : 45 minutes »Pourquoi : l'en-tête complet (navigation identique + titre + module + niveau + durée + les 3 prérequis verbatim) apparaît deux fois à deux cellules d'écart — le second bloc est un collage redondant du premier. En outre, dans
cell-0, la liste d'introduction est éclatée par l'insertion de la « Note savante » : les items « - Batch processing pour l'efficacité » et « - Analyse comparative des paramètres » atterrissent après le blockquote, coupés de leurs trois premiers items.F4 —
paraphrase-stack· mddadagfpmkwo+ md sans id (entre ec=7 et sa lecture), contre code ec=7Extraits : md sans id « 0.3 "Changements subtils, structure tres preservee", 0.5 "Modifications visibles, bonne balance", 0.7 "Transformations significatives", 0.9 "Quasi-regeneration, peu de l'original conserve" — le paramètre balaye de la retouche à la régénération » ;
dadagfpmkwo« | 0.3 | Changements subtils, structure très preservee | Retouche photo, correction couleur | ... »Pourquoi : la cellule ec=7 imprime déjà ses quatre observations dans sa sortie committée ; le md sans id les recopie verbatim, puis
dadagfpmkwoles reprend une troisième fois en tableau. Trois narrations du même output — la frontière #13410 (une lecture par sortie) est franchie deux fois sur cette cellule. Même structure une cellule plus haut : la sortie de ec=3 est lue deux fois (mdp5h3jbfh8zk« Le client ComfyUI est instancie et la connexion validee », puis md sans id « healthy avec 21.7 / 25.8 GB de VRAM libre » re-placée après ec=4). Le signal : ces lectures empilées décrivent des sorties auto-narrées par le code.Comptées, non déposées : (a) md sans id « Le masque est prêt... mais la soumission ne passe pas dans ce run » — exacte vis-à-vis de ec=9 mais positionnée avant la cellule (même famille F2, 1 occurrence) ; (b) md sans id « Trois workflows sont définis (Architecture Phase 29)... CFG=1.0 recommandé... scheduler 'beta'... 20 steps » — re-narration verbatim de la sortie ec=4, mal placée en plus après ec=5 ; (c) md
8txuf4lm17g: « le temps total reste raisonnable » — aucune mesure de temps dans les sorties (le reste de la table est conforme : 4× « Succes » + « 4 images generees avec succes ») ; (d) md7fbd7073: le tableau reprend le print d'observations CFG de ec=12, mais apporte l'explication CFGNorm absente du code — frontière moins nette ; (e) étiquette « Module : 02-Images-Advanced » sur un carnet du dossier 01-Foundation (contradiction d'étiquetage, cosmétique).Vérifié sans réserve : config ec=2 — « Toutes les dependances sont disponibles », « API URL: http://127.0.0.1:8188 », « Token: Configure », « .env: charge » (le défaut du code est
https://qwen-image-edit.myia.io, le .env du run surchargeait — la lecture md reflète la sortie, pas de contradiction) ; t2i ec=5 — workflow queued (UUID affiché), figure 1200×900, « Dimensions: (1024, 768) » ✓ ; denoise ec=7 — 4 générations (0.3/0.5/0.7/0.9), figure comparative 5 panneaux ✓ ; masque ec=8 — upload + visualisation 3 panneaux ✓ ; batch ec=11 — 4× « Succes », grille 4 images, « 4 images generees avec succes » ✓ ; les 3 exercices sont de vrais stubs sans fuite (style_prompts = None,inpaint_prompt_circle = None,scheduler_prompt = None, solutions commentées) ✓ ; références savantes correctement différenciées (arXiv:2502.13923 Qwen2.5-VL 2025 vs 2308.12966 Qwen-VL 2023, distinction énoncée dans le texte — même soin que 01-5) ✓ ; aucun output fake N/A/QuantBook ; aucune valeur numérique ronde isolée.Frontière #13410 (output-uninterpreted) : aucune proposition d'ajout de lecture. Les deux figures majeures sans lecture postérieure (t2i ec=5, grille batch ec=11) : candidats d'enrichissement marqués comme tels, jamais éléments de travail. Les doubles lectures existantes sont signalées en F4, pas réécrites ici.
Skip : 0 — 143 PRs open croisées (fichiers de chaque PR lus) : aucune ne touche
GenAI/Image/01-Foundation.Garde population : VERT 773/773 — head
a492cda2b(force-push main mesuré ce cycle), added 0 / removed 0. Artefact organes #18402 publié — 0 instance du cycle dans son périmètre (F1 sémantique, F2/F4 positionnels) ; cumul dossier Image/01-Foundation inchangé à 17.Désignation 567 =
GenAI/Image/01-Foundation/01-5c-Qwen-Image-21-Workflows.ipynb(dernier carnet du dossier 01-Foundation).[NanoClaw — cycle 567, 2026-10-10 17:05Z — audit #17073, partition NanoClaw]
Notebook :
MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-5c-Qwen-Image-21-Workflows.ipynb— 26 cellules (15 md / 11 code), blob45d9d788, extraction first-hand depuis main (streams tronqués à empreintes + extraits), execution_count 1→11 séquentiel sans trou.F1 — stale-claim (sémantique)
- Cellule : markdown
c14_015c(« ### Lecture du resultat », §4), en appuic12_015c(§4 intro) et sortie committée de la cellule code 13. - Extrait verbatim (
c14_015c) : « Le temps mesure, rapporte a la reference 12 Go de l editeur, donne l'ordre de grandeur du gain de l'instance dediee. » — et (c12_015c) : « La reference de l'editeur mentionne ~2 minutes a 4 MP sur une carte a 12 Go -- l'instance dediee (24 Go, INT8) doit faire mieux ; la mesure ci-dessous le dit. » - Sortie committée (code 13, ec=6) : « Generation : 190 s -- 1184x1760 px (2 MP demandes) ».
- Classe :
stale-claim. - Pourquoi : ramenée au mégapixel, la mesure committée (190 s @ 2 MP ≈ 95 s/MP) est ~3× plus lente que la référence citée par le carnet lui-même (~120 s @ 4 MP ≈ 30 s/MP) — l'« ordre de grandeur du gain » que la lecture prétend tirer de la mesure est l'inverse de ce que la mesure montre ; aucune sortie à 4 MP n'est committée pour soutenir l'affirmation.
Comptées non déposées (mineures)
c06_015c: coquille « deciderea » (« la version ComfyUI annonce deciderea si les noeuds ») — typo, pas de perte de sens.c02(palier INT8) : tailles de fichiers (7,26 Go / 9,35 Go / 676 Mo) = faits de manifeste de déploiement, non mesurés dans le run — externes plausibles, hors périmètre.- Lecture de couverture (
c20_015c) : énumère openpose et layer_decomposition comme exemples de manquants mais nomme paspanorama/PanoramaPreviewqui figure dans le tableau lu — incomplète, pas fausse (la disjonction générale couvre le cas).
Vérifié sans réserve
- Navigation : Précédent → 01-5b ✓, Suivant → ../02-Advanced/02-2-FLUX-1 ✓ (les deux existent, résolution correcte des chemins relatifs).
- Frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 : exactement UNE lecture par sortie, chacune placée après sa cellule (lecture stats → code 5, conversion → code 10, génération → code 13, graines → code 16, couverture → code 19) ; aucune double lecture, aucun enrichissement ajouté à une lecture existante.
- Doublons : scan normalisé headers (niveau # retiré) + Jaccard blocs > 0,6 sur les 15 cellules md → 14 headers uniques, 0 doublon (contraste net avec 01-5b, MD1/MD3 dupliqués).
- Exercices : 3 stubs (
resultat_ex1/2/3 = None) avec énoncés riches, indices donnant la méthode pas la solution — 0 fuite. - Garde INT8 : assert manifeste sur les 3 chargeurs dans le code — cohérent avec la doctrine du §2.
- Streams : valeurs citées par les lectures toutes présentes dans les sorties committées (190 s, 1184x1760, 3× graines ok, 981 classes, table de couverture 12 workflows) — aucune valeur fabriquée.
Organe #18402
0 instance dans le périmètre : la valeur de mesure (190 s) EST dans les sorties committées — le défaut ci-dessus est d'interprétation (sémantique), pas une valeur absente ; reste un finding, pas une ligne additive.
Garde population & skips
VERT : 773/773 (0 added / 0 removed vs
population-nc.json), head main5e96ffec4(force-push mesuré ce cycle). 0 skip : 143 PRs ouvertes croisées (pages 1+2), aucune ne touche ce notebook.— Désignation 568 :
Image/02-Advanced/02-2-FLUX-1-Advanced-Generation.ipynb(premier non-coché de la section 02-Advanced).— NanoClaw (myia-ai-01) [17:05Z]
- Cellule : markdown
[vllm] 1 dossier(s) livrés à 17:09Z (03-1-Multi-Model-Comparison) par DM RSM
[vllm] 1 dossier(s) livrés à 18:12Z (03-2-Workflow-Orchestration) par DM RSM
Ouverture de la série GenAI pour la campagne daudit #17073, partition NanoClaw (myia-ai-01) — sur le modèle des séries QuantConnect #17093, Search #18244 et GameTheory #17107.
Population : 268 notebooks hors archives (empreinte population-nc.json @7b2336565, garde-fou VERT 764/764).
Panorama d_arc (PROPOSÉ — à valider par le user)
Ordre canonique proposé : ordre lexicographique des chemins ci-dessous (00-Environment d abord, puis modules dans l ordre du dépôt) — à valider.
Porteurs #17066 : aucun notebook GenAI cité dans #17066 (vérifié ce cycle). PRs ouvertes touchant GenAI : aucune.
Checklist (270 notebooks — aucune auditée à ce jour par la lane NC)
00-GenAI-Environment (7)
00-GenAI-Environment/00-1-Environment-Setup.ipynb00-GenAI-Environment/00-2-Docker-Services-Management.ipynb00-GenAI-Environment/00-3-API-Endpoints-Configuration.ipynb00-GenAI-Environment/00-4-Environment-Validation.ipynb00-GenAI-Environment/00-5-ComfyUI-Local-Test.ipynb00-GenAI-Environment/00-6-Local-Docker-Deployment.ipynb00-GenAI-Environment/00-7-Terminal-Long-Runs.ipynbAudio (38)
Audio/01-Foundation/01-1-OpenAI-TTS-Intro.ipynbAudio/01-Foundation/01-2-OpenAI-Whisper-STT.ipynbAudio/01-Foundation/01-3-Basic-Audio-Operations.ipynbAudio/01-Foundation/01-4-Whisper-Local.ipynbAudio/01-Foundation/01-5-Kokoro-TTS-Local.ipynbAudio/02-Advanced/02-1-Chatterbox-TTS.ipynbAudio/02-Advanced/02-2-XTTS-Voice-Cloning.ipynbAudio/02-Advanced/02-3-MusicGen-Generation.ipynbAudio/02-Advanced/02-4-Demucs-Source-Separation.ipynbAudio/02-Advanced/02-5-Multi-Model-TTS-Gateway.ipynbAudio/02-Advanced/02-6-MIDI-Generation.ipynbAudio/02-Advanced/02-7-YuE2-Song-Generation.ipynbAudio/02-Advanced/02-8-Expressive-TTS.ipynbAudio/02-Advanced/02-9-AceStep-Music-Generation.ipynbAudio/03-Orchestration/03-1-Multi-Model-Audio-Comparison.ipynbAudio/03-Orchestration/03-2-Audio-Pipeline-Orchestration.ipynbAudio/03-Orchestration/03-3-Realtime-Voice-API.ipynbAudio/04-Applications/04-1-Educational-Audio-Content.ipynbAudio/04-Applications/04-10-Annotation-Prosodique.ipynbAudio/04-Applications/04-11-Generation-TTS.ipynbAudio/04-Applications/04-12-Compilation-Audio.ipynbAudio/04-Applications/04-13-Audiobook-FishAudio-S2Pro.ipynbAudio/04-Applications/04-14-VoiceLeading-Rendu-GenAI.ipynbAudio/04-Applications/04-15-MERT2-Music-Understanding.ipynbAudio/04-Applications/04-16-SheetSage2-Audio-To-Score.ipynbAudio/04-Applications/04-2-Transcription-Pipeline.ipynbAudio/04-Applications/04-3-Music-Composition-Workflow.ipynbAudio/04-Applications/04-4-Audio-Video-Sync.ipynbAudio/04-Applications/04-5-LiveCoding-LLM-Music.ipynbAudio/04-Applications/04-6-Audiobook-Pipeline.ipynbAudio/04-Applications/04-7-TTS-Voice-Benchmark.ipynbAudio/04-Applications/04-8-Lecture-Analytique.ipynbAudio/04-Applications/04-9-Voice-Casting.ipynbAudio/05-Diffusion-from-scratch/05-1-AudioDiffusion-Latent-From-Scratch.ipynbAudio/05-Diffusion-from-scratch/05-2-Vocoder-From-Scratch.ipynbAudio/06-Diffusion-SOTA/06-1-AudioLDM-SOTA-Comparison.ipynbAudio/06-Diffusion-SOTA/06-2-HiFiGAN-SOTA-Comparison.ipynbAudio/06-Diffusion-SOTA/06-3-AudioDiffusion-Comparison-A-vs-B.ipynbCaseStudies (5)
CaseStudies/Barbie-Schreck/barbie-schreck.ipynbCaseStudies/Fort-Boyard/fort-boyard-python.ipynbCaseStudies/Medical-Chatbot/medical_chatbot.ipynbCaseStudies/Medical-Chatbot/medical_chatbot_en.ipynbCaseStudies/Recipe-Maker/receipe_maker.ipynbFallacyDetection (5)
FallacyDetection/01_taxonomy_intro.ipynbFallacyDetection/02_fallacy_datasets_landscape.ipynbFallacyDetection/03_taxonomy_coverage_gap.ipynbFallacyDetection/04_coverage_matrix.ipynbFallacyDetection/05_dataset_builder.ipynbFineTuning (14)
FineTuning/FT-00a-LoRA-from-scratch-Python.ipynbFineTuning/FT-00b-LoRA-Hyperparams-from-scratch-Python.ipynbFineTuning/FT-00c-LoRA-SOTA-Comparison-Python.ipynbFineTuning/FT-00d-LoRA-QLoRA-SOTA-Comparison-Python.ipynbFineTuning/FT-01-Introduction-FineTuning-Python.ipynbFineTuning/FT-01-Introduction-FineTuning-Python_en.ipynbFineTuning/FT-02-QLoRA-Quantization-Python.ipynbFineTuning/FT-02-QLoRA-Quantization-Python_en.ipynbFineTuning/FT-03-Supervised-FineTuning-SFT-Python.ipynbFineTuning/FT-03-Supervised-FineTuning-SFT-Python_en.ipynbFineTuning/FT-04-RLHF-DPO-Python.ipynbFineTuning/FT-05-ModelMerging-Routing-Python.ipynbFineTuning/FT-05-ModelMerging-Routing-Python_en.ipynbFineTuning/FT-06-Vision-Language-LoRA-Python.ipynbImage (26)
Image/01-Foundation/01-1-OpenAI-DALL-E-3.ipynbImage/01-Foundation/01-2-GPT-5-Image-Generation.ipynbImage/01-Foundation/01-3-Basic-Image-Operations.ipynbImage/01-Foundation/01-4-Forge-SD-XL-Turbo.ipynbImage/01-Foundation/01-5-Qwen-Image-Edit.ipynbImage/01-Foundation/01-5b-Qwen-Image-Edit-2509.ipynbImage/01-Foundation/01-5c-Qwen-Image-21-Workflows.ipynbImage/02-Advanced/02-2-FLUX-1-Advanced-Generation.ipynbImage/02-Advanced/02-3-Stable-Diffusion-3-5.ipynbImage/02-Advanced/02-4-Z-Image-Lumina2.ipynbImage/02-Advanced/02-5-Bonsai-Image-Ternary.ipynbImage/03-Orchestration/03-1-Multi-Model-Comparison.ipynbImage/03-Orchestration/03-2-Workflow-Orchestration.ipynbImage/03-Orchestration/03-3-Performance-Optimization.ipynbImage/03-Orchestration/03-4-VLM-Character-Design-Workflow.ipynbImage/04-Applications/04-1-Educational-Content-Generation.ipynbImage/04-Applications/04-2-Creative-Workflows.ipynbImage/04-Applications/04-3-Production-Integration.ipynbImage/04-Applications/04-4-Cross-Stitch-Pattern-Maker-Legacy.ipynbImage/04-Applications/04-5-MiniMax-Cloud-Image.ipynbImage/05-History/05-0-Generateurs-Symboliques.ipynbImage/05-History/05-1-DiscoDiffusion-CLIP-Guided-Diffusion.ipynbImage/05-History/05-2-CLIPasso-Semantic-Sketching.ipynbImage/examples/history-geography.ipynbImage/examples/literature-visual.ipynbImage/examples/science-diagrams.ipynbIntegrations-DotNet (15)
Integrations-DotNet/Aspire/01-Aspire-Orchestration-GenAi.ipynbIntegrations-DotNet/Aspire/02-Aspire-GenAiStack-Reel.ipynbIntegrations-DotNet/Aspire/03-Aspire-Observabilite.ipynbIntegrations-DotNet/Aspire/04-Aspire-Streaming-Agent.ipynbIntegrations-DotNet/Aspire/05-Aspire-Tests-Integration.ipynbIntegrations-DotNet/Aspire/06-Aspire-GardeFous-Roslyn.ipynbIntegrations-DotNet/Aspire/07-Aspire-SemanticFleet-MultiConnector.ipynbIntegrations-DotNet/Aspire/08-Aspire-AsyncFFI-Dotnet.ipynbIntegrations-DotNet/Aspire/09-Aspire-Harness-CopilotSdk.ipynbIntegrations-DotNet/CopilotSDK/01-GitHub-Copilot-SDK-Binding.ipynbIntegrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynbIntegrations-DotNet/Orleans/01-Orleans-Grains-Agents.ipynbIntegrations-DotNet/Orleans/02-Orleans-Aspire-CoHost.ipynbIntegrations-DotNet/Orleans/03-Orleans-Persistance-Redis.ipynbIntegrations-DotNet/Orleans/04-Orleans-Aspire-Cluster-Redis.ipynbPlateformes-Conversationnelles (28)
Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/configurer-chatbots-par-l-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/donner-une-memoire-ephemere-au-chatbot-par-l-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/interroger-lassistant-de-lediteur-par-l-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/joindre-un-fichier-au-chatbot-par-l-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/mesurer-la-derive-dun-copilot.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/obtenir-des-donnees-structurees-par-l-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-1-Chatbots/parler-au-chatbot-en-visiteur-par-l-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-2-Forms/administrer-les-formulaires-par-l-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-2-Forms/auditer-un-formulaire-conditionnel.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-3-RAG-et-Embeddings/ingestion-corpus-long-rag.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-3-RAG-et-Embeddings/separer-les-environnements-de-vecteurs.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-4-MCP-Server/auditer-un-serveur-mcp.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-4-MCP-Server/autour-du-consent-oauth-du-serveur-mcp.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-4-MCP-Server/consommer-vs-exposer-le-mcp.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-4-MCP-Server/piloter-wordpress-par-mcp.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-5-Multi-Provider/brancher-plusieurs-providers-par-l-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-5-Multi-Provider/eval-choisir-son-modele.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-5-Multi-Provider/presenter-ai-engine-par-son-api.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/05-Playwright-AI-Engine/00-Parcours-QA-AI-Engine.ipynbPlateformes-Conversationnelles/AI-Engine-WordPress/06-Securite-et-Methode/auditer-la-conformite-visuelle.ipynbPlateformes-Conversationnelles/Open-WebUI/Playwright-OWUI/00-Parcours-QA-OWUI.ipynbPlateformes-Conversationnelles/Open-WebUI/Playwright-OWUI/01-decouverte/01-Decouverte-QA-OWUI.ipynbPlateformes-Conversationnelles/Open-WebUI/Playwright-OWUI/02-navigation-authentification/02-Navigation-Auth-QA-OWUI.ipynbPlateformes-Conversationnelles/Open-WebUI/Playwright-OWUI/03-chat-streaming/03-Chat-Streaming-QA-OWUI.ipynbPlateformes-Conversationnelles/Open-WebUI/Playwright-OWUI/04-rag-tools-avances/04-RAG-Tools-QA-OWUI.ipynbPlateformes-Conversationnelles/Open-WebUI/Playwright-OWUI/05-multi-tenant-ci/05-Multi-Tenant-CI-QA-OWUI.ipynbPlateformes-Conversationnelles/Open-WebUI/Playwright-OWUI/06-nouveautes-v0.10/06-Nouveautes-v0.10-QA-OWUI.ipynbPlateformes-Conversationnelles/differencier-les-assistants.ipynbPostTraining (21)
PostTraining/PT_01_intro_post_training.ipynbPostTraining/PT_02_sft_baseline.ipynbPostTraining/PT_03_dpo_direct_preference.ipynbPostTraining/PT_04_grpo_deepseek_r1.ipynbPostTraining/PT_05_rlvr_verifiable_rewards.ipynbPostTraining/PT_06_eval_comparative.ipynbPostTraining/PT_07_rewardspy_reward_hacking.ipynbPostTraining/PT_08_grpo_from_scratch_toy_env.ipynbPostTraining/PT_09_rloo_from_scratch_toy_env.ipynbPostTraining/PT_10_gae_from_scratch_toy_env.ipynbPostTraining/PT_11a_grpo_qwen35_rlvr.ipynbPostTraining/PT_11b_grpo_qwen_rlvr_on_verifiers.ipynbPostTraining/PT_11c_grpo_qwen17_rlvr.ipynbPostTraining/PT_11d_multiseed_qwen35_4x100.ipynbPostTraining/PT_12_multistep_delayed_credit.ipynbPostTraining/PT_13_dapo_drgrpo_corrections.ipynbPostTraining/PT_14_neural_thermodynamic_laws.ipynbPostTraining/PT_15_controle_interpretabilite.ipynbPostTraining/PT_16_vericoding_formal_verification.ipynbPostTraining/PT_17_laya_proper_rewards_toy.ipynbPostTraining/PT_18_laya_ablation_distillation.ipynbRAG-et-Memoire-Semantique (10)
RAG-et-Memoire-Semantique/01-Hands-On-Grounding.ipynbRAG-et-Memoire-Semantique/02-Retrieval-Avance.ipynbRAG-et-Memoire-Semantique/03-Embeddings-From-Scratch.ipynbRAG-et-Memoire-Semantique/04-Tokenisation-From-Scratch.ipynbRAG-et-Memoire-Semantique/05-Stockage-Vectoriel.ipynbRAG-et-Memoire-Semantique/05b-Stockage-Vectoriel-Serveur.ipynbRAG-et-Memoire-Semantique/06-KernelMemory-InProcess.ipynbRAG-et-Memoire-Semantique/07-KernelMemory-Python-Quickstart.ipynbRAG-et-Memoire-Semantique/08-KernelMemory-Hybrid-Search.ipynbRAG-et-Memoire-Semantique/09-KernelMemory-Multimodal.ipynbSecurity (6)
Security/Control/Control-Refusal-Direction.ipynbSecurity/Oversight/Oversight-Scaling-Laws-Analytics.ipynbSecurity/Oversight/Oversight-Scaling-Laws-Nim.ipynbSecurity/Oversight/Oversight-Scaling-Laws-Statistics.ipynbSecurity/Oversight/Oversight-Scaling-Laws-Wargames.ipynbSecurity/Tooling/Tooling-MCP-Attack-Surface.ipynbSemanticKernel (23)
SemanticKernel/01-SemanticKernel-Intro.ipynbSemanticKernel/02-SemanticKernel-Advanced.ipynbSemanticKernel/03-SemanticKernel-Agents.ipynbSemanticKernel/04-SemanticKernel-Filters-Observability.ipynbSemanticKernel/05-SemanticKernel-VectorStores.ipynbSemanticKernel/06-SemanticKernel-ProcessFramework.ipynbSemanticKernel/07-SemanticKernel-MultiModal.ipynbSemanticKernel/08-SemanticKernel-MCP.ipynbSemanticKernel/09-SemanticKernel-Building-CLR.ipynbSemanticKernel/10-SemanticKernel-NotebookMaker.ipynbSemanticKernel/10a-SemanticKernel-NotebookMaker-batch.ipynbSemanticKernel/10b-SemanticKernel-NotebookMaker-batch-parameterized.ipynbSemanticKernel/11-SemanticKernel-A2A.ipynbSemanticKernel/Créateur de mail personnalisé.ipynbSemanticKernel/Notebook-Generated.ipynbSemanticKernel/Notebook-Template.ipynbSemanticKernel/Semantic-fleet-MultiConnector-Routing.ipynbSemanticKernel/Semantic-fleet-Radix-PromptMatcher.ipynbSemanticKernel/Semantic-kernel-AutoInteractive.ipynbSemanticKernel/Workbook-Template-Python.ipynbSemanticKernel/Workbook-Template.ipynbSemanticKernel/fort-boyard-csharp.ipynbSemanticKernel/fort-boyard-python.ipynbTexte (41)
Texte/01_OpenAI_Intro.ipynbTexte/02_PromptEngineering.ipynbTexte/03_Structured_Outputs.ipynbTexte/03b_Typed_Decisions_System1.ipynbTexte/03c_Constrained_Decoding_Python.ipynbTexte/04_Function_Calling.ipynbTexte/05_RAG_Modern.ipynbTexte/06_PDF_Web_Search.ipynbTexte/07_Code_Interpreter.ipynbTexte/08_Reasoning_Models.ipynbTexte/09_Production_Patterns.ipynbTexte/09b_Prompt_Security_RedTeam.ipynbTexte/09c_Production_Routage_Repli.ipynbTexte/09d_Production_Caches.ipynbTexte/09e_Production_Exploitation.ipynbTexte/10_LocalLlama.ipynbTexte/10b_Inference_Mechanics.ipynbTexte/10c_Long_Context_Strategies.ipynbTexte/10d_TensorSharp_DotNet_Inference.ipynbTexte/10e_LLamaSharp_DotNet_BakeOff.ipynbTexte/10f_ORTGenAI_DotNet_BakeOff.ipynbTexte/11_Quantization.ipynbTexte/12_Test_Time_Scaling.ipynbTexte/13_Agentic_Orchestration.ipynbTexte/13b_Agent_Evaluation.ipynbTexte/14_Persistent_Memory.ipynbTexte/14b_Paginated_Memory-Python.ipynbTexte/15_Tree_of_Thoughts_Search.ipynbTexte/16_Scaling_Test_Time_Compute.ipynbTexte/17_Native_Reasoning_vs_Scaling.ipynbTexte/18_Semantic_Kernel_Plugins.ipynbTexte/19_OWUI_Orchestration.ipynbTexte/20_OWUI_Native_API.ipynbTexte/21_LoRA_FineTuning.ipynbTexte/22_Evaluating_Generated_Text.ipynbTexte/22b_Profil_Cognitif_CHC.ipynbTexte/TransformerVariants/TV-00a-RoPE-from-scratch.ipynbTexte/TransformerVariants/TV-00b-Attention-Variants-from-scratch.ipynbTexte/TransformerVariants/TV-01-Attention-Variants-SOTA.ipynbTexte/TransformerVariants/TV-02-MoE-SOTA.ipynbTexte/TransformerVariants/TV-03-Internalisation-CoT.ipynbVibe-Coding (8)
Vibe-Coding/Claude-Code/notebooks/01-Claude-CLI-Bases.ipynbVibe-Coding/Claude-Code/notebooks/02-Claude-CLI-Sessions.ipynbVibe-Coding/Claude-Code/notebooks/03-Claude-CLI-References.ipynbVibe-Coding/Claude-Code/notebooks/04-Claude-CLI-Agents.ipynbVibe-Coding/Claude-Code/notebooks/05-Claude-CLI-Automatisation.ipynbVibe-Coding/Claudish/notebooks/01-claude-code-via-claudish.ipynbVibe-Coding/docs/CSharpRepl-Live-Patching.ipynbVibe-Coding/docs/Roslyn-Code-Guardrails.ipynbVideo (22)
Video/01-Foundation/01-1-Video-Operations-Basics.ipynbVideo/01-Foundation/01-1b-Video-Slideshow-Bonus.ipynbVideo/01-Foundation/01-2-GPT-5-Video-Understanding.ipynbVideo/01-Foundation/01-3-Qwen-VL-Video-Analysis.ipynbVideo/01-Foundation/01-4-Video-Enhancement-ESRGAN.ipynbVideo/01-Foundation/01-5-AnimateDiff-Introduction.ipynbVideo/02-Advanced/02-1-HunyuanVideo-Generation.ipynbVideo/02-Advanced/02-2-LTX-Video-Lightweight.ipynbVideo/02-Advanced/02-3-Wan-Video-Generation.ipynbVideo/02-Advanced/02-4-SVD-Image-to-Video.ipynbVideo/02-Advanced/02-5-LTX2-Audiovisual.ipynbVideo/02-Advanced/02-6-MiniMax-H3-Architecture-Licensing.ipynbVideo/02-Advanced/02-7-CogVideoX-Text-to-Video.ipynbVideo/03-Orchestration/03-1-Multi-Model-Video-Comparison.ipynbVideo/03-Orchestration/03-2-Video-Workflow-Orchestration.ipynbVideo/03-Orchestration/03-3-ComfyUI-Video-Workflows.ipynbVideo/04-Applications/04-1-Educational-Video-Generation.ipynbVideo/04-Applications/04-2-Creative-Video-Workflows.ipynbVideo/04-Applications/04-3-Sora-API-Cloud-Video.ipynbVideo/04-Applications/04-4-Production-Video-Pipeline.ipynbVideo/04-Applications/04-5-MiniMax-H3-Cloud-Video.ipynbVideo/04-Applications/04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb_research (1)
_research/e2e_quant_validation.ipynb