Skip to content

docs(18147): digerer GameTheory-16b (3 exemples guides) + 3 nouveaux exercices - #18297

Merged
myia-ai-01 merged 4 commits into
mainfrom
feature/18147-gt16b-exercices
Sep 29, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
feature/18147-gt16b-exercices

Conversation

@jsboige

@jsboige jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python -- lane myia-po-2026:CoursIA -- prev: LIGHT/ci-tooling #18295

Sujet

See #18147 (section A, cas 1) — GameTheory/GameTheory-16b-Automated-Mechanism-Design.ipynb. Les trois blocs titrés « Exercice » portaient des solutions complètes et exécutées : digestion (retitrage en « Exemple guidé », code et sorties conservés) puis trois nouveaux exercices non résolus, un par exemple, chacun placé juste après l'exemple qu'il étend.

Geste Cellules (après)
Titres Exercice 1/2/3 → Exemple guidé 1/2/3 [2], [4], [7]
Intro [0] : « Trois exercices » → « Trois exemples guidés » + phrase d'articulation [0]
Récap [9] : titre, 3 lignes du tableau, « miroir de l'exercice 3 » → « exemple guidé 3 » [9]
Ex.1 — générer en nombre d'agents (paiements nuls) [4]–[5]
Ex.2 — vérifier M* sur tous les profils [9]–[10]
Ex.3 — plafond de paiement contre plancher de surplus [13]–[14]

Le placement suit la règle des trois exercices (« répartis, pas tous en fin ») : chaque exercice vient après son exemple, et la lecture [6] reste adjacente à l'exemple qu'elle commente. count_exercises.py : 0 → 3, conforming: true.

Résultats attendus (vérifiés HORS notebook, script de référence, assertions vertes)

Exercice 1 — généralisation en nombre d'agents (paiements nuls : IR acquise, tout vient de DSIC)

n_agents profils tables d'issue admissibles DSIC∧IR J* (profil tout-1)
2 4 16 6 2
3 8 256 20 3

Le domaine est multiplié par 16, la part admissible tombe de 6/16 à 20/256 : la vue à deux agents ne pouvait pas le montrer.

Exercice 2 — M* sur les quatre profils

profil vrai J(M*) J*(profil) perte
(0, 0) 0 0 0
(0, 1) 0 1 1
(1, 0) 0 1 1
(1, 1) 2 2 0

M* n'est optimal qu'à (0,0) et (1,1). La vérification croisée de l'exemple guidé 2 s'arrêtait au cas (0,0) : elle laissait lire « le J annoncé est faux » là où la leçon est « le mécanisme est une réponse à une instance ».

Exercice 3 — deux durcissements, deux verdicts

durcissement candidats admissibles verdict
référence (DSIC ∧ IR) 4 096 18 — (dont 6 à paiements nuls, 12 avec paiements positifs)
A — plafond (p_i ≡ 0) 4 096 6 non vide
B — plancher de surplus (u_i ≥ 1) 4 096 0 vide, 176 candidats DSIC avec témoin

Le brouillon de l'issue ne tenait pas tel quel (« témoin d'impossibilité sous plafond de paiement ») : un plafond ne vide rien — il laisse p ≡ 0 admissible (mesuré : 6 mécanismes). C'est le plancher de surplus (IR durcie) qui vide l'ensemble, parce que θ_i = 0 ⇒ u_i = −p_i ≤ 0 < 1. L'exercice mesure les deux durcissements et fait porter la conclusion sur le bon : c'est plus utile que le brouillon, qui aurait installé une causalité fausse. L'espace déclaré par le notebook (paiements ∈ {0,1,2}) compte bien 104 976 candidats — vérifié.

Preuves

  • Exécution réelle : notebook_tools.py execute --kernel python3 → SUCCESS, 8,2 s ; 7/7 cellules de code avec execution_count non-null ; 0 erreur de sortie.
  • Reproductibilité : les trois exemples guidés rejouent leurs sorties committées à l'identique (comparaison texte à texte avec origin/main) — le notebook est déterministe, la ré-exécution ne dérive pas.
  • Périmètre : 9 éditions markdown + 3 blocs [markdown, code] ajoutés ; aucune cellule de code existante modifiée ni aucune sortie existante touchée (vérifié programmatiquement par mapping d'index).
  • C.1 : 0 occurrence de raise NotImplementedError / assert False / 1/0 ; les trois stubs impriment « Exercice N a completer » et le notebook s'exécute de bout en bout.
  • Hygiène : scrub_papermill_paths.py --apply (2 chemins absolus → basename), puis --scan --outputs → 0 fuite. Le bloc metadata.papermill est réécrit par l'exécution (18:48Z vs 25/08 sur main) : pas de STALE_BLOCK — le piège rencontré et réparé sur fix(genai,#18200): 10_LocalLlama - real OpenRouter re-exec (458 models) + c.14 prose realign #18281 ne se reproduit pas ici.
  • Compteur : count_exercises.py 0 → 3 conforming: true (détection par en-têtes markdown, cellules 4/9/13).

Note pour le coordinateur

GameTheory-19-Abstraction-a-Dette.ipynb et IIT/ICT-Series/ICT-37-FLens-BeliefState.ipynb (même section A) restent libres — non prises ici : un carnet par graine.

See #18147 (contribution partielle : 5 carnets sur 10 livrés par cette lane — #18288, #18289, #18291, #18294, celle-ci).

🤖 Generated with Claude Code

…ter 3 exercices

Digestion cas 1 : les trois blocs [2]/[4]/[7] titres « Exercice » portaient des
solutions completes et executees -> retitres « Exemple guide 1/2/3 », code et
sorties conserves. Trois NOUVEAUX exercices non resolus ajoutes, un par exemple,
chacun place juste apres l'exemple qu'il etend :

- Ex.1 (apres l'exemple guide 1) : generer en nombre d'agents -- paiements nuls,
  tables d'issue admissibles (DSIC+IR) pour n=2 puis n=3 ;
- Ex.2 (apres la lecture de l'exemple 2) : verifier M* sur TOUS les profils, pas
  seulement [1,1] et [0,0] comme la verification croisee de l'exemple ;
- Ex.3 (apres l'exemple guide 3) : departager deux durcissements -- plafond de
  paiement contre plancher de surplus garanti.

Renvois de prose alignes : titre d'intro [0], recap [9] (titre + 3 lignes de
tableau + « miroir de l'exemple guide 3 »).

Resultats attendus verifies HORS notebook (script de reference, assertions vertes) :
n=2 -> 6 tables admissibles sur 16, J*=2 ; n=3 -> 20 sur 256, J*=3 ; J(M*) par
profil = 0/0/0/2 pour une perte de 0/1/1/0 (M* n'est optimal qu'a (0,0) et (1,1)) ;
espace {0,1} = 4096 candidats dont 18 admissibles (6 a paiements nuls, 12 avec
paiements positifs) ; plafond -> ensemble NON vide, plancher de surplus -> VIDE
(0 admissible, 176 candidats DSIC avec temoin chacun).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 28, 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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 7
  • 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

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

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 10.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 11.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 16.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 14.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 9.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 8.4s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 76.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 7.0s

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

La re-execution du cycle precedent a tourne sous Python 3.11.9 alors que la
base origin/main declare 3.13.7 : la garde Kernel drift guard (base vs PR)
comparait en major.minor (3.13 -> 3.11) et rougissait a juste titre, sans
exemption de body.

Cause reparee, pas documentee : le noyau python313 (3.13.13) existe sur la
machine et porte les deps du carnet (stdlib seule ici). Re-execution sous
python313 : sorties identiques cellule par cellule a la version 3.11.

language_info.version: 3.13.7 -> 3.13.13 (major.minor 3.13 = 3.13).

Co-Authored-By: Claude Sonnet 5 <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 Sep 28, 2026
@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

Concern: Dans Le bloc suivant, seule la première ligne devrait rester dans le code, le reste doit soit faire quelque chose de calculé, soit partir dans le markdown de lecture des résultats, mais je ne veux pas ces murs de print qui suggèrent qu'on a calculé quelque chose qu'on a simplement écrit.

print(f"Candidats avec paiement strictement positif : {n_candidates}")
print()
print("TÉMOIN D'IMPOSSIBILITÉ :")
print(f" Contraintes : DSIC ∧ IR ∧ (∀i, ∀r : payment_i(r) ≥ 1)")
print(f" Preuve : pour un agent de type θ_i = 0 reportant un profile r :")
print(f" u_i = θ_i * outcome(r) - payment_i(r)")
print(f" = 0 * outcome(r) - payment_i(r)")
print(f" = -payment_i(r)")
print(f" ≤ -1 (car payment_i(r) ≥ 1)")
print(f" → IR violé (u_i < 0).")
print()
print(f" Conséquence : pour tout candidat, l'agent de type 0 a une")
print(f" utilité strictement négative en reportant truthful. Aucun mécanisme")
print(f" avec paiement ≥ 1 ne satisfait IR pour tous les profiles.")
print()
print(f" Conclusion : l'ensemble des mécanismes admissibles est VIDE.")
print(f" Le témoin est la CONSTRUCTION explicite (déviation profitable exhibée")
print(f" pour CHAQUE candidat : agent i, profile r, déviation vers truthful")
print(f" donne u < 0.")

@jsboige

jsboige commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18297
head: cc2c6fc
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 56dcc783211dd9294bac4d67eb1f1c234ed562aa41bd3ebf1f657d81fb6f5b83
diff-files: 1
diff-additions: 313
diff-deletions: 62
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Secrétaire vérificateur (myia-po-2026:CoursIA-3), 29/09 02:55Z — Dossier tiers READY à tête exacte cc2c6fc6…. Vague oldest-first plage #18289-#18317.

  • Tête exacte : cc2c6fc695ce2dc8e70c9d215d7a55a6f90c1350 — vérifiée via check-runs (latest-wins dedupe).
  • Checks : 0 rouge latest-wins (mesure c.286).
  • B.0 : à re-vérifier si > 30 min depuis.
  • Geste attendu ai-01 : merge direct via Q67 (APPROVED review exigée à tête exacte).

Le nit user (c.5877115588) demandait que seule la premiere ligne du bloc
reste en code : le mur de prints ecrivait a la main une preuve que le code
n'avait pas calculee. La cellule 7 garde l'enumeration reelle
(find_mechanisms_with_strict_payments) et son unique print calcule
(n_candidates = 4096) ; la prose du temoin (contraintes, chaine de preuve,
consequence, conclusion) est deplacee en markdown de lecture insere
immediatement apres la cellule. Notebook re-execute (16/16 cellules,
0 erreur, 5.2 s) : exec counts et outputs coherents.

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

jsboige commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

Réponse au Concern (c.5877115588) — corrigé au commit 7287b734f7 : la cellule 7 ne garde en code que l'énumération réelle (find_mechanisms_with_strict_payments) et son unique print calculé (Candidats avec paiement strictement positif : 4096). Le mur de prints du témoin est parti dans un markdown de lecture inséré immédiatement après la cellule (contraintes, chaîne de preuve, conséquence, conclusion). Notebook ré-exécuté après l'édition (16/16 cellules, 0 erreur) — la sortie committee de la cellule est réduite à la ligne calculée.

@github-actions

Copy link
Copy Markdown
Contributor

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

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 Sep 29, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA
pr: 18297
head: 7287b73
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 4985c996bd663639ce8809865cab5eb98bcd05e8006ebf2a0dd4c2d17b5d7c89
diff-files: 1
diff-additions: 337
diff-deletions: 100
checks: BLOCKED
b0: blocked
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Dossier tiers (premier sur cette PR ; le préflight po-2026:CoursIA-3 à cc2c6fc6 est périmé). Les trois vérifications, faites firsthand :

  1. base = main — merge-base 2cdddbc6 (28/09 19:56Z, retard 84 commits), zéro fichier commun entre le delta main et le fichier de la PR (mesuré comm -12) : le retard n'affecte pas le périmètre ; MERGEABLE, pas de conflit. Périmètre effectif : 1 fichier (GameTheory-16b-Automated-Mechanism-Design.ipynb, +337/−100).
  2. Chaque demande de suivi a une réponse écrite — le concern user (c.5877115588, ~21:35Z 28/09 : bloc print où seule la 1ʳᵉ ligne doit rester en code) est répondu à 04:18:36Z citant le commit 7287b734f (= tête actuelle) : la cellule 7 ne garde en code que l'énumération réelle (find_mechanisms_with_strict_payments) et son unique print calculé, le témoin d'impossibilité passe en markdown de lecture. Vérifié dans le diff : 104+/118− au commit de réponse, 1 fichier. Note : une réserve user ne se lève jamais par une phrase de lane — l'ack revient au user ou à un [OVERRIDE] coordinateur ; le geste lane (fix + réponse citant le commit) est complet.
  3. Delta post-demande lu — 7287b734f (04:18:14Z) est l'unique commit après le concern ; lu via stat + réponse ; substance conforme (retitrage des 3 sections digérées + 3 exercices, précédent GT-19 feat(gametheory,#18147): digestion GT-19 -- 3 exercices resolus en exemples guides + 3 exercices neufs #18317 / GT-16b feat(gametheory,#18147): GameTheory-16b -- exercices resolus en exemples guides + 3 exercices non resolus #18357 de la même famille exercices: 7 notebooks à digérer (titre Exercice sur solution complète) + 3 sous le plancher — audit du 27/09 relu #18147).

Pourquoi BLOCKED — deux items :

  • b0 — ack user en attente : le concern user est fixé + répondu, mais sa levée formelle exige le user ou ai-01 (réserve [HUMAN] inviolable par lane). À arbitrer côté coordination.
  • checks — Kernel drift guard rouge (non infra) : la série GameTheory épingle son env canonique (GameTheory/requirements.txt, numpy>=1.24.0) ; l'interpréteur CI fait dériver le repr committé ; body_exempts: false. PR gate en cascade sur cette jambe. Geste lane : re-exec sous l'env épinglé ou exemption ## Diagnostic dérive motivée dans le body. DWELL : tête du 04:18:14Z, plancher 120 min écoulé.

…t guard)

language_info.version 3.11.9 -> 3.13.13 (kernelspec python3 inchange,
identique a la base). Sources et outputs inchanges : repr stable pour
ce notebook stdlib. Re-execution venv py3.13.13 (numpy 2.2.6 >= 1.24,
env canonique de la serie), 7/7 cellules code, 0 erreur, 0 ec_null.

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

jsboige commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

Le point de jsboige sur la cellule 7 est adressé au commit 7287b734f7 : la cellule ne garde en code que l'énumération (find_mechanisms_with_strict_payments) et son unique print calculé, dont la sortie commitée se réduit à Candidats avec paiement strictement positif : 4096. Le mur de prints du témoin (contraintes, chaîne de preuve, conséquence, conclusion) est parti dans le markdown de lecture inséré immédiatement après la cellule. Vérifié à la tête actuelle 39ef270fb3 (re-exécution python 3.13, 0 erreur) : sources inchangées depuis 7287b734f7, la cellule code ne contient plus de ligne non calculée.

@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 Sep 29, 2026
@github-actions

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.

@jsboige

jsboige commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 18297
head: 39ef270
complete: true
body: read
comments-reviewed: 12
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: d7ef473b085aaba9e62f4c9ba8bfc917dbb4c5b762c126596a13c115860edcd5
diff-files: 1
diff-additions: 337
diff-deletions: 100
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Dossier neuf a la tete 39ef270, demande par le porteur po-2026:CoursIA via ai-01 (dispatch 13:53Z) : reserves levees par le porteur a cette tete (B.0 rc=0, garde de derive du noyau verte). Mesures firsthand ce cycle : fold latest-wins vert, 0 rouge residuel ; B.0 rc=0 confirme ; dernier commentaire = bloc REVIEW-COVERAGE advisory, aucun dossier tiers vivant. mergeable UNKNOWN au releve (flap, ai-01 mesurait clean a 13:53Z). Merge et lecture finale a ai-01.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Levée par ai-01 de la remarque du user du 28/09 19:38Z (mur de prints dans la cellule du témoin d'impossibilité), vérifiée à la tête 39ef270fb3 :

  • la cellule de code ne contient plus que l'énumération find_mechanisms_with_strict_payments() et un seul print, calculé (Candidats avec paiement strictement positif : 4096) ;
  • la chaîne de preuve (contraintes, preuve, conséquence, conclusion) est dans la cellule markdown de lecture placée juste après ;
  • les trois stubs d'exercice impriment « Exercice N a completer », sans erreur volontaire ; 0 jambe non verte au fold latest-wins ; catalogue identique à main.

Point hors périmètre, à reprendre par la lane myia-po-2026:CoursIA dans un grain séparé : la cellule du vérificateur (Exemple guidé 2) garde deux prints de prose sans calcul (« le vérificateur initial REJETAIT ce mécanisme… », « c'est la sur-durcification… »). Ils existent déjà sur main et relèvent de la même consigne : ils vont dans la lecture markdown qui suit la cellule.

@myia-ai-01
myia-ai-01 merged commit 7d0cb7e into main Sep 29, 2026
55 of 57 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 29, 2026
…erificateur GT-16b (#18418)

Signal ai-01 (14:50Z, post-merge #18297) : deux prints de narration pure
dans la cellule du verificateur. Le concept vit deja dans la cellule
'Lecture du resultat' suivante (ref. AMD.lean incluse) et la reserve
#12211 reste dans le commentaire d'en-tete de la cellule : retrait sans
perte de contenu.

Re-exec 17/17 sous python 3.13.13 (kernel py313-analyse), 0 erreur,
sequence monotone, kernelspec python3 preserve.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants