vault backup: 2026-07-30 17:41:49

This commit is contained in:
2026-07-30 17:41:49 -04:00
parent ad91a431cf
commit 09a4d96d06
@@ -1,5 +1,4 @@
## Objectif ## Objectif
Ce document resume une proposition de refonte de la synchronisation Mogador afin de rendre le systeme plus fiable, plus simple a maintenir et plus rapide a publier vers les sites TFO, IDELLO, ONFR et Linear. Ce document resume une proposition de refonte de la synchronisation Mogador afin de rendre le systeme plus fiable, plus simple a maintenir et plus rapide a publier vers les sites TFO, IDELLO, ONFR et Linear.
@@ -185,6 +184,29 @@ Si Directus est retire, il faut remplacer son role d'edition d'urgence.
La proposition est de creer un mini CMS interne dans Laravel, non expose a Internet. La proposition est de creer un mini CMS interne dans Laravel, non expose a Internet.
Ce mini CMS doit etre protege par authentification. Les edimestres qui ont aujourd'hui acces a Directus devront avoir acces a cet outil interne selon leurs roles.
Acces proposes:
```text
Admin sync:
- peut configurer et publier
- peut gerer les utilisateurs
- peut faire rollback
Edimestre:
- peut rechercher et consulter
- peut creer une correction d'urgence
- peut voir les overrides actifs
- ne peut pas changer la configuration systeme
Read-only interne:
- peut consulter les donnees, rapports et JSON publies
- ne peut pas modifier
```
Le mini CMS doit rester disponible uniquement sur le reseau interne ou via VPN/SSO interne. Il ne doit pas devenir une API publique.
Fonctions minimales: Fonctions minimales:
- rechercher un produit, programme, collection ou serie; - rechercher un produit, programme, collection ou serie;
@@ -231,6 +253,17 @@ Exemple d'override:
Important: il ne faut pas modifier les JSON publies directement a la main. Les overrides doivent etre appliques dans le pipeline de generation, sinon ils seront perdus ou impossibles a auditer. Important: il ne faut pas modifier les JSON publies directement a la main. Les overrides doivent etre appliques dans le pipeline de generation, sinon ils seront perdus ou impossibles a auditer.
Chaque override devrait inclure:
- l'utilisateur;
- le role;
- la raison;
- la date d'expiration;
- l'entite touchee;
- l'ancien contenu;
- le nouveau contenu;
- le run dans lequel la correction a ete publiee.
## Fabrication d'un incremental a partir d'un full export ## Fabrication d'un incremental a partir d'un full export
Louise ne fournit pas d'incremental. Chaque export est complet. Louise ne fournit pas d'incremental. Chaque export est complet.
@@ -310,33 +343,75 @@ Au lieu d'un seul gros JSON, il faut publier plusieurs fichiers specialises.
Exemple pour TFO: Exemple pour TFO:
```text ```text
/tfo/manifest.json /tfo/v1/manifest.json
/tfo/today.json /tfo/v1/runs/20260730-0900/today.json
/tfo/latest.json /tfo/v1/runs/20260730-0900/latest.json
/tfo/schedule/index.json /tfo/v1/runs/20260730-0900/schedule/index.json
/tfo/schedule/2026-07-30.json /tfo/v1/runs/20260730-0900/schedule/2026-07-30.json
/tfo/schedule/2026-07-31.json /tfo/v1/runs/20260730-0900/schedule/2026-07-31.json
/tfo/collections/index.json /tfo/v1/runs/20260730-0900/collections/index.json
/tfo/collections/0123456/full.json /tfo/v1/runs/20260730-0900/collections/0123456/full.json
/tfo/products/GP123456.json /tfo/v1/runs/20260730-0900/products/GP123456.json
/tfo/search/index.json /tfo/v1/runs/20260730-0900/search/index.json
``` ```
Pour 8 000 produits TFO et 22 000 produits IDELLO, ce volume de fichiers JSON n'est pas un probleme pour un bucket S3/CDN. C'est meme preferable a un gros fichier unique. Pour 8 000 produits TFO et 22 000 produits IDELLO, ce volume de fichiers JSON n'est pas un probleme pour un bucket S3/CDN. C'est meme preferable a un gros fichier unique.
Le site ne devrait pas coder un chemin de run en dur. Il lit toujours le manifest:
```text
/tfo/v1/manifest.json
```
Puis il utilise le `base_path` retourne:
```text
/tfo/v1/runs/20260730-0900
```
### manifest.json ### manifest.json
Le manifest indique quelle version est publiee. Le manifest indique quelle version est publiee.
```json ```json
{ {
"schema_version": "1.0",
"platform": "tfo", "platform": "tfo",
"published_at": "2026-07-30T09:50:00", "published_at": "2026-07-30T09:50:00",
"run_id": "20260730-0900", "run_id": "20260730-0900",
"base_path": "/tfo/runs/20260730-0900" "base_path": "/tfo/v1/runs/20260730-0900"
} }
``` ```
Le manifest est le seul fichier qui doit avoir un cache court.
Cache recommande:
```text
/tfo/v1/manifest.json
Cache-Control: public, max-age=60, stale-while-revalidate=120
/tfo/v1/runs/20260730-0900/*
Cache-Control: public, max-age=31536000, immutable
```
Meme si Louise exporte seulement toutes les 3 heures, le manifest ne devrait pas etre cache 3 heures. Il doit pouvoir changer rapidement pour:
- correction d'urgence via mini CMS;
- rollback;
- republication apres erreur;
- correction d'un mapping;
- correction d'une video/image;
- publication manuelle.
Compromis acceptable si Infra veut reduire les appels:
```text
manifest.json: max-age=300
```
Donc 5 minutes. Mais 3 heures est trop long pour les corrections d'urgence.
### today.json ### today.json
Contient ce qui doit etre en ligne aujourd'hui. Contient ce qui doit etre en ligne aujourd'hui.
@@ -438,11 +513,11 @@ Pour afficher des messages comme "prochain episode le 8 aout", il faut extraire
Proposition configurable: Proposition configurable:
```env ```env
TFO_SCHEDULE_DAYS_AHEAD=14 TFO_SCHEDULE_DAYS_AHEAD=10
IDELLO_SCHEDULE_DAYS_AHEAD=30 IDELLO_SCHEDULE_DAYS_AHEAD=10
ONFR_SCHEDULE_DAYS_AHEAD=14 ONFR_SCHEDULE_DAYS_AHEAD=10
LINEAR_SCHEDULE_DAYS_BEHIND=7 LINEAR_SCHEDULE_DAYS_BEHIND=7
LINEAR_SCHEDULE_DAYS_AHEAD=15 LINEAR_SCHEDULE_DAYS_AHEAD=10
``` ```
Les programmations futures sont publiees dans: Les programmations futures sont publiees dans:
@@ -464,6 +539,10 @@ Et resumees dans les JSON produit/collection:
Cela evite aux sites de parcourir toute la grille future pour afficher une information simple. Cela evite aux sites de parcourir toute la grille future pour afficher une information simple.
Le maximum propose pour la v1 est J+10. Cette limite garde les JSON raisonnables et evite que la generation future ralentisse inutilement la synchronisation.
Le site peut ensuite appliquer sa logique d'affichage selon l'heure. Par exemple, si un programme est prevu a 6h, le JSON contient deja `begin: 06:00`, et le site decide quand l'afficher ou le mettre en evidence.
## Search et Algolia ## Search et Algolia
Un fichier comme: Un fichier comme:
@@ -498,9 +577,9 @@ Il faut eviter qu'un site lise une publication incomplete.
Principe: Principe:
```text ```text
/tfo/runs/20260730-0900/... /tfo/v1/runs/20260730-0900/...
/tfo/runs/20260730-1200/... /tfo/v1/runs/20260730-1200/...
/tfo/manifest.json /tfo/v1/manifest.json
``` ```
Le site lit d'abord: Le site lit d'abord:
@@ -515,6 +594,107 @@ Si la generation du run `20260730-1200` echoue, `manifest.json` continue de poin
Ainsi, une sync ratee ne casse pas le site. Ainsi, une sync ratee ne casse pas le site.
Exemple simplifie:
```text
/tfo/v1/runs/1/collections/...
/tfo/v1/runs/1/products/...
/tfo/v1/runs/2/collections/...
/tfo/v1/runs/2/products/...
/tfo/v1/manifest.json -> pointe vers /tfo/v1/runs/2
```
### Retention des runs
Il faut supprimer les anciens runs pour eviter une croissance infinie du bucket.
Politique proposee:
```text
JSON publies:
- garder les runs des 10 derniers jours
- garder au minimum les 3 derniers runs valides
- supprimer les runs incomplets jamais publies
Rapports:
- garder 90 jours
Anomalies importantes / audit:
- garder 1 an ou selon politique interne
```
Pourquoi garder au moins 3 runs valides:
- rollback rapide;
- comparaison entre publications;
- diagnostic si un site signale un probleme.
### Versioning du contrat JSON
Les JSON deviennent un contrat avec les sites. Il faut donc versionner le format.
Version dans le chemin:
```text
/tfo/v1/manifest.json
/tfo/v1/runs/20260730-0900/products/GP123456.json
/tfo/v1/runs/20260730-0900/collections/0123456/full.json
```
Version dans chaque fichier:
```json
{
"schema_version": "1.0",
"platform": "tfo",
"run_id": "20260730-0900"
}
```
Si un changement cassant est necessaire:
```text
/tfo/v2/manifest.json
```
La v1 et la v2 peuvent coexister pendant une periode de transition.
### Documentation et validation
Swagger/OpenAPI est surtout utile pour des API dynamiques. Pour des JSON statiques, la documentation devrait plutot etre:
```text
docs/
publication-contract.md
files.md
cache-strategy.md
versioning.md
examples/
manifest.json
product.json
collection-full.json
schedule-day.json
schemas/
manifest.schema.json
product.schema.json
collection-full.schema.json
schedule-day.schema.json
```
Les JSON Schema sont importants parce qu'ils permettent de valider automatiquement les fichiers avant publication.
Avant de publier un run:
```text
1. generer tous les JSON
2. valider chaque type de fichier contre son JSON Schema
3. produire le rapport
4. publier seulement si les erreurs critiques sont absentes
5. mettre a jour manifest.json
```
## Rapport et alertes ## Rapport et alertes
Le rapport est une piece centrale de la v2. Le rapport est une piece centrale de la v2.