[ID] SCRIPT_NAME: synomap_cleanup_omv_only_v1.0.sh PROJECT: SEED_MOVER [ROLE] - Étape terminale du pipeline synomap, dédiée exclusivement à l’hôte OMV. - Supprime les fichiers source locaux lorsqu’ils sont confirmés : • hardlinkés sur le volume Synology, • présents dans qBittorrent avec progress=100 %, • stockés dans un save_path Synology valide, • listés comme migrés dans le plan issu de daily/apply. - Évite la duplication locale inutile et réduit l’empreinte disque sur OMV. [CONTEXT] - À exécuter manuellement ou via l’orchestrateur synomap_chain_preview. - Dépendances : /bin/sh, curl, sed, stat, rm ; jq recommandé (fallback possible si absent). - Nécessite un environnement cohérent : OMV_DATA, SYNO_ENV contenant QB_URL/QB_USER/QB_PASS. - Le script ne modifie ni qBittorrent ni Synology ; il ne travaille qu’en local sur OMV. - Basé sur un plan généré par daily/apply, utilisant les mêmes conventions de lignes "plan: ...". [INPUTS] - CLI : - : obligatoire, fichier texte listant les actions possibles. - --write : active les suppressions réelles. Sans cela → mode preview (echo des rm). - Variables d’environnement : - SYNO_ENV : fichier .env injectant OMV_DATA et les credentials qBittorrent. - OMV_DATA : préfixe requis pour considérer un chemin comme local. Défaut : /srv/dev-disk-by-uuid- - QB_URL : URL API qBittorrent (obligatoire pour validation complète). - QB_USER : identifiant API qBittorrent. - QB_PASS : mot de passe API qBittorrent. - Format du plan : - lignes issues du daily/apply ; - parse des blocs hash via sed ; - ignore SKIP / [NOSTAT] / lignes incomplètes. [OUTPUTS] - Mode PREVIEW : - imprime : `rm -- 'SRC'` lorsque toutes les conditions sont validées. - Mode WRITE : - exécute rm -f -- SRC puis affiche : RM -- SRC - affiche [WARN] si rm échoue. - Aucun fichier log ; sortie exclusive sur stdout. - Ne modifie pas mapping_entries.txt ; n’écrit aucun .state. [VALIDATION LOGIQUE] Pour chaque entrée du plan : 1) ok_hardlink : - compare hash/chemin issus du plan ; - stat chemin Synology ; valide si inode identique ou hash conforme. 2) ok_qb_100_syno : - interroge qBittorrent : save_path doit commencer par /syno progress == 1.0 - si QB_* absent → toujours faux (aucune suppression). 3) is_omv_local : - SRC doit commencer par OMV_DATA 4) Si les trois conditions ↑ sont vraies → admissible. [FAILURE_MODES] - Aucun plan fourni → affiche usage + exit 2. - Plan introuvable → exit ≠ 0 (set -e). - Échec login qBittorrent → ok_qb_100_syno=0 → aucune suppression. - Conditions non remplies → lignes ignorées, avec tags SKIP. - rm peut échouer → [WARN] mais le script continue. - Exit code global = 0 hors erreur initiale (arguments/plan manquants). [OBSERVATIONS & LIMITES] - Sans jq, extraction du progress/save_path devient fragile (sed/grep fallback partiel). - Le script ne protège pas les suppressions simultanées (pas de lockdir). - Aucune vérification de cohérence avec mapping_entries.txt ; dépend entièrement du plan. - L’absence de log fichier peut compliquer l’audit a posteriori (stdout uniquement). [HISTORIQUE] - Version initiale (1.0), 2024–2025, conçue pour compléter le pipeline synomap. - Ajout des validations qBittorrent (progress/save_path) dans les versions récentes. - Mention REGLAGES_CHATGPT indique une réintégration et durcissement récents (2025). - Date exacte d’introduction du flag --write à confirmer via historique Git.