Skip to content

fix(#17066): QC-Py-12 — double conclusion dédoublée : la conclusion collée (88) devient la boîte à outils du backtesteur, le verdict honnête (89) reste l'unique conclusion - #17117

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/17066-qcpy12-duplicates
Sep 22, 2026

Conversation

@jsboige

@jsboige jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2025:CoursIA — prev: DEEP/notebook-python #17109

Redressement critique #17066 — QC-Py-12-Backtesting-Analysis : double conclusion — la conclusion générique collée (cellule 88 : récapitulatif 8 items + table de seuils + limitations + références académiques, sans aucune mesure) précède le verdict honnête chiffré (cellule 89 : NO BEATS, tous nombres groundés). See #17066 (tranche 12 de la famille QuantConnect/Python, 1 notebook par PR, référence #17069).

Mesure organ (avant → après)

check_duplicate_sections.py : 1 finding dup_closing « conclusion » ×2 (cellules 88, 89) → 0 finding (carriers: 0, records: 0, aucun advisory).

L'organe à zéro est nécessaire, jamais suffisant : la lecture critique de bout en bout (90 cellules) a (a) vérifié l'honnêteté de la conclusion 89 — sweep systématique : tous les décimaux 3-4 chiffres de TOUTES les cellules markdown du notebook sont retrouvés dans les sorties committées (0 suspect) ; (b) confirmé que la contradiction apparente de Sharpe (1,01 en 89 contre 1,0643 en 87) est pré-expliquée par la cellule 80 (« deux Sharpe, deux conventions » — 503 périodes vs annualisation 252) — pas une fabrication.

Diagnostic de la dégénérescence

Motif classique des tranches 8/10 (QC-Py-07/09) : collage d'une conclusion de campagne générique devant une conclusion mesurée pré-existante. Le notebook se conclut deux fois : 88 (template sans mesure) puis 89 (verdict NO BEATS : rendement 40,50 % vs 48,28 %, Sharpe 1,01 vs 1,03, IR -0,15, profil défensif faible beta 0,443).

PLAN du notebook après réparation

Le notebook se conclut une fois (89). La cellule 88, détitrée de la famille fermante, devient ce que son contenu est réellement : la boîte à outils du backtesteur — huit familles de métriques couvertes, seuils de référence par métrique, limitations, références académiques — placée juste avant le verdict final. Corps de 88 intégralement préservé (seuls 3 titres changent).

DÉTAIL de chaque consolidation

A. Cellule 88 : « ## Conclusion et Prochaines Étapes » → « ### La boîte à outils du backtesteur — seuils, garde-fous et références » ; « ### Recapitulatif » → « ### Huit familles de métriques couvertes » ; « ### Points Cles a Retenir » → « ### Seuils de référence par métrique ». Aucune autre modification — les 8 items, la table de 7 métriques, les 5 limitations et les 5 références académiques (Sharpe 1966, Sortino & Price 1994, Young 1991, Sharpe 1964 CAPM, Treynor & Black 1973) survivent à l'identique.
B. Cellule 89 : inchangée — unique conclusion (« ## Conclusion : le verdict honnête »), avec ses trois chiffres à retenir (451/504 jours en drawdown, 286 jours de récupération, PF 1,43 — tous groundés cellules #32/#34/#45), ses exercices de synthèse et le branchement série vers QC-Py-13 (vérifié existant).

Section assumée — marker plan-loss (#14532)

plan-loss: section assumee -- QC-Py-12-Backtesting-Analysis.ipynb section: Recapitulatif : le H3 « Recapitulatif » de la conclusion collee (cellule 88) est retitre « Huit familles de metriques couvertes » — les 8 items survivent integralement sous le nouveau titre, la famille fermante disparait de la queue (la conclusion 89 reste l'unique conclusion)

VERDICT DE SÉQUENCE (honnête)

Le notebook se conclut une fois, sur des chiffres vérifiés ; le matériel de référence (seuils, limitations, bibliographie) vit désormais sous un titre qui dit ce qu'il est. Résiduel assumé : (1) le H2 « Conclusion et Prochaines Étapes » de la base est rétrogradé en H3 non-fermant — le seul titre fermant restant en queue est « le verdict honnête » ; (2) la cellule 26 porte un H3 « Resume » unique en début de notebook (famille fermante hors queue, occurrence unique — pas un finding, déclarée ici) ; (3) aucune re-densification : aucune cellule saine n'est touchée (diff 3+/3−).

Preuves

  • Code byte-identique : sha1 multiset des 34 cellules code identique avant/après ; outputs et execution_count intacts — markdown-only, exception C.2.
  • 90 cellules conservées ; diff 3 insertions / 3 délétions (titres uniquement) ; md-content-loss : aucun finding (ratios ≈ 1.0).
  • Sweep anti-fabrication : 0 décimal de cellule markdown introuvable dans les sorties committées (toutes cellules, pré et post fix).
  • C.1 : 0 hit dans les sources des cellules code.
  • Organ : carriers: 0, records: 0, advisory 0.
  • 0 titre Hn identique en double dans tout le notebook (comptage normalisé complet).

🤖 Generated with Claude Code

…ollee generique (88) devient la boite a outils du backtesteur, le verdict honnete chiffre (89) reste l'unique conclusion

- 88 : H2 'Conclusion et Prochaines Etapes' -> H3 'La boite a outils du
  backtesteur — seuils, garde-fous et references' ; 'Recapitulatif' ->
  'Huit familles de metriques couvertes' ; 'Points Cles a Retenir' ->
  'Seuils de reference par metrique' — corps integrement preserve
- 89 : verifie honnete (tous les decimaux du notebook retrouves dans les
  sorties committes, sweep 0 suspect ; Sharpe 1,01 vs 1,06 explique par la
  cellule 80 'deux Sharpe, deux conventions')
- 3+/3- titres seulement ; codes byte-identiques, 90 cellules conservees

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

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 8.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 12.3s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.4s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 18.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.8s

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

@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: 1
  • Code cells validated: 34
  • 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)

@jsboige

jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner Author

Preuve d'infra — le seul rouge au head ef845d2bf est le PR gate, en echec de lecture d'etat, pas de contenu.

@jsboige

jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17117
head: ef845d2
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 9236da95898d9005e16e4a9d8de563424fef83b47567f3885fd2c59044586c0e
diff-files: 1
diff-additions: 3
diff-deletions: 3
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17117 (fix(#17066): QC-Py-12 — double conclusion dédoublée : la conclusion collée (88) devient la boîte à outils du backtesteur, le verdict honnête (89) reste l'unique conclusion) 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.

@jsboige

jsboige commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner Author

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

Dossier Secrétaire cat. 2 mini-cost cycle 6, exact-head ef845d2, +3/-3, 1 fichier(s).
Mesures firsthand 2026-09-22T02:2xZ.
Tell c.59 respecté : 1 dossier par PR par cycle.
SHA gate live N/A....

— secrétaire myia-po-2026:CoursIA-3

@myia-ai-01
myia-ai-01 merged commit 4801a74 into main Sep 22, 2026
81 of 82 checks passed
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