wip: snapshot V2 cascade onglet 2 (sauvegarde avant chirurgie git-hygiene)
This commit is contained in:
@@ -11,93 +11,6 @@ Journal technique de la V2. Décisions, anomalies, points bloquants, TODOs.
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-29 — Cascade Onglet 1 : Pratiques régénératives (P1 → P5b)
|
||||
|
||||
**Commit deploy :** `e80b226` (feat/aep-pratiques-regeneratives, 10 commits depuis main)
|
||||
**Exécutant :** Sonnet (agent autonome P1-P5b)
|
||||
|
||||
### Chantier P1 → P5b (résumé)
|
||||
|
||||
Création complète de l'onglet "Pratiques régénératives" sur `aep.trans-former.fr` :
|
||||
|
||||
- **P1** : scaffold types + API statique `GET /api/pratiques` (52 fiches JSON `public/data/pratiques-regeneratives.json`)
|
||||
- **P2** : page `/pratiques-regeneratives` — carte Leaflet Europe + accordéon DOM-TOM, sidebar filtres (type, pays, matériaux), composants `PratiqueCard.vue` + `PratiqueModal.vue`
|
||||
- **P3** : ajout onglet "Pratiques régé" dans le header nav desktop + hamburger mobile
|
||||
- **P4** : page `/proposer-pratique` — formulaire contribution avec Zod, endpoint `POST /api/submit-pratique` avec rate limit, `public/data/pratiques-pending.json`
|
||||
- **P5a** : build local validé (3.04 MB, APIs 200, 500 SSR = bug Windows/Node 24 préexistant non-bloquant)
|
||||
- **P5b** : deploy prod + smoke test (3/3 endpoints 200, SSR title OK, JSON 52 fiches)
|
||||
|
||||
### Deploy
|
||||
|
||||
- Méthode : `tar .output/ | ssh vps-hetzner "cd /opt/aep && tar -xzf -"` + `systemctl restart aep`
|
||||
- Env diff local vs VPS : VPS a des vars supplémentaires (MISTRAL, NOCODB worker, RESEND) — additionnel non-conflictuel, pas d'impact
|
||||
- Note `deploy.sh` : le script a un BOM UTF-8 (ligne 1 `\xEF\xBB\xBF#!/bin/bash`) qui cause un exit 1 sur le `read -p` quand stdin est un pipe. Contournement : exécution manuelle des étapes. A corriger en V3.
|
||||
|
||||
### Smoke test prod (2026-04-29 01:38 UTC)
|
||||
|
||||
| Endpoint | HTTP | Note |
|
||||
|---|---|---|
|
||||
| GET /pratiques-regeneratives | 200 | SSR OK, titre trouvé (2 occurrences) |
|
||||
| GET /proposer-pratique | 200 | SSR OK |
|
||||
| GET /api/pratiques | 200 | JSON valid, 52 fiches |
|
||||
|
||||
### Ce qui reste à valider (Jules, E2E BrowserMCP)
|
||||
|
||||
- Markers Leaflet visibles + cliquables (Europe + DOM-TOM)
|
||||
- Sidebar filtres fonctionnels (type, pays, matériaux)
|
||||
- Modal fiche + bouton retour preservant filtres
|
||||
- Formulaire `/proposer-pratique` : submit + message succès
|
||||
- Comportement mobile 375×667 (sheet bas, swipe filtres, fiche pleine page)
|
||||
|
||||
Prompt E2E disponible : `aep-communaute-build/PROMPT-BROWSERMCP-E2E.md`
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-27 — Session V3 : Finition mobile + Blog Liberapay + 3 deploys
|
||||
|
||||
**Commit :** `a02a555` — feat(mobile): accordéon outremer, hamburger nav, logo AEP, fiches cliquables, chatbot fullscreen
|
||||
**Pattern :** agents parallèles (3 × Sonnet) pour les 3 SSH indépendants — ~90s total vs ~20min séquentiel
|
||||
|
||||
### Changements implémentés
|
||||
|
||||
**B — OutremerMap.vue : accordéon vertical DOM-TOM**
|
||||
- Template : row horizontale → accordéon `<button>` + `v-show` par territoire
|
||||
- Lazy-init Leaflet : `initSingleMap(domName)` appelé au 1er clic (plus de `initMaps()` en `onMounted`)
|
||||
- `invalidateSize()` sur ré-ouverture d'une carte déjà initialisée
|
||||
|
||||
**E — app.vue : hamburger mobile**
|
||||
- Bouton `lg:hidden` tout à droite de `<!-- Actions droite -->`
|
||||
- Dropdown `v-if` : 5 liens (/, /agences, /rag, /a-propos, /signaler)
|
||||
- `z-index: 9999` en inline style sur le dropdown
|
||||
- `watch(() => route.path)` → ferme le menu à chaque navigation
|
||||
- **Fix stacking context :** header → `relative z-[9999]` (sans `position`, le z-index Tailwind n'avait pas d'effet → dropdown passait sous Leaflet)
|
||||
|
||||
**F — app.vue : badge "A" → "AEP"**
|
||||
- `w-7 h-7` → `h-7 px-2`, `text-sm` → `text-xs tracking-tight`
|
||||
|
||||
**G — pages/index.vue : fiches ouvrables mobile**
|
||||
- `onSelectOrgMobile` : ajout `storeFiltersForBack()` + `router.push('/fiche/${id}')`
|
||||
- NB : `router.push` était déjà là (modif pilote antérieure) — seul `storeFiltersForBack` ajouté
|
||||
|
||||
**H — ChatbotSheet.vue : fullscreen + scroll lock iOS**
|
||||
- `92dvh → 100dvh`, `border-radius: 16px 16px 0 0 → 0`
|
||||
- `defineProps` → `const props = defineProps` (fix "can't find variable: props" en prod)
|
||||
- `watch(props.modelValue)` → lock `document.body.style.overflow` + `document.documentElement.style.overflow`
|
||||
- `onUnmounted` → cleanup overflow
|
||||
|
||||
**A — Blog trans-former.fr : Liberapay retiré**
|
||||
- VPS `/opt/astro-site/src/layouts/PostLayout.astro` : import + `<DonateButton />` supprimés
|
||||
- Docker rebuild → 31 pages, HTTP 200
|
||||
|
||||
**C — Website pro deploy**
|
||||
- `index.astro` SCP → `/opt/astro-pro/`, Docker rebuild → 13 pages, HTTP 200
|
||||
|
||||
### TODOs ouverts AEP
|
||||
- [ ] Valider visuellement les 8 fixes sur tel (Jules)
|
||||
- [ ] Pousser nav-carte sur Gitea (`git.trans-former.fr/jules/nav-carte`)
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-15 — Session 5 : Corrections post Phase 2 (11 retours Jules)
|
||||
|
||||
**Exécutant :** Sonnet (agent autonome full auto)
|
||||
|
||||
Reference in New Issue
Block a user