Skip to content

Charger le jeu de démonstration en staging #287

Closed

Description

@PaulThiberville

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:seed en 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:2 sur 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/search sur 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/search renvoie les 10 parcours, attesté en commentaire (aucun secret)

Notes

Activity

  1. added this to the v0.2 milestone on Oct 5, 2026
  2. PaulThiberville commented on Oct 5, 2026

    @PaulThiberville
    CollaboratorAuthor

    🔨 Démarrage — plan :

    • Chemin : une commande dédiée dans l'image de l'API, node dist/demo-seed.js (load ou remove), lancée sur staging par une exécution du job Cloud Run existant widoo-api-migrate avec des surcharges (gcloud run jobs execute --args --update-env-vars) : même image que le service, même réseau, même secret DATABASE_URL, aucune nouvelle ressource GCP ni droit IAM. Un script infra/gcp/demo-seed.sh (annonce cible, effet, retour arrière ; --dry-run) l'enveloppe.
    • Garde-fous : opt-in DEMO_SEED=staging obligatoire ; la cible est identifiée par l'ID du projet GCP lu sur le serveur de métadonnées de Cloud Run, comparé à widoo-staging codé 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 de db:seed reste tel quel.
    • Données : réutilise 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.
    • Retour arrière : remove retire les 10 parcours, leurs étapes et médias, les auteurs fictifs et les lieux du jeu qu'aucun autre parcours n'utilise ; idempotent.
    • Tests sur widoo_test (jamais widoo, jamais staging) : refus sans opt-in, refus hors widoo-staging avec opt-in, idempotence, retour arrière.
    • Niveau 2, revue OWASP dans la PR. Rien n'est exécuté sur staging par CODE : les commandes pour Paul seront dans la PR.
  3. PaulThiberville commented on Oct 6, 2026

    @PaulThiberville
    CollaboratorAuthor

    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}.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions