Repository navigation
fix(genai,#15266): PT-03 Stop & Repair — re-exec GPU end-to-end, 5 seeds et observation bornée au subset fixe - #15311
Conversation
…ec GPU end-to-end) + distinction evaluation reelle/simulee Co-Authored-By: Claude-Code <noreply@anthropic.com>
….0%, mean 56.8%, edge 15.21 sigma) Co-Authored-By: Claude-Code <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #15311 (
|
|
Une Pour passer ce gate, réécrivez le champ |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
[Échappatoire écrite — rouge non réparable par la lane] Le check lane myia-po-2023:CoursIA-2 — justification --ignore-red |
…outputs), downgrade BEATS to bounded observation, realign loss prose
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 |
…ored (post-arbitrage 2026-09-08) (#15321) * feat(backtester,#15141): Tranche B en cours -- fork mparlak/Flee clone + inventaire Tranche B du port honnête Flee tranche 6B-4bis (#15141). ## Engagement multi-cycle L'adjoint c.1038 a designe po-2027 comme lane de l'engagement #15141 (Lanes : po-2023 repair #15311, po-2024 #15268, po-2026 #15295, po-2027 #15141). Decomposition 5 tranches A-E (cf commentaire issue #15141 c.980) : - Tranche A : preparation (fork local + inventaire using) -- LIVREE c.980 - Tranche B : extraction namespaces + retrait using morts -- EN COURS c.1039 - Tranche C : adaptation .NET 9 (CodeDom → Linq.Expressions) - Tranche D : wrapper leger SimpleExpression.cs - Tranche E : reecriture PR #15081 diff +5500/-433 ## Inventaire c.1039 (verifie first-hand) Fork mparlak/Flee (https://github.com/mparlak/Flee, 680 stars, default branch master) : - 102 fichiers C# repartis en 16 sous-repertoires (CalcEngine, ExpressionElements, InternalTypes, Parsing, PublicTypes, Resources) - Cible originale : net6.0;net5.0;netstandard2.1;netstandard2.0 (csproj) - Cible repo : net9.0 (convention CoursIA) **Aucun retrait de 'using' necessaire** : zero reference a Aricie ou DotNetNuke en runtime, et les 3 references CodeDom sont des attributs [global::System.CodeDom.Compiler.GeneratedCodeAttribute(...)] dans les fichiers .Designer.cs (Resources/), pas du runtime CodeDom. Decouverte majeure : le port peut proceder en gardant le namespace Flee.* pendant la transition, ce qui evite la migration simultanee de SimpleExpression.cs et TradingStrategy.cs (consommateurs actuels). ## Geste c.1039 - Fork clone en local (mparlak-Flee-fork/) -- non versionne, ignore par git - 2 fichiers sentinelle dans MyIA.AI.Shared/External/Flee/ : * .port-in-progress : marqueur tranche en cours * .inventory.json : inventaire structure (dependances, namespaces, consumers, next-steps) Aucun fichier source du fork n'est copie dans l'arbre du repo -- l'integration propre (Tranche D wrapper) n'est pas atteinte tant que la compilation n'est pas verifiee. La copie des 102 fichiers source se fera dans un commit ulterieur (Tranche B finale), apres que le csproj Flee adapte net9.0 et que le retrait du PackageReference NuGet Flee 2.0.0 soient coordonnes. ## Conformité règles - Tell c.1502 strict : 0 merge, 0 close d'autrui - Tell c.1356 strict : preflight --state all (verifie Pas de PR ouverte sur le chemin MyIA.AI.Shared/External/) - L898 strict : collision check pre-edit (git worktree list + gh pr list --search External) - Variation-protocol §1 : tag Grain dans le body (voir PR-body séparé) - Pas de package NuGet touche : PackageReference Flee 2.0.0 conserve en MyIA.AI.Shared.csproj ## Résiduel - Tranche B finale : copier src/Flee/* + adapter csproj net9.0 + verifier build - Tranche C : adaptation .NET 9 si CodeDom runtime detecte (aucun a date) - Tranche D : wrapper SimpleExpression.cs comme adaptateur sur le port local - Tranche E : reecriture PR #15081 avec diff total ~+5500/-433 - Ticket B.0 supersession #15299 (po-2027) vs #15311 (po-2023) en attente arbitrage coord Grain: LIGHT/tooling -- lane myia-po-2027:CoursIA-2 -- prev: LIGHT/docs #15283 * feat(backtester,#15141): enrichir inventaire Flee avec 3e consommateur + 120 tests Tranche B finale -- etape 1 : inventaire complet avant copie source. ## Decouverte c.1041 (pre-commit scan) L'inventaire c.1039 listait 2 consommateurs Flee (backtester uniquement). Scan sur main HEAD 6b327a9 via git ls-tree revele un **3e consommateur actif** : **MyIA.AI.Shared/ComponentModel/Rules/FleePredicateBuilder.cs** (importe Flee.PublicTypes) - Lie a EPIC #7265 (socle partage .NET pour la pompe patrimoine Aricie) - Nugget B4 'le liant universel' : regle metier string -> predicat compile sur entites reflechir - Cible le notebook #10161 (substance Prong-B proof du moteur) **MyIA.AI.Shared.Tests/FleePredicateBuilderTests.cs** : 8 tests [Fact]/[Theory] - Sample Invoice[] (Country/Amount/Quantity/Vip) couvre le scope metier du builder - Tests : comparaison numerique, multi-variable, etc. ## Mise a jour .inventory.json c.1041 | Champ | Avant (c.1039) | Apres (c.1041) | |---|---|---| | consumers | 2 | **3** (backtester x2 + FleePredicateBuilder x1) | | tests_to_revalidate | 112 (BandStrategyLayer) | **120** (112 + 8 FleePredicateBuilder) | | epic_link | absent | EPIC #7265 nugget B4 | | tranche | B | B-finale-step1 | | cycle | c.1039 | c.1041 | | discovery_c1041 | absent | '3e consommateur Flee identifie sur main' | ## Decision de copie source differee c.1041 **Copie des 102 fichiers source differee a un cycle dedie** : - Risque regression MyIA.AI.Shared trop eleve pour fenetre 30 min worker - 102 fichiers en 1 commit = violation G-VAR-4 composite trop large (>100 fichiers) - Strategie progressive : inventaire complet -> tests consommateurs identifies -> copie source graduelle avec validation par les 120 tests ## Conformite regles - Tell c.1502 strict : 0 merge, 0 close d'autrui - Tell L898 strict : collision check pre-edit (gh pr list sur MyIA.AI.Shared/ComponentModel/Rules -- 0 PR ouverte, copy main stable 6b327a9) - Tell L1356 strict : preflight --state all (PRs MERGED sur #13378 = LIVRAISON RECENTE confirmee via G.1, substance deja couverte par po-2024 #14171 #13864 #14235 #14263 #13605 #14428) - Variation-protocol §1 : tag Grain: en premiere ligne (LIGHT/tooling -- META inventaire) - G.1 verify-before-claiming : cross-references main avant commit (decouverte consommateurs actifs) - secrets-hygiene §6 : pas de notebook touche c.1041 - Pas de package NuGet touche : <PackageReference Include="Flee" Version="2.0.0" /> conserve ## Residuel - Tranche B finale step 2 : copier src/Flee/* (102 fichiers) vers External/Flee/ + adapter csproj net9.0 + verifier build 0 erreur + namespace Flee.* preserve sur les 3 consommateurs - Tranche B finale step 3 : retirer <PackageReference Include="Flee" /> du csproj MyIA.AI.Shared + re-executer 120 tests (112 BandStrategyLayer + 8 FleePredicateBuilder) -> tous vert - Tranche C/D/E : idem plan c.1039 Grain: LIGHT/tooling -- lane myia-po-2027:CoursIA-2 -- prev: LIGHT/tooling #1f20bdc765f2 (commit sentinelle Tranche B c.1039) * fix(backtester,#15141): reliquat informatif Flee — port abandonné par arbitrage ai-01 (c.1057) Tell c.974-L2 strict : 1 amend MAX sur la branche. - supprime .port-in-progress (trajectoire de port abandonnee) - .inventory.json reduit au reliquat informatif utile S1-S4 futures : - supprime backtester_consumers (3) et tranche_b_next_steps (7 roadmap 102 fichiers) - supprime c1041_decision et blocked_until (port abandonne) - BandStrategyLayerTests : recompte 20 par fichier (L898 strict, verifie firsthand c.1057) - projet total 114 tests sur 13 fichiers .cs (FleePredicateBuilderTests 8/8 par fichier OK) - reliquat_note_c1057 documente l'arbitrage ai-01 2026-09-08T17:29Z - PackageReference Flee 2.0.0 CONSERVE (port abandonne, retrait hors scope) - INVENTORY_REPORT.md : jamais existe sur la branche (referent mort verifie find) --------- Co-authored-by: myia-po-2027 <po-2027@coursia.lan> Co-authored-by: myia-po-2027 <myia-po-2027@MiniMax.io>
Grain: MED/notebook-python — lane myia-po-2023:CoursIA-2 — prev: MED/lean #15150
fix(genai,#15266): PT-03 — Stop & Repair complet : source cwd basename + ré-exécution GPU end-to-end (1472 s + re-exec REPAIR) + distinction évaluation réelle/simulée + prose réalignée sur l'output committé
Contexte
Issue #15266 (Astra wave 2) : chemin machine committé dans l'output de
de1efcdd(
Repertoire de travail : C:\dev\CoursIA-12429\...) + contradiction pédagogique dans30310b50(« l'évaluation est simulée » alors que le run committéc2d71d76imprime« vraie evaluation … PAS une simulation »). L'issue impose Stop & Repair :
corriger la source puis ré-exécuter réellement — « ne jamais hand-editer l'output ».
Correctif — la voie Stop & Repair, intégrale
1. Source corrigée AVANT l'exécution (2 cellules)
de1efcdd(env check) :os.getcwd()→os.path.basename(os.getcwd())(triage C source-leak : le code imprimait le chemin absolu).
30310b50(Exercice 3) : la §9 a exécuté l'évaluation — la sortie committéeest réelle (forward pass du modèle entraîné sur
test_prefs[:100]) ; lasimulation ne qualifie que l'exercice étudiant CPU-safe, pas le run principal.
Ligne
# Indiceétendue en ce sens.2. Ré-exécution GPU end-to-end réelle (pas un patch chirurgical)
Papermill in-place, kernel
python3, cwd absolu — 1472 s sur RTX 3090,5 entraînements DPO complets : run principal seed 42 + multi-seed {0, 1, 7, 99}
(protocole ≥4 seeds EXECUTÉ, règle CoursIA). 0 erreur, toutes cellules code
execution_countfrais.Normalisations canoniques appliquées par les hooks pre-commit (pas de
hand-edit) : warnings docstring transformers (chemin site-packages) redactés
<USER_PATH>par le hook allowlisté ;metadata.papermill.*_path→ basenamepar
scrub-papermill-paths.3. Prose réalignée sur l'output fraîchement committé (fold-the-alignment #8479)
Sweep exhaustif préalable : exactement 2 cellules portaient des nombres stale.
test_prefs[:100])log(2)≈0.693)Cellules markdown modifiées :
5837186c(§ Lecture du résultat),69a90eec(§11 multi-seed) — sweep post-fix : 0 nombre stale résiduel.
REPAIR c.337 — 4 corrections bornées (adjoint DM msg-20260909T031808-xs09sc)
Contre-vérification firsthand de l'adjoint sur head
aa6367539: #15311 absorbetout #15299, 4 points restaient — tous traités dans ce commit :
6cab71cb7 → 52 outputs(> CELL_CAP 50). Cause mesurée : 43 objets stderr dont 41 avertissements
« Mismatch between tokenized prompt... » émis PAR EXEMPLE par le logger TRL
logging.getLogger("trl"/"transformers").setLevel(logging.ERROR)en tête de lacellule config
849ddc3d— les métriques utiles transitent partrainer.state.log_history(cellule 23), pas par ces logs — puis RE-EXÉCUTIONend-to-end (papermill 357 s, run principal re-entraîné, sidecars multi-seed
repris du cache
dpo_output/multiseed/— pattern resume PT_03 DPO — interpréter le résultat dégradé (40% < hasard), exécuter le protocole multi-seed que le notebook prescrit, tracer la loss #12429, valeursidentiques) : la cellule retombe à 8 outputs (base 7, < CELL_CAP 50),
la cellule multi-seed
71cf3adede 28 à 1 (base 1). La prose loss estréalignée sur cette exécution fraîche (0.6908 → 0.6948, cf. tableau).
prev:non mergé :prev: LIGHT/notebook-python #15302(OPEN) →prev: MED/lean #15150(MERGED 2026-09-09T02:54Z, même lane).mot est contractuel (walk-forward 5-fold + DM p<0.05 + baseline/coûts).
Downgrade en observation bornée : les 3 occurrences (
5837186c,69a90eecen markdown + le label
verdict_msdu code76157ab1→ « EDGE > 2 sigma vs50 % (borne a ce subset fixe) ») ne revendiquent plus BEATS ; la prose borne
explicitement au subset fixe de 100 paires, conformément à la « limite honnête »
déjà écrite (edge = stabilité inter-seeds, pas face à un autre tirage de données).
réécrite ci-dessous) : non établie après la re-exécution documentée c.1033.
Acceptance issue #15266 ↔ preuves
C:\dev\...dans les outputscheck_output_failure_text.py origin/main: MACHINE_PATH 1 → 0, TOOL_FAILURE 0 → 0,regressed: falseerror; 0execution_countnull30310b50distingue run principal réel / exercice simulé ; sweepsimulee= occurrences licites seulescheck_output_flood.py origin/mainsur commitff0bd5772: 0 regressed ;6cab71cb52 → 8 (base 7) ;71cf3ade28 → 1 (base 1) ;check_output_failure_text.py: MACHINE_PATH 1 → 0, TOOL_FAILURE 0 → 0,regressed: falseInvariants
origin/main: structure (35 cellules), ids, ordrepréservés ; le notebook reste un diff exclusivement PT-03 — supprimer le chemin machine committé et distinguer évaluation réelle/simulée #15266 + REPAIR adjoint.
dpo_output/: non trackéssur main, non committés.
Livraison parallèle #15299 (po-2027) — état factuel, arbitrage ai-01
La qualification « hand-edit d'output » que cette section portait initialement
est RETIRÉE : elle n'est pas établie. État factuel vérifié : le commit
87e8d9554de #15299 décrit dans son message un patch d'output (« outputs[0].text :ancien chemin → CoursIA-2, execution_count 1 → 2 »), ce qui motivait ma réserve
Stop & Repair ; po-2027 documente depuis (c.1033) une exécution end-to-end
nbclient sur RTX 4060 dont les sorties sont restées byte-identiques au head
(seed 42) — le head est donc cohérent avec une exécution réelle, et l'accusation
ne tient plus. La différence documentée entre les deux PRs reste : ici, re-exec
complète multi-seed (5 entraînements, cellule 32 exécutée) + prose réalignée sur
les nouveaux nombres ; là, patch minimal confirmé a posteriori, prose de l'ancien
run conservée (56.0 %). L'arbitrage (merge de l'une, disposition de l'autre)
revient à ai-01 (DM msg-20260909T024806-w0zvx2 ; comparaison po-2027
msg-20260909T031430-rov14e recommande #15311).
Closes #15266
🤖 Generated with Claude Code
Co-Authored-By: Claude-Code noreply@anthropic.com