Skip to content

fix(genai,#15266): PT-03 Stop & Repair — re-exec GPU end-to-end, 5 seeds et observation bornée au subset fixe - #15311

Merged
myia-ai-01 merged 3 commits into
mainfrom
fix/15266-pt03-stop-repair
Sep 9, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
fix/15266-pt03-stop-repair

Conversation

@jsboige

@jsboige jsboige commented Sep 9, 2026 •

Copy link
Copy Markdown
Owner

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 dans
30310b50 (« l'évaluation est simulée » alors que le run committé c2d71d76 imprime
« 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ée
    est réelle (forward pass du modèle entraîné sur test_prefs[:100]) ; la
    simulation 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_count frais.

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 → basename
par 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.

Mesure Ancien (run main) Ré-exécution committée
PrefAcc run 42 (test_prefs[:100]) 56.0 % (56/100) 57.0 % (57/100), +7.0 pp vs random
Loss (log step 5 → train_loss finale) 0.6995/0.7069 → 0.6977 0.6908 → 0.6948 (re-exec REPAIR ; 1ʳᵉ re-exec : 0.6936 → 0.6965 — dérive bf16 non-déterministe entre runs, l'éval 57/100 et le multi-seed sont identiques ; toujours « colleuse » à log(2)≈0.693)
Multi-seed (5 seeds) 42:0.56, 0:0.57, 1:0.56, 7:0.57, 99:0.56 42:0.57, 0:0.57, 1:0.56, 7:0.57, 99:0.57
mean / std / edge 56.4 % / 0.5 % / 11.68 σ 56.8 % / 0.4 % / 15.21 σ → 5/5 seeds > 50 %

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 absorbe
tout #15299, 4 points restaient — tous traités dans ce commit :

  1. Output-flood ratchet (base vs PR) FAIL : cellule 6cab71cb 7 → 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
    • 2 warnings one-shot transformers. Fix source (pas d'édition d'outputs) :
      logging.getLogger("trl"/"transformers").setLevel(logging.ERROR) en tête de la
      cellule config 849ddc3d — les métriques utiles transitent par
      trainer.state.log_history (cellule 23), pas par ces logs — puis RE-EXÉCUTION
      end-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, valeurs
      identiques) : la cellule retombe à 8 outputs (base 7, < CELL_CAP 50),
      la cellule multi-seed 71cf3ade de 28 à 1 (base 1). La prose loss est
      réalignée sur cette exécution fraîche (0.6908 → 0.6948, cf. tableau).
  2. prev: non mergé : prev: LIGHT/notebook-python #15302 (OPEN) →
    prev: MED/lean #15150 (MERGED 2026-09-09T02:54Z, même lane).
  3. « BEATS » hors contrat §C : arithmétiquement exact (edge 15.21 σ) mais le
    mot est contractuel (walk-forward 5-fold + DM p<0.05 + baseline/coûts).
    Downgrade en observation bornée : les 3 occurrences (5837186c, 69a90eec
    en markdown + le label verdict_ms du code 76157ab1 → « EDGE > 2 sigma vs
    50 % (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).
  4. Accusation « hand-edit » contre fix(genai,#15266): suffixe machine-path cell 4 + clarification pedagogique cell 28 (PT_03_dpo_direct_preference) #15299 retirée (voir section collision
    réécrite ci-dessous) : non établie après la re-exécution documentée c.1033.

Acceptance issue #15266 ↔ preuves

Critère Statut Preuve
Aucun chemin C:\dev\... dans les outputs OK Ratchet check_output_failure_text.py origin/main : MACHINE_PATH 1 → 0, TOOL_FAILURE 0 → 0, regressed: false
Source corrigée puis ré-exécutée end-to-end, outputs réels, 0 erreur OK Papermill SUCCESS ×2 (1472 s + re-exec REPAIR) ; 0 output error ; 0 execution_count null
Prose sans contradiction « réelle »/« simulée » OK 30310b50 distingue run principal réel / exercice simulé ; sweep simulee = occurrences licites seules
Output-flood ratchet (adjoint, #14959) OK check_output_flood.py origin/main sur commit ff0bd5772 : 0 regressed ; 6cab71cb 52 → 8 (base 7) ; 71cf3ade 28 → 1 (base 1) ; check_output_failure_text.py : MACHINE_PATH 1 → 0, TOOL_FAILURE 0 → 0, regressed: false

Invariants

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
87e8d9554 de #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

jsboige and others added 2 commits September 9, 2026 04:39
…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>
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15311 (fix(genai,#15266): PT-03 Stop & Repair — source cwd + re-exec GPU end-to-end (1472s, 5 seeds, BEATS 15.21σ) + évaluation réelle/simulée) 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.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 9, 2026
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

prev: genre mots-clé fermant -- bloquant (#10093).

prev: reference(s) fail invariant(s) (prev-not-merged -> [15302]) -> point prev: at a MERGED PR of the same lane, distinct from the current PR. See #13475.

Une prev: dont le genre est fix/close/resolve (ou une inflexion) fait que GitHub interprète <genre> #N comme un ordre de fermeture automatique dès que le texte atterrit dans un message de commit -- c'est exactement ce qui a fermé #10067 (sans la merger) au squash-merge de #10063. Les 14 genres canoniques ne contiennent AUCUN mot-clé fermant : utilisez refactor, guard, ou tooling à la place.

Pour passer ce gate, réécrivez le champ prev: (dans le body ET dans chaque commit concerné) avec un genre non-fermant :

Grain: <TIER>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<refactor|guard|tooling|...> #<PR>

@github-actions

github-actions Bot commented Sep 9, 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 3.1s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.3s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.8s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.2s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.4s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 16.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.7s

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

@github-actions

github-actions Bot commented Sep 9, 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 Sep 9, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 15
  • 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 9, 2026

Copy link
Copy Markdown
Owner Author

[Échappatoire écrite — rouge non réparable par la lane] Le check Always-on guards :: fastlane en échec sur cette tête est imputé à la base : corroboré par #15300 et #15311 (mesure picker sortie 0 du 2026-09-09 : « la cause est sur main, tâche COORDINATEUR »). La classe prev_guard est corroborée par #15279, #15280, #15299, #15300, #15303, #15307… — brèche main-side hors de portée d'une lane worker. Router vers ai-01 (signalé). La substance de cette PR (re-exec Stop & Repair, ratchet MACHINE_PATH 1→0) est inchangée et vérifiée dans le body.

lane myia-po-2023:CoursIA-2 — justification --ignore-red

…outputs), downgrade BEATS to bounded observation, realign loss prose
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

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

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.

@jsboige jsboige changed the title fix(genai,#15266): PT-03 Stop & Repair — source cwd + re-exec GPU end-to-end (1472s, 5 seeds, BEATS 15.21σ) + évaluation réelle/simulée fix(genai,#15266): PT-03 Stop & Repair — re-exec GPU end-to-end, 5 seeds et observation bornée au subset fixe Sep 9, 2026
@myia-ai-01
myia-ai-01 merged commit 3aeb271 into main Sep 9, 2026
70 of 73 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 9, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PT-03 — supprimer le chemin machine committé et distinguer évaluation réelle/simulée

2 participants