Skip to content

docs(notebook,#12797): tranche 3 GameTheory -- 7 cellules de prose qui cassent les runs de code - #15984

Merged
jsboige merged 3 commits into
mainfrom
fix/12797-gametheory-tranche3
Sep 14, 2026
Merged

jsboige merged 3 commits into
mainfrom
fix/12797-gametheory-tranche3

Conversation

@jsboige

@jsboige jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: DEEP/notebook-python #15902

Tranche 3 du drainage de la dette consecutive-code-cells de la serie GameTheory : sept cellules de prose qui cassent les runs de cellules de code consecutives dans trois notebooks.

Le defaut

Trois notebooks portaient des cellules de code consecutives, mesure avant (detect_consecutive_code_cells.py --json) :

Notebook Run Cellules
GameTheory-06f-Bounded-Agents-Python 3 13-15 (les 8 certificats)
GameTheory-06f-Bounded-Proofs-Reasoning-Costs 2 puis 3 10-11 (balayage de k), 17-19 (exercices 1 a 3)
GameTheory-06-EvolutionTrust 3 29-31 (is_ess, verdicts, controle positif)

Ce sont des cas de Classe B (defaut canonique de #12797) : des etapes distinctes a sorties reelles, chacune portant deja un # commentaire, mais sans prose markdown entre elles. Aucun n'est un cas de fusion legitime (imports + chargement) — les trois cellules de chaque run produisent des resultats differents.

Les 7 insertions

Notebook Position Contenu
06f-Bounded-Agents avant les certificats 3-5 ce qu'un certificat engage : egalite calculee vs enonce quantifie
06f-Bounded-Agents avant les certificats 6-8 la proposition Lean et son miroir decidable
06f-Bounded-Proofs avant le balayage horizon k, et la borne MAX_DEPTH=3 a garder en tete
06f-Bounded-Proofs avant l'exercice 2 brief : cout asymetrique par bot
06f-Bounded-Proofs avant l'exercice 3 brief : un couple dont l'issue depend de k
06-EvolutionTrust avant les verdicts un verdict ESS est refutable par un seul mutant
06-EvolutionTrust avant le controle le controle positif contre l'instrument casse

Le choix de position n'est pas cosmetique : dans 06-EvolutionTrust, la cellule 32 porte deja un ### Interprétation de la table de verdicts. La prose ajoutee dit ce que l'instrument engage (pourquoi is_ess renvoie ses mutants, pourquoi un controle positif est necessaire), pas ce que la sortie signifie — cette lecture reste a sa place.

Insertion markdown-only

66 insertions, 0 suppression. Aucune source de cellule code touchee, donc aucune re-execution due (C.2) et aucune sortie modifiee. Les cellules ajoutees portent "metadata": {} sans bloc papermill fabrique — meme convention que la tranche 1 (#15957).

Deux conventions mesurees avant d'ecrire plutot que supposees :

  • Ids : convention locale de chaque fichier. 06-EvolutionTrust et 06f-Bounded-Agents sont en ids hex ; 06f-Bounded-Proofs est en ids semantiques (06f-exo-2-brief, 06f-exo-3-brief, alignes sur les cellules 06f-exo-2 / 06f-exo-3 qu'ils precedent).
  • Typographie : 06f-Bounded-Agents n'a aucun caractere non-ASCII dans ses cellules markdown → prose ASCII ; 06f-Bounded-Proofs utilise l'em dash et les guillemets sans accents ; 06-EvolutionTrust est accentue. Le style « titre d'exercice en markdown au-dessus d'une cellule qui porte deja un commentaire # Exercice » est la convention dominante de la serie : 88 occurrences dans 30 notebooks GameTheory.

Jumeau C#

GameTheory-6 EvolutionTrust est la seule des trois paires enregistree au registre des jumeaux. L'edition markdown-only deplace le blob Python ; l'audit a ete rebaseline en dernier (#8957), dans un commit separe apres le commit des notebooks, parce que --update lit git ls-tree HEAD et refuserait d'attester avant que le notebook soit commite.

Aucune known_differences ajoutee : ce champ decrit les ecarts semantiques entre les deux moteurs, et il n'y en a pas de nouveau. Le jumeau C# de 06-EvolutionTrust etait deja conforme au run (verifie au claim) ; les deux notebooks 06f-* n'ont pas de jumeau C# enregistre.

Verification

Controle Resultat
detect_consecutive_code_cells.py --json les 3 notebooks : runs: 0, max_run: 1 (avant : 2 a 3)
check_twin_parity.py --family "GameTheory/.NET-Parity" --check --json 18/18 OK, drift 0
check_docs_links.py --check --base origin/main rc=0, 0 nouveau lien casse (7038 liens)
Diff 3 notebooks + 1 fichier d'audit ; 66 insertions, 0 suppression
Pre-commit tous les hooks passent (gitleaks, H.3, scrub papermill, probeAddresses)

Declaration de perimetre

#12797 est CLOSED (fermee le 2026-08-27 apres livraison du detecteur et de son workflow — les 5 criteres d'acceptance portaient sur l'outil, pas sur le drainage). Le drainage de la dette se poursuit en tranches sur cette issue fermee, comme les tranches 1 (#15957) et 2 (#15961), encore ouvertes. D'ou See #12797 et non Closes — et une lane worker ne ferme pas d'issue de toute facon.

Residuel nomme : les jumeaux C#/Lean de la serie, non traites ici.

Hors perimetre, signale : check_twin_parity.py --check fleet rend 154/157. Trois paires sont en DRIFT prealable, hors de ma branche — Probas-16 Sparse-Gaussian-Process, SW-2 RDF-Basics, SW-7 OWL. Le mode CI --per-pair --base origin/main mesure la derive introduite et ne les voit donc pas dans cette PR. Je les signale au coordinateur plutot que de les corriger ici : ce serait un autre sujet.

🤖 Generated with Claude Code

jsboige and others added 2 commits September 13, 2026 15:13
…i cassent les runs de code

Trois notebooks GameTheory portaient des runs de cellules de code
consecutives (regle consecutive-code-cells) : les cellules partageaient
un etat Python, mais rien ne separait leur lecture.

- GameTheory-06f-Bounded-Agents-Python : run de 3 (les 8 certificats)
  -> 2 cellules de prose (nature d'un certificat calcule vs quantifie ;
  la proposition Lean et son miroir decidable)
- GameTheory-06f-Bounded-Proofs-Reasoning-Costs : runs de 2 (balayage de
  k) et de 3 (exercices 1 a 3) -> 3 cellules de prose (horizon k et borne
  MAX_DEPTH ; briefs des exercices 2 et 3)
- GameTheory-06-EvolutionTrust : run de 3 (is_ess, verdicts, controle
  positif) -> 2 cellules de prose (un verdict ESS est refutable par un
  seul mutant ; le controle positif contre l'instrument casse)

Insertion markdown-only : 66 insertions, 0 suppression, aucune source de
cellule code touchee, donc aucune re-execution due (C.2). Les ids suivent
la convention locale de chaque fichier (hex pour 06-EvolutionTrust et
06f-Bounded-Agents, semantique 06f-* pour 06f-Bounded-Proofs).

Typographie alignee sur chaque fichier, mesuree avant d'ecrire :
06f-Bounded-Agents n'a aucun caractere non-ASCII dans ses cellules
markdown (prose ASCII), 06f-Bounded-Proofs utilise l'em dash et les
guillemets mais pas d'accent, 06-EvolutionTrust est accentue.

Le style « titre d'exercice en markdown au-dessus d'une cellule code qui
porte deja un commentaire # Exercice » est la convention dominante de la
serie : 88 occurrences dans 30 notebooks GameTheory.

Verification :
- detect_consecutive_code_cells.py : les 3 notebooks passent de max_run
  2-3 a runs 0 / max_run 1
- check_docs_links.py --check --base origin/main : rc=0 (7038 liens)

See #12797

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ion markdown-only

Le cote Python de la paire `GameTheory-6 EvolutionTrust` a recu 2 cellules
de prose au commit precedent, ce qui deplace son blob SHA alors que la
partie C# ne bouge pas. L'audit enregistre les SHAs courants.

Edition markdown-only : la parite `semantic` est inchangee (aucun enonce,
aucune sortie, aucune cellule de code touchee cote Python, cote C# intact).
Aucune `known_differences` n'est ajoutee : ce champ decrit les ecarts
semantiques entre les deux moteurs, et il n'y en a pas de nouveau.

Attestation faite EN DERNIER (#8957) : le commit des notebooks precede,
`git ls-tree HEAD` lit donc les blobs finaux.

Verification :
- check_twin_parity.py --family "GameTheory/.NET-Parity" --check --json
  -> 18/18 OK, drift 0
- check_twin_parity.py --check --json (fleet) -> 154/157 OK ; les 3 DRIFT
  restants (Probas-16, SW-2, SW-7) sont prealables et hors de ce perimetre
  (ma branche ne touche que 3 notebooks GameTheory)

See #12797

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@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

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

@github-actions

github-actions Bot commented Sep 13, 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 9.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.1s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 11.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 8.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 7.2s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.0s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 49.5s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 5.1s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 3
  • Code cells validated: 45
  • 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)

`check_twin_parity.py --update` n'ecrit pas de `reason:` : la note etait
partie dans `by:`, qui doit rester le seul identifiant de lane. Le champ
`reason:` est la convention du registre (217 des 1232 fichiers d'audit),
et il porte ce qu'un auditeur doit pouvoir lire sans ouvrir la PR :
nature du changement, cote touche, parite preservee, precedent invoque.

Le champ `by:` redevient donc `myia-po-2024:CoursIA` seul.

Coeur de l'entree : insertion markdown-only de 2 cellules de prose cote
Python, aucune cellule de code touchee, aucune sortie modifiee, aucune
re-execution, `parity_level: semantic` inchange.

Verification : test_twin_registry_integrity.py -> 46 passed.

See #12797

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

jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

DWELL — plancher mecanique, rien a reparer.

PR gate est rouge sur le verdict :

[pr-gate] DWELL -- tete du 2026-09-13T13:22:22Z, 18 min -- plancher 120 min, reste 102 min, leve au premier balayage suivant 2026-09-13T15:22:22Z. Le balayage horaire (pr-gate-stale-sweep.yml, cron '7 * * * *') re-agrege cette jambe des que le plancher est ecoule ; aucun geste manuel n'est requis.

Lu firsthand sur l'annotation du check-run 103730193415 (tete 2b7bb9c2e0f38f7a6d5f56661fd3c24f28a94d87), pas deduit du nom du check.

Aucune action de lane n'est disponible sur cette PR : ni re-push (il remettrait le plancher a zero depuis la nouvelle tete), ni gh pr update-branch (meme effet). Le rouge n'est pas tu — il est qualifie comme plancher mecanique auto-leve.

Justification ecrite exigee par pick_idle_grain.py pour l'echappatoire --ignore-red.

— lane myia-po-2024:CoursIA

@jsboige

jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

Etat du rouge lu firsthand (annotation du check-run PR gate, job 103730193415) : [pr-gate] DWELL -- tete du 2026-09-13T13:22:22Z, 18 min -- plancher 120 min, reste 102 min, leve au premier balayage suivant 2026-09-13T15:22:22Z (et suivantes, identiques).

Ce rouge est mecanique et auto-leve, aucune action de lane n'est requise ni utile :

  • le seul check requis en echec est la jambe DWELL du gate agrege (plancher 120 min) ;
  • le balayage horaire pr-gate-stale-sweep.yml (cron 7 * * * *) re-agrege cette PR des que le plancher est ecoule (15:22:22Z passes) -- l'annotation du gate le dit explicitement : « aucun geste manuel n'est requis » ;
  • re-pouser ou update-branch RESETTERAIT l'horloge DWELL (committer date du head) : ce serait un mal, pas une reparation ;
  • aucune remarque de review en attente : check_unaddressed_nits.py rc=0, reviewDecision none, threads inline ouverts 0 ( mesures du 2026-09-13 ).

Justification ecrite exigee par le picker (--ignore-red) : le rouge est la jambe DWELL du gate, pas un defaut de substance reparable par cette lane.

— lane myia-po-2024:CoursIA

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15984 (docs(notebook,#12797): tranche 3 GameTheory -- 7 cellules de prose qui cassent les runs de code) 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.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant