corentin_wakdo/docs/journal/2026-06-04--p1-merise-v0.2-rewrite-and-forgejo-migration.md
Imugiii 46832a17ce
All checks were successful
CI / secret-scan (push) Successful in 7s
CI / php-lint (push) Successful in 17s
CI / static-tests (push) Successful in 3s
ci: add Forgejo Actions pipeline and gitleaks secret-scan config
2026-06-15 09:56:39 +00:00

9 KiB

P1 Merise v0.2 (prod-like) reecrit + migration vers Forgejo auto-heberge

Date : 2026-06-04 (seconde session du jour, suite de conception-prodlike-revision) Branche : feat/p1-conception PR : commits directs sur la branche ; PR feat/p1-conception -> dev a ouvrir apres l'UML Duree estimee : session longue (decisions + execution + infra)


Ce qui a ete fait

Trois chantiers enchaines.

1. Decisions de conception restantes tranchees (D4-D8 + stock + Maxi)

  • D4 - Roles / RBAC / workflow : seed de 5 roles admin / manager / kitchen / counter / drive. RBAC dynamique (roles + matrice role-permission editables en UI). Attributs sur role pour rendre les comportements dynamiques sans hardcode : default_route, order_source, et table role_visible_source (filtre du dashboard par canal). Machine a etats reduite de 6 a 4 etats : pending_payment -> paid -> delivered (+ cancelled). La cuisine est en lecture seule ; counter/drive font la livraison en un geste.
  • D5 - Permissions : catalogue fige de 23 codes resource.action + matrice par defaut. Correction appliquee : admin recoit order.create/order.deliver ; manager ne recoit pas order.cancel.
  • D6 - service_day : coupure a 10h00, calcul applicatif (CASE WHEN HOUR(created_at) < 10 ...), la colonne generee buguee a 4h30 du MLD v0.1 est abandonnee.
  • D7 - Subnet Docker : retour a l'auto-allocation (IP liberees sur le serveur), le subnet explicite n'est plus necessaire.
  • D8 - Numero de commande : prefixe par canal K/C/D.
  • Stock numerique par ingredient : colonnes unit, stock_quantity, pack_size, pack_label, low_stock_threshold sur ingredient ; decrement automatique a la transition paid, re-credit a l'annulation, reconciliation manuelle (inventaire), journal stock_movement append-only, permissions stock.read/stock.count/stock.manage.
  • Format Maxi : multiplicateur de recette. product_ingredient porte quantity_normal et quantity_maxi ; le decrement suit order_item.format. Le Maxi agrandit l'accompagnement et la boisson uniquement (burger et sauce invariants).

Decisions consignees dans docs/notes/revue-alignement-p1.md section 7 (non versionne).

2. Reecriture des 5 docs Merise en prod-like v0.2 (19 entites, anglais)

Delegation a l'agent expert-merise-agile, en deux lots (donnees : dictionary/MCD/MLD ; traitements : MCT/MLT), chaque sortie verifiee contre le tableau de decision puis recalee a la main (matrice de permissions, multiplicateur Maxi). Resultat : dictionary.md, mcd.md, mld.md, mct.md, mlt.md reecrits, 19 entites, vocabulaire anglais snake_case, commande_event et menu_produit supprimes au profit du configurateur d'ingredients, des allergenes, des slots de menu et du journal de stock. Cinq commits (un par doc) sur feat/p1-conception.

3. Migration du depot vers Forgejo auto-heberge + gouvernance PR

  • Nouveau depot https://git.acadenice.com/AcadeNice/corentin_wakdo (Forgejo sur le serveur).
  • Dual-push configure : git push origin pousse desormais sur GitHub ET Forgejo, les deux en HTTPS via des tokens lus dans .env (gitignore). Aucun token persiste dans .git/config (credential helper qui lit .env au moment du push).
  • Reconciliation d'un desalignement decouvert au passage : dev sur GitHub (a3eae01) etait le vrai tronc integre (PR #4 front, #5 conception, #6 admin shell mergees), tandis que dev local et Forgejo etaient restes a 68db2ee. Forgejo a ete resynchronise sur l'etat GitHub complet, sans perte.
  • Template de PR (.gitea/PULL_REQUEST_TEMPLATE.md, conventions BYAN) ajoute sur dev.
  • Protections de branche sur main et dev (API Forgejo) : push direct interdit (PR obligatoire), force-push bloque, 0 approbation requise (adapte au travail solo).

Pourquoi - decisions et alternatives

  • Machine a 4 etats au lieu de 6 : en fast-food, le KDS cuisine est un affichage visuel ; preparing et ready ajoutaient des transitions sans valeur metier proportionnelle. La livraison fusionne ready+delivered en un clic. Le KPI reste le temps total delivered_at - paid_at.
  • Stock Maxi via multiplicateur de recette (alternative ecartee : produits de taille distincte Moyenne/Grande) : l'auteur a prefere un seul produit par choix avec quantity_normal/quantity_maxi, plus simple a saisir au seed tout en gardant un stock realiste.
  • Forgejo auto-heberge (alternative : rester sur GitHub) : GitHub facture les depots prives, et l'auto-hebergement apporte Forgejo Actions et un controle fin des regles de PR. Cela ajoute un argument infra (Bloc 5) puisque la chaine forge + CI est maitrisee de bout en bout.
  • Tout en HTTPS + token plutot que SSH : la cle SSH GitHub (~/.ssh/git_wakdo) est protegee par passphrase et inutilisable depuis le shell non-interactif de l'assistant. Les tokens HTTPS stockes dans .env permettent un push automatise des deux cotes.
  • 0 approbation sur les protections : en solo, exiger une approbation bloquerait le merge (on ne peut pas approuver sa propre PR). La protection conserve l'essentiel : PR obligatoire et pas de force-push.

Comment - points techniques cles

  • Credential helper lisant .env : git config credential.https://<host>.helper pointe vers un script qui extrait le token de .env au moment du push. Avantage : roter un token = editer .env, sans reconfiguration git, et aucun secret dans .git/config.
  • Reconciliation dev : git branch -f dev origin/dev pour reprendre l'etat GitHub reel, template ajoute par-dessus dans un worktree dedie (working tree principal preserve), push fast-forward sur GitHub et push force sur Forgejo (lignee perimee remplacee, depot neuf donc sans risque).
  • Protections via API : POST /api/v1/repos/.../branch_protections avec enable_push=false et required_approvals=0 pour main et dev.

Criteres RNCP couverts

  • Bloc 2 - Cr 3.a / 3.b : modelisation des donnees prod-like (dictionnaire, MCD, MLD), polymorphisme, snapshots, configurateur d'ingredients, journal de stock.
  • Bloc 2 - Cr 3.d : TVA portee par le produit et calculee ligne par ligne.
  • Bloc 5 : forge auto-hebergee, gouvernance de branches (protections + template PR), socle pour la CI Forgejo Actions a venir.

Questions anticipees du jury

  • Q : "Pourquoi heberger votre propre forge plutot qu'un service gere ?" R : Maitrise de la chaine (depot, CI via Forgejo Actions, regles de PR), depots prives sans cout, et coherence avec l'infra deja en place sur le serveur. GitHub est conserve comme copie synchronisee.

  • Q : "Comment gerez-vous le stock d'un menu Maxi ?" R : Un multiplicateur de recette : product_ingredient porte une quantite Normale et une quantite Maxi, le decrement suit le format de la ligne. Le Maxi n'agrandit que l'accompagnement et la boisson.

  • Q : "Vos secrets sont-ils exposes dans le depot ?" R : Non. Les tokens vivent dans .env (gitignore) ; .git/config ne contient que des scripts qui les lisent. Le credential helper evite de stocker un token en clair dans la config git.


Points d'amelioration conscients

  • UML pas encore reecrit : state-commande.md, use-cases.md, sequence-passer-commande.md sont encore en v0.1 (6 etats, ancien vocabulaire). A reecrire pour 4 etats / 5 roles / slots+modifiers avant d'ouvrir la PR conception.
  • PROJECT_CONTEXT sections 7 et 11 : a mettre a jour (retirer "MVP", passer a ~19 entites, rechiffrer le planning).
  • Diagrammes drawio (MCD/MLD) : a regenerer pour 19 entites ; les .md utilisent du Mermaid inline en attendant.
  • SESSION_RESUME.md : perime (Session 7), a rafraichir avec le nouveau remote dual-push et l'etat v0.2.
  • Synchronisation des merges Forgejo vers GitHub : un merge fait dans l'UI Forgejo ne remonte pas tout seul sur GitHub ; un push-mirror Forgejo -> GitHub serait la reponse propre, a decider.
  • Token Forgejo expose dans le chat : il a transite en clair pendant la mise en place ; le roter quand pratique (il est dedie au push, donc impact limite).

Etat a la reprise

  • Conception v0.2 committee (dictionnaire + MCD/MLD/MCT/MLT) et deja presente dans dev (971ce0c) via la PR #5 mergee puis resynchronisee.
  • feat/p1-conception est a 392ba9a ; une PR vers dev serait vide tant que l'UML + PROJECT_CONTEXT ne sont pas produits.
  • Prochaine action : reecrire l'UML + PROJECT_CONTEXT sur feat/p1-conception, committer (un commit par doc), pousser (dual), puis ouvrir la PR feat/p1-conception -> dev avec le template.

Liens vers artefacts

  • Commits Merise v0.2 : 6ceebf7 (dictionary), 6c1cede (MCD), 36332b4 (MLD), 6057ef9 (MCT), 392ba9a (MLT)
  • Template PR + sync dev : 971ce0c
  • Depots : https://git.acadenice.com/AcadeNice/corentin_wakdo (Forgejo) + https://github.com/AcadeNice/wakdo_corentin (GitHub, miroir synchronise)
  • Docs reecrits : docs/merise/{dictionary,mcd,mld,mct,mlt}.md
  • Tableau de decision : docs/notes/revue-alignement-p1.md section 7 (non versionne)
  • Journal precedent du jour : docs/journal/2026-06-04--conception-prodlike-revision.md