Skip to content

feat(qc,#11601): un énoncé par exercice (QC-Py-23b) + cellule vide comblée (QC-Py-14) — résiduels tranche 2 - #15953

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/11601-f1-consecutive-qcpy
Sep 15, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/11601-f1-consecutive-qcpy

Conversation

@jsboige

@jsboige jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: MED/notebook-lean #15895

Ce que cette PR livre (tranche 2 des résiduels #11601)

Deux défauts mesurés que ni #15581 ni #15872 ne couvrent :

1. QC-Py-23b — le seul run ≥ 3 de la série QuantConnect/Python

Mesure (detect_consecutive_code_cells.py : 12 notebooks / 15 runs dans la série) : QC-Py-23b portait le seul run de longueur 3 ([25..27], les trois stubs d'exercice). La règle #12797 pose « Ne jamais laisser une série de ≥3 cellules code sans prose ni fusion », et three-exercises-per-notebook.md l.31 exige « Chaque exercice précède d'un markdown : contexte + objectif + indices » — or les trois énoncés vivaient dans une seule cellule partagée [24].

Geste : éclater [24] en intro + un markdown ### Exercice N par exercice, l'énoncé immédiatement devant son stub. Déplacement du texte existant (les trois puces), aucune valeur fabriquée. Une seule reformulation : « doubler n_layers de 3 a 5 » → « Augmentez n_layers de 3 a 5 », pour coller au stub (3→5 n'est pas un doublement).

2. QC-Py-14 — cellule markdown strictement vide

[49] (cell-f02d1e57) : 0 caractère, la seule cellule markdown vide du notebook, assise à la transition étude-de-cas → blocs de référence Exécution. Remplie avec l'intro des deux blocs, ancrée sur leur contenu réel : Immediate = ordres Market immédiats, univers SPY/QQQ/IWM/TLT Resolution.Daily ; VWAP = découpage sur la journée, Resolution.Minute requise (commentaire du bloc lui-même).

Ce que cette PR ne rouvre PAS

#15581 a déclaré bénins les runs de longueur 2 restants (imports interprétés par la cellule qui suit ; stub + bloc [REFERENCE QC] ; stub → figure dont la Lecture du graphique suit). Décision respectée : les 2 runs de QC-Py-14 ([45,46], [50,51]) restent, délibérément — cette PR n'interprète aucune sortie de stub.

Vérification — organes du dépôt

Organe QC-Py-23b QC-Py-14
detect_consecutive_code_cells.py runs 1 → 0 (le run de 3 fermé) runs 2 → 2 (délibéré, cf. ci-dessus)
detect_markdown_rendering.py --check OK OK
Cellules markdown vides 0 1 → 0
Densité prose / cellule code 2147 → 2161 2276 → 2307
Cellules code (source + execution_count + outputs) 13/13 byte-identiques à main 24/24 byte-identiques à main

Pre-commit complet (9 hooks, dont H.3) : Passed.

Markdown-only → aucune ré-exécution C.2 due (l'exception « modifs uniquement markdown » s'applique ; preuve : sources/EC/outputs byte-identiques ci-dessus, mesurées par comparaison git show origin/main: vs arbre de travail).

See #11601 (contribution partielle : tranche 2 des résiduels).

🤖 Generated with Claude Code

…ellule vide de QC-Py-14

QC-Py-23b portait le seul run >= 3 de la serie QuantConnect/Python
(trois stubs d'exercice partageant un enonce unique), et la convention
three-exercises-per-notebook exige un markdown devant chaque exercice.
L'enonce unique [24] est eclate en intro + un markdown par exercice --
deplacement du texte existant, aucune valeur fabriquee.

QC-Py-14 avait une cellule markdown strictement vide (0 caractere,
seule du notebook) a la transition etude-de-cas -> blocs de reference
Execution ; elle porte maintenant l'intro ancree sur le contenu reel
des deux blocs [REFERENCE QC] (Immediate : ordres Market, univers
Daily ; VWAP : decoupage sur la journee, Resolution.Minute requise).

Markdown-only : sources/execution_count/outputs des 37 cellules code
byte-identiques a main. Runs consecutifs QC-Py-23b : 1 -> 0 (organe
detect_consecutive_code_cells.py). Les 2 runs restants de QC-Py-14
sont ceux que #15581 a declares benins (stub + bloc [REFERENCE QC]).

See #11601 (contribution partielle, tranche 2 des residuels).

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 PR Validation: PASS

  • Notebooks checked: 2
  • Code cells validated: 37
  • 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 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 3.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.3s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.7s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.0s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 16.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.4s

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

@jsboige

jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

Justification d'échappement — PR gate FAILURE = deux jambes CodeQL imputées à la base, pas au diff. La règle veut qu'un rouge non réparable par la lane se justifie par écrit ; le voici.

Décomposition du verdict du gate (job 103703569926, run 34749607277) :

[pr-gate] FAIL -- failing checks: Analyze (actions) (failure), Analyze (javascript-typescript) (failure)

Aucune autre jambe en échec — les 26 check-runs propres à la tête 84406eda1b sont tous success (organes notebook, ratchets, fast-lane, guards).

Pourquoi c'est la base, mesuré sur ma propre exécution : la jambe Analyze (actions) (job 103703568311) se termine par la signature exacte diagnostiquée par po-2023 sur #15945 — Uploading results (09:31:47Z) puis 16 s de silence sans Successfully uploaded results, export de codeql-failed-run.sarif, « CodeQL job status was failure ». C'est un échec d'upload SARIF côté GitHub, pas une alerte sur le code : les PRs vertes #15936/#15942 portent le même diagnostic (preuve par comparaison de logs, [DONE] po-2023 13/09 09:26Z), et les PRs d'autres lanes sans rapport (#15945, #15946) échouent les deux mêmes jambes au même créneau.

Pourquoi la lane ne peut rien y faire : ce diff touche 2 .ipynb (markdown-only, cellules code byte-identiques à main), zéro fichier .yml/JS/actions — l'analyse actions/javascript-typescript ne peut pas produire de nouvelle alerte dessus. La correction (re-run GitHub-side, ou investigation upload) est hors de portée lane : tâche coordinateur, déjà routée sur le dashboard (corroboration picker + [DONE] po-2023).

Le PR gate ne porte aucun autre défaut : pas de DWELL en jeu (le gate a tranché sur les checks, il n'a pas atteint le plancher minuterie), pas de conflit, mergeable. Rien ici n'attend un geste de ma lane.

Run 34749605227 : les deux jambes Analyze (actions) et Analyze
(javascript-typescript) ont complete leur analyse mais leur upload SARIF
est mort silencieusement (22 s sans "Successfully uploaded results",
export codeql-failed-run.sarif ensuite) -- classe infra GitHub documentee
(CI/Tests du dashboard, cf #15945 pour Analyze (actions) corroborant).
Un run default-setup ne se relance pas via API ; un push neuf est le
seul declencheur. Aucun changement de contenu.

See #15953

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

jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

DWELL mecanique — justification ecrite (aucun geste de cette lane).

Verdict du PR gate (check-run 103718073830, tete a21ab876cb) :

[pr-gate] DWELL -- tete du 2026-09-13T11:41:41Z, 20 min -- plancher 120 min, reste 100 min, leve au premier balayage suivant 2026-09-13T13:41:41Z. 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. Urgence (main rouge) : poser le label merge-dwell-waived sur la PR.

Les autres checks de cette tete sont tous verts (0 non-vert hors PR gate, verifie sur commits/a21ab876cb/check-runs?per_page=100). Le plancher se mesure sur la committer date de la tete : un nouveau push relance les 120 min au lieu de les ecourter, et un rerun avant l'echeance re-DWELL a l'identique — les deux sont donc ecartes deliberement. Rien a reparer dans cette PR. Le balayage horaire pr-gate-stale-sweep.yml (cron 7 * * * *) re-agrege cette jambe des que le plancher est ecoule.

Cette ligne est ecrite ici parce que le P0 « reparer son propre rouge » du picker lit le verdict du PR gate sans lire le log : --ignore-red s'appuie sur ce commentaire, et l'echappatoire se justifie par ecrit, pas en silence.

@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 : DWELL -- tete du 2026-09-13T11:41:41Z, 20 min -- plancher 120 min, reste 100 min, leve au premier balayage suivant 2026-09-13T13:41:41Z. 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.

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), ni correction de substance — le verdict ne nomme aucun defaut a corriger.

Justification ecrite exigee par le picker pour l'echappatoire --ignore-red : le rouge n'est pas tu, il est qualifie comme plancher mecanique auto-leve.

— lane myia-po-2024:CoursIA

myia-ai-01 pushed a commit that referenced this pull request Sep 13, 2026
…e canonique) (#15946)

* fix(qc,#15719): fournee QuantConnect g2 -- 7 fichiers a 0 finding scan_md_table_syntax

Run Mistral Vibe g2-quantconnect (637.6 s, $1.4967) : echappement des pipes
non echappes dans les tables markdown (code spans, formules) et ligne vide
avant table, sur 7 des 9 fichiers du grain (2 faux positifs connus laisses).

Le run avait reecrit les 4 .ipynb en JSON compact sur une ligne -- 9 592
lignes de bruit masquant les 7 vrais changements, et une forme non canonique
(40/40 notebooks de main sont en indent=1). Reapplique sur la forme
d'origine : diff net +12/-8, seules les sources des cellules 36/37/47/53,
5/12/28, 17 et 13 different.

Valide firsthand : scanner 0 finding sur les 7 fichiers ; cellules et outputs
preserves a l'identique (QC-Py-20 : 69 cellules / 36 outputs ; quantbook :
20 / 19) ; metadata et nbformat inchanges.

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

* fix(translation,#15719): resync per-cell de cell-40187a37 — le ratchet hot-subset bloquait la fournee g2

La fournée g2 insère une ligne vide avant le tableau markdown de la
cellule research.ipynb#cell-40187a37 (finding NO_BLANK_BEFORE). Cette
cellule porte une traduction déposée : son src_hash CSV restait sur la
base (7b82648a) -> SRC_DRIFT -> organe bloquant hot_subset rouge
(#13551 ratchet). Resync pivot uniquement (text_fr/src_hash/hash_fr ->
6ac2f783), conformément à la procédure per-cell : jamais
d'extraction globale. text_en/hash_en intacts (research_en.ipynb
inexistant, MISSING_LANG préexistant hors ratchet).

Preuve : aller-retour CSV byte-identique avant écriture ; ratchet 2/2 ;
suite translation 381 passed / 2 skipped.

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

* chore: re-trigger CodeQL default-setup — Analyze (javascript-typescript) died at Uploading results (annotations=0), infra not security (#15953 signature identique)

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@myia-ai-01
myia-ai-01 merged commit 5ccfbf6 into main Sep 15, 2026
77 of 78 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 16, 2026
…15957)

* fix(gametheory,#12797): enonce par exercice + prose intermediaire (5 notebooks Python, markdown-only)

Classe A (three-exercises-per-notebook l.31, geste #15953) : 03c, 03f, 21 --
trois stubs partageaient un enonce distant ; chaque ### Exercice N precede
desormais son stub (blocs deplaces verbatim dans 03c, enonces retypes pour
03f/21, intro du statement 03f allegee en consequence).
Classe B (defaut canonique #12797) : 02, 24 -- markdown intermediaire entre
les etapes distinctes des anciens runs >=3.
Aucune cellule code touchee : source/execution_count/outputs identiques,
verifies cellule par cellule vs origin/main ; re-execution non requise
(exception C.2 markdown-only).
Rider hook-mandate : hr --- -> *** dans 02 (hook fix-hr-separator, cellule
pre-existante). Registre twin 02 re-baseline dans le commit suivant.

See #12797

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

* chore(twin,#12797): re-baseline attestation paire GT-2 Part2 (markdown-only cote Python)

python_sha deplace par le commit precedant (2 markdowns intermediaires,
rider hr hook) ; csharp_sha = HEAD, cote C# intact. Reason renseignee
dans l'entree d'audit 0007-2026-09-13.

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 16, 2026
…mblée (QC-Py-14) — résiduels tranche 2 (#15953)


* feat(qc,#11601): un enonce par exercice dans QC-Py-23b + combler la cellule vide de QC-Py-14

QC-Py-23b portait le seul run >= 3 de la serie QuantConnect/Python
(trois stubs d'exercice partageant un enonce unique), et la convention
three-exercises-per-notebook exige un markdown devant chaque exercice.
L'enonce unique [24] est eclate en intro + un markdown par exercice --
deplacement du texte existant, aucune valeur fabriquee.

QC-Py-14 avait une cellule markdown strictement vide (0 caractere,
seule du notebook) a la transition etude-de-cas -> blocs de reference
Execution ; elle porte maintenant l'intro ancree sur le contenu reel
des deux blocs [REFERENCE QC] (Immediate : ordres Market, univers
Daily ; VWAP : decoupage sur la journee, Resolution.Minute requise).

Markdown-only : sources/execution_count/outputs des 37 cellules code
byte-identiques a main. Runs consecutifs QC-Py-23b : 1 -> 0 (organe
detect_consecutive_code_cells.py). Les 2 runs restants de QC-Py-14
sont ceux que #15581 a declares benins (stub + bloc [REFERENCE QC]).

See #11601 (contribution partielle, tranche 2 des residuels).

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

* ci: retrigger CodeQL default-setup analysis (upload infra failure)

Run 34749605227 : les deux jambes Analyze (actions) et Analyze
(javascript-typescript) ont complete leur analyse mais leur upload SARIF
est mort silencieusement (22 s sans "Successfully uploaded results",
export codeql-failed-run.sarif ensuite) -- classe infra GitHub documentee
(CI/Tests du dashboard, cf #15945 pour Analyze (actions) corroborant).
Un run default-setup ne se relance pas via API ; un push neuf est le
seul declencheur. Aucun changement de contenu.

See #15953

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

---------

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants