Repository navigation
Charger le jeu de démonstration en staging #287
Description
Contexte
Epic : #8
Maquette : sans objet — chargement de données, aucun écran
Architecture-Technique › Environnements · Securite-et-RGPD · Design-Changelog › D-022 · D-022
La base de staging n'a aucun parcours : GET /v1/routes/search y renvoie une liste vide, donc un build preview affiche une carte vide. db:seed refuse de tourner sous NODE_ENV=production (apps/api/src/db/seed-cli.ts), et l'image de l'API pose NODE_ENV=production (infra/api.Dockerfile), y compris sur staging. D-022 (2026-09-24) demandait d'amender #32 pour que le jeu de démonstration se charge aussi en staging ; #32 est fermé sans cela. Découverte de CODE pendant #278, PR #285 (Inbox, 2026-10-05).
Ce ticket débloque les critères qui exigent des parcours dans #262 (événements de la découverte dans PostHog staging). #266 n'en dépend pas : le démarrage du build, la carte et app_opened se prouvent sans parcours.
Ticket mixte : une partie code (CODE, une PR), une partie humaine (Ilan ou Paul, sur staging).
Comportement attendu
Partie code (CODE)
- Un chemin de chargement explicite et gardé du jeu de démonstration de Créer un jeu de données de démonstration : 10 parcours Paris #32 (10 parcours Paris) sur staging : par exemple un job Cloud Run dédié, ou une commande qui exige une variable d'opt-in propre à staging (nom à choisir, documenté dans le README).
- Jamais exécutable en production : refus si l'opt-in manque, et refus si la cible est identifiée comme production, même avec l'opt-in. Le garde-fou actuel de
db:seeden local et en production reste en place. - Idempotent : relancé, il ne duplique rien et ne touche à aucune donnée hors du jeu de démonstration.
- Données fictives uniquement (Securite-et-RGPD) : ni donnée personnelle réelle ni photo réelle d'utilisateur.
- Procédure d'exécution et de retour arrière (retrait du jeu de démonstration) décrite dans le README et dans la PR.
- Niveau de risque 2 au moins (écriture de données en staging) : revue OWASP ciblée, label
level:2sur la PR, signalement à Ilan.
Partie humaine (Ilan ou Paul)
- Lancer la commande ou le job sur staging, en annonçant avant exécution la cible, l'effet et le retour arrière.
- Vérifier que
GET /v1/routes/searchsur l'API staging, autour de Paris, renvoie les 10 parcours.
Critères d'acceptation
- Le chargement refuse de tourner sans la variable d'opt-in, et refuse en production même avec elle : tests
- Deux exécutions successives donnent le même état (10 parcours, aucun doublon) : test
- README : commande ou job, variable d'opt-in, retour arrière
- PR de niveau 2 avec sa revue OWASP dans la section Risque
- Exécuté sur staging par Ilan ou Paul :
GET /v1/routes/searchrenvoie les 10 parcours, attesté en commentaire (aucun secret)
Notes
- Fermeture : le ticket se ferme par la PR
Fixes #N; si l'exécution humaine sur staging n'est pas faite au merge, Ilan ou Paul l'atteste en commentaire avant la recette de Vérifier les événements de la découverte dans PostHog staging #262.
Activity
PaulThiberville commentedon Oct 5, 2026
🔨 Démarrage — plan :
node dist/demo-seed.js(loadouremove), lancée sur staging par une exécution du job Cloud Run existantwidoo-api-migrateavec des surcharges (gcloud run jobs execute --args --update-env-vars) : même image que le service, même réseau, même secretDATABASE_URL, aucune nouvelle ressource GCP ni droit IAM. Un scriptinfra/gcp/demo-seed.sh(annonce cible, effet, retour arrière ;--dry-run) l'enveloppe.DEMO_SEED=stagingobligatoire ; la cible est identifiée par l'ID du projet GCP lu sur le serveur de métadonnées de Cloud Run, comparé àwidoo-stagingcodé en dur. Tout autre projet (production, Préparer la production : projet GCP et Firebase prod, domaine, DNS, e-mails, alertes de coût #246) est refusé même avec l'opt-in ; métadonnées absentes ou illisibles (poste local, autre hébergeur) : refus. Le garde-fou dedb:seedreste tel quel.seed()(Créer un jeu de données de démonstration : 10 parcours Paris #32), déjà idempotent ; photos Unsplash servies par leur URL, rien à copier dans un stockage.removeretire les 10 parcours, leurs étapes et médias, les auteurs fictifs et les lieux du jeu qu'aucun autre parcours n'utilise ; idempotent.widoo_test(jamaiswidoo, jamais staging) : refus sans opt-in, refus horswidoo-stagingavec opt-in, idempotence, retour arrière.PaulThiberville commentedon Oct 6, 2026
Jeu de démonstration chargé sur staging le 2026-10-06 par infra/gcp/demo-seed.sh load (exécution widoo-api-migrate-pw9vv, journal : {"action":"load","routes":10}). Vérification : GET /v1/routes/search?bbox=2.32,48.82,2.45,48.9 renvoie 10 parcours en clusters ; la zone du Marais renvoie 2 cartes. /v1/routes/search/count sur la zone : {"count":10}.