45 KiB
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 :
- Lot B execute :
PROJECT_CONTEXTaligne sur Forgejo Actions (drift GitHub corrige partout : SS6/8/9/10/12), couche securite integree (CI PHPStan/secret-scan,.env.examplephp.inidurci, decision #16 SbD), planning rechiffre (P0 22, P1 38, P7 22 ; total 272h). 2 commits :d305a09(context) +fae5c23(UML : security-sequence + drift-fix x3).
- Sync des deux forges : GitHub
mainetait 35 commits en retard (00a3f82, fige v0.1.0) -> fast-forward propre vers5104040. GitHub et Forgejo desormais identiques sur les 3 refs. - 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 dansdev/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.inidurci (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
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 :
- 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 %).
- 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.
- Lot A ecrit via 1 workflow (2 auteurs + 2 critiques) : threat model + classification dans
PROJECT_CONTEXT §19, etdocs/uml/security-sequence.md.
Decisions actees cette session
- Stock en vrais % :
ingredientportestock_capacity(INT, CHECK > 0 = reference 100% + garde anti div/0),low_stock_pct(def 10),critical_stock_pct(def 5) ;stock_quantitysigne (peut etre negatif).stock_pct = ROUND(stock_quantity/stock_capacity*100)calcule. 3 bandes : normal / alerte (le manager retire viais_availableOU 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 suruser.- Drop
SELECT ... FOR UPDATE: decrement stock =UPDATE ... stock = stock - :unitsatomique (plus de read-gate, plus de risque deadlock).idempotency_keyconserve. - 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.exampleargon2/lockout/retention/seuils,php.inidurci, 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
.mdsont 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
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 :
- Rapatriement P1 sur
feat/p1-conception: les fichiers P1 (mcd.md + diagrammes) flottaient dans le working tree de la branche demodemo/p5-front-and-p3-admin. Portes proprement surfeat/p1-conception(stash des fichiers BYAN hors-scope, switch, pop). Les 4.drawioy etaient deja commites (64f5a27), identiques au working tree. - 5 docs P1 produits via 2 agents (expert-merise-agile + architect), puis normalises : MCT, MLT, use-cases, state-commande, sequence-passer-commande.
- Machine a etats de commande unifiee : resolution d'une contradiction qui preexistait entre
dictionary.md,PROJECT_CONTEXT.mdet 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 cancelledatteignable depuis tout etat non remis (pending_payment,paid,preparing,ready) : annulable a tout moment tant que non livree (modification / annulation / remboursement client).deliveredetcancelledfinaux.
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)
source(canal : kiosk/comptoir/drive) vsmode_consommation(fiscal : sur_place/a_emporter/drive) : deux dimensions distinctes.sourceest absent du dictionnaire et du MCD. A ajouter avant de generer le DDL.user_idsurcommande: 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)
- User valide les 4
.drawiosur le site drawio (preview Markdown ne rend pas Mermaid sans extension ; les .drawio/.svg s'affichent en revanche). - Trancher les 2 decisions secondaires (
sourcevsmode_consommation,user_idsur commande) - elles debloquent le MLD + class-diagram. - Finir le pivot drawio (si confirme) : cible Makefile
docs-render-drawio(imagejgraph/drawiodispo localement), regenerer les SVG depuis les .drawio, reecrire les refs dans mcd.md (actuellement vers SVG Mermaid), supprimer les.mmd/.svgMermaid. - Produire MLD + class-diagram une fois le MCD valide et les decisions secondaires tranchees.
- Commiter le lot P1 conception (option : 1 commit par doc) sur
feat/p1-conception, puis PR versdev(vigilance : base =dev, pasmain).
Commande exacte pour reprendre
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 :
- Pivot Mermaid -> drawio sur le MCD : 4 fichiers
.drawioXML generes pour gain de controle layout (planarite du global non resoluble par mmdc) - 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.
- 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
- Decision drawio uniquement, 4 fichiers separes, manual layout
- Generation des 4 fichiers
.drawioXML avec entites + cardinalites Merise(min,max)a partir des sources Mermaid - Commit
64f5a27:docs(merise): add drawio XML sources for MCD diagrams
Bloc 2 - 1er agent UX (welcome + categories scaffold)
- Spawn agent UX-designer (Sally) en background avec scope 2 ecrans (welcome + categories), flag
isolation: "worktree" - L'agent a base sa branche sur
feat/p1-conceptionau lieu dedev(le worktree n'a pas vraiment isole comme attendu) - Rebase
feat/p1-front-landing --onto dev 64f5a27pour droper le commit drawio comme parent - Renommage
feat/p1-front-landing->feat/p5-front-landing(front borne = livrable P5)
Bloc 3 - Setup automation PR (long detour sur les PATs)
- Push des 2 branches (SSH agent socket
/tmp/ssh-Evc7jT0fk2rs/agent.2611024) - Tentative
ghCLI dans Docker -> mauvaise idee, abandonne - Tentative fine-grained PAT #1 : Resource owner = Imugiii -> 404 sur wakdo_corentin (org repo invisible pour PAT a owner perso)
- Fine-grained PAT #2 : meme probleme (Resource owner encore = Imugiii)
- Fine-grained PAT #3 avec Resource owner = AcadeNice -> token en "Pending review" (org policy "approval required")
- Fallback classic PAT (
ghp_) -> fonctionne des generation, scoperepo, admin sur le repo - PR #4 (front ready) + PR #5 (drawio draft) creees via
POST /repos/AcadeNice/wakdo_corentin/pulls
Bloc 4 - 2e agent UX (P5 complet)
- Spawn agent UX en background sur
feat/p5-front-landingavec scope etendu : 5 nouvelles pages + JS state + JSON fallback - Auto-validation 7 checks dans le brief (assets exist, links resolve, JSON valid, HTML closed, JS syntax, http server e2e, JSON fetch)
- Livrable : 5 pages HTML, 7 modules JS, 2 JSON normalises copies dans
borne/data/, CSS etendu de 438 -> 1257 lignes - 6 commits thematiques (
6f5daca->6a7e772), 7/7 auto-checks PASS - Push, mise a jour PR #4 (titre + body) via
PATCH /repos/.../pulls/4 - Test live kiosk : les endpoints repondent 200 (welcome, categories, products, product, cart, payment, confirmation, JSON, CSS, JS, images)
Commande exacte pour reprendre
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)
- 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) - Drawio render automatique : ajouter cible Makefile
make docs-render-drawioqui utilise le containerrlespinasse/drawio-exportpour generer les SVG depuis les.drawioXML. Evite l'export manuel sur drawio web (galere sur mobile). - Continuer P1 conception sur
feat/p1-conception:docs/merise/mct.mddocs/merise/mlt.mddocs/merise/mld.mddocs/uml/class-diagram.mddocs/uml/use-cases.mddocs/uml/state-commande.mddocs/uml/sequence-passer-commande.md
- Commit final mcd.md : une fois les SVG drawio generes, commit
mcd.md+ suppression des.mmd/anciens.svgMermaid + Makefile mis a jour (dropdocs-rendermmdc, garder uniquementdocs-render-drawio) - Passage PR #5 draft -> ready (via PATCH API) quand tout le P1 conception est dedans
- 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)
- 3 fine-grained
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 :
- Cloture P1 dictionnaire : commit + push + PR #3 mergee dans
dev - 4 notes perso ecrites (gitignore) : apache-fastcgi-pitfalls, docker-network-pools-rfc1918, enum-vs-table-reference, merise-yagni-quantite + index README mis a jour
- Demarrage P1 conception sur nouvelle branche
feat/p1-conception(renommee depuisfeat/p1-merise-conceptionpour inclure UML) - MCD redige (
docs/merise/mcd.md) avec 3 sous-domaines (Catalogue/Commande/RBAC) en Mermaid + tableau recap cardinalites Merise - Pipeline mmdc setup : .mmd sources + SVG generes +
make docs-rendertarget - 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)
- Verification etat initial : branche
feat/p1-stubs-and-dictionaryavecb8f7d35(stubs+fixes) commit,docs/merise/dictionary.mduncommitted - Commit
d1a9876:docs(merise): data dictionary v0.1 - 10 entities + Mermaid ER diagram + 7 modeling notes - Push branche, PR #3 ouverte manuellement (gh CLI absent), mergee sur
dev git fetch + checkout dev + merge --ff-only origin/dev: sync OK sur68db2ee
Bloc 2 - 4 notes perso (gitignore)
- Bascule sur
Readau lieu degrep/sedapres blocage du hooktool-failure-guardsur "internal error" string presente dansvhost.conf(pattern legitime du commentaire, faux positif Bash output) apache-fastcgi-pitfalls.md(405 lignes) - 3 pieges Session 4 (DirectoryIndex, allowed_clients, R=200) + Q&A jurydocker-network-pools-rfc1918.md(376 lignes) - saturation pools Docker sur stark, choix192.168.148.0/24, RFC 1918, Q&A juryenum-vs-table-reference.md(381 lignes) - matrice de decision ENUM vs table, application aux 4 ENUMs Wakdo, Q&A jurymerise-yagni-quantite.md(337 lignes) - YAGNI applique amenu_produit, audit source ecole 13 menus mono-portion, Q&A jurydocs/notes/README.mdindex mis a jour : 7 nouvelles entrees (3 Session 4 deja redigees + 4 nouvelles)
Bloc 3 - Setup branche conception + cadrage
- Branche
feat/p1-merise-conceptioncreee depuisdev, puis renommee enfeat/p1-conceptionapres discussion sur l'ajout UML au scope - 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/)
- Merise : MCD, MCT, MLT, MLD (4 docs dans
docs/uml/cree
Bloc 4 - MCD redige + setup pipeline diagrammes
- Premier draft MCD avec 4 diagrammes ASCII art (global + 3 sous-domaines)
- tableau recap cardinalites Merise
(0,N)/(1,1)
- tableau recap cardinalites Merise
- User trouve l'ASCII moche -> bascule sur Mermaid
erDiagraminline - User ne voit pas le rendu Mermaid dans Cursor (pas d'extension installee) -> bascule sur SVG via mmdc
- Setup
docs/merise/_diagrams/: 4 fichiers.mmdextraits + 4 SVG generes vianpx mmdc - MCD edite : 4 blocs Mermaid remplaces par
<img src="_diagrams/*.svg"> - Makefile : target
docs-renderajoute, scanne tous lesdocs/**/_diagrams/*.mmddu projet, regen SVG (testee, OK 4/4) - 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
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)
-
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. -
Commit le MCD (option α : 1 commit par doc) :
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" -
Continuer P1 conception, dans l'ordre :
docs/merise/mct.md- operations metier + acteurs + fluxdocs/merise/mlt.md- workflow logique (preconditions / regles / postconditions)docs/merise/mld.md- schema relationnel formeldocs/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 etatscommande.statutdocs/uml/sequence-passer-commande.md- flux passer commande
-
Push + PR vers
devquand les 7 docs restants sont commit. Vigilance : verifierbase = dev(pasmain!). -
Apres merge : continuer P1 implementation (DDL + seed + fallback) sur une branche
feat/p1-implementationseparee.
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 :
- Smoke test infra Docker sur le serveur stark :
make initvalide bout en bout, 4 services healthy, certs Let's Encrypt provisionnes - Import assets ecole : 71 images normalisees + 2 JSON sources + maquette Figma PDF
- 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)
- Conflit
.envBYAN/Wakdo traite par fusion en 1 fichier (gitignore) - Switch FQDN
acadenice.fr->stark.a3n.fr(zone wildcard existante, evite la provisioning DNS prerequise par le challenge HTTP-01 de Traefik) - Smoke
make initcasse 3 fois et corrige :- Subnet explicite
192.168.148.0/24(pools Docker satures) init: truesur cron (dcron PID 1 setpgid)- Healthz statique dans
/usr/local/apache2/htdocs/(RewriteRule R=200 declenchait ErrorDocument template)
- Subnet explicite
- Validation HTTPS externe : 4 services healthy, certs OK,
/healthzisole - Journal session ecrit (
docs/journal/2026-04-30--smoke-test-infra.md) - PR #1 -> incident main au lieu de dev -> remediation FF dev=main
- Tag
v0.1.0annote sur le merge commit - Memoire
feedback_no_absolutes.mdenregistree (hook fact-check sensible)
Phase 2 - import assets ecole
- Drop zone
docs/_inbox/recue (9 Mo, 71 images + 2 JSON + 1 PDF + 1 readme) - Diagnostic : naming "wacdo" vs notre "Wakdo", casse incoherente, 7 typos dans JSON
- 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)
- Workaround
chownvia container ephemere (src/ etait owned root par Docker bind-mount) - PR #2 -> dev (workflow correct cette fois)
Phase 3 - demarrage P1 Merise
- Decisions cadrage P1 actees :
- MOT skippe (raccourci agile MCT -> MLT direct)
- Composition flexible (
menu_produitavecroleetposition) - Pas de
quantitesur 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_disponibleboolean) - Pas de stats agregees (live queries)
- Pas d'allergenes/nutrition pour MVP
- 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)
- 2 bugs infra exposes par les stubs et fixes :
- Apache
DirectoryIndexne contenait pasindex.php(admin renvoyait 403) - PHP-FPM
listen.allowed_clients = anyrejete par PHP 8.3 (toutes les connexions Apache->PHP-FPM rejetees, FastCGI cassait silencieusement)
- Apache
- Validation HTTPS externe : kiosk -> 200 HTML, admin -> 200 PHP rendu (PHP_VERSION et timestamp dynamique substitues)
- Commit
b8f7d35:feat(stubs): unblock 403 with kiosk and admin index pages, plus FastCGI fixes - 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.mdet source ecole
- 3 notes techniques perso (
docs/notes/, gitignore) :rbac-roles-permissions.md: pattern RBAC dynamique vs statique, UI matrice, Q&A jurymonetary-int-cents.md: INT centimes + TVA pour mille, Goldberg ACM 1991, Stripe convention, 5 piegespolymorphic-fk-snapshots.md: 2 colonnes nullables + discriminator + snapshots, Karwin SQL Antipatterns, integrite historique commandes
- Memoire
feedback_notes_author.mdmise 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
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
-
Commit le dictionnaire :
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." -
Push + PR :
SSH_AUTH_SOCK=/tmp/ssh-Evc7jT0fk2rs/agent.2611024 git push -u origin feat/p1-stubs-and-dictionaryPuis ouvrir PR via :
https://github.com/AcadeNice/wakdo_corentin/compare/dev...feat/p1-stubs-and-dictionary?expand=1VIGILANCE : verifier base =dev(pasmain!) avant de cliquer Create. -
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.mdavec 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 generesrc/public/borne/data/*.jsondepuis le seed (pour mode "Bloc 1 isole")
- MCD :
-
Notes perso restantes a rediger (basse priorite, peut s'etaler sur plusieurs sessions) :
enum-vs-table-reference.md: quand utiliser ENUM vs table referentielledocker-network-pools-rfc1918.md: pool saturation Docker, choix subnet expliciteapache-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
-
Optionnels post-merge (peuvent aller sur une branche
feat/infra-polishseparee 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 tagvX.Y.Zannote) - Vigilance PR : verifier explicitement
base branch = dev(le defaut GitHub estmain) - Branches mergees : conservees comme trace historique
- Procedure d'archive si une branche est abandonnee non-mergee :
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
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
- Ouvrir une session dans
/home/acadenice/corentin_wakdo/ - Dire : "Reprise Wakdo, lis
docs/SESSION_RESUME.md" - 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).