Ce document décrit les contrôles qui alimentent Provider Engine V2 / ARCHI 2. Ils ne forment pas une architecture parallèle : la décision finale reste portée par le catalogue canonique, l'Evidence Matrix, le Repair Brain et l'unique pipeline sync.yml.
La santé d'un provider n'est jamais réduite à un code HTTP, à un score global ou à no_streams.
La chaîne de preuve distingue notamment :
| Famille | Preuves / observations |
|---|---|
| Discovery | manifest lisible, ID canonique, provenance, JS exploitable, SHA-256, exclusion P2P |
| Domaine | hub, terminal, redirect, peer historique, DNS, cohérence d'identité |
| Runtime | chargement, contrat getStreams, timeout, mémoire, exception |
| Catalogue | recherche, type movie/tv/anime, titre, saison, épisode |
| Player | detail, iframe/embed, JS/XHR/JSON, contexte Referer/Origin/cookies |
| Média | HLS, DASH, conteneur, playlist/segment, payload réel |
| Identité | titre/alias, année, saison/épisode, fichier média, durée |
| Langue | metadata, catalogue, pistes audio/sous-titres, indices cohérents |
| Compatibilité | Mobile, Desktop et TV prouvés séparément |
| Stabilité | preuve courante, LKG, failures répétées, récupération |
| Publication | catalogue, manifests, provenance, versions, hashes, intégrité |
Une validation par corpus reste un échantillonnage : elle ne prétend pas prouver chaque titre, épisode, langue ou appareil.
Quick est une maintenance réparatrice et publiable.
Il :
- actualise hubs/domaines ;
- redécouvre les variantes upstream ;
- conserve les versions publiées/LKG comme siblings de secours ;
- préfère un sibling déjà sain ;
- répare de façon bornée les familles encore non résolues ;
- valide les résultats ;
- conserve le LKG si la nouvelle observation reste inconclusive ;
- peut publier immédiatement une amélioration prouvée.
Quick ne crée donc pas un simple rapport passif et n'attend pas systématiquement un Deep.
Un provider totalement nouveau n'est pas activé aveuglément par Quick.
Deep est la reconstruction/validation large. Il est utilisé notamment pour :
- nouveaux providers ;
- nouvelles variantes ou structures ;
- persistance/apprentissage de recipes ;
- corpus et profondeur de probe supérieurs ;
- modifications importantes du moteur ;
- preuve stricte d'identité et de playback.
Deep n'est pas exécuté à chaque mise à jour. Il dispose d'une cadence séparée et du trigger explicite .github/triggers/deep-provider-repair.
no_streams est un symptôme. Les familles de cause V2 incluent notamment :
not_invoked;dns_unreachable;transport_blocked;search_gap;identity_mismatch;detail_gap;episode_gap;player_gap;media_extraction_gap;playback_context_gap;media_validation_gap;runtime_contract_drift;healthy.
Le Repair Brain sélectionne ensuite une stratégie ciblée et bornée. Une disparition de 404 sans amélioration réelle du résultat ne suffit pas à accepter une réparation.
Une URL n'est pas un stream prouvé.
Le système peut confirmer :
- HLS réel (
#EXTM3U) ; - DASH/MPD ;
- signature de conteneur ;
- playlist et/ou premier segment ;
- redirects cohérents ;
- contexte de lecture requis.
Il rejette notamment :
- HTML/JSON déguisé ;
- player non résolu ;
- asset, publicité ou démo ;
- preview anormalement courte ;
- média illisible ;
- payload ou redirect incohérent.
Un média lisible correspondant à la mauvaise œuvre est un échec bloquant.
Les contrôles peuvent croiser :
- titre/alias ;
- année ;
- movie/tv/anime ;
- saison/épisode ;
- metadata catalogue/player ;
- nom ou chemin du média ;
- durée attendue/mesurée.
Lorsque l'identité ne peut pas être suffisamment prouvée sans contradiction, le résultat reste inconclusif ; il n'est pas transformé artificiellement en succès.
Unknown / Inconnue dans un label de qualité Nuvio n'est pas une preuve d'identité inconnue et ne provoque jamais un rejet à lui seul.
VF/VOSTFR/VO peut être établie à partir de plusieurs signaux cohérents : metadata provider, domaine, catalogue, player, pistes audio et sous-titres.
Une seule heuristique faible ne doit pas inventer une langue.
Les états sont volontairement séparés :
- healthy/proven : promotion possible ;
- repairable/inconclusive : réparation ou conservation du LKG ;
- quarantine : identité contradictoire, provenance suspecte, domaine détourné, sortie dangereuse ou autre preuve forte.
Un zéro résultat isolé n'est pas une raison suffisante pour quarantiner ou supprimer un provider.
La règle est repair before triage.
Une preuve est scoped :
provider × œuvre × type × langue × device × version du contrat client
Un provider sain sur un film Desktop peut rester non prouvé sur une série TV ou sur Android TV.
Les preuves Mobile, Desktop et TV sont indépendantes.
Movie, série et anime sont des dimensions obligatoires. Breaking Bad S01E01 reste une fixture TV de régression.
La cible de largeur est 10 providers jouables par œuvre, dont au moins 3 VF.
Elle est non bloquante lorsqu'un catalogue ne permet objectivement pas de l'atteindre. En revanche, ne comptent jamais :
- mauvais contenu ;
- mauvais épisode ;
- durée contradictoire ;
- faux HLS ;
- média illisible ;
- preuve runtime attribuée à un autre provider.
La production n'utilise plus deux publications concurrentes.
sync.yml construit une transaction validée qui comprend :
- staging + preuves ;
- promotion candidate ;
- import dans
provider_catalog.json; - rendu de
manifest.jsonetvf/manifest.json; - audit contenu/média ;
- provenance/LKG/versions ;
- hashes et intégrité ;
- un commit atomique de la génération acceptée ;
- vérification du
mainexact publié.
Une étape en échec bloque la nouvelle transaction et laisse le dernier état sain dans l'historique/publication.
Torrent, magnet, Acestream et autres chemins P2P interdits sont filtrés à plusieurs niveaux : metadata/ID, code source, protocoles retournés et validation finale.
- Une IP GitHub peut être bloquée alors qu'une IP résidentielle fonctionne.
- Un échantillon ne représente pas l'intégralité d'un catalogue.
- Une preuve technique ne détermine pas le statut juridique d'une source tierce.
- Certaines metadata de qualité/langue peuvent être absentes.
- Un succès à un instant donné ne garantit pas la disponibilité future.
Ces limites produisent de l'inconclusif, pas des conclusions arbitraires.