Synomap – Loop Specification v4 – Bloc D (Cohérence qBittorrent) Version : 4.0 Date : 2025-11-16 0. OBJET Le Bloc D définit la logique de cohérence entre : - l’intention métier issue du Bloc ABC (A/B/C), - et l’état d’un torrent dans qBittorrent (save_path, tags, statut). Il intervient après : - Bloc E (mapping/catégorie OK), - Bloc G (intégrité FS OK), - Bloc ABC (état A/B/C déterminé). 1. INVARIANTS INV_D1 : Ordre d’exécution E → G → ABC → D. Le Bloc D n’est jamais exécuté si E ou G ont échoué pour un torrent. INV_D2 : Subordination qB en mode SAFE Tant que qB est dans un statut SAFE : - D doit aligner qB sur l’intention ABC (save_path + tags), - qB est considéré comme subordonné à la logique métier. INV_D3 : Protection en mode UNSAFE Si qB est dans un statut UNSAFE : - D n’envoie aucune commande (ni setLocation, ni retag), - D marque le torrent avec un tag d’erreur métier SYNO_ERR_UNSAFE, - le torrent est exclu du flux ABC/D pour ce run. INV_D4 : Intention ABC = vérité métier Le profil attendu côté qB est déduit de l’état ABC : - A : save_path attendu sur /data, tags métier non strictement requis. - B : save_path attendu sur /data, tag SYNO attendu. - C : save_path attendu sur /syno, tag SYNO_OK attendu. INV_D5 : Politique de correction R-ONCE Par torrent et par run : - au plus une correction forte (setLocation OU retag), - lecture des infos qB après correction, - aucune boucle de correction dans un même run. INV_D6 : No-op si déjà cohérent Si qB matche le profil ABC et est SAFE : - le Bloc D ne fait rien, - le torrent est considéré comme D0_QB_CONSISTENT. 2. ÉTATS DU BLOC D STATE_D0_QB_CONSISTENT Conditions : - qB en statut SAFE, - save_path conforme au profil ABC, - tags métier conformes. Effets : - aucune action de D. STATE_D1_SAVE_PATH_MISMATCH Conditions : - qB en statut SAFE, - save_path ≠ save_path attendu (profil ABC), - tags considérés secondaires à ce stade. Effets : - D envoie un setLocation vers le chemin cible, - relit l’état qB une fois, - termine les actions pour ce torrent. STATE_D2_TAG_MISMATCH Conditions : - qB en statut SAFE, - save_path conforme au profil ABC, - tags métier non conformes (SYNO/SYNO_OK absents ou obsolètes). Effets : - D recalcule la liste des tags métier attendus pour cet état ABC, - applique les ajouts/suppressions nécessaires, - relit les tags une fois, - termine les actions pour ce torrent. STATE_D3_UNSAFE_STATUS Conditions : - qB expose un statut UNSAFE. Liste minimale : - error - missingFiles - metadataError - ioError - stalledUP (avec erreur associée) - checkingResumeData (bloqué) - unknown Effets : - D n’envoie aucune correction, - pose ou maintient le tag SYNO_ERR_UNSAFE, - loggue l’erreur, - exclut le torrent du traitement ABC/D pour ce run. 3. PRIORITÉ DES ÉTATS Pour un torrent donné dans un run, le Bloc D applique l’ordre : 1) D3_UNSAFE_STATUS (protection prioritaire), 2) D1_SAVE_PATH_MISMATCH, 3) D2_TAG_MISMATCH, 4) D0_QB_CONSISTENT. Dès qu’un état est détecté, D applique la logique correspondante et ne cherche pas à combiner plusieurs états dans un même run. 4. ALGORITHME FONCTIONNEL Pseudo-flux pour un torrent éligible à D (E et G OK, ABC déterminé) : 1) Lire le statut qB : - si UNSAFE → STATE_D3_UNSAFE_STATUS - tag SYNO_ERR_UNSAFE - logs - FIN D pour ce torrent 2) Vérifier save_path : - si ≠ attendu (profil ABC) → STATE_D1_SAVE_PATH_MISMATCH - envoyer setLocation - relire once - FIN D pour ce torrent 3) Vérifier tags métier : - si ≠ attendus (profil ABC) → STATE_D2_TAG_MISMATCH - recalcul des tags métier - appliquer tags - relire once - FIN D pour ce torrent 4) Sinon : - STATE_D0_QB_CONSISTENT - aucune action D pour ce torrent 5. IMPACT SUR LE FLUX GLOBAL - D garantit que l’état qB n’est jamais en retard par rapport à la décision métier. - D évite les corrections agressives lorsque qB remonte des statuts techniques à risque. - D prépare un terrain propre pour la future logique de vérification/monitoring (Bloc “checker” en lecture seule). FIN DU DOCUMENT READABLE V4