# Coordination L4 ↔ L4.5 — deux chantiers en parallèle, un seul staging

> ## ⚡ RÉGIME 2 — en vigueur depuis le 11/08 au soir (décision Enguerran)
>
> **La contre-recette L4 est GELÉE** : Enguerran attend que les écrans revus en L4.5
> soient aussi sur staging pour lancer UNE contre-recette globale L4+L4.5 (cahiers
> Word + classeur Excel multi-testeurs). Conséquences immédiates :
>
> 1. **L4.5 merge `development` et déploie staging LIBREMENT** — la règle n° 1
>    ci-dessous et sa restriction de merge du 11/08 sont suspendues.
> 2. **Tous les verrous de fichiers tombent** (DataTable, SCSS, Dashboardapprenants) :
>    #180, FRONT#78 et FRONT#77 sont débloqués. La discipline demeure : merge train,
>    baselines par branche, hash du bundle vérifié à chaque déploiement, annonce des
>    déploiements dans la conversation.
> 3. **Clôture reséquencée** : contre-recette globale → correctifs → merge
>    `development → main` → **BACK#181 (branchement du serveur de prod sur notre git,
>    jalon L5)** → déploiement prod (checklist 13 points, `MAIL_FROM` compris).
>    Objectif : prod courant semaine prochaine ou la suivante.
>
> Le texte ci-dessous décrit le régime 1 (historique) — il redeviendrait pertinent si
> une recette partielle était relancée avant le déploiement L4.5.


> Écrit le 10/08 au lancement du dev L4.5 en parallèle de la fin de L4 (recette en
> cours). À lire par TOUTE session qui travaille sur L4.5 avant sa première branche.

## Règle n° 1 — le staging appartient à la recette L4

`staging.efektiv-academie-dev.com` est l'environnement où Enguerran recette L4.
**Tant que L4 n'est pas clos : seul le chantier L4 déploie sur staging.**

**Précision du 11/08 (analyse croisée des deux chantiers)** — « merger `development`
est permis » était trop large. Le déploiement staging fait un `git pull` de
`development` : tout merge L4.5 dans `development` devient donc **déployable par
accident** au premier correctif L4 (les contre-recettes multi-utilisateurs vont en
produire). Règle affinée :

- **Peut merger `development`** : la dette de tests uniquement (#32, #97, #127) —
  inoffensive si elle part en staging, et elle assainit la baseline de tout le monde.
- **Reste en branche (rebasée) jusqu'à clôture L4** : toute FEATURE (#243, #255,
  #164, FRONT#83, FRONT#84, …). Si l'attente devient coûteuse, ouvrir une branche
  d'intégration `l45` et y merger — jamais `development`.
- **Pendant une fenêtre de contre-recette annoncée** : gel total des merges
  `development`, dette de tests comprise.

## Règle n° 2 — ordre de merge sur les fichiers chauds

| Fichiers | Qui les tient | L4.5 attend quoi |
|---|---|---|
| `App.jsx`, `Login.jsx`, `AuthRedirect`, les 4 hubs legacy (CreateCourse, SubManagerCourse, DirectorUsers, GeneralManagerUsers) | **L4** — FRONT#75 volet 2 les supprime/nettoie | le merge de #75 volet 2 avant tout front L4.5 |
| `DataTable*`, `useColumnPreferences`, `ColumnPreferencesMenu` | L4 (correctifs de recette possibles) | clôture L4 avant la généralisation #180 (phase 3) |
| SCSS des écrans (palette crème/rose/marine) | L4 vient de les peindre | la centralisation `_tokens.scss` se fait APRÈS clôture L4 |
| `Dashboardapprenants` / `Enrolment` | L4 — deux décisions d'Enguerran en attente (onglet « Inviter » pour l'admin ; place de « Demandes ») | ne pas y toucher |

## Règle n° 3 — baseline de tests : mesurer, jamais figer

L4.5 éteint les rouges (#97, #127, FRONT#32) pendant que L4 ajoute des tests : la
baseline bouge dans les deux sens. Chaque branche mesure **sa propre** baseline
avant/après (`vitest run` ×2, `artisan test`) — aucun fichier de baseline partagé.

## Règle n° 3 bis — UN CLONE LOCAL PAR SESSION (décision du 11/08)

Incident évité de justesse : les deux chantiers travaillaient dans **le même clone
local**. Une session a trouvé, en cherchant un fichier, trois maquettes non commitées
de l'autre (`l46-*.html`) sur une branche en cours — un simple `git checkout` les
aurait écrasées. Le doc couvrait les merges, pas le disque.

**Règle** : chaque session de travail parallèle utilise **son propre clone**.
Emplacements convenus :

| Chantier | Clone |
|---|---|
| L4 / clôture / prod | `~/Projects/numedia/dev-agency/EFEKTIVACADEMIE-{BACK,FRONT}` |
| L4.5 / L4.6 (session parallèle) | `~/Projects/numedia/dev-agency/l45/EFEKTIVACADEMIE-{BACK,FRONT}` |

Migration d'une session déjà en cours : **commiter et pousser sa branche AVANT** de
basculer de clone — le travail non commité ne suit pas.

À défaut de clone séparé (dépannage) : ne jamais changer de branche sans un
`git status` préalable, et commiter avant de rendre la main.

## Règle n° 4 — un merge train à la fois par dépôt

`scripts/merge_train.sh` reste le seul chemin de merge. Deux sessions ne lancent
pas deux trains en même temps sur le même dépôt ; toujours `git pull` sur
`development` immédiatement avant de créer une branche.

## Préalables produit avant de coder en L4.5

- **Maquettes HTML apprentissage À VALIDER par Enguerran** (`html/apprentissage-mes-formations.html`,
  `html/apprentissage-catalogue-interne.html`) — les décisions (option 2, gamification
  en en-tête) sont actées, les maquettes elles-mêmes pas encore. Process du 11/08 :
  pas de dev d'écran sans maquette validée.
- FRONT#77/#78/#83/#84 + BACK#255 portent les CA détaillés ; l'issue produit fait foi.

## Outillage commun (rappels)

- Déploiement : `docs/roadmap/12_PROCEDURE_DEPLOIEMENT.md` — checklist 13 points,
  dont hash du bundle (13) et e-mail réel en boîte Gmail (12).
- Comptes de recette staging : procédure tinker dans le même document.
- Docs pour humains : `.md` source + `.docx` via `scripts/doc_word.sh`.
- Suivi croisé : `scripts/audit_sprints.py` tourne à chaque merge train — une paire
  back/front dans des jalons différents est un écart à corriger sur-le-champ.
