dc75945f3e
Schéma BDD du répertoire transporteurs (M4) + entités + contrat de lecture (liste + détail), socle du front. - Migration Version20260615150000 : tables carrier / carrier_address / carrier_contact / carrier_price (FK cross-module, CHECK enum, index partiel uq_carrier_name_active, COMMENT ON COLUMN). uploaded_document et qualimat_carrier réutilisées (non recréées). - Entités Carrier* (#[Auditable], Timestampable/Blamable) + ApiResource LECTURE seule (GetCollection + Get via CarrierProvider, anti-N+1, exclusion archivés + ?includeArchived). Écriture (POST/PATCH + Processor) reportée WT4+. - QualimatCarrier : mapping ORM lecture seule sur la table référentielle existante (sortie du schema_filter, mapping aligné DDL ERP-39, schema:update no-op) + endpoint de recherche read-only (§ 4.7). - Relations cross-module des prix (Client/Supplier/adresses) via contrats Shared (ClientInterface, SupplierInterface, ClientAddressInterface, SupplierAddressInterface) + resolve_target_entities — sans import inter-module (règle n°1). Ajout du groupe supplier_address:read aux champs de SupplierAddress pour l'embed. - Garde-fous : ColumnCommentsCatalog (carrier* + qualimat_carrier), makefile test-db-setup (index partiel carrier), i18n audit (transport_carrier*), EntitiesAreTimestampableBlamableTest (QualimatCarrier whitelisté). - CarrierSerializationContractTest : contrat JSON liste + détail vérifié (embeds objet, booléens, enveloppe Hydra) ; JSON réel capturé dans spec-back § 4.0.bis. make db-reset OK, make test vert (731), make nuxt-test vert (480), php-cs-fixer OK.
101 lines
5.2 KiB
Markdown
101 lines
5.2 KiB
Markdown
# 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 <branche>
|
|
tea pr create --base develop --head <branche> \
|
|
--title "<type>(<scope>) : <titre>" \
|
|
--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/<branche-précédente>
|
|
```
|
|
- **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 <branche-précédente>` (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.
|