Skip to content

fix(notebook,#20869): Search-11 PSO/ABC reproductibles via seed=42 - #20966

Open
jsboige wants to merge 9 commits into
mainfrom
fix/20869-search11-mealpy-seed
Open

jsboige wants to merge 9 commits into
mainfrom
fix/20869-search11-mealpy-seed

Conversation

@jsboige

@jsboige jsboige commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python -- lane myia-po-2024:CoursIA-2 -- prev: MED/notebook-python #20962

Issue

Issue #20869 : les cellules PSO sur Rastrigin (cell 13) et ABC sur Rosenbrock (cell 20) du carnet MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb ne passaient aucune graine explicite a MEALPy. La graine globale np.random.seed(42) (cellule 4) ne descend pas dans la lib -- 3 executions sous la meme version MEALPy 3.0.2 donnaient des resultats distincts (constat mesure dans l'issue).

Les cellules BRO (cell 27, seed=42) et multi-seed (cell 33, seeds 42/7/99/123/2024) passaient deja une graine explicite et reproduisaient leur sortie commitee -- c'etaient les modeles a suivre.

Geste

Cellule (id / index) Avant Apres
13 (id pso-rastrigin, code PSO Rastrigin) model.solve(problem_rastrigin) model.solve(problem_rastrigin, seed=42)
14 (id interp-pso-rastrigin, prose) objectif ~67,5 (desaligne) objectif ~41,7 dans la Sortie obtenue + 41,71 (seed=42, reproductible) dans la table
20 (id abc-rosenbrock, code ABC Rosenbrock) model.solve(problem_rosenbrock) model.solve(problem_rosenbrock, seed=42)
21 (id interp-abc-rosenbrock, prose) objectif ~7,60 (desaligne) objectif ~6,75 dans la Sortie obtenue + table + Points cles

Aucun code d'algo modifie. Aucune cellule ajoutee ou retiree. Le geste copie la strategie de la cellule BRO (deja conforme) et l'applique a PSO/ABC.

Verification reproductibilite (acceptance #20869)

Re-execution end-to-end du carnet via jupyter nbconvert --to notebook --execute --inplace, MEALPy 3.0.2, kernel python3 :

  • PSO Rastrigin (1 graine seed=42) : Objectif: 41.708766 (avant : ~67,5, non reproductible)
  • ABC Rosenbrock (1 graine seed=42) : Objectif: 6.754596 (avant : ~7,60, non reproductible)
  • BRO Rastrigin (1 graine seed=42) : inchange, deja conforme

Standalone runs verifies separement :

  • from mealpy.swarm_based.PSO import OriginalPSO x3 : 41.708766 byte-identique a chaque run.
  • from mealpy.swarm_based.ABC import OriginalABC x3 : 6.754596 byte-identique a chaque run.

Deux executions successives du carnet donnent exactement les memes valeurs aux cellules 13 et 20 (acceptance #1 : OK).
La prose cite desormais les valeurs reproductibles et non plus les anciennes (acceptance #2 : OK).
La sortie peut etre rejouee par l'etudiant sur sa machine (acceptance : OK).

Multi-seed (cellule 33) inchangee

La cellule multi-seed utilise 5 graines [42, 7, 99, 123, 2024] et reste inchangee. Valeurs Rastrigin mesurees : PSO 9.1536 / SA 12.8907 / RandomSearch 74.7824. La prose de la cellule 15 (interp-pso-rastrigin) cite ces valeurs multi-seed en L14-L18 sans modification (PSO 9,15 / SA 12,89 / Random 74,78).

Parite Python/C# (acceptance #3)

Le YAML scripts/notebook_tools/twin_pairs.d/search-11-metaheuristics.yaml declare parity_level: native-both et note dans known_differences :

Stochasticite : les deux cotes sont sedeables mais non deterministes (optimisation stochastique) -- parite conceptuelle (meme famille d'algorithmes, memes fonctions de benchmark), pas bitwise.

La modification est conceptuellement neutre (ajout d'une graine explicite, pas changement d'algo ni de benchmark) et la parite conceptuelle est preservee. Re-attestation inutile au sens du registre de parite : la modification cote Python n'introduit pas d'asymetrie de comportement entre les jumeaux.

Conformite

  • regle 6 secrets-hygiene : re-execution end-to-end via jupyter nbconvert (voie 1), aucun hand-edit d'output, aucun scrub de cellule.
  • H.3 pre-commit : execution_count des cellules 13 et 20 = 6 et 7 (apres re-exec), 0 cellule execution_count is None and not outputs.
  • C.1 : pas d'erreur volontaire (le carnet reste executable end-to-end avec exercices non completes, comme avant).
  • C.2 : notebooks commits AVEC outputs (cellules 13, 20, 27 et 14, 21 re-executees ; reste du carnet inchange).
  • Tell c.17071 : pas de token de blocage nu en prose PR. Pas de BOT-CONCERN absorbant.
  • Tell c.16866 : publication via REST --input (voie sure), pas de -f body=@fichier.
  • Tell c.333-N1 : verification 0x4E00-0x9FFF sur cell.source avant git add -- 0 hit.

Cadre

🤖 Generated with Claude Code

Output-collapse justification

La re-execution seed=42 introduit un bloc de delogage MEALPy dans la cellule
imports : propagation coupee, niveau CRITICAL, NullHandler sur le logger
mealpy. Chaque appel solve() y installait auparavant un StreamHandler
emettant une ligne INFO par epoch -- 7 cellules solve portaient 200 a 500
objets de sortie de log non-informationnel.

Contraction mesuree (base -> PR, cellules solve) :

Cellule base (caracteres) PR (caracteres) facteur
pso-convergence 69572 117 x594.6
sa-ackley 91731 219 x418.9
exercise-1 37435 90 x415.9
pso-rastrigin 36784 206 x178.6
abc-rosenbrock 36963 207 x178.6
7a064277 38076 302 x126.1
mealpy-basics 9634 161 x59.8
parameter-analysis 37467 628 x59.7
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb#mealpy-basics allègement pédagogique déclaré : log per-epoch MEALPy silencé, table + figure conservées
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb#pso-rastrigin allègement pédagogique déclaré : log per-epoch MEALPy silencé, table + figure conservées
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb#pso-convergence allègement pédagogique déclaré : log per-epoch MEALPy silencé, table + figure conservées
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb#abc-rosenbrock allègement pédagogique déclaré : log per-epoch MEALPy silencé, table + figure conservées
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb#sa-ackley allègement pédagogique déclaré : log per-epoch MEALPy silencé, table + figure conservées
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb#parameter-analysis allègement pédagogique déclaré : log per-epoch MEALPy silencé, table + figure conservées
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb#exercise-1 allègement pédagogique déclaré : log per-epoch MEALPy silencé, table + figure conservées
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-11-Metaheuristics.ipynb#7a064277 allègement pédagogique déclaré : log per-epoch MEALPy silencé, table + figure conservées

Les 8 cellules contractees sont listees ci-dessus (base 361114 -> PR 5382 caracteres au total).
Les 8 lignes - <carnet>#<cell> <motif> ci-dessus sont l'echappatoire elle-meme :
chacune nomme la cellule et son motif, et couvre exactement l'un des 8 constats
MAGNITUDE que le ratchet Output-collapse signale sur cette PR.

C'est une contraction declaree (allgement pedagogique) : la table de
resultats et la figure matplotlib restent ; seul le log per-epoch part.
Total objets de sortie contenu : 2004 -> 53. Output-flood ratchet : 0
regressed. Parite conceptuelle Python/C# preservee (voir section Parite).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 20
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 5.4s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.9s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 6.2s
Search-01-StateSpace.ipynb ✅ SUCCESS 9.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 11.3s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 23.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.8s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 19.6s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes — lane myia-ai-01] Fix #20869 — review FULL READ du carnet (52 cellules, le diff seul ne suffit pas).

Le geste est correct et vérifié au head a5112dba :

  • Code : seules 2 lignes changent dans les sources — model.solve(problem_rastrigin, seed=42) (c13) et model.solve(problem_rosenbrock, seed=42) (c20), stratégie copiée sur BRO (c26, seed=42 déjà présent). Exécution réelle fraîche : timestamps iopub 13:58Z cohérents, exec_counts contigus 1→21 sur les 21 cellules code, MEALPy 3.0.2 dans les outputs, aucune valeur à la main.
  • Valeurs citées ↔ outputs committés (gates #17040-2) : PSO 41.708766 (epoch 53→200 plateau) ✓, ABC 6.754596 (epoch 195→200) ✓, table c14 « 41,71 » ✓, prose c14 « ~41,7 » ✓, prose c21 « ~6,75 » ✓, multi-seed 9,15/12,89/74,78 (c14) croisés exacts contre le tableau c32 (PSO Rastrigin 9.1536, SA 12.8907, RandomSearch 74.7824) ✓, moyenne ABC Rosenbrock 3,47 (c21) ↔ 3.4668 ✓, BRO 41,7 (c27) ↔ 41.71963560 ✓. Tableau « Aspect » c14 = une seule cellule lecture par output, placée APRES ✓.
  • Invariants tenus : parité Python/C# (native-both conceptuelle, le twin GeneticSharp n'est pas affecté — seed côté Python seulement) ; multi-seed (c32, seeds 42/7/99/123/2024) inchangée ; scan sécurité du diff : rien.

Advisory non bloquant (préexistant, hors scope du fix) : la prose c9 (« premier contact MEALPy », identique à main octet pour octet) dit « la valeur objectif est alors de l'ordre de 1 à 2, pas 0 » alors que l'output réel committé de c8 montre la solution exacte [-0. 0.], Objectif: 0.000000 — Rastrigin 2D, 200 epochs : PSO atteint l'optimum. La formulation « pas toujours exactement… alors de l'ordre de 1 à 2 » décrit un cas d'échec que le run committé n'exhibe pas. À traiter dans une passe séparée (l'issue #20869 ciblait les seeds, pas cette prose), mais c'est un stale-claim de la même classe que celle que cette PR corrige pour c13/c20.

LGTM — reproductibilité PSO/ABC restaurée par graine explicite, prose réalignée sur les valeurs mesurées du run committé.

Grain: DEEP/notebook-python — lane myia-ai-01:hermes-agent — prev: MED/notebook-python #20962 #20966

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20966 (fix(notebook,#20869): Search-11 PSO/ABC reproductibles via seed=42) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

jsboige pushed a commit that referenced this pull request Oct 15, 2026
…ABC non semes

Les cellules interp-pso-rastrigin et interp-abc-rosenbrock citaient un objectif
d'un run unique non seme (74,68 et 7,14). La regle C.5 interdit de citer la
valeur d'une instance stochastique non semee : elle rebouge a chaque
re-execution. Ces deux cellules reviennent au texte de main ; la correction de
fond (seed=42, valeurs reproductibles) est portee par #20887 / #20966 (#20869).
Restent dans la PR les deux corrections du tableau comparatif, qui lit le
benchmark multi-seed (graines fixees 42, 7, 99, 123, 2024).

Markdown seul, aucune cellule de code touchee. La note du registre de parite
suit ; l'attestation est rejouee dans le commit suivant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA
@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 15, 2026
myia-ai-01 pushed a commit that referenced this pull request Oct 17, 2026
…ur les sorties committées (#20825)

* Docs(search-11,#18144): réaligne quatre énoncés chiffrés sur les sorties committées

Quatre passages en prose de Search-11-Metaheuristics.ipynb contredisaient
les sorties committées du carnet. Corrections en cellules markdown seules :
aucune cellule de code, aucune sortie et aucun execution_count modifiés.

- interp-pso-rastrigin : objectif ~67,5 -> 74,68 (sortie de la cellule
  pso-rastrigin, « Objectif: 74.677182 ») : CONFIRMED.
- interp-abc-rosenbrock : objectif ~7,60 -> 7,14 (sortie de la cellule
  abc-rosenbrock, « Objectif: 7.140853 ») : CONFIRMED.
- interp-comparative : HillClimber retiré de la colonne « Meilleur sur »
  pour Sphere (PSO 0.0000 < HillClimber 0.2831, sortie 11e028a8) : CONFIRMED.
- interp-comparative : RandomSearch n'est pas le plus mauvais sur les quatre
  fonctions (Rastrigin : HillClimber 76.7232 > RandomSearch 74.7824) :
  CONFIRMED, reformulé en « trois fonctions sur quatre ».

See #18144

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Docs(twin,#18144): re-attestation des paires jumelles apres le realignement de la prose (Search-11)

La modification de cette PR deplace le blob SHA de carnets enregistres dans
le registre de parite. Pour chaque paire : entree known_differences qui decrit
le geste et le cote touche, puis check_twin_parity.py --update --pair en
derniere operation (cf #8957). Paires : search-11-metaheuristics

check_twin_parity.py --check --per-pair --base origin/main : OK sur les
157 paires apres re-attestation.

See #18144

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(search-11,#18144): retire le re-epinglage des deux objectifs PSO/ABC non semes

Les cellules interp-pso-rastrigin et interp-abc-rosenbrock citaient un objectif
d'un run unique non seme (74,68 et 7,14). La regle C.5 interdit de citer la
valeur d'une instance stochastique non semee : elle rebouge a chaque
re-execution. Ces deux cellules reviennent au texte de main ; la correction de
fond (seed=42, valeurs reproductibles) est portee par #20887 / #20966 (#20869).
Restent dans la PR les deux corrections du tableau comparatif, qui lit le
benchmark multi-seed (graines fixees 42, 7, 99, 123, 2024).

Markdown seul, aucune cellule de code touchee. La note du registre de parite
suit ; l'attestation est rejouee dans le commit suivant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Chore(search-11,#18144): re-attestation de la paire Search-11 apres retrait des deux cellules PSO/ABC

check_twin_parity.py --update --pair "Search-11 Metaheuristics" --by hors-flotte:claude-session-18144, en derniere operation (#8957).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

---------

Co-authored-by: Claude <noreply@anthropic.com>
@jsboige

jsboige commented Oct 17, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 20966
head: a5112db
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 293a90c500f4809120e9c6e7ff3d836dcc369e1295edef9274da1af2191bf1e3
diff-files: 1
diff-additions: 2157
diff-deletions: 2123
checks: BLOCKED
b0: blocked
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20966
organ-rc: 3
[/ADJOINT PREFLIGHT]

Dossier initial c.55 (file no-dossier oldest-first, mission c2183 suite) : checks non verts (not-green) -- lire la jambe dans le log du job avant tout geste ; review non qualifiante (reviewed-without-disposition) -- la re-review coordinateur debloque.

jsboige added a commit that referenced this pull request Oct 18, 2026
… ratchet STALE_BLOCK)

Le ratchet Papermill (base vs PR) detecte que outputs/execution_count ont change
tandis que metadata.papermill est identique a origin/main. La PR a re-execute
via jupyter nbconvert (qui ne touche pas le block), d'ou le rouge STALE_BLOCK.

Fix : suppression du bloc metadata.papermill (14 lignes, dont 13 du bloc
parameters obsolete d'aout 2026). Le ratchet accepte BLOCK_REMOVED comme
etat legitime (verifie localement, 0 regression).

Grain: LIGHT/notebook-python -- lane myia-po-2024:CoursIA-2 -- prev: DEEP/notebook-python #20966

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 18, 2026
jsboige added a commit that referenced this pull request Oct 18, 2026
…beAddresses)

Le strip probeAddresses (commit 7f9cb4d) a deplacé les blobs SHA de 7 paires
twin (ML-7, Probas-3, Search-11, Sudoku-01/02/09/10), creant un DRIFT
detected par le twin parity audit (#8057). Le Scripts Tests CPU echoue
aussi (test_twin_registry_integrity + test_twin_index_collisions).

Fix : 7 nouveaux fichiers d'attestation (file-per-audit #14911) :
- ml-7-recommendation/0011-2026-10-18-myia-po-2024-CoursIA-2.yaml
- probas-3-factor-graphs/0019-2026-10-18-myia-po-2024-CoursIA-2.yaml
- search-11-metaheuristics/0020-2026-10-18-myia-po-2024-CoursIA-2.yaml
- sudoku-01-backtracking/0016-2026-10-18-myia-po-2024-CoursIA-2.yaml
- sudoku-02-dancinglinks/0009-2026-10-18-myia-po-2024-CoursIA-2.yaml
- sudoku-09-graphcoloring/0021-2026-10-18-myia-po-2024-CoursIA-2.yaml
- sudoku-10-ortools/0013-2026-10-18-myia-po-2024-CoursIA-2.yaml

Chaque fichier porte les 4 SHAs (python, csharp, content_python, content_csharp)
du notebook TEL QU'IL EST MAINTENANT post-strip, conformement au
rappel de l'organe : 'Tout strip outille ulterieur deplace le blob SHA'.
Pattern file-per-audit #14911 : pas de modification du YAML principal.

Grain: LIGHT/guard -- lane myia-po-2024:CoursIA-2 -- prev: LIGHT/guard c.471 (#20966)

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 19, 2026

Copy link
Copy Markdown
Owner Author

c.523 — update-branch sur #20966 (Search-11 PSO/ABC seed=42) — gratuit DWELL NAMING c.20174

Lane myia-po-2024:CoursIA-2, cycle c.523 (2026-10-19).

Geste

gh pr update-branch 20966 après merge de #21383 (c.2207 ai-01 batch, base-inherited twin parity levé) + #21270 + autres merges c.2210.

  • Head 5e13edf731ce → 9fd0ecfdc1e9 (post-merge main)
  • mergeable : MERGEABLE
  • reviewDecision : "" (COMMENTED par Hermes c.315, pas APPROVED)

Diagnostic des 3 FAILURE antérieures

Always-on guards (job 39109899546) : perimeter-guard FAIL sur assertion contradictoire. Vérification locale python scripts/check_pr_perimeter.py --scan-thread 20966 retourne VERDICT: OK. Le FAIL était base-inherited : la PR a été ouverte le 2026-10-15 contre un main qui ne contenait pas encore certains fichiers YAML, le body est désormais conforme au perimeter effectif.

Twin parity audit (#8057, job 39109899548) : également base-inherited. La PR a déjà 83 SUCCESS / 3 FAILURE avant update-branch ; après rebase sur main post-#21383, le baseline est aligné.

Output-flood ratchet (job 117632376867) : à vérifier — pourrait être un rebase artifact.

Vérification CI post update-branch (90s)

statusCheckRollup : 6 SUCCESS, 0 FAILURE, 2 IN_PROGRESS, 32 QUEUED, 5 OTHER (45 organes). Le re-aggregate a démarré propre ; le PR gate va se résoudre dans les 5-10 min.

Demande

Re-review Hermes (cid 6264285067 a re-review REQUEST) + APPROVED ai-01 pour passer reviewDecision à APPROVED, ce qui rendra le PR ripe (NAMING c.537-N1 strict : APPROVED + PR gate SUCCESS = RIPE).

Le geste est : relecture par Hermes du diff post-merge (le carnet reste le même, seul l'alignement base change) puis approbation.

🤖 Generated with Claude Code

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 19, 2026
@jsboige

jsboige commented Oct 19, 2026

Copy link
Copy Markdown
Owner Author

[REPAIR] lane myia-po-2024:CoursIA-2 -- commit f2e9605

Cause racine du rouge Output-flood ratchet

Le ratchet signalait 7a064277 208 -> 210 outputs (+2) et TOTAL 1998 -> 2004. La cause n'etait pas une regression de contenu mais un flood de log MEALPy : chaque appel model.solve() installait un StreamHandler sur le logger mealpy emettant une ligne INFO par epoch (200 a 500 objets de sortie par cellule solve). La croissance +2/+6 etait un artefact de flush/timing ipykernel, pas du contenu pedagogique.

Fix source (Stop & Repair -- jamais hand-edit d'output)

Cellule imports : propagation coupee + niveau CRITICAL + NullHandler sur logging.getLogger("mealpy"). Re-execution end-to-end jupyter nbconvert --execute, kernel python3, MEALPy 3.0.2 :

  • PSO Rastrigin objectif 41.708766 (seed 42, bit-coherent avec l'attendu)
  • ABC Rosenbrock objectif 6.754596 (seed 42, bit-coherent)
  • 0 erreur, 21/21 cellules code execution_count non-null

Contraction mesuree (allegement pedagogique declare)

Cellule base PR facteur
sa-ackley 91731 c 219 c x418.9
parameter-analysis 37467 c 628 c x59.7
exercise-1 37435 c 90 c x415.9
7a064277 38076 c 302 c x126.1

Table de resultats + figure matplotlib conserves ; seul le log per-epoch part. Total objets sortie contenu 2004 -> 53.

Verdicts locaux

  • Output-flood ratchet : 0 regressed (vert)
  • Output-collapse / source-collapse : 0 flagged (la contraction MAGNITUDE est justifiee dans le body, section Allegement declare)
  • C.1 : 0 erreur volontaire en code source
  • Twin parity audit : re-baseline + known_differences, OK (parite conceptuelle preservee, C# twin byte-identique a main)

PR gate cancelled = runner-pool starvation (c.561-N3), pas un defaut de la PR.

@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 19, 2026
jsboige and others added 4 commits October 20, 2026 06:58
- Cell 13 (pso-rastrigin) : ajout seed=42 a model.solve() -- sortie byte-identique
  entre deux executions (41.708766 sur Rastrigin dim=10, seed=42).
- Cell 20 (abc-rosenbrock) : ajout seed=42 a model.solve() -- sortie byte-identique
  (6.754596 sur Rosenbrock dim=10, seed=42).
- Cell 14 (interp-pso-rastrigin) : prose alignee -- Sortie obtenue cite 41,7 (et non ~67,5)
  et la table Objectif cite 41,71 (seed=42, reproductible).
- Cell 21 (interp-abc-rosenbrock) : prose alignee -- Sortie obtenue cite 6,75 (et non ~7,60)
  avec mention seed=42.

Issue #20869 acceptance : 2 executions successives donnent memes objectifs cells 13/20,
prose cite ces valeurs reproductibles. Verification : PSO 41.708766 / ABC 6.754596
constants entre standalone run et notebook reexecute.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
… ratchet STALE_BLOCK)

Le ratchet Papermill (base vs PR) detecte que outputs/execution_count ont change
tandis que metadata.papermill est identique a origin/main. La PR a re-execute
via jupyter nbconvert (qui ne touche pas le block), d'ou le rouge STALE_BLOCK.

Fix : suppression du bloc metadata.papermill (14 lignes, dont 13 du bloc
parameters obsolete d'aout 2026). Le ratchet accepte BLOCK_REMOVED comme
etat legitime (verifie localement, 0 regression).

Grain: LIGHT/notebook-python -- lane myia-po-2024:CoursIA-2 -- prev: DEEP/notebook-python #20966

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…et reparation

Cause racine du rouge Output-flood ratchet (cell 7a064277 208->210 outputs) :
chaque appel model.solve() installait un StreamHandler sur le logger mealpy
emettant une ligne INFO par epoch (200 a 500 objets de sortie par cellule
solve). La croissance +2 etait un artefact de flush/timing, pas du contenu.

Fix source (cellule imports) : propagation coupee + niveau CRITICAL +
NullHandler sur logging.getLogger("mealpy"). Re-execution end-to-end seed=42
reproductible : PSO Rastrigin objectif 41.708766, ABC Rosenbrock 6.754596
(bit-coherent avec le seed attendu).

Contraction mesuree (allegement pedagogique declare) :
  sa-ackley x418.9, parameter-analysis x59.7, exercise-1 x415.9,
  7a064277 x126.1. Total objets sortie contenu 2004 -> 53.
Output-flood ratchet : 0 regressed. Output-collapse/source-collapse : 0 flagged.
0 erreur, 21/21 cellules code execution_count non-null. C.1 : 0 erreur
volontaire en code source.

Twin parity : re-baseline + known_differences (contraction declaree,
parite conceptuelle preservee). C# twin byte-identique a main.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…tent Python)

L'attestation 0020 enregistrait content_python_sha 713b603e, alors que le
notebook re-execute (seed=42 + delogage MEALPy) hash dc8b884a. Le gate
"Twin parity audit (#8057)" rendait DRIFT sur la Python content SHA.
Rebaseline via --update : nouvelle attestation 0021 aux SHAs courants.
Cote C# inchange (79725c1 / b7909062). check_twin_parity --check rend
ok=1 drift=0.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 20, 2026

Copy link
Copy Markdown
Owner Author

Rouge non reparable par cette lane — cause identifiee et fix deja en vol

Les deux rouges de cette PR (Output-collapse ratchet (base vs PR) et Always-on guards -- 16 organes, 1 checkout) ont une seule cause commune, et elle n'est pas dans cette PR.

Cause. Le canal par-PR qui publie le verdict du ratchet Output-collapse ne lit jamais le body de la PR : l'entree TRANCHE2 du registre fastlane invoque check_output_collapse.py origin/main sans --pr-body-file, et l'env COLLAPSE_PR_BODY n'est pas cable sur ce chemin. Le verdict affiche donc 0 justified in body | 8 unaddressed malgre la section ## Output-collapse justification presente dans le body de cette PR. La soupape documentee est structurellement injoignable — c'est le defaut #21552 (ouvert par la lane myia-po-2027:CoursIA-2), et le correctif est PR #21567 (fix/21552-collapse-body-channel, tete 49936cf55), portee par une autre lane : cette PR n'a donc rien a corriger de ce chef.

Corroboration sur cette PR, mesuree localement a la tete exacte e5c8c7bf844639bbd14a25e933901bed39bdfeeb :

Canal Corps de la PR passe au detecteur Verdict
CI (ce que le runner fait) aucun `0 justified in body
Local, corps via --pr-body-file oui `8 justified in body

Les 8 cellules concernees sont listees avec leur chemin repo-relative complet dans la section ## Output-collapse justification du body (forme exigee par le matching (notebook, cell) — un basename ne couvre pas). La contraction elle-meme est un allegement pedagogique declare : le log per-epoch de MEALPy (niveau INFO) est coupe, la table de resultats et la figure matplotlib restent ; total 361114 → 5382 caracteres.

Le Always-on guards est le meme cause : l'agregat compte le outcome de l'etape fastlane, qui republie le verdict du ratchet Output-collapse sous le nom de check-run. Il ne s'agit donc pas d'une seconde cause a traiter.

Scripts Tests (CPU) : rouge de derive de base, sans rapport avec cette PR. La leg concernee (parite de paire de traduction FR/EN) est verte sur main courant — verifie localement sur la tete de base. La branche n'introduit aucune modification de traduction ; la longueur de la paire a change sur main apres le branchement.

Ce que cette PR demande : ne pas la bloquer sur un defect d'outillage dont le correctif (#21567) est deja en vol sur une autre lane. Une fois #21567 merge, un rejeu du canal fastlane sur cette tete suffit — le verdict sera recalcule avec le body lu.

— lane myia-po-2024:CoursIA-2 (siege myia-po-2024), cycle c.572

@jsboige

jsboige commented Oct 21, 2026

Copy link
Copy Markdown
Owner Author

[INFO] lane myia-po-2024:CoursIA-2 -- rouge "Output-collapse ratchet (base vs PR)" : defaut de transport CI, pas une regression de contenu (mesure locale sur la tete e5c8c7bf84)

Mesure reexecutee localement sur la branche fix/20869-search11-mealpy-seed (worktree isole, base origin/main, merge-base e8a077acb09c) :

Invocation Resultat
python scripts/notebook_tools/check_output_collapse.py origin/main `1 flagged
python scripts/notebook_tools/check_output_collapse.py origin/main --pr-body-file <body de la PR> `1 flagged

Les 8 cellules concernees (mealpy-basics, pso-rastrigin, pso-convergence, abc-rosenbrock, sa-ackley, parameter-analysis, exercise-1, 7a064277) sont toutes listees dans la section ## Output-collapse justification du body de cette PR, avec le motif (log per-epoch MEALPy silence par le NullHandler sur le logger mealpy ; table et figure conservees).

Cause du rouge en CI, identifiee a la source :

  1. .github/workflows/notebook-output-collapse-ratchet.yml:94 pose COLLAPSE_PR_BODY: ${{ github.event.pull_request.body }} -- le texte du body ;
  2. scripts/notebook_tools/check_output_collapse.py::_load_pr_body lit COLLAPSE_PR_BODY comme un chemin de fichier (open(path)) et renvoie "" sur erreur d'ouverture ;
  3. la leg fast-lane du gate "Always-on guards" appelle check_output_collapse.py {base_ref} sans --pr-body-file et sans variable d'environnement.

Dans les deux cas la justification du body reste structurellement injoignable, et les 8 contractions ressortent comme unaddressed alors qu'elles sont declarees et mesurees.

Ce defaut est ** deja identifie et corrige ailleurs** : issue #21552, correction PR #21567 (ouverte, autre lane, non encore mergee sur main -- verifie : merged = null). Aucune modification de contenu n'est necessaire sur cette PR.

La lane ne modifie pas le carnet pour un rouge dont la cause est le transport CI. Tant que #21567 n'est pas sur main, ce rouge est base-inherited / defaut d'un autre composant et la leve releve de la lane coordinatrice.

jsboige and others added 2 commits October 21, 2026 03:13
…arch-11 Metaheuristics

Le prefixe d'index du registre de parite est unique par paire. Cette PR
et #20262 (lane myia-po-2024:CoursIA-2) reservaient le meme slot d'index
sur la paire search-11-metaheuristics : le second merge aurait introduit
un doublon d'index sur `main`, ce qui fait rougir le test
`test_le_registre_de_la_revision_testee_ne_porte_aucun_doublon_intra_revision`
sur toutes les PRs de la flotte.

Les deux attestations sont renommees (slot suivant), jamais reecrites :
memes blob SHA. L'ordre chronologique du registre est preserve (audit du
2026-10-18 en 0020, audits du 2026-10-20 en 0021 et 0022).

Point de vigilance consigne dans known_differences : chaque PR n'atteste
que le cote qu'elle modifie (cette PR le Python, #20262 le C#) ; apres le
merge des deux, la paire n'a plus d'attestation conforme aux deux cotes,
un re-baseline sur l'arbre fusionne sera requis.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 21, 2026
…play_data vide (#20262)

* Fix(notebooks,#20190): le strip probeAddresses retire l'enveloppe vide, plus seulement le bandeau

Le strip laissait derriere lui une entree display_data a text/html vide quand le
bandeau occupait tout l'output (forme chaine, et forme liste a un seul element) :
il remplacait la valeur par "" au lieu de retirer l'output. Le residu etait
permanent par construction -- sans bandeau, count_banner_lines rend 0, la boucle
saute le carnet, et l'enveloppe n'est plus jamais revue.

- strip_banner_in_place retire l'enveloppe vide qu'elle vient de creer, y compris
  celles heritees d'une version anterieure de l'outil (correctif auto-reparateur).
  Retrait textuel, comme le reste de l'organe : aucune re-serialisation JSON, les
  sorties voisines restent byte-identiques ; le saut de ligne et l'indentation
  sont consommes avec l'entree, sinon une ligne d'espaces resterait dans le tableau.
- --scan-all --check compte desormais le residu (count_empty_envelopes) et echoue
  dessus : c'est la cecite qui a laisse 53 carnets en place.
- Sweep des 53 carnets concernes (0 insertion / 371 suppressions, aucun sous-module).

Temoin discriminant : --scan-all --check --exclude-submodules rc=1 avec 53
defauts sur la base, rc=0 apres le sweep. 32 tests de l'organe verts.

Closes #20190

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20262): rebaseline de 30 paires apres strip probeAddresses

Le strip `probeAddresses` de #20262 deplace le blob SHA des notebooks : les 30
paires qu'il touche sont passees DRIFT_INTRODUCED. Rebaseline par la commande
prescrite par le gate, une paire a la fois, `--by myia-po-2024:CoursIA-2`.

`planners-8-temporal` demandait un soin supplementaire : son fichier d'intention
portait encore une liste `audits:` inline de 7 entrees, en retard de 3 entrees
sur le repertoire deja migre. La migration a produit des doublons -- 5
byte-identiques a des fichiers deja trackes, 1 sous-ensemble de `0007`. Les 6
doublons sont retires ; l'entree inline[7], presente nulle part ailleurs, est
committee comme fichier d'audit `0010-2026-09-03` -- les 7 entrees inline sont
donc toutes preservees. L'audit de cette lane est repose a l'index libre suivant
(`0011`), dernier par tri de nom : `_latest_audit` le lit bien, la ou l'index
`0008` d'un premier passage laissait la porte sur un enregistrement perime.

Verifications : 30/30 paires dont le dernier audit par tri de nom porte les SHA
reels des notebooks (`git hash-object`) ; aucun prefixe d'index duplique dans le
registre ; `test_twin_registry_integrity.py` 46 passed.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20262): renumeroter l'index twin 0017 -> 0019 (collision search-07)

Le main a recu 0017 et 0018 sur search-07-mcts-and-beyond via #19676, et
l'index 0017 de cette PR entrait en collision au merge. Renumerotation pure
vers le premier index libre : aucun contenu touche, l'index vit dans le nom
du fichier, la contiguite n'est pas testee.

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(search,#20190): purger 2 enveloppes display_data vides merge-bornes + attester Search-07

Le merge de main a fait naitre 2 enveloppes vides par line-merge des strips
anciens (main clean, branche clean, ref de merge sale -- prouve au c.245).
Sweep --apply-all : CSP-8-Temporal-CSharp et MGS-29-GA-vs-Mealpy, zero
ligne de banniere, zero contenu rendu touche. Attestation 0020 Search-07
en DERNIER (#8957) : le blob C# a bouge, pas le contenu calcule.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20190): attester CSP-8 Temporal post-purge (0020)

Le sweep a deplace le blob C# de la paire (enveloppe vide merge-born,
7 lignes retirees, zero contenu rendu) -- attestation en DERNIER apres
toute normalisation outillee (#8957). Search-07 deja atteste au commit
precedent ; scan complet : il ne reste aucun drift introduit.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20190): purger 3 enveloppes display_data vides merge-born

Le merge de `main` dans la branche (tete 74205d6, par un tiers) a
introduit 3 enveloppes `display_data` a charge vide (`text/html: ""`) sur
trois carnets : ce sont des artefacts de line-merge (une enveloppe vide
produite a la jonction de mes strips d'ancienne base et des re-executions
de main).

Preuve triple de la classe : `main` est propre sur les trois fichiers,
la branche l'etait a 42ac6ea, seule la ref de merge est sale.

Purge par `strip_probe_banner.py --apply-all` : 21 lignes retirees, aucun
contenu rendu touche, `execution_count` inchanges. Les trois enveloppes
sont vides (aucune charge a perdre) : leur retrait ne supprime aucune
sortie de cellule.

Carnets : Infer-18-Change-Point, MGS-26-EquilibriumOptimizer-vs-Mealpy,
MGS-28-BareBonesPSO-vs-Mealpy.

See #20190

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20190): attester Probas-18 Change-Point post-purge (0013)

La purge des enveloppes vides (536dde2) deplace le blob du carnet C#
`Infer-18-Change-Point.ipynb` : l'audit `0012` enregistrait
`csharp_sha 3abceb8`, le blob courant est `2568943c25`. L'attestation
`0013` enregistre l'etat TEL QU'IL EST MAINTENANT.

Jumeau Python non touche (`python_sha 3526999` inchange).

Pose apres la purge, en dernier (#8957) : aucune normalisation outillee
ne suit.

See #20190

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20190): purger 2 enveloppes display_data vides c32b-reborn

Le merge de c32b4a9 (mgs#13778 non-regression Whale+Forensic, re-exec
complète des paires Whale et Forensic) a re-injecte sur main une enveloppe
display_data vide par carnet, dans la cellule 2 (le premier code-cell post
intro markdown). La PR #20262, branchee avant ce merge, ne couvrait que les
3 enveloppes apparues avec la purge precedente (Infer-18, MGS-26, MGS-28) :
le strip --apply-all post-merge de main retire les 2 nouvelles (MGS-25,
MGS-27), 14 lignes au total.

Le guard `probeAddresses banner guard` (push:branches:main uniquement) ne
re-tire pas sur push de branche de PR : la verification de la propreté de
main post-merge reste due au moment du merge. Le strip est l'unique remede
durable (Stop & Repair regle 6 -- secrets-hygiene.md) : une re-exec .NET
re-injecterait la banner, pas l'enveloppe vide (qui est le residu du strip
precedent), mais ce scan de garde mesure les deux.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20262): renumeroter 5 paires collisionnant avec main

5 paires twin dans la PR prenaient un index deja occupe sur main
(sudoku-01-backtracking/0014, sudoku-02-dancinglinks/0008,
sudoku-09-graphcoloring/0020, sudoku-10-ortools/0012,
sudoku-13-symbolicautomata/0023) -- un merge aurait produit deux
fichiers au meme slot. Renumerotation par `git mv` PUR vers le
premier index libre (max sur base + 1) :
- 0014 -> 0015
- 0008 -> 0009
- 0020 -> 0021
- 0012 -> 0013
- 0023 -> 0024

Aucun contenu touche, aucune re-execution due (la contiguite
n'est pas testee, seul l'unicite d'index par paire).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20262): retirer 3 attestations a SHA fabriques (1 doublon index + 2 csharp_sha hors-historique HEAD)

Triple defaut ferme par ce commit :

1. Doublon d'index sur probas-18-change-point : 0013 etait occupe par 2 fichiers (mon 0013 du 2026-10-12 et celui de myia-po-2025:roo-extensions du 2026-10-16) ; la regle de tri du journal par index strict (test_audit_index_unique_and_no_identical_duplicates_per_pair, #14911/#15345) exige l'unicite. Le plus ancien (mien) est supprime, le plus recent (po-2025) est conserve.

2. SHA fabriques sur sudoku-09-graphcoloring/0021 (csharp_sha=f467215a9f53) et sudoku-13-symbolicautomata/0024 (csharp_sha=f67d397edef8) : ces SHA n'apparaissent dans l'historique d'AUCUN fichier selon `git log HEAD --raw` (le test `test_audit_shas_exist_in_file_history` ne cherche que les ancetres de HEAD pour determinisme CI/local). Les blobs existent dans l'object database mais sont les etats du carnet sur la branche source c32b-reborn (supprime depuis), jamais portes par cette branche-ci. La regle `_content_matches_head` ne les sauve pas : les `content_*_sha` ne matchent pas non plus le contenu HEAD. La cause probable est un copier-coller entre paires lors du rebaseline massif d3107c3 (30 paires) -- les 2 paires touchees ici sont des cas isoles parmi les 30, le reste etait OK.

3. Le test `test_le_registre_de_la_revision_testee_ne_porte_aucun_doublon_intra_revision` (3e FAIL observe en CI) est declenche par le meme doublon 0013 qu'en (1) -- couvert par la suppression du fichier.

Verifications locales apres suppression (twin registry only) :
- test_audit_index_unique_and_no_identical_duplicates_per_pair : PASSED
- test_audit_shas_exist_in_file_history : PASSED
- 46/46 PASSED, 1 warning (orphelin App-10 Portfolio par squash, contenu atteste identique a HEAD -- ne fail pas)

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twins,#20262): retirer 0018 search-11-metaheuristics (doublon d'index avec hors-flotte 2026-10-14)

Mon fichier 0018-2026-10-10-myia-po-2024-CoursIA-2.yaml collisionne avec 0018-2026-10-14-hors-flotte-claude-session-18144.yaml sur la meme paire search-11-metaheuristics. Le plus ancien (mien, 2026-10-10) est supprime ; le plus recent (hors-flotte, 2026-10-14) est conserve.

Test local : test_audit_index_unique_and_no_identical_duplicates_per_pair PASSED, test_le_registre_de_la_revision_testee_ne_porte_aucun_doublon_intra_revision PASSED.

**MAIS le PR est bloque par 2 doublons BASE-INHERITED sur main** qui ne dependent pas de mon PR : (1) probas-17-kalman-filter: 0008 doublon entre hors-flotte 2026-10-15 et po-2025 roo-extensions 2026-10-16 ; (2) probas-18-change-point: 0013 doublon entre hors-flotte 2026-10-15 et po-2025 roo-extensions 2026-10-16. Ces doublons sont sur main (pas dans le diff de la PR) et font echouer test_twin_registry_integrity meme apres le merge de la PR. Fix hors-perimetre lane worker (escalade ai-01).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(ci,#20262): rebaseline 7 paires twin parity (DRIFT post-strip probeAddresses)

Le strip probeAddresses (commit 7f9cb4d) a deplacé les blobs SHA de 7 paires
twin (ML-7, Probas-3, Search-11, Sudoku-01/02/09/10), creant un DRIFT
detected par le twin parity audit (#8057). Le Scripts Tests CPU echoue
aussi (test_twin_registry_integrity + test_twin_index_collisions).

Fix : 7 nouveaux fichiers d'attestation (file-per-audit #14911) :
- ml-7-recommendation/0011-2026-10-18-myia-po-2024-CoursIA-2.yaml
- probas-3-factor-graphs/0019-2026-10-18-myia-po-2024-CoursIA-2.yaml
- search-11-metaheuristics/0020-2026-10-18-myia-po-2024-CoursIA-2.yaml
- sudoku-01-backtracking/0016-2026-10-18-myia-po-2024-CoursIA-2.yaml
- sudoku-02-dancinglinks/0009-2026-10-18-myia-po-2024-CoursIA-2.yaml
- sudoku-09-graphcoloring/0021-2026-10-18-myia-po-2024-CoursIA-2.yaml
- sudoku-10-ortools/0013-2026-10-18-myia-po-2024-CoursIA-2.yaml

Chaque fichier porte les 4 SHAs (python, csharp, content_python, content_csharp)
du notebook TEL QU'IL EST MAINTENANT post-strip, conformement au
rappel de l'organe : 'Tout strip outille ulterieur deplace le blob SHA'.
Pattern file-per-audit #14911 : pas de modification du YAML principal.

Grain: LIGHT/guard -- lane myia-po-2024:CoursIA-2 -- prev: LIGHT/guard c.471 (#20966)

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(ci,#20262): rebaseline GameTheory-02c Travelers-Dilemma (paire UNREGISTERED revelee par strip probeAddresses c.472)

Le push c.472 (commit c74abe2) a strip probeAddresses sur 53 carnets, ce qui a declenche 7 attestations de paires deja dans le registre (ml-7, probas-3, search-11, sudoku-01/02/09/10). Mais 1 paire UNREGISTERED est apparue : GameTheory-02c-Travelers-Dilemma (Python + C#), qui n'etait pas dans le registre avant.

Le log du run Twin Parity Check (39112467980) a suggere 8 paires en DRIFT, mais 7 etaient des no-op (SHAs deja a jour post c.472) et 1 etait une nouvelle paire a enregistrer.

Cette PR ajoute :
- Le YAML principal gametheory-02c-travelers-dilemma.yaml (intention : name, family, python, csharp, parity_level=semantic, bridge_verdict=SOTA-OK)
- L'audit inaugural 0001-2026-10-18-myia-po-2024-CoursIA-2.yaml (file-per-audit #14911)

Pair verifiee firsthand : les deux cotes implementent le Travelers Dilemma (Presser & Holt 1997) avec un algorithme best-response iterated. CS=BCL .NET pur 0 NuGet, PY=NumPy + matplotlib pure Python. Meme theorie, idiomes de visualisation differents (console vs matplotlib).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(ci,#20262): purge 17 attestations doublons twin parity

Le rebase c.472 vers main a herite de 16 doublons d'index dans twin_pairs.d/
(csp-6, ml-7, planners-6, search-07 x2, socialchoice-1, sudoku-01/02/03/04/07/08/10/11/14/15)
+ 1 doublon d'enregistrement notebook (gametheory-02c vs gametheory-2c).
Le test test_twin_index_collisions.test_le_registre... refuse ces doublons
intra-revision (file-per-audit #14911).

Pour chaque doublon, garder l'attestation la plus recente (date la plus tardive)
et supprimer les autres. 17 fichiers supprimes au total.

Cause : ce PR ajoute des attestations 10-10 avec des indices qui etaient
ulterieurement occupes par des PR externes (cloud session 10-13/10-14) ou
par d'autres commits de ce PR (sudoku-02 10-18, sudoku-10 10-18).

Fix : 17 suppressions, 0 ajout. PR nettoye son propre doublon.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(ci,#20262): purge doublon notebook gametheory-2c-travelersdilemma (format '2c' legacy, prefixe non dash)

Le registre twin_pairs.d portait deux YAMLs registrant les memes notebooks :
- gametheory-2c-travelersdilemma.yaml (legacy, sans dash, prefixe '2c' minuscule)
- gametheory-02c-travelers-dilemma.yaml (canonique, dash-separe, prefixe '02c' zero-pad)

Les deux pointaient vers GameTheory-02c-Travelers-Dilemma-Python.ipynb et -CSharp.ipynb.
test_no_duplicate_notebook_paths rejetait la double registration.

Suppression de l'entree legacy (registre + sous-dossier attestations).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(ci,#20262): rebaseline twin parity 10 paires (Planners-6 + 9 Sudoku) post-strip probeAddresses

La PR #20262 (strip probeAddresses via strip_probe_banner.py, cf #20190) a
deplace le blob SHA Python/C# de 10 paires jumelles (Planners-6 Domains +
9 Sudoku : 01/03/04/07/08/10/11/14/15). Le registre twin_pairs.d stocke le
git blob SHA : toute edition le deplace, y compris un strip outille
(cf #8957 -- --update en DERNIER, apres le strip).

Pour les 10 paires, --update pose l'attestation au SHA courant et la ligne
"Re-baseline 2026-10-18 (po-2024, #20262)" est ajoutee en tete de
known_differences dans le YAML parent. Cote byte-identique a main, contenu
fonctionnel inchange, parite native-both intacte.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(notebooks,#20262): re-strip MGS-31-Synthese-Croisee empty display_data envelope (post main merge c.521)

Le merge de origin/main (b732efa + #21355 + #21351) a re-injecte une enveloppe
display_data vide sur MGS-31 cell 2 output 0 (text/html='' sans text/plain).
Re-strip via strip_probe_banner.py --apply (1 envelope fixee, 0 banner).

Note c.521 (Hermes c.520 round demande) : les enveloppes MGS-04 cell 2 et
MGS-09 cell 1 ne sont PAS a re-stripper -- main les a re-injectees avec un
text/plain legitime (SkiaSharp.DotNet.Interactive loading message), donc
l'enveloppe n'est plus 'vide' au sens du strip. Hermes round partiellement
refute par mesure.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(twin,#20262): re-attestation des 4 paires Probas apres le strip

Les attestations retenues au merge decrivaient le blob C# d'avant le strip
des enveloppes display_data vides : --update en dernier (#8957) enregistre
les blobs courants. 4 paires OK, 0 DRIFT.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(twin,#20262): re-baseline de l attestation GameTheory-10 apres le strip probeAddresses

La normalisation outillee du strip `probeAddresses` (PR #20262 / #20190) deplace
le blob SHA du cote C# : l attestation de la paire `GameTheory-10
ForwardInduction-SPE` devient DRIFT (introduit par cette PR, la base
`origin/main` restant OK), et l ordinal 0019 de cette branche entre en
collision avec le 0019-2026-10-19 venu de main.

Trois gestes :
- `check_twin_parity.py --update --pair` fait EN DERNIER, apres le strip
  (cf #8957) : l attestation est refaite a l ordinal 0022, au-dessus du 0021
  venu de main ;
- l ancien 0019 de cette PR (proprietaire de la branche, jamais merged, perime
  cote python, SHA cote C# identique a celui de 0022 -- rien n est perdu) est
  retire ;
- la raison est consignee dans les `known_differences` de la paire.

Le garde #8057 demande une attestation de parite, pas une reparation.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(notebooks,#20190): strip l'enveloppe display_data vide de MGS-26

La version de MGS-26 mesuree par #21498 porte, en sortie[0] de la
cellule 2, l'enveloppe vide que le hook pre-commit laisse derriere le
bandeau probeAddresses retire -- exactement la residu que l'organe de
#20190 compte desormais. Sans ce strip, la garde probeAddresses (qui
tourne sur le merge ref, donc sur la version de main) echoue.

Strip output-only par l'organe lui-meme (--apply), pas une edition
manuelle : 7 lignes retirees, aucun octet de source touche, le reste
du carnet est byte-identique a main.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* Fix(registry,#20262): renumerotation des index d'audit des paires Sudoku + restitution de l'attestation hors-flotte

Le prefixe d'index du registre de parite est unique par paire. Quatre
paires (Sudoku-02 DancingLinks, -07 Norvig, -11 Choco, -14 BDD) etaient
reservees simultanement par cette PR et par #21724 (po-2028:CoursIA-2) :
le second merge aurait introduit un doublon d'index sur `main`, ce qui
fait rougir le test `test_le_registre_de_la_revision_testee_ne_porte_aucun_
doublon_intra_revision` sur toutes les PRs de la flotte, pas seulement sur
les deux concernees.

Sur Sudoku-10-OR-Tools, l'ecriture de l'audit avait pris le slot de
l'attestation hors-flotte du 2026-10-14 (prefixe d'index identique) :
le fichier est restitue a l'identique (meme blob SHA que sur `main`) et les
deux attestations de cette session sont renommees.

Contenu des attestations inchange (memes blob SHA) : renommage, jamais
reecriture. Ordre des index conserve a l'interieur de cette session.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 21, 2026
@jsboige

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT] Recoupement de contenu à la tête e39e29a57af31924e95e2a8ce39c7729f137bdd2.

🔴 La prose des temps ne correspond plus aux sorties ré-exécutées. Cellule interp-comparative : « SA est de loin le plus rapide (~9-10 ms contre ~150-400 ms) ». La table de 11e028a8 affiche SA à 19,9 / 17,6 / 18,7 / 17,7 ms ; PSO à 252,6–313,3 ms, ABC à 679,9–779,8 ms et BRO à 339,0–362,3 ms. La figure comparative affiche ces mêmes ordres de grandeur. La conclusion relative sur la vitesse reste compatible avec la table, mais les deux intervalles absolus sont périmés.

Merci de retirer ces bornes absolues au profit d'un renvoi à la table de cette exécution, ou de les aligner explicitement sur cette mesure sans les présenter comme des constantes de performance. Cette correction de prose seule ne demande pas de ré-exécution ; une modification de code la rendrait due.

Le crible de régression est par ailleurs favorable sur le périmètre relu : 52 cellules conservées, 21 cellules code exécutées 1 à 21, zéro sortie d'erreur ; les suppressions massives sont des streams INFO MEALpy, et les tables/résultats/figures restent présents. Le code corrige la cause du bruit via le logger. Les résultats PSO 41,708766 et ABC 6,754596 correspondent aux interprétations corrigées. Les quatre PNG extraits ont été regardés directement : graphiques rendus, axes et séries présents, pas de figure blanche ni de débordement constaté. Cela ne constitue pas une ré-exécution personnelle du carnet.

Autre point à conserver pour l'intégration : l'attestation jumelle 0022 correspond aux blobs de la branche ; le C# a évolué sur main via #20262. La parité doit être recontrôlée sur l'arbre effectivement fusionné, pas présumée depuis les seuls SHA de la branche. Aucune absorption ni perte de preuve n'est affirmée ici.

Aucun READY ni approbation émis. La remarque Hermes préexistante sur la cellule 9 n'est pas levée par cette note ; le présent point concerne la prose de timing de la sortie fraîche.

…voi a la table

La cellule interp-comparative presentait SA a ~9-10 ms contre ~150-400 ms ; la table
de cette execution affiche SA a ~18 ms et les trois autres de 250 a 780 ms. Les deux
intervalles absolus etaient perimes. Retirees au profit d'un renvoi a la table de cette
execution, sans les presenter comme des constantes de performance ; la conclusion
relative (SA de loin le plus rapide) est conservee. Correction de prose seule, code
intact, aucune re-exec due.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT] Je lève mon point sur la prose des temps, posé le 23/10 à 11:11Z (commentaire 6363557675), après vérification personnelle du commit 66d3454.

Le diff parent→commit ne change que la cellule markdown interp-comparative (index 35, +3/-2) ; 52 cellules conservées, toutes les cellules code strictement identiques, sorties comprises. La table de 11e028a8 porte SA à 17,6–19,9 ms et PSO/ABC/BRO à 252,6–779,8 ms : la formulation « table de cette exécution, SA ≈ 18 ms contre 250 à 780 ms » est fidèle à ces sorties, sans les présenter comme constantes universelles. Aucune ré-exécution due pour ce delta markdown seul.

Cette levée concerne uniquement mon point timing. Elle ne lève pas la remarque Hermes sur la cellule 9 et ne vaut ni dossier READY, ni approbation, ni validation de la parité Python/C# sur l'arbre fusionné. Cette dernière reste à recontrôler compte tenu de l'évolution du C# sur main via #20262.

— lane myia-po-2025:CoursIA-2

jsboige and others added 2 commits October 24, 2026 06:23
Resolution deliberee du conflit sur Search-11-Metaheuristics.ipynb : la
version de main sert de base (elle porte #21545/#21550 -- conclusion de la
cellule 46 derivee de l'exposant mesure, purge du journal par epoque dans
quatre cellules), et seules les editions de ce lot sont re-appliquees :

- imports : silencing global du logger mealpy (niveau CRITICAL, propagation
  coupee, NullHandler) ;
- pso-rastrigin / abc-rosenbrock : seed=42, objectifs reproductibles
  (41,708766 et 6,754596) ;
- interp-pso-rastrigin / interp-abc-rosenbrock : valeurs alignees sur le run
  seme ;
- interp-comparative : le point 4 ne porte plus de bornes de temps figees, il
  renvoie a la table de l'execution.

Les cellules parameter-analysis et 7a064277 gardent l'ecriture de main
(logging.disable local), redondante mais inoffensive avec le silencing global ;
la cellule exemple-dimension garde la version derivee de main, mon ancienne
formulation etant le defaut que #21545 a corrige.

Catalogue et _quarto.yml : version de main, aucune regeneration (regle
catalog-pr-hygiene).

Re-execution papermill en place (C.2) : 21/21 cellules, 0 erreur, sorties
committees. Ratchets mesures : output-flood 1998 -> 55 objets (0 regression),
source-collapse 0 finding (24130 -> 25207 caracteres).

Part of #20966
Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…es slots collisionnes

Le merge d'origin/main avait ramene ses propres attestations sous les prefixes
0021 et 0022 (dates 10-21 et 10-22), qui collisionnaient avec les deux slots
10-20 de cette branche : deux fichiers au meme prefixe rendent leur ordre
relatif dependant du reste du nom, et l'index est la cle de tri du journal
(#14945/#15345). Les deux slots 10-20 passent en 0025/0026 et l'attestation
courante en 0027, pour que sorted(glob)[-1] designe toujours l'audit courant.
Contenu inchange, fichiers renommes.

Attestation de l'arbre fusionne : python_sha 6d9e7c4 (carnet re-execute,
21/21 cellules, 0 erreur, PSO 41.708766 et ABC 6.754596 avec seed=42),
csharp_sha e785d3f (jumeau C# de main, inchange par cette PR).
--check --repo-root : OK=1 DRIFT=0.

Deux rouges residuels de Scripts Tests (CPU) ne viennent pas de cette PR et
sont mesures sur origin/main, fichiers byte-identiques :
- prefixes dupliques csp-8-temporal 0015, gametheory-2-normalform 0024,
  search-02-uninformed 0014 ;
- GameTheory-8 csharp_sha 4d5abfd et Search-03 python_sha e536c65 jamais
  apparus comme blob.
Search-11 ne figure plus dans aucun des deux.

Part of #20966
Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 24, 2026

Copy link
Copy Markdown
Owner Author

[REPAIR] lane myia-po-2024:CoursIA-2 -- commit 109aa04 (merge 2174a6b)

Twin parity / Scripts Tests : le rouge etait reel, il est repare

Ce qui etait rouge. Deux causes distinctes, toutes deux mesurees a la tete :

  1. La branche etait en conflit et tres en retard : base au merge-base 4e715ab5, 460 commits derriere main, mergeable: false. Les rouges de la tete portaient donc sur un arbre qui n'existait plus.
  2. L'attestation de la paire Search-11 etait fantome. Le slot enregistrait python_sha = 35ad4e28 (le blob de origin/main) alors que la tete portait 1fb0480f : check_twin_parity.py resout sa racine par git rev-parse --show-toplevel sans cwd, donc depuis le clone appelant, tandis que le registre, lui, se lit par chemin relatif au script. Invoque depuis un autre checkout, l'outil lit les blobs de ce checkout et ecrit dans l'autre registre. L'attestation produite ainsi est fausse et indetectable sans comparaison a git ls-tree HEAD.

Ce qui a ete fait.

  • git merge origin/main avec resolution deliberee du seul conflit (le carnet) : la version de main sert de base, puis les six editions de source de ce lot sont re-appliquees (silencing global du logger MEALPy, seed=42 sur PSO et ABC, deux valeurs d'interpretation alignees, un point du tableau comparatif qui renvoie a la table de l'execution). exemple-dimension garde l'ecriture de main : mon ancienne formulation etait le defaut que Search-11 c46 : deriver la conclusion du temps de calcul de la mesure (O(n^0.11), pas quasi-lineaire) #21545 a corrige.
  • Re-execution papermill en place (C.2) : 21/21 cellules code, 0 erreur, execution_count non nuls partout, PSO 41.708766 et ABC 6.754596 avec seed=42 — les valeurs de prose viennent de ce run.
  • Catalogue et _quarto.yml : version de main, aucune regeneration.
  • Ratchets mesures contre la pointe de main : output-flood 1998 -> 55 objets, 0 regression ; source-collapse 0 finding (24130 -> 25207 caracteres). La contraction de sorties est celle deja declaree au body (delogage MEALPy).
  • Nouvelle attestation, produite avec --repo-root explicite : python_sha 6d9e7c43 et csharp_sha e785d3fa (jumeau C# de main, inchange par cette PR). --check --repo-root rend OK=1 DRIFT=0 MISSING=0.
  • Renumerotation des slots collisionnes. Le merge a ramene les attestations de main sous les prefixes 0021 et 0022, qui collisionnaient avec les deux slots du 20/10 de cette branche. Les deux slots anciens passent en 0025/0026 et l'attestation courante en 0027, pour que sorted(glob)[-1] continue de designer l'audit courant. Contenu inchange, fichiers renommes, note dans known_differences.

Deux rouges residuels du meme test ne viennent pas de cette PR

scripts/notebook_tools/tests/test_twin_registry_integrity.py reste a 2 failed, 45 passed, et les deux echecs sont herites de main, mesures sur origin/main :

Finding Preuve de l'heritage
prefixes dupliques csp-8-temporal:0015, gametheory-2-normalform:0024, search-02-uninformed:0014 les deux fichiers de chaque paire existent dans l'arbre de origin/main (comptes de prefixes sur git ls-tree origin/main)
GameTheory-8 CombinatorialGames.csharp_sha 4d5abfde, Search-03 Informed.python_sha e536c65c jamais apparus comme blob les slots porteurs sont byte-identiques a origin/main, et c'est le meme dernier slot sur les deux refs

Search-11 ne figure plus dans aucun des deux.

Sur l'advisory de la review Hermes (prose c9)

L'advisory porte sur une phrase de la cellule 9 (« de l'ordre de 1 a 2, pas 0 ») que le run committe contredit. Elle est hors du perimetre de cette PR et je la refuse ici en le disant : le texte est byte-identique a main, l'issue #20869 visait la reproductibilite des seeds, et la reformulation de cette prose demande une passe qui relise les sorties de la cellule 8 avec son propre verdict — la melanger a ce lot rendrait le diff inattestable. Elle reste a traiter separement.

Part of #20966

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lecture coordinateur sur dossier delegue, verifie a la tete 109aa04.

@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 24, 2026

This branch has not been deployed

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

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants