# Consignation — session « pilotage de la recette » — 23 août 2026

Écrit à la demande d'Enguerran pour la **conversation chapeau**. Cette session
se clôt ici : tout ce qu'elle sait est dans ce fichier ou dans les issues qu'il
cite. **Rien d'important ne reste dans la conversation.**

⚠️ Ce document est daté. Vérifier au code avant de s'en servir — et **quand une
section change, relire les autres** : ce document a déjà porté une contradiction
interne entre deux de ses sections pendant quelques heures.

## 1. Ce que cette session a fait

**Recette utilisateur** (Lilian, testeur) : 10 parcours, 119 étapes jouées sur
140, 100 OK, 17 KO. Feuille de suivi et cahier publiés à une adresse stable :
`https://staging.efektiv-academie-dev.com/_recette/recette-0ts4w5xbdmin4v/`
⚠️ **23 correctifs restent À REJOUER par lui**, 16 étapes encore marquées KO.

**Correctifs livrés, déployés et vérifiés EN CONNECTÉ** (16) : fermeture du
corrigé de quiz par type · garde d'accès au dépôt de réponse · refus YouTube
écran + serveur · tarif facultatif · alignement des champs obligatoires ·
contrat d'interface régénéré + porte de CI · CI sur MySQL · suite front
séquentielle · suppression de cours refusée sur historique · points au refus ·
journal d'audit (capture) · quatre correctifs d'affichage · FRONT#154.

**16 issues fermées SUR PREUVE** (mesure écrite dans chacune), **3 refusées**
faute de vérification : #567, #582, FRONT#334.

## 2. Ce qui reste — la seule liste qui fait foi

**Registre des 355 issues ouvertes**, avec jalon GitHub, classement pilote,
criticité et risque :
`https://claude.ai/code/artifact/4d2a54c7-6445-4e73-a716-19b88db3ca1f`

⚠️ **Le classement pilote ne couvre que 45 issues sur 355.** Les 310 autres
portent « non instruite » — cette session a **refusé** de les ranger de mémoire.
**130 n'ont AUCUN jalon GitHub** : tant que ce n'est pas corrigé, aucun comptage
par lot n'est fiable.

L'état d'avant-production détaillé est dans
`docs/context/ETAT_AVANT_PROD_2026-08-22.md`.

## 3. Ce qui attend un arbitrage d'Enguerran

1. **#618 🔴 VITAL** — 150 certificats nominatifs téléchargeables **sans
   authentification en production**, noms devinables. ⚠️ **Deux gestes, dans
   cet ordre : couper l'accès public, mais LIRE LES JOURNAUX D'ACCÈS AVANT** —
   la correction efface la trace, la mesure ne se rattrape pas. **Mandat non
   donné à ce jour.**
2. **#575 contre #626** — automatiser l'**exécution** des migrations au
   déploiement, ou seulement l'**alerte** ? Deux conversations ont produit deux
   réponses contradictoires sans se voir.
3. **#562** libération progressive : que vaut « le début du cours » pour un
   apprenant inscrit après le démarrage ? À trancher **avant** tout code.
4. **#592** aperçu de quiz · **#614** points d'inscription une fois par vie.
5. **#619** le DSN Sentry : **la valeur est la seule chose qui manque**, elle ne
   se devine pas.
6. La règle de fermeture : la contre-recette du pilote suffit-elle pour ce qu'un
   testeur **ne peut pas voir** (garde de sécurité, règle serveur) ?

## 4. Ce que cette session a appris — à ne pas réapprendre

**Le travail livré n'est pas le travail en vigueur.** Quatre visages, tous vécus
en 48 h : une PR qui ne peut plus fusionner (#608, 8 PR bloquées depuis 11
jours) · une issue livrée restée « à faire » (18 cas) · un artefact généré
jamais régénéré (#603, contrat servi vieux de 5 mois) · une configuration jamais
posée (#619, #624).

**Cinq dispositifs se sont révélés faussement actifs** : protection de branche
sans `enforce_admins`, filtre de chemins, renommage de job, PR antérieures à la
porte, contrôle de santé trop étroit. ⚠️ **Aucun n'avait jamais rougi.** Un
garde-fou dont on n'a pas vu l'échec ne prouve rien.

**Deux erreurs de mesure du pilote**, du même type — raisonner sur un indice qui
vaut dans les deux états : chercher « Où en sont » pour vérifier un libellé
passé de « mes gens » à « mes apprenants » ; déduire « issue livrée » de « son
numéro apparaît dans les commits ». **Une vérification se fait sur deux mesures :
l'ancien absent ET le nouveau présent.**

Ces leçons sont dans le kit d'orchestration (`chef-orchestre` §5bis,
`socle-livraison` 5e piège, `passage-de-relais`).

## 5. Travail local non poussé — audit du 23/08

**Aucun** fichier non commité, **aucun** remisage, un seul worktree
(`wt-infra-cloud`, chantier cloud, intact). Les commits locaux restants sont du
résidu périmé : `development` est plus récent partout.

**Deux manques réels trouvés et traités** : FRONT#154 (correctif du 16/08 jamais
poussé — **livré et vérifié le 23/08**) et **PR #306** (runbook de bascule, en
conflit, **toujours non fusionnée**).

## 6. Les trois sessions qui prennent la suite

| session | objet | ⚠️ |
|---|---|---|
| **Lotissement** | ranger les 355 issues en 3 lots, page à boutons | 2 décisions à prendre avec Enguerran avant d'écrire la page |
| **Structure GitHub puis CI/CD** | le lien front↔back n'existe **mécaniquement nulle part** | **la structure AVANT la CI** — une CI ne garde pas ce qui n'existe pas |
| **Bascule / serveur** | machine, MyISAM→InnoDB (#136), accès OVH | **plan de bascule PARQUÉ** jusqu'à ce que le lotissement dise ce que contient L5 |

⚠️ **Dépendance dans les deux sens** : si la conversion InnoDB révèle un blocant
— des lignes orphelines empêchant de créer les clés étrangères, par exemple —
**cela change le lotissement**, pas seulement la séquence.
