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

882 lines
45 KiB
Markdown
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).*