# M4 — Plan maître worktrees (back, Matthieu) > **Rôle de ce fichier** : vue d'ensemble que la *conversation maître* tient à jour. > Chaque worktree = une conversation Claude isolée + une branche + une PR vers `develop`. > Les prompts à coller sont dans `WT*.md`. ## Principe - 1 worktree = 1 branche partant de `origin/develop` (à jour des deps). - 1 ticket = 1 PR atomique vers **`develop`** (jamais `main`). - Commit autorisé sur la branche du worktree (ces prompts SONT la demande explicite) ; `git commit --no-verify` OK si `make test` est déjà vert (le hook relance toute la suite). - **Chaque worktree ouvre SA PR** vers `develop` en fin de tâche (cf. bloc PR ci-dessous). ## Bloc PR standard (repris dans chaque prompt) ```bash git push -u origin tea pr create --base develop --head \ --title "() : " \ --description "Résumé + lien ticket Lesstime ERP-XXX" ``` Puis **labelliser la PR via l'API Gitea** (tea ne pose pas les labels en CLI — `gitea.malio.fr`). Cible **`develop`**, jamais `main`. **Aucune mention de Claude/IA** dans titre ou description. ## Vagues & ordre de merge ``` VAGUE 0 (en parallèle, dès maintenant) WT1 1.2 upload Shared base: origin/develop ──┐ WT2 1.1 RBAC + sidebar base: origin/develop (≥ERP-150) ──┤ indépendants │ VAGUE 1 (critique, séquentiel) │ WT3 1.3 migration + 1.5 entités/resource/provider + i18n audit base: origin/develop APRÈS merge WT1 (FK uploaded_document) ⭐ livre le CONTRAT JSON liste+détail → débloque le front (Tristan) VAGUE 2 (fan-out, tous en parallèle dès WT3 mergé) WT4 1.6 processor base: develop ≥ WT3 WT5 1.4 qualimat endpoint base: develop ≥ WT2 (perm) + ERP-39 (indépendant de WT3) WT6 1.7 adresses base: develop ≥ WT3 WT7 1.8 contacts base: develop ≥ WT3 WT8 1.9 prix base: develop ≥ WT3 WT9 1.10 export XLSX base: develop ≥ WT3 VAGUE 3 (final) WT10 1.11 tests + fixtures + contrat base: develop ≥ TOUT ``` **Parallélisme réel** : 2 worktrees en V0, puis 1 goulot (WT3), puis **jusqu'à 6 en V2**, puis 1 (WT10). ## Règle anti-conflit worktree (IMPORTANT) Pour que WT4→WT9 tournent en parallèle sans conflit de merge : | Fichier partagé | Qui le touche | Les autres | |---|---|---| | `CarrierFixtures` | **WT10 uniquement** | interdit (WT3 met un fixture minimal, WT6-9 n'y touchent pas) | | Entité `Carrier` (ApiResource) | **WT3** crée, **WT4** ajoute le Processor | WT6-9 créent des **resources/processors dédiés** par sous-entité, ne modifient pas `Carrier` | | `ColumnCommentsCatalog` | WT1 (`uploaded_document`), WT3 (`carrier*`) | personne d'autre | | `fr.json` (clés audit) | **WT3** (clés `audit.entity.transport_*`) | personne d'autre côté back | | `migrations/` | WT1 puis WT3 (ordre timestamp) | aucune autre migration | ## Mode retenu : STACK séquentiel, SANS worktree (repo principal) Matthieu empile les MR, un ticket à la fois, **directement dans `/home/matthieu/dev_malio/Starseed`** (pas de worktree). - **Ignorer les blocs `git worktree add` des `WT*.md`** → remplacés par une branche normale : ```bash git fetch origin git checkout -b feat/erp-XXX-... origin/ ``` - **WT1 hors pile** (déjà mergé). Pile M4 — chaque branche basée sur la précédente : `WT2 → WT3 → WT4 → WT5 → WT6 → WT7 → WT8 → WT9 → WT10` - PR de chaque maillon : `--base ` (bas de pile WT2 = `develop`). Au merge, les MR du dessus se recible auto. - Docker tourne sur le repo principal → `make test`/`php-cs-fixer` OK sans rebind (le piège worktree-vs-mount ne s'applique plus). - Worktrees créés pour WT1/WT2 à nettoyer : `git worktree remove ../sb-erp154-upload ../sb-erp153-rbac`. - Garder les MR basses propres ; merger dans l'ordre. ## Suivi (tenu par la conv maître) | WT | Ticket | ERP | État | PR | Notes | |----|--------|-----|------|----|----| | WT1 | 1.2 upload | 154 | ✅ MERGÉ | #108 | migration `Version20260615130000` | | WT2 | 1.1 RBAC | 153 | ✅ PR ouverte | #111 | bas de pile (cible develop) | | WT3 | 1.3+1.5 | 155+157 | ▶️ À LANCER | — | stack sur `feat/erp-153-rbac` ; gate contrat front | | WT4 | 1.6 proc | 158 | ⛔ bloqué par WT3 | — | | | WT5 | 1.4 qualimat | 156 | ⛔ bloqué par WT2+ERP-39 | — | | | WT6 | 1.7 adresses | 159 | ⛔ bloqué par WT3 | — | | | WT7 | 1.8 contacts | 160 | ⛔ bloqué par WT3 | — | | | WT8 | 1.9 prix | 161 | ⛔ bloqué par WT3 | — | | | WT9 | 1.10 export | 162 | ⛔ bloqué par WT3 | — | | | WT10 | 1.11 tests | 163 | ⛔ bloqué par tout | — | | ## Cadre commun à tous les prompts (rappels projet) - Carrier vit dans `src/Module/Transport/` (créé par ERP-150). **Miroir = `src/Module/Commercial/`** (Supplier). - Tests sous `tests/Module/Transport/Api/` (miroir `tests/Module/Commercial/Api/`). - `declare(strict_types=1);` partout ; commentaires **FR**, code EN. - `make test` + `make php-cs-fixer-allow-risky` avant de dire « fini ». - Ne jamais mentionner Claude/IA dans commit/PR.