====================================================================
STATE_SCHEMA.txt
Projet : Seedbox Manager
Objet  : Spécification du format des fichiers .state (ARR post-process)
Version : 1.0 (2025-10-12)
====================================================================

1) FINALITÉ
------------
Définir un schéma formel et stable pour les fichiers .state produits par
les post-process Sonarr/Radarr afin d’orchestrer la bascule NVMe→Synology
et toute action “daily”.

2) EMPLACEMENT & ENCODAGE
-------------------------
- Répertoire : /scripts/state/
- Extension  : .state
- Encodage   : UTF-8 (LF)
- Droits     : 0640 (lect/écr. service), pas de secrets

3) FORMAT GÉNÉRAL
-----------------
- Format : texte “clé=valeur”, une paire par ligne, sans guillemets.
- Lignes vides et commentaires (# ...) autorisés.
- Les caractères de fin de ligne CRLF sont interdits (LF uniquement).

4) CLÉS REQUISES (MINIMUM)
--------------------------
- kind        : string  ; {added|upgrade|test}
- added       : int     ; timestamp (epoch seconds) de l’ajout par ARR
- upgrade     : int     ; {0|1} – 1 si remplacement d’une version
- old         : string  ; chemin ancien (si upgrade=1), sinon vide
- new         : string  ; chemin cible normalisé après post-process

5) CLÉS COMPLÉMENTAIRES (RECOMMANDÉES)
--------------------------------------
- release     : string  ; nom de release tel que fourni par ARR
- category    : string  ; (ex. tv, movies, anim…)
- indexer     : string  ; nom logique interne (ex. autobrr)
- infohash    : string  ; hex 40 (si disponible)
- size_bytes  : int     ; taille totale (si connue)
- client      : string  ; ex. qbittorrent
- eventtype   : string  ; ex. Test (ARR), ImportCompleted…
- note        : string  ; message libre court (<= 200 chars)

6) CONTRAINTES & VALIDATIONS
----------------------------
- kind ∈ {added, upgrade, test}
- added > 1_600_000_000 (borne basse sanity)
- upgrade ∈ {0,1}
- new != "" (chemin absolu)
- encodage UTF-8 sans BOM
- Pas de guillemets, \r interdit, trim des espaces fin de ligne.

7) EXEMPLE
----------
kind=added
added=1728691200
upgrade=0
old=
new=/data/media/TV/Show.Name.S01E01.1080p
release=Show.Name.S01E01.1080p.WEB-DL
category=tv
indexer=autobrr
client=qbittorrent

8) ERREURS & JOURNAUX
---------------------
- Les parseurs doivent :
  * ignorer les lignes inconnues,
  * loguer toute clé manquante critique (kind, added, new),
  * refuser un fichier .state non conforme (code retour ≠ 0).
- Journal dédié : /scripts/log/state_parser.log

9) VERSIONNEMENT DU SCHÉMA
--------------------------
- SCHEMA_VERSION=1 (dans l’en-tête du .state facultatif)
- Toute évolution majeure → incrémenter et documenter ici.

====================================================================
FIN – STATE_SCHEMA.txt
====================================================================
