# 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 `
`
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 -m "abandoned: "
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).*