Repository navigation
fix(qc,#9768): figer la fenetre du dernier D2 — research_robustness CSharp-BTC-EMA-Cross - #17220
Conversation
…2019 -> 2025-12-31) + SetEndDate recommande - qb.History et fallback yfinance: datetime.now() -> bornes figees 2019-01-01/2025-12-31 - analysis_date figee (2026-09-21), recommandation SetEndDate(2025,12,31) ajoutee au JSON exporte - re-execution reelle via le fallback yfinance du notebook (projet QC 21193838 disparu, preuve API): 2556 bars BTC reelles, Sharpe 1.137, 0 erreur, 6/6 cellules - scan_d2_window_openness: D2+ 2/1465 -> residu FP documente uniquement (research_classification, FP deja connu du tableau SHA du 02/09) See #9768 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
Le rouge |
|
Grain tag obligatoire (#10045, bloquant).
Pour passer ce gate, le body doit porter en tete une ligne de la forme : Le |
|
[ADJOINT PREFLIGHT] Au head c9ee3cf : 81 check-runs dedupliques latest-wins, 0 pending, 0 non-verts. b0 rc=0 mesure ce cycle. Porteur myia-po-2027:CoursIA (fenetre du dernier D2 figee, research_robustness CSharp-BTC-EMA-Cross), distinct de la lane emettrice. |
…ite + mode 2-couches + analyse multi-echelle (#17305) * feat(iit,#8236): pilote inoculation -- clamp-scale alpha + mode 2-couches clamp/read Extension du pipeline GPU d'extraction SAE pour le jalon 3 de l'Epic #8236 (experience pilote multi-echelle, Livrable 2) : - --clamp-scale alpha borne [0,1] : h' = h - alpha*delta, retro-compatible alpha=1 (annulation exacte Gate 24 historique), suffixe de nommage _s{alpha} uniquement si alpha != 1 (trace_filename, param clamp_scale) - mode inoculation 2-couches (--clamp-frac / --read-frac, defaut lecture = resid final) : ClampHook a la couche d'inoculation, CaptureHook a la couche de lecture, double SAE (couche du hook != couche d'encodage), garde read > clamp -- la bifurcation vit dans la propagation aval, pas dans la perturbation injectee - sanity greedy deplacee AVANT le retrait des hooks : sous inoculation elle documente la degradation de la generation - 9 tests du contrat (tests/test_inoculation_pilot.py) : neutralite alpha=0 (retour de la sortie elle-meme), annulation exacte alpha=1, linearite en alpha (clamp 0.5 = moyenne exacte), tuple preserve, W_dec exige, suffixes Smoke GPU valide sur les deux modes (2B, RTX 4060) ; cross_scale : 35 passed + 1 base-inherited (ModuleNotFoundError import package, reproduit sur arbre stashe). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(iit,#8236): ICT-42 pilote inoculation — notebook execute + 12 traces + README Grain: DEEP/notebook-python -- lane myia-po-2027:CoursIA -- prev: MED/qc #17220 - ICT-42-InoculationBifurcation-Pilot.ipynb : analyse GPU-free executee (11 cellules code, 0 erreur, execution_count non nuls) — dissociation de forme : 1.7B saturant (facteur rupture 2.77 < 4, pente max au premier cran) vs 2B bascule tardive (8.11 > 4, alpha* = 0.625), Spearman prompts cross-echelle negatif (-0.25 a -0.66) - traces/ : 12 traces neuves (2 echelles x [ref lecture sans hook + 5 intensites]) + 2 figures (ordre-parametre, cross-echelle) - README : entrees ICT-42 + ICT-35b/35c (2 non-listes corriges, reconciliation 78 notebooks tous documentes) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(iit,#8236): ICT-42 controle permute du panel -- phase 6, leve la limite 2 du pilote --random-panel SEED dans extract_sae_traces.py : remplace le panel differentiel par un tirage seede de meme taille hors panel (une permutation de la liste serait un no-op : la somme acts @ W_dec est invariante a l'ordre). Meta tracee (random_panel, random_panel_excluded), traces distinguees par prefixe inocrp_. Sweep 4 runs (2 echelles x alpha in {0.25, 1}) : la bascule super-lineaire du 2B DISPARAIT sous panel aleatoire (m(1)/m(0.25) = 1.18 vs 8.11), reponse 4x a 28x plus faible, pipeline prouve sensible (m > 0 partout). Confondant mesure plutot que masque : le tirage est 80x (2B) a 770x (1.7B) moins actif a la couche d'inoculation (audit d'activite sur les references mi-reseau). Controle apparie en norme = prolongement nomme. Notebook : section Controle permute + limite 2 reecrite (LIVRE, forme panel aleatoire), re-execution complete (12 cellules code, 0 erreur). Tests : +3 (reproductibilite seed, exclusion + taille, panel saturant refuse) -- 12/12 verts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(iit,#8236): ICT-42 controle apparie en norme -- phase 6b, leve le confondant d'activite - --matched-panel SEED + --activity-from NPZ + --matched-band FACTOR dans extract_sae_traces.py : tirage seede restreint a la bande d'activite du panel differentiel ; gardes croisees (couche ref == couche inoculation, d_sae identique, exclusivite avec --random-panel) - ref_activity() : meme statistique que la derivation du panel (moyenne code_python / prose_fr, |act| accumulee par token) - 4 tests nouveaux (bande+exclusion, seed reproductible, pool insuffisant refuse, agregation ref sur trace synthetique) -- 16/16 verts - Sweep GPU 4/4 RC=0 (2 echelles x alpha {0.25, 1}), traces inocmp_* - Resultat 2B : la reponse REVIENT sous appariement (m(1)=0.1235, 5.6x le tirage uniforme) mais la super-linearite est divisee par 2.4 (8.11 -> 3.38) et la selectivite par jeu disparait (x3.2-3.9 homogene vs prose_fr x11.1 sous panel) : la norme porte l'amplitude, le contenu du panel porte la discrimination -- revision assumee de la lecture phase 6 - Bande x8 motivee par la mesure : le panel occupe les rangs 1-19 (2B) de la distribution d'activite, une bande x2 n'y laisse que 1-4 candidats - Notebook re-execute complet (13 cellules code, 0 erreur, 0 exec null) : section 6b + interpretation reelle + Retenir/Limites resynchronisees ; README etendu Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ict,#8236): importorskip torch dans _load_script_module Le job CI 'ICT tests/ (58)' n'installe pas torch (seulement ict + pyphi/numpy/scipy/matplotlib) : les 7 tests chargeant extract_sae_traces.py par chemin echouaient avec ModuleNotFoundError depuis la phase 6, masque par les morts runner successives. Convention de la serie (test_causal_hooks.py:52) : importorskip DANS la fonction de chargement, pas en tete de module -- les tests trace_filename (sans torch) restent executes en CI. Verifie : 16/16 localement, les 7 concernes passeront en skip en CI sans torch. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ion header (#17257) The body exemption regex anchored 'd[ée]rive' at end-of-line, so the suffixed form '## Diagnostic derive (C.4)' -- the canonical C.4 header with its rule qualifier -- silently failed to exempt a documented drift. Widened to accept one optional parenthetical qualifier; 3 tests added (suffixed accented/unaccented exempt, trailing garbage still rejected). Cas vecu: PR #17220, patch drift 3.13.7 -> 3.13.15 documented under a suffixed C.4 header, guard red despite the section being present. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Grain: MED/qc -- lane myia-po-2027:CoursIA -- prev: DEEP/notebook-python #17196
Ce que fait cette PR
Fige la fenetre du dernier vrai D2 du corpus (
research_robustness.ipynb, CSharp-BTC-EMA-Cross), tranche Phase 3 de l'EPIC #9768 — et le notebook est re-execute avec ses outputs reels.Mesure fraiche qui fonde le grain
scan_d2_window_openness.pysurorigin/main(corpus 1465 fichiers) rend 2 D2+ (0.1 %) — la « liste des 16 » du commentaire du 2026-09-02 n'a jamais ete publiee et est de toute facon perimee. Des 2 residuels, un est le FP deja documente (research_classification.ipynb, tableau SHA du 02/09) ; l'autre est le fichier traite ici. Bloc d'etat mesure poste sur l'EPIC (c.5760860898), claim c.5760863986.Diagnostic derive
datetime.now()s'allongeait a chaque passage.CAUSE_FIXED— bornes figees dans les deux canaux (QuantBook ET fallback yfinance).Le fix (3 edits source, rien d'autre)
qb.History(..., datetime.now(), ...)->datetime(2025, 12, 31)(canal primaire)ticker.history(end=datetime.now().strftime(...))->end="2025-12-31"(fallback)analysis_datefigee + recommandationSetEndDate(2025, 12, 31)ajoutee au JSON exporte (le notebook recommandait unSetStartDate(2019,1,1)sans date de fin — la recommandation elle-meme perpetuait la fenetre ouverte)La graine etait deja posee (
np.random.seed(42), generateur synthetique de secours) — verifie, inchange.Execution reelle (C.2)
Papermill kernel
python3(venv projet), 12/12 cellules, 0 erreur, 6/6 cellules code avecexecution_count+ outputs :Period: 2019-01-01 -> 2025-12-30(derniere barre reelle), 2556 bars BTCUSD Dailyanalysis_date: "2026-09-21"figeCanal d'execution documente : le projet QC Cloud 21193838 porte par le markdown n'existe plus (
POST /api/v2/backtests/list {projectId: 21193838}->The requested project does not exist, verifie 2026-09-21T13:10Z). Le notebook embarque un fallback local yfinance concu dans sa cellule 1 (try QuantBook / except yfinance) : l'execution locale emprunte ce canal avec donnees BTC reelles. Regle F appliquee :quantconnect-stubsinstalle dans le venv pour rendreAlgorithmImportsimportable (sans lui l'import hors-try tuait l'execution avant le fallback).Verifications post-fix
scan_d2_window_openness.pysur la branche : D2+ 0/1, CONFORME 1/1 (sur main : 2/1465 -> residu = FP documente seul)raise NotImplementedError/assert False/1/0HEAD)[A determiner]— elle n'a jamais ete remplie depuis l'origine, l'enrichir est un grain separe.See #9768
🤖 Generated with Claude Code