`make stack-up` enchaîne `alembic upgrade head` dans le conteneur backend. Rien ne migrait la base sur le chemin de déploiement, et `/api/v1/health/ready`, qui ne teste que la connexion et l'extension TimescaleDB, aurait laissé passer un déploiement vert sur une base sans schéma applicatif. deploy.yml borne le job à 30 minutes et sort les journaux du backend et du proxy quand la sonde échoue. provision-host.sh rappelle la création du premier administrateur, et la propriété de /srv/enervision sans laquelle le runner ne peut ni manipuler les clones ni lire un `.env` en 600. Les statuts de livraison continue repassent à `En cours` : le code est écrit, la machine n'est pas provisionnée, le runner n'est pas enregistré, rien n'a été déployé. À basculer sur `Fait` au premier déploiement vert. Décompte des jobs corrigé, 18 et non 17. Refs #21, #22
Documentation
adr: décisions d'architecture, une par fichier, numérotées et immuables.architecture: les vues du système. Point d'entrée : architecture/README.md.
Décisions en vigueur
| ADR | Sujet |
|---|---|
| 0001 | PostgreSQL avec l'extension TimescaleDB |
| 0002 | Authentification par JWT d'accès et jeton de rafraîchissement opaque |
| 0003 | Autorisation RBAC à trois rôles, relecture du compte à chaque requête |
| 0004 | Journal d'audit en ajout seul, garanti par PostgreSQL |
| 0005 | LightGBM pour la prédiction de consommation, un modèle global |
| 0006 | Le moteur de règles de recommandation vit dans le backend, pas dans ml/ |
| 0007 | Terminaison TLS par un reverse proxy Nginx, en Docker Compose |
| 0008 | Airflow exécute le code du backend en sous-processus, dans son propre environnement |
| 0009 | Deux environnements sur la VM ENI, un projet Compose chacun, déployés par un runner auto-hébergé |