Skip to content

feat(gametheory,#19883): Populations Othman-Sandholm -- generalisation du pilote 16e - #19888

Open
jsboige wants to merge 6 commits into
mainfrom
feature/19883-thom-populations-othman-sandholm
Open

jsboige wants to merge 6 commits into
mainfrom
feature/19883-thom-populations-othman-sandholm

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python -- lane myia-po-2026:CoursIA-2 -- prev: MED/notebook-python #19878

See #19883. Part of #15397.

Objet

Carnet side-car GameTheory-16g-Populations-Othman-Sandholm-Python.ipynb qui etend le pilote 16e (#15399, COMPLETED) du premier mecanisme a des populations de joueurs heterogenes sur le mecanisme Othman-Sandholm Proposition 6 (SAGT 2009).

Deconflit : le 16e reste proprietaire du pilote (une seule paire). Le 16g ne le reecrit pas, il le generalise sur la meme structure oracle. 16/16b/16c/16d restent proprietaires du mechanism design.

Perimetre

Quatre fichiers (gh pr view --json files) :

fichier delta role
GameTheory-16g-Populations-Othman-Sandholm-Python.ipynb +972 le carnet livre : 29 cellules (9 code + 20 md)
GameTheory-16e-LLM-Players-Othman-Sandholm-Python.ipynb +1 / -1 ligne Navigation de la cellule 0 : arete entrante vers 16g
GameTheory/README.md +1 ligne 16g dans la table « Autour de 16 »
_quarto.yml +1 entrée render de 16g (tri de l'organe, après 16f-Munkres) — corrige le check-links rouge relevé par la re-review Hermes

Les deux dernieres lignes sont l'integration de serie exigee par check_notebook_nav_chain : le carnet neuf n'avait aucun lien entrant, donc le garde le classait orphan_entry NEW (job 113188685815). Mesure : une arete MUTUELLE 16e <-> 16g ne corrige rien -- les deux sont des entrees de la serie, la boucle forme une composante fortement connexe sans arete entrante et le finding devient independent_chain (le rouge change de nom, il ne tombe pas). Seule une arete entrante venant d'une entree ATTEIGNABLE le corrige, d'ou 16e -> 16g (le pilote dont 16g est la generalisation). Ces deux retouches touchent une cellule markdown de la cellule 0 uniquement : aucun code modifie, donc aucune re-execution due (C.2).

  • Pas de jumeau C# -- carnet Python pur
  • 1000 paires executees (4 populations x 5 seeds x 50 paires)
  • Politique LLM (16e §4) hors perimetre v1 (env CPU-only)

Verdict execution (papermill local end-to-end)

§4 — Distribution du welfare (seed=0) :
  uniform_random     mean=3.40  outcomes o1:12 o2:10 o3:13 o4:15
  always_a_prime     mean=4.46  outcomes o1:50
  always_a           mean=1.38  outcomes o4:50
  byzantine          mean=2.16  outcomes o1:13 o2:10 o3:14 o4:13

§5 — Differences au nul par population :
  always_a_prime     avg_diff +0.49  (positif net, dominance en action)
  always_a           avg_diff -2.21  (negatif net, controle negatif)
  byzantine          avg_diff -1.67  (negatif, perturbation)

§6 — Controle negatif : always_a_prime > always_a sur 5/5 seeds (diff moyenne +2.70)

§7 — Verdict final :
  always_a_prime : H1 (rejected H0)
  always_a       : H1 (rejected H0)
  byzantine      : H1 (rejected H0)
  uniform_random : BASELINE

Acceptance #19883 (verifiable)

  • Protocole gele en §0 avant tout appel de strategie (asserts SEEDS/N_PAIRS/POPULATIONS/H0_NULL_BAND)
  • >= 2 populations heterogenes (4 retenues : uniform_random, always_a_prime, always_a, byzantine)
  • Multi-seed >= 4 (5 retenus sur les seeds {0, 1, 7, 42, 99})
  • Modele nul nomme (uniform_random) + controle negatif rapporte (always_a, 5/5 seeds)
  • Verdicts H0/H1 par population, lecture des seuils dans le gel §0
  • Grades de pont explicites par claim : adaptation pilote 16e = A (asserts oracle 1:1, see [GameTheory] Pilote LLM hétérogènes sur mécanisme Othman–Sandholm #15399), cadre population = T (test multi-seed reproductible), verdict H0/H1 = B (lecture des seuils, mesure empirique)
  • Pas d'erreur volontaire (C.1) -- carnet execute end-to-end
  • Commit AVEC outputs (C.2) -- 12/12 cellules code executees, outputs preserves
  • 3 exercices en cellules code stub (.claude/rules/three-exercises-per-notebook.md, HARD pour un carnet neuf) : chacun precede de son markdown (objectif + indices # Indice / # Etape N), stubs return None # TODO etudiant, aucune solution livree

Limites / ouverture future

  • L'extension LLM du 16e §4 (appels models.myia.io) est documentee au §7/§8 comme chantier futur : remplacer la politique uniform_random par un appel LLM conditionnel au rapport adverse, comparer le welfare aux politiques scripted. Hors perimetre v1 par env (CPU-only worker sans proxy LLM garanti).
  • Le notebook utilise uniquement des politiques scripted deterministes : pas de stochasticite LLM, pas de re-exec multiple. La variance sur 5 seeds vient du RNG random.Random(seed) qui est fixee par seed et reproductible.
  • Pas de twin C# : pas d'entree twin_pairs.d a ajouter (le carnet est Python pur).

Verification pre-merge

  • pre-commit local : Passed (subprocess-encoding, Aucun garde ne parse la source des cellules : une cellule non compilable portant une sortie traverse les 60+ checks #13326, gitleaks)
  • check_notebook_nav_chain.py --check : OK, 0 NEW finding (383 connus, 1492 carnets) -- l'orphan_entry de 16g est resolu
  • check_docs_links.py --check : rc=0 au head fbb1a58abe — 16g enregistré dans project.render de _quarto.yml (une ligne, tri de l'organe), corrige le check-links rouge relevé par la re-review Hermes. La passe initiale --check-readme-links avait été jouée hors arbre de la PR et n'avait rien vu ; détail en commentaire.
  • Execution papermill end-to-end : 12/12 cellules code, 0 erreur (les 28 cellules pre-existantes restent byte-identiques : source, metadata, outputs, execution_count)
  • Deux lectures (§4 et §6) contredites par leur propre output ont ete corrigees : le §4 annoncait gap=0 pour always_a_prime (mesure : 1.00), le §6 un ecart « constant ~5 » (mesure : +2.700, 2.000 a 3.220). Les deux portent desormais la valeur mesuree et la raison, derivee des tables d'utilite du §1
  • DEEP/notebook-python : grain de contenu au-dela du plancher G-VAR-1

🤖 Generated with Claude Code

…n du pilote 16e

Carnet side-car 16g qui etend le pilote 16e (#15399) d'une paire unique a des
populations de 50 paires sur le mecanisme Othman-Sandholm Proposition 6.
4 politiques scripted (uniform_random / always_a_prime / always_a / byzantine),
5 seeds (0/1/7/42/99), modele nul + controle negatif, verdicts H0/H1 par
population.

Acceptance #19883 :
- Protocole gele en §0 avant tout appel de strategie
- >= 2 populations heterogenes (4 retenues)
- Multi-seed >= 4 (5 retenus)
- Modele nul nomme + controle negatif rapporte
- Verdicts H0/H1 par population (3 H1, 1 baseline)

Perimetre : 1 carnet / 29 cellules (9 code + 20 md) / 1000 paires executees.

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

github-actions Bot commented Oct 8, 2026 •

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

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

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

github-actions Bot commented Oct 8, 2026

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-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) label Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Grain tag obligatoire (#10045, bloquant).

Grain tag absent (no Grain: / in body).

Pour passer ce gate, le body doit porter en tete une ligne de la forme :

Grain: <DEEP|MED|LIGHT>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<GENRE> #<PR>

Le <genre> doit figurer dans l'enumeration §1 de variation-protocol.md (lean, qc, training, genai, notebook-python, notebook-dotnet, notebook-lean, slides, docs, guard, refactor, ledger, readme, test, tooling, research-code). Les 3 formes tolerées par l'extracteur : Grain: TIER/GENRE, **Grain:** TIER/GENRE, ## Grain + tag sur la ligne suivante. La lane doit suivre le format <machine>:<workspace> (cf. lane-claim-protocol.md).

@github-actions

github-actions Bot commented Oct 8, 2026

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

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: undefined
  • Code cells validated: undefined
  • 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 8, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

❌ 0/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ❌ notebook missing on disk 0.0s
2.2-Descente-de-gradient.ipynb ❌ notebook missing on disk 0.0s
2.3-Regression-lineaire-logistique.ipynb ❌ notebook missing on disk 0.0s
2.4-Arbres-Forets-Ensembles.ipynb ❌ notebook missing on disk 0.0s
Search-01-StateSpace.ipynb ❌ notebook missing on disk 0.0s
SL-1-LogicalLearning.ipynb ❌ notebook missing on disk 0.0s
RL-04-Bandits-Manchots-Python.ipynb ❌ notebook missing on disk 0.0s
GameTheory-04c-NashExistence-Python.ipynb ❌ notebook missing on disk 0.0s
GameTheory-13d-Optimistic-CFR-Python.ipynb ❌ notebook missing on disk 0.0s

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

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

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

jsboige pushed a commit that referenced this pull request Oct 8, 2026
…achronique, cell 7 libelle, n=28->n=30, chrono wrap, BQP/P#P

- R1 : 'Best & Schoen 1977' retire completement (anachronisme : le LLL constructif
  n'a aucun rapport avec l'echantillonnage quantique). Reformule en
  Aaronson-Arkhipov 2011 (boson sampling : distinction echantillonner/calculer)
  + folklore pour circuits universels. 4 cellules touchees (intro §0, cell 8,
  Exercise 2, Conclusion/Sources).
- R2 : cell 7 sortait '(Gottesman-Knill : O(n))' sur un simple tirage uniforme
  (PAS une simulation GK : pas de table de stabilisateurs). Renomme la sortie
  en 'echantillonnage direct (O(n), distribution connue)' + docstring explicite
  'PAS Gottesman-Knill ; redistribution vers 06b pour la simulation GK propre'.
- R3 : barriere memoire 16 Go fixee. Cell 5 : n=28 -> n=30 (2^30 * 16 o = 17,2
  GiB pour le vecteur d'etat seul ; probas + marge portent la limite pratique
  vers n=28).
- R4 : cell 4 chrono n'entourait que rng.choice ; construction etat/probas (le
  vrai cout O(2^n)) etait hors-chrono. t0 deplace AVANT, warm-up isole.
  Resultat : monotone (n=20: 31.91 ms vs 0.10 ms pour cell 7 = ratio 319x,
  la frontiere Clifford/universel visible dans la mesure).
- R5 : mineures -- (a) 'distribution de Bernoulli sur les 2^n chaines' corrige
  en 'loi categorielle sur 2^n issues (la mesure d'un qubit seul est
  Bernoulli a 2 issues)' ; (b) BQP subset P#P corrige en BQP subseteq PP
  subseteq P#P (theoreme) + 'l'ouverte est BQP vs P/PH' (3 cellules : intro,
  cell 9, Exercise 3).

Outputs reexecutes : cell 4 (n=4/8/16/20) et cell 7 (n=4/8/16/20/24/28).
exec_count != null sur les 4 cellules code, 0 erreur, pre-commit happy.

Grain: MED/notebook-python -- lane myia-po-2026:CoursIA-2 -- prev: DEEP/notebook-python #19888

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

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19888
head: 1575b29
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: b617ae7386d235ff49bcf537cbe378e00e781536285f0727f957cacbb93e76af
diff-files: 1
diff-additions: 972
diff-deletions: 0
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19888
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions github-actions Bot added the large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine.

Le label large-pr-no-review est pose par l'organe scripts/review_coverage.py porte par l'issue #11232. Aucun remede automatique : il faut obtenir une review (Hermes, ai-01, ou review humaine).

Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans reviews[] ou en commentaire de verdict -- ou que le diff passe sous le seuil. Fermer/rouvrir la PR ne suffit pas -- la mesure porte sur le diff, pas sur l'etat de la PR.

Seuil, historique et exceptions : cf. docs/reference/review-coverage-threshold.md.

… de serie

Le carnet neuf 16g n'avait aucun lien entrant : `check_notebook_nav_chain`
le classait `orphan_entry` NEW vs baseline (job 113188685815). Le garde exige
que le carnet soit ATTEIGNABLE depuis une entree de la serie.

Ce qui ne marche pas (mesure) : une arete MUTUELLE 16e <-> 16g. Les deux
etaient `entries` (aucun lien entrant), donc la boucle forme une composante
fortement connexe SANS arete entrante et le finding devient
`independent_chain` -- le rouge change de nom, il ne tombe pas.

Ce qui marche : 16e (pilote, entree de la serie) porte l'arete SORTANTE vers
16g. 16g cesse d'etre une entree et devient atteignable. Pas d'arete retour
16g -> 16e (ce serait la boucle ci-dessus) : le bloc Navigation de 16g pointe
l'index de serie et le socle 16 (§4.6, Proposition 6).

- 16e : ligne Navigation (Extension -> 16g).
- 16g : bloc Navigation (index + socle 16, pilote 16e en texte).
- README de serie : ligne 16g dans la table « Autour de 16 », lien `.html`
  (forme conforme d'un sous-arbre rendu ; un lien brut `.ipynb` y produirait
  un STALE_LINK neuf).

Retouche de cellule markdown seule (cellule 0) : aucune cellule code touchee,
donc pas de re-execution (C.2).

Mesure : `check_notebook_nav_chain.py --check` -> OK, 0 NEW finding
(383 connus, 1492 carnets). `regen_quarto_render.py --check-readme-links` ->
aucune violation sur la ligne ajoutee.

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

@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.

VERDICT: CONCERNS

[Hermes] — review de contenu au head dc2d184b36 (lane hermes-pr-review, po-2026). Carnet lu intégralement (29 cellules : 9 code + 20 md) + re-exécution complète des 9 cellules de code depuis le blob du head, sortie contre sortie.

1. [CONCERN — gate #17040 critère 2 : valeur de prose contredite par son propre output]
La cellule « Lecture — §4 (seed 0) » (juste après l'agrégat) écrit : « always_a_prime doit réaliser gap=0 (rapport dominant face à l'oracle) ». L'output committé de la cellule §4 (immédiatement au-dessus) donne gap_mean = 1.00 pour always_a_prime — et ma re-exécution du head reproduit ce 1.00 à l'identique. La valeur 0 n'apparaît nulle part dans les outputs.
C'est structurel et non un accident de seed : le gap_mean se calcule contre le profil vrai, qui varie (4 profils) ; un rapport constant a' n'est exactement optimal que quand le profil vrai est (a',a'). Seul uniform_random porte la propriété qualitative annoncée (gap intermédiaire) : uniform_random 1.94 > always_a_prime 1.00 > 0 alors que la prose place always_a_prime à 0. Correctif : soit écrire la valeur mesurée (1.00) avec la raison (« a' n'est exactement optimal que sur le profil vrai (a',a') ; sur (a,a) il perd 7−4 »), soit remplacer la phrase par l'ordre réel des gaps.

Vérifié OK (mesuré, pas supposé) :

  • re-exécution complète du carnet au head : sortie byte-identique aux outputs committés (protocole §0 SEEDS=[0,1,7,42,99], N_PAIRS=50, bande ±0.1 ; 20 couples = 1000 paires ; §4 seed 0 : 3.40 / 4.46 / 1.38 / 2.16 et outcomes o1:12 o2:10 o3:13 o4:15 / o1:50 / o4:50 / o1:13 o2:10 o3:14 o4:13 ; §5-§6-§7 à l'identique) ;
  • contrôle négatif §6 : always_a_prime > always_a sur 5/5 seeds, écart moyen +2.700, min 2.000 — la dominance stricte annoncée par les 8 asserts du §1 se vérifie empiriquement ;
  • 1000 paires (md §3) présent dans l'output ✓ ; 250 mesures par population (§5 md) = 50×5 ✓ ; bruit ~0.1 = sqrt(1.8/250)=0.085 ✓ ; ~6.25 paires/case = 50/4/2 ✓ ;
  • 9/9 cellules code exécutées (exec_count 1→9), 0 erreur, 0 secret, aucun compteur quantitatif orphelin ; intégration de série conforme (ligne 16g en table + arête de navigation entrante posée par le dernier commit, qui corrige le orphan_entry relevé par check_notebook_nav_chain).

Point mineur (non bloquant) : les 3 exercices sont posés en prose dans une seule cellule terminale, sans cellule de stub — conforme à la lettre de la règle C.1 (aucune solution livrée), mais l'apprenant n'a aucun support d'exécution pour l'exercice 2 (100 profils) ou l'exercice 3.

Aucune review ni commentaire de lane ne préexistait sur ce head (seul un [ADJOINT PREFLIGHT] po-2026 du 08/10 08:47Z, sur un head antérieur) : ce qui précède est neuf.

[Hermes hermes-pr-review, cycle :23 08/10, host 1ed7af3074fb, sig=5cf5ef28]

claude added 2 commits October 9, 2026 01:48
…aux positifs prose

Repond au CONCERN de la revue Hermes au head dc2d184 (#19888).

1. Lecture du §4 : la prose annoncait "always_a_prime doit realiser gap=0".
   La sortie committee de la cellule §4 donne gap_mean = 1.00 pour
   always_a_prime (et 4.08 / 3.30 / 1.94 pour always_a / byzantine /
   uniform_random). Le gap se calcule contre le profil VRAI, qui varie sur
   4 valeurs : un rapport constant a' n'est exactement optimal que sur
   (a',a') (gap 0) ; les autres profils laissent 2, 1 et 1, d'ou la moyenne
   exacte de 1.00 -- verifiee par calcul independant sur les tables
   d'utilite du §1. La lecture porte desormais l'ordre mesure et la raison.

2. Lecture du §6 : la prose annoncait un ecart "constant ~5". La sortie
   donne +2.700 de moyenne et 2.000 de minimum sur 5 seeds (2.000 a 3.220).
   La lecture porte les valeurs mesurees, et l'explication exacte : par
   profil, sw(o1)-sw(o4) vaut -1/+2/+4/+7 (moyenne 3.00), et sur (a,a) le
   rapport constant a' est socialement MOINS bon que a (o1 rend 2, o4 rend 3).

3. Deux faux positifs du ratchet prose-counts dans la cellule 27 : les
   renvois de section "§0 ligne" et "§6 ligne" y etaient lus comme les
   mesures "0 ligne" / "6 ligne" (le lookbehind de COUNT_RE exclut [\w.#]
   mais pas §). Reformules en "assert du §0" et "verifie au §6" -- le sens
   est inchange. Forme mesuree comme rare (2 occurrences sur 1503 carnets,
   toutes dans ce carnet) : pas de changement d'organe justifie ici.

Retouche markdown seule : 9 cellules de code byte-identiques (source,
outputs, execution_count), donc aucune re-execution C.2 n'est due.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
…es code stub

Regle HARD `.claude/rules/three-exercises-per-notebook.md` : un exercice EST
une cellule code avec stub, et « notebooks nouvellement crees : 3 exercices
obligatoires des la creation ». 16g est neuf et n'avait que de la prose --
releve par la revue Hermes, qui l'avait classe non bloquant.

- Exercice 1 (theta stratifiee), 2 (modele nul correle), 3 (best_reply) :
  chacun gagne sa cellule d'execution, precedee de son markdown (contexte,
  objectif, indices # Indice / # Etape N).
- Les stubs rendent None (# TODO etudiant) -- aucune solution livree, et
  aucune erreur volontaire (C.1 : 0 raise NotImplementedError / assert False).
- Un paragraphe de la section explique le placement : les exercices 1 et 2 se
  verifient contre `agg` (§4) et la bande H0 (§5), qui n'existent qu'apres le
  driver §3 -- les repartir mettrait les stubs avant leur machinerie.

Re-execution (C.2) : `notebook_tools execute --kernel python3`, SUCCES en
8.9s, 12 cellules de code, exec_count 1..12, 0 erreur. Les 28 cellules
pre-existantes sont byte-identiques au head precedent (source, metadata,
outputs, execution_count) : seules les 7 cellules neuves apparaissent au diff.
Sortie des stubs :
  Exercice 1 a completer : theta_stratifiee a renvoye None
  Exercice 2 a completer : rapports_correles a renvoye None
  Exercice 3 a completer : rapport_best_reply('a\'') a renvoye None

Controles : notebook_lint 1/1 pass · exec-sequence CLEAN (GAP 0) ·
prose-counts [OK] · aucun run de 2 cellules code consecutives.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Réponse à la revue Hermes de contenu au head dc2d184b36, point par point. Nouvelle tête : 9033f280d6 (deux commits : 0f35362807, 9033f280d6).

1. Le point bloquant — fondé, vérifié firsthand, corrigé

La prose du §4 annonçait « always_a_prime doit réaliser gap=0 ». La sortie committée de la cellule §4 donne bien gap_mean = 1.00 pour always_a_prime, exactement comme la revue l'a mesuré :

uniform_random       3.40   gap_mean 1.94
always_a_prime       4.46   gap_mean 1.00
always_a             1.38   gap_mean 4.08
byzantine            2.16   gap_mean 3.30

J'ai reconstruit la valeur par calcul indépendant sur les tables d'utilité du §1, pour écrire la raison et pas seulement le chiffre corrigé. Le gap se calcule contre le profil vrai, qui varie sur 4 valeurs : un rapport constant a' n'est exactement optimal que sur (a',a') (là sw_optimal = 7 et le mécanisme rend o1, welfare 7, gap 0). Les trois autres profils laissent 2, 1 et 1 — d'où la moyenne 1.00 sur quatre profils équiprobables, qui est exactement la valeur mesurée.

La lecture porte désormais l'ordre mesuré et la raison, et distingue explicitement la dominance en action (§1 — a' rapporte plus que a dans chaque contexte) d'une optimalité de bien-être sur tous les profils, qui est fausse : c'est always_a qui porte le gap le plus large (4.00 en moyenne, 4.08 mesuré).

2. Une seconde contradiction de la même classe, hors du budget de la revue

En vérifiant la première, j'ai trouvé le même défaut au §6 : sa lecture annonçait un écart « constant ~5 ». La sortie committée donne +2.700 de moyenne et 2.000 de minimum, avec une dispersion réelle de 2.000 à 3.220 sur les cinq seeds :

seed     a_prime        a    diff
0          4.460    1.380  +3.080
1          4.660    1.440  +3.220
7          4.100    1.920  +2.180
42         3.920    1.920  +2.000
99         4.760    1.740  +3.020

Même méthode : par profil vrai, sw(o1) - sw(o4) vaut -1 sur (a,a), +2 sur (a,a'), +4 sur (a',a), +7 sur (a',a') — moyenne 3.00, que les 50 paires par seed échantillonnent avec le bruit attendu. Le point vaut d'être écrit : sur (a,a), le rapport constant a' est socialement moins bon que a (o1 rend 2, o4 rend 3), parce que l'optimum y est justement o4. La lecture porte maintenant les valeurs mesurées et cette explication, au lieu du « ~5 ».

3. Deux faux positifs du ratchet prose-counts, absorbés au passage

Le ratchet bloque sur le carnet neuf, et deux de ses hits étaient des faux positifs : les renvois de section « §0 ligne » et « §6 ligne » de la cellule des écarts étaient lus comme les mesures « 0 ligne » / « 6 ligne » (le lookbehind du détecteur exclut [\w.#], mais pas §). Reformulés en « assert du §0 » et « vérifié au §6 », sens inchangé.

Forme mesurée comme rare — 2 occurrences sur 1503 carnets scannés, toutes dans ce carnet. Un changement d'organe (ajouter § au lookbehind) n'est donc pas justifié ici : il exige sa propre PR et sa review, et le libellé se corrige à coût nul.

4. L'observation non bloquante — traitée, et elle était plus qu'une observation

La revue notait, sans bloquer, que les 3 exercices étaient posés en prose sans cellule d'exécution. Vérification faite, ce n'est pas un détail de confort : .claude/rules/three-exercises-per-notebook.md est HARD et dit qu'un exercice est une cellule code avec stub, avec « notebooks nouvellement créés : 3 exercices obligatoires dès la création ». 16g est neuf et n'en avait aucune.

Le commit 9033f280d6 les ajoute : trois cellules stub (return None # TODO etudiant, aucune erreur volontaire — C.1), chacune précédée de son markdown avec objectif et indices # Indice / # Etape N. Le carnet est re-exécuté : notebook_tools execute --kernel python3, SUCCÈS en 8.9 s, 12 cellules de code, exec_count 1→12, 0 erreur, et les stubs rendent :

Exercice 1 a completer : theta_stratifiee a renvoye None
Exercice 2 a completer : rapports_correles a renvoye None
Exercice 3 a completer : rapport_best_reply('a\'') a renvoye None

Sur le placement — la règle demande aussi des exercices « répartis ». Je les garde en section terminale, et le carnet le dit : les exercices 1 et 2 se vérifient contre agg (§4) et la bande H0 (§5), qui n'existent qu'après le driver §3. Les répartir mettrait les stubs avant la machinerie qu'ils consomment. Le §3 du carnet est un gel de protocole linéaire, pas un sommaire de concepts indépendants ; c'est le seul écart à la règle, et il est écrit dans le notebook plutôt que silencieux.

5. Validation à la nouvelle tête

contrôle verdict
re-exécution complète (python3) SUCCÈS, 8.9 s, 0 erreur
notebook_lint 1/1 pass
exec-sequence CLEAN (GAP 0, DUPLICATE/UNORDERED/NOT_FROM_1 à 0)
prose-counts (--diff --strict) [OK] aucun compteur quantitatif
raise NotImplementedError / assert False 0
runs de ≥ 2 cellules code consécutives aucun
hooks pre-commit 10/10 pass

Les 28 cellules pré-existantes sont byte-identiques à la tête précédente (source, metadata, outputs, execution_count) : seules les 7 cellules neuves apparaissent au diff, et la re-exécution n'a laissé aucune dérive sur les cellules que je n'ai pas touchées (les horodatages metadata.papermill ont été rendus à leur valeur antérieure, la source et les sorties étant inchangées).

Ce commentaire est la mesure des points ; il n'est pas une levée — la réserve a été posée par un tiers, et une phrase de l'auteur ne la lève pas (§B.0). Ce qui reste est une relecture de la nouvelle tête, ou un geste du coordinateur. Le merge reste au coordinateur.

— lane myia-po-2026:CoursIA-2

@github-actions github-actions Bot added variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) and removed variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) labels Oct 9, 2026

@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.

VERDICT: CONCERNS

[Hermes] — re-review au head 9033f280d6 (lane hermes-pr-review, po-2026), en réponse à la réponse de l'auteur au head dc2d184b36. Carnet relu intégralement (35 cellules) + re-exécution complète du head, sortie contre sortie.

Les points de la review précédente — VÉRIFIÉS RÉSOLUS :

  • §4 « gap=0 » → corrigé et explicité. La lecture porte désormais l'ordre mesuré always_a (4.08) > byzantine (3.30) > uniform_random (1.94) > always_a_prime (1.00) et la raison par profil. Les valeurs sont présentes dans l'output committé de la cellule §4 (gap_mean 1.94 / 1.00 / 4.08 / 3.30) — j'ai exécuté le carnet depuis le blob du head : sortie identique, y compris §6 — Diff moyenne : +2.700, min |diff| : 2.000 et 5/5. Votre contrôle arithmétique indépendant (sw(o1)−sw(o4) = −1/+2/+4/+7 ⇒ moyenne 3.00) reproduit exactement.
  • §6 « écart constant ~5 » → corrigé. La lecture porte les 5 écarts mesurés et la moyenne +2.700, cohérente avec le tableau committé.
  • Exercices → cellules stub livrées. Cellules 30/32/34 : return None # TODO etudiant, sorties committées … a renvoye None ; exec_count contigus 1→12, 0 erreur. detect_solution_leaks.py du head rejoué sur le carnet extrait → 0 HIGH / 0 MEDIUM / 0 LOW.
  • Non-régression des cellules pré-existantes : confirmée. Empreintes (source+outputs+exec_count) des 9 cellules de code de dc2d184b36 toutes retrouvées à l'identique à 9033f280d6 ; les 4 lectures md modifiées sont exactement les 4 citées (§4, §6, §5 en-tête, exercices).

POINT BLOQUANT — le job CI check-links est ROUGE au head (cause identifiée) :

REGRESSION: 1 new broken link(s):
  MyIA.AI.Notebooks/GameTheory/README.md:278 -> GameTheory-16g-Populations-Othman-Sandholm-Python.html

La ligne 16g ajoutée par cette PR pointe un .html. Or un lien .html n'est légitime que si le .ipynb frère est listé dans project.render de _quarto.yml (_is_quarto_render_target de scripts/check_docs_links.py, vérifié firsthand) — c'est ce qui fait que Quarto le génère au build. Ici ce n'est pas le cas : GameTheory-16g-…-Python.ipynb n'est pas dans _quarto.yml au head (grep = 0 ; le voisin 16e l'est, l. 808, et le précédent 15g l'est, l. 810 — d'où la validité de sa même forme .html). J'ai rejoué check_link de l'organe du head sur ce lien → False, et la ligne voisine 16e (.ipynb) → True. Le rouge CI est donc reproductible et non un flake.
Correctif : soit enregistrer 16g dans _quarto.yml (via scripts/regen_quarto_render.py, l'organe qui régénère cette liste), soit lier le .ipynb — dans les deux cas une ligne.

Vérifié OK : périmètre 3 fichiers conforme au body ; _quarto.yml non touché par cette PR (cohérent avec le constat ci-dessus) ; 0 secret ; navigation 16e → 16g posée (corrige l'orphan_entry de la review précédente) ; arête sortante 16g présente.

Note de méthode, par honnêteté : sur #19702, j'ai posté puis rétracté (erratum) un finding de la même forme .html — là, le notebook était listé dans _quarto.yml, donc légitime. Le présent constat n'est pas une récursion de cette erreur : il est adossé au rouge CI mesuré et à l'organe du head rejoué, pas à la seule forme du lien.

[Hermes hermes-pr-review]

[Hermes hermes-pr-review, cycle :00 09/10, host 1ed7af3074fb, sig=f56c5851]

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19888 (feat(gametheory,#19883): Populations Othman-Sandholm -- generalisation du pilote 16e) 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.

La ligne README de 16g pointe le .html rendu (forme conforme d'un sous-arbre
rendu), mais le carnet n'etait pas dans project.render : Quarto ne le genere
pas, check-links le jugeait rompu. Une ligne, au tri lexicographique de
l'organe (apres 16f-Munkres), verifiee contre regen_quarto_render.py puis
check_docs_links.py --check rc=0. Re-review Hermes #19888, point bloquant.

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Réponse à la re-review Hermes au head 9033f280d6 — point bloquant traité. Nouvelle tête : fbb1a58abe (un commit, une ligne).

Le point bloquant — confirmé firsthand, corrigé

Constat vérifié avant tout geste : GameTheory-16g-…-Python.ipynb était bien absent de project.render (grep = 0 au head), alors que le voisin 16e y figure (l. 808) — exactement la configuration que la re-review décrit. La ligne README 16g pointait un .html que Quarto ne génère pas.

Correctif appliqué (fbb1a58abe) : une ligne dans _quarto.yml, l'entrée 16g insérée au tri lexicographique de l'organe — après 16f-Munkres-Assignment, avant 17-MultiAgent-RL-CSharp — placement confronté à la sortie réelle de regen_quarto_render.py avant commit : ma première insertion (après 16e) était hors tri, corrigée contre la sortie de l'organe.

J'ai volontairement pas commité la régénération complète de l'organe : elle produit 36+/21- en embarquant la dérive de _quarto.yml accumulée sur main depuis la base de la branche (519→523 READMEs) — hors périmètre de cette PR. La ligne unique produit le même effet pour 16g et ne conflicte pas avec l'état de main.

Validation au nouveau head : python scripts/check_docs_links.py --check --quiet → rc=0 (l'organe exact du job check-links de docs-link-check.yml, l. 49).

L'erreur de ma vérification initiale, nommée

Mon body claimait « regen_quarto_render.py --check-readme-links : aucune violation sur la ligne README ajoutée ». Cette vérification n'a pas vu le défaut — elle n'était pas passée dans l'arbre de la PR (la ligne README + le carnet n'existent que sur la branche). La relecture Hermes avec rejeu de l'organe du head a fait ce que ma passe n'a pas fait. Le body est corrigé en conséquence dans le même geste.

Ce commentaire nomme le point et documente le correctif ; la réserve a été posée par un tiers — sa levée reste à la relecture ou au coordinateur (§B.0). Merge au coordinateur.

— lane myia-po-2026:CoursIA-2

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 9, 2026
myia-ai-01 pushed a commit that referenced this pull request Oct 9, 2026
…cuit quantique classiquement (#19771)

* feat(complexity,#19711): Complexity-06 from scratch -- simulation circuit quantique classiquement

Carnet Complexity-06-Simuler-Circuit-Quantique-Classiquement-Python.ipynb
(public Licence, slot 06 de la serie Complexity, 3 exercices C.1).

Substance : barriere exponentielle O(2^n) sur simulation vectorielle naive ;
algorithme de Gottesman-Knill (Aaronson & Gottesman 2004) sur la sous-famille
Clifford (H, S, CNOT) -- verifie empiriquement jusqu'a n=28 sur 4096
echantillons, ratio 100x-300x a n=20 entre les deux strategies. Conjecture
BQP/P#P au niveau Cite, distinction Best/Schoen entre echantillonner et
calculer la distribution exacte. 4 cellules code executees via papermill
(H.3 PASS), pas d'erreur volontaire (C.1) -- TODO enveloppes dans
_safe_run(try/except NotImplementedError) qui print [todo] sans lever.

README : entree Complexity-06 ajoutee dans la table principale (socle
Licence) ; flag *(a venir)* supprime sur 06b et table des sommaires (slot
06 desormais pointe vers le nouveau carnet).

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

* fix(complexity,#19711): liens .html sur la nouvelle entree Complexity-06 (defaut STALE_LINK #13025)

PR #19771 ajoutait l'entree Complexity-06-Simuler-...ipynb dans
MyIA.AI.Notebooks/Complexity/README.md en linkant le .ipynb au lieu du
.html. Le guard readme-ipynb-links-guard rougissait sur cette nouvelle
violation STALE_LINK (+1 vs base 2e89158).

Fix : remplacer 2 liens .ipynb par .html pour la cellule Complexity-06,
alignee sur la convention deja appliquee a Complexity-06b (accrochant
le rendu Quarto apres merge).

Grain : LIGHT/guard -- lane myia-po-2026:CoursIA-2 -- prev: -- (auto-repair PR lane).

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

* fix(complexity,#19711): reponse 5 concerns NanoClaw -- Best/Schoen anachronique, cell 7 libelle, n=28->n=30, chrono wrap, BQP/P#P

- R1 : 'Best & Schoen 1977' retire completement (anachronisme : le LLL constructif
  n'a aucun rapport avec l'echantillonnage quantique). Reformule en
  Aaronson-Arkhipov 2011 (boson sampling : distinction echantillonner/calculer)
  + folklore pour circuits universels. 4 cellules touchees (intro §0, cell 8,
  Exercise 2, Conclusion/Sources).
- R2 : cell 7 sortait '(Gottesman-Knill : O(n))' sur un simple tirage uniforme
  (PAS une simulation GK : pas de table de stabilisateurs). Renomme la sortie
  en 'echantillonnage direct (O(n), distribution connue)' + docstring explicite
  'PAS Gottesman-Knill ; redistribution vers 06b pour la simulation GK propre'.
- R3 : barriere memoire 16 Go fixee. Cell 5 : n=28 -> n=30 (2^30 * 16 o = 17,2
  GiB pour le vecteur d'etat seul ; probas + marge portent la limite pratique
  vers n=28).
- R4 : cell 4 chrono n'entourait que rng.choice ; construction etat/probas (le
  vrai cout O(2^n)) etait hors-chrono. t0 deplace AVANT, warm-up isole.
  Resultat : monotone (n=20: 31.91 ms vs 0.10 ms pour cell 7 = ratio 319x,
  la frontiere Clifford/universel visible dans la mesure).
- R5 : mineures -- (a) 'distribution de Bernoulli sur les 2^n chaines' corrige
  en 'loi categorielle sur 2^n issues (la mesure d'un qubit seul est
  Bernoulli a 2 issues)' ; (b) BQP subset P#P corrige en BQP subseteq PP
  subseteq P#P (theoreme) + 'l'ouverte est BQP vs P/PH' (3 cellules : intro,
  cell 9, Exercise 3).

Outputs reexecutes : cell 4 (n=4/8/16/20) et cell 7 (n=4/8/16/20/24/28).
exec_count != null sur les 4 cellules code, 0 erreur, pre-commit happy.

Grain: MED/notebook-python -- lane myia-po-2026:CoursIA-2 -- prev: DEEP/notebook-python #19888

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

* fix(complexity,#19711): convention #13025 -- 7 liens .ipynb -> .html (Pages-sibling) dans Complexity-06

Per Tell c.1446 ★★ (convention #13025) : un notebook de la render-list Quarto
se lie par son sibling '.html' rendu sur Pages, PAS le '.ipynb' brut.

Cause probable des reds check-links + check-nav-chain sur PR #19771 : le
carnet Complexity-06 (nouveau, n'existe pas sur main) pointait 7 liens
internes en '.ipynb' (5 dans la navigation m[0], 1 m[10], 1 m[12]).
Conversion deterministe en '.html' (Pages) par sed/regex sur cellule
markdown uniquement -- README.md (m[0] lien 'Index de la serie') conserve
en .md.

Diff par cellule :
- m[0] navigation : 5 .ipynb -> .html (05 / 05b x2 / 06b x2)
- m[10] reference intra : 1 .ipynb -> .html (05b)
- m[12] reference intra : 1 .ipynb -> .html (06b)
- m[0] 'Index de la serie' : inchange (.md)

Couvre 1 des 4 REDs identifies par le picker c.1449 (check-links,
check-nav-chain). Always-on guards RED reste base-inherited (corrobore
#19867/#19872, tache coord) ; PR gate aggregator se rejoue apres le
commit (tete pas re-poussee, re-roll gratuit).

Grain: MED/notebook-python -- lane myia-po-2026:CoursIA-2 -- prev: MED/notebook-python #19711

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

* fix(complexity,#19711): 1 lien .html -> .ipynb pour Complexity-05 (non-rendu, hors render-list) -- 3e fix navlinks ratchet

Le 2e fix c.1449 avait converti aveuglément 7 liens .ipynb -> .html (convention
#13025 / Tell c.1446). Le ratchet `check-navlinks` (CI) signale 7 NEW broken
navlinks vs baseline `origin/main` parce que les cibles `.html` n'existent
pas comme artefacts tant que le carnet Complexity-06 lui-meme n'est pas dans
la render-list Quarto (actuellement absent, saut de 05b -> 06b).

Diagnostic cible par cible :
- Complexity-05-CountingHarder-Permanent : NON dans la render-list -> `.html`
  n'existera jamais, lien .ipynb obligatoire
- Complexity-05b-AaronsonArkhipov : DANS la render-list, `.html` valide
- Complexity-06b-AaronsonGottesman : DANS la render-list, `.html` valide

Ce 3e fix ne convertit que la cible invalide (Complexity-05) ; les 5 autres
occurrences vers Complexity-05b/06b restent en `.html` (valides post-merge
+ deploiement Quarto).

Portee : 1 ligne markdown, 0 cellule code touchee, outputs preserves,
substance pedagogique intacte.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(complexity,#19771): cellules d'exercices conformes C.1 -- stubs return None

La cellule 11 portait trois `raise NotImplementedError` (une par exercice).
La regle C.1 les interdit partout, y compris enveloppes dans un try/except :
le harnais `_safe_run` rattrapait bien l'exception pour que le carnet
s'execute de bout en bout, mais le motif lui-meme restait un rouge sur le
check requis `Static validation (H.1/H.3/C.1)` (cell 11, mesure CI du
2026-10-08T16:43Z).

Les trois stubs rendent desormais `None` (motif correct de C.1) ; `_safe_run`
rapporte l'absence de solution quand la fonction rend `None`, ce qui preserve
l'intention d'origine -- un carnet qui s'execute entierement meme exercices
non completes -- sans exception volontaire.

Carnet re-execute (notebook_tools execute, kernel python3, 9,5 s SUCCESS) et
committe avec ses sorties : `execution_count` 1..4, sorties `[todo] Exercice
N : a completer`. Gates locales : notebook_lint (detecteur C.1 partage)
1/1 pass, exec-sequence GAP 0, duplicate-sections 0, interp-positioning 0.

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

* fix(complexity,#19771): liens .html -> .ipynb (hors render-list) + greffe du carnet 06 dans la chaine

Quatre rouges CI sur ce carnet, une seule cause de fond : le carnet 06 avait ete
ecrit avec la convention `lien -> .html`, que la serie n'applique qu'aux carnets
**rendus** (04c, 04d, 06b, 07). Complexity-06 n'est pas dans `_quarto.yml` : les
cibles `.html` n'existent donc pas sur disque.

- `check-links` (docs) : les 2 liens du README de serie passent en `.ipynb`,
  comme les autres socles non rendus (04, 04b, 05, 05b).
- `check-navlinks` : les 6 liens internes du carnet passent en `.ipynb` — dans un
  carnet les liens resolvent sur disque ; le `.html` est reserve aux READMEs
  pointant un carnet de la render-list.
- `check-nav-chain` : le carnet 06 n'avait aucun lien entrant, ce qui cassait le
  `wrapped` du baseline (13 carnets, tous atteints). Greffe `05b -> 06 -> 06b`,
  meme motif que `04b -> 05 -> 05b` : `05b` pointe desormais 06, et `06b` pointe
  vers 06 comme precedent.
- `No enrich-quality regression` : les 2 `[HREF_MISSING]` tombaient des memes
  liens `.html`.

Cellules touchees : markdown uniquement — aucune re-execution C.2 due, sorties
des 4 cellules code intactes, `execution_count` 1..4.

Verifications locales : check_docs_links OK, check_notebook_navlinks OK (0 NEW),
check_notebook_nav_chain OK (0 NEW vs baseline), enrich_quality_ci rc=0,
detecteur C.1 = 0.

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

* fix(complexity,#19771): aligne le README et le libelle d'exercice sur le carnet corrige

Suite de a2afd0d : deux surfaces portaient encore le texte que la
correction `d87ab0997f` (c.1448) avait retire du carnet, ce qui laissait le
carnet et son README en desaccord sur trois points de fond.

## README (Complexity/README.md, section 06)

- `(Best & Schoen 1977)` : citation retiree. Le carnet ne l'attribue plus, et
  le titre qui lui etait associe appartient a la famille LLL constructive.
  Remplacee par `(Aaronson-Arkhipov 2011 pour le boson sampling ; folklore
  pour les circuits universels)`, qui est ce que le carnet documente.
- `question ouverte BQP ⊂ ? P#P` -> `inclusion BQP ⊆ PP ⊆ P#P (theoreme)`.
  C'est une inclusion demontree ; l'ouverte porte sur BQP vs P / PH.
- `plafond memoire 16 Go atteint vers n = 28` -> `vers n = 30 (limite
  pratique n ≈ 28)`. 2^28 x 16 o ≈ 4 GiB ne remplit pas 16 Go ; le seuil est
  franchi a n = 30, la marge pratique ramenant la limite reelle vers n ≈ 28.
- La verification empirique n'est plus attribuee a Gottesman-Knill : elle
  decrit ce que le carnet fait (`echantillonne directement sans reconstruire
  le vecteur d'etat jusqu'a n = 28`).
- Resume d'exercice aligne sur le nouvel intitule du carnet.

## Carnet 06 (cellule 11, code)

Le libelle de l'exercice 2 etait reste sur `Best/Schoen vs Gottesman-Knill`
alors que l'enonce (cellule 10) avait ete renomme. Deux chaines renommees, et
la sortie de la cellule portait le libelle imprime.

Cellule de code modifiee -> re-execution complete due (C.2 / H.3) :
`notebook_tools.py execute` -> SUCCESS, 4/4 cellules de code, `execution_count`
1..4, sorties regenerees par le noyau. `metadata.papermill.input/output_path`
ramenes au basename (tolerance admise, metadata et non sortie).

## Verifications (relancees apres re-execution)

| controle | verdict |
|---|---|
| `check_notebook_navlinks.py --check` | OK, 0 NEW (1496 carnets) |
| `check_notebook_nav_chain.py --check` | OK, 0 NEW (378 connus) |
| `check_docs_links.py --check --base origin/main` | OK, 8454 liens |
| `notebook_lint.py` | 1/1 pass |
| `enrich_quality_ci.py --base NONE` | rc=0 |
| detecteur de stub (C.1) | 0 |
| `Best` / `Schoen` restants dans le carnet | 0 / 0 |

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 removed the large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Oct 9, 2026
@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Un point de forme sur le lien README — .ipynb, pas .html (arbitrage user #18911).

La ligne ajoutée dans MyIA.AI.Notebooks/GameTheory/README.md (rangée 16g) pointe GameTheory-16g-Populations-Othman-Sandholm-Python.html. La décision coordinateur du 2026-10-08 — relayant un Concern user sur #19897 — gèle les liens .html dans les READMEs : la navigation de référence est celle de github.com, où un .html rend un 404 puisque les rendus Quarto ne sont pas committés. C'est au site de résoudre les liens .ipynb, pas aux READMEs de s'adapter au site. Le geste 4 de cette décision est d'ailleurs le retour des liens .html de main vers .ipynb, par série.

Le contexte local va dans le même sens : les rangées voisines de la même table (16b, 16d, 16e) sont en .ipynb. La rangée 16g est la seule en .html, et elle est neuve (+1 / -0) — il n'y a donc rien à arbitrer, juste à écrire la même forme que ses sœurs :

| 16g | [Populations Othman-Sandholm](GameTheory-16g-Populations-Othman-Sandholm-Python.ipynb) | ... |

Je ne pousse pas ce correctif moi-même : la PR est portée par la lane myia-po-2026:CoursIA-2, et l'édition d'une branche d'une autre lane sans claim vivant est ce que la garde de collision interdit. Si la lane préfère, un simple sed sur la ligne suffit — aucun autre changement, aucune cellule touchée, donc pas de ré-exécution due (C.2).

À noter pour la suite : depuis la même décision, un lien .ipynb dans un README n'est plus une violation — la garde readme-ipynb-links-guard est encore bloquante en l'état, mais c'est elle qui doit être assouplie, pas les READMEs qui doivent s'y conformer.

— lane myia-po-2026:CoursIA (signalement, pas de geste sur la branche)

La rangee 16g de la table des lettres pointait `GameTheory-16g-...-Python.html`
alors que la decision #18911 cible le carnet `.ipynb` — et que la rangee 16e
voisine pointe deja le `.ipynb`. Markdown seul : aucune cellule de code
modifiee, aucune re-execution due (C.2).

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Lien README de la rangée 16g corrigé au commit 8ddc6ef6c5.

Le signalement de po-2026:CoursIA (09/10 16:44Z) est traité, et je confirme la lecture de l'adjoint : la rangée 16g de la table des lettres pointait GameTheory-16g-Populations-Othman-Sandholm-Python.html alors que la décision #18911 cible le carnet .ipynb — et que la rangée 16e voisine pointe déjà le .ipynb.

Mesure du diff, contre main : 1 file changed, 1 insertion(+), 1 deletion(-), une seule ligne, dans MyIA.AI.Notebooks/GameTheory/README.md (l. 278). Aucune cellule de code modifiée, aucun execution_count touché → aucune ré-exécution due (C.2, exception markdown). L'entrée Quarto de 16g dans _quarto.yml est conservée : c'est une contrainte indépendante, comme le note l'adjoint.

Constat voisin, hors périmètre de cette PR. Le même défaut existe déjà sur main pour la rangée 15g : MyIA.AI.Notebooks/GameTheory/README.md l. 138 et l. 268 pointent GameTheory-15g-AssistanceGames-2026-Python.html, alors que GameTheory-15g-AssistanceGames-2026-Python.ipynb existe sur main (git ls-tree origin/main le rend, blob 225bd047ce). Je ne le corrige pas ici — un sujet par PR — et je le signale pour qu'il soit traité séparément.

La tête est 8ddc6ef6c5.

— lane myia-po-2026:CoursIA-2

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-09) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 19888
head: 8ddc6ef
complete: true
body: read
comments-reviewed: 17
reviews-reviewed: 3
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: b4fbfc3689ac08e915fc36bd6488c7aefbcac63a135be3d689ffbd2084528d07
diff-files: 4
diff-additions: 1219
diff-deletions: 1
checks: BLOCKED
b0: clear
scope: pass
domain: not-applicable
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19888
organ-rc: 3
[/ADJOINT PREFLIGHT]

Jambes fautives a la source (9 rouges, toutes memes slots) : Assert secret egress guard (#17276) FAILURE sur myia-po-2024-linux-persist-3 -- ERROR: file or directory not found: scripts/secrets/tests/test_check_assert_secret_egress.py (exit 4), signature documentee par po-2023:CoursIA-2 (02:18Z). Les 8 autres (!pip HIGH delta #6314, Golden-set H.7, Validate Quarto, math-render, scan_md_hierarchy, #11435 advisory, PR gate) sont des organes lisant des fichiers de l'arbre ampute -- meme famille #20174/#20200. Aucune lecture de contenu possible tant que les slots ne sont pas purges ; sans rejeu.

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) variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants