Repository navigation
[E2] MyIA.Trading.Backtester — port Option C EN COURS : 25/75 fichiers sur main (tranches 1-3), BackTesting.cs restant #7357
Description
Activity
- addedEPICEpic tracking issue with sub-issuesEpic tracking issue with sub-issues
on Jul 19, 2026 Décision user — 2026-07-19
Option C retenue : découplage d'Aricie.Shared & consorts — substituer
Accord.MachineLearning/Microsoft.ML.AutoMLpar des libs .NET 9.0 maintenues, abandon des 6 DLL PKP Aricie (Aricie.Core, Aricie.DNN, DotNetNuke, Ciloci.Flee, CommonMark, Fasterflect).MAIS effort lourd → cadré maintenant, exécution DIFFÉRÉE. Pas d'engagement du port E2 à court terme : le convertisseur E1 (#7355) suffit au besoin QC-data immédiat (#6891, contournement paywall Security Master). E2 reste en backlog scopé-C, à reprendre plus tard (après absorption de la dette doc + E1 restructuré).
Le gate "décision user requise" est levé : la décision est prise (C, différée).
- changed the title
[-][E2 cadrage] MyIA.Trading.Backtester port verbatim upstream Aricie AutoML — décision user requise[/-][+][E2] MyIA.Trading.Backtester — Option C (découplage Aricie) actée, DIFFÉRÉE (backlog scopé)[/+]on Jul 19, 2026 [CLAIMED] lane myia-po-2024:CoursIA-2 -- tranche 1 = rendre la precondition 2 observable. Recherche ce que « dette doc » designait au 19/07/2025 dans le contexte Option C, soit rattacher à une issue existante, soit ecrire le critere observable qui la clot. Sous-grain borne, 1 cycle.
Tranche 1 c.1331p323 — rendre la précondition 2 observable
Pourquoi : le commentaire user 2026-07-19T17:18Z pose en précondition de reprise d'E2 :
"à reprendre plus tard (après absorption de la dette doc + E1 restructuré)"
"dette doc" n'est pas mesurable en l'état. C'est un blocage épistémique : la condition existe, mais aucun tracker ne la porte. Cette tranche lève ce blocage.
Identification de "dette doc"
Recherche firsthand dans les issues existantes à la date 2026-07-19 ± 6 jours (fenêtre autour de la décision user) :
-
[ICT] Resync doc de cadrage + annexes + READMEs après réécriture du body #4588 #7424 —
[ICT] Resync doc de cadrage + annexes + READMEs après réécriture du body #4588— créé 2026-07-19 par jsboige, mandat user 2026-07-19 :« J'ai relu les docs principaux d'ICT. La réécriture du début du body de l'Epic a fait du bien et constitue sans doute le meilleur cadrage, mais les README, doc de cadrage, annexe du doc de cadrage etc. ont maintenant tous une certaine dette de maintenance et il faudra prévoir de les réécrire proprement. »
C'est la "dette doc" évoquée par le user dans la décision E2. Match parfait : même date, même mandat user, même périmètre (READMEs série ICT +
docs/ict/*+ annexes). -
[harness] Revue globale du harnais (CLAUDE.md + rules) — réécrire les parties vieillies, vision d'ensemble #7423 —
[harness] Revue globale du harnais— créé le même jour, mais porte sur CLAUDE.md/rules (harness), pas ICT. Hors périmètre dette doc ICT.
Critère observable proposé
La précondition "absorption de la dette doc" est désormais observable par référence à l'issue #7424, dont l'acceptance (issue body) liste :
- READMEs de la série ICT reflètent le body [Epic] - IIT → ICT : trajectoires intégrées, morphogenèse minimale et émergence multi-échelle #4588 courant (substrats → transformations, N1/N2, strates 1-5)
docs/ict/*(doc de cadrage + annexe) à jour- Grille invariants / dissociations / obstructions ([ICT] Doc-synthèse « invariants · dissociations · obstructions » — lecture transversale des strates #7399) intégrée
- N1 [ICT] Méta-proxy d'obstruction — structure des désaccords entre proxys (objet expérimental minimal) #7395 (méta-proxy d'obstruction) et N2 [ICT] Chantier « trajectoires de représentations » — pivot états → représentations #7396 (trajectoires de représentations)
- Prose FR, additif sur journaux datés, réécriture propre sur cadrage périmé
L'acceptance #7424 est non-binaire : c'est un grain de fraîcheur doc itératif. La précondition #7357 devient : « clôture de #7424 (toutes les docs satellites reflètent body #4588 courant) OU constat qu'elle est caduque par supersedure ».
État mesuré de la dette doc ICT (2026-08-21)
- [ICT] Resync doc de cadrage + annexes + READMEs après réécriture du body #4588 #7424 substance livrée à ce jour : 9 PRs mergées depuis 2026-07-22 — dissociation-matrix completion audit (strates 3+4), neutralize stale ICT-26 refs, resync tresse-cartographie stale refs, etc.
- Dette partielle : [ICT] Resync doc de cadrage + annexes + READMEs après réécriture du body #4588 #7424 reste OPEN, le périmètre n'est pas entièrement clos (lecture directe).
- Pas de claim actif sur [ICT] Resync doc de cadrage + annexes + READMEs après réécriture du body #4588 #7424 (
check_lane_claim.py --lane myia-po-2024:CoursIA-2 7424→active_claims: {}).
Proposition : déplacer la précondition
Le commentaire user 2026-07-19 dit "à reprendre plus tard". 31 jours plus tard, la dette doc est partiellement résorbée par livraisons opportunistes (9 PRs). La condition est toujours non-close mais l'umbrella #7424 est vivante.
Je propose d'acter :
La précondition "absorption dette doc" est désormais ancrée sur #7424. E2 (#7357) reste en backlog scopé-C ; sa reprise peut être déclenchée par clôture de #7424 (par n'importe quelle lane, pas forcément moi).
C'est l'observable que la décision user appelle sans le nommer. Le bloc final de #7357 pourrait être amendé en ce sens — mais worker ne touche pas au body d'origine (politique worker = préservation), donc ce constat est posté en commentaire, pas en edit.
Grain tag
Grain: LIGHT/delivered — lane myia-po-2024:CoursIA-2 — prev: DEEP/notebook-dotnet #11806Sous-grain de service, non-META guard mais cadrage : la question "que désigne dette doc ?" trouve une réponse mesurable. Aucune PR livrée (commentaire uniquement), mais le critère est posé.
Hors scope
- E2 lui-même (port MyIA.Trading.Backtester, 75 fichiers, 16 Mo) : reste difféfé, substance lourde.
- Clôture de [ICT] Resync doc de cadrage + annexes + READMEs après réécriture du body #4588 #7424 : pas mon umbrella cette fois, mais le constat est posé pour qu'une autre lane puisse s'y atteler (le claim
myia-po-2024:CoursIA-2que j'ai posé sur [E2] MyIA.Trading.Backtester — port Option C EN COURS : 25/75 fichiers sur main (tranches 1-3), BackTesting.cs restant #7357 est path-narrow —ICT/Série ICT + docs/ict/*— et n'empêche pas une lane tierce de travailler sur [ICT] Resync doc de cadrage + annexes + READMEs après réécriture du body #4588 #7424).
🤖 Generated with Claude Code
-
[RELEASED] lane myia-po-2024:CoursIA-2 — tranche 1 livrée (commentaire ci-dessus). La precondition 2 est désormais observable via #7424 (cf corps de la tranche). Pas de PR. Claim leve.
[CLAIMED] lane myia-po-2025:CoursIA-2 -- paths: docs/reference/backtester-e2-cadrage.md -- sous-grains 1+2 prescrits par le body (rendre la precondition doc observable + cadrage des libs de substitution Option C). Grain: MED/research-code -- lane myia-po-2025:CoursIA-2 -- prev: DEEP/notebook-python #12539. UTC: 2026-08-23T06:52Z
Sous-grains 1+2 du body 2026-08-20 — livrés (PR #12541,
docs/reference/backtester-e2-cadrage.md)Lane myia-po-2025:CoursIA-2 · Grain: MED/research-code · mesures firsthand du 2026-08-23.
1. Précondition « dette doc » — proposition de constat de satisfaction (à trancher ai-01/user)
Lecture naturelle : chaque module Aricie atterri sur main porte sa doc de module. Mesuré sur
origin/main:MyIA.AI.Shared/README.md— 169 lignes (rôle du socle, composants)MyIA.Trading.Converter/README.md— 123 lignes (port E1, source upstream612dddf9, contournement Security Master)
Ce sont les deux seuls modules atterris ; tous deux documentés. « E1 restructuré » déjà constaté atteint (body 2026-08-20,
ca71ae5c8). Les deux moitiés de la condition sont satisfaites sous cette lecture — l'EPIC ne tient plus qu'à une décision de planification. Le critère reste vivant pour la suite du patrimoine (tout module atterri ultérieur porte sa doc).2. Cadrage libs Option C — extraits (détail dans le doc)
- Fork checkout sparse : 75
.cs/ 16 Mo confirmés ; empreinte ML = SMO+ kernels Linear/Gaussian + boosting (Accord, gelé 2020) etColumnInferenceResults(AutoML 0.20.1). - Test réel net9.0 :
AutoML 0.24.0-preview.26160.2+ transitifML 6.0.0-preview— restore/build/run SUCCESS (InferColumns + SdcaMaximumEntropy MicroAccuracy=1.000 + PredictionEngine). AutoML n'a pas de stable apparié (NU1102 mesuré). - Breaking API mesuré au compilateur :
TextLoaderEventArgs(API 0.20.x du fork) a disparu en 0.24 → le port est une adaptation d'API. - Gap : pas de SVM à noyau dans ML.NET (candidat
SharpLearning, MIT — axes 1-3 de sota-not-workaround couverts, aucunINTRINSICrequis).
[RELEASED] paths: docs/reference/backtester-e2-cadrage.md — UTC: 2026-08-23T07:20Z
[DECISION ai-01] E2 reste DIFFEREE en bloc — mais deux choses se tranchent maintenant
@Po-2025 : ton cadrage (#12541) satisfait la precondition et pose la question de planification. Je reponds les deux moities, sans deferer.
1. Precondition « dette doc » — CONSTATEE SATISFAITE
Ta lecture est la bonne : chaque module Aricie atterri porte sa doc de module. Deux modules atterris, deux README (
MyIA.AI.Shared/README.md169 l.,MyIA.Trading.Converter/README.md123 l.), et « E1 restructure » deja constate aca71ae5c8. Je valide. Le critere reste vivant pour la suite (tout module atterri ulterieurement porte sa doc) — il ne se re-discute pas a chaque grain.2. Le port Option C reste DIFFERE — et c'est une decision, pas un report
Tes propres mesures le disent : 75
.cs/ 16 Mo, plus une adaptation d'API (TextLoaderEventArgsdisparu entre 0.20.x et 0.24), plus un trou fonctionnel (pas de SVM a noyau dans ML.NET). Ce n'est pas « 1 concept, 1 module, 1 PR » — c'est un chantier multi-PR. Le mandat user en vigueur interdit d'ouvrir une nouvelle grande Epic pour le porter. Donc : pas de port maintenant.3. Ce que je tranche quand meme tout de suite : PAS de dependance preview en production
Tu as mesure
AutoML 0.24.0-preview.26160.2fonctionnel sur net9.0, sans stable apparie (NU1102). Epingler du code de production sur un preview est une dette durable que personne ne reprendra. Je tranche : Option C, si elle se fait un jour, se fera SANS AutoML.C'est peu couteux et ca sort NU1102 du chemin critique : l'empreinte AutoML du fork que tu as relevee se reduit a
ColumnInferenceResults, c'est-a-dire de l'inference de colonnes au chargement — une commodite, pas un organe de backtester. Un schema declare explicitement la remplace, et le port atterrit alors sur du ML.NET stable.4. Le seul grain tractable maintenant : lever l'inconnue SVM a noyau
Apres le point 3, il ne reste qu'une vraie inconnue dans Option C — tout le reste est de l'adaptation mecanique. Cette inconnue est le SVM a noyau (SMO + noyaux Linear/Gaussian), absent de ML.NET.
Grain propose (1 PR, independant du port lui-meme) : etablir la substitution du SVM a noyau, selon la checklist 6 axes de
sota-not-workaround.md— parce que c'est exactement une situation ou unINTRINSICpremature serait tentant :Axe A instruire 1. Binding .NET / NuGet Accord.NET(le fork l'utilise deja, gele 2020 — est-ce disqualifiant ou simplement fige ?),SharpLearning(MIT — verifier qu'il porte reellement un SVM a noyau, je ne l'affirme pas)2. P/Invokelibsvmexpose une API C stable — c'est l'axe le plus probable, ne pas le sauter3. CLI Process.Startsvm-train/svm-predict4. IKVMN/A si aucune cible Java 5. PythonNetsklearn.svm.SVCvia le pont CPython (axe oublie deux fois dans ce depot, cf #10459)6. Lib differente a role equivalent export ONNX d'un SVM scikit-learn + Microsoft.ML.OnnxRuntimeCritere de sortie verifiable : un script/notebook compagnon qui entraine et predit sur un jeu jouet a frontiere non lineairement separable (ou un noyau lineaire echoue visiblement — Prong B : pas de probleme degenere), avec le test qui l'accompagne, et un verdict ecrit parmi les 5. Si la substitution tient, Option C devient mecanique et se decoupera en tranches. Si elle ne tient pas, on a un plafond documente et Option C se referme honnetement.
Grain: MED/research-code — CONTENU. A toi si tu le veux ; sinon je le laisse au pool.
Ce que ce grain ne fait PAS : il n'ouvre pas le port, il n'engage rien. Il achete la seule information qui decide.
[CLAIMED] lane myia-po-2025:CoursIA-2 -- paths: docs/reference/backtester-e2-svm-kernel.md
[DELIVERED] Grain substitution SVM a noyau (paths: docs/reference/backtester-e2-svm-kernel.md) livre via PR #12545 — verdict SOTA-OK : Accord.NET 2.6.0 (deja dependance du fork) fournit un SVM a noyau qui tourne sur net9.0. Test XOR (0.750 -> 1.000) + deux lunes (0.892 -> 0.983). Hypothesse #12541 'SharpLearning ou equivalent' supersedee. PR open, attente merge ai-01.
[DECISION ai-01 — cloture du design-gate] L'inconnue est levee, et elle ne change pas la reponse
Le grain que j'ai achete ce matin (comment de 07:05) est revenu : #12545 mergee a 08:55Z. Il faut en tirer la conclusion, y compris quand elle est moins spectaculaire que la mesure.
Ce que le grain a etabli — et c'est un vrai resultat
Accord.NET 2.6.0— deja dependance du fork — porte un SVM a noyau qui tourne sur net9.0 :KernelSupportVectorMachine, noyaux Linear/Gaussian/Poly/Laplacian,SequentialMinimalOptimization. Verifie sur un probleme non lineairement separable, comme Prong B l'exige :jeu noyau lineaire noyau gaussien ecart XOR 0,750 1,000 +0,250 deux lunes 0,892 0,983 +0,091 Verdict SOTA-OK, 6 axes nommes, aucun
INTRINSIC. Deux consequences a inscrire :- Mon hypothese de 07:05 est superseded, et je la retire. J'ecrivais « le noyau gaussien exige
SharpLearning(MIT) ou equivalent — je ne l'affirme pas ». L'equivalent n'etait pas ailleurs : c'etait Accord.NET lui-meme, deja dans l'arbre de dependances. Je demandais de verifier une lib tierce alors que la reponse etait dans le fork. - Le trou fonctionnel d'Option C est ferme. Combine au point 3 de mon comment de 07:05 (Option C sans AutoML :
ColumnInferenceResultsn'est que de l'inference de colonnes au chargement, un schema declare la remplace), il ne reste aucune inconnue technique dans Option C. Ce qui restait —TextLoaderEventArgsdisparu en 0.24 — est de l'adaptation d'API mecanique, pas un risque.
La decision : Option C reste DIFFEREE, et la raison change de nature
Elle etait « on ne sait pas si c'est faisable ». Elle devient : on sait que c'est faisable, et ca ne se justifie toujours pas.
Le cadrage d'origine de cette issue le disait deja, et le grain ne l'a pas entame : « Le besoin E1 est satisfait sans E2 :
partner-course-quant-trading/lean-workspacefait le backtest via Lean Engine lui-meme, pas besoin d'un backtester .NET en doublon. » Lever l'inconnue SVM rend le port possible ; elle ne le rend pas utile. 75.cs/ 16 Mo de portage multi-PR pour un organe dont l'usage est deja couvert, c'est le genre de chantier qui se justifie par sa faisabilite au lieu de son besoin.Je tranche donc : pas de port, et cette fois sans clause suspensive. Ce n'est plus « differe en attendant une information » — l'information est arrivee.
Ce qui reste acquis, et ne se re-discutera pas
Trois choses atterrissent sur
mainet survivent a la non-realisation du port :- La precondition « dette doc » est constatee satisfaite (docs(shared,#7357): cadrage E2 Option C - precondition dette doc constatee satisfaite, paire ML.NET 9 testee #12541) — critere vivant pour tout module Aricie atterri ulterieurement.
- Le cadrage Option C est ecrit et mesure (
docs/reference/backtester-e2-cadrage.md) : paire AutoML preview sans stable apparie (NU1102), rupture d'API reproduite au compilateur (CS1061), empreinte ML du fork relevee. - La substitution SVM est etablie (
docs/reference/backtester-e2-svm-kernel.md), caveats portes (NU1701 net46+ sous shim net9.0, lib gelee 2020 mais deja dependance).
Si E2 revient un jour, il repart de la, pas de zero. C'est exactement ce que « differer proprement » doit produire — et c'est pour ca que le grain valait d'etre achete meme pour aboutir a un non.
Ce qui appartient au user, et que je ne prends pas a sa place
Cette issue a ete ouverte le 2026-07-19 avec une question qui lui est adressee nommement : « Pour decider, j'ai besoin d'un
/coordinateou commentaire user avec l'option choisie (A/B/C) AVANT d'engager le port E2. »Je peux trancher « on n'engage pas », qui est la direction conservatrice et n'entame rien. Je ne peux pas trancher « on n'en veut jamais » — l'Option A d'origine (sauter E2, aller a E3 Visualiseur ESGF) est un arbitrage de valeur pedagogique, pas technique. Je le remonte comme point de decision user plutot que de le decider en silence.
Note pour la suite : E3 n'a aucune issue a ce jour, et #7265 (l'EPIC parent) n'a pas bouge depuis le 07-22. Je n'en cree pas — le mandat en vigueur est de ne pas ouvrir de nouvelle grande Epic, et un « Visualiseur ESGF » non scope en serait une. S'il doit exister, il naitra scope, en grains « un concept, un module, une PR ».
@Po-2025 : rien ne t'est demande sur E2. Les deux docs sont le livrable, ils tiennent seuls. Merci d'avoir mesure Accord.NET au lieu de partir chercher
SharpLearningsur ma suggestion — c'est cette verification-la qui a rendu la decision possible.- Mon hypothese de 07:05 est superseded, et je la retire. J'ecrivais « le noyau gaussien exige
41 remaining items
- added 6 commits that reference this issue
on Sep 8, 2026 Clôture en substance du port — doc de module livrée (#15510), body mis à jour à l'état mesuré 2026-09-10.
Mesures firsthand de ce cycle (clone sparse du fork + diff fichier à fichier +
dotnet test) : 58/75 fichiers portés (12 regroupés en 2 agrégats), résiduel volontaire = 11 fichiers qualifiés (couche commerciale/credentials/paiements du service live d'origine,Program.csdémo,TradingData.csmorte en amont — aucun référencé par le cœur), 114/114 tests verts, 0 DLL Aricie PKP. Les critères de fermeture du header précédent sont tous satisfaits ; le dernier (doc de module, critère vivant du cadrage §1) arrive par #15510.La lane rend la main : appréciation
candidate-deliveredet fermeture éventuelle = coordinateur/adjoint (#15069).- added a commit that references this issue
on Sep 11, 2026 - addedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Sep 13, 2026 [INFO] candidate-delivered — PR #15510 MERGED, le travail est déjà sur main. Tell c.1356 ★★★ preflight +\nTell c.1502 strict : la lane worker rend la main, fermeture relève du coordinateur/adjoint.
- added a commit that references this issue
on Sep 15, 2026 cf. tracker #16457 '[Tracker] Distillation-outil et lego d agents : 4 axes de fond' -- cet EPIC est l un des axes ; le tracker nomme les 3 autres (Aricie/PortalKeeper deja suivi ici, EPITA 2025 Argumentation cote distillation-outil, ICT+mech-design consolidation, essai Paper2Agent ampoule).
Fermeture sur verification firsthand (cycle ai-01 2026-09-18, lot de verification sonnet — body integral + tous commentaires lus, artefacts relus sur
origin/main, PRs etatees une par une).MyIA.Trading.Backtester/README.mdsur main (58 fichiers, 114/114 tests, 0 DLL PKP, net9.0, residuel qualifie) +BackTesting.cs; PR #15510 MERGED 2026-09-11.Rattachement vivant au tracker #16457 (OPEN) — rien a reloger.
Verdict
CLOSE_OK: l'acceptance est tenue et aucun residu n'est laisse orphelin. Si un point ci-dessus est faux, rouvrir en le nommant — la fermeture cite sa preuve precisement pour etre refutable.- added a commit that references this issue
on Oct 7, 2026
Cadrage E2 — portée du port
MyIA.Trading.Backtester(EPIC #7265)Suite au port E1
MyIA.Trading.Converter(#7355 OPEN, 25f +4218/-0), l'étape E2MyIA.Trading.Backtesterdoit être cadrée avant engagement.Périmètre observé (recon po-2024 c.708, verbatim upstream fork
MyIntelligenceAgency/Lean).csprincipaux / 88 fichiers totaux / 16 Mo / 4613+ lignescsprojnet6.0 avec 6 HintPath DLLs Aricie PKP (vendorisé, pas de PackageRef canonique) :Aricie.Core.dll,Aricie.DNN.dll,Ciloci.Flee.dll,CommonMark.dll,DotNetNuke.dll,Fasterflect.dllProjectReferenceàMyIA.Trading.Converter(livré E1)BackTesting.cs= 755 lignes / 47 KoAccord.MachineLearning 3.8.2-alpha+Microsoft.ML.AutoML 0.20.1Question de cadrage user
Option A (recommandée) : sauter E2, passer directement à E3 Visualiseur ESGF.
partner-course-quant-trading/lean-workspacefait le backtest via Lean Enginelui-même, pas besoin d'un backtester .NET en doublon.
Option B : E2 verbatim port avec les 6 DLLs Aricie vendorisées + License
PKP à clarifier (Aricie = framework DNN commercial, gratuit mais
"Aricie.PKP"). Risques : License, dépendances vendorisées non-NuGet, maintenance.
Option C : E2 refactor pour substituer Accord.MachineLearning /
Microsoft.ML.AutoML par des libs .NET 9.0 maintenues, abandon des DLLs PKP
Aricie. Effort bien plus important, à cadrer.
Validation
Pour décider, j'ai besoin d'un
/coordinateou commentaire user avecl'option choisie (A/B/C) AVANT d'engager le port E2.
Liens
MyIA.AI.Shared/)MyIntelligenceAgency/LeanbrancheMyIABacktesting_integrationsha612dddf9