Repository navigation
Séparer le projet PostHog du développement et traiter les événements de recette envoyés #162
Description
Contexte
Epic : #13
Architecture-Technique › PostHog et Sentry par environnement · Securite-et-RGPD · Analytics · D-059
Maquette : sans objet — réponse DESIGN D-059 (https://github.com/Inprogress-Agency/widoo-app/wiki/Design-Changelog#d-059--2026-09-28) publiée le 2026-09-28
Découverte de CODE pendant #33 (Inbox) : apps/mobile/.env.local porte une EXPO_PUBLIC_POSTHOG_KEY non vide (fichier ignoré par git, valeur non lue par l'agent). En développement, expo/virtual/env relit .env.local à l'exécution, même quand la variable est vidée dans le shell. Toute session de développement qui accepte la bannière de consentement envoie donc ses événements au projet PostHog de cette clé. Pendant la recette de #33, avant la redirection vers la console, sont partis : app_opened, map_search_zone et result_card_viewed initiaux, et une sonde route_shared avec route_id: "probe".
Règle retenue (D-059) : le développement local n'a aucune clé PostHog et n'envoie rien (journal console seulement, EXPO_PUBLIC_ANALYTICS_DEBUG=1) ; l'app ignore une clé présente en développement. Staging (build preview) et production ont deux projets PostHog distincts, PostHog Cloud UE, « Widoo — staging » et « Widoo — production ». Sentry garde un projet par surface, séparé par environment. Les clés vivent dans l'environnement EAS du profil preview ou production et dans Secret Manager, jamais dans un fichier versionné ni dans l'environnement EAS development.
Comportement attendu
Pour CODE
- Garde-fou dans
apps/mobile/src/analytics: aucun client PostHog n'est créé quandEXPO_PUBLIC_APP_ENVest vide, absent ou vautdevelopment, queEXPO_PUBLIC_POSTHOG_KEYsoit renseignée ou non. Seulspreviewetproductioncréent le client (si la clé est présente). Le journal consoleEXPO_PUBLIC_ANALYTICS_DEBUG=1continue de fonctionner en développement. La décision est une fonction pure testée (analytics.test.tsou voisin) : environnement vide,development,preview,production, avec et sans clé. apps/mobile/.env.example:EXPO_PUBLIC_POSTHOG_KEYlaissée vide en local, avec un commentaire qui dit que la clé est ignorée en développement et que les builds la reçoivent de l'environnement EAS du profil (preview→ projet staging,production→ projet production).- README (racine) : aucune clé PostHog en local ; un événement se vérifie d'abord dans le journal local (
EXPO_PUBLIC_ANALYTICS_DEBUG=1: nom, propriétés, consentement), puis son arrivée réelle sur un buildpreview, dans le projet « Widoo — staging ». - Hors périmètre : Sentry (inchangé, déjà séparé par
environment), création des projets et des clés.
Actions hors agents (Ilan ou Paul)
État au 2026-09-29, d'après le constat de Paul.
- Projet PostHog « Widoo - Staging » : existe (eu.posthog.com, organisation Inprogress Agency, seul projet de l'organisation). « Widoo - Production » : création reportée à la préparation de la production (v1.0), l'offre gratuite ne donnant qu'un projet et le second demandant une carte (décision de Paul) → Créer le projet PostHog Widoo - Production et poser sa clé dans EAS #264.
- Réglage D-019 « Discard client IP data » vérifié activé sur « Widoo - Staging ». Point « pas de PostHog AI » : abandonné par décision de Paul (aucun interrupteur dans PostHog, jugé sans importance) ; non vérifié.
- Poser les clés dans les environnements EAS
previewetproduction; aucune dans l'environnement EASdevelopment. Staging →previewau premier build preview : Poser les variables EAS preview et lancer le premier build preview Android #266. Production → Créer le projet PostHog Widoo - Production et poser sa clé dans EAS #264. - Clé retirée de
apps/mobile/.env.local(EXPO_PUBLIC_POSTHOG_KEYvide chez Paul). - Projet de la clé qui était dans
.env.localidentifié : « Widoo - Staging ». Les événements de la recette du 2026-09-25 (dontroute_sharedroute_id = probe) y sont restés, sans suppression : le projet staging sert à la recette (D-059).
Critères d'acceptation
- Règle des projets PostHog par environnement écrite dans le wiki (D-059)
- Aucun client PostHog en développement (
EXPO_PUBLIC_APP_ENVvide oudevelopment), même avec une clé renseignée : couvert par un test - Le client PostHog est créé en
previewet enproductionquand la clé est présente : couvert par un test - Le journal
EXPO_PUBLIC_ANALYTICS_DEBUG=1fonctionne toujours en développement -
apps/mobile/.env.exampleet README à jour - Événements de recette traités dans le projet concerné, ou constat qu'il ne s'agissait pas de staging ni de production (commentaire d'Ilan ou Paul ; ne bloque pas la PR) : commentaire de Paul du 2026-09-29, projet staging, événements conservés
Notes techniques
- Dépend de Instrumenter les événements analytics de la découverte #33 (PR chore(mobile): instrumenter les événements de la découverte #159, ouverte) : le journal
EXPO_PUBLIC_ANALYTICS_DEBUG=1, sa ligne dans.env.exampleet le paragraphe Analytics du README n'existent que sur sa branche, et les deux tickets touchentapps/mobile/src/analytics/index.ts. Partir demainaprès la fusion de chore(mobile): instrumenter les événements de la découverte #159. process.env.EXPO_PUBLIC_*doit être lu littéralement pour être inliné (apps/mobile/src/analytics/index.ts) ;EXPO_PUBLIC_APP_ENVest posé par profil dansapps/mobile/eas.jsonet déjà lu parapps/mobile/src/monitoring.- La PR ne manipule aucune clé réelle.
Activity
PaulThiberville commentedon Sep 28, 2026
@IlanAMG — DESIGN a publié la règle dans D-059 (Architecture-Technique › PostHog et Sentry par environnement). Le ticket passe
status:readypour la partie code : le garde-fou qui empêche tout envoi en développement ne dépend d'aucune des deux questions ci-dessous. Il attend la fusion de #33 (PR #159), dont il reprend le journal local.Deux questions restent ouvertes pour toi :
widoo-mobile,widoo-api) et sépare staging et production par le champenvironment, et écarte un projet Sentry par environnement. Tu confirmes ?Si ta réponse change la règle, DESIGN met à jour D-059 et le ticket suit. Les actions hors agents (créer les projets, poser les clés EAS, retirer la clé de
.env.local, traiter les événements de la recette du 25/09) sont listées dans le corps du ticket.PaulThiberville commentedon Sep 28, 2026
🔨 Démarrage — plan : branche
issue/162-posthog-dev-guardempilée surissue/33-discovery-analytics(PR #159). Fonction purechooseAnalyticsSinkdansapps/mobile/src/analytics: PostHog seulement siEXPO_PUBLIC_APP_ENVvautpreviewouproductionet que la clé est présente ; sinon journal console siEXPO_PUBLIC_ANALYTICS_DEBUG=1en développement, sinon rien. Tests sur la matrice environnement × clé. Mise à jour deapps/mobile/.env.exampleet du README (D-059). Vérification sur simulateur iOS avec la clé encore présente dans.env.local.PaulThiberville commentedon Sep 29, 2026
Constat du 2026-09-29, fait dans PostHog (eu.posthog.com, organisation Inprogress Agency).
apps/mobile/.env.localest celle du projet « Widoo - Staging », seul projet de l'organisation. Les événements de la recette du 2026-09-25, dont la sonderoute_sharedroute_id = probe, sont donc partis en staging, pas en production. Je ne les supprime pas : le projet staging sert à la recette (D-059).EXPO_PUBLIC_POSTHOG_KEYdans mon.env.local.previewau moment du premier build preview.PaulThiberville commentedon Sep 29, 2026
📋 MANAGER — mise à jour après le constat de Paul du 2026-09-29.
Cochés dans « Actions hors agents » : réglage « Discard client IP data » vérifié sur « Widoo - Staging » ; clé retirée de
.env.local; projet de la clé identifié (staging), événements de la recette du 25/09 conservés, puisque le projet staging sert à la recette (D-059). Le point « pas de PostHog AI » est noté abandonné par décision de Paul, pas vérifié.Critère coché : « Événements de recette traités », sur le commentaire de Paul. Les quatre critères de code restent à la PR #192.
Reportés, suivis à part pour ne rien perdre :
production, tableaux d'Analytics ; v1.0, epic Epic — Lancement Paris #12.widoo-mobiledans l'environnement EASpreview, premier buildpreviewiOS et Android ; v0.2, epic Epic — Carte et découverte #8. Il bloque désormais Vérifier les événements de la découverte dans PostHog staging #262.needs-design) : la règle « jeton Mapbox restreint aux bundle ids » est inapplicable, Mapbox n'offre pas cette restriction ; DESIGN tranche la règle et la rotation de l'ancien jeton par défaut du compte agence.#262 est recentré sur la vérification en staging ; ses tableaux production passent à #264.
Ce ticket reste ouvert : il se ferme par la fusion de la PR #192. Les lignes « création des projets » et « clés EAS » restent non cochées tant que #264 et #266 ne sont pas faits.
IlanAMG commentedon Oct 13, 2026
Chef de projet (point du 2026-10-13) : colonne À review → À déployer : ticket fermé par le merge, la colonne n'avait pas suivi. Il passe en Terminés après vérification en staging par Ilan ou Paul.