# Arbitrages en attente — le point de vérité unique

> **Créé le 19/08.** Avant ce document, les arbitrages vivaient éparpillés : un
> doc de roadmap, une pièce jointe de chat, des commentaires d'issues. Ici, une
> seule liste, versionnée. Chaque ligne pointe vers son détail. Le futur tableau
> de bord de pilotage lira cette liste.

## ⚠️ Mise à jour du 25/08 — ce registre était figé au 21/08

*Trou trouvé en auditant la consignation à la demande d'Enguerran. Les arbitrages
ouverts de la semaine ne vivaient que sur un tableau de bord — **un artefact publié,
pas le dépôt**. C'est le troisième cas du même motif en deux jours ; les deux autres
étaient de mon fait (#669, la règle des jalons). Le registre reprend ici son rôle.*

### Ce qui ATTEND un arbitrage d'Enguerran — état au 25/08 au soir

| sujet | adresse | ce qui bloque si personne ne tranche |
|---|---|---|
| **Les 19 issues ouvertes sans jalon** (10 BACK + 9 FRONT, **compté le 25/08**) — toutes développées, fermeture attendue par la recette | balayage du lotissement | accepter l'exception, **ou** poser « Avant bascule » partout. Sans décision, la règle du 25/08 a une zone grise dès son premier jour |
| **Qui EXPLOITE la production après la bascule** — sauvegardes vérifiées, renouvellement TLS, supervision, astreinte | runbook §0.5 (« à définir — trou identifié ») | ⚠️ **nommé le 23/08, toujours personne.** Un serveur neuf sans exploitant est un incident différé |
| **Le lint doit-il devenir bloquant ?** — chiffré : BACK 87 runs / 2 échecs, FRONT 35 / 0 | **#467** (jalon Post-bascule) | un Pint/ESLint rouge entre sur `main`, régulièrement — et c'est régulier |
| **Les 59 vulnérabilités de la branche par défaut** (1 critique, 22 hautes) + **5 PR Dependabot ouvertes vers `main`** (#632, #633, #634, #635, #329) | #623 · #294 · #329 | ⚠️ les mises à jour de **sécurité** ciblent toujours la branche par défaut et **ne sont pas reciblables** (fait n°3 de #641) |
| **CI PHP 8.2 → 8.4** avant la fin du support sécurité | **#471** (jalon Post-bascule) | échéance externe, non négociable |
| **L'adresse e-mail Certbot** (renouvellement TLS du serveur cible) | runbook §0.4 / installation serveur | un certificat qui expire sans destinataire d'alerte |
| **Le sort de la route Stripe** — clés de test mesurées | **#600** (jalon Post-bascule) | route atteignable par aucun écran, mais qui répond |
| **Les droits de l'équipe de développement externe sur les dépôts** | **#669** (jalon Avant bascule) | `push=true` sur les deux dépôts ; les 3 voies sont protégées, **tout le reste est ouvert en écriture** |
| **Les réponses Q1–Q4 de la recette** | la feuille de recette | Lilian attend pour poursuivre certains parcours |

### Ce qui a été RENDU depuis le 21/08 — pour que le registre ne re-pose pas des questions closes

⚠️ « Arbitrage rendu » ≠ « issue fermée ». La colonne d'état est mesurée le 25/08.

| arbitrage | décision | adresse | état de la mise en œuvre |
|---|---|---|---|
| Modèle de branche de recette | **`staging` à nom fixe**, cérémonie scriptée (contre-proposition d'Enguerran, retenue contre le modèle `release/**` daté) | #658 · plan #657 | **ouvertes** — dans le train |
| Mandat des trains | le chapeau commande, ses ordres valent ceux d'Enguerran ; périmètre strict du fil train | `FIL_DE_CHANTIER.md` §7 | ✅ fusionné (#650) |
| Fermeture d'une issue à deux volets | règle écrite | #661 · `TRAITEMENT_DES_BUGS.md` | **ouverte** — dans le train |
| Cap outillage | format actuel jusqu'à la bascule, **Projects post-bascule** | #653 | ✅ fusionné |
| Typologie d'issues | **1 jalon + 1 `lot:` + 1 `type:`** (dev/bug/doc/run), orthogonalité | #663 | **ouverte** — préparation faite, application à une frontière annoncée |
| Migrations au déploiement (#575 vs #626) | **l'ALERTE d'abord** (#626) ; l'automatisation (#575) renvoyée à la conversation CI/CD | commentaires sur #575 et #626 | ✅ tracé sur les deux issues |
| PR #455 (pipeline de l'équipe externe) | **fermer en récupérant les idées** | #455, #464/#467/#468/#469/#470 | ✅ fermée le 24/08 |
| Coordination `deploy.yml` de la branche pipeline | fermée **sur mesure** (rien ne se déclenche sur push vers `main` — triple mesure) | #307 | ✅ fermée le 24/08 |
| Trou de recette temporaire | **accepté** — CI entière conservée, annonces avec mention honnête | plan #657 §5 | dans le train |
| Gestes du cycle de recette | tenus par **le pilote, à la demande d'Enguerran** | plan #657 §5 | dans le train |
| Modélisation du Project | **1 Project = 1 produit, permanent** — axes/sprints/releases sont des champs à l'intérieur | #666 (`CHEMIN_DUNE_ISSUE.md`) | **ouverte** — proposition, à valider |

---

## Décisions produit qui bloquent des chantiers

| # | Décision attendue | Détail | Impact si non tranché |
|---|---|---|---|
| # | Question | Détail | **DÉCISION (Enguerran, 19/08)** |
|---|---|---|---|
| A1 | **Un utilisateur a-t-il UN rôle ou N ?** | [§7 Q1](23_CARTOGRAPHIE_HABILITATIONS.md) | ✅ **N (plusieurs)**. Attribution **par l'admin uniquement**. CIBLE : découper les rôles en **blocs d'autorisation fins** → rôles « sur-mesure » composables (direction Spatie permissions). |
| A2 | **Le Manager RH voit-il tout ?** | [§7 Q2](23_CARTOGRAPHIE_HABILITATIONS.md) | ✅ **Nuancé** : PAS tout comme l'admin (jamais les données techniques, mots de passe). MAIS le détail **management/pilotage de TOUS les utilisateurs**. CIBLE : déclinaisons du profil RH avec restrictions par **société / direction**. |
| A3 | **Où un droit est-il APPLIQUÉ : front ou serveur ?** | [§7 Q4](23_CARTOGRAPHIE_HABILITATIONS.md) | ✅ **SERVEUR TOUJOURS, front cosmétique seulement.** Toute garde front doit avoir son pendant serveur ; le front ne fait que cacher pour le confort. Impose l'audit des 179 gardes front. |
| A4 | Q3 et Q5 de la cartographie | [§7](23_CARTOGRAPHIE_HABILITATIONS.md) | ⏳ En attente |
| A5 | **Correction des quiz : quel défaut, quel modèle ?** | FRONT#304 · **nouvelle issue typologie** | ✅ **Défaut = afficher à chaque réponse.** CIBLE : **3 types de quiz** — (a) *ancrage* → correction question par question ; (b) *intermédiaire* (débloque le support suivant) → résultats détaillés à la fin ; (c) *évaluation finale QUALIOPI* → **score seul** à la fin, aucun détail bonnes/mauvaises. |
| A6 | **Règles d'invitation** (rôle, rattachement) | [FRONT#299](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-FRONT/issues/299) | ✅ **TRANCHÉ** : (1) on n'invite qu'un rang strictement inférieur (collab < manager d'équipe < mgr général < directeur) ; (2) rattachement auto à l'expéditeur (auj. non fait, cause orphelins/#502) ; (3) exceptions : admin = tout rôle, Manager RH = tout sauf admin. Champs rôle/rattachement UI seulement pour admin + RH. Contrôle SERVEUR (A3). |
| A7 | **Résorber la dette eslint FRONT** (134 err / 39 fichiers) | FRONT#309 · #518 | ✅ **Moins urgent** — fin de journée ou creux d'issues. |

## Cases à cocher — mapping catégories (bascule prod)

⚠️ **Repensé le 19/08** : voir [24_TAXONOMIE_CIBLE.md](24_TAXONOMIE_CIBLE.md) (nature vs
sujet). Le mapping 1:1 est caduc ; à refaire sur DEUX axes. Décision produit prise,
référentiel de sujets à finaliser en atelier.

## Séquence de bascule dispositif (validée 19/08)

1. Déterministes (#518 — CI BACK + lint) → EN COURS
2. Bascule kit (cadrage + chef-orchestre + tableau de bord)
3. Jury IA (calibré sur données réelles, Mistral shadow)

## Lot sécurité pré-prod (aucun ne passe en prod)

#529 · #530 · #532 — famille corrigé/périmètre quiz, tracées, non urgentes pour
la recette mais **bloquantes avant mise en production**.

---

## Arbitrages ouverts le 21/08 (parité MySQL, modèle de données, quiz)

| # | Question | Source | Enjeu | État |
|---|---|---|---|---|
| **A8** | Le document du modèle de données porte le **nom du schéma** (`efektiv_local`). La porte de CI crée donc une base de ce nom exact. Un développeur dont la base locale porte un autre nom obtient un **rouge qui n'est pas une dérive**. Rendre le document indépendant du nom = modifier le générateur. | [#579](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/pull/579) / [#568](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/issues/568) | Faux positifs sur les postes de développement | ⏳ |
| **A9** | **`.env.example` bascule sur MySQL** — il envoyait un poste neuf sur SQLite. À confirmer si un usage hors CI en dépendait. | [#579](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/pull/579) | Ce que reçoit un poste neuf | ⏳ |
| **A10** | **Service MySQL en 8.0** (version de la production). Un poste en 9.x — rencontré — ne teste pas exactement le même moteur. Aligner les postes, ou l'assumer ? | [#579](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/pull/579) | Résidu de divergence | ⏳ |
| **A11** | **`app/SectionResource.php`** : fichier à la racine de `app/` déclarant la MÊME classe que `app/Http/Resources/SectionResource.php`, avec un corps **différent et périmé**. Jamais chargé en PSR-4, mais une optimisation d'autoloader pourrait le préférer. Supprimer ? | [#567](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/issues/567) / [#568](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/issues/568) | Copie morte et piégeuse | ⏳ |
| **A12** | **Quel type reçoivent les 42 quiz existants ?** Hypothèse du pilote : `ancrage`, parce qu'elle préserve le comportement actuel. **Réversible par un réglage**, sans migration (le champ est laissé vide = « suit le défaut de la plateforme »). | [#558](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/issues/558) | Ce que voient les apprenants | ⏳ |

### ⚠️ Dette technique ouverte, pas un arbitrage — à traiter

**L'écran de quiz lit une clé qui ne porte plus la typologie.** Depuis [#571](https://github.com/AAZTEKDEV/EFEKTIVACADEMIE-BACK/pull/571), la typologie est servie sous `quiz_type` ; le front lit encore `quiz?.type?.correction` (`src/Common/correctionQuiz.js:60`).

**Effet aujourd'hui : nul** — aucun des 42 quiz n'a de type explicite, tout retombe sur le défaut de la plateforme. **Effet demain : réel** — le jour où un quiz est réglé en « évaluation finale », il se comportera comme un quiz d'**ancrage** et **montrera la correction**, sur la seule famille à portée réglementaire QUALIOPI.

→ **Ne pas régler de type explicite tant que le front n'a pas été adapté.**
