ADR-0150 : Moteur d'opérations interne du Platform Manager à la place de Temporal
Contexte
L'architecture (A3.1, Workflow Engine) demande des opérations longues avec reprise, validation et retour arrière, et cite Temporal. Le Navin Platform Manager s'installe avant la plateforme (amorçage, reprise quand le Control Plane est arrêté, sites isolés sans Internet). Il doit fonctionner avec un seul processus serveur et sa base PostgreSQL.
Décision
Le Manager garde son moteur interne (navin_manager/engine/core.py). Chaque opération, étape, tâche et tentative est une ligne PostgreSQL (nm.operations, nm.stages, nm.tasks) : le processus serveur ne garde aucun état en mémoire. Un tick du moteur lit l'état durable, met en file l'étape suivante, applique les délais, les tentatives, le budget d'échecs par étape et l'abandon. Un redémarrage du serveur reprend donc l'opération là où la base l'a laissée. La validation passe par les vérifications de service et les tests de fumée planifiés comme étapes ; le retour arrière est une opération du moteur (rollback de mise à niveau, restauration). Les approbations à deux personnes, les modes d'exploitation, le verrou de sécurité du cluster et les règles de profil sont contrôlés à la création de l'opération.
Temporal reste disponible pour les agents de la plateforme (adaptateur runtime/temporal.py, ADR-0102). Le Manager ne dépend pas de lui : un cluster Temporal serait une brique de plus à installer, sauvegarder et réparer avant que le Manager puisse réparer quoi que ce soit.
Conséquences
Un seul composant à exploiter pour le Manager ; l'état des opérations est sauvegardé avec la base du Manager. Les workflows ne sont pas écrits en code déterministe rejoué comme dans Temporal : chaque étape est idempotente et décrite par des tâches typées.
Preuves
navin-manager/server/tests/test_engine_resume.py::test_operation_resumes_after_a_server_restart: un second processus Python, sans état en mémoire, reprend l'opération.navin-manager/server/tests/test_foundation.py::test_engine_failure_retry_abort_and_timeout: tentatives, abandon, délai.navin-manager/server/tests/test_lifecycle_upgrades.py::test_stateless_upgrade_with_canary_then_rollback: retour arrière.