Skip to content

[Audit #17073] Série Search — partition NanoClaw #18244

Description

@clusterManager-Myia

Série Search (MyIA.AI.Notebooks/Search) — partition NanoClaw — campagne #17073

Issue de série ouverte le 28/09 à la demande d'Emerjesse : les dépôts Search partaient jusqu'ici en commentaires sur l'issue maîtresse #17073 (14 cycles consécutifs sans checklist dédiée — le ledger de campagne le rappelait à chaque dépôt). Cette issue rend la progression de la série visible au même titre que ses sœurs (QuantConnect #17093 fermée 56/57, GameTheory #17107 à 100/108).

État à l'ouverture : 11/156 audités (cohérent avec le ledger de campagne, note du cycle 13:05Z). Les 11 dépôts existants vivent en commentaires sur #17073 (derniers : c.5870651155 App-2-GraphColoring 13:17Z, c.5869567666 App-2-Statistical-Validity 12:11Z, et les cycles horaires précédents). Les prochains dépôts de la série atterrissent ici, une case cochée par notebook audité.

Sous-séries : Part1-Foundations (43) · Applications (54, dont CSP) · Part4-Metaheuristics (35) · Part2-CSP (18) · racine (5) · Discrepancy (1). Cadence : 1 notebook/cycle (cron :05), priorité aux porteurs de densité libres — l'ordre de la liste n'est pas l'ordre de traitement.

(racine) (5)

  • App-14-ConnectFour-Adversarial-CSharp.ipynb
  • App-14-ConnectFour-Adversarial.ipynb
  • App-14b-ConnectFour.ipynb
  • App-14c-ConnectFour-CSharp.ipynb
  • App-32-Szpiro-Pasten-2026.ipynb

Applications (54)

  • App-1-NQueens.ipynb — audité 2026-09-28T03:05
  • App-11-Picross.ipynb — audité 2026-09-28T04:05
  • App-11b-Picross-CSharp.ipynb — audité 2026-09-28T05:05
  • App-15-SportsScheduling.ipynb — audité (cycle 28/09)
  • App-15b-SportsScheduling-CSharp.ipynb — audité (cycle 28/09)
  • App-16-Crossword-CSP-CSharp.ipynb — audité (cycle 28/09)
  • App-16-Crossword-CSP.ipynb
  • App-19-ProceduralGeneration-WFC-CSharp.ipynb — audité (cycle 28/09)
  • App-19-ProceduralGeneration-WFC.ipynb — audité 2026-09-28T10:05
  • App-1b-NQueens-CSharp.ipynb — audité 2026-09-28T11:05
  • App-2-GraphColoring-Statistical-Validity-Python.ipynb — audité 2026-09-28T12:05
  • App-2-GraphColoring.ipynb — audité 2026-09-28T13:05
  • App-20-SudokuBenchmark-Python.ipynb — audité 2026-09-28T14:05 (rattrapage : dépôt c.5871742425 sur Audit critique au long cours des 1343 notebooks -- campagne Hermes + NanoClaw, decouverte de classes et organes #17073, parti avant l ordre permanent)
  • App-20b-SudokuBenchmark-CSharp.ipynb — audité 2026-09-28T16:05 (dépôt c.5873995356, 0 finding + 4 instances versées)
  • App-21-VoiceLeading.ipynb — audité 2026-09-28T18:05Z (dépôt c.5875932151, 0 finding + 5 instances versées)
  • App-22-EdgeColoring-Tutte.ipynb — audité 2026-09-28T19:05Z (dépôt c.5876757022, 1 finding factual-mislabel + 0 instance versée)
  • App-23-Factorio-Balancer.ipynb
  • App-26-CoveringArrays-Guarantee-Audit.ipynb
  • App-2b-GraphColoring-CSharp.ipynb
  • App-3-NurseScheduling.ipynb
  • App-3b-NurseScheduling-CSharp.ipynb
  • App-4-JobShopScheduling.ipynb — audité 2026-09-29T01:05Z (dépôt c.5881741904, 3 findings)
  • App-4b-JobShopScheduling-CSharp.ipynb — audité 2026-09-29T02:05Z (dépôt c.5882294114, 2 findings)
  • App-5-Timetabling-CSharp.ipynb — audité 2026-09-29T05:05Z (dépôt c.5884104867 ; 0 finding individuel — 2 occurrences factual-mislabel gelées → organe Audit critique au long cours des 1343 notebooks -- campagne Hermes + NanoClaw, decouverte de classes et organes #17073 c.5884101801)
  • App-5-Timetabling.ipynb — audité 2026-09-29T03:05Z (dépôt c.5882939231, 4 findings)
  • App-6-Minesweeper-CSharp.ipynb
  • App-6-Minesweeper.ipynb
  • App-7-Wordle.ipynb
  • App-7b-Wordle-CSharp.ipynb
  • App-8-MiniZinc-CSharp.ipynb — audité 2026-10-02T17:17Z (dépôt c.5957558741, 4 findings : 1 paraphrase-stack MD[23]/MD[24] + 1 factual-mislabel «sept critères» vs 6 committés + 2 navigation-misplaced MD[9] et MD[30] ; 5 mineurs non déposés)
  • App-8-MiniZinc.ipynb — audité 2026-10-02T18:16Z (dépôt c.5958550348, 4 findings : 2 factual-mislabel [fallback TSP « Distance totale = 80 » vs 85 committé ; exemple emploi du temps infaisable violant C2] + 1 navigation-misplaced [pointeur Sudoku ../../ inexistant] + 1 output-uninterpreted [chronos 12 reines 1,43/23,30/852,36 ms sans lecture] ; 5 mineurs non déposés)
  • App-10-Portfolio.ipynb — audité 2026-09-29T18:12Z (dépôt c.5895928726, 0 finding, 1 versement organe factual-mislabel)
  • App-10b-Portfolio-CSharp.ipynb — audité 2026-09-29T19:13Z (dépôt c.5896933711, 0 finding, 3 versements : 2 stale-claim + 1 navigation-misplaced)
  • App-13-TSP-Metaheuristics.ipynb
  • App-13b-TSP-Metaheuristics-CSharp.ipynb
  • App-17-VRP-Logistics.ipynb — audité 2026-09-29T22:05Z (dépôt c.5900083891, 0 finding + 3 versements)
  • App-17b-VRP-Logistics-CSharp.ipynb — audité 2026-09-30T00:05Z (dépôt c.5901482916, 0 finding + 3 versements dont prémisse d instance cross-twin fausse)
  • App-17b-VRP-Logistics-Python.ipynb — audité 2026-10-02T19:09Z (dépôt c.5959568629, 3 findings : 2 factual-mislabel — MD[23] divergence RNG cross-twin illustrée par 2 chiffres sans output (403,45/410,59), et écart SOTA dit « quelques pour-cents » alors que la même section imprime +11,5% (MD[30]+MD[37]) — + 1 figure-missing : §7 décrit une figure non committée (0 sortie image, PNG sidecar non cité) ; erratum joint : les 2 versements cross-twin du 30/09 contre le C# sont des faux positifs, instance identique entrée par entrée)
  • App-18-HyperparameterTuning.ipynb — audité 2026-09-30T02:05Z (dépôt c.5902743148, 0 finding + 2 versements dont min_samples_leaf « élevé » contredit par les 3 best-params=1)
  • App-18b-HyperparameterTuning-CSharp.ipynb — audité 2026-09-30T03:05Z (dépôt c.5903339220, 0 finding + 3 versements dont parité cross-twin « à l identique » contredite par les 2 carnets)
  • App-18b-HyperparameterTuning-Python.ipynb — audité 2026-09-30T04:05Z (dépôt c.5903867513, 0 finding + 3 versements dont comptabilite evals GA/PSO fausse ×12-15 dans les sorties committées)
  • App-18c-HyperparameterTuning-Rustuna-vs-Optuna.ipynb — audité 2026-09-30T05:05Z (dépôt c.5904520314, 0 finding + 3 versements dont lectures citant les chiffres d une run antérieure : 45 ms mesurés vs ~130 cités, 13x committé vs ~25x cité ×2, régime C 4x/parité committés vs 6x/avantage Optuna cités)
  • App-22-AlgorithmSelection-Python.ipynb — audité 2026-09-30T06:05Z (dépôt c.5905216339, 0 finding + 0 versement — premier carnet de la série sans écart : toutes valeurs recoupées, 30+ liens résolus, provenance complète)
  • App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb — audité 2026-09-30T07:05Z (dépôt c.5906102800, 1 finding factual-mislabel — « entrée 2 → poids 3 » contredit par la ligne a=2 de la DDT recalcúlée)
  • App-24-MAPF-Guarantee-Audit.ipynb — audité 2026-09-30T08:05Z (dépôt c.5906957002, 1 finding factual-mislabel — « scénario 3D » à lire medium_flat : le flowtime ne diffère que là-bas)
  • App-25-CombinatorialAuctions-WDP-VCG.ipynb — audité 30/09 (dépôt c.5908042704, 2 findings factual-mislabel ; seuil >3 atteint, proposition organe état main sur Audit critique au long cours des 1343 notebooks -- campagne Hermes + NanoClaw, decouverte de classes et organes #17073 c.5908043045)
  • App-27-Sparse-Index-Tracking-Walk-Forward.ipynb
  • App-28-LearningToBranch-Generalization-Audit.ipynb
  • App-29-SALBP-AssemblyLineBalancing-Audit.ipynb
  • App-30-OrbitalAssembly-Certificate-Audit.ipynb
  • App-31-RCPSP-Max-Feasibility-Bounds.ipynb
  • App-33-NeuralDiving-Coloration.ipynb
  • App-9-EdgeDetection.ipynb — audité 2026-09-29T16:20Z (dépôt c.5894205445, 0 finding individuel + 2 versements gel D2)
  • App-9b-EdgeDetection-CSharp.ipynb — audité 2026-09-29T17:10Z (dépôt c.5895016721, 0 finding)

Discrepancy (1)

  • Discrepancy-01-BeckFiala-Lean-Python.ipynb — audité 2026-09-30T16:05Z (NanoClaw, dépôt c.5915312739 : 1 navigation-misplaced + datapoint factual-mislabel occ. 9 c.5915316635)

Part1-Foundations (43)

  • Search-01-StateSpace-CSharp.ipynb
  • Search-01-StateSpace.ipynb
  • Search-02-Uninformed-CSharp.ipynb
  • Search-02-Uninformed.ipynb
  • Search-02b-NetworkX-CSharp.ipynb
  • Search-02b-NetworkX.ipynb
  • Search-02c-QuikGraph.ipynb
  • Search-03-Informed-CSharp.ipynb
  • Search-03-Informed.ipynb
  • Search-03b-PatternDatabases-CSharp.ipynb
  • Search-03b-PatternDatabases.ipynb
  • Search-03c-LimitedDiscrepancySearch-CSharp.ipynb
  • Search-03c-LimitedDiscrepancySearch.ipynb
  • Search-03d-WeightedAstar-CSharp.ipynb
  • Search-03d-WeightedAstar.ipynb
  • Search-03e-AStar-Optimality.ipynb
  • Search-04-LocalSearch-CSharp.ipynb
  • Search-04-LocalSearch.ipynb
  • Search-05-GeneticAlgorithms-CSharp.ipynb
  • Search-05-GeneticAlgorithms.ipynb
  • Search-06-AdversarialSearch-CSharp.ipynb
  • Search-06-AdversarialSearch.ipynb — audité 2026-10-05T21:05Z (3 versements stale-claim c.6003015129 : MD[16] « profondeur 18 » ×3 vs committé 14 ; MD[25] « 27-30×, ~139× » absents des outputs (28.0/35.8/169.4) ; MD[42] synthèse « 2x-10x/2x-5x » contredit §7.1 ×30.1/×182.7 ; 4 mineurs non déposés ; croisement §7.1/§7.2 100 % exact)
  • Search-07-MCTS-And-Beyond-CSharp.ipynb — audité 2026-10-05 (NC c.6004121154 : 1 stale-claim MD[13] « 5000 iters proche de 0 » vs output 0,27 ; croisements Nim/Connect-4/OpenSpiel exacts)
  • Search-07-MCTS-And-Beyond.ipynb — audité 2026-10-05T23:05Z (NC c.6005092858 : 0 finding, croisement prose↔outputs 100 % exact, exemple de convergence honnête sur la non-monotonicité, contôle Nim misère vérifié)
  • Search-08-DancingLinks-CSharp.ipynb
  • Search-08-DancingLinks.ipynb
  • Search-09-LinearProgramming-CSharp.ipynb
  • Search-09-LinearProgramming.ipynb
  • Search-09b-SpuriousMinima.ipynb
  • Search-09c-CombinatorialDiscrepancy.ipynb
  • Search-09d-Lean-Discrepancy-Komlos.ipynb — audité 2026-10-03T04:05Z (dépôt classe c.5965404919 sur Audit critique au long cours des 1343 notebooks -- campagne Hermes + NanoClaw, decouverte de classes et organes #17073 : 1 versement factual-mislabel [facteur ½· au lieu de /5 dans MD[11], contredit l output committé 7/5] ; 0 finding individuel, gel série ; 2 mineurs mentionnés ; valeurs recoupées, liens 5/5, gates Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 tenues)
  • Search-10-SymbolicAutomata-CSharp.ipynb — audité 2026-10-02T05:05Z (dépôt c.5945998387, 3 findings : 1 factual-mislabel NFA « contient ab » + 1 stale-claim périmètre tranche 3 + 1 factual-mislabel mineur)
  • Search-10-SymbolicAutomata.ipynb — audité 2026-10-02T07:55Z (dépôt c.5947648445, 3 findings : 1 factual-mislabel NFA « contient ab » avec témoin cab dans l énoncé même [recoupement du finding 1 cycle 401] + 1 factual-mislabel compte multiples de 7 [21, pas 22] et test indice 200 contredit par le prédicat + 1 factual-mislabel lecture MD[72] « 11 valeurs attendues » auto-contradictoire et énumération jamais committée)
  • Search-11-Metaheuristics-CSharp.ipynb — audité 2026-10-02T08:15Z (dépôt c.5947992969, 1 finding : reading-before-code/factual-mislabel MD[37] minimise ex post l'écart ×7-×70 GeneticSharp vs from-scratch ; 3 versements : stale-claim conclusion MD[44], coquille dim 10 vs 5 CODE[43], frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue)
  • Search-11-Metaheuristics.ipynb — audité 2026-10-02T09:13Z (dépôt c.5948912898, 3 findings : factual-mislabel ×2 valeurs de run fantôme MD[14] ~67,5 vs 74,68 committé et MD[21] ~7,60 vs 7,14 committé + stale-claim TrackedPSO inexistante MD[16] ; 2 versements : lecture-sans-valeur MD[24], frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue ; recoupement désigné NÉGATIF — la faute MD[37]-CSharp n a pas d équivalent, MD[27]/MD[35] font le travail honnête)
  • Search-11b-Metaheuristiques-Deep-Part2.ipynb — audité 2026-10-02T11:12Z (dépôt c.5951075142, 1 finding : navigation-misplaced — Exercice 3 renvoie au « sweep de la tranche 1 (exercice dimension) » inexistant dans la tranche 1 SA (α/T0/amplitude), le sweep vit dans le twin Python ; corrobore MD[3] « rappel tranche 1 » pour Rastrigin absent de la tranche 1 ; valeurs toutes recoupées, densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue, annonce Part3=ABC vérifiée tenue)
  • Search-11b-Metaheuristiques-Deep-Part3.ipynb — audité 2026-10-02T12:10Z (dépôt c.5952024150, 3 stale-claim : twin MEALPy f=0 faux, « cf tranche 2 » sans Rosenbrock, conclusion « trois stratégies réussissent »)
  • Search-11b-Metaheuristiques-Deep-Part4.ipynb — audité 2026-10-02T13:13Z (dépôt c.5953191120, 3 findings : 2 navigation-misplaced conclusions d exercices anticipées MD[12] + 1 stale-claim budget ABC ~6000 présenté identique MD[2]/MD[8]/MD[12])
  • Search-11b-Metaheuristiques-Deep.ipynb — audité 2026-10-06 c.6006120304 (0 finding, croisement exact)
  • Search-11c-Empirical-Algorithm-Selection.ipynb — audité 2026-10-02T14:24Z (dépôt c.5954569920, 1 finding navigation-misplaced MD[0]/MD[90] : Suivant Search-9-Heuristics inexistant repo-wide + « fin de partie Part1 » faux, 11d/12a/13a suivent, findings repris clause >48h c.5884190266 ; 4 stale-claim VERSÉES c.5954561099 Audit critique au long cours des 1343 notebooks -- campagne Hermes + NanoClaw, decouverte de classes et organes #17073 : « 50 vs 51 cases » CODE[11], « 81 = cases à remplir » MD[23], « cinq lignes » vs six MD[40], « facteur ~450 à l échelle » MD[54] ; gel stale-claim réactivé conforme arbitrage série)
  • Search-11d-Descente-Sous-Budget.ipynb — audité 2026-10-02T15:11Z (0 finding individuel ; 2 versements c.5955395034 Audit critique au long cours des 1343 notebooks -- campagne Hermes + NanoClaw, decouverte de classes et organes #17073 : factual-mislabel MD[10] citation Lean « exhiber » vs « enregistrer » l.150, stale-claim MD[13] « doubler le budget rapporte de moins en moins » vs rendements marginaux croissants +22,4→+28,5 puis effondrement ; gel série actif ; thèse op 11 l.148 et descent_flips_le_barrier l.110 vérifiées exactes ; 5 mineurs non déposés dont x0 §3 dégénéré et itertools inutilisé)
  • Search-12a-Composer-Regards.ipynb — audité 2026-10-06 c.6007175354 (0 finding, croisement re-dérivé exact)
  • Search-13a-Traverser-Murs-Certifies.ipynb — audité 2026-10-02T16:22Z (0 finding, 0 versement — c.5956422125 : citation op 13 verbatim exacte [EPIC][ICT] Chantier 1 — La table des opérations : algèbre des transformations attestée, ses trois lois, ses témoins et ses dettes #12204 l.46, m_path=2/m=8, audit 312 arêtes 0 violation, touches du mur re-dérivées à la main, test négatif (a)(b)(c) et convention op 7 vérifiés ; 5 mineurs non déposés dont Δ>0 vs delta -2 et absence table Navigation)

Part2-CSP (18)

Part4-Metaheuristics (35)

  • MGS-01-Introduction.ipynb — audité 2026-10-04T00:05Z (dépôt c.5974877970, 2 findings : 1 stale-claim MD[13] lecture de convergence contredite par l output « Amelioration 1,0x » + 1 exercise-mismatch MD[18] énoncé Even-Parity non défini ; 3 mineurs)
  • MGS-02-Composition.ipynb — audité 2026-10-04T02:05Z (dépôt c.5975668088, 1 finding stale-claim CODE[21] plage « ~4 à ~42 » introuvable dans les sorties + 1 occurrence navigation-misplaced versée organe c.5967080964 [Resume « ## 5. » + « Notebook suivant » en cellule 19/29, double numérotation §5] ; 4 mineurs)
  • MGS-03-Eukaryote.ipynb — audité 2026-10-04T03:05Z (dépôt c.5976059946, 1 finding exercise-mismatch CODE[24] indice « 32 bits par gene » contredit par la partition 8×4 du même stub + 2 occurrences versées organes gelés [navigation-misplaced MD[3] « la cellule suivante » placée après sa cible ; output-uninterpreted MD[13] run CODE[12] non lu : position 50,00 / vitesse 33,52 / distance 8,5200 absents de la lecture] ; 3 mineurs)
  • MGS-04-Islands.ipynb
  • MGS-05-CompoundMetaheuristics.ipynb
  • MGS-06-Benchmarks.ipynb
  • MGS-07-TSP.ipynb
  • MGS-07b-LandscapeMultidim.ipynb
  • MGS-07c-RosenbrockGriewank.ipynb
  • MGS-07d-MichalewiczDixonPrice.ipynb — audité 2026-10-04T11:05Z (dépôt c.5979325516, 1 finding paraphrase-stack MD[0]§Reproductibilité ↔ MD[11] ouverture + 2 occurrences stale-claim versées à l organe gelé c.5978019972 [fourchette de tailles 3,0-4,5 / 18-24 Ko réfutée par l arbre ; 4 citations fantômes d un état antérieur] ; classe figure-missing 4ᵉ occ. série → organe check_images_referenced proposé Audit critique au long cours des 1343 notebooks -- campagne Hermes + NanoClaw, decouverte de classes et organes #17073 c.5979323748 ; 6 mineurs)
  • MGS-08-LandscapeExplorer.ipynb — audité 2026-10-04T12:05Z (dépôt c.5979786479, 1 finding reading-before-code MD[28] id 4d39113c [la lecture mesurée des 3 rendus N-D précède CODE[29] ec=14 qui les produit — gate Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 ; les valeurs citées n ont aucun producteur] + 4 occurrences versées aux organes gelés [stale-claim c.5978019972 ×2 : valeurs gradR/varB/« 17-26 Ko » absentes des sorties + pin « 607cf7a » vs gitlink mesuré dbcd4047 ; paraphrase-stack c.5758434505 (blockquote Gotcha MD[7]↔MD[19], 99+76 car.) ; navigation-misplaced c.5967080964 (nav 08 → MGS-07-TSP alors que 07b/07c/07d pointent vers 08)] ; figure-missing NE MORD PAS (17/17 figures affichées inline — calibration organe c.5979323748) ; 5 mineurs)
  • MGS-09-EverestRelief.ipynb — audité 2026-10-04T14:05Z (dépôt c.5980956530, 1 finding reading-before-code MD[17] id aba21368 [la « vérification » mesurée « ~10 px » du marqueur NOIR précède le seul rendu N-D du carnet — CODE[18] ec=9 vient après, « ci-dessus » ne pointe sur rien ; gate Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 ; 2ᵉ carnet consécutif après MGS-08] + 4 occurrences versées aux organes gelés [stale-claim ×2 : MD[5] « même heatmap que MGS-7 » alors que MGS-07-TSP contient 0 renderer — MD[0]/CODE[6] citent MGS-8 ; MD[13] « le PSO mène plusieurs colonnes » inversé par la table committée — EO en mène 3 ; navigation-misplaced : MGS-08 sans lien avant vers MGS-09 et « Pour aller plus loin » omet MGS-10 ; exercise-mismatch : Ex3 NFE 200 non divisible par Pop=30 → organes c.5978019972 / c.5967080964 / c.5978446194] ; figure-missing NE MORD PAS (10/10 figures inline, GIF compris, toutes légendées) ; 4 mineurs ; provenance 0433fad0c/PR PairsTrading/ETF-Pairs : nouvelles paires ou reclassification pedagogique #42 vérifiée ancêtre du gitlink dbcd4047)
  • MGS-10-CenterBias.ipynb — audité 2026-10-04T16:05Z (dépôt c.5982044752, 0 finding individuel — lecture MD[9] correctement placée après CODE[7]/CODE[8], ~20 valeurs citées toutes vérifiées, série reading-before-code stoppée à 2 ; 4 occurrences versées aux organes gelés [paraphrase-stack c.5758434505 : argument DE/composition/métaphore dupliqué MD[9]↔MD[10 adjacentes, 4 runs verbatim ≥40 car. totalisant 315 car. ; output-uninterpreted c.5973517595 : le recuit simulé annoncé/huitième optimiseur (Rastrigin Δ +4,977, ᾱΔ 1,659) n a 0 lecture — la doctrine du régime 3 le couvrait mot pour mot ; navigation-misplaced c.5967080964 ×2 : MGS-09 sans lien avant vers MGS-10 (3ᵉ maillon à sens unique) + « Liens » omet MGS-08 dont le §Bonus portait déjà ShiftedFitness et le test du déplacement] ; figure-missing NE MORD PAS (1/1 SVG inline 3 018 o titré+légendé, 3ᵉ carnet consécutif) ; 5 mineurs ; provenance fork PR fix: restore AutoML, Infer.NET, and VirtuosoManager functionality #14/feat(genai): 100% validation all series + README hierarchy update #15 exacte, gitlink dbcd4047 inchangé, smoke 0,008247 == suite GA/Sphere (corroboration interne ResetSeed))
  • MGS-11-IslandSynergy.ipynb
  • MGS-12-AxisAlignment.ipynb
  • MGS-13-LandscapeDebias.ipynb
  • MGS-14-IslandSynergyFound.ipynb
  • MGS-15-LandscapeAnalysis.ipynb
  • MGS-16-AlgorithmSelection.ipynb
  • MGS-17-ParameterControl.ipynb
  • MGS-17b-Empirical-Algorithm-Selection.ipynb
  • MGS-18-CecBanc.ipynb
  • MGS-19-MetropolisReinsertion.ipynb — audité 2026-10-05T03:05Z (cycle 455 ; 1 finding reading-before-code + 3 versements c.5987417996 : exercise-mismatch [aides des stubs décrivant un banc absent : Seeds/Run/rastriginFn/Ackley2D/GaussianCrossover, « 2D », « 30×30=900 », « cellule 11 »], stale-claim [« dans le bruit » sans aucune dispersion committée, Ackley 10 %], navigation-misplaced [« ## Référence » plus dernière + « section 6 » fantôme] ; 17/17 valeurs citées vérifiées exactes ; 0 skip)
  • MGS-20-Langage-de-Composition.ipynb — audité 2026-10-05T04:05Z (cycle 456 ; 3 findings reading-before-code x2 [MD[12]→CODE[13] 0,484 cité avant sa cellule ; MD[20] table 6 valeurs avant CODE[21]] + paraphrase-stack [MD[16] re-explique MD[14]] + 1 versement stale-claim c.5978019972 x4 [Numpy 2.4.6 cité vs 2.4.4 committé ; plages scale/crossover contredites par CODE[15] ; fill_between fantôme en MD[18] ; "20 seeds" mixte] : c.5987979184)
  • MGS-21-Representation-vs-Algorithme.ipynb — audité 2026-10-05T06:05Z (cycle 457 ; 0 finding ; versements stale-claim c.5978019972 x3 [citation Sudoku-05 « 34 conflits/37 s » introuvable — réel 12 conflits/29657 ms ; « 111 ms » = les 111 iterations prises pour ms — réel 109 ms ; « budget complet » contredit par ses propres 6016/8000 evals] + exercise-mismatch c.5978446194 [Exo 1 : grille citée de 72 car. = ligne 1 tronquée, vraie ligne 2 = 81 car. — IndexOutOfRange] + navigation-misplaced c.5967080964 [outro « prochaine étape = MGS-20 » contredit le README Partie 4 : 19→21→22-31, MGS-20 = complément Python] ; erratum arc 456 : ordre canon 19→21, pas 20→21 : c.5989207517)
  • MGS-22-MGS-vs-Mealpy.ipynb — audité 2026-10-05T07:05Z (cycle 458 ; 1 finding mixed-run-outputs [outputs de 2 sessions à cheval sur MetaGeneticSharp#50 : §2 committé médiane 43,5/stagnation vs lecture 17,0 ; « Cohérence 4/4 » faux contre la table §2 committée] ; versements stale-claim c.5978019972 x3 [« 37 033 ms » introuvable dans Sudoku-05 ; « précipitation précoce » jamais imprimé ; axe coût inversé vs « MGS devant 0,91x »] + output-uninterpreted c.5973517595 [témoin mealpy 26/cp 35/27/26/26 jamais lu] + navigation-misplaced c.5967080964 [0 lien MGS-23] : c.5989866984)
  • MGS-23-DifferentialEvolution-vs-Mealpy.ipynb — audité 2026-10-05T08:10Z (cycle 459 ; 1 finding unit-mislabel [compteur convertedGenes par GÈNE publié comme compte de propositions : 1 144 800 = 4 graines × 36 gènes × 7 950, soit 35,8× le budget de 8 000 évaluations par graine] ; versement output-uninterpreted c.5973517595 [témoin mealpy 20 conflits + contre-vérif croisée IDENTIQUE jamais lus] ; erratum cycle 458 : versement navigation-misplaced retiré, la convention de la sous-série est lien arrière + Index ; 0 skip : c.5990605176)
  • MGS-24-SimulatedAnnealing-vs-Mealpy.ipynb — audité 2026-10-05T10:15Z (cycle 460 ; 0 finding individuel, passe mécanique+pédagogique propre ; versement output-uninterpreted c.5973517595 [témoin mealpy 34 conflits + contre-vérif croisée IDENTIQUE jamais lus, 3e carnet consécutif du motif] ; 4 mineurs ; citations croisées MGS-22/23 exactes au nombre près ; 0 skip : c.5992442180)
  • MGS-25-WhaleOptimisation-vs-Mealpy.ipynb — audité 2026-10-05T12:15Z (cycle 461 ; 0 finding individuel, passe mécanique+pédagogique propre ; versements output-uninterpreted c.5973517595 [témoin mealpy 54 conflits jamais lu, 4e carnet consécutif du motif] et stale-claim c.5978019972 [plage « 2,4×-3,3× DE/SA (re-exécutions MGS-22..27 : probe PythonNet ordre ANCIEN (LOCALAPPDATA stale servi avant C:\Python313) — re-exec cassee sur machines avec Python310 perime #13407) » : MGS-22..27 : probe PythonNet ordre ANCIEN (LOCALAPPDATA stale servi avant C:\Python313) — re-exec cassee sur machines avec Python310 perime #13407 vide de valeurs, SA committé 6,60x hors plage] ; 5 mineurs ; valeurs internes exactes, run original 1,69×/3,49× sourcé [MGS-vs-mealpy 4/9] WhaleOptimisation — le compound géométrique face au WOA canonique #12403 ; 0 skip : c.5994198895)
  • MGS-26-EquilibriumOptimizer-vs-Mealpy.ipynb — audité 2026-10-05T14:14Z (cycle 462 ; 0 finding individuel, passe mécanique+pédagogique propre ; versements output-uninterpreted c.5973517595 [témoin mealpy 26 conflits jamais lu, 5e carnet consécutif du motif, préfiguration parfaite 43/26 = graine 7 du bench] et stale-claim c.5978019972 [plage « WOA 1,78×/DE 2,37×/SA 3,26× (re-exécutions MGS-22..27 : probe PythonNet ordre ANCIEN (LOCALAPPDATA stale servi avant C:\Python313) — re-exec cassee sur machines avec Python310 perime #13407) » : MGS-22..27 : probe PythonNet ordre ANCIEN (LOCALAPPDATA stale servi avant C:\Python313) — re-exec cassee sur machines avec Python310 perime #13407 fermée sans valeur, chaque chiffre contredit le committé de sa paire ; « PSO à l'étroite sur étendues chevauchées » contredit par MGS-22 43,5 [39-48] / 28,5 [26-31] disjointes] ; 4 mineurs ; boucle corrective MGS vs mealpy : convertir les benchmarks en correctifs MGS puis re-mesurer #13778 intégralement sourcée (feat(search,#12418): MGS-26 EquilibriumOptimizer MGS vs mealpy - paire 5/9, le port face a son original #12423/MGS-26 : tranche EO de #13778 — réinsertion pairwise opt-in referme la moitié de l'écart (IMPROVES partiel) #18890), valeurs internes exactes ; 0 skip : c.5996271546)
  • MGS-27-ForensicBasedInvestigation-vs-Mealpy.ipynb — audité 2026-10-05T15:05Z (cycle 463 ; 0 finding individuel ; versements c.5997297238 : stale-claim plage moteur étendue (EO 1,41× ajoutée, contredit committé 1,34×) + plage fitness NEUVE 4/4 contradictoire + superlatif « plus grand écart de l Epic » faux vs SA 6,60× committé, exercise-mismatch ×2 (640≠800, 80≠100), figure-missing ; 4 mineurs)
  • MGS-28-BareBonesPSO-vs-Mealpy.ipynb — audité 2026-10-05T16:09Z (cycle 464 ; 0 finding individuel ; passe mécanique propre 22 cellules/0 doublon/0 CJK, valeurs du croisement toutes exactes vs outputs committés + fil rouge MGS-22 re-vérifié hors carnet ; versements c.5998316672 : output-uninterpreted c.5973517595 [témoins mealpy + contre-vérif 26=26 non lus, motif de MGS-27 rompu], figure-missing c.5979323748 ; 4 mineurs dont vestige LcgVector28(..., 51) pour 36 gènes ; positif : famille stale-claim plages MGS-22..27 : probe PythonNet ordre ANCIEN (LOCALAPPDATA stale servi avant C:\Python313) — re-exec cassee sur machines avec Python310 perime #13407 absente de cette paire, exercices cohérents).
  • MGS-29-GA-vs-Mealpy.ipynb — audité 2026-10-05T17:09Z (cycle 465 ; 0 finding individuel ; passe mécanique propre 18 cellules/0 doublon/0 CJK, toutes les valeurs du croisement qualité exactes vs outputs committés [13,5 (12-18) vs 12,5 (9-16), déterminisme 8/8, sanity 67/71/60, conflits_C = conflits_P ×4] + fil rouge MGS-22 re-vérifié hors carnet ; versements c.5999322949 : stale-claim c.5978019972 [prose « 7,83x, 0,017 vs 0,136 ms/eval » vs committé « 6,73x, 0,018, 0,120 »], navigation-misplaced c.5753954099 + check_series_refs c.5787258969 [9 renvois « cellule N », 6 périmés — numérotation MGS-28 à 22 cellules conservée sur 18], output-uninterpreted c.5973517595 [contre-vérif 16=16 IDENTIQUE, 942 ms, témoin MGS non lus], figure-missing c.5979323748 ; 4 mineurs dont « dernier cout » redoublé et « à 8 000 evals » nommés pour 6 016 mesurés ; positifs : famille plage MGS-22..27 : probe PythonNet ordre ANCIEN (LOCALAPPDATA stale servi avant C:\Python313) — re-exec cassee sur machines avec Python310 perime #13407 absente, exercices cohérents [~2 430 = 30+80×30], vestige « 51 » de MGS-28 corrigé).
  • MGS-30-ScatterSearch-Decomposition.ipynb — audité 2026-10-05T18:08Z (cycle 466 ; 0 finding individuel ; passe mécanique propre 22 cellules [12 md/10 code]/0 doublon/0 CJK/0 figure, croisement intégralement exact vs outputs committés [médianes 54,0 / 52,0 / 51,5, ms/éval 0,113 / 0,024 / 0,123, ratio noyau 0,92x, fitness pure 5,25x, déterminisme 12/12, sanity 67/71/60, scan 213 optimiseurs mealpy / 0 scatter search, budget mealpy 8 050 = 50+160x50] ; dépôt c.6000278590 : stale-claim c.5978019972 [prose « 51 gènes » vs output « 36 gènes R1 », marqueur joint LcgVector30(…, 51)], output-uninterpreted c.5973517595 [témoin mealpy 53/8 050/927 ms + contre-vérif « 53 = 53 IDENTIQUE » non lus], figure-missing c.5979323748 ; 4 mineurs dont « élitesse », « trois questions » pour deux axes, « 51/8 000 » ambigu, citation ScatterSearchReinsertion.cs non vérifiable hors dépôt ; positifs : exercices cohérents [variables en portée], zéro renvoi « cellule N » numéroté, arrivée alignée sur l annonce de MGS-29 « paire 9 (ScatterSearch) »).
  • MGS-31-Synthese-Croisee.ipynb — audité 2026-10-05T19:20Z (cycle 467 ; 0 finding individuel ; passe mécanique propre 21 cellules [13 md/8 code]/0 doublon/0 CJK, axe QUALITÉ intégralement exact vs les 9 paires [médianes/étendues re-dérivées à la main toutes conformes, intégrité 9/9 PASS, trajectoires checkpoints P7/P9 exactes, épilogue MGS vs mealpy : convertir les benchmarks en correctifs MGS puis re-mesurer #13778 sourcé chiffre à chiffre] ; dépôt c.6001431816 : stale-claim c.5978019972 ×4 [vague de coûts récoltée éteinte 8/9 paires — ratios parsés 0,81/2,37/3,26/1,41/3,06/7,83 vs imprimés actuels 1,09/3,36/6,60/1,34/5,63/6,73, seul P9 conforme au millième ; « fitness seule » 5,13x/5,33x saisis à la main hors harnais — 5,33 introuvable dans tout output committé, violation de la règle « aucun nombre saisi à la main » ; « Deux paires seulement journalisent ces checkpoints » faux vs MGS-22/23 actuels à colonnes cp25/50/75/100 ; « quatre paires à trois bras »/« P1 à bras multiples » contredit par la propre récolte CODE[2] « P1 mgs x4, mealpy x4 »], output-uninterpreted c.5973517595 [INTEGRITE 9/9 annoncé MD[3], verdict jamais lu] ; 2 mineurs [« triple écart » P5 42 vs 25 = 1,68× ; « chaque paire » fitness — MGS-29 sans cellule fitness] ; positifs : premières figures SVG légendées du sous-ensemble, exercices cohérents, conclusions d'axe robustes à la re-mesure [≥2x 5/9 inchangé, 9/9 > 1x]).

Activity

  1. jsboige commented on Sep 28, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-09-28T16:05Z — MyIA.AI.Notebooks/Search/Applications/CSP/App-20b-SudokuBenchmark-CSharp.ipynb (série Search, Applications/CSP, twin C# de App-20 — index 599/742, 55 227 o, 27 cellules : 15 md + 12 code, ec 1-12 séquentiel, 0 doublon jaccard>0.55, 22 headers uniques, kernel .net-csharp)

    (Cycle 15:05Z non exécuté — session consommée par une frontière de compaction ; aucune écriture entre 14:15Z et ce cycle, ordre inchangé, aucun rattrapage double requis.)

    Parité vs twin Python : PROUVÉE au vert sur les invariants structurels — grilles byte-identiques (3 × 81 valeurs comparées), compteurs d'appels identiques aux outputs committés des DEUX jumeaux (naïf 4209/55/879418, MRV 52/46/5565, AC-3 82/82/981113 — valeurs prouvées par ré-implémentation JS au cycle 14:05Z), invariants CP-SAT identiques (branches 0/0/0 presolve-on ; Hard presolve-off 5 branches/2 conflicts ; prop.bin 340/251/790 ; prop.int 111/49/213), OR-Tools épinglé 9.15.6755 des deux côtés. La table de parité MD[14] est EXACTE. Liens relatifs résolus (App-20 Python, App-7-Wordle, README Search, Part2-CSP) ; #4956/#10382/#11200 existent. Frontière #13410 respectée (une seule lecture par output : MD[14] pour le benchmark socle, MD[19] pour CP-SAT). Exercices = stubs TODO, zéro solution-leak.

    0 finding, 4 instances versées (classes factual-mislabel / concept-error / navigation-misplaced déjà ARRÊTÉES >3 occurrences — organes proposés au fil de la campagne) :

    1. factual-mislabel — MD[14] id=ca7838d6 (répliqué MD[26] id=13aaa8b6) : « le Python original timeout (runtime machine-dep ; succes=False a l'issue du budget 60 s, qui est un parametre de benchmark deterministe) apres 981 113 appels. Ce twin C# termine sous le budget » — la sortie committée du twin Python dit Hard | AC-3 + backtracking | succes=True | temps=18852.22 ms | appels=981113 : le Python a terminé sous le budget (18,9 s < 60 s) et le contraste de succès « False côté Python / True côté C# » raconté deux fois (synthèse + conclusion) n'existe dans aucun output committé — c'est le socle factuel de la moitié de la section « Ecart runtime » et d'une puce entière de conclusion.

    2. factual-mislabel — MD[2] id=da1d1c3b : « Trois grilles 9x9 representative des niveaux de difficulte croissante (0 = case vide) » — démenti par les outputs des DEUX jumeaux : naïf Easy 4209 appels > Medium 55, MRV 52 > 46 (inversion héritée du banc du twin Python, versée c.5871742425 : la grille « Easy » porte 30 indices, moins que la « Medium » à 36) ; seule la marche vers Hard est croissante.

    3. concept-error — CODE[25] id=1353df92 (indice de l'exercice 3) : « // Indice : pour l unicite, resoudre 2 fois avec ordre de parcours different et comparer. » — deux premières solutions concordantes, même sous 2 ordres de parcours différents, ne prouvent pas l'unicité ; la méthode exacte est d'énumérer jusqu'à 2 solutions (arrêt à la seconde). Version atténuée du même défaut que le twin Python MD[25] id=59032a4b (« comparer les solutions sur les 4 solveurs »).

    4. navigation-misplaced — MD[26] id=13aaa8b6 : « concorde exactement entre les deux langages (tableau §4) » — la table de parité des appels vit dans la section « Synthese » NON numérotée (entre §3 et §4) ; la §4 (Tranche 2 CP-SAT) ne contient que la table des invariants CP-SAT : le lecteur est envoyé au mauvais endroit.

    Micros non déposés : (a) MD[0] « (.NET 9, 0 NuGet) » — vrai pour le socle from-scratch, démenti par #r "nuget: Google.OrTools" en Tranche 2, qui l'annonce toutefois explicitement ; (b) MD[14] « Ces comptes concordent au nombre pres » — formulation ambiguë pour une concordance exacte ; (c) coquilles hors classes d'audit (« retournz-le » MD[22], « d'complexite » MD[0], « grainee » MD[14]) ; (d) le twin Python asserte la version ortools chargée au runtime, le C# ne l'assert pas (épinglage par #r seul).

    Pédagogie : SOLIDE et meilleure que le twin Python — critère de parité explicite dès MD[0] (appels déterministes = invariant structurel vs temps machine-dep), table de parité dédiée, progression « socle from-scratch → moteur de production » bien motivée, sorties interprétées sans doublage (#13410 tenu). DÉFAUT CENTRAL : la section « Ecart runtime » repose sur un épisode de timeout Python absent des outputs committés (instance 1) — seule matière du carnet qu'un apprenant ne peut pas constater en ouvrant le jumeau.

    Garde-fou : VERT 742/742 (head c841262 mouvant, added/removed 0 — mouvement hors population NC). 116 PR ouvertes croisées : aucune ne touche le carnet, skips 0. Artefact organes ai-01 : toujours absent de #17073 → organes OFF. — NanoClaw (myia-ai-01)

  2. jsboige commented on Sep 28, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-09-28T18:05Z — MyIA.AI.Notebooks/Search/Applications/CSP/App-21-VoiceLeading.ipynb

    Notebook : MyIA.AI.Notebooks/Search/Applications/CSP/App-21-VoiceLeading.ipynb (index 600/742 du fichier population NC ; 194 195 o ; 34 cellules = 19 md + 15 code ; ec 1→15 séquentiel ; kernel python3 ; 0 doublon jaccard > 0.55 ; 15 headers tous distincts ; 0 CJK).
    Série Search — sous-série Applications/CSP, 21ᵉ carnet de la sous-série ; précédents immédiats de l'arc : App-20-SudokuBenchmark-Python (14:05Z) et App-20b-SudokuBenchmark-CSharp (16:05Z).

    Verdict : 0 finding, 5 instances versées

    Aucune classe au-dessus du seuil n'est restée ouverte sur ce carnet. Les quatre classes touchées sont soit arrêtées avec organe posé (factual-mislabel → check_prose_vs_outputs.py ; stale-claim → organe générique posé 2 lanes ; concept-error → check_exercise_expected_values.py), soit déjà pourvues (output-uninterpreted — organe proposé par moi le 2026-09-22T04:11:19Z sur #17073, 5 instances alors ; je n'en repose pas).

    Instances versées (cellule + extrait verbatim + classe + pourquoi)

    1. factual-mislabel — MD[9] f11fee4e : « La voix C4 ne garde pas « sa » note : l'affectation optimale envoie C4 vers A3 (3 demi-tons) et transfère le do partagé à la voix E4 (4 demi-tons), tandis que le sol monte d'un ton vers F4. » → la sortie committée de la cellule immédiatement au-dessus (CODE[8] 71b86428, ec=4) imprime C4 -> C4 cout 0 / E4 -> A3 cout 7 / G4 -> F4 cout 2 : l'affectation racontée est celle du départage choriste, calculée deux cellules plus bas (CODE[10] 606f83b6, ec=5 : C4 -> A3 cout 3 / E4 -> C4 cout 4). Le §3 annonce le départage (MD[7] 73d034aa) mais CODE[8] applique linear_sum_assignment nu — la lecture décrit une affectation qu'aucune sortie ne porte à cet endroit. (Accompagné : « le sol monte d'un ton vers F4 » — G4→F4 descend.)
    2. factual-mislabel — MD[13] d515b22a : « l'écart typique d'un à trois demi-tons paraît modeste, mais il se concentre sur une seule voix » → les 5 écarts du balayage (CODE[12] 0945f33f, ec=6) valent 4, 4, 4, 4 et 6 ; la sortie affiche elle-même « Ecart moyen (cas sous-optimaux) : 4.40 demi-tons » et « Ecart max : 6 ». Aucun écart ≤ 3, dans aucun des deux énoncés committés. Recompté indépendamment (JS, 36 transitions reproduites ligne à ligne).
    3. factual-mislabel — MD[16] 40cfb7cd : « le do « descend » fonctionnellement vers fa (position -1) pendant que le sol glisse vers fa et le mi vers do — chaque voix se déplace d'au plus une position de quinte » → la figure 2 (CODE[15] 3e171482, ec=8) trace les flèches de o_assign, soit C→A, E→C, G→F : aucune flèche C→F, et les déplacements sur la ligne des quintes valent 3, 4 et 2 positions (unité « positions de quinte » du carnet lui-même, CODE[8]) — la lecture la plus favorable (coûts du §3 : 0, 1, 2) dépasse encore 1 pour le sol. Les deux moitiés de la phrase sont démenties par la cellule qu'elle commente.
    4. stale-claim (référence cross-fichier) — MD[16] 40cfb7cd + MD[23] 61591807 : « 02-6-MIDI-Generation.ipynb génère des progressions d'accords (mode diatonique) » / « ce notebook exporte ses progressions en pitch classes (fichiers midi_output/*.mid + résumé JSON) » → les deux fichiers liés, lus à la tête courante (GenAI/Audio/02-Advanced/02-6-MIDI-Generation.ipynb, 17,4 Mo, 44 cellules ; 04-Applications/04-3-Music-Composition-Workflow.ipynb, 32,9 Mo) ne contiennent aucune occurrence de progression, diatonique|diatonic, pitch class, midi_output (grep brut) ; le premier s'intitule « Generation MIDI avec midi-model (SkyTNT) ». L'historique du fichier (API commits, 5 commits) ne montre aucun renommage récent : la caractérisation est fausse (ou la cible est périmée) — le §6 s'appuie donc, dans les deux cas, sur un générateur qui ne fait pas ce qui est décrit.
    5. concept-error — CODE[17] 1129c2ec (ec=9) : new_voicing = [None] * len(target) puis for i, j in assignment: new_voicing[j] = target[j] → new_voicing ≡ target : l'affectation est jetée, revoice_progression restitue les voicings du dictionnaire à l'identique. La sortie committée le prouve : les deux lignes « Voicing glouton » / « Voicing Kuhn-Munkres » sont identiques accord par accord, et « Gain du post-traitement optimal : 0 demi-tons sur la progression (0% plus de mouvement pour le glouton) ». Conséquence : le §6 ne peut structurellement rien minimiser — la brique annoncée comme « étape choriste » est un no-op. (La sortie du gain 0 est aussi une instance output-uninterpreted — seule sortie jamais lue du carnet : MD[18] enchaîne sur le §7 ; organe déjà proposé, cf. ci-dessus.)

    Micros NON déposés (prouvables mais bénins / sous le seuil de solidité)

    • MD[7] 73d034aa : « F (position -1) est plus proche de C (distance 1) que ne l'est G » — égalité (F-C = 1 ; C-G = 1) : l'assertion est fausse, mais l'exemple numérique qui suit reste juste.
    • Navigation MD[0] ffaa4ea4 : [Index](../../README.md) et [Série Search](../../README.md) pointent le même fichier (la convention sœur, App-1, porte Part2-CSP pour le second) — ambiguïté, pas lien mort (les 5 liens relatifs du carnet résolvent, vérifiés depuis son dossier).
    • Coquilles : MD[3] 43cb34c9 (« Les grandes registres … durcis la texture ») ; MD[23] 61591807 (« le notebook reste exécutable »).
    • MD[13] d515b22a : « la garantie Prong B (problème non trivial) de la série » — jargon du pilotage non défini dans le carnet.
    • CODE[19] 5aeacb00 : le filtre d_start != 0 de l'audit Fux laisse passer les unissons parallèles (latent — inerte sur ces données, aucun des 4 optimums concernés n'en porte).

    Passe mécanique (v2.1)

    Extraction par script node (markdown entier + outputs réduits à des empreintes) ; aucun JSON brut chargé en contexte.

    • Outputs authentiques : ré-implémentation JS indépendante (greedy + Kuhn-Munkres, permutation exhaustive) — les 36 transitions du balayage, les 5 écarts, le pire cas G/1 -> C/2 (greedy 15 vs optimal 9), le fil rouge (matrice [[3,0,5],[7,4,1],[10,7,2]], greedy 11, optimum 9, perm [1,0,2]) et les écarts greedy/optimal de CODE[10] sont reproduits exactement. 0 output fabriqué.
    • Doublons : 0 (jaccard > 0.55 sur toutes les cellules md) ; headers : 15, tous distincts.
    • Gates Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 : 1 lecture markdown par output respectée (0 seconde lecture, 0 empilement — frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue) ; valeurs citées vs outputs committés = les seules divergences sont les instances 1-3 ci-dessus ; 0 solution-leak (les 4 exercices sont des stubs TODO/Exercice a completer, ec 12-15, aucune narration de solution) ; prose dense mais pas de visée de seuil.
    • Sortie non interprétée : 1 (§6, instance 5) — toutes les autres sorties du carnet sont lues.

    Couche pédagogique

    • Arrivée : cohérente. L'affectation est une famille d'algorithmes neuve pour l'arc CSP (les 20 carnets précédents = recherche exhaustive, propagation, CP-SAT, coloriage, WFC) — le carnet motive la bascule (formulation matricielle, Kuhn 1955/Munkres 1957) et teste ses prérequis dès CODE[2] (python 3.13, numpy, scipy linear_sum_assignment, matplotlib). L'hommage Munkres (1930-2026) est documenté et adossé à des liens qui résolvent.
    • Ordre des concepts : §2 matrices (2 métriques) → §3 scipy + départage choriste → §4 greedy vs optimal mesuré → §5 figures → §6 pont GenAI → §7 CP-SAT/Fux → §8 exercices → §9 conclusion. Progression tenue ; le maillon faible est le §6 (no-op + sortie jamais lue + générateur amont mal décrit) : le lecteur y lit un résultat (« gain 0 ») que personne ne commente, à la jointure avec la §7 qui, elle, est le point fort du carnet (audit → réparation, INFEASIBLE comme preuve et non comme échec, mesure de durée scipy vs CP-SAT).
    • Difficulté : saut marqué au §7 (BoolVar réifiés sur paires de permutations, infaisabilité) mais décomposé et adossé aux exercices ; niveau global intermédiaire, §7 avancé.
    • Clarté / figures : pas de mur de texte (md max 2 905 car.), 2 figures titrées et légendées ; la lecture de la figure 1 est exacte, celle de la figure 2 partiellement fausse (instance 3) — pas de figure manquante ni non légendée.

    Garde-fou, skips, organes

    Suite de la série

    Case App-21-VoiceLeading.ipynb cochée dans la checklist de cette issue ; 14/156 carnets Search audités ; prochain désigné par index : App-22-EdgeColoring-Tutte.ipynb (index 601) — à re-vérifier contre les gels de la file Search au prochain cycle.

    Rappel de cadence : le créneau 15:05Z n'a rien tracé (frontière de compaction côté session, consigné au ledger le 28/09 14:15Z) et le créneau 17:05Z non plus — dernier dépôt avant celui-ci : App-20b, 16:14:13Z, sur cette issue.

  3. jsboige commented on Sep 28, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-09-28T19:05Z — MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb

    Notebook : MyIA.AI.Notebooks/Search/Applications/CSP/App-22-EdgeColoring-Tutte.ipynb (index 601/742 du fichier population NC ; 285 879 o ; 30 cellules = 18 md + 12 code ; ec 1→12 séquentiel ; kernel python3 ; 0 doublon jaccard > 0.55 ; 21 headers tous distincts ; 0 CJK).
    Série Search — sous-série Applications/CSP ; précédent immédiat de l'arc : App-21-VoiceLeading (18:05Z). Aucune PR ouverte ne touche ce carnet.

    Verdict : 1 finding, 0 instance versée

    Finding (cellule + extrait verbatim + classe + pourquoi)

    1. factual-mislabel (sous-famille « prose vs source externe » — hors portée de l'organe check_prose_vs_outputs.py, qui vise les outputs internes du carnet) — MD[2] 2f480625 : « Conjecture de Tutte (1966) : tout graphe cubique planaire sans pont est 3-arête-colorable — équivalente au théorème des quatre couleurs (résolue par conséquent en 1976). » puis, à propos du théorème 2026 : « Ce résultat étend la conjecture de Tutte au-delà du planaire, avec une preuve assistée par ordinateur et un algorithme constructif en $O(n^2)$ » ; repris MD[17] fc7a3a23 : « Tutte-1966 couvre le planaire ; le théorème de arXiv 2608.22870 (2026) étend la 3-coloration aux cubiques sans pont apex — y compris celles qui sont non planaires, zone où aucune conjecture antérieure n'osait s'aventurer » → l'abstract du papier cité lui-même (arXiv 2608.22870, v1 du 24/08/2026, lu ce cycle) énonce : « We prove that every 2-connected apex cubic graph is three-edge-colorable. This result gives the final piece of the proof for the well-known Tutte's three-edge-coloring conjecture from 1966 » — relation inversée : les auteurs présentent le résultat apex comme complétant la conjecture de Tutte-1966 (dernière pièce de sa preuve), pas comme la dépassant ; et l'équivalence planaire/4CT que le carnet date de « Tutte (1966) » est de Tait (1880) (l'étude des snarks naît des travaux de Tait sur le 4CT ; la « conjecture de Tutte » 1966 de cette famille est usuellement l'énoncé plus large sur les graphes sans mineur de Petersen). Pourquoi : l'apprenant repart avec la carte des conjectures à l'envers — il croit le théorème 2026 au-delà de Tutte-1966 alors que le papier le donne comme la dernière pièce de sa preuve, et il date de 1966 une équivalence de 1880.

    Vérifié et ACQUITTÉ au passage (non-finding, pour éviter un faux positif symétrique) : la traduction de l'hypothèse du papier (« 2-connected ») en « sans pont » par le carnet est mathématiquement correcte pour les graphes cubiques — un sommet d'articulation implique au moins un pont (les 3 arêtes d'un sommet cubique se répartissent sur ≥ 2 composantes après coupure, dont une n'en reçoit qu'une seule) ⇒ cubique sans pont ≡ 2-connexe. Le finding ne porte que sur l'étiquetage historique, pas sur l'énoncé mathématique utilisé, qui est juste.

    Micros NON déposés (sous le seuil de solidité / bénins)

    • MD[17] fc7a3a23 : « Pour $n \ge 8$ elles [les échelles de Möbius] sont non planaires » — littéralement vrai, mais le raccourci laisse lire « n < 8 ⇒ planaire », faux pour M6 ≅ K₃,₃ (non planaire) ; le carnet ne teste que M8-M12 et ne prétend rien sur M6 — ambiguïté de raccourci, aucune erreur committée.
    • MD[29] eb9d07a5 : référence « Tutte (1966), On the algebraic characterization of some graph classes » — titre non recoupé ce cycle ; à recouper si le finding 1 déclenche une correction d'étiquetage.

    Passe mécanique (v2.1)

    Extraction par script node (markdown entier + outputs réduits à des empreintes) ; aucun JSON brut chargé en contexte.

    • Ré-exécution impossible depuis ce siège (python3 absent du conteneur) — vérification par recoupement interne : toutes les valeurs citées dans les 7 lectures sont présentes dans les outputs committés (tableau des témoins ligne à ligne : K4 4/6, prisme 6/9, Petersen 10/15 False/False, pont 10/15 True/True ; compteurs de l'échantillonnage 44+4=48=instances listées ; « 3×3=9 » = m du prisme ; composantes |A|=5, 3|A|=15=2|E_A|+1) ; timings non ronds (12.1/14.9/1.3/1.2 ms) ; ec 1→12 séquentiel.
    • Constructions vérifiées à la main : cubic_with_bridge (deux K4−{arête} recollés par wa/wb) est bien cubique, pont unique wa-wb, composantes de 5 sommets impaires — conforme aux sorties committées ; mobius_ladder (cycle + barreaux i↔i+n/2) bien cubique ; Petersen/4CT/Vizing par connaissance standard.
    • Doublons : 0 (jaccard > 0.55 sur toutes les paires md) ; headers : 21, tous distincts.
    • Gates Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 : 1 lecture par output respectée partout (7 lectures, chacune immédiatement après sa cellule ; 0 seconde lecture — frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue) ; 0 solution-leak (3 exercices = stubs TODO + tests commentés dont les valeurs attendues sont toutes exactes : χ'(K4)=3, χ'(Petersen)=4, χ'(K3,3)=3, χ'(pont)=4) ; aucune prose de visée de seuil.

    Couche pédagogique

    • Arrivée : au bon moment. Prérequis explicite App-2 (coloration de sommets) relu à la tête courante : CP-SAT y est déjà enseigné (82 mentions ortools/cp.model), DSATUR aussi ; Vizing/couplages jamais vus (0 mention) → App-22 les introduit from scratch. Aucun gap de prérequis.
    • Ordre des concepts : témoins (§2) → solveur (§3) → parité (§4) → théorème 2026 (§5) : chaque section s'appuie sur la sortie de la précédente (tableau → verdicts ; INFEASIBLE du pont → argument de parité ; Möbius → échantillonnage). Le fil « SAT = témoin / UNSAT = certificat / UNKNOWN = rien » est introduit §3 (avec contrôle négatif à limite 1e-9 s) et tenu jusqu'à la conclusion — c'est le point fort du carnet avec l'encadré d'honnêteté méthodologique MD[21] (« elle conforte, elle ne démontre pas », papier v1 non revue).
    • Difficulté : progression douce, durées affichées (~5/~8/~8/~5/~10 min) ; la parité §4 est décomposée en 3 pas numérotés adossés à la sortie mesurée — aucun saut.
    • Clarté / figures / sorties : pas de mur de texte (md max 2 085 car.) ; 2 figures titrées et lues (pont en rouge ; colorations prisme/Petersen) ; toutes les sorties du carnet sont interprétées — 0 output-uninterpreted.
    • Exercices : alignés (réutilisent edge_coloring_cpsat, describe, l'échantillonnage), stubs exécutables, indices sans fuite de solution.

    Garde-fou, skips, organes

    Suite de la série

    Case App-22-EdgeColoring-Tutte.ipynb cochée dans la checklist de cette issue ; 15/156 carnets Search audités ; prochain désigné : App-23-Factorio-Balancer.ipynb (index 602) — à re-vérifier contre les gels de la file Search et les PR ouvertes au prochain cycle.

  4. jsboige commented on Sep 28, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-09-28T20:05Z — MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb

    Notebook : MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb (index 602/742 du fichier population NC ; 203 558 o ; 43 cellules = 24 md + 19 code ; ec 1→19 séquentiel ; kernel python3 ; 0 doublon jaccard > 0.55 ; 47 headers tous distincts ; 0 CJK).
    Série Search — sous-série Applications/CSP ; précédent immédiat de l'arc : App-22-EdgeColoring-Tutte (19:05Z). Aucune PR ouverte ne touche ce carnet.

    Verdict : 0 finding, 0 instance versée

    Chaque claim vérifiable a été recoupé ; aucun écart n'a survécu à la vérification. Les quatre candidats naturels d'un faux positif sont acquittés ci-dessous.

    Vérifié et ACQUITTÉ (non-findings, pour éviter les faux positifs symétriques)

    1. Argument structurel du durcissement C9 — MD[33] 735fbb81 : « tout composant admettant une entree N a aussi la sortie S parmi ses sorties (belt-S, mixer-SE, mixer-SW), or la face S est fermee sur la rangee du bas » — recoupé contre la table COMP_IN/COMP_OUT committée (sortie de CODE[6]) : exact (belt-S IN={N}→OUT={S} ; mixer-SE IN={N,E}→OUT={S,E} ; mixer-SW IN={N,W}→OUT={S,W}) ; C6 ferme bien la face S de la rangée du bas. L'inférence « la lane interne ne peut rien transporter sous C9 → retour au cas carré infaisable » est à la fois argumentée et confirmée par les trois OPTIMAL -> INFEASIBLE committés.
    2. Source canonique authentique — MD[35] cite « Venturini, G. (2024-12-27). Learning Solver Design: Automating Factorio Balancers, article de blog » : le billet existe (gianlucaventurini.com/posts/2024/factorio-sat, 2024), sujet conforme (belt balancing Factorio par MIP + solveurs SAT), et le carnet déclare explicitement sa divergence de modélisation (mixer redistributif à 1 cellule au lieu du splitter à 2 cellules).
    3. Aucune valeur fabriquée — les 6 items du verdict MD[33] et les 7 du récapitulatif MD[42] citent exclusivement des valeurs présentes dans les outputs committés : carrées 2×2/3×3/4×4 INFEASIBLE (§8.2 ✓) ; ceil N=3 INFEASIBLE et N=2/N=4 OPTIMAL (§8.3 ✓, arithmétique 3·⌈8/3⌉=9>8 exacte) ; contrôle N=3, P=9 OPTIMAL part 3.0 + Flux/LP True (§8.4 ✓) ; N=5 FEASIBLE obj 27.0 err 0.6 sans comparaison MIP revendiquée (§8.5 ✓) ; pire |s1−s2| = 8.0000 sur les 6 solutions et 0/6 survivent, re-résolutions OPTIMAL -> INFEASIBLE ×3 y compris N=2 divisible où chaque livraison vaut exactement 4 (§8.6 ✓) ; « {2, 3, 3} » cohérent avec la bande [2, 3], l'err max 0.6667 = 2/3 et la somme 8 ; MIP err 4.44e-16 = livraison P/N exacte en continu.
    4. « N/A » légitimes, pas d'output fake — les N/A committés n'apparaissent que pour l'objectif d'un statut INFEASIBLE (aucune solution ⇒ aucun objectif) ; timings non ronds (37.3 / 892.3 / 34 478.7 ms ; 72.8 / 100.2 / 1 374.3 ms) ; branches non rondes (955, 18 129) ; aucun QuantBook.

    Passe mécanique (v2.1)

    Extraction par script node (markdown entier + outputs réduits à des empreintes) ; aucun JSON brut chargé en contexte.

    • Ré-exécution impossible depuis ce siège (python3 absent du conteneur) — vérification par recoupement interne des sorties committées (tableau ci-dessus) ; les deux validateurs du carnet (audit_solver_flow sur le tenseur concret, validate_balancer_topology en LP GLOP reconstruit) sont eux-mêmes relus ligne à ligne : leurs contrôles (capacité partagée ≤ P par face toutes sources confondues, égalité des faces internes appariées, injections exactes, matrice de sortie) correspondent aux verdicts True/False committés, y compris les trois contrôles négatifs (tout belt-E 2×3 False, ancienne grille 2×2 False, baseline mixer isolé False).
    • Gates Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 : chaque output est lu au plus une fois ; les lectures vivent majoritairement dans des blocs « Lecture : » committés dans les sorties (CODE[26], CODE[32] — style légitime, aucune lecture markdown dupliquée par-dessus) ; le verdict MD[33] et le récap MD[42] synthétisent à une altitude distincte (interprétation cumulative) sans re-citer verbatim une lecture existante — frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue. 0 solution-leak : les 3 exercices sont des stubs TODO + pass dont les indices sont déclarés comme indices et renvoient à la mécanique du carnet, jamais à une solution ; aucune prose de visée de seuil.
    • Navigation vérifiée au head (52f7b328) : lien précédent → App-22, index → Applications/README.md, suivant → App-26 — les trois cibles existent dans l'arbre.

    Couche pédagogique

    • Arrivée : au bon moment. Le concept discriminant (partage continu P/N en MIP vs unités entières en CP-SAT) est introduit from scratch en §6 (MD[25] pose le mécanisme bande/ceil avant la moindre mesure) ; le modèle (grille, composants, C1–C9) est posé §2-§3 avant tout solveur. Aucun prérequis non déclaré.
    • Ordre des concepts : composants → baselines → MIP → CP-SAT → comparaison → validateurs indépendants → durcissement C9 → verdict : chaque section s'appuie sur les sorties de la précédente, et la prédiction de MD[13] (« le LP multicommodité de la section 7 le rejettera ») est confirmée par la sortie committée du validateur.
    • Difficulté : budgets de temps par section (~40 min affichées au total), aucun saut ; l'honnêteté des statuts (FEASIBLE ≠ OPTIMAL, UNKNOWN ≠ INFEASIBLE) est inculquée deux fois (avertissement MD[25], item 5 du verdict) puis exigée de l'apprenant dans l'exercice 3.
    • Point fort : le durcissement C9 quantifie la relaxation du mixer au lieu de la laisser en angle mort (0/6 survivent, re-résolutions INFEASIBLE ×3, cause structurelle argumentée) — et MD[35] le déclare dans les limites du carnet.
    • Clarté / figures / sorties : pas de mur de texte (md max 2 316 car.) ; figures de grilles titrées ; 0 output-uninterpreted (chaque tableau porte sa lecture committée, le verdict referme le tout) ; exercices alignés — l'exercice 1 prolonge exactement la limite déclarée (underground belts hors périmètre), le 2 prolonge la divisibilité §6, le 3 prolonge l'item 2 du verdict.

    Garde-fou, skips, organes

    Suite de la série

    Case App-23-Factorio-Balancer.ipynb cochée dans la checklist de cette issue ; 16/156 carnets Search audités ; prochain désigné : App-26-CoveringArrays-Guarantee-Audit.ipynb (index 603) — à re-vérifier contre les gels de la file Search et les PR ouvertes au prochain cycle.

  5. jsboige commented on Sep 28, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-09-28T21:05Z — MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb

    Notebook : MyIA.AI.Notebooks/Search/Applications/CSP/App-26-CoveringArrays-Guarantee-Audit.ipynb (index 603/742 du fichier population NC ; 90 997 o ; 40 cellules = 28 md + 12 code ; ec 1→12 séquentiel ; kernel python3 ; 0 doublon jaccard > 0.55 ; 18 headers tous distincts ; 0 CJK).
    Série Search — sous-série Applications/CSP ; précédents immédiats de l'arc : App-22-EdgeColoring-Tutte (19:05Z), App-23-Factorio-Balancer (20:05Z). Aucune PR ouverte ne touche ce carnet.

    Verdict : 0 finding, 0 instance versée

    Chaque claim vérifiable — interne (valeurs citées vs outputs committés) comme externe (attribution au projet étudiant H4) — a été recoupé ; aucun écart n'a survécu. Les candidats naturels d'un faux positif sont acquittés ci-dessous.

    Vérifié et ACQUITTÉ (non-findings, pour éviter les faux positifs symétriques)

    1. Claims sourcés sur le projet étudiant vérifiés au premier degré (la matière la plus risquée de ce carnet, car externe) — MD[0] f184d689 affirme que la reproduction du projet H4 (Valérian Pichot, PR feat(ECE): TP 2026 audit complet - Notebooks + Sujets Projet 2 #49 #58) a révélé deux fragilités :
      • coquille itertooCPSATGeneratorls : présente verbatim dans le carnet étudiant (H4-Covering-Arrays/src/main.ipynb, cellule code du benchmark, 1 occurrence — itertooCPSATGeneratorls.product(ks, vs)) ; corollaire vérifié : les outputs de benchmark committés ne peuvent pas être régénérés par ce code (NameError attendu à l'appel), ce qui rend cohérente la « reproduction fraîche » revendiquée par CoursIA ;
      • « 38 interactions signalées alors qu'elles étaient sémantiquement infaisables » (MD[18] b4e434d0) : recalculé exactement depuis les données committées étudiantes — instance contrainte (5 paramètres 4/2/2/2/4, t=3, 3 règles métier) : univers cartésien 200 interactions, 162 faisables dont 162 couvertes par la suite committée (32 lignes, toutes admissibles), validateur naïf = 38 manquantes, toutes impossibles (0 faisable parmi elles) — le chiffre, la cause et l'acquittement du solveur étudiant sont exacts ;
      • provenance : PR feat(ECE): TP 2026 audit complet - Notebooks + Sujets Projet 2 #49 #58 existe (mergée 2026-05-22, « H4 - Covering Array »), commit 75000d6d existe (message « feat(H4): génération de Covering Arrays t-wise en CP-SAT (PR feat(ECE): TP 2026 audit complet - Notebooks + Sujets Projet 2 #49 #58) »), licence MIT confirmée — les trois références citées en tête et dans le print d'environnement sont authentiques.
    2. Aucune valeur fabriquée — chaque valeur citée dans les 9 lectures est présente dans les outputs committés : 24 interactions / 6 par ligne / borne ceil(24/6)=4 (§2 ✓) ; N=5 OPTIMAL borne=5 + oracle 24/24 valid=True (§3 ✓) ; borne v³=8 atteinte, N=8, validation True (§3.1 ✓) ; 24 cartésiennes / 22 faisables / 2 « manquantes » naïves = exactement les deux règles interdites (A=1,B=1) et (C=1,D=0) (§4 ✓ — les interactions impossibles committées ((0,1),(1,1)) et ((2,1),(3,0)) sont les règles métier elles-mêmes) ; benchmark : 54=C(4,2)·3², 40=C(5,2)·2², 24, 22 interactions, heuristiques 6/6/9/6 et 6/6/9/6 validées (§5.1 ✓, arithmétique exacte) ; intervalle [6, 8] de §6 explicitement synthétique (n+2 construit dans le code et déclaré en prose).
    3. Pas d'output fake — versions réalistes (Python 3.13.14, OR-Tools 9.15.6755, pandas 2.3.3), timing non rond (0.0033 s), les 3 stubs d'exercices affichent « Exercice à compléter » (pattern légitime de la série), aucun N/A, aucun QuantBook, aucun nombre rond suspect.
    4. Honnêteté des statuts inculquée ET pratiquée — la ligne ternaire du benchmark (statut=FEASIBLE, borne=0, N=9) n'est jamais présentée comme optimale : MD[27]/MD[30] conditionnent la certification à statut=OPTIMAL et borne=exact_N, et §6 transforme ce cas en fiche de lecture (intervalle, « formulation interdite » affichée). Le carnet enseigne exactement la discipline qu'il audite — le point le plus difficile à contrefaire.

    Passe mécanique (v2.1)

    Extraction par script node (markdown entier + outputs réduits à des empreintes) ; aucun JSON brut chargé en contexte.

    • Ré-exécution impossible depuis ce siège (python3 absent du conteneur) — vérification par recoupement interne des sorties committées + recalcul combinatoire indépendant en node du claim externe « 38 » (point 1 ci-dessus) depuis les données committées étudiantes.
    • Gates Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 : 1 lecture par output, placée après la cellule (9 lectures pour les 9 outputs réels ; 0 seconde lecture — frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue) ; les « Points de contrôle » suivant les exercices lisent le résultat attendu, pas un output (pattern établi de la série, pas une 2ᵉ lecture) ; 0 solution-leak (3 stubs TODO + None, indices méthodologiques : « commencez par les quatre combinaisons des deux premières colonnes », « stockez len(aetg_like(..., seed=s)) », « une bonne séparation des responsabilités » — aucun ne livre la suite) ; aucune prose empilée ni visée de seuil.
    • Doublons 0 (jaccard > 0.55 sur toutes les paires md) ; headers 18 tous distincts ; navigation vérifiée au head (52f7b328) : les 5 cibles existent — Applications/README.md, Part2-CSP/CSP-3-Advanced.ipynb, Part2-CSP/CSP-5-Optimization.ipynb, App-20-SudokuBenchmark-Python.ipynb, Hybrid/App-24-MAPF-Guarantee-Audit.ipynb.

    Couche pédagogique

    • Arrivée : au bon moment. Covering array défini from scratch §2 (aucune dépendance à App-22/App-23), set cover §3 expliqué avant le solveur, IPOG/AETG posés historiquement §5 avec l'avertissement explicite « pas des implémentations d'IPOG ou d'AETG » ; prérequis déclarés (combinatoire élémentaire, CSP-3) tous couverts par CSP-3. Aucun gap.
    • Ordre des concepts : borne de comptage → exact → borne serrée → contraintes sémantiques (le « niveau zéro » : définir l'univers exigible) → heuristiques → benchmark → sensibilité à la graine → lecture d'un time-out → limites : chaque section réutilise les sorties de la précédente (les 24 interactions de §2 sont re-citées en §3 et §4 ; semantic_ok de §4 entre dans le benchmark §5.1).
    • Difficulté : 55 min affichées, aucun saut ; §6 décompose la lecture d'un time-out en fiche de lecture + exemple synthétique déclaré comme tel.
    • Clarté / figures / sorties : pas de mur de texte (md max 2 144 car.) ; figure barres titrée, axes légendés, légende explicite, et MD[28] prévient ce qu'elle encode et ce qu'elle exclut volontairement (les temps, pour ne pas suggérer une comparaison inter-machines) ; 0 output-uninterpreted ; exercices alignés (Ex1 prolonge la borne §2/§3, Ex2 les règles métier §4, Ex3 la sensibilité graine §5).
    • Point fort : le tableau des « limites honnêtes » §7 (7 lignes « ce que ça établit / ce que ça n'établit pas ») et l'aveu que la formulation set-cover énumérative est « excellente comme oracle pédagogique, pas comme solveur industriel » — exactement la posture d'audit que le titre revendique.

    Garde-fou, skips, organes

    Suite de la série

    Case App-26-CoveringArrays-Guarantee-Audit.ipynb cochée dans la checklist de cette issue ; 17/156 carnets Search audités ; prochain désigné : App-2b-GraphColoring-CSharp.ipynb (index 604) — à re-vérifier contre les gels de la file Search et les PR ouvertes au prochain cycle.

  6. jsboige commented on Sep 28, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-09-28T22:05Z — MyIA.AI.Notebooks/Search/Applications/CSP/App-2b-GraphColoring-CSharp.ipynb

    Notebook : MyIA.AI.Notebooks/Search/Applications/CSP/App-2b-GraphColoring-CSharp.ipynb (index 604/742 du fichier population NC ; 61 127 o ; 29 cellules = 16 md + 13 code ; ec 1→13 séquentiel ; kernel .net-csharp ; 0 doublon jaccard > 0.55 ; 19 headers tous distincts ; 0 CJK).
    Série Search — sous-série Applications/CSP, jumeau C# de App-2-GraphColoring (twin Python). Aucune PR ouverte ne touche ce carnet.

    Verdict : 2 findings, 0 instance versée

    Findings (cellules + extrait verbatim + classe + pourquoi)

    1. stale-claim — MD[0] 57dd8296 : « > BCL .NET seule, 0 NuGet, from-scratch (Prong B EPIC: axis-2 SOTA ledger -- every notebook PR-reviewed for proper SOTA-tool install/invocation (recoverable -> re-plug machine/env/user-hand) #3801). » (repris par le tableau de complémentarité : « Ce twin (.NET BCL seule) | from-scratch ») — CONTREDIT par CODE[18] 2cb8e17c, première ligne exécutable de la Tranche 2 : #r "nuget: Google.OrTools, 9.11.4210", et par MD[19] 38fba878 lui-même : « le jumeau C# invoque le même engine 9.11 via #r "nuget:" ». Pourquoi : le claim d'en-tête décrit l'état Tranche 1 et n'a pas été mis à jour quand la Tranche 2 (Parite lib-vs-lib : 51 paires ou le C# ne bridge aucun moteur alors que le jumeau Python en importe un — et 45 sont declarees parity_level: semantic #10382) a ajouté une dépendance NuGet — l'apprenant qui croit l'en-tête (sandbox sans restore NuGet, lecture « zéro dépendance ») est contredit par la cellule 18 de son propre carnet ; les objectifs de MD[0] (« comparer quatre approches », sans CP-SAT) datent de la même époque.

    2. factual-mislabel — MD[19] 38fba878 : le tableau Prong-B étiquette « Greedy (Welsh-Powell) » la colonne aux valeurs 9 / 8 / 8 — mais ces valeurs committées (CODE[18] 2cb8e17c : G(25,0.5,s1) | 9 | 7 | 7 | Optimal | 65 <- sub-optimal) sont produites par int gd = ColorsUsed(GreedyColor(g, OrderDegreeDesc(g))); — le greedy à ordre degré-décroissant du §2. Welsh-Powell (implanté séparément au §2.2, colonne « W-P » distincte dans le benchmark §4) n'est jamais exécuté sur G(25, 0.5). Pourquoi : la valeur est réelle mais attribuée à la mauvaise méthode, et la prose de la MÊME cellule dit correctement « Greedy (ordre par degré décroissant) est strictement sub-optimal » — le tableau contredit donc à la fois la sortie committée et sa propre légende ; l'apprenant repart avec un classement méthodes erroné (Welsh-Powell 9/8/8 sur G(25) n'a jamais été mesuré ici).

    Vérifié et ACQUITTÉ (non-findings, pour éviter les faux positifs symétriques)

    1. Claim n=200 sourcé au jumeau Python — AUTHENTIQUE : MD[19] « Sur des graphes plus grands (n=200, comme le jumeau Python), le même écart Greedy-vs-χ persiste, tandis que le backtracking §3 explose » — vérifié dans App-2-GraphColoring.ipynb committé au même head : graph_sizes = [20, 40, 60, 80, 100, 150, 200], sortie n=200 : Greedy 22 couleurs / 2,1 ms, DSATUR 19 / 22,9 ms, exact 18 / 10 271,0 ms — l'écart Greedy-vs-χ (22 vs 18) et l'explosion de l'exact sont tous deux dans les outputs du jumeau.
    2. Toutes les valeurs canoniques exactes — K4=4, K6=6, C5=3, C6=2, Petersen=3, K_{3,3}=2, M_3 (5 sommets)=3, M_4 (11 sommets)=4 : mathématiquement correctes, et triple concordance backtracking §3 = CP-SAT Tranche 2 = théorie (8/8 « OK » committés) ; construction Mycielski correcte (M_2=K_2, M_3≅C_5).
    3. Pas d'output fake — timings non ronds (32,0/11,1/15,7/15,8/15,3/14,9/14,7/16,0 ms ; 65/122/96 ms ; 0,016/0,023/0,029/0,090 ms), statuts Optimal plausibles à ces tailles, version pinée précise (Google.OrTools 9.11.4210), compte d'arêtes plausible pour G(n, 0,5) (24/45, 94/190, 418/780, 1615/3160 autour de l'attendu n(n−1)/4), stubs « à compléter » légitimes, aucun N/A, aucun QuantBook.
    4. C6 Greedy-aléatoire sub-optimal (3 vs χ=2) — anomalie mesurée authentique (un ordre aléatoire peut rater χ même sur un cycle pair), auto-annotée dans la sortie par le drapeau <- sub-opt et la légende committée.

    Passe mécanique (v2.1)

    Extraction par script node (markdown entier + outputs réduits à des empreintes) ; aucun JSON brut chargé en contexte. Ré-exécution impossible depuis ce siège (python3/dotnet absents du conteneur) — vérification par recoupement interne (valeurs χ connues par la théorie, parité §3/§5, jumeau Python committé au même head).

    Couche pédagogique

    • Arrivée : au bon moment. Jumeau déclaré comme tel (lien bidirectionnel, tableau de complémentarité Python/lib+solveur vs C#/from-scratch) ; prérequis unique CSP-1-CSharp, cohérent avec le contenu (aucun prérequis caché : DSATUR, Welsh-Powell, Mycielski introduits from scratch).
    • Ordre des concepts : représentation → greedy (3 ordres, sensibilité à l'ordre) → DSATUR (pourquoi l'ordre fixe ne suffit pas) → Welsh-Powell → exact par backtracking → paradoxe Mycielski → benchmark canonique → passage à l'échelle → CP-SAT production → synthèse : chaque section s'appuie sur les sorties de la précédente (le drapeau sub-opt C6 du benchmark réalise la promesse « la qualité dépend de l'ordre » du §2).
    • Point fort : la validation par graphes canoniques à χ connu (revendiquée en tête, tenue partout) + le paradoxe Mycielski §3.1 rendant tangible « triangle-free ⇒ χ borné » = faux ; et la Tranche 2 enseigne la distinction heuristique-trouve / solveur-prouve (« DSATUR ne le prouve pas »).
    • Difficulté : 40 min affichées, progression douce, exercices alignés (carte planaire χ≤4 et 4 couleurs ; greedy-vs-χ sur 3-régulier ; RLF vs DSATUR sur M_4/M_5).
    • Figures : aucune — choix déclaré (le tableau de complémentarité assigne la visualisation au jumeau Python), aucun texte ne promet de figure ; non déposé comme figure-missing car assumé et croisé au jumeau. Mur de texte : non (md max 2 214 car.).
    • Micro non déposé (sous seuil de solidité) : MD[20] « branch-and-born » pour « branch-and-bound » — coquille typographique, aucune erreur factuelle.

    Garde-fou, skips, organes

    Suite de la série

    Case App-2b-GraphColoring-CSharp.ipynb cochée dans la checklist de cette issue ; 18/156 carnets Search audités ; prochain désigné : App-3-NurseScheduling.ipynb (index 605) — à re-vérifier contre les gels de la file Search et les PR ouvertes au prochain cycle.

  7. jsboige commented on Sep 28, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-09-28T23:05Z — MyIA.AI.Notebooks/Search/Applications/CSP/App-3-NurseScheduling.ipynb

    Notebook : MyIA.AI.Notebooks/Search/Applications/CSP/App-3-NurseScheduling.ipynb (index 605/742 du fichier population NC ; 316 440 o ; 59 cellules = 34 md + 25 code ; ec 1→25 séquentiel ; kernel python3 ; 0 doublon jaccard > 0,55 ; 44 headers tous distincts ; 0 CJK).
    Série Search — sous-série Applications/CSP (Nurse Rostering, CP-SAT OR-Tools ; jumeau C# App-3b adjacent). Aucune PR ouverte ne touche ce carnet.

    Verdict : 3 findings, 0 instance versée

    Findings (cellules + extrait verbatim + classe + pourquoi)

    1. factual-mislabel (attribution externe) — MD[1] d64c4e04 : « le passage a l'echelle (jusqu'a 15 infirmiers sur 28 jours dans leur complete_solver.py) qui sert ici de demonstration industrielle » — vérifié au 1er degré au commit cité 4394d10 du projet étudiant : tous les fichiers qui fixent une taille démontrent 7 infirmiers / 10 jours (ORTools_basic.py et ORTools_w_requests.py : num_nurses = 7, num_days = 10 ; notebook OR_Tools.ipynb : idem) ; complete_solver.py est paramétrique (params JSON, exemple dans le code : {"num_days": 7, "num_nurses": 10}) et aucune occurrence 15/28 n'est committée nulle part dans le projet (README, Instuctions.md, utils, notebooks, src balayés). Pourquoi : la démo 15×28 est une capacité du solveur paramétrique, pas un état du projet source — l'attribuer au projet étudiant (« articule deja l'essentiel », avant la liste des ajouts) sur-décrit la source et déplace la frontière ajouté/déjà-présent (la montée à 15×28 est en réalité un apport de ce notebook).

    2. factual-mislabel (étiquette double) — MD[31] 13025b21 : « C6 : au moins 2 infirmiers par shift (demande accrue) » — puis MD[45] a6ce04a9 ré-étiquette C6 une tout autre contrainte : « Ajoutez une contrainte dure C6 : aucun infirmier ne travaille plus de 3 jours consecutifs » (sortie committée CODE[46] e691cc2c : « C6 (consecutifs) : 20 contraintes »). Et dans le modèle large, la demande 2 vit dans C1 (CODE[34] 78f73114 : model_lg.add(sum(...) == demand_lg), commenté « C1 : Couverture (2 infirmiers par shift) »). Pourquoi : la « contrainte C6 » annoncée en section 5 n'existe pas comme contrainte distincte dans le code, et l'étiquette C6 désigne deux contraintes différentes dans le même carnet — l'apprenant qui cherche C6 dans le modèle trouve un C6-Absent puis un C6-Consecutifs.

    3. exercise-mismatch (exemple guidé 2) — CODE[50] 0659e045 : model.minimize(10 * balance_penalty + penalty) — mais balance_penalty est créé en CODE[24] 31451014 sur model_opt (balance_penalty = model_opt.new_int_var(0, max_shifts_per_week, 'balance_penalty')), jamais sur model (le modèle section 3, sans objectif, que les exemples guidés 1 et 3 modifient proprement). L'output committé (« Preferences ponderees : 3 prefs, penalites = [5, 10, 1] ») prouve que la cellule s'exécute sans erreur — la référence croisée est donc acceptée silencieusement : l'objectif posé sur model référence une variable étrangère à ce modèle (mélangée aux x de model dans la même expression). Pourquoi : l'apprenant qui recopie le pattern enseigné — puis résout model — optimise un objectif qui ne peut pas être l'écart de charge ; l'exemple montre le contraire de ce qu'il prétend démontrer (la pondération des préférences sur le modèle courant).

    Vérifié et ACQUITTÉ (non-findings, pour éviter les faux positifs symétriques)

    1. Cohérence interne des sorties — re-vérifiée intégralement à la main : planning dur ET optimisé — chaque colonne des 7 jours porte exactement {M, A, N} (C1), ≤ 1 lettre/jour/infirmier (C2), aucun M le lendemain d'un N (C3, vérifié infirmier par infirmier sur les deux plannings), charges ≤ 5 (C4) ; 21 shifts sommés exactement (5+4+5+2+5 dur ; 4+4+4+5+4 optimisé) ; écart 1 = plancher structurel (21 non divisible par 5) donc OPTIMAL crédible ; objectif 10 = 10×1 + 2×0 exact ; « 0 / 11 » préférences violées re-vérifié contre le dictionnaire preferences (Alice Sam/Dim jour, Bob nuits Lun-Mar-Mer, David Ven, Emma Dim-Nuit) — aucun écart.
    2. Grande échelle exacte : moyenne 11,2 = 168/15 (28×3×2) ; écart-type 0,40 recalculé exact (12 infirmiers à 11 + 3 à 12 : √(2,4/15) = 0,4) ; 78 variables auxiliaires = formule committée 15+3+4×15 ; 43 préférences concordantes entre CODE[32] et CODE[34] ; convergence 104→94→90→10 avec objectif final 10×1+2×0 = 10 cohérent ; écart 1 = plancher 168/15, OPTIMAL crédible ; 2^105 ≈ 4×10³¹ correct.
    3. Hommage — ancres vérifiées au 1er degré : dépôt jsboigeEpita/2025-Epita-Programmation-par-Contraintes public ✓, commit 4394d10 résout ✓, dossier Nurse_Rostering_Problem ✓, src/complete_solver.py ✓, licence « non specifiee » déclarée honnêtement. Seule la figure 15/28 est en défaut (finding 1).
    4. Pas d'output fake : timings non ronds (30,2 / 43,9 / 550 ms ; solutions à 253,6 / 277,0 / 293,5 / 362,9 ms), 4 figures PNG réelles (37–83 Ko) légendées et titrées, stubs « à compléter » légitimes, aucun N/A, aucun QuantBook ; MD[37] pratique la séparation structurel / machine-dep (« runtime machine-dep » dans le tableau temps, note méthodologique dédiée) = pattern d'honnêteté, pas de valeur fabriquée.

    Passe mécanique (v2.1)

    Extraction par script node (markdown entier + outputs réduits à des empreintes) ; aucun JSON brut chargé en contexte. Ré-exécution impossible depuis ce siège (python3 absent du conteneur ai-01) — vérification par re-vérification manuelle/internalisée des sorties committées (acquittals 1-2) et vérification externe au 1er degré du dépôt étudiant (acquittal 3).

    • Gates Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 : 1 lecture par output, toutes après la cellule lue (MD[22]→CODE[21], MD[27]→CODE[26], MD[30]→CODE[29], MD[37]→CODE[36], MD[44]→CODE[43]) ; toute valeur citée dans les lectures est présente dans les outputs committés (tableau MD[44] : écart 1 ∈ « 1-2 », écart-type 0,40 < 1, taux 100 % > 80 %) ; 0 pile de prose ; 0 solution-leak (3 stubs exécutables, indices méthodologiques : fenêtre glissante max_consecutive + 1, dictionnaire pondéré {(n,d,s): weight}, bornes min/max de contrat — aucun ne livre le planning).
    • Doublons 0 ; headers 44 distincts ; navigation 3/3 au head 53259e59 (App-2-GraphColoring.ipynb l.4231, App-4-JobShopScheduling.ipynb l.4241, ../README.md = Search/Applications/README.md l.4322).

    Couche pédagogique

    • Arrivée : au bon moment dans l'arc CSP (entre App-2 coloration et App-4 job shop) ; prérequis unique CSP-3 cohérent avec l'usage (add_max_equality/add_min_equality et callback introduits au moment voulu, pas avant).
    • Ordre des concepts exemplaire : formulation (données → variables → 5 étapes contrainte-par-contrainte, chaque étape formule math + code + compteur committé) → résolution → lecture avec table de vérification C1-C4 (re-vérifiable — refaite ici, exacte) → souples (objectif pondéré, variables auxiliaires max/min expliquées) → optimisé → comparaison visuelle côte à côte → échelle (C5 weekends, callback) → courbe de convergence → analyse de charge → 3 exemples guidés + 3 exercices alignés (1b généralise 1, 2b oppose dur/souple, 3b min/max de contrats).
    • Point fort : la table de vérification MD[22] apprend à LIRE un planning contre ses contraintes (compétence transférable, et elle est exacte) ; la note machine-dep MD[37] enseigne la distinction invariant structurel / mesure machine.
    • Difficulté : 60 min affichées, sections 5+8+12+10+8+5 = 48 min + exercices ≈ cohérent ; progression douce, chaque section s'appuie sur les sorties de la précédente.
    • Figures : 4, toutes légendées (légende commune patches, titres, annotations première/meilleure solution), interprétées après — frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue (MD[30] et MD[44] = uniques lectures de leurs outputs, aucune seconde lecture empilée). Mur de texte : non (md max 2 959 car.).
    • Micro non déposés (sous seuil de solidité) : « violations potentiols » / « Maximalement respectees » (accords) ; MD[37] « solver.Solve() » (API C# citée alors que le code fait solver_lg.solve(...)) ; « executez la cellule de calcul ci-dessous » (la cellule de résolution CODE[36] est ci-dessus) ; « cas typique NRP de taille industrielle » pour 15×28, en tension avec la note de la même cellule (« production : 30-100 infirmiers »).

    Garde-fou, skips, organes

    Suite de la série

    Case App-3-NurseScheduling.ipynb cochée dans la checklist de cette issue ; 19/156 carnets Search audités ; prochain désigné : App-3b-NurseScheduling-CSharp.ipynb (index 606, jumeau C# — la classe stale-claim « en-tête Tranche 1 » observée sur App-2b sera à re-vérifier sur ce jumeau) — à re-vérifier contre les gels de la file Search et les PR ouvertes au prochain cycle.

  8. jsboige commented on Sep 29, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-09-29T00:05Z — MyIA.AI.Notebooks/Search/Applications/CSP/App-3b-NurseScheduling-CSharp.ipynb

    Notebook : MyIA.AI.Notebooks/Search/Applications/CSP/App-3b-NurseScheduling-CSharp.ipynb (index 606/742 du fichier population NC ; 71 162 o ; 33 cellules = 22 md + 11 code ; ec 1→11 séquentiel ; kernel .net-csharp ; 0 doublon jaccard > 0,55 ; 23 headers tous distincts ; 0 CJK).
    Série Search — sous-série Applications/CSP, twin C# de App-3-NurseScheduling (trois solveurs from-scratch + Tranche 2 CP-SAT). Aucune PR ouverte ne touche ce carnet.

    Verdict : 3 findings, 0 instance versée

    Findings (cellules + extrait verbatim + classe + pourquoi)

    1. stale-claim — MD[0] f23b0f89 : « Ce twin déroule les algorithmes à la main (BCL .NET 9, 0 NuGet, 0 OR-Tools) » — repris par le tableau §7 MD[20] 20f73673 (« Dépendances | ortools (native) | BCL seule, 0 NuGet ») — CONTREDIT par CODE[22] 7d5fa06d, première ligne de la Tranche 2 : #r "nuget: Google.OrTools", et par MD[21] lui-même (« la Tranche 2 franchit le même cap... package NuGet Google.OrTools »). Pourquoi : même défaut exact que le twin App-2b déposé au cycle précédent — l'en-tête et le tableau de complémentarité décrivent l'état Tranche 1 et n'ont pas été mis à jour quand la Tranche 2 (Parite lib-vs-lib : 51 paires ou le C# ne bridge aucun moteur alors que le jumeau Python en importe un — et 45 sont declarees parity_level: semantic #10382) a ajouté la dépendance NuGet ; l'apprenant qui croit l'en-tête (sandbox sans restore NuGet) est contredit par la cellule 22 de son propre carnet. 2ᵉ occurrence du même claim « 0 NuGet » sur deux jumeaux consécutifs — défaut systématique du pattern Tranche 2, signalé pour l'organe (voir fin de dépôt).

    2. factual-mislabel — CODE[18] 85593f24 : la colonne « Preferences violees » du benchmark est remplie par Row(...) → SoftPenalty(a), qui retourne des points (PREF_PENALTY = 2 par cas), pas un décompte — la sortie committée affiche « Glouton | 4 | 0 | 4 » alors que la lecture MD[10] e54e2422 de ce même notebook dit « 2 préférences sont violées » (idem backtracking : tableau « 2 », prose MD[13] « une seule préférence violée »). Pourquoi : l'en-tête de colonne dénombre (« violées ») mais la valeur est une pénalité — l'apprenant qui rapproche tableau (4/2/0) et lectures (2/1/0) doit résoudre lui-même un facteur 2 jamais signalé ; la ligne « Verdict » committée propage la même étiquette (« preferences=4 »).

    3. factual-mislabel (mauvaise cause) — MD[10] e54e2422 : « La grille porte la trace de la myopie : Alice n'a que 1 shift (dimanche nuit) pendant que Bob, Claire, David et Emma en portent 5 chacun. Le choix purement local remplit les premiers slots avec les infirmiers les moins pénalisés immédiatement, sans voir que la charge se creuse ailleurs. » — Une re-simulation pas-à-pas du glouton committé (CODE[9] 553e015f, refaite intégralement, reproduit la grille committée à la cellule près) montre que la cause réelle est ailleurs : busyToday lit assign[d][ss] == n sur tous les shifts du jour, y compris les slots non encore remplis (zéros par défaut) — l'infirmier d'indice 0 (Alice) apparaît donc « occupé » chaque jour et n'est jamais candidat ; elle n'entre au planning que par le fallback if (best < 0) best = 0 du dernier slot (Dim-Nuit). Un glouton « moins chargé » sans cet artefact équilibrerait les charges (~5/4/4/4/4), pas 1/5/5/5/5. Pourquoi : la lecture attribue à la myopie un effet qui vient d'un aliasing indice-0/valeur-défaut — piège que le notebook connaît d'ailleurs lui-même, puisque CODE[12] commente pour le backtracking « les 0 par defaut des slots non encore attribues ne sont jamais lus (donc pas de confusion avec Alice=0) » ; et la phrase « les moins pénalisés » est doublement inexacte : le critère du glouton est la charge, la pénalité n'y apparaît nulle part.

    Vérifié et ACQUITTÉ (non-findings, pour éviter les faux positifs symétriques)

    1. Sorties authentiques — re-simulées / re-contrôlées à la main : (a) grille glouton reproduite slot par slot depuis le code committé — correspondance exacte, y compris les charges 1/5/5/5/5, les 2 préférences violées (Bob Mer-Nuit, David Ven-Nuit, toutes deux lisibles dans la grille) et le coût 4 = 2×2 ; (b) grilles backtracking et min-conflicts re-vérifiées : C2 (7/7 jours à infirmiers distincts), C3 (aucun Matin après Nuit, infirmier par infirmier), C4, charges 4/4/5/5/3 et 3/4/5/4/5 (Emma inférée par total 21 et concordante), coûts 2 et 0 exacts ; (c) le « portrait d'Alice à travers les trois solveurs » de MD[16] (1 shift / 4 nuits dont 3 consécutives Ven-Sam-Dim / 3 nuits espacées Mer-Ven-Dim) vérifié sur les trois grilles committées.
    2. Tranche 2 CP-SAT vérifiée : planning 21/21 re-contrôlé (C1 : 7 jours × 3 shifts couverts ; C2 : chaque jour 3 infirmiers distincts ; C3 : les six transitions Nuit→Matin toutes ≠ ; charges 5/5/4/3/4 re-comptées = sortie committée) ; le claim croisé « le jumeau Python déclare OPTIMAL en ~30 ms » est exact contre la sortie committée d'App-3 (OPTIMAL, 30,2 ms) ; MD[23] est honnête sur le périmètre (parité « sur le statut et la couverture » — le modèle Tranche 2 n'a pas d'objectif, et la solution committée viole bien 3 préférences sans que rien ne le nie).
    3. Pas d'output fake : temps 78,8 ms non rond, statuts plausibles, grilles à empreintes distinctes, stubs « à compléter » légitimes, aucun N/A, aucun QuantBook ; la prose arithmétique est exacte partout (105 booléens ↔ 21 entiers, moyenne 4,2 = 21/5, 11 cases indésirables = 4+3+0+3+1, coût maximal souple 22, BIG = 1000 > 22, décomposition 4 = 2 préférences × 2).

    Passe mécanique (v2.1)

    Extraction par script node (markdown entier + outputs réduits à des empreintes) ; aucun JSON brut chargé en contexte. Ré-exécution impossible depuis ce siège (dotnet absent du conteneur ai-01) — vérification par re-simulation pas-à-pas manuelle du glouton et re-contrôle interne de toutes les grilles et coûts committés (acquittement 1), croisés avec le twin Python committé au même head (acquittement 2).

    • Gates Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040 : 1 lecture par output, toutes après la cellule lue (MD[3]→CODE[2], MD[6]→CODE[5], MD[10]→CODE[9], MD[13]→CODE[12], MD[16]→CODE[15], MD[19]→CODE[18], MD[23]→CODE[22]) ; 0 pile de prose ; 0 solution-leak (3 stubs TODO, indices méthodologiques : runs de jours, dictionnaire pondéré, bornes min/max de contrat).
    • Doublons 0 ; headers 23 distincts ; navigation 3/3 au head df601795 (App-2b-GraphColoring-CSharp.ipynb, ../README.md, App-3-NurseScheduling.ipynb).

    Couche pédagogique

    • Arrivée : au bon moment. Twin C# déclaré comme tel (liens bidirectionnels en tête et pied), placé après App-2b (piste C#) et App-3 (référence Python) ; les exercices miroir ceux du twin Python.
    • Ordre des concepts exemplaire : choix de modélisation (21 entiers vs 105 booléens, C1 auto-satisfaite — la décision que CP-SAT masque) → validateurs et coût (BIG = ordre lexicographique dans un scalaire, expliqué) → trois solveurs répondant chacun à UNE question posée en §1 → benchmark → complémentarité → Tranche 2 → exercices. Chaque lecture contraste avec la précédente.
    • Point fort : le « portrait d'Alice à travers les trois solveurs » (vérifié — voir acquittement 1) et la distinction faisabilité/optimisation incarnée par trois moteurs sur la même instance.
    • Difficulté : progression douce ; LINQ/tuples/range operator utilisés sans introduction — atténué par la piste C# en amont.
    • Figures : aucune, aucune promesse — les grilles ASCII sont la visualisation, toutes interprétées ; frontière densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 tenue (une lecture par output, aucune seconde lecture empilée).
    • Micro non déposés (sous seuil de solidité) : MD[3] « chaque personne lésée ajoute 2 points » (le compte est par case, une personne peut l'être deux fois) ; pas de bloc prérequis ni de durée affichée (les deux jumeaux en ont un/une) ; la limite de jours consécutifs s'appelle C5 ici (exercice) mais C6 dans App-3 (exemple guidé) — cohérent en interne, écho cross-twin du finding 2 d'App-3.

    Garde-fou, skips, organes

    Suite de la série

    Case App-3b-NurseScheduling-CSharp.ipynb cochée dans la checklist de cette issue ; 20/156 carnets Search audités ; prochain désigné : App-4-JobShopScheduling.ipynb (index 607) — à re-vérifier contre les gels de la file Search et les PR ouvertes au prochain cycle.

  9. jsboige commented on Sep 29, 2026

    @jsboige
    Owner

    [NanoClaw] App-4-JobShopScheduling.ipynb — audit cycle 29/09 01:05Z (campagne #17073, série Search)

    Notebook : 69 cellules (41 md / 28 code), extraction intégrale v2.1 (sources entières, outputs en empreintes). Mécanique saine : execution_count séquentiel 1→28, zéro doublon jaccard > 0,55, zéro header dupliqué, toutes les valeurs citées dans les lectures présentes dans les outputs committés (11 OPTIMAL ft03, 55 OPTIMAL ft06, 70 OPTIMAL random, ligne « Retard seul → 394 » réelle — la remarque technique l'expliquant documente une sortie committée), liens de navigation tous vivants (README Search + Applications, App-3/5/8 sous CSP/, CSP-3-Advanced, Search-04), 7 interprétations pour 7 sorties clés — frontière #13410 respectée, aucune lecture dupliquée.

    Findings (3) — chaque finding = cellule + verbatim + classe + pourquoi :

    1. navigation-misplaced — cellule md id d942f4d7 (Exercice 3) :

    « La courbe d'amelioration ci-dessus montre que CP-SAT trouve rapidement une bonne solution. Mais comment quantifier la qualite de cette solution par rapport a l'optimum theorique ? »

    Pourquoi : la courbe d'amélioration est tracée 2 blocs plus bas (cellule md id 590c5226 « Suivi de l'amelioration » → code id 57f4601a) — au point de lecture, « ci-dessus » ne renvoie à rien ; l'exercice précède la sortie qu'il commente.

    2. exercise-mismatch — cellule md id eae914c6 (Exercice 4) :

    « Enonce : implementez la règle LPT (Longest Processing Time) et comparez ses performances avec SPT sur l'instance ft06. »

    Pourquoi : dispatching_scheduler supporte déjà 'LPT' (cellule code id ff070108, branche elif rule == 'LPT') et l'a déjà mesurée sur ft03 (output committé : LPT 14, +4 vs LB) ; la cellule TODO id f33dbb9f le concède elle-même (« La fonction dispatching_scheduler supporte deja 'LPT'. ») — l'énoncé demande d'implémenter ce qui est fourni, il ne reste que la comparaison.

    3. paraphrase-stack — cellules md id 19121e3e puis id 7cafe2df (7 cellules plus bas) :

    id 19121e3e : « ### Concepts cles » — table Makespan / Variable d'intervalle / NoOverlap / Borne inferieure / Diagramme de Gantt / Front de Pareto
    id 7cafe2df : « ### Concepts cles a retenir » — table Makespan / Dispatching rules / Variables d'intervalle / NoOverlap / Borne inferieure / Multi-objectif

    Pourquoi : deux tables récapitulatives quasi identiques (5 concepts communs sur 6) dans le même notebook, séparées seulement par les exercices 4-6 ; la seconde n'ajoute rien que la première n'ait dit — l'apprenant lit deux fois le même résumé. Classe couverte par la proposition d'organe check_stacked_readings (#17073, 23/09) — instance versée à l'appui.

    [CANDIDAT — marqué comme tel, pas un élément de travail] Les tables d'interprétation (id b7585721, id 71e3854c) écrivent « Makespan : variable » pour des heuristiques déterministes : sur instance fixe, SPT=12 / LPT=14 / MOR=12 / FIFO=14 (ft03) et 89/88/59/68 (ft06) sont des invariants structurels, au même titre que les 11/55/70 des solveurs cités plus loin dans le même notebook. Une restauration cohérente avec le traitement appliqué aux makespans CP-SAT serait possible.

    Pédagogie : progression saine (intervalles CP-SAT = vraie nouveauté après App-1/2/3), exercices gradués avec indices, sorties interprétées, figures légendées. Observation panoramique : le callback + courbe d'amélioration (§5) réintroduit ce qu'App-3 §5 (« Solution callback », « Courbe de convergence ») a déjà montré — un renvoi allégerait sans nuire.

    Skips du cycle (PRs ouvertes touchant le notebook) : App-16-Crossword-CSP (#18156), App-14-ConnectFour-Adversarial (#18253), Search-03-Informed-CSharp + Search-05-GeneticAlgorithms-CSharp (#18290), MGS-07d (#18092), Sudoku-09-GraphColoring-CSharp (#18250).

  10. jsboige commented on Sep 29, 2026

    @jsboige
    Owner

    [NanoClaw] App-4b-JobShopScheduling-CSharp.ipynb — audit cycle 29/09 02:05Z (campagne #17073, série Search)

    Twin C# du App-4 (25 cellules : 15 md / 10 code, kernel .net-csharp, BCL + Google.OrTools Tranche 2). Extraction intégrale v2.1. Mécanique saine : ec 1→10 séquentiel, zéro doublon jaccard/headers, validateur 0/0 sur les outputs, CP-SAT OPTIMAL makespan 11 = parité chiffrée avec le jumeau Python (vérifié : les deux OPTIMAL 11, LB 10 cohérente avec l'instance), liens de navigation vivants (App-3b, App-4 Python, Applications/README), gabarit Tranche 1/Tranche 2 aligné sur App-1b/3b, exercices bien posés (AWKR = vraie nouveauté à implémenter, pas une redite). Positionnement pédagogique relevé : l'opposition booléens (N-Reines, Nurse) vs intervalles/temps (JSSP) est explicitée — un des mieux placés de la série.

    Findings (2) :

    1. stale-claim — cellule md id 00e0bbc9 (Interprétation Tranche 2, 4ᵉ tiret) :

    « Preuve vs heuristique. La Tranche 1 §3 montrait que les meilleures règles de dispatching atteignent ft03 ≈ 12 ; CP-SAT prouve l'optimum 11. »

    Pourquoi : la sortie committée de la Tranche 1 (cellule code id ab269669, ec=4) dit SPT 19, LPT 14, MOR 11, MWKR 11, FIFO 14 — les meilleures règles atteignent 11, qui EST l'optimum ; « ≈ 12 » n'apparaît dans aucun output de ce notebook (c'est la valeur du dispatcher du twin Python, dont le glouton une-opération-par-machine donne SPT/MOR 12) ; le contraste heuristique-vs-solveur que la phrase construit n'existe pas ici.

    2. output-uninterpreted — cellule code id d592cb3a (ec=6, table ft06) :

    Sortie committée : SPT | 114 · LPT | 123 · MOR | 87 · MWKR | 72 · FIFO | 68 suivie de « Litterature ft06 : makespan optimal = 55… »

    Pourquoi : aucune cellule de lecture ne suit cette sortie (on passe directement à la §6 « Complémentarité », qui ne cite aucune valeur ft06) — or elle contient deux résultats contre-intuitifs jamais signalés : SPT, annoncé « favorise la fluidité » en §3 (id 89bcaf2e), y est le pire (114) ; FIFO (68) bat MWKR (72). Nuance #13410 : aucune lecture existante n'est à réécrire — une lecture unique reste à écrire si enrichissement (candidat, pas élément de travail).

    Observations non déposées (trop petites / hors classes) : coquille « MWR » pour MWKR dans la Tranche 2 (id b9b6fa25) ; « encadrement » ft06 (id f7f07fd0) alors qu'une seule borne (sup) est produite.

    Skips du cycle : identiques au cycle précédent (App-16-Crossword-CSP #18156, App-14-Adversarial #18253, Search-03/05-CSharp #18290, MGS-07d #18092, Sudoku-09-CSharp #18250) — re-vérifiés ouverts ce cycle.

  11. jsboige commented on Sep 29, 2026

    @jsboige
    Owner

    [NanoClaw] App-5-Timetabling.ipynb — audit cycle 29/09 03:05Z (campagne #17073, série Search)

    Notebook : 47 cellules (27 md / 20 code, kernel python3), extraction intégrale v2.1. Mécanique saine : ec 1→20 séquentiel, zéro doublon jaccard/header, toutes les valeurs citées dans les lectures présentes dans les outputs committés (glouton 8/8 en 0,07 ms tout le lundi, trous 1 vs 0, matin 75 % vs 100 %, std 3,20 vs 1,50, CP-SAT OPTIMAL objectif 0,0 en 32,5 ms), lectures hédgées « cf. mesure ci-dessus » (pattern post-campagne), navigation vivante (App-4, App-6, App-3, App-8, README Search, CSP-3-Advanced sous Search/Part2-CSP/ — vérifié dans l'arbre), 7 lectures pour 7 sorties clés, frontière #13410 respectée.

    Findings (4) :

    1. stale-claim — famille « 3 salles » (3 sites, une cause racine : Labo_D ajouté aux données, prose/modèles non rattrapés)

    a) md cell-intro-section (§1) : « même avec seulement 8 cours, 3 salles et 20 creneaux… $(3 \times 20)^8 = 60^8 \approx 1.7 \times 10^{14}$ »
    b) md cell-cpsat-section (§4) : « Variable course_room[c] $\in {0, 1, \ldots, 2}$ : salle »
    c) code cell-minizinc-model (§5) : int: num_rooms = 3; room_capacity = [120, 60, 40]; equip_available = [0, 0, 1];

    Pourquoi : l'output committé de cell-data-definition (ec=3) imprime « Salles : 4 » et « Espace brut : (4 x 20)^8 = 1.68e+15 » (Labo_D « # nouvelle » dans les données) — l'intro décrit l'instance d'avant Labo_D avec un ordre de grandeur faux d'un facteur 10, le domaine énoncé {0..2} contredit le new_int_var(0, num_rooms - 1) = 0..3 du code, et §5 annonce « le même problème… en MiniZinc » alors que sans Labo_D, Reseaux (50 étu., labo) et Web (55, labo) n'ont que la salle 3 (cap. 40) : C1 insatisfaite pour toute affectation ⇒ modèle UNSAT par construction, donc prouvablement pas le même problème (l'instance Python est SAT/OPTIMAL) ; la branche UNSAT de cell-minizinc-execution (« avec les 3 salles et 20 creneaux ») confirme l'écriture pré-Labo_D. Jamais exécuté (output committé : « MiniZinc non installe ») — défaut latent.

    2. factual-mislabel — md cell-analysis-interpretation (§6, table « Vue salles ») :

    « | Amphi_A | 120 | Algo, IA (gros effectifs) | … | Salle_B | 60 | Systemes | … | Labo_C | 40 | Securite | »

    Pourquoi : les affectations committées (cell-cpsat-execution, ec=9) placent Algo, Probas, BDD et IA dans Amphi_A (Probas 75 et BDD 80 n'ont aucune autre salle compatible, Salle_B plafonnant à 60) et Reseaux + Web dans Labo_D, absent de la table — la lecture déforme la solution committée (vue à 3 salles) alors que la puce suivante désigne justement Labo_D comme goulot.

    3. factual-mislabel — md cell-cpsat-section (§4, objectif annoncé) vs code cell-cpsat-model :

    md : « Minimiser $w_1 \cdot \text{trous_enseignants} + w_2 \cdot \text{penalite_apres-midi} + w_3 \cdot \text{desequilibre_jours}$ »
    code : objective_terms = is_afternoon (poids 1) + 3 * same_day

    Pourquoi : l'objectif implémenté ne contient ni le terme de trous ni celui de déséquilibre (w3 absent du code) — la machinerie d'écart (abs_diff, has_gap, hour_gap_*) est créée puis jamais contrainte (variables mortes, la chaîne diff_ n'est liée à rien), et le commentaire l'avoue (« Simplification : penaliser si les cours sont le meme jour ») ; l'apprenant qui rapproche formule et code cherche deux des trois termes annoncés sans les trouver.

    4. solution-leak — code cell-exercise-2-code + cell-exercise-3-code (§7, stubs d'exercices) :

    Ex2 : # labo_id = ROOMS["Labo_C"]["id"] … # forbidden_slots = list(range(0, 4)) + list(range(16, 20)) … # for s in forbidden_slots: model.add(course_slot[cname] != s)
    Ex3 : # student_groups = {"2A": ["Algo","Probas","Systemes"], "3A": ["IA","Securite","Web"]} … # model.add(course_slot[c1] != course_slot[c2])

    Pourquoi : les stubs contiennent en commentaire la solution quasi complète des deux exercices (Ex3 mot pour mot — l'exercice se réduit à dé-commenter) ; pire, le squelette Ex2 est plus fort que l'énoncé : il interdit lundi/vendredi à tout cours labo alors que l'énoncé le conditionne (« Si course_room[c] == 2 (Labo_C) ») — le corrigé fuiré exclut des solutions valides (Reseaux/Web en Labo_D le vendredi).

    Observations non déposées (trop petites) : import mort from search_helpers import benchmark_table (jamais utilisé dans le notebook) ; BATCH_MODE défini jamais lu ; lien App-8 écrit ../CSP/App-8-MiniZinc.ipynb depuis CSP/ (résout vers le même dossier — fonctionne, style seulement).

    Pédagogie : progression saine — dur/souple déjà vu en App-3 réinvesti sur une double variable (créneau + salle), glouton fail-first relié à MRV (renvoi fondations CSP), teaser MiniZinc avec renvoi App-8, exercices gradués avec exemple guidé complet. Le CP-SAT ré-explique peu vs App-3/4 : bon dosage.

    Skips du cycle : App-14-ConnectFour #18253, MGS-07d #18092, Sudoku-09-CSharp #18250 toujours ouvertes ; #18156 (App-16-Crossword) et #18290 (Search-03/05-CSharp) MERGÉES cette nuit (01:39Z / 01:50Z) → ces notebooks redeviennent auditables aux prochains cycles.

  12. jsboige commented on Sep 29, 2026

    @jsboige
    Owner

    [NanoClaw] App-5-Timetabling-CSharp.ipynb — audit cycle 29/09 05:05Z (campagne #17073, série Search)

    Notebook : 27 cellules (17 md / 10 code, kernel .net-csharp), extraction intégrale v2.1. Mécanique saine : ec 1→10 séquentiel, zéro doublon jaccard/header, batch réel (Runtime: .NET 9.0.18), glouton committé recalculé à la main = exact (8/8 sur Lundi, 2 cours après-midi), CP-SAT réel Google.OrTools 9.11 (Optimal, 47,0 ms, objectif 0), stubs exercices exécutés propres.

    Le jumeau C# n'est PAS contaminé par la famille « 3 salles » du jumeau Python (dépôt c.5882939231) : intro « 4 salles » cohérente avec les données, $(4\times20)^8 = 80^8 \approx 1.7\times10^{15}$ arithmétiquement exact, objectif CP-SAT annoncé (pénalité après-midi) = objectif implémenté, aucune vue salles déformée, pas de section MiniZinc, stubs Ex2/Ex3 sans solution en commentaire. Les 4 findings du Python n'existent pas ici.

    Occurrence ×2 factual-mislabel — classe GELÉE (escalade >3 : 10ᵉ occurrence en série Search), versée à la proposition d'organe [#17073 c.5884101801], pas de finding individuel :

    1. md 4b5c6d7e (§3) : « On observe que Reseaux, Securite, Web (cours "labo") ont moins de salles compatibles : 2 au lieu de 3-4. » — l'output committé (ec=3) montre 6 cours à 1 salle [!] dont 4 standard, Securite 2, max toutes catégories = Systemes 3 ; inversion standard/labo.
    2. md 6f7a8b9c (§5) : « 8 cours x 80 creneaux-salles théoriques = ~640 affectations possibles par cours » — 640 = total 8×80 ; par cours = 80 avant filtrage.

    Observations mineures non comptées : md 6e7f8a9b dit « (Lundi-Mardi) » alors que le committé place les 8 cours sur Lundi seul ; md 8b9c0d1e annonce « 100ms-2s » pour le B&B vs 5,68 ms committé (défendable comme ordre de grandeur de scaling, non versé).

    Pédagogie saine : posture Prong B explicitée en intro ET conclusion (from-scratch pour exhiber la mécanique, Tranche 2 = vrai solveur), prérequis corrects (CSP-3-Advanced, App-1b), exercices gradués avec exemple résolu complet, chaque output a sa lecture (frontière #13410 respectée), visualisation ASCII assumée et documentée.

    Skips du cycle : #18253 (App-14-ConnectFour), #18092 (MGS-07d), #18250 (Sudoku-09-CSharp) toujours ouverts.

    — NanoClaw (myia-ai-01) [29/09 05:05Z]

  13. jsboige commented on Sep 29, 2026

    @jsboige
    Owner

    [NanoClaw] App-16-Crossword-CSP.ipynb — audit cycle 29/09 06:05Z (campagne #17073, série Search)

    Notebook : 33 cellules (21 md / 12 code, kernel python3), extraction intégrale v2.1 — 70,2 KB lus en 2 passes (déclaré : au-dessus du plafond ~60 KB, lecture intégrale sans échantillonnage). Mécanique saine : ec 1→12 séquentiel, zéro doublon jaccard, sous-headers répétés (« Sortie attendue » ×5, « Limitation » ×2…) mais contenus distincts (pattern série), dictionnaire vérifié (183 mots, longueurs 2-10 exactes, check embarqué « Dictionnaire OK »), toute la section AC-3 vérifiée EXACTE contre les outputs committés (table 16 slots à 1 mot / 8 slots à 2, 20^24 = 1.68e+31 → 2.56e+02 = 2⁸ exactement, facteur 6.55e+28, « 24 slots, 36 intersections »), stubs d'exercices sans leak, chaque output a sa lecture (frontière #13410 respectée).

    Le cœur solveur Python est PROPRE — il ne partage AUCUN des deux bugs de code du jumeau C# (cf. c.5866136226) : get_words() relit dictionary[slot.length][word_idx] sans liste filtrée intermédiaire (pas d'équivalent du décalage d'index F1) et le dictionnaire par longueur est utilisé cohéremment partout (pas d'équivalent de l'invariant cassé F2). Symétrie du constat App-5 : là c'était le code C# qui portait les bugs, ici c'est la prose d'interprétation qui dérive des sorties committées.

    Findings (2) :

    1. concept-error — md app16-exemple-guide (§3, « Exemple guidé : correction de l'exercice »)

    « for h_id, v_id, (p_h, p_v) in grid.intersections: » … « seen = Counter(words.values()) »
    Pourquoi : le corrigé dit « complet » crashe à la première exécution — CrosswordGrid n'expose que la méthode get_intersections() (aucun attribut .intersections n'est jamais assigné : AttributeError) et Counter n'est pas importé (les imports du notebook ne contiennent que defaultdict : NameError) ; l'apprenant qui recopie le corrigé guidé prend deux erreurs avant sa première validation.

    2. navigation-misplaced — md 24d2900a (§Conclusion, dernière ligne)

    « Suite : App-15 - Planification sportive | Retour au sommaire »
    Pourquoi : le lien de sortie renvoie au notebook précédent (App-15, déjà posé en prérequis à l'intro et dans le header « << App-15 ») alors que l'intro annonce « App-17 VRP >> » comme suite — la navigation de sortie contredit la navigation d'entrée.

    Occurrences factual-mislabel — classe GELÉE (escalade >3 : 11ᵉ-21ᵉ occurrences en série Search ; organe proposé #17073 c.5881164749 + c.5884101801, horloge 48h → 01/10 00:15Z) — versées en 1 ligne chacune (arbitrage c.5884190266, Décision 2) :

    1. md e7fdec7d (§4, « Sortie attendue ») cite l'output « Recherche coupee apres 1.294s (50001 noeuds) » → committé ec=6 : 0.657s.
    2. md 8f457855 (§4, lecture) « 1.294 secondes : temps écoulé avant… la limite de 100 000 noeuds (ici coupée à 50 001) » → 0.657s committé, et la limite appelée est max_nodes=50_000 (le 100 000 est le défaut de signature, jamais celui de l'appel).
    3. md eb99bc3e (§5) cite en bloc « Backtracking (coupe): 1.0582s … ForwardChecking (termine): 0.0005s » → committé ec=7 : 0.7279s / 0.0004s (citation d'output reformulée).
    4. md 66ee855e (§5) et eb99bc3e « gain facteur 1500 en temps et 1500 en noeuds » → temps committé 0.7279/0.0004 = 1820 ; seul le facteur noeuds (50001/33 = 1515) est exact.
    5. md 24d2900a (§Conclusion) « 50 001 noeuds, 0.714s, échec » → troisième valeur temporelle fantôme pour le même événement (committé : 0.657s et 0.7279s — 0.714 = aucune des deux).
    6. md 25b78f20 (§Intro) + 24d2900a (§Conclusion) « Notebook jumeau : CSP-8-Temporal-CSharp (même thème en .NET C#) » ×2 → le vrai jumeau App-16-Crossword-CSP-CSharp.ipynb vit dans le même dossier Search/Applications/CSP/ ; Temporal ≠ mots croisés.
    7. md e90bcd88 (§1) « grille 7x7 générée aléatoirement avec une densité de cases noires de ~17% (12 cases noires sur 49) » → 12/49 = 24,5 %, et la grille est un échantillon codé en dur (create_sample_grid) ; même « générée aléatoirement » chez 8ea2502a (§5b).
    8. md 8ea2502a (§5b) « le dictionnaire… n'a que des mots de 3 lettres » → DICTIONARY couvre les longueurs 2 à 10 (183 mots) ; ce sont les slots de la grille qui sont tous de longueur 3.
    9. md 1ade67c0 (§6) « 7 lignes x 7 colonnes (49 cases) … ~10 noires (varie de 7 à 13) … généralement 20 à 30 slots » → committé ec=9 : 5x5, 7 cases noires, 10 slots (le code appelle generate_random_grid(5, 5)).
    10. md 8e595ba0 (§3) « CP-SAT termine en moins de 10 ms » + 748af7be (§7) « ~10ms » → aucun timing CP-SAT n'existe dans les outputs (le notebook ne mesure jamais le solveur industriel).
    11. md 8ea2502a (§5b) « passer d'une recherche dans tout l'univers observable (10⁸⁰ atomes) à une salle de classe (10³ atomes) » → une salle de classe ≈ 10²⁸⁻²⁹ atomes (10³ = quelques molécules), et 10⁸⁰→10³ est un facteur 10⁷⁷, pas 10²⁹ — l'analogie casse dans ses deux membres.

    Observations mineures non versées : md 41bd22b3 (§3) attribue à CP-SAT un « domaine continu » (CP-SAT = domaines entiers/booléens) et md 25b78f20 « backward chaining avec propagation » (terme des moteurs d'inférence ; il s'agit de backtracking) — slips isolés, non comptés.

    Pédagogie : progression saine (modélisation → solveur industriel en accroche « regardez comme c'est instantané » → naïf qui s'essouffle → FC/MRV → AC-3 qui expliquent pourquoi → génération), prérequis réels et réinvestis (MRV/LCV de Part3-Advanced en §5 et exercice 1), exercices gradués dont une réflexion finale sans code, une lecture par output jamais doublée.

    — NanoClaw (myia-ai-01) [29/09 06:05Z]

  14. jsboige commented on Sep 29, 2026

    @jsboige
    Owner

    [NanoClaw] App-14-ConnectFour-Adversarial-CSharp.ipynb — audit cycle 29/09 07:05Z (campagne #17073, série Search)

    Notebook : 22 cellules (12 md / 10 code, kernel .net-csharp), extraction intégrale v2.1 — 29,2 KB (sous plafond). Mécanique saine : ec 1→10 séquentiel, zéro doublon jaccard, headers uniques, les 3 liens de navigation résolvent (jumeau Python, App-14b, ../README.md), stubs d'exercices sans leak. Vérifié EXACT par rejeu indépendant : le test moteur ec=2 (plateau 9 coups re-tracé à la main : r5 = . X O X X O ., r4 = . . X O O X ., courant O, 7 colonnes valides — conforme), l'heuristique ec=3 (calcul manuel : X = 9 bonus centre + 7 fenêtres verticales = 16 ✓, O = −4 −1 = −5 ✓), concordances tenues (Alpha-Beta d4 → colonne 3 ✓, MCTS 1000 it./seed 42 → colonne 3 ✓), tournoi ec=7 cohérent (24 victoires / 24 parties ; MM et AB 12 chacun — 8 vs Random + 4 comme X l'un contre l'autre). Le code C# est PROPRE : moteur, minimax, alpha-beta et MCTS (UCB1, backprop du point de vue du joueur du coup) relus en entier — aucun bug ; il ne partage rien avec les deux bugs du jumeau App-16-CSharp (c.5866136226). C'est la couche claims qui dérive (famille symétrique : App-5 C# propre/Python sale, App-16 C# code fautif/Python prose dérivée, ici C# code propre/claims démenties par ses propres outputs).

    Findings (1) :

    1. navigation-misplaced — md 6eb8e6e7 (§Conclusion, pied de navigation)

    « Navigation : << App-14b ConnectFour | Index Search Applications | Jumeau Python : App-14-ConnectFour-Adversarial »
    Pourquoi : le lien « précédent » pointe App-14b (slot 1 du README Applications), alors que le notebook immédiatement précédent dans l'ordre de la série est App-14-ConnectFour-Adversarial (slot 2) — dont celui-ci se déclare le « Jumeau C# » dès le header ; le << saute deux entrées (App-14 et App-14c-CSharp) et contredit la source déclarée du notebook, reléguée en lien latéral.

    Occurrences factual-mislabel — classe GELÉE (organe proposé #17073 c.5881164749+c.5884101801, horloge 48h → 01/10 00:15Z) — versées en 1 ligne chacune (arbitrage c.5884190266, Décision 2). Contexte : la table committée ec=6 affiche ratio AB/MM = 1,000 aux profondeurs 1 ET 2 (7/7 nœuds, 56/56 nœuds) — à depth 1 l'égalité est mathématiquement inévitable (aucune coupe possible au niveau feuille) :

    1. md eef19659 (§5) « L'élagage alpha-beta doit explorer strictement moins de nœuds à profondeur égale » → démenti par les lignes 1-2 de la table (1,000 ×2).
    2. code 667464d8 (ec=6, constat imprimé par la cellule) « Alpha-Beta explore STRICTEMENT moins de noeuds (ratio < 1) a profondeur egale » → imprimé immédiatement SOUS la table qui affiche 1,000 aux profondeurs 1-2 — contradiction interne au même output.
    3. md eef19659 + code 667464d8 + md 6eb8e6e7 « Le meilleur coup renvoyé est identique entre les deux » / « avec le MEME coup final » / « C'est ce que démontre le benchmark (… coup final identique) » → le benchmark ne print jamais mmMove/abMove, aucune colonne coup dans la table : la « démonstration » alléguée n'existe pas dans les outputs.
    4. md 87cc1921 (header, cibles de concordance) « Alpha-Beta nœuds < Minimax nœuds à profondeur égale » → cible de concordance que la table committée fait échouer aux profondeurs 1-2 (vraie seulement à partir de la profondeur 3), sans que le notebook ne signale l'échec.

    Observations mineures non versées : (a) md ec9f2e51 (Exercice 3) glose « case vide "jouable" (celle du dessus dans la colonne = case vide la plus haute) » alors que la cellule jouable est la plus basse vide de la colonne — l'étape 1 du même stub code la condition correcte (r==Rows-1 ou board[r+1,c]!=0), slip isolé auto-corrigé par le code adjacent (calibre « CP-SAT domaine continu » App-16, non compté) ; (b) md ca02c7a8 « en alternant qui commence » — l'alternance vient du double appariement ordonné (i,j)/(j,i), pas d'une alternance dans les 4 parties d'un match (la substance tient, le mécanisme décrit diffère).

    Pédagogie : progression canonique (moteur → heuristique introduite au moment exact où minimax en a besoin → exact → élagage → stochastique → mesure → confrontation → exercices gradués), prérequis documentés au README (Search-3 Heuristiques, Search-6 AdversarialSearch — lignes 175-176), chaque output encadré (intro avant + constat imprimé), exercices gradués sans leak (mesure d1-d8 / sweep du paramètre c / extension d'heuristique), figures ASCII déclarées en intro (aucune à labelliser).

    — NanoClaw (myia-ai-01) [29/09 07:05Z]

  15. jsboige commented on Sep 29, 2026

    @jsboige
    Owner

    [NanoClaw] App-14-ConnectFour-Adversarial.ipynb — audit cycle 29/09 08:05Z (campagne #17073, série Search)

    Notebook : 51 cellules (33 md / 18 code, kernel python3), extraction intégrale v2.1 — 62,4 KB (au-dessus du plafond ~60 KB, déclaré : lecture intégrale en tranches). Mécanique saine : ec 1→18 séquentiel, zéro doublon jaccard, headers uniques, 6 stubs d'exercices sans leak, discipline de seed réelle et documentée (#9434). Vérifié EXACT par rejeu indépendant (port JS fidèle) : plateau 9 coups ec=3, heuristique ec=4 (9/3), colonne Minimax entière = Σ7^k k=0..d exacte (8/57/400/2801/19608/137257), colonne Alpha-Beta entière exacte (8/21/82/178/641/1370) + tous les speedups recomptés, tournoi ec=12 cohérent (36 victoires / 36 parties, 0 nuls). Notable : ce notebook traite correctement le point d=1 ratio 1,000 (aucune revendication de stricte infériorité à faible profondeur) — l'exact piège qui a coulé le jumeau C#. C'est la 4ᵉ paire symétrique de la famille : code fautif (backprop MCTS) / lectures exactes valeur par valeur mais empilées — l'inverse d'App-14-CSharp (code propre / claims démenties).

    Finding (1) :

    1. paraphrase-stack — md 618fcde1 + md tournament-analysis (« Interprétation : Résultats du tournoi » puis « Analyse du tournoi », consécutives)

    « Les résultats du tournoi montrent la hiérarchie des algorithmes : 1. Alpha-Beta et Minimax devraient dominer Random facilement 2. Alpha-Beta vs Minimax : résultats similaires (même qualite de jeu) 3. MCTS : Performance variable selon le nombre d'itérations »
    Pourquoi : deux lectures markdown consécutives du même output ec=12 — 618fcde1 lit déjà intégralement la table (lignes, scores, anomalies, note technique seed), tournament-analysis la relit en la paraphrasant — gate #17040 (max 1 lecture par output) ; la 2ᵉ n'apporte ni valeur nouvelle ni angle neuf, et contredit même la 1ʳᵉ (voir versement 4).

    Occurrences factual-mislabel — classe GELÉE (25 occurrences, organe c.5881164749/#18354, horloge → 01/10 00:15Z) — versées en 1 ligne chacune (arbitrage c.5884190266, D2) :

    1. md 42e7a2ac : « MIN a 3 jetons alignes horizontalement (colonnes 3-4-5) mais sans la 4eme case » → plateau committé ec=3 : O en (r4,c3),(r4,c4),(r5,c2),(r5,c5) — aucun alignement de 3 pour MIN n'existe sur la position (ni pour MAX).
    2. md interpretation-section : « Alpha-Beta réduit drastiquement le nombre de noeuds (facteur 5-20x selon la profondeur) » → speedups committés 1,000/2,71/4,88/15,7/30,6/100,2 : la fourchette 5-20x n'est vraie qu'à d=4.
    3. md interpretation-section : « MCTS converge vers de bons coups sans fonction d'évaluation explicite » → outputs committés : coups erratiques (0,4,6,5,0), taux plats 0,016-0,161, dernier du tournoi 2-16 (11,1%), battu par Random — et la lecture 2a282f84 écrit elle-même « Pas de convergence vers le centre ».
    4. md tournament-analysis : « Alpha-Beta vs Minimax : résultats similaires (même qualite de jeu) » → confrontation committée 6-0 AlphaBeta (match « Minimax vs AlphaBeta : 0-6-0 »), win rates 100% vs 66,7% ; la lecture précédente 618fcde1 qualifie ce même 6-0 de « balayage » — le notebook se contredit d'une lecture à l'autre.

    Occurrences concept-error — 4ᵉ et 5ᵉ de la série, organe déjà proposé par Hermes (c.5877348057, implémentation routée #18354) — versées en instances d'appui (c.5885909098) :

    1. code mcts-impl (ec=7) + md 2a282f84 : mélange de signes dans la backpropagation — node.wins += result if node.state[1] == -1 else -result avec result = get_utility(original_player) : cohérent seulement si le joueur au départ de chaque simulation est −1 ; rejeu instrumenté (1000 sims) : 65 % des simulations partent avec p_S=+1 (signe inversé) et chaque enfant de la racine reçoit les deux parités (coup 3 : 70 sims somme −24 / 143 sims somme +46). La lecture enseigne « la backpropagation alternée stocke au noeud enfant la valeur du point de vue du joueur qui y joue — l'adversaire du joueur 1 » (faux sous toute convention cohérente) et le commentaire du code « result est du point de vue du joueur original (MAX) » est tout aussi faux.
    2. md a4e34820 (note technique) : les 3 raisons données à 2,801 > 7⁴ = 2,401 sont toutes fausses de direction — (1) « le facteur de branchement diminue en profondeur » rendrait le compte plus petit, (2) « certaines branches sont plus longues que d=4 » est impossible en recherche bornée à d, (3) « l'exploration continue même quand le plateau est presque plein » contredit (1). Vraie raison, vérifiable sur toute la colonne committée : 2,801 = 1+7+7²+7³+7⁴ (somme des niveaux 0..d, pas 7⁴ qui ne compte que les feuilles) — rejeu indépendant conforme sur les 6 lignes.

    Occurrence navigation-misplaced — 4ᵉ de la série (>3) — organe proposé sur #17073 ce cycle :

    1. md nav-header + md conclusion-section (chaîne identique aux deux bouts) : « Navigation : << App-14b ConnectFour | Index | CSP Applications >> » → le << saute App-14c-CSharp (notebook immédiatement précédent du README Applications), le >> quitte la série vers CSP alors qu'App-14-CSharp (slot suivant, qui se déclare « Jumeau C# » de CE notebook — jamais référencé ici) et App-32 suivent, et « Index » pointe le README racine du dépôt, pas le README Applications de la série.

    Observations mineures non versées : (a) md 00a13648 compte « 2 fenêtres » positives là où il y en a 3 (le total 9 reste exact, prose amortie par « plus d'autres contributions ») ; (b) puces d'objectifs à initiale minuscule (« mesurer » après « Comparer ») — cosmétique.

    Pédagogie : progression canonique (moteur → heuristique introduite au moment exact où minimax en a besoin → exact → élagage → stochastique → mesure par profondeur et budget → confrontation en tournoi → exercices gradués), prérequis explicites liés (Search-03/06/07), durée posée (45 min), sources étudiantes créditées, exercices sans leak (sweep c, d1-d8, menaces, iterative deepening, opening book) ; figure ec=10 à 2 panneaux correctement titrée, axée et légendée (échelles log, labels par algorithme) — la qualité des interprétations individuelles est réelle, c'est leur nombre par output qui dérive (2 lectures pour ec=12), et la note technique de a4e34820 montre le bon réflexe (distinguer invariant structurel / machine-dep) sur le mauvais exemple.

    — NanoClaw (myia-ai-01) [29/09 08:05Z]

  16. 118 remaining items

  17. added a commit that references this issue on Oct 5, 2026
  18. jsboige commented on Oct 5, 2026

    @jsboige
    Owner

    [NanoClaw] Audit MGS-29-GA-vs-Mealpy.ipynb — cycle 465 (2026-10-05T17:05Z) : 0 finding individuel, 4 versements, 4 mineurs.

    Passe mécanique — propre. 18 cellules (10 md, 8 code), ec 1-8 séquentiels, 0 CJK, doublons jaccard>0,55 AUCUN, headers identiques AUCUN, 0 figure. Toutes les valeurs du croisement qualité sont exactes contre les outputs committés : MGS médiane 13,5 (min 12, max 18) / mealpy 12,5 (min 9, max 16) ; lignes par graine MGS 12/18/15/12 et mealpy 10/9/16/15 ; déterminisme 8/8 ; sanity check 67/71/60 IDENTIQUE ; contre-vérif témoin 16=16 ; contre-mesure conflits_C ≡ conflits_P sur les 4 graines ; budget mealpy 8 050 = 50 + 160×50 ; grille 36 vides / 45 indices / 36 gènes R1.

    Versement stale-claim (organe c.5978019972) — la ligne vitesse vient d'une exécution antérieure. MD[16] id=9400167f et MD[17] id=b58c5f9c citent « MGS devant, 7,83x moins cher par evaluation (0,017 vs 0,136 ms/eval) » ; le committé de CODE[15] id=a8e785a2 imprime « Rapport ms/eval mealpy/MGS : 6,73x », « MGS … ms/eval moyen 0,018 », « mealpy … 0,120 ». Trois valeurs sur trois hors outputs — « 7,83 » n'apparaît que dans ces deux markdown, « 0,136 » nulle part ailleurs dans le carnet — alors que dans la même phrase les chiffres de qualité (12,5 [9-16] / 13,5 [12-18]) et le déterminisme (8/8) sont, eux, exacts : la qualité a été rejouée après ré-exécution, la vitesse ne l'a pas été. Marqueur joint, même famille : MD[16] se présente comme « la deuxieme d'un futur tableau 5x4 », ce qui contredit le « paire 8/9 » de MD[17].

    Versement navigation-misplaced (organe c.5753954099 / check_series_refs c.5787258969) — 9 renvois « cellule N », 6 périmés. La prose garde la numérotation de MGS-28 (22 cellules) sur un carnet qui en compte 18 :

    • MD[3] id=2e4bb911 : « La double comptabilite de la cellule 9 (conflits_C re-eval C#, conflits_P brut Python) » — elle est en cellule 15 ; et « Voir cellules 10 et 11 pour le verdict rejoue sous le vrai paysage » — le verdict rejoué est en cellule 16 (la cellule 10 ne rend que « Exercice 2 a completer »).
    • MD[5] id=ee9641b4 : « valide sur le vecteur temoin LCG 1 de la cellule 6 — le cout total est dans l'output de cette cellule … aller lire la cellule 6 » — la cellule 6 ne rend que « Exercice 1 a completer » ; le coût témoin est en cellule 8, et sous aucune autre numérotation (ec=6 = 16 ≠ 67).
    • MD[9] id=a2b6cd0b : « L'exemple ci-dessus (cellule 4) teste 4 graines fixes {0, 1, 7, 42} » — la cellule 4 ne court que la graine 7 (15 conflits / 6 026 évals).
    • MD[17] : « voir la table de la cellule 9 » — elle est en cellule 15.
      Contrôle croisé : en MGS-28, la cellule 6 est le pont pythonnet (les coûts témoins 67/71/60 sont bien dans son output) — la référence y était juste ; le carnet a été re-séquencé de 22 à 18 cellules sans réaligner ses renvois.

    Versement output-uninterpreted (organe c.5973517595) : 2 sorties non lues. CODE[12] id=d265d729 — MD[13] id=f3b6edaa cite « 16 conflits apres 8 050 evaluations » (exact) mais laisse non lues la contre-vérification « cout C# du meilleur mealpy = 16 (Python rapporte 16) -> IDENTIQUE » et les 942 ms (« 942 » n'apparaît dans aucun markdown) ; CODE[4] id=097b5381 (témoin MGS 15 / 6 026 / 139 ms) n'est cité par aucun markdown. Nuance : les deux témoins coïncident avec les lignes graine 7 du bench (15 / 6 026 et 16 / 8 050) — la redondance limite la perte, elle ne la supprime pas : la garantie de protocole redevient invisible.

    Versement figure-missing (organe c.5979323748) : 0 figure (les seuls display_data sont du text/html, 3 168 o et 126 o). Le grain EST une comparaison à deux axes (qualité médiane ; ms/éval) × 2 moteurs × 4 graines.

    Mineurs (4) : (a) MD[13] : « elle expose le dernier cout dernier cout mealpy » — redite de deux mots ; (b) MD[0] id=818cef16 « mediane 10,5 conflits a 8 000 evals » — la médiane 10,5 est exacte (vérifiée contre la table R1/GA de MGS-21-Representation-vs-Algorithme.ipynb), mais MGS-21 y porte « evals moy. 6 016 » : 8 000 est le budget nominal, la consommation mesurée est ~6 000 (MD[1] le dit correctement) ; (c) MD[17] redit les 4 chiffres de MD[16] — gate « max 1 lecture par output » tangente : MD[17] porte l'ancrage Epic, mais la table est lue deux fois ; (d) les 2 display_data text/html non lus (cosmétiques).

    Positifs. (1) Croisement qualité 100 % exact et lecture du verdict rigoureuse : le critère pré-enregistré « médiane strictement inférieure ET maxima sous les minima » est cité puis déclaré non vérifié (mealpy garde le max 16 au-dessus du min MGS 12) — pas de survente. (2) Fil rouge MGS-22 re-vérifié hors carnet : « mealpy OriginalPSO mediane 28,5 conflits, MGS ParticleSwarmOptimization mediane 43,5 » = exactement le committé de MGS-22 (28,5 [26-31] vs 43,5 [39-48] ; ms/éval 1,09×) — la conclusion « l'écart PSO ne se reproduit pas GA contre GA » repose sur des chiffres justes. (3) La famille plage #13407 reste absente (propagation éteinte, confirmée après MGS-28). (4) Exercices cohérents (3 stubs, prose ↔ indice ↔ code) : budget réduit ~2 430 = 30 + 80×30, trace de longueur 160, trace[0] > trace[-1], allSame sur 3 répétitions — aucun mismatch (le motif MGS-27 ne réapparaît pas). (5) Le vestige « 51 pour 36 gènes » relevé en MGS-28 est corrigé ici (LcgVector29(1, 36)). (6) Couche pédagogique : arrivée recadrée sur le verdict MGS-22 avec ses chiffres, question directrice explicite, protocole pré-enregistré en tableau AVANT toute mesure, décomposition socle → moteurs → sanity check → bench, lectures placées après leur code.

    — NanoClaw (myia-ai-01) [cycle 465 — 17:05Z]

  19. jsboige commented on Oct 5, 2026

    @jsboige
    Owner

    [NanoClaw] Audit Search/Part4-Metaheuristics/MGS-vs-mealpy/MGS-30-ScatterSearch-Decomposition.ipynb (blob 8d46afcb, 22 cellules MD 12/CODE 10, kernel .NET C#) — cycle 466 (2026-10-05T18:05Z) : 0 finding individuel, 3 versements, 4 mineurs.

    Passe mécanique — propre. 22 cellules (12 md, 10 code), ec 1-10 séquentiels, 0 CJK, doublons jaccard>0,55 AUCUN, headers identiques AUCUN, 0 figure. Toutes les valeurs du croisement sont exactes contre les outputs committés : médianes de conflits 54,0 (43-56) / 52,0 (45-56) / 51,5 (48-53) pour complet / ablaté / mealpy-jumeau — recomputées à la main sur les 12 lignes du banc (54,56,54,43 → 54,0 ; 54,56,50,45 → 52,0 ; 53,48,53,50 → 51,5) ; ms/éval moyens 0,113 / 0,024 / 0,123 et ratio noyau 0,92× ; fitness pure 0,007 vs 0,037 ms/éval = 5,25× ; déterminisme 12/12 ; sanity check 67,71,60 IDENTIQUE ; scan 213 optimiseurs mealpy / 0 scatter search ; budget mealpy 8 050 = 50 + 160×50 ; témoins graine 7 (54 / 8 000 / 1 017 ms et 50 / 8 000 / 185 ms) ; formes d'écart par graine (axe [0,0,0,0] ×2, [4,4,4,4], [−2,−2,−2,−2] ; noyau [1,1,1,1], [6,6,8,8], [1,1,1,1], [−7,−7,−7,−7]).

    Versement stale-claim (organe c.5978019972) — la prose du socle cite un compte de gènes que le carnet démentit lui-même. MD[3] id=93c058bc : « … le même substrat (grille, représentation R1, fonction de coût). 51 gènes continus dans [1, 10], arrondis + bornés vers 1..9 au décodage ». L'output committé de la cellule socle CODE[2] id=ef6882f2 imprime « Grille de référence : 36 cellules vides, 45 indices fixes, 36 gènes R1 », et SudokuR1Chromosome30 se construit sur base(EmptyCells30(ParsePuzzle30()).Count) = 36. Les deux carnets frères portent le même socle et disent la même chose : MGS-28 et MGS-29 impriment tous deux « 36 gènes R1 » — MGS-29 avait même corrigé ce vestige (LcgVector29(1, 36)). Marqueur joint, même racine : les vecteurs témoins de MGS-30 sont bâtis sur 51 éléments (LcgVector30(1, 51) ×3 pour la sanity check, LcgVector30(42 + i, 51) ×500 pour le banc) alors que le chromosome en compte 36 — les 15 derniers éléments sont silencieusement ignorés des DEUX côtés (les deux décodeurs bouclent sur len(empties) = 36), donc la sanity check « 67,71,60 → IDENTIQUE » ne peut structurellement pas attraper le vestige. Le « 51 » est le nom de la grille (Sudoku_Easy51.txt) confondu avec un compte de gènes.

    Versement output-uninterpreted (organe c.5973517595) — le témoin du bras 3 et sa contre-vérification n'ont aucune lecture. CODE[10] id=2e3a2b24 rend deux sorties — la course témoin mealpy (« 53 conflits, 8 050 évaluations, 927 ms ») et la contre-vérification croisée (« coût C# du meilleur mealpy = 53 (Python rapporte 53) -> IDENTIQUE ») — et la seule cellule qui les sépare du banc est un séparateur *** (MD[11]). Le témoin du bras 1, lui, est lu (MD[5] le lit et en tire « le premier signal de cette famine ») : l'asymétrie est exactement celle de MGS-29, où la contre-vérification croisée « 16 = 16 » n'était pas lue non plus. Ce qui est perdu est la garantie de protocole : que le vecteur gagnant du jumeau mealpy, redécodé et recosté côté C#, redonne bien le même conflit.

    Versement figure-missing (organe c.5979323748) : 0 figure (les deux seuls display_data sont du text/html, 3 168 o et 126 o). Le grain EST un croisement trois bras × quatre graines dont le carnet calcule explicitement la forme de l'écart par checkpoint (ShapeOf30 : « nul », « persistant », « croisement », « refermeture ») — un tracé des trajectoires best-so-far (une courbe par bras et par graine, ou une grille 3×4) porterait à lui seul l'axe diversité et l'axe noyau, aujourd'hui lisibles seulement dans 8 lignes de texte.

    Mineurs (4) : (a) MD[0] id=e90b13fa : « qf = 1,0, b2 désactivé, élitesse pure » — coquille pour « élitisme » dans le tableau des trois bras ; (b) MD[0] et MD[14] parlent des « trois questions posées à la cellule formules » alors que cette cellule (CODE[8]) n'énonce que deux axes (l'axe diversité, le noyau) : le déterminisme, troisième lecture, n'est posé par aucune cellule ; (c) MD[21] id=6e9d0cc9 : « un puzzle Sudoku 51 à 8 000 évaluations » — le « 51 » y désigne la grille, mais la même graphie est fausse deux cellules plus haut comme compte de gènes (ambiguïté à lever), et le jumeau mealpy consomme 8 050 évals, pas 8 000 (budget non symétrique, jamais dit) ; (d) MD[5] id=2fb0f889 cite une phrase anglaise entre guillemets attribuée à ScatterSearchReinsertion.cs (« pure quality collapses the reference set onto the best point and starves the combination operator of distant mates ») : la source n'est pas dans le dépôt CoursIA (MetaGeneticSharp est un frère non versionné, le carnet ne le référence que par des #r), donc non vérifiable d'ici — signalé comme observation, PAS comme finding ; les 2 display_data text/html restent non lus (cosmétiques).

    Positifs. (1) Croisement intégralement exact : les 12 lignes du banc, les trois médianes, les trois ms/éval moyens, le ratio 0,92× et le 5,25× sont reproductibles à la main depuis les outputs committés — aucune valeur fabriquée dans les lectures. (2) Les trois exercices sont cohérents (3 stubs, prose ↔ indices ↔ code) : chaque variable référencée est définie en amont (Seeds30 et Median30 en CODE[12], benchVecs et K30 en CODE[13], Mgs30Host en CODE[4]) et chaque indice correspond à une signature réelle (RunScatter(seed, 50, 640), RunScatter(sd, 50, 160, qf)) — le motif MGS-27 (exercice portant sur une variable hors portée) ne réapparaît pas. (3) Zéro renvoi numéroté périmé : MGS-30 nomme ses cellules (« la cellule formules », « la cellule coût/éval », « la cellule pont ») au lieu de les numéroter — le défaut de MGS-29 (6 renvois « cellule N » hérités d'une numérotation à 22 cellules) ne s'est pas reproduit. (4) Arrivée cohérente : MGS-29 annonçait « Restant apres ce grain : paire 9 (ScatterSearch) » — MGS-30 est exactement cette paire, et renvoie à MGS-31 pour la synthèse croisée des neuf. (5) La preuve d'absence est portée par l'exécution, pas par la prose (scan des 213 optimiseurs, 0 occurrence), et le carnet dit lui-même pourquoi c'est plus fort (« une évolution future de mealpy … rendrait la cellule fausse à la prochaine exécution ») : la preuve s'auto-invalide au lieu de dériver silencieusement. (6) Aucune survente : le verdict « la diversité max-min ne paie pas » est explicitement borné (« sur ce puzzle à ce budget ») et la conclusion liste les trois choix spécifiques (puzzle 51, amélioration locale différée, combinaison convexe unique) qui pourraient le renverser — une prescription de template est traitée comme hypothèse testable. (7) L'attribution du noyau est étayée par deux mesures : l'écart ms/éval du banc (0,92×) est écarté comme explication par la mesure de fitness pure (5,25× en faveur du C#), d'où « écart de trajectoire, pas de coût » — l'inférence tient sur les chiffres, pas sur une intuition.

    — NanoClaw (myia-ai-01) [cycle 466 — 18:05Z]

  20. jsboige commented on Oct 5, 2026

    @jsboige
    Owner

    [NanoClaw] Audit Search/Part4-Metaheuristics/MGS-vs-mealpy/MGS-31-Synthese-Croisee.ipynb (61 821 o, 21 cellules MD 13/CODE 8, kernel .NET C#) — cycle 467 (2026-10-05T19:05Z) : 0 finding individuel, 5 versements, 2 mineurs.

    Passe mécanique — propre. 21 cellules (13 md, 8 code), ec 1-8 séquentiels, 0 CJK, doublons jaccard>0,55 AUCUN, headers identiques AUCUN, navigation valide (README Part4 présent, ancres OK), stubs d'exercices exclus de la récolte, 2 figures SVG inline légendées. L'axe QUALITÉ du croisement est intégralement exact et déterministe : les 9 lignes de médianes/étendues re-dérivées à la main des résumés committés des 9 paires correspondent toutes (P1 43,5[39-48]/28,5[26-31] ; P2 25,5/21,5 ; P3 27/31 ; P4 49,5/51 ; P5 42/25 ; P6 37/43,5 ; P7 30,5/25,5 ; P8 13,5/12,5 ; P9 54/51,5), verdicts 6/9 mealpy − 3/9 MGS exacts, trajectoires de checkpoints P7/P9 exactes, intégrité committée 9/9 PASS.

    Versement stale-claim (organe c.5978019972) — la vague de coûts récoltée n'existe plus : 8 lignes de banc sur 9. La colonne « ratio impr. » est du TEXTE parsé des fichiers paires (regex sur « Rapport ms/éval mealpy/… ») : un écart de valeur ne peut pas venir d'une dérive matérielle, il prouve que le contenu source différait au moment de la récolte. Contre les paires actuelles committées : P1 0,81→1,09 ; P2 2,37→3,36 ; P3 3,26→6,60 ; P5 1,41→1,34 ; P6 3,06→5,63 ; P8 7,83→6,73 (P4 1,78→1,77 seul proche), et les ms/éval divergent partout sauf P9 (P1 : tableau 0,104/0,085 contre MGS-22 actuel 0,194/0,212 ; seul P9 = 0,113/0,123 correspond au millième). MD[0] id=6fc1fceb revendique pourtant la synthèse de paires « MGS-22 à MGS-30, toutes re-exécutées post-fix sur le noyau assaini ». Claims dérivés invalidés par l'état actuel : MD[7] id=8c37f44c « le seul rapport de coût inférieur à 1 (0,82x) » et MD[12] id=7fceecb2 « L'unique inversion (P1, 0,82x) » — MGS-22 actuel imprime 1,09x, il n'existe plus aucune inversion ; MD[12] « jusqu'à 7,86x en P8 » (actuel 6,73x) ; l'agrégat CODE[9] « à rapport < 1x : 1/9 » (0/9 aux ratios actuels). Chronologie : les paires ont été re-committées entre le 06-09 (MGS-24) et le 03-10 (MGS-25/26/27), le fichier MGS-31 lui-même le 03-10 — ses sorties embarquées décrivent une vague antérieure au 06-09. Ce qui SURVIT à la re-mesure : ≥2x reste 5/9, « huit paires sur neuf paient mealpy plus cher » devient 9/9, la médiane redevient ≈2,6-2,8x — l'axe du diagnostic tient, seuls les nombres par paire et le récit P1-inversion sont éteints.

    Versement stale-claim (organe c.5978019972) — les chiffres « fitness seule » sont saisis à la main, hors harnais, et faux contre l'état actuel. MD[7] : « la paire elle-même mesure la fitness seule à 5,13x Python/C#,confirmation que l'instrumentation, pas l'algorithme, inverse ce rapport » (attribué à P1) — MGS-22 actuel imprime « rapport Python/C# : 5,56x » ; 5,13x est la valeur actuelle de P6 (MGS-27). MD[12] : « le test « fitness seule » (rapport 5,13x à 5,33x selon les paires) » — les valeurs actuelles committées vont de 5,13 (P6) à 6,61 (P2), et « 5,33 » n'existe dans aucun output committé : on ne le trouve que dans la prose de MGS-27 citant une vague encore plus ancienne (« les 5,13× du PSO, 5,33× du SA, 5,56× de l'EO ») — c'est précisément cette vieille vague que MD[7] cite pour P1. Et le harnais de récolte ne cible pas ces lignes (aucun regex ne matche « rapport Python/C# ») : ces nombres ont été tapés à la main, en violation de la règle 1 du carnet (MD[1] id=a35a130a : « Aucun nombre de ce notebook n'est saisi à la main. »).

    Versement stale-claim (organe c.5978019972) — « Deux paires seulement journalisent ces checkpoints ». MD[8] id=7d01b283 : « Deux paires seulement journalisent ces checkpoints dans leur banc — P7 (tous les bras, toutes les graines) et P9 (tous les bras, toutes les graines) ; les autres ne commettent que le point final. » MD[10] id=ac45a603 reprend : « Les sept autres paires ne commettent que le point final — leur forme ne se déduit pas, elle se mesurerait. » Faux contre l'état actuel : MGS-22 (P1) porte une colonne cp25/50/75/100 dans son banc ET dans sa table de témoins (lignes « 41/32/31/30 », « 35/27/26/26 »…) et MGS-23 (P2) pareil (banc « 37/20/20/20 », « 31/27/27/27 »…). La récolte committée de MGS-31 n'a vu que P7/P9 — cohérent avec une exécution antérieure à ces vagues, mais la prose affirme l'état présent du dépôt. (MGS-24 n'est pas compté : ses 3 lignes « 22/28/26/28 » sont des valeurs par graine, pas des checkpoints.)

    Versement stale-claim (organe c.5978019972) — « quatre paires à trois bras » contredit par la récolte du carnet lui-même. MD[1] id=a35a130a : « quatre paires sont des décompositions à trois bras (P4 spirale/naïf, P7 kennedy/jumeau-formule-MGS, P9 complet/ablaté) » — « quatre » suivi d'une liste de trois. MD[3] id=7becac61 : « quatre d'entre elles (P4, P7, P9 et la paire fondatrice P1 dans sa version à bras multiples) déclarent des bras de décomposition en plus des bras canoniques ». Or la propre sortie committée de la récolte (CODE[2]) liste « P1 mgs x4, mealpy x4 » — deux bras canoniques, aucun bras de décomposition ; seuls P4, P7, P9 en portent trois. Preuve interne, sans dépendre de l'état des fichiers paires : le vestige « quatre »/« P1 à bras multiples » décrit un état du plan qui n'est pas celui que le carnet récolte.

    Versement output-uninterpreted (organe c.5973517595) — le verdict d'intégrité 9/9 n'est jamais lu. MD[3] annonce le contrôle (« un désaccord signifierait que ce notebook parse mal, et serait signalé avant toute interprétation »), CODE[4] id=b19d5dc3 imprime « INTEGRITE : 9/9 paires conformes, 0 écart(s). », et aucune cellule markdown ensuite ne mentionne ce verdict : MD[5] enchaîne sur la méthode du tableau, MD[7] lit le tableau. La garantie méthodologique centrale — que la récolte re-dérive ce que les paires impriment — n'est jamais constatée pour de vrai, alors même qu'elle passe. (Frontière #13410 : aucune lecture existante → lecture manquante, pas une réécriture.)

    Mineurs (2) : (a) MD[7] : « jusqu'au triple écart de l'EquilibriumOptimizer original (P5 : médianes 42 contre 25) » — 42 contre 25 = 1,68× (Δ 17), pas un triple écart, et l'écart suivant (+15, P1) n'en est pas le tiers : la formule n'est dérivable d'aucune lecture des chiffres ; (b) MD[12] : « mesurée isolément dans chaque paire par le test « fitness seule » » — MGS-29 (P8) n'a pas de cellule fitness seule dans ses outputs committés (8 paires sur 9 en ont une).

    Positifs. (1) L'axe qualité est déterministe et intégralement reproductible à la main — aucune valeur fabriquée dans les lectures qualité, et le contrôle d'intégrité par re-dérivation (médianes, min-max, ms/éval, ratios avec tolérances) est une idée forte, même si son verdict n'est pas lu. (2) Les trajectoires P7/P9 sont exactes et le raisonnement P7 « deux formules distinctes, trajectoires identiques graine par graine ⇒ écart de moteur, pas de formule » est proprement isolé. (3) Exercices cohérents (variables paires et Mediane2 en portée, stubs « Exercice a completer » exclus de la récolte — anti-leak #13515 respecté). (4) Deux figures SVG inline légendées (barres groupées des médianes + rapport en échelle log) — première du sous-ensemble MGS-vs-mealpy à porter des figures. (5) L'épilogue #13778 est sourcé chiffre à chiffre : 27,0→13,0 (−14), dispersion 21,7 hors bornes [1,10), T morte ~G150, StepCoolingExponent opt-in PR MetaGeneticSharp#59, 11/11 tests SA verts, verdict NO IMPROVEMENT — tout se vérifie contre le fil. (6) Les limites sont mesurées et explicites, et les conclusions d'axe survivent à la re-mesure (9/9 > 1x désormais, ≥2x inchangé) : c'est la marque d'un diagnostic robuste, même si sa table de coûts est périmée.

    — NanoClaw (myia-ai-01) [cycle 467 — 19:05Z]

  21. jsboige commented on Oct 5, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-05T21:05Z — Search-06-AdversarialSearch.ipynb (twin Python du C# audité 01/10) — lecture intégrale 43 cellules, croisement exhaustif prose ↔ outputs committés.

    0 finding individuel, 3 versements (classe stale-claim, organe déjà proposé check_prose_vs_outputs c.5771999707) :

    1. stale-claim — MD[16] (id 56167ef2), §5 Recherche Itérative : « Sortie obtenue : L'algorithme atteint la profondeur 18 en un runtime machine-dep (sous le plafond de 0.5s)… » — table « Profondeur atteinte | 18 » + Note technique « La profondeur 18 semble superieure aux 9 cases… ». Output committé CODE[15] : Iterative Deepening: valeur=0.00, action=0, profondeur=14. La valeur citée (×3) est absente des outputs committés ; la profondeur atteinte est bornée par la boucle wall-clock (temps_max=0.5s) donc machine-dep — la convention appliquée aux temps n'a pas été appliquée à cette valeur.

    2. stale-claim — MD[25] (id 6ea2b481), Lecture §7.1 : « les speedups temporels du §7 (27-30×, ~139×) flottent avec la charge ». Outputs committés : §4 CODE[12] Speedup: 28.0x ; §7 CODE[21] 35.8x / 169.4x. Ni 27-30× ni ~139× ne figurent dans les sorties committées (rédaction d'une exécution antérieure) — ironique dans la lecture qui prône le déterminisme.

    3. stale-claim — MD[42] (id b79e3681), tableau Synthèse : « Alpha-Beta | 2x-10x | O(b^(m/2)) optimal » et « Transposition Tables | 2x-5x ». Contredit les mesures déterministes du propre §7.1 du carnet (×30.1 nœuds, ×182.7) et les fourchettes de MD[22] (20-30x / 50-100x+) : trois fourchettes différentes pour la même grandeur, aucune ne contient les valeurs committées (35.8x / 169.4x).

    Mineurs non déposés (4) : MD[22] fourchettes « Valeur attendue » 20-30x/50-100x+ hors des committées (supplantées explicitement par §7.1) ; MD[19] « Espace memoire ~4575 entrées » = états évalués (hits+misses), entrées réellement stockées < 3010 ; MD[16] point clé 4 « les profondeurs précédentes guident l'ordonnancement » non implémenté dans CODE[15] (aucun tri), et l'explication Note technique du depth>9 est trompeuse (c'est la boucle while time < temps_max qui incrémente au-delà de la profondeur du jeu, pas « l'heuristique qui continue le calcul ») ; nav « << Search-03 » non contiguë déjà consignée pour le twin (ligne 126, c.5965845952) — non re-déposée.

    Positifs : croisement §7.1/§7.2 ↔ outputs 100 % exact (549 946 / 18 297 / 3 010 + 1 565 / ×30.1 / ×182.7 / 672→1 498→8 051 / ×21.5→×212.3→×831.4 ; ~6,7M prof 5 honnêtement marqué « mesuré hors-ligne » dans le code) ; ec 1..16 séquentiel, 0 CJK, 0 doublon Jaccard, 2× « ### Principe » à corps distincts (pas #17066) ; 6 exercices en stubs TODO sans fuite ; ancres savantes (von Neumann/Shannon/Knuth-Moore/Zobrist/Korf) + références finales ; §7.1 (déterministe vs wall-clock) et §7.2 (bascule utile→indispensable, 5×5-aligner-4) = excellents ajouts pédagogiques ; arrivée au bon moment (prérequis 01/02/03 réels), difficulté bien décomposée.

    Garde population : VERT 764/764 @ eae331afa. Aucun skip ce cycle (aucune PR ouverte touchant le notebook). Désignation suivante : Search-07-MCTS-And-Beyond-CSharp.ipynb (ligne 102).

  22. jsboige commented on Oct 5, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-05T22:05Z — Search-07-MCTS-And-Beyond-CSharp.ipynb (jumeau C# ; le twin Python suivra) — lecture intégrale 45 cellules (28 md / 17 code), croisement exhaustif prose ↔ outputs committés.

    1 finding individuel (organe check_prose_vs_outputs déjà proposé c.5771999707) :

    1. stale-claim — MD[13] (id cell-961c0211, « Interpretation : Comparaison MCTS vs Minimax ») : « 2. Convergence progressive : plus d'itérations rapprochent la valeur MCTS de 0 (la valeur optimale donnee par Minimax). 3. Stabilite tardive : a 5000 itérations, la valeur estimee MCTS est très proche de l'optimal (0). » Outputs committés de la cellule benchmark : MCTS (100) 0,27 / MCTS (500) 0,12 / MCTS (1000) 0,04 / MCTS (5000) 0,0827 0,27 1. La valeur committée à 5000 itérations est 0,27 — ni « très proche de 0 », ni convergence monotone (0,27 → 0,12 → 0,04 → 0,27) : la lecture décrit une exécution antérieure contredite par les outputs du carnet (gate Redressement campagne densité #13410 : remplissages dégénérés — 233 notebooks, 20 paquets d'audit #17040).

    Mineurs non déposés (3, interprétatifs — discipline anti-FP) : MD[10] la théorie « un coin ou le centre sont les meilleurs premiers coups » reste muette sur la sortie réelle action=1 (un bord) — rien de faux, occasion pédagogique manquée ; MD[33] renvoie le raffinement d'heuristique vers « l'Exercice 3 » qui porte en réalité sur l'élagage alpha-beta ; MD[44] cite AlphaFold en « Pour aller plus loin » (cousin deep learning, hors filiation MCTS).

    Positifs : croisements exacts partout ailleurs — Nim « 0,64 -> 0,96 » = outputs 0,642/0,963, « prendre 3 dès 1000 itérations » ✓ ; Connect-4 6 634 027 / 314 060 245 nœuds / 330,18 s / croissance ~×7 par niveau tous présents dans la sortie, la ligne depth=10 hardcodée étant explicitement étiquetée « (mesure) » / « mesuré hors-ligne » dans le code ET la prose (transparence exemplaire) ; OpenSpiel action = 4 = jumeau Python (bridge pythonnet vérifié) ; benchmark c ∈ {0,5, 1,0, 1,41, 2,0} = annonce MD[40]. Référence interne « cellule 16 (cell-005cd9cb) » vérifiée exacte contre l'id réel du notebook. 3 paires de headers exercices identiques = motif sommaire MD[24] + énoncé détaillé (corps distincts, pas #17066) ; exercices 2-5 en stubs TODO avec garde anti-copier-coller fonctionnelle (le tournoi décommenté signale le stub incomplet) ; ec 1..17 séquentiel, 0 CJK, 0 doublon Jaccard ; l'exemple discriminant Connect-4 (§ « anti-pitch », mesure préalable déclarée) répond précisément au « MCTS accessoire sur jeux triviaux » posé en ouverture ; références académiques pertinentes (Kocsis & Szepesvári 2006, Silver 2016/2017, Browne 2012).

    Garde population : VERT 764/764 @ 2d7c6570074596dd8acf8ee9c61d1926dc16dfcc. Aucun skip ce cycle (aucune PR ouverte touchant le notebook). Artefact organes ai-01 toujours absent de #17073 → pas de passe d'organes. Désignation suivante : Search-07-MCTS-And-Beyond.ipynb (twin Python, ligne 103).

  23. jsboige commented on Oct 5, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-05T23:05Z — Search-07-MCTS-And-Beyond.ipynb (twin Python du C# audité au cycle précédent) — lecture intégrale 42 cellules (26 md / 16 code), croisement exhaustif prose ↔ outputs committés.

    0 finding individuel, 0 versement. Toutes les valeurs citées en prose matchent les outputs committés (convention machine-dep déclarée pour les temps) :

    • MD[10] : « action 4 (centre), valeur ~ 0.37, ~ 0.024s » = output action=4, valeur=0.371, temps=0.029s ✓
    • MD[13] : « ~ 0.74 / ~ 0.53 / ~ 0.35 / ~ 0.50 » = 0.735294 / 0.528455 / 0.350515 / 0.500405 ✓ ; action 5000 « centre » = 4 ✓ ; « le biais ne s'attenuera pas, ~ 0.5 à 5000 » = confirmé par les outputs ✓ ; temps ~1.2s Minimax vs 1.455s committé = machine-dep déclaré ✓
    • MD[16] : « Action jouée 4 (centre) » = output OpenSpiel action: 4 ✓, cohérent avec le bridge pythonnet du jumeau C# (même seed, mêmes hyperparamètres)
    • MD[24] : « 13 % à 100 iters, 3 % à 500, 0 % à 1000/5000, valeur 0,73 → 0,49 » = 13.333333 / 3.333333 / 0 / 0.733333 → 0.491386 ✓
    • MD[28] : « ~ +0.75, 42/50 perdues, 8/50 gagnées » = 0.747 / 42/50 / 8/50 ✓ ; contrôle Nim normal/misère exact (7/11 → coup 2 ; 9/13 déjà perdantes, optimal=True automatique — honnêtement déclaré « illustration, pas taux de convergence ») ✓

    Positifs notables : référence interne « cellule 15 (openspiel-section) » vérifiée exacte contre l'id réel du notebook ; section OpenSpiel documente proprement le Stop & Repair règle F (#10459) avec sortie réelle pyspiel 2.0.1 ; exemple de convergence remarquablement honnête (taux optimal NON monotone, « plus d'itérations n'améliore pas la qualité ici » — le twin Python enseigne la nuance que la lecture du jumeau C# avait ratée, cf. finding du cycle précédent) ; lecture Nim pédagogiquement forte (évaluation juste vs sélection bruitée → renvoi vers AlphaGo et l'Exercice 2) ; 5 stubs TODO sans fuite, tests commentés « décommentez après avoir complété » ; 4 paires de headers exercices = motif sommaire MD[23] + énoncé détaillé (corps distincts, pas #17066) ; ec 1..16 séquentiel, 0 CJK, 0 doublon Jaccard ; ancres savantes + références académiques identiques au jumeau (von Neumann/Kocsis-Szepesvári/Silver/Browne).

    Observations mineures non déposées (interprétatifs, discipline anti-FP) : §7 « UCB1-Tuned / UCB-V » sans contrepartie d'exercice (exercice 4 = RAVE) ; différences jumeaux assumées par design (C# a l'exemple discriminant Connect-4 résolu et RAVE backprop via chemin d'actions ; Python a le misère avec contrôle minimax mémoïsé n=1..16) ; MD[31] « Alpha-Beta devrait être plus fort » = attente d'énoncé, pas une mesure fabriquée ; MD[41] AlphaFold en « Pour aller plus loin » (même observation que pour le jumeau, déjà signalée en mineur).

    Garde population : VERT 764/764 @ aee5b0cfcda3da1c72f8b2e6d6173ec6ff1d42ba (forced update de main constaté ce cycle : identité d'ensemble intacte). Aucun skip ce cycle. Artefact organes ai-01 toujours absent de #17073 → pas de passe d'organes. Désignation suivante : Search-08-DancingLinks.ipynb (ligne 104).

  24. jsboige commented on Oct 6, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-06T00:05Z — Search-11b-Metaheuristiques-Deep.ipynb (Tranche 1 : recuit simulé, twin C#/.NET de Search-11 Python/MEALPy — les tranches 2-4 sont des fichiers distincts) — lecture intégrale 19 cellules (11 md / 8 code), croisement exhaustif prose ↔ outputs committés.

    0 finding individuel, 0 versement. La lecture dense MD[11] (id e9c3bfb9) est vérifiable valeur par valeur :

    • « best f = 10,770053 au départ, 0,292674 dès le palier 25, divisé par environ 37 » = outputs paliers 0/25 exacts (10,770053 / 0,292674 = 36,80 ≈ 37) ✓
    • « 0,064659 tient les paliers 75, 100 et 125, casse à 0,038244 au palier 150, ne bouge plus » = les 5 lignes committées exactement ✓ (palier 175 = 0,038244, best final 0,038244)
    • « point final (-0,0001, -0,0121), distance 0,012136, 0,0121/0,0001 = 121 » = outputs exacts, arithmétique exacte ✓
    • « sanity Sphere vérifiée par carrés : 0,0050² + 0,0042² = 0,000043 » = output Sphere exact, somme 0,00004264 → F6 « 0,000043 » ✓ (vérification qui prouve la fonction objectif contre son propre rendu)
    • Sphere/Ackley origine = 0,000000, point raboteux 8,772021 rendus et correctement qualifiés ✓

    Positifs notables : lecture chiffrée qui cite uniquement des valeurs présentes dans les outputs (gate #17040 respectée partout, y compris deux vérifications arithmétiques internes exactes) ; sanity check explicite avec garde « si SA échouait ici, l'implémentation serait buguée » ; 3 exercices en stubs TODO sans fuite (indices de méthode, pas solutions) ; tranches marathon #4956 annoncées avec fichiers cible réellement présents (Part2/3/4) ; navigation vérifiée (Search-10-CSharp et Search-11 Python existent au même niveau) ; seed Random(42) reset avant chaque run pour isoler les effets ; ec 1..8 séquentiel, 0 CJK, 0 doublon Jaccard, 0 header identique ; kernel .net-csharp cohérent avec la mission from-scratch.

    Mineurs non déposés (interprétatifs, discipline anti-FP) : « divisé par environ 37 en un quart de course » — palier 25/200 = 1/8 des paliers, la qualification « un quart » est approximative (les valeurs citées, elles, sont exactes) ; « une descente pure s'arrête typiquement à f ≈ 2 à 6 » = ordre de grandeur typique sans contrepartie mesurée dans ce notebook (aucune descente pure implémentée), formulé comme typique et non comme mesure ; MD[11] écrite sans accents au contraire du reste du notebook (cosmétique).

    Garde population : VERT 764/764 @ aee5b0cfcda3da1c72f8b2e6d6173ec6ff1d42ba (les drifts +1 signalés 21:52Z/23:51Z sur #17073 sont tous deux en partition Hermes — Lean-10b et Socle-ExplorerPattern-Csharp — hors de mes séries NC, cohérent avec l'identité intacte). Aucun skip ce cycle (aucune PR ouverte touchant le notebook). Artefact organes ai-01 toujours absent de #17073 → pas de passe d'organes. Désignation suivante : Search-12a-Composer-Regards.ipynb.

  25. jsboige commented on Oct 6, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-06T01:05Z — Search-12a-Composer-Regards.ipynb (opération 12 « Composer des regards », chantier ICT #12204 — play forward g(n) / coplay backward d(n), composition f* = g + d sur gridworld pondéré) — lecture intégrale 25 cellules (16 md / 9 code), croisement exhaustif prose ↔ outputs committés.

    0 finding individuel, 0 versement. Le croisement est exact à un niveau inhabituel — j'ai re-dérivé indépendamment les claims centraux :

    • Formule « f(n) = OPT + cout(n) − 1 » (MD[9])* : vérifiée par re-dérivation de la convention de paiement (g paie START exclu → n inclus, d paie GOAL exclu → n inclus, GOAL forcé en plaine) — exacte, et l'égalité f* = OPT ⟺ cellule de plaine en découle arithmétiquement.
    • Fermeture en chaîne : MD[6] prédit « surcoût 8 = 4×2 unique décomposition → 4 forêts, 0 marais » AVANT la mesure ; MD[9] referme (18×1 + 4×3 = 30 = OPT ; 18 payées + START non payé = 19 = corridor) — l'output rend exactement 19/140.
    • Tous les ratios cités sont justes : 30/22 ≈ 1,4 ; 62/22 ≈ 2,8 ; facteur 62/30 ≈ 2,1 ; 140/24 ≈ 5,8 ; 75/24 ≈ 3,1 ; chaîné 27 = direct 27 ; hors route 33 vs 31 = +2.
    • Déterminisme déclaré ET prouvé : MD[3] affirme « aucun tirage, aucune graine dans le source » — vérifié dans le code (zéro random/seed sur les 9 cellules).
    • Tableau de synthèse (MD[18]) dont les 3 témoins sont des nombres déjà imprimés (19/140, écart 0/>0, divergence pas 1/+32) — l'auto-audit « rien de reaffirme qui n'ait été mesuré » est vrai.

    Positifs notables : exactement UNE lecture par output, toutes placées après (gates #17040 ✓, frontière #13410 respectée — aucune seconde lecture) ; figure légendée (titre, coûts par cellule, départ/arrivée, légende) ; témoin chirurgical de la paire incompatible (premier pas de divergence (0,1) vs (1,0)) ; distinction admissible-mal-informée (h_pas : optimum quand même, 75 vs 24 expansions) proprement enseignée ; 3 stubs C.1 exécutables sans fuite (indices = méthode, pas solution) ; lien « Précédent : Search-11d » vérifié existant ; ec 1..9 séquentiel, 0 CJK, 0 doublon Jaccard, 0 header identique.

    Mineurs non déposés (interprétatifs, discipline anti-FP) : « 140 expansions (Dijkstra sans guide, section 2) » — le chiffre est imprimé en section 3 (CODE[8]), la couverture 140 nœuds de la section 2 (CODE[5]) rend la formulation défendable ; pas de « Durée estimée » ni d'objectifs formels dans l'ouverture, à la différence des voisins de série (hors classes, cosmétique) ; la reconstruction « 18 + départ = 19 » suppose l'union des routes optimales sans cellules de plaine supplémentaires (valeur 19 = output exact, reconstruction non re-vérifiable sans ré-exécution).

    Garde population : VERT 764/764 @ aee5b0cfcda3da1c72f8b2e6d6173ec6ff1d42ba (empreinte prompt 758 → mesure 764 = +6 sourcé au ledger, drifts intégrés). Aucun skip ce cycle (aucune PR ouverte touchant le notebook). Artefact organes ai-01 toujours absent de #17073 → pas de passe d'organes. Désignation suivante : CSP-1-Fundamentals.ipynb (première de la sous-liste CSP restante sur cette checklist).

  26. jsboige commented on Oct 6, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-06T02:05Z — CSP-1-Fundamentals.ipynb (Search/Part2-CSP — fondamentaux CSP : formalisme, brute force, backtracking, MRV/LCV, python-constraint, parité Choco/pychoco avec le jumeau C#) — lecture intégrale 88 cellules (55 md / 33 code) en 2 tranches (extraction 76,9 KB > plafond 60 KB), croisement exhaustif prose ↔ outputs committés.

    2 findings déposés (4 champs chacun) :

    F1 — classe reading-before-code — cellule MD[45] (id dc426972)

    « La comparaison des variantes se lit sur le même compte d'assignations : | Plain backtracking | 876 assignations | + MRV | 572 assignations | + MRV + LCV | 677 assignations |. MRV (876 -> 572) réduit nettement le compte ; en revanche, ajouter LCV le remonte à 677 »
    Pourquoi une lecture placée avant l'output qu'elle lit : 876 et 572 ne figurent dans aucun output antérieur (CODE[44] ne rend que 677) — ils n'apparaissent qu'en CODE[46], exécuté après, et MD[49] relit ce même tableau après exécution ; le paragraphe lit un output pas encore produit et double la lecture légitime.

    F2 — classe stale-claim — cellule MD[73] (id ae12aa4c)

    « | Backtracking + MRV | très réduit | très rapide | Implémentation modérée | Backtracking + MRV + LCV | Minimal | très rapide | Plus complexe à implémenter | »
    Pourquoi un claim contredit par les outputs du notebook : le benchmark (CODE[46]) mesure l'inverse sur ses DEUX instances (carte 15 = 15, 8-Reines 677 > 572) et MD[49] l'enseigne explicitement (« LCV fait même regresser les 8-Reines ; bénéfice ni garanti ni monotone ») — le récap final (« Minimal ») contredit les valeurs committées et la leçon du corps.

    Positifs notables : le croisement multi-moteurs est la colonne vertébrale du notebook et il est exact — 18 solutions confirmées par trois moteurs indépendants (brute force CODE[14], python-constraint CODE[53], Choco CODE[67]), décomposition 6×3 avec honnêteté explicite (« les 6 coloriages continentaux sont inférés du total, pas affichés ») ; paras 1-2 de MD[45] excellents (ordre d'insertion du dict = MRV observable sans instrumentation, {0,4,7,5,1,2,6,3} permutation vérifiée) ; miroir des 2 solutions 4-Reines vérifié terme à terme (3−[2,0,3,1]=[1,3,0,2], la réflexion lignes = la réflexion colonnes sur cette instance) ; AllDifferent 256→24 (4!=24, facteur ~10,7 avant toute recherche) ; honnêteté répétée et rare (MD[54] : asymétrie du compteur python-constraint non instrumenté ; MD[65] : convergence des premières solutions « plausible, pas une garantie » ; MD[71] : 3 sondages de diagonales ≠ preuve, 28 paires, pas de ligne VALIDE) ; temps machine-dep déclarés non figés (règle #9434 citée dans le code même) ; exercices 1-6 en stubs sans fuite avec renvois internes précis (cellules 31/33-34/36) ; navigation intégralement vérifiée dans l'arbre (CSP-2-Consistency, ../Part1-Foundations/Search-05-GeneticAlgorithms, ../../Sudoku/README.md, ../Applications/CSP/App-1-NQueens, jumeau C#, search_helpers.py dans Search/ — le sys.path '..' est cohérent) ; heuristiques enseignées avec leurs échecs mesurés (11→15, 572→677) ; ec 1..33 séquentiel, 0 CJK, 0 doublon Jaccard, 0 header identique.

    Mineurs non déposés (interprétatifs, discipline anti-FP) : MD[40] point 2 cite aussi « 876 -> 572 avec MRV (cf. les 8-Reines ci-dessous) » en prospectif — mais le marqueur « ci-dessous » en fait une annonce assumée, pas une lecture déguisée (distinction tranchée en faveur du non-dépôt) ; typos d'apostrophes dans MD[84]/CODE[85] (« file dattente darcs », « demploi du temps ») — cosmétique, hors classes ; « ~9 % de 81 » (MD[23]) = 7/81 = 8,6 % arrondi.

    Garde population : VERT 764/764 @ aee5b0cfcda3da1c72f8b2e6d6173ec6ff1d42ba. Aucun skip ce cycle (aucune PR ouverte touchant le fichier — le twin CSP-1-Fundamentals-CSharp.ipynb est un fichier distinct, non concerné). Artefact organes ai-01 toujours absent de #17073 → pas de passe d'organes. Désignation suivante : CSP-8-Temporal-CSharp.ipynb (dernière non-cochée de cette checklist).

  27. jsboige commented on Oct 6, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-06T03:05Z — CSP-8-Temporal-CSharp.ipynb (Search/Part2-CSP — Allen + STP Floyd-Warshall + TCSP + OR-Tools CP-SAT, dernier notebook de la série, jumeau C# de CSP-8-Temporal) — lecture intégrale 46 cellules (30 md / 16 code) en 2 tranches (extraction 74,4 KB > plafond 60 KB), croisement exhaustif prose ↔ code ↔ outputs committés.

    Constat dominant : le code committé a été refondu (convention majorant du Floyd-Warshall, génération de la table Allen par triplets #14609, solveur centroïde, signature List<> du TCSP) et 13 cellules markdown décrivent encore l'ancienne version. Classe stale-claim à 13 occurrences → seuil >3 du protocole : findings individuels stoppés à 3, proposition d'organe déposée sur #17073. S'y ajoutent 2 findings de classes distinctes.

    F1 — classe stale-claim — cellule MD[14] (id 833e69b6)

    « Le signe de la matrice est un piege. Notre implementation utilise d[i][j] = minorant de t_j - t_i. Donc une contrainte lb <= t_j - t_i <= ub devient : - d[i][j] = max(d[i][j], lb) (on met a jour le minorant de t_j - t_i) - d[j][i] = max(d[j][i], -ub) [...] Sortie de la cellule : matrice 5x5 avec les minorants des differences t_j - t_i, plus les affectations choisies. »

    Pourquoi un claim contredit par le code ET les outputs : CODE[9] (id 0542d7d1) fait exactement l'inverse sur chaque terme — dist[I,J] = Math.Min(dist, c.Ub) et dist[J,I] = Math.Min(dist, -c.Lb) (MAJORANTS), relaxation if (dist[i,k]+dist[k,j] < dist[i,j]) (plus courts chemins), consistance dist[i,i] < -1e-9 (cycle négatif) — et le commentaire du code lui-même dit « d[ref][i] = majorant de t_i - t_ref » ; les outputs de CODE[12] sont valides (T1=8,50 ∈ [8,9]...), donc c'est la prose qui décrit l'autre algorithme. De plus la « Sortie de la cellule » annonce une « matrice 5x5 » qu'aucun output n'imprime (CODE[12] ne rend que Consistant/Temps/Solution). La même convention inversée est répétée en MD[8] (id a3f39418 : « d[i][j] = max(...) », « Si d[i][i] > 0, il existe un cycle positif » — en contradiction interne avec sa propre ligne « plus courts chemins ») et MD[10] (id 78703570 : « d[I][J] = max(d[I][J], lb) (mineurant) »).

    F2 — classe stale-claim — cellule MD[18] (id 1756ffea)

    « 3. AddConstraint(string i, string j, params (double, double)[] intervals) : ajoute une contrainte [...] 4. Solve() : List<Dictionary<string, double>> : enumere toutes les solutions realisables (avec propagation de domaines pour accelerer). [...] 1. Propagation initiale [...] 2. Branch-and-bound : choisir une variable, dichotomiser son domaine, recurse. 3. Elagage [...] »

    Pourquoi une « Lecture » qui décrit un autre code que celui committé : CODE[17] (id 1cfa4b11) déclare AddConstraint(string i, string j, List<(double lb, double ub)> intervals) — pas de params, un étudiant écrivant l'appel documenté ne compile pas — et Solve(double step = 0.5) : une énumération séquentielle à pas fixe (for (double t = lb; t <= ub; t += step)) avec simple test des contraintes instanciées ; ni propagation, ni branch-and-bound, ni dichotomie, ni élagage de domaines n'existent dans le code. Le print du code aggrave : « Classe TCSP (enumeration + path consistency) prete. » — aucune path consistency dans la classe.

    F3 — classe stale-claim — cellule MD[45] (id f56360c1, Conclusion)

    « 1. Relations d'Allen [...] composition parfois ambigue (4 relations possibles pour Overlaps o Overlaps). [...] 2. Mineurant vs majorant : Floyd-Warshall manipule les minorants des differences t_j - t_i, pas les majorants (convention Dechter 1991). Inverser les signes casse l'algorithme. »

    Pourquoi la conclusion contredit la leçon centrale du notebook : l'output committé du contrôle (CODE[27]) tranche les deux points contre elle — « DIVERGE Overlaps o Overlaps : manuel = {Before, Meets, Overlaps, During} / genere = {Before, Meets, Overlaps} » (3 relations, l'entrée à 4 est déclarée fausse par MD[28] : « les divergences sont des entrees manuelles fausses ») et le Floyd-Warshall committé (CODE[9]) manipule les majorants par plus courts chemins. La conclusion enseigne exactement ce que l'Exemple 1 vient de corriger, et réitère la convention de F1 dans ce que l'étudiant retient en dernier.

    F4 — classe exercise-mismatch — cellule MD[33] (id 8622dd51, Exercice 2b)

    « Sortie attendue (apres execution) : Planning realisable avec B : duree = 4.5h Planning realisable sans B : duree = 4.0h // on economise la duree de B »

    Pourquoi une sortie attendue qui invalide l'exercice correct : le stub CODE[34] (id 05d41d5a) donne l'indice juste — « Sans B (skip) : A -> C -> D, duree min = 1+1+0.5+1 = 3.5h » (et 4.5h avec B, les deux concordant avec les contraintes de CODE[32]) ; l'étudiant qui modélise correctement obtiendra 3,5h pour « sans B » et lira « attendu 4.0h » — même l'argument de la prose (« on economise la duree de B » : 4,5 − 1) donne 3,5h. Le 4.5h (avec B) est exact ; seul le 4.0h est faux.

    F5 — classe navigation-misplaced — cellule MD[0] (id aabe7715, Prérequis)

    « - Connaissance des bases CSP (cf. CSP-1-Consistency-CSharp et CSP-2-Consistency-CSharp) ; Allen et STP sont des CSP sur des variables temporelles. »

    Pourquoi un renvoi vers un notebook inexistant sous ce nom : CSP-1-Consistency-CSharp n'existe dans aucun chemin de l'arbre (origin/main a92539d) ; le notebook d'entrée de la série s'appelle CSP-1-Fundamentals-CSharp.ipynb (audité cycle 473 côté Python pour le jumeau). CSP-2-Consistency-CSharp existe ✓ — le premier nom seul est cassé, vraisemblablement un renommage Fundamentals/Consistency non propagé.

    Occurrences stale-claim NON déposées individuellement (seuil >3) : MD[6] (id 849030cb — « peut etre plus large (2-3 relations) pour les paires "ambiguës" comme Overlaps o Overlaps » alors que la table manuelle déjà exécutée donne 4 relations pour cette paire et 5 pour During o During, et que la même cellule écrit « jusqu'a 13 relations sur la table complete generee ») ; MD[8]/MD[10] (convention inversée, citées en F1) ; MD[11] (id 0d382d9f — « T1 = 8, T2 = 10, T3 = 11 ou 12, T4 = 12 ou 13 [...] (on prend le plus tot possible) » : l'output rend 8,50/10,50/11,75/12,50 — le code prend le centroïde (lb+ub)/2, aucune valeur citée n'est l'affectation rendue ; le bloc modèle montre aussi AddConstraint("T0","T0",0,0) et un point « T4_fin » absents du CODE[12] réel) ; MD[16] (id cff8ee5c — « Floyd-Warshall direct (lineaire) » contredit l'O(n^3) enseigné trois fois) ; MD[19] (id 1929dd1b — bloc tcsp.AddConstraint("T_debut","T_fin", 1.0, 2.0) à 4 scalaires qui ne compile pas contre la signature List<> ; contrainte déjeuner « modelisee » en prose mais explicitement abandonnée par CODE[20] « sans contrainte dejeuner » pendant que la viz CODE[21] l'affiche « interdit » en rouge ; « typiquement 4-6 combinaisons » vs output « Solutions admissibles : 8 ») ; MD[26] (id 4f7208bb) et MD[28] (id dfa5511e) — « deux generations 36^3 + 45^3 triplets » / « 36^3 + 45^3 = 137 781 triplets pour les deux grilles » alors que le contrôle de stabilité exécute BuildFullCompositionTable(7) et (8) = grilles à 28 et 36 intervalles, coût réel 28³+36³ = 68 608 (45 = C(10,2) correspondrait à une grille 9 jamais appelée) ; MD[31] (id 723fe14b — bloc modèle « T0/A_start/B_start/C_start/D_start » en fenêtres de démarrage, le CODE[32] committé est une chaîne de précédence start→A→B→C→D→end aux noms différents) ; MD[35] (id 603fe9de — sortie attendue « R1 = 9h-9h30, R2 = 9h30-10h30 » vs output en heures relatives à t0 flottant : « t0 : -15,75h [...] R1_start : -6,75h »).

    Positifs notables : le cœur algorithmique est sain et ses outputs se recoupent exactement — design #14609 exemplaire (génération par triplets d'intervalles concrets, contrôle positif 15/19 nommant les 4 divergences telles que l'output les imprime, repli de Compose promu assertion, identité R o Equals 13/13, stabilité de grille 7→8 True, distribution MD[28] 42+24+3+3 = 72 disjonctions, 97+72 = 169) ; le Floyd-Warshall committé est la version standard correcte (convention Dechter majorant/plus courts chemins/cycle négatif) et toutes ses solutions sont valides dans leurs intervalles ; EndpointsToAllen 13 cas exhaustifs avec throw final ; MD[41] est le modèle du genre : sa prédiction T1=8/T2=10/T3=12/T4=12 est EXACTEMENT l'output OR-Tools ; exercices en stubs propres (convention C.1, try/catch, zéro fuite de solution) ; les 3 renvois « Pour aller plus loin » de la conclusion existent tous dans l'arbre (CSP-9-Distributed-CSharp, CSP-6-Hybridization-CSharp, App-13-TSP-Metaheuristics) ; bibliographie correcte (Allen 1983, Dechter 1991, Perron/Furnon, Dijkstra 1976) ; ec 1..16 séquentiel, 0 CJK, 0 doublon Jaccard, 0 header identique.

    Mineurs non déposés (discipline anti-FP) : MD[41] « duree totale = 5h » non imprimée (valeurs centrales exactes, pas déposé) ; MD[8] contient aussi la description correcte (« plus courts chemins », « cycle strictement negatif ») — la cellule est incohérente en interne, seule la moitié fausse est couverte par F1 ; warnings ScottPlot CS0618 (BarPlot.Label obsolète) dans l'output de CODE[21], cosmétiques.

    Garde population : VERT 764/764 @ a92539de9b41bff5cf5963c12e5c062d044c425a. Aucun skip (aucune PR ouverte touchant le fichier, 630 fichiers de 92 PR croisés). Artefact organes ai-01 toujours absent de #17073 → pas de passe d'organes. Checklist : 156/156 — série Search/Part2-CSP soldée.

  28. jsboige commented on Oct 6, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-06T04:05Z — Search-03f-Reparer-Localement-Sous-Garantie-Python.ipynb (Search/Part1-Foundations — LPA* incrémental + recollement de tables, 2ᵉ attestation des opérations 6 « réparer localement sous garantie » et 5 « recoller ») — lecture intégrale 47 cellules (25 md / 22 code, extraction 48,9 KB sous le plafond 60 KB), croisement exhaustif prose ↔ code ↔ outputs committés. Note : ce notebook est hors checklist de la série (absent de la liste 156 cochée) — dépôt ici conformément au standing order, présence/absence de case à arbitrer par la lane checklist.

    F1 — classe figure-missing — cellule CODE[1] (id e2329c46, commentaire d'ouverture du monde)

    # Le monde : grille 24x16, 4-connexe, couts unitaires. Un couloir muré force le passage.

    Pourquoi : aucune des 47 cellules ne produit d'image ni ne rend cette grille — le couloir muré, le blocage (11,1) et le goulet (12,8) (output : « Goulet : plan initial cout 34, unique passage en (12, 8) ») ne sont jamais montrés, alors que toute l'argumentation du carnet (dette +2, « un changement structurel n'economise presque rien », 269 vs 276 expansions) repose sur leur géométrie que l'apprenant doit se représenter de tête ; le parent direct Search-03-Informed figure sa matière (3 cellules à sortie image sur 75) et le carnet lui-même rend sa carte en ASCII pour la partie Recoller (« Couverture (mur = #) ») — seule la moitié LPA* est privée de décor visible.

    Positifs notables : croisement prose↔outputs toutes conformes — chaque valeur citée est dans les outputs committés (34/36/+2 ; 273 vs 12 = 23× ; 8/8 concordances ; budget cumulé 9 vs 2258 ; goulet 269 vs 276 ; σ = ((3,4) (3,6)) ; 0/24 numérotations globales ; colle multivaluée 1 vs 3 ; marche de méidentification : but traversé au pas 1, arrivée (4,2) contre optimum 1 ; réparation 24/24 + univalence 6 paires) ; l'implémentation LPA* est la version fidèle de Koenig & Likhachev (clé min(g,rhs)+h, clause d'arrêt exacte, re-propagation sur changement de murs) ; le témoin de la partie Recoller est exécuté et mesuré (pas une allégation) ; 6 exercices en stubs propres (convention C.1, zéro fuite, attendus mesurés honnêtes — Ex1 affiche « obtenu : inf » sur stub vide) ; navigation 9/9 vérifiée dans l'arbre a92539de (Search-03-Informed, 03e, 03b, 11d, 12a, 13a, README.md, ../../GameTheory/ = 371 fichiers réels, docs/ledgers/12204-ict-chantier-1-audit-froid.md) — les GT-13b/13c cités en prose existent tous deux ; ec 1..22 séquentiel, 0 CJK, 0 doublon Jaccard ; lectures toutes placées après leurs outputs (7× « Lecture du résultat » = style de série, chacune apporte un angle distinct : monnaie d'expansions, amnésie, témoin, contrat, dette, croyance fausse).

    Mineurs non déposés (discipline anti-FP ~60 %) : MD[33] (id 28c4f06d) micro-faute typographique « [...] un cycle qui la monnaie. un adversaire [...] » (minuscule après point) ; MD[46] (id d2c1e6d1, conclusion) cite en référence formelle D* Lite (AAAI 2002) présenté comme « la version déplacement [...] de LPA* » — l'article nominal LPA* (Koenig & Likhachev 2002) est correctement nommé dès MD[7], la conclusion cite le prolongement, glissement sans conséquence sur la leçon ; l'écart 285 (A*) vs 286 (premier passage LPA*) expansions visible dans les outputs n'est pas commenté en prose — l'équivalence revendiquée en MD[9] porte sur coût et plan, pas sur le compteur.

    Garde population : VERT 764/764 @ a92539de9b41bff5cf5963c12e5c062d044c425a. 0 skip (aucune PR ouverte ne touche le fichier — 628 fichiers de 98 PR croisés). Artefact organes ai-01 toujours absent de #17073 → pas de passe d'organes. Porteur #17066 restant (SymbolicAI/SemanticWeb/SW-4-CSharp-SPARQL.ipynb) toujours hors population NC — mention lane Hermes.

  29. jsboige commented on Oct 6, 2026

    @jsboige
    Owner

    [NanoClaw] Audit #17073 — cycle 2026-10-06T05:05Z — Discrepancy-02-Komlos-Lean.ipynb (Search/Discrepancy — compagnon formel Lean 4 de la conjecture de Komlós, kernel lean4-wsl) — lecture intégrale 39 cellules (24 md / 15 code, corps extrait 31,5 KB + text/plain des outputs 28 KB, sous le plafond 60 KB), croisement exhaustif prose ↔ code ↔ outputs committés. Note : ce notebook est hors checklist de la série (absent de la liste 156 cochée) — dépôt ici conformément au standing order, présence/absence de case à arbitrer par la lane checklist. Avec lui, le stock Search de la partition NC est couvert intégralement.

    F1 — classe stale-claim — cellule MD[5] (id 9cfff9e2, « Lecture du résultat — trois signatures, trois régimes »)

    « Chaque #check rend la signature complète — l'énoncé mathématique entier, pas son nom. » […] « KomlosConjecture commence par ∃ C : ℚ, ∀ (m n : ℕ) (A : Matrix …) : il existe une constante universelle »

    Pourquoi : l'output committé de CODE[4] rend pour les trois conjectures exactement Discrepancy.KomlosConjecture : Prop, Discrepancy.BansalJiangLargeDegree : Prop, Discrepancy.KomlosBansalJiangWeak : Prop — le nom seul, jamais l'énoncé — et les signatures détaillées que cette « Lecture » déroule ligne à ligne (∃ C : ℚ…, deux hypothèses degré+log…, borne C·((Nat.log 2 n : ℚ)²)) n'apparaissent dans aucun output du carnet ; seules les 3 fondations (IsColoring, discrepancy, maxDegree) rendent leurs binders. La promesse est répercutée en conclusion (MD[38], id 499ec9fe : « les trois Prop rendues avec leurs signatures complètes ») — or #print l'aurait rendu, pas #check ; l'apprenant qui exécute voit : Prop là où on lui promet l'énoncé mathématique entier, pour précisément les trois objets centraux du carnet.

    F2 — classe stale-claim — cellule MD[6] (id c3b6409d, « 2. Le vocabulaire opérationnel »)

    « Prenons trois ensembles sur Fin 3 : {0,1}, {1,2}, {0,2} — chaque élément appartient à exactement deux ensembles (degré 2). »

    Pourquoi : le témoin réellement défini et exécuté en CODE[7] est def F2 : Finset (Finset (Fin 3)) := {p1, p2} avec p1 := {0,1} et p2 := {1,2} — deux ensembles, pas trois, {0,2} n'est défini nulle part, et les degrés réels sont 1 (élément 0), 2 (élément 1), 1 (élément 2) : la phrase d'introduction décrit un système triangle que le carnet n'exécute pas (l'output maxDegree F2 rend 2 uniquement grâce à l'élément 1) ; la lecture MD[8] qui suit le code est, elle, correcte — c'est l'intro qui est périmée par rapport à son propre témoin.

    Positifs notables : croisement prose↔outputs toutes conformes sur tout le reste — chaque valeur citée est dans les outputs committés (discrépance 0/2, degré 2, condition unitaire true sur A2 et A4, sommes [(7/5, 7/5), (-1/5, 1/5), …], optimum 1/5, duo (1, 2), discrépance du système vide 0) ; le contrat kernel lean4-wsl est documenté en MD[0] et tenu (tous les messages en display_data sévérité info, zéro output_type=error, zéro ❌ sur 15 cellules exécutées) ; les certificats d'axiomes [propext, Classical.choice, Quot.sound] cités en MD[24]/MD[26]/MD[37] sont exactement ceux que rendent #print axioms (Beck–Fiala b1–b4 et Erdős–Spencer p1a–p4 interrogés avec @, signatures complètes rendues pour les théorèmes prouvés — la distinction prouvé/conjecture est honnête : ErdosSpencerLB « reste une Prop OUVERTE — jamais pretendue prouvee ») ; 3 exercices en stubs propres (« TODO etudiant » en commentaire, ancres d'exécution #check qui rendent une sortie réelle — zéro fuite) ; navigation 5/5 vérifiée dans l'arbre a92539de (discrepancy_lean/README.md, FORMAL_STATUS.md, Search-09c, Search-03c, docs/reference/wsl-kernels-detail.md) ; ec 1..15 séquentiel, 0 CJK, 0 doublon Jaccard ; lectures toutes placées après leurs outputs, chacune sur un angle distinct (régimes, vocabulaire, témoin, théorèmes P0, machinerie) — frontière #13410 tenue.

    Mineurs non déposés (discipline anti-FP ~60 %) : l'annexe Moments (MD[34]–CODE[36]) est écrite sans accents (« citees », « discrepance », « esperance », « les deux jambees ») — incohérence stylistique avec le reste du carnet, sans impact sur la lecturation ; « les quatre boutes de la preuve » (CODE[23]/MD[23]) — régionalisme isolé ; les 3 cellules de l'annexe portent id vide (« (sans) ») contrairement aux 36 autres ; la reprise de la claim F1 en conclusion est couverte par le finding ci-dessus.

    Garde population : VERT 764/764 @ a92539de9b41bff5cf5963c12e5c062d044c425a (arbre 1480 .ipynb hors archive, stable). 0 skip (aucune PR ouverte ne touche le fichier). Artefact organes ai-01 toujours absent de #17073 → pas de passe d'organes. Porteur #17066 restant (SymbolicAI/SemanticWeb/SW-4-CSharp-SPARQL.ipynb) toujours hors population NC — mention lane Hermes.

  30. myia-ai-01 commented on Oct 7, 2026

    @myia-ai-01
    Collaborator

    [CLAIMED] lane myia-po-2024:CoursIA — tapis (tirage batch ai-01 du 07/10 21:05Z, tete du tapis) : arc audits #17073 : Search

  31. jsboige commented on Oct 10, 2026

    @jsboige
    Owner

    [INFO] candidate-delivered — lane myia-po-2024:CoursIA

    Le critere de cette partition est sa checklist de serie. Mesure a l'instant, sur le body de l'issue courante :

    $ grep -c '\[ \]'  body   ->  0
    $ grep -c '\[x\]'  body   ->  156
    

    Repartition, qui recoupe le total annonce a l'ouverture (156) :

    section cases
    (racine) 5
    Applications 54
    Discrepancy 1
    Part1-Foundations 43
    Part2-CSP 18
    Part4-Metaheuristics 35
    total 156

    Les depots vivent dans les 144 commentaires du fil. Le dernier d'entre eux (2026-10-06T05:13Z, Discrepancy-02-Komlos-Lean.ipynb) porte lui-meme la cloture du stock : « Avec lui, le stock Search de la partition NC est couvert integralement. »

    Deux depots y sont notes hors checklist — Search-03f-Reparer-Localement-Sous-Garantie-Python.ipynb et Discrepancy-02-Komlos-Lean.ipynb — avec la mention que leur presence ou absence de case etait « a arbitrer par la lane checklist ». Cet arbitrage ne retranche rien aux 156 : les deux carnets sont couverts, la question ne portait que sur leur representation dans la liste.

    Ce que je ne pretends pas : que le contenu des 156 audits soit bon. Je mesure l'etat de la checklist et je rapporte ce que le fil en dit ; la qualite des depots se juge sur les depots eux-memes, pas sur une case cochee.

    La cloture appartient au coordinateur ou a l'adjoint — une lane worker ne ferme pas d'issue. Rien de ma part n'y reste ouvert.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions