docs: sync CLAUDE.md and plan.md with post-phase-1 reality

- docker-compose.yml = config prod (images registry + Traefik), pas dev
- next.config.ts → next.config.mjs (corrigé partout)
- Phase 1 : branche pas encore mergée dans dev
- Ajout pièges Docker : public/, package-lock.json, @radix-ui/react-badge inexistant
- Commande alembic corrigée dans plan.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-21 22:51:57 +01:00
parent 5afad53aa9
commit 69678fcb06
2 changed files with 17 additions and 13 deletions

View File

@@ -40,8 +40,8 @@ backend/
alembic/ # Migrations (env.py configuré)
main.py # App FastAPI : CORS, rate limiting, routers
docker/
docker-compose.yml # Dev : postgres, redis, backend, frontend
docker-compose.prod.yml # Prod : images registry + labels Traefik
docker-compose.yml # Prod : images registry + labels Traefik (utilisé par Gitea Actions)
docker-compose.prod.yml # Alias prod (identique, gardé pour référence)
```
## Commandes
@@ -129,14 +129,16 @@ Voir @docker/docker-compose.yml et @.gitea/workflows/deploy.yml
- Le client API (`lib/api.ts`) passe toujours le token en paramètre explicite — pas de contexte global
- Les nouvelles pages du dashboard vont dans `app/(dashboard)/[section]/page.tsx`
- Les nouveaux composants UI shadcn vont dans `components/ui/`, les composants métier dans `components/`
- Les rewrites `next.config.ts` proxifient `/api/*` vers le backend — en dev, définir `NEXT_PUBLIC_API_URL=http://localhost:8000`
- Les rewrites `next.config.mjs` proxifient `/api/*` vers le backend — en dev, définir `NEXT_PUBLIC_API_URL=http://localhost:8000`
- JWT stocké dans localStorage (simple pour MVP, à migrer vers HttpOnly cookie plus tard)
**Infrastructure :**
- Le service `backend` dans docker-compose dépend de `postgres` avec `condition: service_healthy`
- Le build frontend Next.js utilise `output: "standalone"` → le Dockerfile copie `.next/standalone`
- Les variables d'env préfixées `NEXT_PUBLIC_` sont embarquées au build (pas au runtime)
- `docker-compose.prod.yml` attend des images pré-buildées depuis `${REGISTRY}` — pas de build local
- `docker-compose.yml` attend des images pré-buildées depuis `${REGISTRY}` — pas de build local (config prod)
- Le `frontend/public/` doit exister (même vide avec `.gitkeep`) — le Dockerfile le copie dans le stage runner
- `npm ci` exige un `package-lock.json` commité — toujours commiter le lockfile après `npm install`
### Pièges à éviter
- Ne pas lancer `uvicorn main:app` depuis `backend/` — toujours depuis la racine avec le module complet
@@ -145,3 +147,5 @@ Voir @docker/docker-compose.yml et @.gitea/workflows/deploy.yml
- Ne pas faire de scans sans vérifier `cible.validee == True` côté backend
- Ne pas commiter `.env` — seulement `.env.example`
- Alembic `env.py` importe les modèles depuis `backend.models` — ajouter tout nouveau modèle dans `backend/models/__init__.py`
- Ne pas utiliser `next.config.ts` — Next.js 14 ne supporte pas ce format, utiliser `next.config.mjs`
- Ne pas utiliser `@radix-ui/react-badge` — ce package n'existe pas sur npm (Badge shadcn = div CVA)

16
plan.md
View File

@@ -9,7 +9,7 @@ Scans réseau + vulnérabilités + pentest → rapports PDF compréhensibles pou
## ✅ Phase 1 — Socle (terminée)
> Branche : `feature/phase-1-socle` mergée dans `dev`
> Branche : `feature/phase-1-socle` (PR ouverte, pas encore mergée dans `dev`)
### Ce qui a été créé
@@ -37,8 +37,8 @@ Scans réseau + vulnérabilités + pentest → rapports PDF compréhensibles pou
- `lib/auth.ts` — helpers localStorage pour token JWT
**Infrastructure**
- `docker/docker-compose.yml`4 services : postgres:16, redis:7, backend, frontend
- `docker/docker-compose.prod.yml`images registry + labels Traefik + Let's Encrypt
- `docker/docker-compose.yml`config prod : images registry + labels Traefik + Let's Encrypt (utilisé par Gitea Actions)
- `docker/docker-compose.prod.yml`alias prod identique (gardé pour référence)
- `backend/Dockerfile` — Python 3.11-slim + WeasyPrint deps + alembic upgrade
- `frontend/Dockerfile` — multi-stage Node 20 (deps → builder → runner standalone)
- `.env.example` — toutes les variables documentées
@@ -58,7 +58,7 @@ Scans réseau + vulnérabilités + pentest → rapports PDF compréhensibles pou
| shadcn/ui + Radix | Accessibilité, composants non-opinionnés, facilement personnalisables |
| JWT dans localStorage | Simple pour MVP — à migrer vers HttpOnly cookie en Phase 3 |
| camelCase pour types TS, snake_case en DB | Convention JS vs convention Python/SQL |
| Rewrites next.config.ts vers backend | Pas de CORS en prod, tout passe par Next.js |
| Rewrites next.config.mjs vers backend | Pas de CORS en prod, tout passe par Next.js |
### État fonctionnel
- ✅ Register/Login utilisateur avec JWT
@@ -67,7 +67,7 @@ Scans réseau + vulnérabilités + pentest → rapports PDF compréhensibles pou
- ✅ Dashboard avec stats temps réel
- ✅ Pages liste clients et audits avec recherche
- ✅ Guard auth côté frontend
- ✅ Docker dev + prod prêt
- ✅ Docker prod prêt (docker-compose.yml = config prod images registry + Traefik)
- ⏳ Pages de formulaire (création/édition) non créées
- ⏳ Pages détail client et audit non créées
- ⏳ Scanners : dossier vide (placeholder Phase 2)
@@ -118,9 +118,9 @@ Permettre le lancement d'un scan Nmap sur des cibles validées, afficher les ré
### Tâches infra
- [ ] Ajouter service `worker` dans docker-compose (image backend + command: celery worker)
- [ ] Ajouter `python-nmap` dans requirements.txt
- [ ] Première migration Alembic : `alembic revision --autogenerate -m "init"`
- [ ] Ajouter service `worker` dans `docker-compose.yml` (image backend + command: celery worker) — attention, c'est la config prod
- [ ] Ajouter `python-nmap` dans `requirements.txt`
- [ ] Première migration Alembic : `alembic -c backend/alembic.ini revision --autogenerate -m "init"`
---