1) CONTEXTE & MÉTHODOLOGIE - Synomap vise à diagnostiquer puis orchestrer la migration/miroir de torrents entre OMV (SRC) et Synology (DST) via une machine d’états A/B/C, des blocs E/G/D/H/HASH, et une sortie JSON structurée (v7) alimentant overall_status et les plans B1→B4. La v1 décrit états et actions qB/FS sans modifier le modèle métier. - audit_v3 recense les manques fonctionnels et techniques : rigueur JSONL append-only, Season Packs multi-fichiers, upgrades, cross-seed complet/partiel, groupes de contenu basés MD5, vue canonique, cohérence des chemins Docker↔Seedmover, et robustesse long terme. - Méthode : lecture exhaustive des .txt sous docs/ (hors archives), analyse croisée des A/B/meta/admin v1, focalisation sur audit_v3, sans modifier les spécifications v1 ; production d’un plan d’intégration v2 uniquement. 2) SYNTHÈSE DES TROUS (GAPS) DÉCRITS DANS audit_v3.txt Catégories utilisées : - missing_state (état ou sous-état absent) - missing_transition (transition ou critère d’entrée/sortie absent) - missing_signalisation (issue/tag manquant) - missing_data_model (donnée ou vue structurante absente) - missing_integration (information existante non reliée aux autres blocs/artefacts) GAP-001 — Cohérence globale non verrouillée (périmètre, contraintes, dépendances) - Points soulevés : absence d’explication unifiée du “pourquoi/quoi/où/quand”, périmètre fonctionnel non verrouillé, dépendances techniques (Docker/OMV/Synology/UID-GID/montages) non listées clairement.【F:docs/synomap/v1/audit_v3.txt†L6-L13】 - Catégorie : missing_integration. GAP-002 — Pipeline complet sans entrées/sorties/invariants détaillés - Points soulevés : étapes 1→7 du pipeline listées mais sans définition d’entrées, sorties, invariants, échecs ni impacts multi-fichiers.【F:docs/synomap/v1/audit_v3.txt†L16-L36】 - Catégorie : missing_integration. GAP-003 — Spécification JSONL stricte et maintenance manquantes - Points soulevés : format {client,hash,src,dst,ts} obligatoire, interdiction du fallback basename, gestion d’encodage/échappement, rotation/compactage/vue canonique, purge upgrades, translation Docker↔Seedmover absentes ou non normées.【F:docs/synomap/v1/audit_v3.txt†L38-L56】 - Catégorie : missing_data_model. GAP-004 — Cohérence de chemins multi-environnements incomplète - Points soulevés : vues Docker Sonarr/Radarr vs qB OMV vs Seedmover, règles d’alignement ou de translation et impacts sur miroir/save_path/validations non formalisés.【F:docs/synomap/v1/audit_v3.txt†L58-L72】 - Catégorie : missing_integration. GAP-005 — Machine A/B/C sans transitions/validations complètes - Points soulevés : critères d’entrée/sortie, règles fail-safe et validations (exist/stat/tailles/JSONL) manquent pour transitions A→B→C.【F:docs/synomap/v1/audit_v3.txt†L74-L89】 - Catégorie : missing_transition. GAP-006 — Multi-fichiers / Season Packs non couverts - Points soulevés : regroupement multi-lignes JSONL par hash, complétude 100 %, interdiction de bascule partielle absents de la v1.【F:docs/synomap/v1/audit_v3.txt†L95-L101】 - Catégorie : missing_state. GAP-007 — Upgrades / fichiers fantômes - Points soulevés : détection d’upgrades, ignore anciennes entrées via vue canonique, reconstruction d’état final, compactage des cadavres logiques non spécifiés.【F:docs/synomap/v1/audit_v3.txt†L102-L107】 - Catégorie : missing_transition. GAP-008 — Cross-seed complet (clusters de torrents identiques) - Points soulevés : décisions au niveau “contenu”, détection MD5 des torrents partageant les mêmes fichiers, agrégation seed/time globale avant migration manquantes.【F:docs/synomap/v1/audit_v3.txt†L108-L115】 - Catégorie : missing_state. GAP-009 — Cross-seed partiel / fractal - Points soulevés : modèle par fichier et groupe de contenu, interdiction de déplacer un fichier utilisé par un torrent, agrégation JSONL→hash→fichier→groupe absents.【F:docs/synomap/v1/audit_v3.txt†L116-L127】 - Catégorie : missing_state. GAP-010 — Vue canonique + base MD5 - Points soulevés : nécessité d’une base MD5 pour détection de contenus identiques, reconstruction de mappings manquants, vérification de cohérence, modélisation torrent→fichier→groupe non décrite.【F:docs/synomap/v1/audit_v3.txt†L129-L138】 - Catégorie : missing_data_model. GAP-011 — Robustesse long terme et stratégies d’erreur - Points soulevés : renames, seasons partielles, torrents incomplets, rattrapage MD5, prévention migrations dangereuses, compactage régulier, auto-réparation non cadrés.【F:docs/synomap/v1/audit_v3.txt†L141-L152】 - Catégorie : missing_transition. GAP-012 — Liste explicite des manques critiques - Points soulevés : hash manquant, absence logique multi-fichiers, cross-seed, regroupement contenu, vue canonique, compactage, translation Docker→Seedmover, validations avant migration, stratégie d’erreur absents des docs v1.【F:docs/synomap/v1/audit_v3.txt†L155-L166】 - Catégorie : missing_signalisation. 3) MAPPING DES GAPS → DOCUMENTS EXISTANTS GAP-001 - Impact : SYNOMAP_MASTER_INDEX_v1 (guidage incomplet), A1/A2/A3 intro (pas de périmètre/contraintes détaillées), META DOC_OV1 (ne couvre pas dépendances infra). Docs actuelles décrivent seulement blocs/ordres (ex. A1 lignes 4-46) sans motivations ni dépendances ; elles sont silencieuses sur périmètre et infrastructure.【F:docs/synomap/v1/A_specs/A1_checker_spec/synomap_checker_spec_v1_digest.txt†L4-L46】 - État : docs silencieuses → missing context. GAP-002 - Impact : B1/B2/B3/B4 specs (pipeline partiel), Implementation Map (scripts sans entrées/sorties formalisées). B1 décrit run fonctionnel mais ne formalise entrées/sorties/invariants par étape multi-fichiers.【F:docs/synomap/v1/B_specs/B1_loop_exec/synomap_B1_loop_exec_digest.txt†L5-L58】 - État : logique partielle (séquence), manque détails par étape → incomplete. GAP-003 - Impact : A1 bloc E + Issues Table (format mapping), A4 schema (identity/paths/state sans JSONL append-only), Implementation Map (prune_mapping). Aucun document n’impose {client,hash,src,dst,ts} ni rotation/compactage/translation ; A1 ne mentionne pas JSONL structure ; Issues Table ne porte pas de codes pour JSONL corruption.【F:docs/synomap/v1/A_specs/A1_checker_spec/synomap_checker_spec_v1_digest.txt†L14-L23】【F:docs/synomap/v1/meta/synomap_issues_table_v1.txt†L16-L19】 - État : silencieux sur format/maintenance → missing data model. GAP-004 - Impact : A1 bloc D save_path expectations (chemins)【F:docs/synomap/v1/A_specs/A1_checker_spec/synomap_checker_spec_v1_digest.txt†L25-L34】, B3 rules FIX_SAVE_PATH【F:docs/synomap/v1/B_specs/B3_correction/synomap_B3_correction_digest.txt†L44-L69】, A3 combos pour mirror/save_path【F:docs/synomap/v1/A_specs/A3_case_book/synomap_A3_readable.txt†L114-L128】. Aucun document décrit translations Docker↔OMV↔Synology ni exemples multi-vue. - État : partiellement couvert (profil save_path), translation manquante → contradiction potentielle runtime. GAP-005 - Impact : A1 ABC definition, A3 combos; transitions et validations détaillées absentes (A1 énonce états mais pas critères de passage).【F:docs/synomap/v1/A_specs/A1_checker_spec/synomap_checker_spec_v1_digest.txt†L8-L13】【F:docs/synomap/v1/A_specs/A3_case_book/synomap_A3_readable.txt†L81-L167】 - État : états présents, transitions/validations silencieuses → missing transition. GAP-006 - Impact : A3 Case Book (pas de multi-fichiers), Issues Table (aucun code multi-file), A4 schema (pas de granularité par fichier).【F:docs/synomap/v1/A_specs/A3_case_book/synomap_A3_readable.txt†L18-L38】 - État : docs silencieuses → missing state. GAP-007 - Impact : B2 convergence (ne distingue pas upgrades/cadavres), A3 (aucun cas upgrade), Issues Table (pas de codes upgrades). B2 append-only mais pas de logique de purge/compaction.【F:docs/synomap/v1/B_specs/B2_loop_runner/synomap_B2_loop_runner_digest.txt†L13-L29】 - État : partiellement contradictoire (append-only sans compaction) → missing transition. GAP-008 - Impact : HASH block (A1) indique MD5 scope mais sans notion de clusters multi-torrents ou agrégation seedtime.【F:docs/synomap/v1/A_specs/A1_checker_spec/synomap_checker_spec_v1_digest.txt†L40-L46】 Issues Table n’a pas de codes cross-seed. A3 combos ne couvrent multi-torrent contenu partagé.【F:docs/synomap/v1/A_specs/A3_case_book/synomap_A3_readable.txt†L18-L38】 - État : docs silencieuses → missing state/model. GAP-009 - Impact : identique GAP-008 + absence de vue par fichier/groupe dans A4 schema (state hash_state seulement global).【F:docs/synomap/v1/A_specs/A4_json_schema/synomap_A4_schema_digest.txt†L23-L84】 - État : missing state/data model. GAP-010 - Impact : HASH block/A4 fields mention primary_md5 but pas de base canonique ni graphe torrent→fichier→groupe ; Issues Table ne couvre pas absence de MD5 infra.【F:docs/synomap/v1/A_specs/A4_json_schema/synomap_A4_schema_digest.txt†L57-L84】【F:docs/synomap/v1/meta/synomap_issues_table_v1.txt†L38-L41】 - État : partiellement couvert (champ présent) mais utilisation/process absents → missing integration/data model. GAP-011 - Impact : B1/B2/B3/B4 invariants ne couvrent renames, saisons partielles, torrents incomplets, auto-réparation ; Issues Table pas de codes d’erreur stratégie/rollback. DOC_OV1 ne traite pas stratégies d’erreur au-delà des codes présents.【F:docs/synomap/v1/meta/synomap_DOC_OV1_digest.txt†L6-L35】 - État : silencieux → missing transition/signalisation. GAP-012 - Impact : touche l’ensemble A/B/meta/admin : besoin de nouveaux issue codes (Issues Table), nouvelles validations (A1/A3), nouvelles règles overall_status (DOC_OV1), nouveaux champs éventuels (A4).【F:docs/synomap/v1/audit_v3.txt†L155-L166】 - État : explicitement manquant. 4) PROPOSITIONS D’INTÉGRATION EN “DOC V2” GAP-001 – Cohérence globale - Spec v2 impact : ajouter section “Vision & périmètre” dans A1 ou meta, lister contraintes (cross-seed, hardlinks, NFS, UID/GID) et dépendances Docker/OMV/Synology. - Marquage : [INTEGRATION_PURE] (clarification sans nouveau modèle). GAP-002 – Pipeline détaillé - Spec v2 impact : compléter B1/B2 avec fiches par étape (entrées/sorties/invariants/erreurs), ajouter impacts multi-fichiers. - Marquage : [INTEGRATION_PURE]. GAP-003 – JSONL strict + maintenance - Spec v2 impact : définir schéma JSONL, règles fail-fast, rotation/compactage + vue canonique, table de translation Docker↔Seedmover ; proposer nouveaux issue codes (ex. JSONL_CORRUPTED, JSONL_MISSING_FIELD) et champs A4 optionnels pour stats de journal. - Marquage : [EXTENSION]. GAP-004 – Cohérence des chemins - Spec v2 impact : ajouter tableau de translation chemins (Sonarr/Radarr/qB/Seedmover), exemples de save_path/mirror, règles de validation pré-migration ; compléter B3 FIX_SAVE_PATH avec mapping multi-vues. - Marquage : [EXTENSION] (nécessite modèle de translation) + [INTEGRATION_PURE] pour clarifier profils existants. GAP-005 – Transitions A/B/C - Spec v2 impact : formaliser critères A→B→C (présence mapping/SRC/DST, seedtime, mirror complet, save_path switch), validations (exist/stat/size/JSONL cohérent), nouvelles issues pour transitions refusées. - Marquage : [EXTENSION]. GAP-006 – Multi-fichiers / Season Packs - Spec v2 impact : introduire notion de “torrent composite” avec complétude par ensemble de fichiers ; A4/A1 state per-file summary (ex. files_status array), Issues Table codes (PARTIAL_TORRENT_FILES), règles B3/B4 interdisant bascule partielle. - Marquage : [EXTENSION]. GAP-007 – Upgrades / cadavres - Spec v2 impact : définir vue canonique append-only (dernière entrée gagnante), processus de compactage/purge, cas d’upgrade DST supprimé, issues dédiées (UPGRADE_STALE_ENTRY), règles B2 convergence tenant compte des purges. - Marquage : [EXTENSION]. GAP-008 – Cross-seed complet - Spec v2 impact : modéliser cluster de torrents partageant même contenu MD5, agrégation seedtime/ratio au niveau cluster, issue codes (CROSS_SEED_CLUSTER_UNMATURE), overall_status calculé au niveau cluster puis projeté sur torrents. - Marquage : [EXTENSION]. GAP-009 – Cross-seed partiel - Spec v2 impact : ajouter couche “groupe de contenu (MD5)” et “fichier” dans state/output (ex. hash_state.groups[]), règles B3/B4 évitant déplacement de fichiers utilisés par d’autres torrents, issues (PARTIAL_CROSS_SEED_LOCKED). - Marquage : [EXTENSION] + [OPEN_QUESTION] (politique de maturité par groupe à définir). GAP-010 – Base MD5 + vue canonique - Spec v2 impact : définir base MD5 persistante, procédures de calcul/refresh, champs A4 pour source MD5 (db vs computed), issues (HASH_DB_MISSING_ENTRY), règles DOC_OV1 pour absence/obsolescence de hash. - Marquage : [EXTENSION]. GAP-011 – Robustesse long terme / stratégie d’erreur - Spec v2 impact : ajouter plan de renames/auto-réparation, scénarios torrents incomplets/season partielle, procédures fail-safe (STOP_SAFE_MODE triggers) et codes associés ; B4 extensions pour rollback limité. - Marquage : [EXTENSION] + [OPEN_QUESTION] (politiques de rename/auto-fix à arbitrer). GAP-012 – Liste de manques explicites - Spec v2 impact : créer annexe “Gap Tracker” reliée au Case Book/Issues Table, relier validations pré-migration (exist/stat/size/md5) aux états ABC et DOC_OV1, ajouter traduction Docker→Seedmover. - Marquage : [INTEGRATION_PURE] (checklist formelle) + [EXTENSION] pour nouveaux codes si nécessaires. 5) PRIORISATION DES CHANTIERS V2 - P1 (critique) : GAP-004 (chemins), GAP-005 (transitions ABC), GAP-003 (JSONL strict), GAP-010 (base MD5) — risques immédiats de migrations erronées ou perte de traçabilité ; impact direct sur scripts qB/FS et overall_status. - P2 (élevé) : GAP-006/007 (multi-fichiers, upgrades), GAP-011 (robustesse) — évitent incohérences latentes, nécessitent design mais limitent dégâts sur torrents complexes. - P3 (moyen) : GAP-008/009 (cross-seed), GAP-001/002 (cohérence globale/pipeline) — importants pour vision complète et optimisation, moins bloquants court terme. - P4 (suivi) : GAP-012 (gap tracker) — gouvernance et monitoring continu. Priorisation liée : erreurs de chemins/JSONL/MD5 peuvent provoquer bascule dangereuse ou diagnostic faux (runtime élevé) ; cross-seed et robustness influent sur efficacité mais moins risqués à court terme. 6) LIEN AVEC LES SCRIPTS EXISTANTS - GAP-003/007 (JSONL, upgrades) → scripts/synomap_prune_mapping_write_v1.1.sh doit intégrer schéma strict, rotation, compactage ; daily_qbittorrent_update collecte pourrait valider JSONL avant plan.【F:docs/synomap/v1/SYNOMAP_IMPLEMENTATION_MAP_v1.txt†L33-L97】 - GAP-004/005 (chemins, transitions ABC) → daily_qbittorrent_update_v1.32c_synomap.sh (save_path), synomap_apply_from_plan.sh (setLocation) nécessiteront translation multi-vues et validations renforcées.【F:docs/synomap/v1/SYNOMAP_IMPLEMENTATION_MAP_v1.txt†L33-L63】 - GAP-006/008/009/010 (multi-fichiers, cross-seed, MD5) → hash-aware modules à étendre dans chain preview / apply, plus collecte hash dans daily_qbittorrent_update ; radarr/sonarr_postprocess doivent remonter hash par fichier si dispo.【F:docs/synomap/v1/SYNOMAP_IMPLEMENTATION_MAP_v1.txt†L99-L121】 - GAP-011 (robustesse long terme) → cleanup_omv_only_v1.0.sh doit être encadré par nouvelles règles de saisons partielles/renames avant suppression ; chain_preview à mettre à jour pour suivre nouvelles issues.【F:docs/synomap/v1/SYNOMAP_IMPLEMENTATION_MAP_v1.txt†L64-L90】