docs : critères de recette et scénario de démonstration (#47) #247

Merged
gabriel merged 6 commits from gabriel/47-recette-demonstration into develop 2026-09-09 14:10:01 +00:00
Member

Ferme le dernier livrable J3 qui n'avait aucune trace dans le dépôt.

Ce que la PR apporte

docs/RECETTE.md — la grille des 28 exigences. Pour chacune : ce qu'on observe, écrit pour quelqu'un qui ne connaît pas le code, où le voir, un verdict et sa date. Verdicts du passage du 09/09 contre la production main = 415af1a : 22 tenus, 5 tenus avec réserve, 1 non tenu, 2 non joués.

Le chemin complet — de la minute collectée à la recommandation affichée — a été rejoué d'un seul tenant en 3 min 25 s, sans incident.

Les chiffres qui manquaient au dossier

Exigence Relevé
ENF-04 série 24 h p95 85 ms (cible 400) · prévisions p95 23 ms (cible 200)
ENF-08 panne 11:46:11 → alerte 11:52:25 → issue #243 assignée 11:52:42, refermée seule au retour
ENF-16 retour arrière MLflow joué par un tiers, sans question à l'auteur du manuel

Sept constats, avec leurs preuves

Section 4 de RECETTE.md. Les trois qui pèsent le plus :

  • R7 — ENF-02 n'est pas implémentée. dashboard/autorisation.py rend les sept sites à tout utilisateur authentifié, et le dit dans sa propre documentation. ops.acces_site est vide pour les huit comptes.
  • R9 — un modèle promu peut traverser toute la chaîne jusqu'à l'écran. La règle compare le candidat à la persistance, jamais au modèle en place. Éprouvé : deux promotions ont dégradé la MAE de 16,011 à 18,447 et produit deux fausses alertes puis deux recommandations actives, en dix-sept minutes. Le v6 a été remis en place ; les quatre lignes fautives sont laissées en base volontairement, elles documentent le défaut par le fait.
  • R1 — l'horloge de la source avance de deux heures 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. Le défaut est donc localisé, et le chemin des mesures porte la conduite à recopier.

Le PRD passe en 1.3

Les statuts ne sont plus relus, ils sont joués. Neuf changent, et pas tous vers le haut :

  • ENF-02 : « Fait » → « Non tenu »
  • EF-08 : « En cours » → « Fait », avec la provenance de la preuve
  • ENF-04 : « À publier » → publié
  • EF-05, ENF-06, ENF-07, ENF-12 gagnent une réserve
  • ENF-08, ENF-16 gagnent une preuve en conditions réelles
  • §2 ne prétend plus que les sites autorisés sont portés par une table, §3 compte dix alertes et non cinq, trois risques sont levés et celui de la promotion est reformulé sur sa vraie cause

Les manuels rattrapent ce qui a été troué

  • reentrainement.md — deux encarts : la règle de promotion ne regarde jamais le modèle en place (avec le tableau des trois versions et la conduite à tenir), et le retour arrière ne prend pas effet à la seconde — le cron de :35 a gagné la course de 26 s.
  • mlflow.md — la lecture des deux métriques avant de bouger l'alias est le seul garde-fou ; l'étape 2 est la comparaison que le code ne fait pas.
  • acces-serveur.md — un troisième cas : ssh refuse pendant que nc et ssh-keyscan passent sur le même port et que les trois noms HTTPS tombent ensemble. Ça décrit le lien du poste, pas le serveur.

Ce que la PR ne fait pas

La correction des défauts trouvés, hors périmètre du #47 par son propre énoncé. Sept tickets sont à ouvrir.

docs/DEMONSTRATION.md a été retiré : les vidéos sont faites et l'oral est individuel, un scénario de passage n'a plus d'objet. tests/e2e/ reste vide et son README dit pourquoi.

Ferme le dernier livrable J3 qui n'avait aucune trace dans le dépôt. ## Ce que la PR apporte **`docs/RECETTE.md`** — la grille des 28 exigences. Pour chacune : *ce qu'on observe*, écrit pour quelqu'un qui ne connaît pas le code, où le voir, un verdict et sa date. Verdicts du passage du 09/09 contre la production `main` = `415af1a` : **22 tenus, 5 tenus avec réserve, 1 non tenu, 2 non joués**. Le chemin complet — de la minute collectée à la recommandation affichée — a été rejoué d'un seul tenant en **3 min 25 s**, sans incident. ## Les chiffres qui manquaient au dossier | Exigence | Relevé | |---|---| | ENF-04 | série 24 h **p95 85 ms** (cible 400) · prévisions **p95 23 ms** (cible 200) | | ENF-08 | panne 11:46:11 → alerte 11:52:25 → **issue #243 assignée 11:52:42**, refermée seule au retour | | ENF-16 | retour arrière MLflow joué par un tiers, sans question à l'auteur du manuel | ## Sept constats, avec leurs preuves Section 4 de `RECETTE.md`. Les trois qui pèsent le plus : - **R7 — ENF-02 n'est pas implémentée.** `dashboard/autorisation.py` rend les sept sites à tout utilisateur authentifié, et le dit dans sa propre documentation. `ops.acces_site` est vide pour les huit comptes. - **R9 — un modèle promu peut traverser toute la chaîne jusqu'à l'écran.** La règle compare le candidat à la persistance, jamais au modèle en place. Éprouvé : deux promotions ont dégradé la MAE de 16,011 à 18,447 et produit **deux fausses alertes puis deux recommandations actives, en dix-sept minutes**. Le v6 a été remis en place ; les quatre lignes fautives sont **laissées en base volontairement**, elles documentent le défaut par le fait. - **R1 — l'horloge de la source avance de deux heures 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. Le défaut est donc localisé, et le chemin des mesures porte la conduite à recopier. ## Le PRD passe en 1.3 Les statuts ne sont plus relus, ils sont **joués**. Neuf changent, et pas tous vers le haut : - **ENF-02** : « Fait » → **« Non tenu »** - **EF-08** : « En cours » → **« Fait »**, avec la provenance de la preuve - **ENF-04** : « À publier » → publié - **EF-05, ENF-06, ENF-07, ENF-12** gagnent une réserve - **ENF-08, ENF-16** gagnent une preuve en conditions réelles - §2 ne prétend plus que les sites autorisés sont portés par une table, §3 compte dix alertes et non cinq, trois risques sont levés et celui de la promotion est reformulé sur sa vraie cause ## Les manuels rattrapent ce qui a été troué - **`reentrainement.md`** — deux encarts : la règle de promotion ne regarde jamais le modèle en place (avec le tableau des trois versions et la conduite à tenir), et le retour arrière ne prend pas effet à la seconde — le cron de `:35` a gagné la course de 26 s. - **`mlflow.md`** — la lecture des deux métriques avant de bouger l'alias est le seul garde-fou ; l'étape 2 est la comparaison que le code ne fait pas. - **`acces-serveur.md`** — un troisième cas : `ssh` refuse pendant que `nc` et `ssh-keyscan` passent sur le même port et que les trois noms HTTPS tombent ensemble. Ça décrit le lien du poste, pas le serveur. ## Ce que la PR ne fait pas La correction des défauts trouvés, hors périmètre du #47 par son propre énoncé. Sept tickets sont à ouvrir. `docs/DEMONSTRATION.md` a été retiré : les vidéos sont faites et l'oral est individuel, un scénario de passage n'a plus d'objet. `tests/e2e/` reste vide et son README dit pourquoi.
Le #47 n'avait aucune trace dans le dépôt. Il en a deux.

docs/RECETTE.md — la grille des 28 exigences, avec pour chacune ce qu'on
observe écrit pour quelqu'un qui ne connaît pas le code, où le voir, et un
verdict daté du passage du 09/09 sur main = 415af1a. 22 tenus, 5 tenus avec
réserve, 1 non tenu, 2 non joués. La section 4 liste sept constats numérotés
avec leurs preuves, plutôt que de les contourner en silence.

docs/DEMONSTRATION.md — neuf étapes chronométrées, cible 20 minutes, qui suivent
une seule mesure de la minute où elle est relevée jusqu'à la recommandation
qu'elle déclenche. Chaque étape a son critère observable et son porte-parole.
Quatre réserves à annoncer avant que le jury les trouve.

Trois lignes du PRD sont corrigées parce que la recette les contredit :

- ENF-02 passe de « Fait » à « Non tenu ». Le fichier que le PRD citait comme
  preuve dit dans sa propre documentation que tout utilisateur authentifié voit
  les sept sites, et ops.acces_site est vide pour les huit comptes.
- ENF-04 passe de « À publier » à publié : 85 ms de p95 sur la série 24 h pour
  une cible de 400, 23 ms sur les prévisions pour une cible de 200.
- EF-07 : la PR #206 est déployée et ne corrige pas la réserve #205. La limite
  est l'agrégat horaire, pas la cadence de l'ETL.

tests/e2e/ reste vide, et le README dit maintenant pourquoi : le #47 a tranché
que la recette se joue contre la production et relève d'EC02, pas d'EC03.

Refs #47
docs: le scénario rejoué d'un seul tenant, et la vraie cause du décalage d'heure
All checks were successful
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 9s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 22s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 43s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 6m1s
2207bc60c6
Passage enchaîné du 09/09, 12:10:58 -> 12:14:23 UTC : étapes 1 à 4, 7 et 8
dans l'ordre, sans incident, 3 min 25 s. La ligne entre au journal des
répétitions avec sa portée exacte — les étapes 5 et 6 n'ont pas été rejouées,
la session du navigateur avait expiré, et l'étape 9 est un document.

Ce que ce chiffre établit et ce qu'il n'établit pas est écrit sous le tableau :
l'exécution technique est le plancher, la répétition du 10 mesure autre chose,
le récit à cinq voix dans un budget de 20 minutes.

R1 est repris avec sa cause, désormais prouvée à la source :

    {"timestamp":"2026-09-09T14:13:07.790800", ...}   à 12:13:07 UTC

L'horloge de la source avance de deux heures et n'écrit aucun fuseau. Les deux
chemins d'ingestion en tirent deux conclusions différentes : les mesures
ramènent la valeur en UTC et sont justes, les alertes et le nommage des objets
bruts la rangent telle quelle et sont fausses de deux heures. Le défaut est
donc localisé, et le chemin des mesures porte déjà la conduite à recopier.

ENF-08 gagne une preuve : l'issue #243 est refermée par le relais au retour à
la normale. Le cycle de vie est tenu de bout en bout, pas seulement l'ouverture.

Refs #47
docs: la démonstration est enregistrée, pas jouée en direct
All checks were successful
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 9s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 26s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 44s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 6m3s
5a26dc49e8
La première version supposait une soutenance collective : 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 servait à rien.

DEMONSTRATION.md devient un compte rendu. 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 jusqu'à la recommandation, et pour chaque étape ce qu'il
faut voir à l'image, écrit pour quelqu'un qui ne connaît pas le code.

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 plutôt qu'un
journal de répétitions, et la préparation vise la prise de vue — l'autorité de
certification sur la machine qui filme, les alertes au repos, le 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.

RECETTE.md est réaligné sur les deux renvois qui parlaient de répétition.

Refs #47
docs: le PRD et les manuels rattrapent ce que la recette a troué
All checks were successful
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 9s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 29s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 43s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 5m38s
46418fda9e
Retire docs/DEMONSTRATION.md. Les vidéos sont faites et l'oral est individuel :
un scénario de passage n'a plus d'objet. Ce qui comptait — le fil d'une mesure
suivie jusqu'à la recommandation, et le compte rendu du passage joué — vit dans
RECETTE.md, qui reste le livrable du #47.

PRD en 1.3. Les statuts ne sont plus relus, ils sont joués : neuf changent, et
pas tous vers le haut.

- ENF-02 : « Fait » -> « Non tenu ». Le fichier cité comme preuve dit dans sa
  propre documentation que tout utilisateur authentifié voit les sept sites.
- EF-08 : « En cours » -> « Fait ». Le mécanisme a tiré en production, et on
  sait maintenant pourquoi il ne tirait pas avant : seuil à 100 % de capacité,
  maximum historique du parc à 94,7 %.
- ENF-04 : « À publier » -> publié, 85 ms et 23 ms de p95.
- EF-05, ENF-06, ENF-07, ENF-12 gagnent une réserve qu'ils n'avaient pas.
- ENF-08 et ENF-16 gagnent une preuve obtenue en conditions réelles.
- §2 ne prétend plus que les sites autorisés sont portés par une table ; §3
  compte dix alertes et non cinq ; la table des risques est réalignée, trois
  risques sont levés et celui de la promotion est reformulé sur sa vraie cause.

Manuels d'exploitation, là où la recette les contredit :

- reentrainement.md : deux encarts. La règle de promotion ne regarde jamais le
  modèle en place, avec le tableau des trois versions qui le démontre et la
  conduite à tenir tant qu'elle n'a pas changé. Et le retour arrière ne prend
  pas effet à la seconde — le cron de :35 a gagné la course de 26 s.
- mlflow.md : la lecture des deux métriques avant de bouger l'alias n'est pas
  une politesse, c'est le seul garde-fou ; l'étape 2 est la comparaison que le
  code ne fait pas.
- acces-serveur.md : un troisième cas. ssh refuse pendant que nc et ssh-keyscan
  passent sur le même port, et les trois noms HTTPS tombent ensemble — ça
  décrit le lien du poste, pas le serveur. uptime tranche en dix secondes.

Refs #47
gabriel requested reviews from lenaic and removed review requests for florian 2026-09-09 13:46:37 +00:00
lenaic approved these changes 2026-09-09 13:46:49 +00:00
Dismissed
Merge branch 'develop' into gabriel/47-recette-demonstration
Some checks failed
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 49s
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 7s
Intégration / Terraform — format, validité et lint (pull_request) Successful in 28s
Intégration / Checkov — audit de la configuration (pull_request) Failing after 40s
Intégration / Workflows — lint et audit de sécurité (pull_request) Failing after 19s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 6m6s
db5ef5db74
Merge branch 'develop' into gabriel/47-recette-demonstration
Some checks failed
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 49s
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 7s
Intégration / Terraform — format, validité et lint (pull_request) Successful in 25s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 19s
Intégration / Checkov — audit de la configuration (pull_request) Failing after 47s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 6m6s
fe5ab296b6
Le lot #246 (chaîne aux dix minutes) est arrivé sur develop après la fusion
précédente et reprend la parole sur EF-07 et EF-08 : conflit sur docs/PRD.md.
Les deux côtés ont écrit sur les mêmes exigences le même jour, depuis deux
observations différentes.

EF-08 : la recette du 09/09 a vu le mécanisme tirer en production — deux
dépassements écrits, propagés jusqu'à l'écran. Le « En cours » de develop
disait l'inverse sur la foi de zéro dépassement observé la veille. La preuve
mesurée l'emporte, avec sa provenance.

EF-07 : develop apporte le #246, que la recette ne connaissait pas, mais le
donne comme non déployé au même titre que le #206. Le #206 est dans `main`
depuis la mise en production du 09/09 et la recette l'a mesuré à l'œuvre — il
ne corrige simplement pas la réserve, dont la cause est l'agrégat horaire. La
cellule garde le relevé du 09/09 et gagne le #246, dont la migration 0022
écrit elle-même que le plancher de deux seaux ne bouge pas : le lot ne lève
pas la réserve non plus.

§6 corrigé dans la foulée : la ligne venue de develop annonçait « deux
cadences de retard », ce qui contredisait EF-07 à cinquante lignes d'écart.
Une seule cadence manque à la production, celle des dix minutes.
gabriel dismissed lenaic's review 2026-09-09 14:06:41 +00:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

gabriel merged commit 8147df2e83 into develop 2026-09-09 14:10:01 +00:00
gabriel deleted branch gabriel/47-recette-demonstration 2026-09-09 14:10:01 +00:00
Sign in to join this conversation.
No reviewers
No milestone
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".

No due date set.

Dependencies

No dependencies set

Reference
g2/enervision!247
No description provided.