[44] Manuel de réentraînement : la séquence, la promotion, et « quand ça échoue » #187
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!187
Loading…
Reference in a new issue
No description provided.
Delete branch "olivier/44-runbook-reentrainement"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ferme le quatrième geste sensible d'ENF-16 :
docs/runbooks/reentrainement.md, le seul des quatre qui n'existait pas. Déploiement, reprise et incident de collecte sont déjà là.Ce que le manuel contient
mainporte.registre.decider_promotion, strictement mieux que la persistance ou rien). Le geste manuel — comparer deux versions, déplacer l'alias, revenir en arrière — reste le §5 demlflow.md, auquel le manuel renvoie plutôt que de le recopier.enervision_prod, MLflow injoignable, et le modèle qui ne bat pas la persistance.Sur ce dernier cas, ce que le manuel dit explicitement : il sort en code 0, ce n'est pas une panne, c'est un résultat. L'alias n'a pas bougé, donc il n'y a aucun geste de repli à faire — c'est l'intérêt du garde-fou. On consigne le chiffre, la fenêtre et la base, et on cherche pourquoi ensuite. Un manuel qui ne décrit que la promotion réussie laisse croire qu'un refus est une panne.
Deux modes de panne que le manuel nomme et qui n'étaient écrits nulle part :
mktemp: too few X's in templaten'est pas un écart de modèle. Le lanceur quemainporte échoue encore sur les coreutils GNU ; le correctif est dansdevelop.Ce que ça corrige au passage
Le venv du serveur est
/opt/enervision/venv, pasvenv-model: suivre la lettre du README sortait en code 3 sur un chemin qui n'existe pas. Corrigé dansservices/inference/README.mdet dans l'en-tête du lanceur — sans quoi le manuel et le paquet se contrediraient, ce qui est pire que pas de manuel. Le README gagne aussi un renvoi vers le manuel, et l'index des runbooks sa ligne.Ce qui n'est pas dans cette demande, et le manuel le dit
La dernière section liste ce qui n'a pas été rejoué sur le serveur — même règle que le §5 de
mlflow.md, qui signale déjà sa propre commande non jouée :--deux-passesidentiquesenervision_prod, MLflow injoignable, modèle qui ne bat pas la persistanceDeux points de coordination
BACKLOG.mdditlenaic. J'écris ce manuel-ci parce que le critère 2 l'exige — « chacun est écrit par celui qui tient le geste » — et que le geste est celui du #36. À réassigner, ou à trancher au point du soir.reprise.md, écrit par @gabriel et rejoué intégralement par @lenaic le 02/09/2026 en 9 min 51 s. Le ticket demande « au moins une procédure ». La relecture croisée de celui-ci reste à programmer avant le jour 8, comme le « Risque » du ticket le demande.Une trouvaille qui mérite son propre ticket
Avec
--deux-passes,--jusqu-adoit s'écrire avec le signe égal. Le lanceur ne reconnaît que cette forme pour figer les bornes ; passée en deux mots, la valeur file à Python, le lanceur croit n'en avoir aucune et ajoute la sienne — l'heure courante — qui l'emporte. Les deux passes restent comparables entre elles, donc le contrôle de rejouabilité reste valide, mais la fenêtre demandée est remplacée en silence. Le manuel documente le contournement ;--environnementa déjà un traitement explicite de la forme espacée,--jusqu-amériterait le même. Correctif d'une ligne, mais c'est du code sur un ticket de documentation : je ne le fais pas ici.Approuvée. J'ai vérifié ce que le manuel affirme plutôt que de le lire :
Le seul changement de code est la correction du chemin dans l'en-tête de
entrainer.sh,venv-modelversvenv. Elle est juste.Le passage que je retiens est celui sur le refus de promotion : « il sort en code 0, ce n'est pas une panne, c'est un résultat ». Un manuel qui ne décrit que la promotion réussie laisse croire qu'un refus est un incident, et c'est exactement ce qui pousse quelqu'un à forcer l'alias à la main la veille d'une soutenance.
Le tableau des gestes en fin de manuel dit lesquels ont été joués et lesquels ont été observés. C'est la bonne distinction, et elle manque à la plupart de nos runbooks.
Deux notes, sans blocage.
Le code 3 sur
venv-modelest consigné comme observé le 08/09 « en suivant la lettre de l'ancien README ». C'est le même mécanisme que le rejeu de Justine sur le collecteur ce matin : une commande publiée qui ne pouvait pas marcher, trouvée en l'exécutant. Deux fois en une journée, ça mérite d'être dit au point du soir.Et le manuel ne parle pas du critère de promotion lui-même, qui est en discussion sur le #36 : l'ADR 0013 dit trois jours, le modèle promu perd sur trois jours et a été promu sur quatorze. Ce n'est pas le sujet de ce manuel, mais le jour où la fenêtre change, la section « le modèle ne bat pas la persistance » changera de sens.