882 lines
45 KiB
Markdown
Executable file
882 lines
45 KiB
Markdown
Executable file
# Session Resume — Wakdo
|
||
|
||
**Document de reprise entre sessions de travail.**
|
||
A consulter en premier quand tu reprends le projet.
|
||
|
||
---
|
||
|
||
## Derniere session : 2026-06-15 (lot B docs + sync forges + nettoyage branches)
|
||
|
||
### Vue d'ensemble
|
||
|
||
Suite du pivot security-by-design sur `feat/p1-conception`. Trois temps :
|
||
|
||
1. **Lot B execute** : `PROJECT_CONTEXT` aligne sur Forgejo Actions (drift GitHub corrige
|
||
partout : SS6/8/9/10/12), couche securite integree (CI PHPStan/secret-scan, `.env.example`
|
||
+ `php.ini` durci, decision #16 SbD), planning rechiffre (P0 22, P1 38, P7 22 ; total 272h).
|
||
2 commits : `d305a09` (context) + `fae5c23` (UML : security-sequence + drift-fix x3).
|
||
2. **Sync des deux forges** : GitHub `main` etait 35 commits en retard (`00a3f82`, fige v0.1.0)
|
||
-> fast-forward propre vers `5104040`. GitHub et Forgejo desormais identiques sur les 3 refs.
|
||
3. **Nettoyage branches** : 6 branches finalisees supprimees partout (local + GitHub + Forgejo) :
|
||
`infra-docker`, `p1-assets-import`, `p1-stubs-and-dictionary`, `p5-front-landing`,
|
||
`p3-admin-shell`, `demo/p5-front-and-p3-admin`. Contenu verifie present dans `dev`/`main`.
|
||
|
||
### Etat Git (post-session)
|
||
|
||
```
|
||
Branche active : feat/p1-conception (fae5c23) - 7 commits SbD pushes (5 Merise + 2 lot B)
|
||
Refs alignees GitHub == Forgejo :
|
||
main 5104040 (release dev->main : P1 v0.2 + front P5 + admin shell)
|
||
dev 971ce0c (PR template Forgejo)
|
||
feat/p1-conception fae5c23 (travail SbD en cours, NON merge)
|
||
Branches locales restantes : dev, main, feat/p1-conception
|
||
Working tree : hors-scope BYAN (.claude, Makefile, docker-compose, package*) + journal Forgejo
|
||
2026-06-04 untracked + SESSION_RESUME (local) + journal/README modifie.
|
||
```
|
||
|
||
### Decisions actees cette session
|
||
|
||
- **PR en solo dev** : strategie retenue = **PR + auto-merge sur CI verte**. On garde la
|
||
protection de branche (PR obligatoire, trace pour Cr 4.f) ; Forgejo merge automatiquement
|
||
quand PHPUnit/PHPStan/secret-scan passent. A implementer en lot D.
|
||
- **Forgejo = depot canonique** : les 6 PR d'integration historiques vivent sur GitHub (toutes
|
||
mergees, la migration les a suivies) ; Forgejo n'a que la PR release dev->main. Les nouvelles
|
||
PR partent de Forgejo. Dual-push conserve (origin pousse GitHub + Forgejo).
|
||
- **CI/CD = Forgejo Actions** (act_runner auto-heberge), plus GitHub Actions. Drift doc corrige.
|
||
|
||
### Etat des lots du pivot SbD
|
||
|
||
- **A** (threat model + classification) : FAIT, commite dans `PROJECT_CONTEXT SS19` + `security-sequence.md`.
|
||
- **B** (docs PROJECT_CONTEXT SS7/SS11 + UML) : FAIT cette session (2 commits, pushes).
|
||
- **C** (infra/config secu) : A FAIRE - prochaine etape. `.env.example` (argon2id/lockout/seuils
|
||
throttle/retention RGPD), `php.ini` durci (expose_php off, cookies httponly/secure/samesite,
|
||
upload limite), **enregistrer act_runner Forgejo sur stark** (prerequis lot D), secret-scan.
|
||
- **D** (SDLC) : `SECURITY.md`, PR template checklist, **workflows `.forgejo/workflows/`**
|
||
(PHPUnit + PHPStan + secret-scan gitleaks) + auto-merge sur CI verte.
|
||
- **E** : regenerer drawio MCD/MLD pour 21 entites.
|
||
- **F** : clore -> PR `feat/p1-conception -> dev` (base = `dev` !).
|
||
- **G** : roter le token Forgejo expose ; decider push-mirror Forgejo->GitHub.
|
||
|
||
### Reprendre
|
||
|
||
```bash
|
||
cd /home/acadenice/corentin_wakdo
|
||
git branch --show-current # feat/p1-conception
|
||
git log --oneline -7 # 5 Merise SbD + 2 lot B
|
||
git fetch origin # realigne origin/dev (affichage 'ahead 1' cosmetique)
|
||
```
|
||
|
||
---
|
||
|
||
## Session 2026-06-12 (relecture security-by-design + modele stock en % + lot A threat model)
|
||
|
||
> Note : ce doc avait derive (fige a Session 7, 2026-05-21). Entre-temps : v0.2 prod-like
|
||
> 19 entites + migration Forgejo (2026-06-04, voir `docs/journal/2026-06-04--*.md`) puis
|
||
> demarrage du pivot security-by-design (2026-06-11). Le bloc ci-dessous repart de l'etat reel.
|
||
|
||
### Vue d'ensemble
|
||
|
||
Consolidation du pivot security-by-design sur `feat/p1-conception`. Trois temps :
|
||
|
||
1. **Relecture des 3 decisions securite** (RGPD, oversell, brute-force) : les 3 directions
|
||
validees. Le challenge a fait emerger une simplification (oversell) et un upgrade (stock %).
|
||
2. **Change-set applique aux 5 docs Merise** via 1 workflow (5 editeurs paralleles + 4 critiques
|
||
adversariaux), puis correctifs manuels des residus rates par les critiques.
|
||
3. **Lot A ecrit** via 1 workflow (2 auteurs + 2 critiques) : threat model + classification dans
|
||
`PROJECT_CONTEXT §19`, et `docs/uml/security-sequence.md`.
|
||
|
||
### Decisions actees cette session
|
||
|
||
- **Stock en vrais %** : `ingredient` porte `stock_capacity` (INT, CHECK > 0 = reference 100% +
|
||
garde anti div/0), `low_stock_pct` (def 10), `critical_stock_pct` (def 5) ; `stock_quantity`
|
||
signe (peut etre negatif). `stock_pct = ROUND(stock_quantity/stock_capacity*100)` calcule.
|
||
3 bandes : normal / alerte (le manager retire via `is_available` OU re-stocke) / auto-OOS
|
||
sous le critique.
|
||
- **Disponibilite produit CALCULEE** (RG-T21) : commandable ssi `is_available=1 AND chaque
|
||
ingredient non-retirable > critical`. Pas de cascade ni flag ; retrait manuel = override dur.
|
||
- **`login_throttle` = table** (entite 21) : throttle brute-force per-IP, en plus du compteur
|
||
per-compte sur `user`.
|
||
- **Drop `SELECT ... FOR UPDATE`** : decrement stock = `UPDATE ... stock = stock - :units`
|
||
atomique (plus de read-gate, plus de risque deadlock). `idempotency_key` conserve.
|
||
- **Drift MCD §5.1 corrige** : `product_ingredient.quantity` -> `quantity_normal`/`quantity_maxi`.
|
||
|
||
### Etat Git (post-session)
|
||
|
||
```
|
||
Branche : feat/p1-conception
|
||
5 commits POSES cette session (non pushes - le push partira avec la PR) :
|
||
fadf0bd DICT - SbD data layer, 21 entities
|
||
a1692b6 MCD - SbD entities + % stock model, drift fix
|
||
14348ba MLD - audit_log + login_throttle tables, % stock columns
|
||
0f57a44 MCT - SbD operations, PIN gating, computed availability
|
||
5c34f6b MLT - RG-T13-T21, atomic decrement, throttle, RGPD
|
||
|
||
Working tree UNCOMMITTED (tenu volontairement) :
|
||
docs/PROJECT_CONTEXT.md (§19 threat model + classification ECRIT ; tenu car lot B
|
||
va aussi toucher §7/§11)
|
||
docs/uml/security-sequence.md (NOUVEAU, lot A, fini, verifie)
|
||
docs/uml/{sequence-passer-commande,state-commande,use-cases}.md (drift-fix v0.2, pret,
|
||
a grouper avec security-sequence.md)
|
||
+ journal 2026-06-04 untracked ; hors-scope BYAN (.claude, Makefile, docker-compose, package*)
|
||
```
|
||
|
||
### A faire a la reprise (ordre)
|
||
|
||
- **B** : `PROJECT_CONTEXT §7/§11` (retirer « MVP », 21 entites, rechiffrer planning) ->
|
||
puis commit PROJECT_CONTEXT (§19 + §7/§11) + les 4 docs UML.
|
||
- **C** : infra/config secu (`.env.example` argon2/lockout/retention/seuils, `php.ini` durci,
|
||
secret-scan, ruling branch-protection).
|
||
- **D** : SDLC (`SECURITY.md`, checklist PR template, jobs CI Forgejo PHPStan/secret-scan).
|
||
- **E** : regenerer les drawio MCD/MLD pour 21 entites (les `.md` sont en Mermaid inline).
|
||
- **F** : clore -> PR `feat/p1-conception -> dev` (base = `dev` !), rafraichir ce doc.
|
||
- **G** : roter le token Forgejo expose ; decider push-mirror Forgejo->GitHub.
|
||
|
||
### Reprendre
|
||
|
||
```bash
|
||
cd /home/acadenice/corentin_wakdo
|
||
git branch --show-current # feat/p1-conception
|
||
git log --oneline -6 # voir les 5 commits SbD
|
||
git status --short # PROJECT_CONTEXT + UML uncommitted
|
||
```
|
||
|
||
---
|
||
|
||
## Session precedente : 2026-05-21 (Session 7 - P1 conception : 5 docs Merise/UML + machine a etats commande unifiee)
|
||
|
||
### Vue d'ensemble
|
||
|
||
Session centree sur la reprise de P1 conception. Trois resultats :
|
||
|
||
1. **Rapatriement P1 sur `feat/p1-conception`** : les fichiers P1 (mcd.md + diagrammes) flottaient dans le working tree de la branche demo `demo/p5-front-and-p3-admin`. Portes proprement sur `feat/p1-conception` (stash des fichiers BYAN hors-scope, switch, pop). Les 4 `.drawio` y etaient deja commites (`64f5a27`), identiques au working tree.
|
||
2. **5 docs P1 produits** via 2 agents (expert-merise-agile + architect), puis normalises : MCT, MLT, use-cases, state-commande, sequence-passer-commande.
|
||
3. **Machine a etats de commande unifiee** : resolution d'une contradiction qui preexistait entre `dictionary.md`, `PROJECT_CONTEXT.md` et le brief initial. Vocabulaire desormais coherent sur toute la doc.
|
||
|
||
### Etat Git actuel (post-Session 7)
|
||
|
||
```
|
||
Repo : /home/acadenice/corentin_wakdo/
|
||
Branche courante : feat/p1-conception (rien commite cette session)
|
||
|
||
Working tree P1 (untracked, a commiter apres validation drawio) :
|
||
docs/merise/mcd.md (MCD, refs encore vers SVG Mermaid - cf. pivot drawio non termine)
|
||
docs/merise/mct.md (NEW - 24 operations metier)
|
||
docs/merise/mlt.md (NEW - preconditions/regles/postconditions)
|
||
docs/uml/use-cases.md (NEW)
|
||
docs/uml/state-commande.md (NEW)
|
||
docs/uml/sequence-passer-commande.md (NEW)
|
||
docs/merise/_diagrams/*.mmd + *.svg (Mermaid leftover, a supprimer si on finit le pivot drawio)
|
||
|
||
Working tree modifie (tracked) :
|
||
docs/PROJECT_CONTEXT.md (ligne statut realignee sur machine canonique)
|
||
|
||
.drawio : commites sur feat/p1-conception (clean), en attente validation visuelle user sur le site drawio.
|
||
|
||
Hors-scope BYAN (persistants, jamais commites) :
|
||
.claude/CLAUDE.md, .claude/rules/byan-agents.md, Makefile, package.json, package-lock.json
|
||
```
|
||
|
||
### Decision majeure : machine a etats de commande (CANONIQUE)
|
||
|
||
Trois vocabulaires se contredisaient (ENUM dictionnaire avec paiement / PROJECT_CONTEXT sans paiement / noms FR introduits par erreur dans le brief Merise). Tranche par le user :
|
||
|
||
- **Deux phases** : le client compose (`pending_payment`) PUIS paie (`paid`), apres quoi la commande passe en preparation. Le paiement EXISTE dans le cycle.
|
||
- **Termes en anglais** (code-facing), valeurs ENUM du dictionnaire.
|
||
- **Machine retenue** : `pending_payment -> paid -> preparing -> ready -> delivered`
|
||
- **`cancelled` atteignable depuis tout etat non remis** (`pending_payment`, `paid`, `preparing`, `ready`) : annulable a tout moment tant que non livree (modification / annulation / remboursement client). `delivered` et `cancelled` finaux.
|
||
|
||
Applique partout : dictionary.md (deja correct), PROJECT_CONTEXT.md (corrige ligne 61), mct.md, mlt.md, state-commande.md, use-cases.md, sequence-passer-commande.md.
|
||
|
||
### Autres decisions actees Session 7
|
||
|
||
| Decision | Contexte |
|
||
|---|---|
|
||
| Outil diagramme MCD = drawio | User valide les 4 .drawio lui-meme sur le site (pas encore valides). Pivot Mermaid->drawio a finir cote pipeline + refs mcd.md |
|
||
| Pas de parcours employe dedie | Les employes sont couverts par le diagramme de cas d'utilisation (use-cases) + diagramme d'etats. Ockham, evite le doublon |
|
||
| Production parallele en respectant les dependances | On fait ce qui ne depend PAS du MCD (dependance nulle ou faible). On NE fait PAS ce qui en depend moyennement ou fortement (MLD, class-diagram) tant que les .drawio ne sont pas valides |
|
||
| MOT saute (rappel) | Coherent Session 4 (raccourci agile MCT -> MLT direct) |
|
||
|
||
### Decisions secondaires EN SUSPENS (remontees par l'agent Merise, a trancher avant MLD)
|
||
|
||
1. **`source` (canal : kiosk/comptoir/drive) vs `mode_consommation` (fiscal : sur_place/a_emporter/drive)** : deux dimensions distinctes. `source` est absent du dictionnaire et du MCD. A ajouter avant de generer le DDL.
|
||
2. **`user_id` sur `commande`** : aucune tracabilite de l'equipier qui saisit / prend en charge / livre. A amender dans le MCD si stats par equipier souhaitees.
|
||
|
||
(Points mineurs documentes dans mct.md section 14 et mlt.md section 13 : `service_day` non materialise, etc.)
|
||
|
||
### A faire lors de la reprise (ordre recommande)
|
||
|
||
1. **User valide les 4 `.drawio`** sur le site drawio (preview Markdown ne rend pas Mermaid sans extension ; les .drawio/.svg s'affichent en revanche).
|
||
2. **Trancher les 2 decisions secondaires** (`source` vs `mode_consommation`, `user_id` sur commande) - elles debloquent le MLD + class-diagram.
|
||
3. **Finir le pivot drawio** (si confirme) : cible Makefile `docs-render-drawio` (image `jgraph/drawio` dispo localement), regenerer les SVG depuis les .drawio, reecrire les refs dans mcd.md (actuellement vers SVG Mermaid), supprimer les `.mmd`/`.svg` Mermaid.
|
||
4. **Produire MLD + class-diagram** une fois le MCD valide et les decisions secondaires tranchees.
|
||
5. **Commiter le lot P1 conception** (option : 1 commit par doc) sur `feat/p1-conception`, puis PR vers `dev` (vigilance : base = `dev`, pas `main`).
|
||
|
||
### Commande exacte pour reprendre
|
||
|
||
```bash
|
||
cd /home/acadenice/corentin_wakdo
|
||
git status
|
||
git branch --show-current # attendu : feat/p1-conception
|
||
ls docs/merise/ # mcd.md, mct.md, mlt.md, dictionary.md
|
||
ls docs/uml/ # use-cases.md, state-commande.md, sequence-passer-commande.md
|
||
```
|
||
|
||
---
|
||
|
||
## Session precedente : 2026-05-09 (Session 6 - drawio + P5 front complet en remote control)
|
||
|
||
### Vue d'ensemble
|
||
|
||
Session ~3-4h en remote control mobile qui a couvert 2 gros chantiers et un long detour sur l'automation des PRs :
|
||
|
||
1. **Pivot Mermaid -> drawio sur le MCD** : 4 fichiers `.drawio` XML generes pour gain de controle layout (planarite du global non resoluble par mmdc)
|
||
2. **Front P5 complet anticipe** : 2 runs d'agent UX (Sally) ont produit 7 pages HTML kiosk + 7 modules JS vanilla + JSON fallback statique. Flux complet welcome -> confirmation, live sur le vhost.
|
||
3. **Setup automation PR via API** : detour sur fine-grained PATs (3 tentatives KO sur policy org AcadeNice "approval required"), resolu avec un classic PAT `ghp_` en attendant l'approbation admin lundi.
|
||
|
||
2 PR ouvertes sur GitHub :
|
||
- **#4** ready : front P5 complet (7 commits)
|
||
- **#5** draft : 4 .drawio sources, en attente cleanup et suite Merise/UML
|
||
|
||
### Etat Git actuel (post-Session 6)
|
||
|
||
```
|
||
Repo : /home/acadenice/corentin_wakdo/
|
||
Remote : git@github-wakdo:AcadeNice/wakdo_corentin.git
|
||
|
||
Branches :
|
||
main 00a3f82 (v0.1.0)
|
||
dev 68db2ee
|
||
feat/p1-conception 64f5a27 (PR #5 draft : 4 .drawio committed)
|
||
feat/p5-front-landing 6a7e772 (PR #4 ready : 7 commits P5 complet) <- HEAD post-session
|
||
feat/infra-docker b09c461 (mergee, conservee)
|
||
feat/p1-assets-import 24e733b (mergee, conservee)
|
||
feat/p1-stubs-and-dictionary d1a9876 (mergee, conservee)
|
||
|
||
Tags :
|
||
v0.1.0 00a3f82 Infrastructure foundation
|
||
|
||
Working tree out-of-scope (BYAN, persistent depuis sessions precedentes) :
|
||
.claude/CLAUDE.md, .claude/rules/byan-agents.md, Makefile
|
||
package.json, package-lock.json
|
||
docs/SESSION_RESUME.md (ce fichier)
|
||
|
||
Working tree P1 (uncommitted, voyage entre branches lors des switches) :
|
||
docs/merise/mcd.md
|
||
docs/merise/_diagrams/*.mmd (Mermaid leftover, a supprimer apres render drawio)
|
||
docs/merise/_diagrams/*.svg (Mermaid render, idem)
|
||
```
|
||
|
||
### PRs ouvertes
|
||
|
||
| # | Titre | Branche | Base | Statut |
|
||
|---|---|---|---|---|
|
||
| 4 | feat(front): P5 kiosk complete flow with vanilla JS and JSON fallback | `feat/p5-front-landing` | `dev` | Ready for review |
|
||
| 5 | docs(merise): MCD diagrams in drawio XML (4 files) | `feat/p1-conception` | `dev` | Draft |
|
||
|
||
### Decisions actees Session 6
|
||
|
||
| Decision | Contexte |
|
||
|---|---|
|
||
| Switch Mermaid -> drawio pour MCD | Planarite du global non resoluble par mmdc auto-layout, controle manuel requis |
|
||
| 4 .drawio separes (1 par diagramme) | Plus simple a editer et diff que multi-page |
|
||
| Front P5 anticipe pendant P1 | Data contract gele par brief ecole (JSON sources), front consomme JSON = consomme future API au mapping pres |
|
||
| Classic PAT (`ghp_`) au lieu de fine-grained AcadeNice | Org AcadeNice policy "approval required", admin pas dispo le weekend |
|
||
| Branche front renommee `p1` -> `p5` | Front borne = livrable P5 per plan SDLC (independant de la phase de realisation) |
|
||
| Auto-validation 7 checks par l'agent | Remote control mobile = pas de validation visuelle facile, agent doit s'auto-verifier |
|
||
| Mode JSON fallback statique dans `borne/data/` | Apache bind-mount ne sert pas `_sources/`, copie statique = solution simple. Swap point unique dans `data.js` pour P4 |
|
||
| TVA 10% (taux restauration FR 2024 simplifie) | TODO P3 : valider avec comptable les variations sur place vs a emporter, alcool, etc. |
|
||
| `gh` dans Docker = mauvaise idee | Stack Docker = runtime app, pas dev tooling. `gh` ou curl appartient a l'host. |
|
||
| Token GitHub stocke dans `.env` (gitignore) | Standard, pas de leak en commits, lu via `source .env` au moment du curl |
|
||
|
||
### Ce qui a ete fait chronologiquement
|
||
|
||
**Bloc 1 - Pivot Mermaid -> drawio + 4 sources XML**
|
||
|
||
1. Decision drawio uniquement, 4 fichiers separes, manual layout
|
||
2. Generation des 4 fichiers `.drawio` XML avec entites + cardinalites Merise `(min,max)` a partir des sources Mermaid
|
||
3. Commit `64f5a27` : `docs(merise): add drawio XML sources for MCD diagrams`
|
||
|
||
**Bloc 2 - 1er agent UX (welcome + categories scaffold)**
|
||
|
||
4. Spawn agent UX-designer (Sally) en background avec scope 2 ecrans (welcome + categories), flag `isolation: "worktree"`
|
||
5. L'agent a base sa branche sur `feat/p1-conception` au lieu de `dev` (le worktree n'a pas vraiment isole comme attendu)
|
||
6. Rebase `feat/p1-front-landing --onto dev 64f5a27` pour droper le commit drawio comme parent
|
||
7. Renommage `feat/p1-front-landing` -> `feat/p5-front-landing` (front borne = livrable P5)
|
||
|
||
**Bloc 3 - Setup automation PR (long detour sur les PATs)**
|
||
|
||
8. Push des 2 branches (SSH agent socket `/tmp/ssh-Evc7jT0fk2rs/agent.2611024`)
|
||
9. Tentative `gh` CLI dans Docker -> mauvaise idee, abandonne
|
||
10. Tentative fine-grained PAT #1 : Resource owner = Imugiii -> 404 sur wakdo_corentin (org repo invisible pour PAT a owner perso)
|
||
11. Fine-grained PAT #2 : meme probleme (Resource owner encore = Imugiii)
|
||
12. Fine-grained PAT #3 avec Resource owner = AcadeNice -> token en "Pending review" (org policy "approval required")
|
||
13. Fallback classic PAT (`ghp_`) -> fonctionne des generation, scope `repo`, admin sur le repo
|
||
14. PR #4 (front ready) + PR #5 (drawio draft) creees via `POST /repos/AcadeNice/wakdo_corentin/pulls`
|
||
|
||
**Bloc 4 - 2e agent UX (P5 complet)**
|
||
|
||
15. Spawn agent UX en background sur `feat/p5-front-landing` avec scope etendu : 5 nouvelles pages + JS state + JSON fallback
|
||
16. Auto-validation 7 checks dans le brief (assets exist, links resolve, JSON valid, HTML closed, JS syntax, http server e2e, JSON fetch)
|
||
17. Livrable : 5 pages HTML, 7 modules JS, 2 JSON normalises copies dans `borne/data/`, CSS etendu de 438 -> 1257 lignes
|
||
18. 6 commits thematiques (`6f5daca` -> `6a7e772`), 7/7 auto-checks PASS
|
||
19. Push, mise a jour PR #4 (titre + body) via `PATCH /repos/.../pulls/4`
|
||
20. Test live kiosk : les endpoints repondent 200 (welcome, categories, products, product, cart, payment, confirmation, JSON, CSS, JS, images)
|
||
|
||
### Commande exacte pour reprendre
|
||
|
||
```bash
|
||
cd /home/acadenice/corentin_wakdo
|
||
git status
|
||
git branch --show-current
|
||
# Si HEAD = feat/p5-front-landing : tu peux tester le front sur https://corentin-wakdo.stark.a3n.fr/
|
||
# Pour reprendre P1 :
|
||
git checkout feat/p1-conception
|
||
```
|
||
|
||
### A faire lors de la reprise (ordre recommande)
|
||
|
||
1. **Review visuelle PR #4** : tester le flux kiosk complet sur https://corentin-wakdo.stark.a3n.fr/, valider, merger dans `dev` (via web ou via API)
|
||
2. **Drawio render automatique** : ajouter cible Makefile `make docs-render-drawio` qui utilise le container `rlespinasse/drawio-export` pour generer les SVG depuis les `.drawio` XML. Evite l'export manuel sur drawio web (galere sur mobile).
|
||
3. **Continuer P1 conception** sur `feat/p1-conception` :
|
||
- `docs/merise/mct.md`
|
||
- `docs/merise/mlt.md`
|
||
- `docs/merise/mld.md`
|
||
- `docs/uml/class-diagram.md`
|
||
- `docs/uml/use-cases.md`
|
||
- `docs/uml/state-commande.md`
|
||
- `docs/uml/sequence-passer-commande.md`
|
||
4. **Commit final mcd.md** : une fois les SVG drawio generes, commit `mcd.md` + suppression des `.mmd`/anciens `.svg` Mermaid + Makefile mis a jour (drop `docs-render` mmdc, garder uniquement `docs-render-drawio`)
|
||
5. **Passage PR #5 draft -> ready** (via PATCH API) quand tout le P1 conception est dedans
|
||
6. **Hygiene secu PATs** : revoquer dans GitHub Settings :
|
||
- 3 fine-grained `github_pat_...` (suffixes BE4y, UiZc, ljeC)
|
||
- classic `ghp_Rr5EkM4...` (a rotater quand fine-grained AcadeNice approuve par admin lundi)
|
||
|
||
### Note technique - isolation worktree
|
||
|
||
Le flag `isolation: "worktree"` sur l'Agent tool n'a pas cree de vrai worktree isole - les agents ont travaille directement sur le main repo (`git worktree list` ne montre qu'une entree). Pas grave en pratique mais a savoir pour les prochains spawns : instruire explicitement l'agent de ne pas switch de branche dans le main repo, ou de bosser en branche dediee pre-checked-out.
|
||
|
||
---
|
||
|
||
## Session precedente : 2026-04-30 soir (Session 5 - notes perso + demarrage P1 conception + setup pipeline diagrammes)
|
||
|
||
### Vue d'ensemble
|
||
|
||
Session moyenne (~3h) qui a couvert :
|
||
|
||
1. **Cloture P1 dictionnaire** : commit + push + PR #3 mergee dans `dev`
|
||
2. **4 notes perso ecrites** (gitignore) : apache-fastcgi-pitfalls, docker-network-pools-rfc1918, enum-vs-table-reference, merise-yagni-quantite + index README mis a jour
|
||
3. **Demarrage P1 conception** sur nouvelle branche `feat/p1-conception` (renommee depuis `feat/p1-merise-conception` pour inclure UML)
|
||
4. **MCD redige** (`docs/merise/mcd.md`) avec 3 sous-domaines (Catalogue/Commande/RBAC) en Mermaid + tableau recap cardinalites Merise
|
||
5. **Pipeline mmdc setup** : .mmd sources + SVG generes + `make docs-render` target
|
||
6. **Blocage layout MCD global** : 10 entites + 10 associations = probleme planarite intrinseque, decision laissee en suspens
|
||
|
||
Aucun commit fait sur la branche `feat/p1-conception` — tout reste dans le working tree pour reprise propre.
|
||
|
||
### Etat Git actuel (post-Session 5)
|
||
|
||
```
|
||
Repo : /home/acadenice/corentin_wakdo/
|
||
Remote : git@github-wakdo:AcadeNice/wakdo_corentin.git
|
||
|
||
Branches :
|
||
main 00a3f82 (v0.1.0)
|
||
dev 68db2ee (= main + PR#1 + PR#2 + PR#3 mergees)
|
||
feat/infra-docker b09c461 (mergee, conservee)
|
||
feat/p1-assets-import 24e733b (mergee, conservee)
|
||
feat/p1-stubs-and-dictionary d1a9876 (mergee via PR#3, conservee)
|
||
feat/p1-conception 68db2ee (NOUVELLE, ZERO COMMIT, working tree only)
|
||
|
||
Tags :
|
||
v0.1.0 00a3f82 Infrastructure foundation
|
||
|
||
Working tree sur feat/p1-conception (a commit a la prochaine session) :
|
||
docs/merise/mcd.md (NEW - 411 lignes)
|
||
docs/merise/_diagrams/mcd-global.mmd (NEW)
|
||
docs/merise/_diagrams/mcd-global.svg (NEW)
|
||
docs/merise/_diagrams/mcd-catalogue.mmd (NEW)
|
||
docs/merise/_diagrams/mcd-catalogue.svg (NEW)
|
||
docs/merise/_diagrams/mcd-commande.mmd (NEW)
|
||
docs/merise/_diagrams/mcd-commande.svg (NEW)
|
||
docs/merise/_diagrams/mcd-rbac.mmd (NEW)
|
||
docs/merise/_diagrams/mcd-rbac.svg (NEW)
|
||
Makefile (modified - target docs-render ajoute)
|
||
docs/notes/README.md (modified, gitignore - 7 entries ajoutees)
|
||
docs/notes/apache-fastcgi-pitfalls.md (NEW, gitignore)
|
||
docs/notes/docker-network-pools-rfc1918.md (NEW, gitignore)
|
||
docs/notes/enum-vs-table-reference.md (NEW, gitignore)
|
||
docs/notes/merise-yagni-quantite.md (NEW, gitignore)
|
||
|
||
Working tree out-of-scope (BYAN, deja modifies en sessions precedentes) :
|
||
.claude/CLAUDE.md
|
||
.claude/rules/byan-agents.md
|
||
package.json, package-lock.json
|
||
docs/SESSION_RESUME.md
|
||
```
|
||
|
||
### Decisions actees Session 5
|
||
|
||
| Decision | Contexte |
|
||
|---|---|
|
||
| Branche renommee `feat/p1-conception` (au lieu de `feat/p1-merise-conception`) | Pour inclure UML dans le scope de la PR |
|
||
| UML ajoute au scope P1 conception | RNCP 37805 attend Merise + UML, pas que Merise |
|
||
| Granularite commits PR : option α (1 commit par doc) | Coherent avec l'historique, squashable en fin de PR si besoin |
|
||
| Pipeline diagrammes : option B (mmdc local + SVG embed) | Rendu portable Cursor/GitHub/PDF/Notion, regenerable via `make docs-render` |
|
||
| Ecriture des 4 notes perso AVANT le travail Merise | Sujets frais dans le contexte (Session 4 + dictionnaire) |
|
||
| Auteur des notes = "BYAN" | Coherent avec section 17 PROJECT_CONTEXT (transparence methodologie) |
|
||
| 4 hedgings appliques (`toujours`/`forcement` -> `tend a`/`implique`) | Hook PreToolUse fact-check intransigeant |
|
||
|
||
### Decision EN SUSPENS (a trancher en premier la prochaine session)
|
||
|
||
**Layout du diagramme global MCD** : avec 10 entites et 10 associations (dont
|
||
2 polymorphiques sur `LIGNE_COMMANDE` -> PRODUIT et MENU), il y a un probleme
|
||
de planarite : impossible de placer toutes les entites sans croiser au moins
|
||
2 lignes. Mermaid auto-layout galere, Excalidraw manuel n'aide pas vraiment.
|
||
|
||
3 options en attente d'arbitrage :
|
||
|
||
- **A. Drop le global** — supprimer section 3 du MCD, garder section 6
|
||
(tableau recap des cardinalites) + section 4 (3 sous-domaines Mermaid
|
||
propres). Coherent avec l'approche Merise (decomposer si > 5 entites).
|
||
Defendable au jury : "j'ai decompose, tableau recap = vue integree".
|
||
- **B. Excalidraw manuel** — refaire le global a la main dans Excalidraw,
|
||
export `.excalidraw.svg` (avec scene embedee), embed dans le MCD. Coute
|
||
20-30 min de layout manuel, perd la regen automatique.
|
||
- **C. Garder Mermaid en l'etat** — assumer que le layout est croise mais
|
||
jouer le compromis "decomposition prime sur visuel global".
|
||
|
||
Le user a dit "le choix n'est pas encore fait" (Session 5 fin de soiree,
|
||
fatigue sur le sujet). A reprendre tete reposee.
|
||
|
||
### Ce qui a ete fait chronologiquement
|
||
|
||
**Bloc 1 - Cloture dictionnaire (commit + PR)**
|
||
|
||
1. Verification etat initial : branche `feat/p1-stubs-and-dictionary` avec
|
||
`b8f7d35` (stubs+fixes) commit, `docs/merise/dictionary.md` uncommitted
|
||
2. Commit `d1a9876` : `docs(merise): data dictionary v0.1 - 10 entities + Mermaid ER diagram + 7 modeling notes`
|
||
3. Push branche, PR #3 ouverte manuellement (gh CLI absent), mergee sur `dev`
|
||
4. `git fetch + checkout dev + merge --ff-only origin/dev` : sync OK sur `68db2ee`
|
||
|
||
**Bloc 2 - 4 notes perso (gitignore)**
|
||
|
||
5. Bascule sur `Read` au lieu de `grep`/`sed` apres blocage du hook
|
||
`tool-failure-guard` sur "internal error" string presente dans
|
||
`vhost.conf` (pattern legitime du commentaire, faux positif Bash output)
|
||
6. `apache-fastcgi-pitfalls.md` (405 lignes) - 3 pieges Session 4
|
||
(DirectoryIndex, allowed_clients, R=200) + Q&A jury
|
||
7. `docker-network-pools-rfc1918.md` (376 lignes) - saturation pools Docker
|
||
sur stark, choix `192.168.148.0/24`, RFC 1918, Q&A jury
|
||
8. `enum-vs-table-reference.md` (381 lignes) - matrice de decision ENUM vs
|
||
table, application aux 4 ENUMs Wakdo, Q&A jury
|
||
9. `merise-yagni-quantite.md` (337 lignes) - YAGNI applique a `menu_produit`,
|
||
audit source ecole 13 menus mono-portion, Q&A jury
|
||
10. `docs/notes/README.md` index mis a jour : 7 nouvelles entrees (3 Session
|
||
4 deja redigees + 4 nouvelles)
|
||
|
||
**Bloc 3 - Setup branche conception + cadrage**
|
||
|
||
11. Branche `feat/p1-merise-conception` creee depuis `dev`, puis renommee en
|
||
`feat/p1-conception` apres discussion sur l'ajout UML au scope
|
||
12. Decision : 8 documents prevus pour la PR :
|
||
- Merise : MCD, MCT, MLT, MLD (4 docs dans `docs/merise/`)
|
||
- UML : classes, use cases, etats, sequence (4 docs dans `docs/uml/`)
|
||
13. `docs/uml/` cree
|
||
|
||
**Bloc 4 - MCD redige + setup pipeline diagrammes**
|
||
|
||
14. Premier draft MCD avec 4 diagrammes ASCII art (global + 3 sous-domaines)
|
||
+ tableau recap cardinalites Merise `(0,N)/(1,1)`
|
||
15. User trouve l'ASCII moche -> bascule sur Mermaid `erDiagram` inline
|
||
16. User ne voit pas le rendu Mermaid dans Cursor (pas d'extension installee)
|
||
-> bascule sur SVG via mmdc
|
||
17. Setup `docs/merise/_diagrams/` : 4 fichiers `.mmd` extraits + 4 SVG
|
||
generes via `npx mmdc`
|
||
18. MCD edite : 4 blocs Mermaid remplaces par `<img src="_diagrams/*.svg">`
|
||
19. Makefile : target `docs-render` ajoute, scanne tous les
|
||
`docs/**/_diagrams/*.mmd` du projet, regen SVG (testee, OK 4/4)
|
||
20. User constate que le global a des lignes croisees, tente Excalidraw,
|
||
n'arrive pas a un layout logique -> decision laissee en suspens
|
||
|
||
### Commande exacte pour reprendre
|
||
|
||
```bash
|
||
cd /home/acadenice/corentin_wakdo
|
||
git status # confirmer working tree intact
|
||
git branch --show-current # doit etre feat/p1-conception
|
||
git log --oneline dev..HEAD # doit etre vide (zero commit sur la branche)
|
||
ls docs/merise/ # mcd.md + _diagrams/ presents
|
||
ls docs/notes/ # 4 notes Session 5 + README maj
|
||
```
|
||
|
||
### A faire lors de la reprise (ordre recommande)
|
||
|
||
1. **Trancher le layout MCD global** (option A / B / C ci-dessus). Si A,
|
||
editer mcd.md pour supprimer section 3, decrementer les numeros, et
|
||
supprimer `_diagrams/mcd-global.{mmd,svg}`. Si B, faire le travail
|
||
Excalidraw manuel. Si C, ne rien faire et continuer.
|
||
|
||
2. **Commit le MCD** (option α : 1 commit par doc) :
|
||
```bash
|
||
git add docs/merise/mcd.md docs/merise/_diagrams/ Makefile
|
||
git commit -m "docs(merise): MCD v0.1 + pipeline mmdc -> SVG via make docs-render"
|
||
```
|
||
|
||
3. **Continuer P1 conception**, dans l'ordre :
|
||
- `docs/merise/mct.md` - operations metier + acteurs + flux
|
||
- `docs/merise/mlt.md` - workflow logique (preconditions / regles /
|
||
postconditions)
|
||
- `docs/merise/mld.md` - schema relationnel formel
|
||
- `docs/uml/class-diagram.md` - vue OOP (prepare PHP P2)
|
||
- `docs/uml/use-cases.md` - acteurs + goals (kiosk client, manager, ...)
|
||
- `docs/uml/state-commande.md` - machine a etats `commande.statut`
|
||
- `docs/uml/sequence-passer-commande.md` - flux passer commande
|
||
|
||
4. **Push + PR vers `dev`** quand les 7 docs restants sont commit.
|
||
Vigilance : verifier `base = dev` (pas `main` !).
|
||
|
||
5. **Apres merge** : continuer P1 implementation (DDL + seed + fallback)
|
||
sur une branche `feat/p1-implementation` separee.
|
||
|
||
---
|
||
|
||
## Session precedente : 2026-04-30 jour (Session 4 etendue - smoke test infra + import assets + P1 demarre)
|
||
|
||
### Vue d'ensemble
|
||
|
||
Session tres longue (~6h cumulees) qui a couvert 3 grandes phases en une seule journee :
|
||
|
||
1. **Smoke test infra Docker** sur le serveur stark : `make init` valide bout en bout, 4 services healthy, certs Let's Encrypt provisionnes
|
||
2. **Import assets ecole** : 71 images normalisees + 2 JSON sources + maquette Figma PDF
|
||
3. **Demarrage P1 Merise** : stubs unblock-403 + dictionnaire de donnees v0.1 (10 entites)
|
||
|
||
3 PR ont ete fusionnees (1 incident main->dev recupere) et 1 PR reste ouverte (la branche
|
||
de la 3e phase n'est pas encore push).
|
||
|
||
### Etat Git actuel (post-Session 4)
|
||
|
||
```
|
||
Repo : /home/acadenice/corentin_wakdo/
|
||
Remote : git@github-wakdo:AcadeNice/wakdo_corentin.git
|
||
|
||
Branches :
|
||
main 00a3f82 (v0.1.0 - infra foundation)
|
||
dev 84d2559 (= main + PR#2 assets)
|
||
feat/infra-docker b09c461 (mergee dans main via PR#1, conservee)
|
||
feat/p1-assets-import 24e733b (mergee dans dev via PR#2, conservee)
|
||
feat/p1-stubs-and-dictionary b8f7d35 (LOCAL UNIQUEMENT - NON PUSHEE)
|
||
+ dictionnaire UNCOMMITTED dans le working tree
|
||
|
||
Tags :
|
||
v0.1.0 00a3f82 Infrastructure foundation (annotated, pushe)
|
||
|
||
Working tree out-of-scope (volontairement non commit) :
|
||
.claude/CLAUDE.md, .claude/rules/* (modifies hors-projet, BYAN)
|
||
package.json, package-lock.json (BYAN)
|
||
docs/SESSION_RESUME.md (ce fichier - local perso)
|
||
```
|
||
|
||
### Vue chronologique des PR
|
||
|
||
```
|
||
00a3f82 (main, dev, v0.1.0) Merge PR #1 from feat/infra-docker
|
||
- INCIDENT : PR ouverte par defaut sur 'main' au lieu de 'dev'
|
||
- REMEDIATION : git checkout dev && git merge --ff-only origin/main && git push origin dev
|
||
- LECON : verifier le selecteur 'base branch' sur GitHub avant 'Create pull request'
|
||
- 9 commits infra : compose, dockerfiles, smoke test fixes, FQDN switch, journal session 4
|
||
|
||
84d2559 (dev) Merge PR #2 from feat/p1-assets-import
|
||
- PR sur la bonne base 'dev' cette fois
|
||
- 1 commit : import des 2 JSON sources + 71 images normalisees + maquette PDF
|
||
```
|
||
|
||
### Ce qui a ete fait (chronologique session)
|
||
|
||
**Phase 1 - smoke test infra (avant pause)**
|
||
|
||
1. Conflit `.env` BYAN/Wakdo traite par fusion en 1 fichier (gitignore)
|
||
2. Switch FQDN `acadenice.fr` -> `stark.a3n.fr` (zone wildcard existante, evite la
|
||
provisioning DNS prerequise par le challenge HTTP-01 de Traefik)
|
||
3. Smoke `make init` casse 3 fois et corrige :
|
||
- Subnet explicite `192.168.148.0/24` (pools Docker satures)
|
||
- `init: true` sur cron (dcron PID 1 setpgid)
|
||
- Healthz statique dans `/usr/local/apache2/htdocs/` (RewriteRule R=200 declenchait
|
||
ErrorDocument template)
|
||
4. Validation HTTPS externe : 4 services healthy, certs OK, `/healthz` isole
|
||
5. Journal session ecrit (`docs/journal/2026-04-30--smoke-test-infra.md`)
|
||
6. PR #1 -> incident main au lieu de dev -> remediation FF dev=main
|
||
7. Tag `v0.1.0` annote sur le merge commit
|
||
8. Memoire `feedback_no_absolutes.md` enregistree (hook fact-check sensible)
|
||
|
||
**Phase 2 - import assets ecole**
|
||
|
||
9. Drop zone `docs/_inbox/` recue (9 Mo, 71 images + 2 JSON + 1 PDF + 1 readme)
|
||
10. Diagnostic : naming "wacdo" vs notre "Wakdo", casse incoherente, 7 typos dans JSON
|
||
11. Rangement final :
|
||
- `docs/merise/_sources/` (2 JSON + source-school.md provenance)
|
||
- `docs/design/` (maquette PDF + README pointant Figma)
|
||
- `src/public/borne/assets/images/` (71 images normalisees kebab-case lowercase)
|
||
12. Workaround `chown` via container ephemere (src/ etait owned root par Docker bind-mount)
|
||
13. PR #2 -> dev (workflow correct cette fois)
|
||
|
||
**Phase 3 - demarrage P1 Merise**
|
||
|
||
14. Decisions cadrage P1 actees :
|
||
- MOT skippe (raccourci agile MCT -> MLT direct)
|
||
- Composition flexible (`menu_produit` avec `role` et `position`)
|
||
- Pas de `quantite` sur menu_produit (YAGNI - 13 menus mono-portion)
|
||
- 9 entites + 1 jointure RBAC : Categorie, Produit, Menu, MenuProduit, Commande,
|
||
LigneCommande, User, Role, Permission, RolePermission
|
||
- Pas de stock numerique (juste `est_disponible` boolean)
|
||
- Pas de stats agregees (live queries)
|
||
- Pas d'allergenes/nutrition pour MVP
|
||
15. Stubs minimaux pour debloquer le 403 :
|
||
- `src/public/borne/index.html` (HTML statique avec logo, vhost kiosk)
|
||
- `src/public/admin/index.php` (PHP qui prouve la chaine FastCGI E2E)
|
||
16. 2 bugs infra exposes par les stubs et fixes :
|
||
- Apache `DirectoryIndex` ne contenait pas `index.php` (admin renvoyait 403)
|
||
- PHP-FPM `listen.allowed_clients = any` rejete par PHP 8.3 (toutes les connexions
|
||
Apache->PHP-FPM rejetees, FastCGI cassait silencieusement)
|
||
17. Validation HTTPS externe : kiosk -> 200 HTML, admin -> 200 PHP rendu (PHP_VERSION
|
||
et timestamp dynamique substitues)
|
||
18. Commit `b8f7d35` : `feat(stubs): unblock 403 with kiosk and admin index pages, plus FastCGI fixes`
|
||
19. Dictionnaire de donnees v0.1 redige (`docs/merise/dictionary.md`) :
|
||
- ~340 lignes, 10 entites detaillees
|
||
- Diagramme entites-relations en Mermaid (rendu GitHub natif)
|
||
- 7 notes de modelisation (FLOAT vs cents, ENUM vs table, STI, polymorphisme,
|
||
audit fields, RFC 5321 emails, etc.)
|
||
- Cross-validation avec `PROJECT_CONTEXT.md` et source ecole
|
||
20. 3 notes techniques perso (`docs/notes/`, gitignore) :
|
||
- `rbac-roles-permissions.md` : pattern RBAC dynamique vs statique, UI matrice, Q&A jury
|
||
- `monetary-int-cents.md` : INT centimes + TVA pour mille, Goldberg ACM 1991, Stripe
|
||
convention, 5 pieges
|
||
- `polymorphic-fk-snapshots.md` : 2 colonnes nullables + discriminator + snapshots,
|
||
Karwin SQL Antipatterns, integrite historique commandes
|
||
21. Memoire `feedback_notes_author.md` mise a jour : auteur des notes = "BYAN" (pas un
|
||
nom de LLM specifique), coherent avec la transparence projet section 17 PC
|
||
|
||
---
|
||
|
||
## En cours (a reprendre)
|
||
|
||
**Branche locale `feat/p1-stubs-and-dictionary` avec 1 commit fait + dictionnaire UNCOMMITTED.**
|
||
|
||
### Commande exacte pour reprendre
|
||
|
||
```bash
|
||
cd /home/acadenice/corentin_wakdo
|
||
git status # confirmer ?? docs/merise/dictionary.md
|
||
git branch --show-current # doit etre feat/p1-stubs-and-dictionary
|
||
git log --oneline dev..HEAD # voir b8f7d35 (stubs+fixes)
|
||
```
|
||
|
||
### A faire lors de la reprise
|
||
|
||
1. **Commit le dictionnaire** :
|
||
```bash
|
||
git add docs/merise/dictionary.md
|
||
git commit -m "docs(merise): data dictionary v0.1 - 10 entities + Mermaid ER diagram + 7 modeling notes
|
||
|
||
Bottom-up derivation from school JSON sources + PROJECT_CONTEXT business rules.
|
||
Covers : Categorie, Produit, Menu, MenuProduit, Commande, LigneCommande,
|
||
User, Role, Permission, RolePermission. Decisions documented :
|
||
prices in INT cents, VAT in per-mille, polymorphic FK with snapshots
|
||
on ligne_commande, dynamic roles vs static permissions for RBAC."
|
||
```
|
||
|
||
2. **Push + PR** :
|
||
```bash
|
||
SSH_AUTH_SOCK=/tmp/ssh-Evc7jT0fk2rs/agent.2611024 git push -u origin feat/p1-stubs-and-dictionary
|
||
```
|
||
Puis ouvrir PR via :
|
||
`https://github.com/AcadeNice/wakdo_corentin/compare/dev...feat/p1-stubs-and-dictionary?expand=1`
|
||
**VIGILANCE** : verifier base = `dev` (pas `main` !) avant de cliquer Create.
|
||
|
||
3. **Continuer P1** sur une nouvelle branche `feat/p1-merise-models` (apres merge de la
|
||
precedente) ou sur la meme branche etendue. Suite des etapes :
|
||
- **MCD** : `docs/merise/mcd.md` avec un diagramme Mermaid plus formel (entites +
|
||
associations + cardinalites min/max), distinct du diagramme preview du dictionnaire
|
||
- **MCT** : `docs/merise/mct.md` - les operations metier (valider commande, encaisser
|
||
paiement, marquer pret, ...)
|
||
- **MLT** : `docs/merise/mlt.md` - workflow logique de chaque traitement (preconditions,
|
||
regles, postconditions, sorties)
|
||
- **MLD** : `docs/merise/mld.md` - schema relationnel formel
|
||
- **DDL** : `db/migrations/0001_init_schema.sql` - SQL CREATE TABLE concret
|
||
- **Seed** : `db/seeds/0001_demo_data.sql` - INSERT des 9 categories + 53 produits +
|
||
13 menus a partir des JSON sources, avec normalisation des prix en centimes
|
||
- **Export fallback JSON** : `scripts/export-fallback.{sh|php}` qui genere
|
||
`src/public/borne/data/*.json` depuis le seed (pour mode "Bloc 1 isole")
|
||
|
||
4. **Notes perso restantes a rediger** (basse priorite, peut s'etaler sur plusieurs sessions) :
|
||
- `enum-vs-table-reference.md` : quand utiliser ENUM vs table referentielle
|
||
- `docker-network-pools-rfc1918.md` : pool saturation Docker, choix subnet explicite
|
||
- `apache-fastcgi-pitfalls.md` : les 3 bugs infra de cette session (DirectoryIndex,
|
||
listen.allowed_clients, RewriteRule R=200)
|
||
- `merise-yagni-quantite.md` : application concrete de YAGNI sur menu_produit
|
||
|
||
5. **Optionnels post-merge** (peuvent aller sur une branche `feat/infra-polish` separee
|
||
apres P1) :
|
||
- Investiguer redirect HTTP->HTTPS qui retourne 404 (interaction avec middleware
|
||
global du Traefik d'hote)
|
||
- Unifier le style init Docker (wakdo-app a tini explicite, wakdo-cron a `init: true` -
|
||
incoherence stylistique a accepter ou unifier)
|
||
|
||
---
|
||
|
||
## Workflow git en vigueur
|
||
|
||
- **Convention** : `feat/* -> dev` (squash merge), `dev -> main` (avec tag `vX.Y.Z` annote)
|
||
- **Vigilance PR** : verifier explicitement `base branch = dev` (le defaut GitHub est `main`)
|
||
- **Branches mergees** : conservees comme trace historique
|
||
- **Procedure d'archive** si une branche est abandonnee non-mergee :
|
||
```bash
|
||
git tag -a archive/feat-xxx <branch-tip-sha> -m "abandoned: <reason>"
|
||
git push origin archive/feat-xxx
|
||
git push origin --delete feat-xxx
|
||
git branch -D feat-xxx
|
||
```
|
||
- **Tags previsionnels** : v0.1.0 (infra), v0.2.0 (P2 stubs+auth+CRUD basic), v0.3.0 (CRUD
|
||
admin complet), ..., v1.0.0 (livrable jury)
|
||
|
||
---
|
||
|
||
## Decisions structurelles actees Session 4
|
||
|
||
| Decision | Pourquoi |
|
||
|---|---|
|
||
| Fusion `.env` BYAN+Wakdo | Outil tiers lit `.env` du cwd, separation `.env.wakdo` plus risquee |
|
||
| FQDN sur `*.stark.a3n.fr` | Wildcard DNS existant, evite provisioning prerequis HTTP-01 |
|
||
| Subnet explicite `192.168.148.0/24` (RFC 1918) | Pools Docker satures sur hote partage |
|
||
| `init: true` sur cron | dcron en PID 1 sans init reaper boucle sur setpgid Operation not permitted |
|
||
| Healthz statique htdocs | RewriteRule R=200 declenche template ErrorDocument |
|
||
| `APP_ENV=dev` + `APP_DEBUG=true` | Phase de construction, flip vers prod avant demo jury |
|
||
| Naming "wacdo" (source) vs "Wakdo" (projet) | wacdo preserve dans `_sources/` pour tracabilite ecole |
|
||
| Casse images normalisee kebab-case lowercase | Anti-piege case-sensitive Linux dans Docker |
|
||
| MOT (modele organisationnel des traitements) skippe | Raccourci agile MCT -> MLT direct |
|
||
| Composition flexible `menu_produit` (role+position) | Defendable evolution future sans refacto |
|
||
| Pas de `quantite` sur `menu_produit` | YAGNI - 13 menus mono-portion |
|
||
| Prix en INT centimes + TVA en pour mille | Anti-FLOAT IEEE 754 (Goldberg ACM 1991) |
|
||
| Snapshots libelle+prix sur `ligne_commande` | Integrite historique audit |
|
||
| Polymorphisme `ligne_commande` -> `produit` OR `menu` | 2 cols nullable + discriminator + 2 FKs reelles |
|
||
| RBAC : roles+role-permission dynamiques, permissions statiques | Permissions liees au code (declarees en migration) |
|
||
| Pas de stock numerique en MVP | Juste `est_disponible` boolean |
|
||
| Pas de stats agregees | Live queries SUM/GROUP BY suffisent |
|
||
| Pas d'allergenes/nutrition | Hors source ecole, hors scope MVP |
|
||
| ENUM pour valeurs metier stables | mode_consommation, statut, role -> 3-7 valeurs, ALTER si extension |
|
||
| Auteur notes perso = "BYAN" | Coherent avec section 17 PC (transparence methodologie) |
|
||
|
||
---
|
||
|
||
## Prochaines etapes (apres merge `feat/p1-stubs-and-dictionary` -> `dev`)
|
||
|
||
```
|
||
P1 Conception Merise (semaines 2-3) - EN COURS
|
||
1. Dictionnaire de donnees v0.1 ECRIT (a commit)
|
||
2. MCD a faire
|
||
3. MCT a faire
|
||
4. (MOT skippe)
|
||
5. MLD a faire
|
||
6. MLT a faire
|
||
7. DDL a faire
|
||
8. Seed data a faire
|
||
9. JSON fallback a faire
|
||
|
||
P2 Back squelette (semaines 4-6)
|
||
- Core (Router, Autoloader, DB)
|
||
- Auth (sessions PHP fichier + argon2id)
|
||
- RBAC (Authorization service)
|
||
- Front controller `index.php`
|
||
|
||
P3 CRUD admin (semaines 7-10)
|
||
- CRUD produits, menus, categories
|
||
- UI roles + assignment matrice permissions
|
||
- CRUD users
|
||
|
||
P4 API REST (semaines 11-12)
|
||
- Endpoints /api/categories, /api/menus, /api/produits, /api/orders
|
||
- CORS + tests
|
||
|
||
P5 Front borne (semaines 13-16)
|
||
- Integration maquette + Ajax + a11y RGAA
|
||
- Mode JSON-seuls (fallback) + mode API-connecte
|
||
|
||
P6 Tests + finition (semaines 17-18)
|
||
|
||
P7 DevOps final (semaine 19) - GitHub Actions, crons, docs
|
||
|
||
P8 Prep soutenance (semaine 20)
|
||
```
|
||
|
||
---
|
||
|
||
## Fichiers cles a consulter a la reprise
|
||
|
||
| Fichier | Contenu |
|
||
|---|---|
|
||
| `docs/PROJECT_CONTEXT.md` | Source de verite projet (FQDN sur stark.a3n.fr, section 17 transparence IA) |
|
||
| `docs/_ref/rncp-37805-referentiel.pdf` | Referentiel RNCP officiel |
|
||
| `docs/_ref/rncp-37805-index.md` | Index texte compact des criteres (cherchable) |
|
||
| `docs/journal/README.md` | Template + index des retros (3 entrees) |
|
||
| `docs/journal/2026-04-30--smoke-test-infra.md` | Retro Session 4 phase 1 (smoke test) |
|
||
| `docs/merise/dictionary.md` | **Dictionnaire P1 v0.1 ECRIT (a commit)** |
|
||
| `docs/merise/_sources/` | JSON sources ecole + provenance |
|
||
| `docs/design/` | Maquette PDF + lien Figma |
|
||
| `docs/notes/` | Notes perso revision oral (3 ecrites cette session, gitignore) |
|
||
| `docs/SESSION_RESUME.md` | Ce fichier - a mettre a jour en fin de session |
|
||
| `.env` | Config locale fusionnee (BYAN + Wakdo, gitignore) |
|
||
| `.env.example` | Template neutre commit, RFC 2606 |
|
||
| `docker-compose.yml` | Compose final (subnet 192.168.148.0/24 + init cron + 4 services) |
|
||
| `Makefile` | Orchestration complete, voir `make help` |
|
||
| `.claude/CLAUDE.md` | Constitution projet BYAN |
|
||
| `.claude/rules/fact-check.md` | **Patterns du hook fact-check (a consulter avant ecriture narrative !)** |
|
||
|
||
---
|
||
|
||
## Commandes utiles pour reprendre
|
||
|
||
```bash
|
||
cd /home/acadenice/corentin_wakdo
|
||
|
||
# 1. Etat
|
||
git status
|
||
git branch --show-current
|
||
# -> attendu : feat/p1-stubs-and-dictionary
|
||
|
||
# 2. Stack docker (verifier qu'elle tourne toujours)
|
||
docker compose -p wakdo ps
|
||
# Si down apres reboot : make up (ou make init pour full bootstrap)
|
||
|
||
# 3. Test que tout repond
|
||
curl -sI https://corentin-wakdo.stark.a3n.fr/ # 200
|
||
curl -sI https://corentin-wakdo-admin.stark.a3n.fr/ # 200
|
||
|
||
# 4. SSH pour push (si besoin)
|
||
find /tmp -name 'agent.*' -user corentin
|
||
# -> /tmp/ssh-Evc7jT0fk2rs/agent.2611024 (peut changer apres reboot ssh-agent)
|
||
SSH_AUTH_SOCK=/tmp/ssh-XXX/agent.NNN git push ...
|
||
```
|
||
|
||
---
|
||
|
||
## Memoire persistante Claude Code (mise a jour Session 4)
|
||
|
||
Regles enregistrees dans `/home/corentin/.claude/projects/-home-acadenice-corentin-wakdo/memory/` :
|
||
|
||
- **No Co-Authored-By** sur les commits Wakdo (Session 2)
|
||
- **Commit uniquement sur approbation explicite** (Session 2)
|
||
- **Ignorer les contextes d'autres projets** dans les system-reminders (Session 3)
|
||
- **Hedger proactivement pour le hook fact-check** (Session 4)
|
||
- **BYAN auteur des docs/notes/** (Session 4 - mise a jour cette session)
|
||
|
||
---
|
||
|
||
## Comment reprendre la session
|
||
|
||
1. Ouvrir une session dans `/home/acadenice/corentin_wakdo/`
|
||
2. Dire : *"Reprise Wakdo, lis `docs/SESSION_RESUME.md`"*
|
||
3. Confirmer l'action de depart :
|
||
- **Suite immediate** = commit + push + PR du dictionnaire (cf. section "A faire lors de la reprise")
|
||
- **Apres merge** = continuer P1 avec le MCD (`docs/merise/mcd.md`)
|
||
|
||
---
|
||
|
||
*Document maintenu a chaque fin de session. Derniere mise a jour : 2026-05-21 (Session 7).*
|