feat(unionflow): ajout Spec-Kit, constitution, mission mutuelles

- Config Spec-Kit pour Spec-Driven Development
- CONSTITUTION.md + .specify/memory/constitution.md
- Commandes Cursor /speckit.*, règles projet
- Mission: associations + mutuelles d'épargne et de financement
- .gitignore: versionner config spec-kit unionflow

Made-with: Cursor
This commit is contained in:
dahoud
2026-02-27 14:41:07 +00:00
parent 144b68f8e7
commit b1957c1c81
631 changed files with 104070 additions and 0 deletions

View File

@@ -0,0 +1,195 @@
# Lacunes limitant la maturité professionnelle UnionFlow
**Date :** 25 février 2026
**Objectif :** Consolider les lacunes identifiées pour la mise en production (maturité « professionnelle »), à partir de commandes exécutées sur le dépôt et sur le VPS 176.57.150.2.
---
## 1. CI/CD dédié UnionFlow
### Constat
- **Aucune référence à `unionflow`** dans `.github/workflows/` du workspace.
- Les workflows existants (`backend-ci.yml`, `frontend-ci.yml`) ciblent uniquement :
- `mic-after-work-server-impl-quarkus-main/**`
- `afterwork/**`
- **Aucun dossier `.github/`** dans `unionflow/` (pas de workflows au niveau du projet UnionFlow).
### Preuves
```text
# Recherche "unionflow" dans .github
→ Aucun match
# Contenu paths des workflows
backend-ci.yml: paths: 'mic-after-work-server-impl-quarkus-main/**'
frontend-ci.yml: paths: 'afterwork/**'
```
### Impact
- Pas de build/test automatisé au push sur le code UnionFlow.
- Déploiement dépendant de **lionsctl** (infra) et de builds manuels ; pas de pipeline « code → test → image → déploiement » propre au dépôt UnionFlow.
---
## 2. Docker et contexte de build
### Constat
- **Un seul `docker-compose`** dans UnionFlow : `unionflow-server-impl-quarkus/docker-compose.dev.yml`.
- Contient uniquement **PostgreSQL + Adminer** (réseau `unionflow-dev`).
- **Aucun** service backend, client ou Keycloak dans ce compose.
- **Pas de docker-compose « full stack »** (backend + client + DB + Keycloak) pour recette/prod locale.
- Les **Dockerfile.prod** (client et serveur) utilisent une instruction invalide :
```dockerfile
COPY ../unionflow-server-api/pom.xml ../unionflow-server-api/
```
- `COPY` ne peut pas sortir du contexte de build ; ce chemin est invalide en build Docker classique depuis le répertoire du module.
### Preuves
```text
# Fichiers docker-compose dans unionflow
→ unionflow-server-impl-quarkus/docker-compose.dev.yml (postgres-dev + adminer uniquement)
# COPY dans Dockerfile.prod
unionflow-server-impl-quarkus/Dockerfile.prod: COPY ../unionflow-server-api/pom.xml ...
unionflow-client-quarkus-primefaces-freya/Dockerfile.prod: COPY ../unionflow-server-api/pom.xml ...
```
### Impact
- Build des images « prod » depuis ces Dockerfiles tels quels : **probable échec** sans contexte multi-module (type monorepo root).
- Pas de stack complète reproductible en local pour tester un déploiement type prod.
---
## 3. Couverture de code et dette explicite
### Constat (données JaCoCo précédentes + code)
- **Backend** (unionflow-server-impl-quarkus) :
- Couverture globale : **62 % instructions**, **44 % branches** (objectif typique prod ~80 %).
- **BaseRepository** : **0 %** couvert (classe de base des repositories).
- Modules à couverture faible : ex. mutuelle/credit, parties de DocumentService.
- **TODOs laissés dans le code** (dette explicite) :
- `OrganisationService.java` : `// TODO Cat.2 : repartitionRegion via Adresse`
- `NotificationService.java` : `// TODO: Support HTML body if needed`
- **Métriques Hibernate** : `quarkus.hibernate-orm.metrics.enabled=false` (application.properties et application-prod.properties).
### Preuves
```text
# TODOs
OrganisationService.java:376 // TODO Cat.2 : repartitionRegion via Adresse
NotificationService.java:399 // TODO: Support HTML body if needed
# Métriques désactivées
application.properties: quarkus.hibernate-orm.metrics.enabled=false
application-prod.properties: quarkus.hibernate-orm.metrics.enabled=false
```
### Impact
- Risque de régressions sur les zones non couvertes et sur BaseRepository.
- Fonctionnalités incomplètes (repartitionRegion, corps HTML des notifications).
- Pas de métriques ORM pour le tuning et le monitoring.
---
## 4. Métriques Prometheus (backend)
### Constat
- Les déploiements K8s sur le VPS ont les **annotations Prometheus** :
- `prometheus.io/scrape=true`
- `prometheus.io/path=/q/metrics`
- `prometheus.io/port=8080`
- Le **backend** nexpose **pas** lendpoint `/q/metrics` :
- Aucune dépendance `quarkus-micrometer` ou `quarkus-smallrye-metrics` dans `unionflow-server-impl-quarkus/pom.xml`.
- Seul `quarkus-smallrye-health` est présent (endpoint `/health`).
- **Vérification sur le VPS** :
- `GET http://127.0.0.1:8080/health` → **200**, `"status":"UP"`.
- `GET http://127.0.0.1:8080/q/metrics` → **404**.
### Preuves
```text
# VPS - annotations sur les deployments
unionflow-server-impl-quarkus: prometheus.io/path=/q/metrics, prometheus.io/port=8080, prometheus.io/scrape=true
unionflow-client-quarkus-primefaces-freya: idem
# VPS - curl depuis le pod backend
/health → 200 {"status":"UP","checks":[...]}
/q/metrics → 404
# pom.xml backend
→ quarkus-smallrye-health présent
→ pas de quarkus-micrometer ni quarkus-smallrye-metrics
```
### Impact
- Prometheus scrape les pods mais **nobtient pas de métriques** applicatives (404).
- Pas de métriques type taux derreur, latence, throughput par endpoint pour UnionFlow backend.
---
## 5. Documentation opérationnelle (runbook, rollback)
### Constat
- **Aucun fichier** `runbook*`, `PLAYBOOK*`, `CONTRIBUTING*` dans `unionflow/`.
- **SECURITY.md** : présent uniquement dans `unionflow-client-quarkus-primefaces-freya/`.
- **CHANGELOG.md** : présent uniquement dans le client.
- La section « Déploiement » du README client décrit déploiement manuel (serveur Linux, Nginx) mais **pas** :
- Procédure de rollback.
- Runbook dincident.
- Escalade ou contacts.
### Preuves
```text
# Recherche runbook / playbook / CONTRIBUTING dans unionflow
→ 0 fichier runbook*, PLAYBOOK*, CONTRIBUTING*
# Déploiement / rollback dans .md
→ README client : section "Déploiement" (manuel)
→ CHANGELOG : mention "Déploiement expliqué"
→ Aucun document dédié rollback ou runbook
```
### Impact
- En incident ou après un mauvais déploiement, pas de procédure documentée dans le dépôt UnionFlow pour rollback ou diagnostic.
---
## 6. État du VPS et déploiement actuel (consultation)
### Constat (lecture seule)
- **Déploiements** : `unionflow-client-quarkus-primefaces-freya` et `unionflow-server-impl-quarkus` en **Running** (1/1), namespace `applications`.
- **Ingress** : `unionflow.lions.dev` (client), `api.lions.dev` (path `/unionflow` pour le backend), adresse **176.57.150.2**.
- **Monitoring** : services `grafana-service` et `prometheus-service` présents dans le namespace `monitoring`.
- **Pods** : 2 restarts sur les deux déploiements (il y a ~41 jours), âge ~6365 jours.
### Preuves
```text
kubectl get deployments,services,ingress -n applications | grep unionflow
→ deployment unionflow-client-quarkus-primefaces-freya 1/1 74d
→ deployment unionflow-server-impl-quarkus 1/1 77d
→ ingress unionflow-client... unionflow.lions.dev 176.57.150.2
→ ingress unionflow-server... api.lions.dev 176.57.150.2
```
---
## Synthèse des lacunes (maturité professionnelle)
| # | Lacune | Gravité | Preuve (commande / fichier) |
|---|--------|--------|------------------------------|
| 1 | Pas de CI/CD dédié UnionFlow dans le dépôt | Élevée | Aucun path `unionflow/**` dans `.github/workflows/` |
| 2 | Docker : pas de compose full stack ; Dockerfile.prod avec COPY hors contexte | Élevée | docker-compose.dev.yml (DB seule) ; COPY `../unionflow-server-api/` dans Dockerfile.prod |
| 3 | Couverture backend 62 % / 44 %, BaseRepository 0 %, TODOs métier | Moyenne | JaCoCo ; OrganisationService/NotificationService TODOs ; hibernate-orm.metrics.enabled=false |
| 4 | Endpoint /q/metrics absent (404) malgré annotations Prometheus sur les pods | Moyenne | curl /health → 200, /q/metrics → 404 ; pas de quarkus-micrometer dans pom |
| 5 | Pas de runbook ni procédure de rollback dans UnionFlow | Moyenne | Aucun fichier runbook/playbook/rollback ; README déploiement manuel uniquement |
---
## Recommandations (ordre de priorité)
1. **CI/CD** : Ajouter un workflow (ex. `.github/workflows/unionflow-ci.yml`) qui déclenche sur `unionflow/**`, avec build + test + (optionnel) build dimage.
2. **Docker** : Corriger le contexte de build (build depuis la racine du monorepo ou adapter les Dockerfile.prod) ; ajouter un `docker-compose.yml` (ou équivalent) pour stack complète dev/recette.
3. **Métriques** : Ajouter `quarkus-micrometer` (ou lextension Prometheus) au backend et exposer `/q/metrics`, ou retirer les annotations Prometheus des déploiements pour éviter des 404.
4. **Couverture / dette** : Viser ≥80 % couverture sur le backend ; couvrir BaseRepository ; traiter ou documenter les TODOs (repartitionRegion, HTML body).
5. **Opérationnel** : Rédiger un runbook (déploiement, rollback, incidents courants) et le versionner dans le dépôt UnionFlow (ex. `docs/runbook.md`).
---
*Rapport généré à partir de lanalyse du dépôt et de commandes exécutées sur le VPS (consultation seule).*