Skip to content

fix(qc,#18063): audit READMEs QuantConnect — tranche 2 (8 projets, 10 findings re-vérifiés) - #19553

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/18063-qc-readme-tranche2
Oct 7, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/18063-qc-readme-tranche2

Conversation

@jsboige

@jsboige jsboige commented Oct 6, 2026

Copy link
Copy Markdown
Owner

Grain: MED/docs — lane myia-po-2023:CoursIA — prev: MED/docs #19549

Audit READMEs QuantConnect — tranche 2 (8 projets, 10 findings, re-vérification intégrale)

Suite de #19524 (tranche 1, 8 projets). Chaque finding de l'audit automatisé a été re-vérifié firsthand (audit-reassessment : README + notebook parsés en JSON sur origin/main, jamais sur le label) avant tout fix. 10/10 CONFIRMÉS — dont 2 avec correctif inversé ou amendé par rapport à la proposition de l'audit (colonne « verdict »).

Verdicts par finding

Projet Sév. Finding Re-vérification firsthand Fix livré
FamaFrench MED quantbook.ipynb absent du README CONFIRMÉ — notebook présent (26 cellules, reproduction QC de l'analyse), Files ne liste que research.ipynb Ligne Files ajoutée
ForexCarry (a) MED quantbook.ipynb absent CONFIRMÉ — Files = main.py + research.ipynb seulement Ligne Files ajoutée
ForexCarry (b) MED « six hypothèses » n'en énumère que 5 CONFIRMÉ — H2 existe dans le notebook : « Quels lookback periods sont optimaux ? (21, 63, 126, 252 jours) » ; la ligne Files disait déjà « H1-H6 » H2 insérée dans l'énumération (lookbacks 21/63/126/252 j)
Framework_Composite_EMATrend (a) HIGH README « EMA70/Trend30 » vs quantbook « EMA40/Trend60 » CONFIRMÉ mais correctif INVERSÉ : la sortie réelle du sweep (cellule 12) élit EMA70/Trend30 (Sharpe 0.497) — README et main.py sont corrects (« sweep WINNER »). L'ambiguïté vit dans la cellule d'en-tête du quantbook : « Target allocation: EMA40/Trend60 » sous « Performance de référence » = l'allocation initiale (défaut du simulateur), pas un verdict Cellule 0 du quantbook clarifiée : allocation initiale/défaut vs sweep élisant EMA70/Trend30 — le README n'a pas bougé
Framework_Composite_EMATrend (b) MED 2 notebooks non mentionnés CONFIRMÉ — Fichiers ne liste que les .py 2 lignes ajoutées (quantbook + quantbook_composite_research)
Framework_Composite_MomentumRegime MED quantbook.ipynb absent CONFIRMÉ Ligne Fichiers ajoutée
Framework_Composite_TrendWeather HIGH refs de cellules 8/9/11/12 périmées CONFIRMÉ — re-mesuré par matching des valeurs Sharpe citées dans le README contre les sorties réelles de chaque cellule (27 cellules) : défaut 50/50 (0.680) = cell 10, allocation sweep (0.382→0.738) = cell 16, stop-loss (0.684→2.124) = cell 18, rebal freq (0.626→1.070) = cell 23, T×freq grid (0.544→1.161) = cell 25 7 refs corrigées (5 lignes du tableau métriques + quantbook.ipynb:11-12 → cellule 10 + prose L51 cell 12 → 23)
— TrendWeather (rider) MED refs iter4_research.py périmées FALSE POSITIVE partiel — la ref ligne 176 re-vérifiée : la note « Simulation Sharpe is typically 2-3x cloud » est bien à cette ligne Ref conservée telle quelle
Gaussian-Direction-Classifier HIGH features décrites ≠ features réelles CONFIRMÉ — code source du notebook (cellule 5) : rendements close[w:]/close[:-w]-1 sur FEATURE_WINDOWS (2, 5, 10, 21 j), aucun RSI/volume/volatilité dans les sources (les hits « rsi » bruts étaient du base64 d'images) Ligne description réécrite sur les features réelles
HAR-RV-Kelly MED notebook « Volatility » vs README « Variance » CONFIRMÉ — Corsi 2009 = Realized Variance, le README (et README.en.md) est conforme, c'est la cellule d'en-tête du notebook qui dérive Cellule markdown corrigée (Volatility → Variance)
LSTM-Forecasting MED research.ipynb non mentionné CONFIRMÉ — 15 cellules/5 code, parcours pédagogique LSTM (portes, forward manuel, backtest), Files ne liste que main.py Ligne Files ajoutée

Gardes

  • check_prose_quantitative_claims.py --diff origin/main...HEAD --strict : rc=0 (vérifié sur le diff committé — voir leçon)
  • Notebooks : cellules markdown uniquement — git diff | grep -c 'execution_count\|"outputs"' = 0 (exception C.2, pas de re-exec due) ; JSON validé post-écriture ; backups supprimés
  • Pre-commit hooks : tous Passed (gitleaks, H.3, ratchets)
  • Prose ajoutée en français y compris dans les READMEs EN (readme-french-first HARD 1)
  • Catalogue : byte-identique à main (pas dans le diff)

Leçon de méthode (consignée)

L'organe prose-counts juge le diff committé : un passage local avant commit rend « OK » à tort (mesuré sur #19524 : rouge CI réel, vert local). Toujours relancer après le commit.

See #18063

🤖 Generated with Claude Code

…0 findings re-verifies)

Tous les findings re-verifies firsthand (audit-reassessment) avant fix :

- FamaFrench/ForexCarry/MomentumRegime/EMATrend/LSTM-Forecasting : lignes
  quantbook/research.ipynb ajoutees dans Files/Fichiers (MISSING_PRESENTATION)
- ForexCarry : H2 (lookbacks 21/63/126/252 j) restaure dans l'enumeration
  'six hypotheses' qui n'en listait que 5
- EMATrend : le README (EMA70/Trend30) est CONFIRME par la sortie du sweep
  (cellule 12 : Sharpe 0.497) -- c'est la cellule d'en-tete du quantbook qui
  portait l'ambiguite ; clarifiee : EMA40/Trend60 = allocation initiale
  (defaut du simulateur), pas le verdict
- TrendWeather : refs de cellules 8/9/11/12 -> 16/18/23/25 (+10 pour le
  50/50), re-mesurees par matching des valeurs Sharpe citees ; la ref
  iter4_research.py:l176 re-verifiee EXACTE (conservee)
- Gaussian-Direction-Classifier : features reelles (rendements retardees
  2/5/10/21 j) remplacent la description fausse (RSI/volume/volatilite)
- HAR-RV-Kelly : notebook 'Volatility' -> 'Variance' (Corsi 2009, le README
  etait conforme) -- cellule markdown uniquement

Notebooks : cellules markdown uniquement (C.2 exception), 0 ligne
execution_count/outputs touchee.

See #18063

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

github-actions Bot commented Oct 6, 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 6, 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 6, 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 6, 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 6, 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 variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2023:CoursIA a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #19260 (MED/docs, merge a 2026-10-06T06:40:03Z), #19430 (LIGHT/docs, merge a 2026-10-06T06:43:31Z), #19479 (MED/docs, merge a 2026-10-06T14:43:56Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) labels Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 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 10.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.3s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 16.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 9.6s

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

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2023:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-06) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=1 genre=3 cap=2)
  • GENRE-RUN : run consecutif d'un genre LIGHT (voir signals.runs dans le log du job)
  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=1 genre=3 cap=2)

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre docs dans la famille META (docs/guard/ledger/readme/test) + diff de 28 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 2
  • Code cells validated: 16
  • 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 Oct 6, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19553 (fix(qc,#18063): audit READMEs QuantConnect — tranche 2 (8 projets, 10 findings re-vérifiés)) 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 Oct 7, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19553
head: bc54aab
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: e105fb24a887abfe4bcb74cf5a49a176b797e34ecea98e7bca9ea4bca2c4a2f9
diff-files: 9
diff-additions: 17
diff-deletions: 11
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19553
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 975d382 into main Oct 7, 2026
98 of 100 checks passed
@jsboige
jsboige deleted the fix/18063-qc-readme-tranche2 branch October 7, 2026 07:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants