docs(r0): architecture — ADR-001 stack, ADR-002 démo-login, C4, modèle R0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
pr-daaif
2026-07-15 21:26:27 +01:00
parent 04e61056f6
commit ddc9dc52b5
4 changed files with 205 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
# ADR-001 — Stack technique
- **Statut** : acceptée (R0, 15 juillet 2026)
- **Contexte** : la V2 repart de zéro (code) mais pas de nulle part : la v1 a éprouvé une
stack pendant 8 sprints (~400 tests). Atlas CMMS, notre référence fonctionnelle, est en
Java Spring Boot + React MUI — cloner sa stack n'a aucun intérêt pédagogique ni pratique
pour une équipe TypeScript.
## Décision
| Couche | Choix | Justification |
| --- | --- | --- |
| Monorepo | **pnpm workspaces + Turborepo** | Un dépôt, plusieurs apps, caches de tâches ; éprouvé v1 |
| API | **NestJS (Node 24) + Prisma + PostgreSQL 18** | Architecture modulaire enseignable ; Prisma = modèle lisible par les étudiants |
| Extensions BDD | **pgvector** (RAG, R5) + **PostGIS** (carte, R1) | Un seul moteur de données pour tout |
| Cache/files | **Redis** (BullMQ pour les jobs, R2) | Génération mensuelle du préventif |
| Fichiers | **MinIO** derrière l'interface `FileStorage` | S3-compatible auto-hébergé ; l'interface interdit tout couplage (règle lint) |
| Contrat | **Zod → OpenAPI → clients typés** (« règle d'or ») | Le front ne peut pas dériver du back ; CI bloquante |
| Web | **React 19 + Vite + TanStack Query/Table + Tailwind v4** | Éprouvé v1 |
| UI kit | **shadcn/ui** thématisé par `docs/02-design/tokens.css` | Composants possédés (copiés dans le repo), accessibles (Radix), thémables par tokens — le contraire du « DaisyUI brut » de la v1. Introduit en R0 (primitives) et enrichi par release |
| Mobile | **Expo (Expo Go)** — R4 | Démo par QR sans build natif ; leçons v1 consignées |
| IA | **FastAPI (Python 3.13, uv)** — R5 | Écosystème IA Python ; n'écrit jamais en base métier |
| Déploiement | **Docker + Dokploy** (PaaS auto-hébergé) | Choix du référent ; portable (tout est compose) |
## Conséquences
- Un seul langage principal (TypeScript) du mobile à l'API — onboarding étudiant simplifié.
- La v1 sert de **référence de lecture** (décisions validées : machine à états OT, matrice
de permissions en base, stock dérivé des mouvements, synchro à verrou optimiste) ; tout
code V2 est réécrit et re-testé.
- Versions épinglées ; toute montée de version = tâche dédiée (risque n°5 du registre).