Repository navigation
fix(notebooks,#18736): 09e — budget mensuel renouvelable dans trajectoire - #18751
Conversation
La cellule trajectoire (c10) accumulait la depense sur 365 jours alors que le budget documente est mensuel ($10/mois). Le modele devient : compteur remis a zero a chaque frontiere de mois, colonnes en jour du mois, temoins d'acceptance (0.40 USD/j -> alerte jour 20 / epuisement jour 25 ; zero requete -> jamais), ligne 100% locale, organe d'alerte teste dans les deux regimes, prose alignee. Carnet re-execute integralement (papermill, kernel python3). Co-Authored-By: Claude Sonnet 5.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 |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ 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 |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Path-collision (organ #13359/#13615)Cette PR #18751 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
…K07 (#18822) * test(genai,#18736,#18775): test unitaire budget mensuel renouvelable K07 (extrait de #18775 fermee, credit a #18751) Acceptance #18736 verifiee par 7 tests unitaires (test_k07_budget_mensuel_renouvelable) : - 0.063 USD/jour + 10 USD/mois : aucun epuisement mensuel (1.89 < 10) - 0.4 USD/jour : epuisement mois 1 jour 25 (10/0.4 = 25) - 0 requete : aucun epuisement - 100% local : aucun epuisement (pente nulle) - l'organe d'alerte detecte le seuil 80% en mois 1 jour 20 (a 0.4 USD/jour, 8/0.4) - le reset mensuel : la valeur de cumuls_mois[30] (jour 1 de mois 2) doit etre strictement inferieure a cumuls_mois[29] (jour 30 de mois 1) pour pente > 0 Le test reproduit la logique pure de trajectoire_mensuelle() et verifier_alerte() telle qu'elle apparait dans le carnet 09e_Production_Exploitation c10/c11 (post-#18751 merge). Le test permet de detecter toute regression de la trajectoire apres evolution du carnet. Apres merge de cette PR de test seule, l'acceptance #18736 sera couverte par le harnais de tests : toute modification future de la trajectoire dans le carnet 09e devra faire passer ces 7 tests. * fix(test,#18822,#18736): K07 budget mensuel -- chargement source cellules 10/11 + témoin négatif discriminant Suite à la réserve ai-01 sur #18822 (commentaire 5962478216) : le fichier réécrivait trajectoire_mensuelle/verifier_alerte au lieu d'exécuter la source des cellules 1f127d45 et b097a42e du carnet 09e_Production_Exploitation. Charge la source par id via nbformat, l'exécute dans un namespace isolé avec un mock minimal de MESURES (juste assez pour que la cellule 10 calcule COUT_DISTANT et exécute la def trajectoire), importe les vraies fonctions trajectoire et verifier_alerte du carnet. Tell c.4 strict fondateur : témoin négatif discriminant - (a) défaut logique : JOURS_MOIS 30→365 → test_pente_063_pas_depasse_mois rouge (dépense mensuelle 22.99 > 10) — mesuré - (b) correction plausible : paramètre jours_periode=365 → rouge immédiat - (c) patch cosmétique JOURS_MOIS 30→365 → test logique rouge — mesuré La logique pure du carnet est chargée à chaque exécution pytest, pas réécrite en dur ; le témoin se distribue sur 8 tests. Couverture acceptance #18736 : - 0.063 $/jour, 10 $/mois : aucun épuisement mensuel - 0.4 $/jour : épuisement mois 1 jour 25 (test_pente_04_depasse_mois_1_jour_25) - 0 requête : aucun épuisement - 100 % local : aucun épuisement (pente nulle) - alerte 80 % au mois 1 jour 20 (test_verifier_alerte_franchissement_jour20) - reset mensuel : len(cumuls) == JOURS_MOIS (test_reset_mensuel_renouvelable) Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(test,#18822,#18736): déplace K07 budget sous shared/helpers/ pour collecte CI Suite a la reserve ai-01 sur #18822 (commentaire 5962478216) — 2e exigence : le dossier racine tests/ n'est pas dans testpaths du pytest.ini. Deplacement minimal vers MyIA.AI.Notebooks/GenAI/shared/helpers/ deja collecte (pytest.ini ligne 15). Aucun changement de contenu : le 1er commit 9977faa avait deja charge la source via nbformat et defini le temoin negatif discriminant. 8/8 tests PASSED localement apres deplacement (pytest MyIA.AI.Notebooks/GenAI/shared/helpers/test_k07_budget_mensuel_renouvelable.py -v). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(ci,#18822): genai-helpers-tests install nbformat Le test K07 budget mensuel (#18822) charge la source des cellules 1f127d45 et b097a42e du carnet 09e_Production_Exploitation.ipynb via nbformat. Le runner CI (Python 3.11) n'installait pas cette dependance, ce qui faisait echouer la collecte (138 -> 1 error). Ajout de nbformat au pip install de genai-helpers-tests.yml. Aucun autre test n'importe nbformat dans ce dossier, mais le 138-collected floor-guard echouait deja, le fix est borne et necessaire au refonte du test K07. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: MED/tooling #18742
Ce que livre la PR
K07 (issue #18736, fiche de l'audit tiers Astra #18731) : la cellule
trajectoire(c10, id1f127d45) accumulait la dépense sur 365 jours alors que le budget documenté dans le carnet est mensuel (« $10/mois ») — la table committée montrait « alerte jour 128 / épuisé jour 160 / > 1 an », une lecture annuelle d'un budget mensuel.Le geste
trajectoire()simule désormais le mois courant : compteur remis à zéro à chaque frontière de mois, et comme la pente est constante, la trajectoire d'un mois vaut pour tous. Colonnes renommées « jour du mois » ; lebreakde l'ancienne boucle annuelle disparaît (le mois continue, épuisé ou non).part locale = 1.0ajoutée à la table (cas 100 % local de l'acceptance).Preuves — re-exécution complète (papermill, kernel python3, 2026-10-01, commit 6a531d1)
execution_countréels partout (C.2) ; grepraise NotImplementedError|assert False|1/0: 0 (C.1).See #18736 (acceptance couverte point par point). Parent : #18731.
🤖 Generated with Claude Code