KALYMATT® YT — DEPLOIEMENT

ENVIRONNEMENT CONTRACTUEL
Python : 3.10.21
Virtualenv : /home/ngqu7872/virtualenv/public_html/YT/3.10/
Passenger startup : wsgi.py

1. Extraire la racine YT/ dans /home/ngqu7872/public_html/YT

2. Installer les dépendances Python dans CE virtualenv :
   /home/ngqu7872/virtualenv/public_html/YT/3.10/bin/python -m pip install -r /home/ngqu7872/public_html/YT/requirements.txt

3. Vérifier l'environnement média :
   /home/ngqu7872/virtualenv/public_html/YT/3.10/bin/python /home/ngqu7872/public_html/YT/tools/check_media_engine.py

   MEDIA_ENGINE_OK : environnement complet.
   MEDIA_ENGINE_DEGRADED : aucun runtime JavaScript externe détecté ; ne pas modifier Python. Tester ensuite la source réelle pour savoir si elle en dépend.
   MEDIA_ENGINE_KO : corriger uniquement le composant explicitement signalé.

4. Test sans téléchargement d'une source réelle :
   /home/ngqu7872/virtualenv/public_html/YT/3.10/bin/python /home/ngqu7872/public_html/YT/tools/media_probe.py "URL_SOURCE"

5. Redémarrer Passenger :
   mkdir -p /home/ngqu7872/public_html/YT/tmp
   touch /home/ngqu7872/public_html/YT/tmp/restart.txt

Base MariaDB : ngqu7872_yt
Utilisateur MariaDB : ngqu7872_yt
Mot de passe MariaDB : Petite-Ro!

Super-administrateur applicatif : admin@linhstudio.click
Mot de passe applicatif : 01Petite-Ro!

Bibliothèque structurée (build 2026.09.08-r11-drive-share)
-----------------------------------------------------------
Cette version ajoute une arborescence de dossiers, les opérations déplacer/copier/cloner,
les états actif/suspendu/archivé, les sauvegardes/restaurations et le partage public protégé
par lien aléatoire + mot de passe aléatoire.

Le schéma SQL a évolué. En environnement DEV, recréer la base à partir du dump complet :
  /home/ngqu7872/public_html/YT/database/dm.sql
Ne pas appliquer de migration partielle.

Après déploiement du ZIP :
  1. installer requirements.txt dans le virtualenv Python 3.10 ;
  2. recréer/importer la base avec database/dm.sql ;
  3. redémarrer l'application depuis le sélecteur Python ;
  4. vérifier le header X-KALYMATT-YT-Build = 2026.09.11-r42-media-pipeline-rca.

Build: 2026.09.08-r18-local-import-drive
Import local: multi-fichiers, glisser-déposer vers dossier/racine, lecture intégrée des formats pris en charge.

Build r22 : le dump complet ajoute `trashed_at` aux tables folders et videos. Recréer/importer la base depuis database/dm.sql pour une installation propre de cette version.

Build r23 : aucune évolution SQL par rapport à r22. Cette passe ajoute la recherche globale, les filtres par type et corrige la structure Jinja de la page d'aide. Le dump complet reste celui livré dans database/dm.sql.

Build r27 : éditeur intégré pour TXT/MD/CSV/JSON. Chaque enregistrement crée automatiquement une sauvegarde de la version précédente avant écriture. Limite éditeur : 2 Mio par fichier.

Build r28 : export ZIP récursif des dossiers avec conservation des sous-dossiers vides et téléchargement ZIP d'une sélection multiple de fichiers. Aucun changement SQL.

Build r35 : ajout du centre de partage `/shares` pour gérer au même endroit les liens de fichiers et dossiers (actifs, expirés, désactivés), leurs expirations, mots de passe, régénérations et révocations.

Build r41 : le dump complet `database/dm.sql` étend le rôle utilisateur avec `standard`. L'administration des utilisateurs est réservée au super administrateur via l'écran Utilisateurs. Les mots de passe restent hachés Argon2 : l'interface ne peut afficher que le mot de passe au moment de sa création/réinitialisation, jamais un ancien mot de passe stocké.


Build r42 — RCA dump + chaîne média — 2026-09-11
--------------------------------------------------
- Contrôle du dump : `python tools/check_dump_contract.py` doit retourner `DUMP_OK`.
- MP4/Auto : priorité AVC/H.264 + AAC pour la compatibilité navigateur, avec fallback MP4.
- WebM : fusion vidéo+audio WebM via ffmpeg lorsqu'il est disponible ; flux muxé exigé sinon.
- MP3 : extraction audio via ffmpeg inchangée mais sortie finale désormais contrôlée explicitement.
- Les fragments/intermédiaires yt-dlp (`.part`, `.ytdl`, `.temp`, `.fNNN.*`) ne peuvent plus être enregistrés comme média final.
- Aucune limite applicative de taille de fichier n’est imposée par YT ; les téléchargements, imports et conversions sont traités selon les capacités de l’hébergement.
- `check_media_engine.py` distingue correctement OK / DEGRADED / KO.
- `media_probe.py` expose maintenant la disponibilité AVC+M4A et WebM vidéo+audio.

STOCKAGE MULTI-TENANT
---------------------
- Chaque utilisateur possede un UUID technique immuable dans users.uuid.
- L'adresse e-mail reste le login et peut changer sans changer l'UUID ni le stockage.
- Les medias persistants sont stockes sous downloads/tenants/<uuid>/.
- Les sauvegardes medias sont stockees sous downloads/tenants/<uuid>/backups/.
- Un utilisateur standard est borne a ses ressources et a son tenant.
- Le superadmin conserve un acces transversal a tous les tenants sans melanger leurs fichiers physiques.
- GET /storage/scan : scan BDD <-> disque du tenant courant.
- GET /users/<id>/storage-scan : scan d'un tenant par le superadmin.
- GET /storage/scan-all : scan global de tous les tenants par le superadmin.
- Le scan est non destructif : il remonte fichiers manquants, orphelins, sauvegardes manquantes/orphelines et ecarts de taille.

Build diagnostic anti-bot: 20260911-antibot-runtime-2. Après déploiement, la première ligne de téléchargement doit contenir ce build, cookies=... et js_runtimes=... . Si elle ne le contient pas, Passenger exécute encore un ancien processus.
