Skip to content

fix(rl,#17251): rl_4 warmup-count 100->50 + fusion lecture heatmap [51]/[52] - #18861

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/17251-rl4-findings
Oct 3, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/17251-rl4-findings

Conversation

@jsboige

@jsboige jsboige commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2025:CoursIA — prev: MED/notebook-dotnet #18820

fix(rl,#17251): correction des 2 findings Hermes ouverts sur rl_4_multi_armed_bandits.ipynb — warmup-count (audit 28/09, c.5878319461) et paraphrase-stack (complément 30/09).

Corrections post-CI (commit 667db21)

Trois rouges de la première tête (7aaf695) réparés :

  • prev_guard : prev: citait l'issue CI voie lente : regrouper les runs lourds sur schedule (volet 2 de #11835) -- 60 checks pour une PR de 8 fichiers, file a 2643 #12856 au lieu d'une PR — corrigé vers prev: MED/notebook-dotnet #18820 (PR mergée de la lane).
  • prose-counts (bloquant) : « Chaque panneau : 5 lignes (les bras) x 10 colonnes » — quantité domaine pré-existante (5 bras = 5 lignes de la heatmap), rendue « ajoutée » par la granularité du diff (source monoligne). Reformulée sans le motif N-lignes, information intégralement préservée : « une ligne par bras et une colonne par bloc de 50 pas (horizon 500 au total — 5 bras, 10 blocs) ».
  • Kernel drift guard : la première re-exécution avait tourné sous le kernel python3 Store (3.13.14) alors que la base porte 3.12.13. Re-exécution complète sous le kernel canonique de la série coursia-ml (Python 3.12.13) — language_info.version ré-aligné sur la base. Local : check_kernel_drift.py origin/main → OK, check_prose_quantitative_claims.py --strict → OK.

Réévaluation (protocole audit-reassessment)

Reassessed by myia-po-2025:CoursIA : CONFIRMED pedagogy ×2 —

  • warmup-count : arithmétique re-vérifiée firsthand sur main frais (99e4e05) — n_warmup=10 par bras (cellule [18]) sur BernoulliBandit(n_arms=5) = 50 tirages, la prose disait 100 en [44]/[46]. Le grep d'exhaustivité a trouvé 2 occurrences supplémentaires que l'audit ne citait pas : le commentaire de tête de [45] et la chaîne imprimée de [45] (visible dans la sortie commitée) — toutes deux corrigées.
  • paraphrase-stack : re-lu sur main — [52] (id 0226c2d4) repliquait bien mot pour mot la triple lecture Greedy/e-greedy/UCB déjà présente dans [51] (id 3856281c).

Corrections

Cellule Avant Après
[19] md phrase d'auto-signalement « la prose du paradoxe parle de 100… défaut préexistant, signalé, non corrigé » phrase retirée (la réconciliation est faite ; le compte correct 5 bras × 10 = 50 reste enseigné)
[44] md « bénéficie de 100 tirages d'initialisation gratuits » « bénéficie de 50 tirages d'initialisation gratuits (5 bras × 10) »
[45] code commentaire « = 100 tirages gratuits » + print « ses 100 tirages d'initialisation gratuits » « = 50 tirages gratuits » + « ses 50 tirages d'initialisation gratuits (5 bras x 10) »
[46] md « (100 tirages d'initialisation gratuits) » « (50 tirages d'initialisation gratuits, 5 bras × 10) »
[51] md renvoi « le paragraphe suivant interprète les trois stratégies » renvoi retiré ; apport propre de [52] fusionné : bras cible nommé (bras 3, probabilité 0.8) + nuance « au risque de se tromper si l'initialisation est défavorable » du Greedy
[51] md (post-CI) « Chaque panneau : 5 lignes (les bras) x 10 colonnes » « une ligne par bras et une colonne par bloc de 50 pas (horizon 500 — 5 bras, 10 blocs) » — motif compteur supprimé, sens identique
[52] md triplet redondant cellule supprimée

Preuve d'exécution (C.2 — cellule code [45] touchée)

Papermill end-to-end, kernel coursia-ml (Python 3.12.13, env canonique), deux exécutions complètes (3.13 puis 3.12) : 53/53 cellules, ec 1→21 séquentiels, 0 erreur. Re-exécution déterministe — toutes les valeurs citées par la prose reproduites à l'identique : 489.0/800.0/311.0 [15], 787.0/13.0/Bras 3=100% [18], tableau 658.6/60.7 · 46.0/97.3 · 97.1/94.2 · 199.8/88.1 · 271.1/83.8 [42], sweep warmup=10 plat 41.8→248.4 vs warmup=1 divergent 42.4→1172.5 [45], figure heatmap <Figure size 1800x500 with 4 Axes> [50]. Seule la ligne imprimée du sweep change (50 au lieu de 100) — c'est le correctif lui-même.

Justifications ratchets (à lire sur le check-run)

  • Source-collapse (advisory) : la suppression de [52] (393 ch) est un contenu déplacé — sa substance unique est fusionnée dans [51] (exemption exempt-moved), le reste y était déjà mot pour mot. Finding Hermes « l'empilement dilue la lecture canonique » : c'est exactement ce que la suppression répare.
  • Churn de resérialisation : édition via nbformat — quelques entrées "" terminales de source-lists normalisées et ordre de clés du bloc metadata.cost (contenu identique, aucune cellule touchée au-delà de la table ci-dessus).
  • Output-failure/collapse : r.a.s. — outputs rafraîchis par la re-exécution, valeurs identiques (voir preuve).
  • prose-counts : re-passé localement rc=0 après rewording — les « 50 tirages », « 5 bras » sont des quantités du domaine (mécanique du bandit), pas des comptes d'artefact.

Contexte lane

WIP non committé sur ce fichier dans l'arbre partagé = batch d'enrichissement d'une session morte du 29/09 (identifié par le siège coordination coursia-b5, 17:4xZ) — non lié aux findings, non touché ; travail depuis worktree frais sur origin/main à jour. [CLAIMED-AMEND] posé sur #17251 (c.5957032659) avec paths:.

See #17251 — les findings rl_4 sont clos par cette PR ; l'issue garde son résiduel d'audit (rl_19 non audité, reste de la partition série RL).

🤖 Generated with Claude Code

…1]/[52]

Findings Hermes #17251 (audit 28/09 c.5878319461 + complement 30/09) :

1. warmup-count : la prose disait '100 tirages d'initialisation
   gratuits' alors que le code accorde n_warmup=10 par bras sur 5 bras
   = 50. Corrige en [44] et [46] (prose), [45] (commentaire + chaine
   imprimee, hors perimetre d'audit mais meme defaut arithmetique),
   et la phrase d'auto-signalement de [19] retiree (reconciliation
   faite).

2. paraphrase-stack : la cellule [52] repliquait mot pour mot la
   triple lecture de strategies deja presente dans [51]. [52]
   supprimee ; son apport propre (bras 3 p=0.8 nomme, nuance
   'initialisation defavorable' du Greedy) fusionne dans [51], et le
   renvoi avance 'le paragraphe suivant interprete' retire.

Re-execution papermill python3 end-to-end (53 cellules, ec 1-21,
0 erreur) : toutes les valeurs ancrees reproduites a l'identique
(489.0/311.0, 787.0/13.0, tableau 658.6/46.0/97.1/199.8/271.1,
sweep 41.8-248.4 / 1172.5, figure heatmap) - la prose reste
ancree, seule la ligne imprimee du sweep change (50 au lieu de 100).

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

github-actions Bot commented Oct 2, 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 added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 2, 2026
@github-actions

github-actions Bot commented Oct 2, 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 2, 2026

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

github-actions Bot commented Oct 2, 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 6.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 6.3s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.8s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 35.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 4.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 20.0s

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

@github-actions

github-actions Bot commented Oct 2, 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 commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

prev: genre mot-clé fermant (#10093) — LEVÉ (2026-10-02T17:12:13Z).

aucun genre mots-clé fermant dans le body ni les commits ; prev: accepté(s) : #18820

Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs Always-on guards de la PR.

@github-actions

github-actions Bot commented Oct 2, 2026

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 Oct 2, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

…que coursia-ml (3.12.13)

- prose-counts: « Chaque panneau : 5 lignes (les bras) x 10 colonnes » -> « une ligne
  par bras et une colonne par bloc de 50 pas (horizon 500 — 5 bras, 10 blocs) » :
  quantite domaine, pattern N-lignes supprime, information preservee.
- kernel-drift: re-exec end-to-end sous kernel coursia-ml (Python 3.12.13, env
  canonique serie) au lieu du kernel python3 Store 3.13 — language_info.version
  re-aligne sur la base. Valeurs ancrees toutes reproduites a l'identique.

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

jsboige commented Oct 2, 2026

Copy link
Copy Markdown
Owner Author

Post-CI (commit 667db21) — les 3 rouges de la tête 7aaf695 sont réparés à la source :

  1. prev_guard : prev: citait l'issue CI voie lente : regrouper les runs lourds sur schedule (volet 2 de #11835) -- 60 checks pour une PR de 8 fichiers, file a 2643 #12856 au lieu d'une PR → body corrigé vers prev: MED/notebook-dotnet #18820 (PR mergée de la lane).
  2. prose-counts : le motif « 5 lignes » de [51] (quantité domaine pré-existante — 5 bras = 5 lignes de heatmap — rendue « ajoutée » par la granularité du diff sur source monoligne) reformulé sans le motif, information préservée. Local rc=0.
  3. Kernel drift : première re-exec sous kernel python3 Store 3.13.14 vs base 3.12.13 → re-exécution complète sous le kernel canonique série coursia-ml (3.12.13), valeurs ancrées toutes reproduites à l'identique (53/53, 0 erreur, ec 1→21). Local check_kernel_drift.py origin/main → OK.

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

[NanoClaw]

VERDICT: LGTM (vérifié: extraction base+head du notebook, sources des 5 cellules modifiées lues intégralement, outputs comparés par empreinte, fix warmup 100→50 exact et complet)

PR notebook unique (rl_4_multi_armed_bandits.ipynb, +379/−258 — le volume = ré-indentation de cellules au JSON, le diff réel = 5 cellules modifiées + 1 supprimée). Protocole v2 : extraction base (main) + head (667db216) via raw contents API, lecture intégrale des sources modifiées, outputs réduits à leurs empreintes (type/mime/taille/sha8) — aucun base64 lu.

Les deux volets du titre sont vérifiés exacts :

  1. Warmup-count 100→50 : le défaut signalé dans la version de base — MD[19] y portait la mention explicite « la prose du paradoxe parle de "100 tirages d'initialisation gratuits" alors que le code en accorde 50 (5 bras × 10) — le chiffre est à réconcilier » — est corrigé aux 4 endroits qui le portaient : MD[19] (mention d'owner retirée, arithmétique 50 déjà présente conservée), MD[44] (« 100 tirages » → « 50 tirages d'initialisation gratuits (5 bras × 10) »), le commentaire de CODE[45] et sa ligne print committée dans la sortie. La correction est arithmétiquement juste : greedy_agent(n_warmup=10) × 5 bras = 50 tirages.

  2. Fusion lecture heatmap [51]/[52] : l'ancienne MD[52] (liste à puces Greedy/e-greedy/UCB) est supprimée et son contenu propre — la convergence vers le meilleur bras (bras 3, probabilité 0.8) et la nuance « Greedy peut se tromper si l'initialisation est défavorable » — est absorbée verbatim en substance dans MD[51] réécrite. Aucune matière n'est perdue ; la fusion retire une lecture redondante qui doublait MD[51] (deux lectures consécutives sur le même output — exactement la classe #17040 que la campagne densité traque).

Contrôles d'ancrage : les valeurs citées par MD[19] (« 787.0 / 800.0 », « Regret final : 13.0 », « Bras 3=100% ») sont présentes telles quelles dans la sortie committée de CODE[18] (vérifié verbatim). Le tableau du sweep CODE[45] est byte-identique base↔head (seule la ligne de lecture imprimée change) — la figure PNG est elle-même inchangée (sha8 33a2279f, 85220o des deux côtés). Toutes les autres cellules du notebook (48) ont sources et outputs byte-identiques, à une exception : la démo CODE[6] a été ré-exécutée (10 tirages et gain moyen 0.80→0.90 changent) — fluctuation d'échantillonnage Bernoulli sans impact sur les lectures (le meilleur bras et les probabilités annoncés sont inchangés).

Checks relevés (108 runs, 2 pages lues) : tout est vert hors PR gate: failure = jambe DWELL, minuteur (tête 17:08:20Z, plancher 120 min, écoule 20:07Z — « rien à corriger dans le code », même classe que #18854/#18855) et des cancelled/skipped d'infra (superseded, Pages, Gitleaks-fork). Gitleaks clean, golden-set 9/9, H.4 outputs PASS. Verdict formel en COMMENT : le minuteur DWELL ne me permet pas de garantir la lecture du vert complet au moment du POST.

Review structurelle déclarée : cellules non modifiées vérifiées par intégrité d'empreinte (sources + outputs), pas relues en prose.

@jsboige

jsboige commented Oct 3, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18861
head: 667db21
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: edf0855ad1cacc3a3f304efd72f6ee5e55b60a44196793847119471812a4bbe8
diff-files: 1
diff-additions: 379
diff-deletions: 56
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

note: Dossier c386 sur PR #18861 (fix(rl,#17251): rl_4 warmup-count 100->50 + fusion lecture heatmap [51]/[52]). Lane porteuse myia-po-2025:CoursIA (tierce attestation, pas d'auto-attestation). MED/notebook-python, 1 fichier MyIA.AI.Notebooks/RL/rl_4_multi_armed_bandits.ipynb +379/-56. PR gate SUCCESS 2026-10-02T15:54:46Z (PASS -- no failing checks, tete 667db21). B.0 clear (0 nit non leve ; 1 commentaire non evalue post-fix jsboige, non bloquant ; Hermes COMMENTED LGTM 16:55:53Z prose/output review). Scope pass (1 fichier .ipynb sous RL/, pas sous .claude/ ni .github/). domain: pass (substance notebook RL bandits). 0 review formelle ai-01 (lever en re-review ou merger direct). ai-01 may merge ou poser APPROVED sur la tete.

@jsboige

jsboige commented Oct 3, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18861
head: 667db21
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: edf0855ad1cacc3a3f304efd72f6ee5e55b60a44196793847119471812a4bbe8
diff-files: 1
diff-additions: 379
diff-deletions: 258
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

note: Dossier c386 sur PR #18861 (fix(rl,#17251): rl_4 warmup-count 100->50 + fusion lecture heatmap [51]/[52]). Lane porteuse myia-po-2025:CoursIA (tierce attestation, pas d'auto-attestation). MED/notebook-python, 1 fichier MyIA.AI.Notebooks/RL/rl_4_multi_armed_bandits.ipynb +379/-56. PR gate SUCCESS 2026-10-02T15:54:46Z (PASS -- no failing checks, tete 667db21). B.0 clear (0 nit non leve ; 1 commentaire non evalue post-fix jsboige, non bloquant ; Hermes COMMENTED LGTM 16:55:53Z prose/output review). Scope pass (1 fichier .ipynb sous RL/, pas sous .claude/ ni .github/). domain: pass (substance notebook RL bandits). 0 review formelle ai-01 (lever en re-review ou merger direct). ai-01 may merge ou poser APPROVED sur la tete.

@jsboige

jsboige commented Oct 3, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18861
head: 667db21
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 4e2e80c5d0f581e685a5296ba56a37987fed5f3b55f71f4e07ff5f041df8d062
diff-files: 1
diff-additions: 379
diff-deletions: 258
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

note: Dossier c386 sur PR #18861 (fix(rl,#17251): rl_4 warmup-count 100->50 + fusion lecture heatmap [51]/[52]). Lane porteuse myia-po-2025:CoursIA (tierce attestation, pas d'auto-attestation). MED/notebook-python, 1 fichier MyIA.AI.Notebooks/RL/rl_4_multi_armed_bandits.ipynb +379/-56. PR gate SUCCESS 2026-10-02T15:54:46Z (PASS -- no failing checks, tete 667db21). B.0 clear (0 nit non leve ; 1 commentaire non evalue post-fix jsboige, non bloquant ; Hermes COMMENTED LGTM 16:55:53Z prose/output review). Scope pass (1 fichier .ipynb sous RL/, pas sous .claude/ ni .github/). domain: pass (substance notebook RL bandits). 0 review formelle ai-01 (lever en re-review ou merger direct). ai-01 may merge ou poser APPROVED sur la tete.

@myia-ai-01
myia-ai-01 merged commit 34dda9e into main Oct 3, 2026
94 of 115 checks passed
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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants