[PO] Critères de recette et scénario de démonstration #47

Closed
opened 2026-09-01 10:35:26 +00:00 by lenaic · 2 comments
Owner

Exigence couverte

ENF-16

Épreuve servie

EC02 — Management

Charge estimée

1 j.h

Ce qu'on veut obtenir

Savoir à l'avance ce qui sera montré au jury et dans quel ordre, pour que la démonstration soit répétée et non improvisée.

Critères d'acceptation

  • Un scénario bout en bout écrit : de la mesure collectée jusqu'à la recommandation affichée.
  • Chaque étape a un critère observable, vérifiable par quelqu'un qui ne connaît pas le code.
  • Le scénario est joué une fois en entier avant le jour 8.
  • Ce qui ne marche pas encore est listé explicitement plutôt que contourné en silence.

Comment on le vérifie

Tests tests/e2e/
Commande le scénario joué en entier, chronométré
Preuve la liste des étapes cochées et la durée

Hors périmètre

La correction des défauts trouvés, qui donnera lieu à des tickets distincts.

### Exigence couverte ENF-16 ### Épreuve servie EC02 — Management ### Charge estimée 1 j.h ### Ce qu'on veut obtenir Savoir à l'avance ce qui sera montré au jury et dans quel ordre, pour que la démonstration soit répétée et non improvisée. ### Critères d'acceptation - [ ] Un scénario bout en bout écrit : de la mesure collectée jusqu'à la recommandation affichée. - [ ] Chaque étape a un critère observable, vérifiable par quelqu'un qui ne connaît pas le code. - [ ] Le scénario est joué une fois en entier avant le jour 8. - [ ] Ce qui ne marche pas encore est listé explicitement plutôt que contourné en silence. ### Comment on le vérifie Tests tests/e2e/ Commande le scénario joué en entier, chronométré Preuve la liste des étapes cochées et la durée ### Hors périmètre La correction des défauts trouvés, qui donnera lieu à des tickets distincts.
florian added this to the EnerVision project 2026-09-01 13:16:07 +00:00
gabriel added the due date 2026-09-09 2026-09-03 09:35:52 +00:00
gabriel self-assigned this 2026-09-03 09:36:01 +00:00
gabriel removed their assignment 2026-09-03 09:40:21 +00:00
gabriel removed the due date 2026-09-09 2026-09-03 09:40:38 +00:00
gabriel self-assigned this 2026-09-03 09:50:03 +00:00
gabriel added the due date 2026-09-11 2026-09-03 12:41:03 +00:00
Member

Preuve — recette jouée le 09/09/2026

Cible : production, main = 415af1a, 10.105.200.41, base enervision_prod (629 685 mesures, 7 sites). Opérateur : Gabriel. Livrables dans la PR #247.

Les quatre critères d'acceptation

# Critère État Preuve
1 Scénario bout en bout écrit, de la mesure à la recommandation tenu docs/DEMONSTRATION.md, 9 étapes
2 Chaque étape a un critère observable par un non-initié tenu règle de rédaction des deux documents
3 Scénario joué une fois en entier, chronométré partiel passage enchaîné 12:10:58 → 12:14:23, 3 min 25 s ; étapes 5 et 6 non rejouées
4 Ce qui ne marche pas est listé explicitement tenu docs/RECETTE.md §4, sept constats ancrés

Étapes cochées et durée — passage du 09/09

Étape Observé Durée
1 · la minute qui arrive passe fraîche 12:12:01, 7/7 objets écrits 1 min 12
2 · bronze → argent passe de 12:00, 5 040 lignes, disponibilité 97,2 % à 100 % < 5 s
3 · la clé qui traverse cle_bronze portée jusqu'en zone or, méthode et qualité < 5 s
4 · la porte d'entrée 401 sans session, connexion 126 ms, 2 cookies HttpOnly/Secure < 5 s
5 · parc puis site non rejoué — session expirée (comportement attendu, #234)
6 · d'où vient ce point non rejoué — même raison ; vérifié à 11:54, capture au dossier
7 · prévision → dépassement → reco 7 prévisions avec référence, 6 recommandations actives < 5 s
8 · quand ça casse 10 règles au repos, 13/13 cibles vertes, issue #243 refermée < 5 s
9 · le cloud non joué — c'est un document
Total 3 min 25 s

L'exécution technique est le plancher. Ce qui remplit le budget de 20 minutes, c'est la parole : la répétition à cinq voix reste au 10/09, ligne ouverte au journal des répétitions.

Verdicts de la grille

22 tenus · 5 tenus avec réserve · 1 non tenu · 2 non joués.

Trois exigences gagnent une preuve chiffrée qu'elles n'avaient pas :

  • ENF-04 — série 24 h p95 85 ms (cible 400), prévisions p95 23 ms (cible 200). 30 tirs par route, depuis le serveur à travers Caddy, hors réseau du poste client.
  • ENF-08 — arrêt volontaire d'un exportateur à 11:46:11, alerte firing à 11:52:25, issue #243 ouverte et assignée à @lenaic à 11:52:42, refermée seule par le relais au retour à la normale. 6 min 31 s de la panne au ticket, et le cycle de vie complet.
  • ENF-16 — le retour arrière d'un modèle (mlflow.md §5) joué par quelqu'un qui n'a pas écrit le manuel, sans une question à son auteur, sortie de contrôle conforme.

Les sept constats

Détail et preuves en docs/RECETTE.md §4. Chacun donnera un ticket distinct — la correction est hors périmètre de celui-ci, comme son énoncé le dit.

Constat Touche
R1 L'horloge de la source avance de 2 h sans écrire de fuseau. Les mesures la ramènent en UTC et sont justes ; les alertes et le nommage des objets bruts la rangent telle quelle et sont fausses EF-05, ENF-07
R2 La prévision « H+1 » vise 2 h après ses dernières données. #206 est déployée et ne corrige pas ce point : la limite est l'agrégat horaire, pas la cadence ETL EF-07, #205
R7 ENF-02 n'est pas implémentée : autorisation.py rend les 7 sites à tout utilisateur authentifié et le dit dans sa propre documentation ; ops.acces_site est vide ENF-02
R9 La règle de promotion ne compare jamais le candidat au modèle en place EF-07, EF-08
R10 La courbe s'arrête 1 h 54 avant la dernière relève annoncée au-dessus d'elle EF-11
R11 La robustesse à une source en panne n'est pas éprouvée ENF-06
R12 Les secrets du coffre ont circulé hors du coffre : à faire tourner après le jury ENF-12

R9 mérite son paragraphe

La règle de promotion (model/registre.py) compare la MAE du candidat à celle de la persistance, jamais à celle du modèle en ligne. Éprouvé en jouant deux réentraînements :

Version MAE modèle MAE persistance Promue ?
v6 (08/09) 16,011 22,222 oui
v7 (09/09 09:59) 18,237 21,157 oui
v8 (09/09 11:28) 18,447 21,224 oui

Le modèle servi s'est dégradé de 16,011 à 18,447 en deux passes. Conséquence mesurée : à 11:35 la prévision annonçait SITE001 à 251 kW pour 200 déclarés et SITE006 à 251 kW pour 180, deux alertes de dépassement ont été écrites, puis deux recommandations actives affichées à 11:45. Dix-sept minutes du registre de modèles à l'écran de l'exploitant.

Le modèle v6 a été remis en place (alias production, run_id 35ed91c3…). Les quatre lignes fautives sont laissées en base volontairement : elles documentent le défaut par le fait, et un jury qui demande « et si un mauvais modèle passe ? » a sa réponse dans les données.

Effet de bord positif : EF-08 fonctionne de bout en bout, ce que rien n'avait encore prouvé — le maximum historique du parc est de 94,7 % de capacité, le détecteur n'avait jamais eu de prévision au-dessus du seuil. #37 peut se fermer sur cette preuve, à condition de dire d'où elle vient.

Ce que la recette a corrigé dans le PRD

  • ENF-02 : « Fait » → « Non tenu »
  • ENF-04 : « À publier » → publié, avec les chiffres
  • EF-07 : la réserve #205 est requalifiée, #206 ne la lève pas

Pourquoi ce ticket reste ouvert

Le critère 3 demande le scénario joué en entier. Le chemin technique l'a été ; la répétition à voix haute avec @olivier et l'équipe est prévue le 10/09, et sa ligne au journal des répétitions est ouverte, vide. Le ticket se ferme après elle, avec sa durée.

## Preuve — recette jouée le 09/09/2026 Cible : production, `main` = `415af1a`, `10.105.200.41`, base `enervision_prod` (629 685 mesures, 7 sites). Opérateur : Gabriel. Livrables dans la PR #247. ### Les quatre critères d'acceptation | # | Critère | État | Preuve | |---|---|---|---| | 1 | Scénario bout en bout écrit, de la mesure à la recommandation | **tenu** | `docs/DEMONSTRATION.md`, 9 étapes | | 2 | Chaque étape a un critère observable par un non-initié | **tenu** | règle de rédaction des deux documents | | 3 | Scénario joué une fois en entier, chronométré | **partiel** | passage enchaîné 12:10:58 → 12:14:23, **3 min 25 s** ; étapes 5 et 6 non rejouées | | 4 | Ce qui ne marche pas est listé explicitement | **tenu** | `docs/RECETTE.md` §4, sept constats ancrés | ### Étapes cochées et durée — passage du 09/09 | Étape | Observé | Durée | |---|---|---| | 1 · la minute qui arrive | passe fraîche 12:12:01, `7/7 objets écrits` | 1 min 12 | | 2 · bronze → argent | passe de 12:00, 5 040 lignes, disponibilité 97,2 % à 100 % | < 5 s | | 3 · la clé qui traverse | `cle_bronze` portée jusqu'en zone or, méthode et qualité | < 5 s | | 4 · la porte d'entrée | 401 sans session, connexion 126 ms, 2 cookies `HttpOnly`/`Secure` | < 5 s | | 5 · parc puis site | *non rejoué* — session expirée (comportement attendu, #234) | — | | 6 · d'où vient ce point | *non rejoué* — même raison ; vérifié à 11:54, capture au dossier | — | | 7 · prévision → dépassement → reco | 7 prévisions avec référence, 6 recommandations actives | < 5 s | | 8 · quand ça casse | 10 règles au repos, 13/13 cibles vertes, issue #243 refermée | < 5 s | | 9 · le cloud | *non joué* — c'est un document | — | | | **Total** | **3 min 25 s** | L'exécution technique est le plancher. Ce qui remplit le budget de 20 minutes, c'est la parole : la répétition à cinq voix reste au 10/09, ligne ouverte au journal des répétitions. ### Verdicts de la grille **22 tenus · 5 tenus avec réserve · 1 non tenu · 2 non joués.** Trois exigences gagnent une preuve chiffrée qu'elles n'avaient pas : - **ENF-04** — série 24 h **p95 85 ms** (cible 400), prévisions **p95 23 ms** (cible 200). 30 tirs par route, depuis le serveur à travers Caddy, hors réseau du poste client. - **ENF-08** — arrêt volontaire d'un exportateur à 11:46:11, alerte `firing` à 11:52:25, **issue #243 ouverte et assignée à @lenaic à 11:52:42**, refermée seule par le relais au retour à la normale. **6 min 31 s de la panne au ticket**, et le cycle de vie complet. - **ENF-16** — le retour arrière d'un modèle (`mlflow.md` §5) joué par quelqu'un qui n'a pas écrit le manuel, **sans une question à son auteur**, sortie de contrôle conforme. ### Les sept constats Détail et preuves en `docs/RECETTE.md` §4. Chacun donnera un ticket distinct — la correction est hors périmètre de celui-ci, comme son énoncé le dit. | | Constat | Touche | |---|---|---| | R1 | L'horloge de la source avance de 2 h sans écrire de fuseau. Les mesures la ramènent en UTC et sont justes ; les alertes et le nommage des objets bruts la rangent telle quelle et sont fausses | EF-05, ENF-07 | | R2 | La prévision « H+1 » vise 2 h après ses dernières données. **#206 est déployée et ne corrige pas ce point** : la limite est l'agrégat horaire, pas la cadence ETL | EF-07, #205 | | R7 | **ENF-02 n'est pas implémentée** : `autorisation.py` rend les 7 sites à tout utilisateur authentifié et le dit dans sa propre documentation ; `ops.acces_site` est vide | ENF-02 | | R9 | La règle de promotion ne compare jamais le candidat au modèle en place | EF-07, EF-08 | | R10 | La courbe s'arrête 1 h 54 avant la dernière relève annoncée au-dessus d'elle | EF-11 | | R11 | La robustesse à une source en panne n'est pas éprouvée | ENF-06 | | R12 | Les secrets du coffre ont circulé hors du coffre : à faire tourner après le jury | ENF-12 | ### R9 mérite son paragraphe La règle de promotion (`model/registre.py`) compare la MAE du candidat à celle de la **persistance**, jamais à celle du modèle en ligne. Éprouvé en jouant deux réentraînements : | Version | MAE modèle | MAE persistance | Promue ? | |---|---|---|---| | v6 (08/09) | **16,011** | 22,222 | oui | | v7 (09/09 09:59) | 18,237 | 21,157 | oui | | v8 (09/09 11:28) | **18,447** | 21,224 | oui | Le modèle servi s'est dégradé de 16,011 à 18,447 en deux passes. Conséquence mesurée : à 11:35 la prévision annonçait `SITE001` à 251 kW pour 200 déclarés et `SITE006` à 251 kW pour 180, **deux alertes de dépassement** ont été écrites, puis **deux recommandations actives** affichées à 11:45. **Dix-sept minutes du registre de modèles à l'écran de l'exploitant.** Le modèle **v6 a été remis en place** (alias `production`, `run_id 35ed91c3…`). Les quatre lignes fautives sont **laissées en base volontairement** : elles documentent le défaut par le fait, et un jury qui demande « et si un mauvais modèle passe ? » a sa réponse dans les données. Effet de bord positif : **EF-08 fonctionne de bout en bout**, ce que rien n'avait encore prouvé — le maximum historique du parc est de 94,7 % de capacité, le détecteur n'avait jamais eu de prévision au-dessus du seuil. #37 peut se fermer sur cette preuve, à condition de dire d'où elle vient. ### Ce que la recette a corrigé dans le PRD - **ENF-02** : « Fait » → **« Non tenu »** - **ENF-04** : « À publier » → publié, avec les chiffres - **EF-07** : la réserve #205 est requalifiée, #206 ne la lève pas ### Pourquoi ce ticket reste ouvert Le critère 3 demande le scénario joué **en entier**. Le chemin technique l'a été ; la répétition à voix haute avec @olivier et l'équipe est prévue le 10/09, et sa ligne au journal des répétitions est ouverte, vide. **Le ticket se ferme après elle**, avec sa durée.
Member

Correction de cadrage — la démonstration est enregistrée

La première version de DEMONSTRATION.md supposait une soutenance collective en direct : répartition de la parole entre les six, préparation de la salle, budget de 20 minutes à cinq voix, journal de répétitions.

L'oral est individuel, et la démonstration passe par des vidéos. Tout cet appareil ne sert à rien. Corrigé dans la PR #247, commit 5a26dc4.

Ce qui disparaît

Le tableau « qui parle », la préparation de la machine qui projette, la chorégraphie et le chronomètre de parole.

Ce qui reste, et qui portait la valeur

Le fil d'une seule mesure suivie de bout en bout, de la minute où elle est relevée jusqu'à la recommandation qu'elle déclenche — c'est le premier critère du ticket. Et pour chaque étape, ce qu'il faut voir à l'image, écrit pour quelqu'un qui ne connaît pas le code — c'est le deuxième.

Ce qui change de nature

  • Chaque étape porte désormais ce qui a été observé en la jouant le 09/09.
  • La section 6 est le compte rendu du passage, plus un journal de répétitions.
  • La préparation vise la prise de vue : autorité de certification sur la machine qui filme, alertes au repos, modèle v6.

Les prises se font séparément et se remontent : une étape ratée se refait sans conséquence sur les autres, ce qui retire au chronomètre l'essentiel de son intérêt.

Effet sur le critère 3

Le critère demande le scénario « joué une fois en entier, chronométré ». Il l'a été : passage enchaîné du 09/09, 12:10:58 → 12:14:23, 3 min 25 s, sans incident, étapes 5 et 6 exceptées (session expirée, comportement attendu depuis #234).

Ce qu'il reste n'est plus une répétition mais les prises elles-mêmes, et la vérification qu'une étape lisible devant soi reste lisible en vidéo.

## Correction de cadrage — la démonstration est enregistrée La première version de `DEMONSTRATION.md` supposait une soutenance collective en direct : répartition de la parole entre les six, préparation de la salle, budget de 20 minutes à cinq voix, journal de répétitions. **L'oral est individuel, et la démonstration passe par des vidéos.** Tout cet appareil ne sert à rien. Corrigé dans la PR #247, commit `5a26dc4`. ### Ce qui disparaît Le tableau « qui parle », la préparation de la machine qui projette, la chorégraphie et le chronomètre de parole. ### Ce qui reste, et qui portait la valeur Le fil d'**une seule mesure suivie de bout en bout**, de la minute où elle est relevée jusqu'à la recommandation qu'elle déclenche — c'est le premier critère du ticket. Et pour chaque étape, **ce qu'il faut voir à l'image**, écrit pour quelqu'un qui ne connaît pas le code — c'est le deuxième. ### Ce qui change de nature - Chaque étape porte désormais **ce qui a été observé en la jouant** le 09/09. - La section 6 est le **compte rendu du passage**, plus un journal de répétitions. - La préparation vise la prise de vue : autorité de certification sur la machine qui filme, alertes au repos, modèle v6. Les prises se font séparément et se remontent : une étape ratée se refait sans conséquence sur les autres, ce qui retire au chronomètre l'essentiel de son intérêt. ### Effet sur le critère 3 Le critère demande le scénario « joué une fois en entier, chronométré ». Il l'a été : passage enchaîné du 09/09, **12:10:58 → 12:14:23, 3 min 25 s, sans incident**, étapes 5 et 6 exceptées (session expirée, comportement attendu depuis #234). **Ce qu'il reste n'est plus une répétition mais les prises elles-mêmes**, et la vérification qu'une étape lisible devant soi reste lisible en vidéo.
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
2026-09-11
Depends on
Reference
g2/enervision#47
No description provided.