Files
unionflow-server-api/unionflow/LACUNES_MATURITE_PROFESSIONNELLE.md
dahoud b1957c1c81 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
2026-02-27 14:41:07 +00:00

196 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).*