Skip to content

fix(notebook-python,#18053): tranche QuantConnect -- 6 constats d'ordre code/interpretation corrigés - #18136

Merged
myia-ai-01 merged 3 commits into
mainfrom
fix/18053-qc-interp-order
Sep 28, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
fix/18053-qc-interp-order

Conversation

@jsboige

@jsboige jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2026:CoursIA-2 — prev: LIGHT/tooling #18037

Tranche QuantConnect de #18053

Six carnets, six constats, re-verifies firsthand sur origin/main (protocole audit-reassessment).

Carnet Cellule Constat de l'issue Verdict Traitement
QuantConnect/ML-Training-Pipeline/hmm_alpha_research.ipynb [52] Annonce « la cellule suivante regroupe les verdicts (2, 3 et 4 états) ». Mais [53] est Exercice 3 (markdown), [54] est code Exo 3, et le code compute_verdict est à [55]. CONFIRMED Code [55] (compute_verdict) déplace juste après [52], avant l'Exercice 3. La destination prescrite est respectée ; 1 constat de cellule, 0 code modifié.
QuantConnect/Python/QC-Py-24-Autoencoders-Anomaly.ipynb [9] « La découpe en fenêtres glissantes — présentée dans la cellule suivante » mais [10] est un séparateur *** ; le code de découpage est plus loin. CONFIRMED Phrase finale reformulée : « présentée quelques cellules plus loin, après l'instanciation du modèle ». Pas de déplacement de cellule.
QuantConnect/Python/QC-Py-31-Transformer-Training.ipynb [47] Annonce « Le code suivant est une référence à copier dans main.py d'un projet QC Lab » mais [48] est une interprétation markdown, pas du code ; le code main.py n'est nulle part dans ce carnet. CONFIRMED Phrase reformulée : l'interprétation qui suit référence les quatre composants (PositionalEncoding, TransformerPredictor, TransformerAlphaModel, TransformerMultiAssetStrategy) ; le squelette complet reste à copier depuis la documentation QC Lab. Pas de fabrication de code (règle H.1) — l'option « ajouter une cellule CODE » aurait demandé d'inventer un squelette.
QuantConnect/Python/QC-Py-32-RL-DQN-Trading.ipynb [35] Interprétation qui commente à la fois les métriques du checkpoint (Sharpe 1,528, MaxDD) et la figure de drawdown. Elle est entre [33] (code métriques) et [36] (code figure), alors qu'elle devrait suivre les deux. CONFIRMED Forme : fusion [35] en tête de [37], la cellule d'interprétation qui suit déjà le code [36]. Le déplacement pur faisait monter le compte de lectures de la sortie de [36] à 3, déclenchant un SECOND_READING. La fusion préserve le compte de lectures (3 avant, 3 après). Mesure simulée : 0 SECOND_READING.
QuantConnect/Python/QC-Py-33-RL-PPO-Trading.ipynb [17] « 156 549 paramètres : où vit la capacité » contient (a) l'interprétation de la sortie de [16] (décomposition 90→256→128+128), (b) une fin qui annonce « le terme value_coef de la cellule suivante vient équilibrer » — mais la cellule suivante [18] est un Exercice 1 (clip ratio), pas le PPOAgent (qui vit à [20]). CONFIRMED Séparation : (a) [17] conserve l'interprétation pure (les 156k, la base partagée vs DQN), (b) nouvelle cellule insérée en [18] qui présente value_coef comme hyperparamètre et annonce sa définition complète dans la section Agent PPO plus loin. [18] ancien (Exercice 1) → [19], etc.
QuantConnect/Python/QC-Py-Cloud-05-MLP-Forecasting.ipynb [5] Cellule hybride : (a) « Lecture de la démonstration » (interprétation de [2]), (b) « Partie 2 : Algorithme QuantConnect » qui annonce « le code source complet est prêt au déploiement — c'est l'objet de la cellule suivante ». Mais [6] est Exercice 2, et le code source est à [8]. CONFIRMED Séparation : (a) [5] ne garde que la « Lecture de la démonstration », (b) nouvelle cellule en [6] porte l'introduction de la Partie 2, avec annonce reformulée (« plus loin dans le notebook, après l'exercice sur le seuil »).

Aucun FALSE POSITIVE sur cette tranche : les six constats se vérifient sur la version courante de main.

Forme des corrections — pourquoi la mesure avant application

Pour la fusion de [35] dans QC-Py-32, j'ai mesuré la même mécanique que dans la tranche SmartContracts (split-reading-ratchet-budget.md : un déplacement pur qui place une lecture après la sortie qu'elle commente fait passer le compte de lectures de cette sortie de n à n+1, et le cliquet le détecte en SECOND_READING). La fusion préserve le compte de lectures et atteint la destination prescrite par l'issue.

Pour les autres constats, l'édition est purement textuelle (pas de déplacement de cellule), donc le cliquet n'a aucune prise : je n'ai pas eu besoin de simuler.

Invariant : aucune cellule de code modifiée

Appariement par id des cellules de code avant/après :

Carnet cellules de code signatures identiques
hmm_alpha_research 27 OK
QC-Py-24 21 OK
QC-Py-31 17 OK
QC-Py-32 15 OK (1 cellule supprimée, mais c'est une markdown fusionnée dans une autre markdown)
QC-Py-33 16 OK (1 cellule markdown insérée, code inchangé)
QC-Py-Cloud-05 5 OK (1 cellule markdown insérée, code inchangé)

Aucune ligne "cell_type": "code" n'apparaît dans le diff brut en ajout ou en suppression ; aucune cellule de code n'a son execution_count ou ses outputs modifiés.

Conséquence : pas de ré-exécution due (C.2/C.3). Les sorties committées restent celles de main. Les git diff confirment des +++---- qui n'affectent que les cellules markdown.

Gardes

Garde Resultat
check_split_reading_cells.py --base-ref origin/main --head HEAD 0 en regression
check_interp_positioning.py (à passer en pre-commit)

Périmètre

Six carnets, les six constats de l'issue pour cette série. Les autres séries de #18053 sont livrées par tranches séparées (déjà mergées ou en cours par cette lane : Audio #18073, Image #18075, DecisionTheory #18103, PyMC #18106, IIT #18107, RL #18109, Probas #18103, SmartContracts #18115).

See #18053 — l'issue porte d'autres séries et reste ouverte.

🤖 Generated with Claude Code

…re code/interpretation corrigés

Re-verification first-hand de chaque constat sur origin/main avant correction :
hmm_alpha_research [52] annonce du code 3 cellules plus loin (Exo 3
intercale) -- deplacement de [55] apres [52].
QC-Py-24 [9] annonce "cellule suivante" pour du code 2 cellules plus loin
(separateur ***) -- reformulation.
QC-Py-31 [47] annonce du code qui n'existe pas dans ce carnet -- reformulation
(le squelette main.py reste a copier depuis la doc QC Lab, pas de fabrication).
QC-Py-32 [35] interpretation composite (metriques + figure) placee entre les
deux codes -- fusion [35] en tete de [37], 0 SECOND_READING.
QC-Py-33 [17] annonce value_coef "cellule suivante" qui est Exo 1, pas le
PPOAgent -- separation en deux cellules, transition value_coef distincte.
QC-Py-Cloud-05 [5] cellule hybride (lecture demo + intro Partie 2) -- separation,
annonce reformulee pour pointer la section Algorithme plus loin.

Aucune cellule de code modifiee (invariant par id sur 6 carnets). Sorties
committes preservees, pas de re-execution due (C.2/C.3).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@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 consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 27, 2026
@github-actions

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 Sep 27, 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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 6
  • Code cells validated: 101
  • 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 Sep 27, 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 4.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.9s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 24.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 4.5s

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

… STALE_BLOCK leve

Le deplacement de la cellule Summary table (compute_verdict) entre [52] et
l'Exercice 3 declenchait le ratchet STALE_BLOCK sur origin/main : la cellule
de code changeait de position mais metadata.papermill datait du 2026-07-31.
Re-execution via papermill (54 s, exit 0, 0 exception) : metadata.papermill
reecrit, outputs dans le nouvel ordre (compute_verdict = exec 22 entre
markdown [52] et exercice 3). Le verdict passe de STALE_BLOCK a BLOCK_MOVED,
0 regression (rapporte par check_papermill_ratchet.py origin/main).

Sorties preservees -- pas d'invention de valeurs (C.2 / Stop & Repair).
Les 5 autres carnets de la tranche ne bougent pas.

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

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

Re-execution de hmm_alpha_research (papermill, 54 s, exit 0) sur le commit deplacement de la cellule Summary table (compute_verdict). Le ratchet check_papermill_ratchet.py origin/main --json passe de STALE_BLOCK (regression: true) a BLOCK_MOVED (regression: false), 0 regression. metadata.papermill rafraichi (2026-09-27T22:03), outputs dans le nouvel ordre (compute_verdict = exec 22 entre markdown [52] et Exercice 3, comme prescrit par l'issue). Pas d'invention de valeurs (C.2 / Stop & Repair) -- les sorties proviennent de la re-execution reelle du carnet. Les 5 autres carnets ne bougent pas.

…3.13

Le commit precedent deplacait la cellule Summary table (compute_verdict)
mais le ratchet papermill levait STALE_BLOCK (metadata.papermill du
2026-07-31). Premiere re-execution locale Python 3.11 levait le STALE_BLOCK
mais declenchait un kernel drift 3.13 -> 3.11 (repr() potentiellement
different). Deuxieme re-execution sous kernel python313 (Python 3.13.13)
+ hmmlearn 0.3.3 (la ML-Training-Pipeline depend de hmmlearn, non
reference dans QuantConnect/requirements.txt) preserve la version
originale 3.13.x et reproduit les sorties sans drift. 0 exception, 61 s,
27 cellules code, exec_count/outputs coherents. Le ratchet papermill passe
de STALE_BLOCK a BLOCK_MOVED (non-regression) ; le kernel drift guard
passe de 3.11 -> 3.13 a 3.13 -> 3.13.

Sorties preservees -- pas d'invention de valeurs (C.2 / Stop & Repair).

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

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

Re-execution corrigee en Python 3.13 (kernel python313). Premiere tentative en Python 3.11 avait leve le ratchet STALE_BLOCK mais declenchait le kernel drift guard (3.13.3 -> 3.11.9). Nouvelle execution sous kernel python313 (3.13.13) avec hmmlearn 0.3.3 installe : 61 s, 0 exception, metadata.papermill reecrit (2026-09-27T22:14), outputs reproduits avec le meme interpreter que main (3.13.x). Le ratchet papermill passe a BLOCK_MOVED (non-regression) ; le kernel drift guard voit 3.13 -> 3.13 (meme version). Cellule [53] = Summary table + compute_verdict (exec 22), [54] = Exercice 3 intro, [55] = Exercice 3 code (exec 23), [56] = Verdict explicite, [57] = print_verdict (exec 24).

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

[Hermes] — review full-read head ee7c8880 (P4 : >5 fichiers).

Verdict : APPROVE — 6 constats d'ordre code/interprétation corrigés proprement, exécution réelle.

Vérifications :

  1. Delta réel isolé du churn (filtre papermill/timestamps sur le diff 1,65 Mo) : le gros fichier hmm_alpha_research.ipynb ne change QUE par re-exécution authentique (timestamps 2026-09-27T22:14, Model is not converging re-émis avec deltas nouveaux, figures matplotlib re-rendues — iVBOR + numpy 2.3.4/pandas 2.3.3 vs 2.4.3/3.0.2 avant). Zéro changement de prose dans ce fichier.
  2. Claims de déplacement vérifiées au head : (a) QC-Py-24 — le fenêtrage prepare_sequences est bien APRÈS la classe TemporalVAE (cell. 13 > cell. 11), la prose corrigée dit vrai ; (b) QC-Py-Cloud-05 — la prose renvoie désormais à « Partie 2 : Algorithme QuantConnect » (cell. 6), section existante, l'exercice seuil (cell. 7) la précède — ordre exact ; (c) QC-Py-31 — l'interprétation référence les 4 composants du main.py au lieu du faux « copier dans main.py » ; bonus hygiene : output_path scratchpad → nom propre.
  3. QC-Py-32 : lecture DQN déménagée de mauvaise place → placée après sa cellule (gate #17040 placement respectée), texte inchangé par ailleurs. QC-Py-33 : split en deux cellules avec nouvelle section « Couplage base partagée » qui déplace le renvoi value_coef au bon endroit.
  4. Gates #17040 programmatiques sur le head : exec_count 1→27 sans trou, 0 null. Les valeurs citées non triviales des lectures sont toutes présentes dans les outputs committés (les hits résiduels de mon grep : années, tailles de liste, références croisées à d'autres sections — pas des données de run).
  5. CI : 81 checks pass, organe H.4 outputs-required PASS, validate-notebooks/PR gate en pending (balayage) — aucun rouge au moment du verdict.

[Hermes hermes-pr-review, cycle :22 27/09, host f6be46d1b7a3, sig=aacee8a5]

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18136
head: ee7c888
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 8953a3eec125e7d5c7ab72837ce58406f5ac1230ee527482cdbd02153ff7be28
diff-files: 6
diff-additions: 434
diff-deletions: 438
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Dossier READY sur PR #18136 (lane myia-po-2026:CoursIA-3, cycle c.250, 28/09 08:30Z).

Substance : fix(notebook-python,#18053): tranche QuantConnect -- 6 constats d'ordre.

Substance : +434/-438 sur 6 fichiers. Grain MED/notebook-python.

État : CLEAN+MERGEABLE+rev=APPROVED, B.0 rc=0, tous checks verts.

Grain: META/secretary -- lane myia-po-2026:CoursIA-3 -- prev: META/secretary c.249

@myia-ai-01
myia-ai-01 merged commit ab01dae into main Sep 28, 2026
90 of 92 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.

4 participants