You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
format de details d'un validation_error : details.issues[] = { location: body|querystring|params|headers, path: "steps.0.placeId", code, message } (ValidationIssue dans @widoo/shared) ;
identifiant app.widoo à valider avant la première publication. Une variante app.widoo.preview permettrait d'installer recette et production côte à côte.
C21.5 et C23.3 : eas init (Paul ou Ilan), variables EAS par environnement (EXPO_PUBLIC_API_URL en https, EXPO_PUBLIC_POSTHOG_KEY, EXPO_PUBLIC_SENTRY_DSN), build preview sur main
Activity
PaulThiberville commentedon Sep 23, 2026
Découvertes en mode CODE pendant #16 (PR #86), hors périmètre du ticket :
scripts/sync-project.shremet en « Prêts » les tickets en cours. La règle « issue ouverte +status:ready→ Prêts » ne regarde que le label, que CODE ne retire pas. Un ticket passé « En cours » ou « À review » par CODE revient donc à « Prêts » au prochain lancement du script en début de session MANAGER. Piste : ne poser « Prêts » que si le statut courant est vide, « Cadrage » ou « Prêts ».pnpm/action-setup@v4dans.github/workflows/ci.ymlbloque le passage à pnpm 11. L'action ne gère pnpm 11 qu'à partir de sa v6. Le socle est donc fixé en pnpm 10.34 (avecminimumReleaseAge: 1440). Monter l'action en v6 (PRarea:process, ou Dependabotgithub-actions) permettra de passer à pnpm 11.PaulThiberville commentedon Sep 23, 2026
Découvertes de #17 (PR #87 et #88), pour l'alignement du wiki :
author… ou « Widoo » pour un parcours officiel ». Le schémaRouteCardenvoieauthor: nullavecisOfficial: true, parce qu'un libellé affiché ne doit pas transiter comme donnée. À refléter dans la page.internal_errorajouté pour le 500 normalisé que demande Mettre en place l'API Fastify : health, config, erreurs, logs, OpenAPI #18 ; il n'est pas dans la liste des codes stables.packages/shared/src/labels/fr.ts(feat(shared): taxonomies, libellés français et seuils des buckets #87), en partie rédigés par l'agent. Ilan doit les valider, puis la page doit les lister.conditions: Filtres-et-Recherche indique OU dans le groupe Conditions, alors que Modele-de-Donnees (requête centrale) utilise@>, soit toutes les conditions demandées. Il faut trancher avant le ticket de recherche.reasonde la card (« À 600 m », « Très bien noté ») : il faut des codes et leurs libellés, pas une phrase envoyée par l'API. Non défini dans le wiki, donc laissé hors deRouteCard. De même poureffort(easy,moderate,intense) et les libellés du tri.PaulThiberville commentedon Sep 23, 2026
Découvertes de #18 (PR #89, #90, #91), hors périmètre du ticket :
TRUST_PROXY(ticket de déploiement staging). La limitation de débit compte par IP cliente ; derrière le front-end Google,X-Forwarded-Forn'est lu que si le pair direct figure dansTRUST_PROXY(IP, CIDR oulinklocal…). Fastify 5.12 a supprimé la confiance par nombre de sauts, usurpable. Sans cette variable, tous les clients partagent la même clé et la limite de 1 000/min devient globale. Proposition : constater l'adresse du pair au premier déploiement staging, puis fixer la variable dans la configuration Cloud Run. Autre point : le compteur est en mémoire, donc par instance.GET /v1/healthrépond 503 quand la base est injoignable (utile au monitoring). Si on en fait la sonde de démarrage ou de vivacité, une panne de base fait redémarrer les instances en boucle. Proposition : garder la sonde TCP par défaut, ou demander une route de vivacité sans base dans le ticket de déploiement.node:22-bookworm-slim,infra/api.Dockerfile). Proposition : épinglage par digest et Dependabotdocker(etgithub-actions, voir le point 2 du commentaire de Initialiser le monorepo pnpm + Turborepo avec lint, types et tests #16) dans une PRarea:process.detailsd'unvalidation_error:details.issues[]={ location: body|querystring|params|headers, path: "steps.0.placeId", code, message }(ValidationIssuedans@widoo/shared) ;messagedes erreurs en anglais, message technique : l'app affiche un libellé français choisi d'aprèscode;GET /health(200ok/up, 503degraded/down) absente de la page ;GET /config:{ minAppVersion, taxonomies, labels: { fr }, thresholds }(schémaAppConfigdeshared),minAppVersionpris dans la variableMIN_APP_VERSIONtant que la tablesettingsn'est pas lue.PaulThiberville commentedon Sep 23, 2026
Découvertes de CODE pendant #19 (modèle de données, PR #92, #93, #94) :
Pour DESIGN — aligner Modele-de-Donnees sur le schéma livré (
apps/api/src/db/schema.ts, #93) :places.price_range(free, low, medium, high) n'avait pas de taxonomie dansshared: ajoutĂ©e (priceRanges), libellĂ©s rĂ©digĂ©s par CODE, Ă valider par Ilan : « Gratuit », « Bon marchĂ© », « Prix moyen », « Haut de gamme ». Le tableau Taxonomie de Filtres-et-Recherche ne la mentionne pas.place_hoursa une colonneid(plusieurs crĂ©neaux par jour, pas de clĂ© naturelle) ;settingsaupdated_at.routes.status = draft,access = free,transport = walk,cities.is_active = false,users.is_public = true,trust_score = 1;places.verification_statussans dĂ©faut (qui crĂ©e un lieu dit s'il est vĂ©rifiĂ©).routes.author_id,places.created_by,media.uploaded_bypassent ĂnullĂ la purge d'un compte : que devient un parcours publiĂ© dont l'auteur est purgĂ© (reste publiĂ© sans auteur, dĂ©publiĂ©) ? Règle Ă Ă©crire dans Securite-et-RGPD ou Creation-et-Moderation.uuidv7()avant Postgres 18).Pour MANAGER :
db:seedest refusé avecNODE_ENV=production(il insère des lieux et un parcours fictifs). La ville elle-même devra être créée en production autrement (migration de données ou admin) avant le lancement : pas de ticket aujourd'hui.0000_extensionsfaitCREATE EXTENSION IF NOT EXISTS postgisetpg_trgm; l'utilisateur qui lancenode dist/migrate.jsdoit avoir le rôlecloudsqlsuperuser(ou les extensions créées au provisionnement).routes.boundsdevient un polygone de surface nulle, que PostGIS stocke et queST_Intersectstrouve, mais qu'il déclare invalide. À traiter par le calcul d'emprise de l'orchestration (petite marge autour des étapes).drizzle-kit(dev) →@esbuild-kit/esm-loader→esbuild0.18.20, GHSA-67mh-4wv8-2f99 (serveur de développement d'esbuild). Sans impact : ce serveur n'est jamais lancé et le paquet n'est pas dans l'image. Non bloquant selon SECURITY.md ; à suivre en dette si souhaité (disparaît avec drizzle-kit 1.0).PaulThiberville commentedon Sep 23, 2026
📥 Découvertes de #20 (PR #95, #96, #97), hors périmètre :
Purge des comptes supprimés (MANAGER, ticket à créer) :
DELETE /v1/mefait un soft delete avec anonymisation. Il manque la tâche planifiée (Cloud Scheduler → endpoint interne protégé par un jeton de service) qui supprimera :usersdontdeleted_atdate de plus de 30 jours (routes.author_id,places.created_byetmedia.uploaded_bypassent alors à null) ;Suppression du compte Firebase (décision d'Ilan). Deux options :
user.delete()après une ré-authentification récente, plus la révocation Sign in with Apple exigée par Apple ;deleteUserde firebase-admin, ce qui demande le rôle IAM « Firebase Authentication Admin » pour le compte de service Cloud Run.Tant qu'aucun des deux ne le fait, un utilisateur qui se reconnecte avec le même compte Firebase avant la purge reçoit 401 « Account deleted ».
modedeDELETE /me(page wiki API : anonymiser ou supprimer ses parcours publiés) : non implémenté. À ticketer avec la création de parcours.Avatar (DESIGN puis MANAGER) :
PATCH /men'accepte que le retrait (null). Poser un avatar suppose le pipeline d'upload (URL signée, réencodage) ; aujourd'hui,media.owner_typen'a pas de valeuruser. Par ailleurs,@google-cloud/storageest exclu parignoredOptionalDependencies(pnpm-workspace.yaml) : il faudra le déclarer explicitement dansapps/apiavec le ticket d'upload.Hiérarchie des rôles (DESIGN, wiki Compte-et-Monetisation) : implémentée avec
adminqui détient tous les rôles, eteditoretmoderatordistincts, aucun n'impliquant l'autre. À confirmer et à écrire dans le wiki.Préférences de notification (DESIGN, E-09) : clés proposées
plannedRouteReminders,creatorPushetcreatorEmail, vraies par défaut. À valider avec la maquette.Wiki Securite-et-RGPD (DESIGN) : le tableau des durées indique « vie du compte + 30 jours » pour l'e-mail, le prénom et l'avatar. L'implémentation les efface dès la suppression et ne garde que l'uid Firebase jusqu'à la purge. Aligner le tableau.
GET /me: les compteurs du mois et les limites (page wiki API) seront à ajouter avec les tickets des favoris et de la programmation.Déploiement (Ilan ou Paul) :
FIREBASE_PROJECT_IDest désormais obligatoire pour démarrer l'API ; staging et production ont chacun le leur.FIREBASE_AUTH_EMULATOR_HOSTne doit jamais être défini hors local : il est refusé en production.PaulThiberville commentedon Sep 23, 2026
📥 Découvertes de #21 (PR #98, #99, #100, #101), hors périmètre :
Pour DESIGN
lineHeightfixé dans le thème grandit moins vite que la taille de police : le jambage du « g » de « Configuration » était rogné à 150 %. Le thème de l'app n'impose donc plus de hauteur de ligne (feat(mobile): thème de l'app et barre d'onglets E-01 #100). Règle à ajouter aux « règles pour le code » : pas delineHeightfixe sur un texte qui suit la taille système.expo-symbols) n'existent qu'en contour. À valider, ou prévoir des icônes maison dans le design system (Mettre à jour Direction-Artistique et le design system Widoo selon D-003 #81).#F2592A(favori, Gastronomie), utilisé seulement pour des icônes et des composants (3,4:1 sur blanc, jamais du texte). Direction-Artistique indique encore « Fond#FAF9F6» et « accent à définir » : déjà couvert par Mettre à jour Direction-Artistique et le design system Widoo selon D-003 #81, à confirmer à cette occasion.Pour MANAGER
4. La barre d'onglets est dans le flux, sous l'écran : il faudra la faire flotter au-dessus de la carte et de la sheet, comme sur la maquette E-01. À prévoir dans #26 ou #28, avec une marge basse pour le contenu.
5. EAS, pour Ilan ou Paul :
eas initdansapps/mobile(écrit leprojectId) ;EXPO_PUBLIC_API_URLdes environnements EASpreview(API staging, Déployer l'API en staging sur GCP : Cloud SQL, Cloud Run, Secret Manager #24) etproduction, enhttps://sinon l'app refuse de démarrer ;app.widooà valider avant la première publication. Une varianteapp.widoo.previewpermettrait d'installer recette et production côte à côte.eas.jsondéclare les canauxstagingetproduction(Architecture-Technique), maisexpo-updatesn'est pas installé et demande leprojectId. Ticket à créer.sharedutilisée par l'API et le client, serait plus robuste. Petite PR API + shared.decode-uri-component≤ 0.4.2, viaexpo-router > query-string: déni de service sur une URL malformée ; un lien profond piégé pourrait figer l'app, sans accès ni donnée ;uuid< 11.1.1, via@expo/config-plugins > xcode: outil de build seulement.À suivre en dette si souhaité ; à revérifier avec le SDK 58.
PaulThiberville commentedon Sep 23, 2026
📥 Découvertes de #23 (PR #105), hors périmètre :
Pour Ilan
gh repo view:visibility: PUBLIC), alors queCLAUDE.mdle décrit comme « Dépôt privé ». À confirmer. S'il reste public, vérifier dans Settings › Actions, que je ne peux pas lire (403) : « Workflow permissions » en lecture seule, et approbation des workflows lancés par des contributeurs externes.mainqui restent manuels sont listés dans la PR chore(process): fiabiliser Diff size et pr-policy, documenter la CI #105, section Risque.Pour MANAGER
3. Build EAS preview sur
main: la page wiki Architecture-Technique › Qualité l'annonce (« build EAS preview surmain»), mais il n'est pas dansci.ymlni dans #23. Il dépend deeas initet des variables EAS (voir les découvertes de #21, point 5). Ticket à créer.4. Une PR qui modifie
.github/workflows/ci.ymlne lance pas son propre jobLint, types, tests. L'étapeDetect code to verifyclasse tout.github/en process et répond vert sans rien lancer : une erreur dans une étape pnpm deci.ymlne se verrait qu'à la PR de code suivante. Piste : compter.github/workflows/comme du code dans ce filtre. Petite PRarea:process.PaulThiberville commentedon Sep 23, 2026
Découvertes de CODE pendant #22 (PostHog et Sentry avec consentement) :
DESIGN — aucune maquette de bannière de consentement. Ecrans n'a pas d'écran pour le consentement. #107 livre une bannière sobre avec les composants existants :
À maquetter et à identifier (nouvel écran ou état de E-01), textes compris.
DESIGN / RGPD — aucun endroit pour changer d'avis. E-09 (Profil et réglages) ne prévoit pas d'entrée « Mesure d'audience » ou « Confidentialité ». Le retrait du consentement doit être aussi simple que son recueil. Le code sait déjà le faire (
consent.set('denied'): arrêt de PostHog et effacement de son identifiant) ; il manque l'écran. À prévoir avant la soumission aux stores.DESIGN — Analytics en retard sur E-01 (D-004).
view_switched(bascule carte / liste, retirée),weather_banner_shown/weather_banner_tappedetfilters_applied.source = weather(chip météo retirée).sheet_level(les trois crans de E-04),creator_profile_opened.source,place_confirmed/place_reported.context,weather_banner_*.condition.packages/shared/src/analytics.ts(#106) suit la page telle quelle ; les valeurs non énumérées y sont desstring.Sentry — reste à régler hors code (comptes interdits à CODE), détaillé dans #108 et #109 :
beforeSendJavaScript : ils portent l'identifiant d'installation aléatoire du SDK, sans e-mail ni jeton, mais le filtrage serveur est la seule barrière pour eux.Process — un
pnpm --filter api devtournait déjà depuis 13:01, lancé par une session précédente et resté ouvert (port 8080). Je l'ai utilisé puis arrêté en fin de session.PaulThiberville commentedon Sep 23, 2026
📥 Découvertes de CODE pendant #24 (PR #110, #111, #112), hors périmètre :
Pour Ilan (décisions et réglages)
infra/gcp/3-run.sh.widoo,cloudsqlsuperuser) pour la migration et le service : le runtime a les droits DDL. Acceptable en staging (données fictives). Avant la production, créer un rôle d'exécution limité aux lectures et écritures (SQL, pasgcloud), avecALTER DEFAULT PRIVILEGES, et un secret distinct pour le job. Ticket à prévoir avec la production.sslmode=require, trafic interne au VPC).verify-fulldemanderait d'embarquer l'autorité de Cloud SQL dans l'image : à trancher pour la production.Pour MANAGER
4.
TRUST_PROXY=linklocalest une hypothèse (adresse du frontal Cloud Run), à confirmer au premier déploiement seloninfra/README.md› « Vérifier les critères de #24 ». Le compteur de débit reste par instance (point 1 du commentaire de #18).5. Secret Mapbox serveur non créé : l'API ne lit aucune clé Mapbox. Il faudra l'ajouter avec le ticket Directions et Geocoding côté API (
2-database.shpour le secret,3-run.shpour le monter).6. Dependabot
dockeretgithub-actions: l'image de base est maintenant épinglée par digest et les actions dedeploy-staging.ymlpar SHA. Sans Dependabot, rien ne signale leurs mises à jour de sécurité. Petite PRarea:process(voir aussi le point 3 du commentaire de #18).7.
shellchecketactionlinthors CI. Les scriptsinfra/gcp/*.shet les workflows ne sont vérifiés qu'en local.shellcheckest déjà présent sur les runners Ubuntu. Étape de CI à ajouter, dans la même PRarea:processque le point 4 du commentaire de #23.8. Déploiement sans nouvelle CI sur
main: le commit fusionné part en staging sur la foi des checks de sa PR. Si c'est jugé insuffisant, faire dépendredeploy-staging.ymldeci.yml(workflow_run, à cadrer : ce déclencheur a ses propres pièges).PaulThiberville commentedon Sep 23, 2026
→ #113 pour le point 1 du commentaire du 2026-09-23 (découvertes de #16) :
sync-project.shne fera plus reculer un ticket « En cours » ou au-delà . En attendant la fusion, ne lancer niscripts/sync-project.shniscripts/validate-design.sh.Seul le point 1 est traité ici. Le point 2 (
pnpm/action-setupen v6 pour passer Ă pnpm 11) reste Ă trier.PaulThiberville commentedon Sep 23, 2026
📥 Découverte de CODE pendant #113 (PR #114) :
gh project item-listne renvoie pas un item récent.Constat : #113, créé à 13:38 UTC, est bien dans le Project « Widoo — MVP » (lu par GraphQL : item
PVTI_lADOBx-85s4BkNm_zg8VnZo, non archivé, Status posé à la main). Pourtant, plus de 12 minutes après,gh project item-list 1 --owner Inprogress-Agencyne le renvoie pas etitems.totalCountreste à 76.scripts/sync-project.shaffiche donc à tort « #113 : absent du Project (le workflow Auto-add l'ajoutera) » et ne le traite pas. Même effet dansproject_statusdescripts/validate-design.sh(« item introuvable »). Aucune écriture fautive : l'item est ignoré, pas modifié.Proposition : vérifier si le décalage se résorbe (délai d'indexation GitHub). S'il dure, chercher l'item par l'issue (
issue.projectItemsen GraphQL) quand la liste ne le contient pas, et reformuler le message « absent du Project ».PaulThiberville commentedon Sep 23, 2026
Découverte (mode CODE, pendant la reprise de #105 pour #23) : l'étape « Detect code to verify » de
.github/workflows/ci.ymlliste les fichiers modifiés par un diff à deux points (git diff --name-only "$BASE" "$HEAD", clone de profondeur 1). C'est le défaut que #105 corrige dansDiff size: quand la base d'une PR empilée a avancé, la liste compte aussi les fichiers changés sur la base depuis la création de la branche.Effet : sans risque pour la sécurité, car la liste est un sur-ensemble et le job ne saute jamais une vérification due. En revanche, une PR de documentation ou de process empilée sur une base qui a bougé lance le lint, les types et les tests complets pour rien. Correctif possible : mesurer depuis le point de divergence (
BASE...HEAD), ce qui demande plus d'historique que--depth=1. Non traitĂ© dans #105, qui ne touche pas Ăci.yml.PaulThiberville commentedon Sep 24, 2026
🧠Passation pour MANAGER — fin de l'epic Socle technique (2026-09-24)
L'epic #13 est fermé. Voici le tri proposé de toutes les découvertes encore ouvertes de cette Inbox, préparé en session LIBRE. Seul le point 1 du commentaire de #16 est déjà traité (→ #113). Référence des commentaires : C16 = découvertes de #16, C17 = #17, C18 = #18, C19 = #19, C20 = #20, C21 = #21, C23 = #23, C22 = #22, C24 = #24, C113 = #113, C105 = #105.
1. Déjà réglé pendant la session (répondre « réglé » sans ticket)
TRUST_PROXYinfra/README.md(ticket d'outillage ci-dessous)3-run.sh(#111)dockerreste à faire (ci-dessous)cloudsqlsuperuserpour les extensionsFIREBASE_PROJECT_IDau déploiement3-run.sh(widoo-staging)2. Nouvel epic « Exploitation et outillage » (v0.2, D-022) — à créer, puis ses tickets
pnpm/action-setupv6 et passage à pnpm 11dockeretgithub-actionsshellchecketactionlinten CI ; « Detect code to verify » (une PR qui modifieci.ymlne se vérifie pas, diff à deux points)a26ce89; décider s'il doit attendre la CI demain; mettre à jourTRUST_PROXYdansinfra/README.mdeas init(Paul ou Ilan), variables EAS par environnement (EXPO_PUBLIC_API_URLen https,EXPO_PUBLIC_POSTHOG_KEY,EXPO_PUBLIC_SENTRY_DSN), buildpreviewsurmainexpo-updatespour l'OTASENTRY_AUTH_TOKENen secret EAS)gh project item-listne renvoie pas les items récents ; chercher l'item parissue.projectItemsen GraphQL dans les scriptsdecode-uri-componentetuuidvia Expo), en dette suivie3. Epics existants
db:seedest refusé (NODE_ENV=production) — la base de staging est vide aujourd'huiconditionsavant le ticket de recherche ; C17.5 : codes dereason,effortet libellés du tri ; C17.6 : source de l'arrondissement et du quartier ; jetonsmood-*du thème (D-016)account_deletedpartagé ; C22.2 et D-018 : retrait du consentement dans E-09 ; C20.8 : compteurs deGET /me(avec favoris et programmation)modedeDELETE /mepour les parcours publiésapp.widooavant la première publication ; C21.9 : icône et démarrage (#61)4. Pour DESIGN (tickets
needs-design)author: null+isOfficial), C17.2 (internal_error), C18.4 (format devalidation_error,/health, forme de/config)priceRanges)lineHeightfixe), C21.2 (icônes Android en contour), C21.3 (fond blanc et accent corail)view_switched, événements météo, valeurs non énumérées)5. Pour Ilan
main(rebase and merge seulement, approbation, code owners)Mise en garde pour la prochaine session
sync-project.shne fait plus reculer un ticket parti en développement (Préserver les statuts avancés dans sync-project.sh #113) ; il peut être lancé.git rebase --onto origin/main <ancienne pointe>puispush --force-with-leasepar Paul ; script réutilisable dans~/widoo-merge-stack.shsur le poste de Paul.222 remaining items
PaulThiberville commentedon Oct 15, 2026
💡 Découverte (CODE, #475, PR #480) —
area:api: limiter le débit des 401 répétés d'un même jeton.Contexte : avant #480, un téléphone dont le compte venait d'être supprimé envoyait environ 8
GET /v1/mepar seconde à l'API de staging (499 refus 401 par minute, constatés par Paul le 2026-10-15). En local, sur le code d'avant le correctif : 93 à 97GET /v1/meen 401 en 8 s. #480 corrige le client, mais un ancien build resté installé (ou un autre client défaillant) peut toujours reproduire ce débit.Proposition, à ticketer à part : un plafond par jeton ou par
uid, plus bas queRATE_LIMIT_MAX, sur les réponses 401 « Account deleted » et « Missing bearer token », avec unRetry-After. Rien n'est codé dans #480.PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #180, PR #482) — attribution des données d'Île-de-France Mobilités à afficher dans l'app : l'accès calculé vient du jeu « Gares et stations du réseau ferré d'Île-de-France (par ligne) » d'IDFM, sous Licence Ouverte v2.0 (Etalab) (pas ODbL). La licence demande de mentionner la paternité : la source et la date de dernière mise à jour (aujourd'hui 2025-12-10, portée par
apps/api/src/transit/generated/stations.json). Proposition à trancher par DESIGN/Ilan : une ligne « Données : Île-de-France Mobilités, Licence Ouverte, mise à jour du 10 déc. 2025 » dans les mentions légales ou « À propos » (wiki Conditions-d-utilisation / Politique), éventuellement « Source : Île-de-France Mobilités » sous l'accès de E-05. À reporter aussi dans Architecture-Technique (données ouvertes, licences), qui ne cite pas encore cette source.PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #180, PR #482) — l'accès calculé n'atteint pas encore l'app :
routes.computed.accessest écrit ({ station, lines: [{ mode, line }], distance_m }), mais (1) la ficheRouteDetail.startAccessn'est servie que par les fixtures de l'app (startAccess: null), en attendantGET /v1/routes/:id; sonlines: string[]sans mode ne permet pas « Métro Abbesses, ligne 12 » de la maquette (D-052,mappings.access), et l'app affiche aujourd'hui « {{station}} ({{lines}}) » sans la distance « à 50 m du départ » ; (2) la réponse de l'éditeur (OwnRoute.computed, E-11 « Calculé pour vous ») ne porte pas l'accès. À ticketer : exposer l'accès avec son mode dansRouteDetailetRouteComputed, et l'afficher selon la maquette.PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #180, PR #482) — rafraîchissement des stations et recalcul hors éditeur : (1) les stations IDFM se rafraîchissent en relançant
pnpm --filter @widoo/api transit:importpuis en ouvrant une PR ; une action planifiée (trimestrielle, sur le modèle desync-tokens.yml) qui ouvre cette PR serait une PRarea:processà décider ; (2) seul l'enregistrement de l'éditeur (writeInPlace) et le seed écriventcomputed.access: la validation d'une révision par la modération (PR #365) et le recalcul de nuit (Orchestration › Recalcul périodique) devront le recalculer avecaccessColumnOf, y compris après un rafraîchissement des stations. (3) Le Modele-de-Donnees pourrait préciser la forme decomputed.access(DESIGN).PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #189, PR #484) : copie livrée des textes légaux à tenir au niveau de l'API. L'app embarque les réponses de
GET /v1/legal/:doc?locale=frdansapps/mobile/src/legal/generated/*.json, pour un premier lancement hors connexion (E-19, D-063). Rien ne vérifie qu'elles suiventapps/api/src/legal/texts/: un nouveau texte (nouvelle version) laisse l'ancienne copie dans les builds suivants tant que personne ne la régénère. Piste : une commande de l'API qui l'écrit, commefixtures:route-sheets, et un test qui compare les versions. Même question pour les textes anglais quand ils existeront.PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #189, PR #484) : la sheet de connexion E-10 et la sheet « Mesure d'audience » ouvrent encore les textes légaux sur le site. D-063 les veut en écrans natifs, désormais disponibles (
/settings/terms,/settings/privacy-policy) ; seuls les Réglages et la page Confidentialité y mènent dans #484.src/auth/links.ts(TERMS_URL,PRIVACY_URL) reste utilisé par E-10.PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #189, PR #484) : notifications du téléphone et permission Android. L'app ne déclare pas
android.permission.POST_NOTIFICATIONS: sur Android 13 et plus, elle ne peut pas notifier, et Réglages › Notifications affiche toujours l'encart « coupées » avec des interrupteurs inactifs. La déclaration, la demande (premier « Programmer ») et la lecture de l'état sur iOS (getPermissionsAsync, D-061) relèvent de #44 : à y ajouter si ce n'est pas prévu, avec le remplacement dereadPhoneNotifications(src/settings/phoneNotifications.ts).PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #189, PR #484) : assets et réglages qui manquent pour E-19 et E-20. (1) Logo Apple officiel et « G » de Google pour la carte de Réglages › Connexion (D-062, à reporter) : une icône
keyles remplace. (2)ios.appStoreUrldansapp.jsondès que la fiche App Store existe : « Mettre à jour » ouvre une recherche « Widoo » d'ici là . (3)GET /configrépondcache-control: max-age=300: en recette, un abaissement deminVersionn'atteint une app déjà lancée qu'après ce délai côté client ; à garder en tête pour une version bloquante en urgence.PaulThiberville commentedon Oct 15, 2026
Constat (CODE, #189) : disque du Mac plein pendant la recette (100 %, Docker Desktop ne répondait plus,
docker execbloqué). L'agent a supprimé ses propres artefacts de build (DerivedData de son worktree, intermédiaires Gradle) : 5,9 Go libres ensuite. Trois autres dossiers~/Library/Developer/Xcode/DerivedData/Widoo-*font environ 3,5 à 3,9 Go chacun ; leur nettoyage revient à Paul.PaulThiberville commentedon Oct 15, 2026
Tri MANAGER du 2026-10-15 (après-midi), découvertes de CODE pendant #180 (PR #482), #189 (PR #484) et #475 (PR #480). Tickets sans jalon (backlog), Epic posé dans le Project et dans la liste de l'epic.
#180
needs-design, P2, epic Epic — Fiche parcours et orchestration #9 (emplacement, texte, et ajout de la source à Architecture-Technique par DESIGN).GET /routes/:id) et #436 (forme decomputed.accessà reporter dans Modele-de-Donnees).type:chore,area:api, P3,needs-design, epic Epic — Fiche parcours et orchestration #9.#189
status:ready, P3, epic Epic — Compte et profil #6.type:polish,status:ready, P3, epic Epic — Compte et profil #6.POST_NOTIFICATIONSet état iOS des notifications → commentaire sur #44.ios.appStoreUrl, cache de/config→ #489,needs-design, P3, epic Epic — Compte et profil #6.type:polish, P2,needs-design, epic Epic — Compte et profil #6.app.versionsen staging pour vérifier E-20 → #491,human(Paul),area:infra, P2, epic Epic — Socle technique #13 ; la commande SQL et son retour arrière sont dans le ticket (aucun script dans le dépôt).#475
type:chore,area:api, P2,needs-design, epic Epic — Socle technique #13.Non traités dans ce tri
GET /users/:id/profile(pour DESIGN) : pas encore de ticket.PaulThiberville commentedon Oct 15, 2026
Bilan de mi-journée, 2026-10-15
Relevé MANAGER vers 13:45Z, d'après
gh pr list --state merged --search "merged:2026-10-15",deploy-staging.ymlet le Project « Widoo — MVP ».PR fusionnées aujourd'hui (8)
/meDéploiements staging verts sur chaque commit, dernier
be0d461(run 38738774809) ;/v1/healthrépondok, baseup.Terminés
Recette de Paul sur le build preview
98b537be(Redmi Note 9, vers 13:40) et celle de ce matin sur858b93ac: #387, #41, #198, #474, #475, #476, #65, #128 ; plus #471 (staging vérifié, profil public ouvert sur appareil). Aucun 401 sur staging en 10 minutes après la suppression d'un compte (480/min ce matin), aucun nouvel événement Sentry.Encore « À déployer », et pourquoi
computed.access. Reste à faire :infra/gcp/demo-seed.sh load(ou réenregistrer un parcours), puis vérifier en base.app.versionsen staging (#491).Décisions d'Ilan toujours ouvertes
#393 (contrat de la fiche, P0) · #383 · #413 · #414 · #417 et #460 · #418 · #433 · #434 · #435 · #436 · #438 · #446 · #447 · #450 (Brevo) · #457 · #464 · #466 (suppression livrée par #461, dont les trois choix de la PR) · D-088 (vélo, voiture, arrondi) · #470 · #472 · #477.
Nouveaux : #485 (attribution IDFM) · #486 · #489 · #490 (questions fréquentes) · #492.
Sortis depuis hier : #392 fermé ; #394 passé
status:ready. #397 est bloqué par l'expéditeur Brevo (#467).Actions humaines restantes de Paul
brevo-api-keydans Secret Manager.~/Library/Developer/Xcode/DerivedData/Widoo-*sur son Mac (environ 3,5 à 3,9 Go chacun ; 9 Go libres seulement).app.versionsen staging et vérification de E-20 : #491.PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #188, PR #494) : les rappels du premier « Programmer » (E-18) ne sont pas livrés par #188. La sheet « Recevoir un rappel ? », la demande d'autorisation des notifications et « Rappels désactivés » avec « Activer » dans Votre sortie (E-08) restent à faire. Sur iOS, demander l'autorisation exige un module natif (
expo-notifications, nouvelle dépendance, droitaps-environmentet nouveau build), qui est aussi celui de la réception des push de #44 ; sur Android 13+, il faut aussi déclarerPOST_NOTIFICATIONS(découverte de #189). Tokens prêts :mappings.firstLaunch.reminderPermissionetstates.notificationsOff. #188 se fermera au merge de #494 sans cette partie : un ticket est à ouvrir, lié à #44.PaulThiberville commentedon Oct 15, 2026
Découverte (CODE, #188, PR #494) : états de E-18 non livrés, faute d'en-tête E-01 dans le code. L'accueil n'a pas de barre du haut (« Bonjour », bouton connexion, ligne « Paris 10e · République · 22 °C ») : (1) au premier lancement hors connexion, l'en-tête « Hors connexion » (wifi barré) et la carte en fond uni ; (2) position approximative : zone
blueà 12 % bordée deblue1,5 px à la place du point (le puck Mapbox ne la dessine pas ainsi), « Autour de Paris 10e » dans l'en-tête, lecteur d'écran « Votre position, approximative » ; (3) précision temporaire iOS demandée au lancement d'une sortie (E-07). Aussi : pendant la demande de position, l'accueil affiche un fond gris uni et non l'accueil en chargement de E-01 (squelettes). À ticketer avec l'en-tête de E-01 et E-07.PaulThiberville commentedon Oct 15, 2026
Constat (CODE, #188) : pas de recette possible sur ce Mac le 2026-10-15 vers 16 h. (1) Disque : 8 Go libres au départ ; un build iOS de dev complet (Pods + DerivedData) en consomme environ 7,5, le disque est tombé à 0,8 Go et l'agent a arrêté son build et supprimé ses propres artefacts (6 Go libres ensuite). Quatre dossiers
~/Library/Developer/Xcode/DerivedData/Widoo-*d'autres sessions font 3,5 à 3,9 Go chacun, plusModuleCache.noindex(1,9 Go) : leur nettoyage revient à Paul. (2) Docker Desktop ne répond plus : le port 5432 accepte la connexion mais Postgres ne répond pas,docker psreste bloqué ; l'agent a tentéquit app "Docker"puisopen -a Docker, sans effet (les processus n'ont pas changé), puis s'est arrêté là . Un redémarrage de Docker Desktop revient à Paul.PaulThiberville commentedon Oct 15, 2026
Tri MANAGER du 2026-10-15 (fin d'après-midi) : les découvertes restées non traitées au tri de 13:33Z, plus celles de #188 (PR #494).
Recette de #474
type:bug,area:mobile, P3,status:ready, v0.3, epic Epic — Compte et profil #6.#471 (PR #473)
GET /users/:id/profile→ Aligner la page API sur GET /users/:id/profile livré par #471 #498,type:chore,area:api, P3,needs-design, epic Epic — Compte et profil #6. Je ne l'ai pas rattaché à Aligner API, Orchestration, Modele-de-Donnees et Compte-et-Monetisation sur l'édition livrée par #48 #436, qui porte l'éditeur livré par Gérer PUT /routes/:id/steps, submit, statuts et lien privé #48. Point 1 (verifiedPlaces) : critère ajouté à Enregistrer confirmations et signalements de lieux avec pondération et statuts #49. Point 2 (routesCompleted) : Calculer les parcours réalisés depuis les sorties terminées #423 le couvre déjà .#188 (PR #494)
type:feature,area:mobile, P1, v0.4, epic Epic — Programmer, partir et noter #14. Il eststatus:blocked, déclaré bloqué par Envoyer les rappels push des parcours programmés (veille 18:00 et H-1) #44 (moduleexpo-notifications,POST_NOTIFICATIONS). Le partage est commenté sur Envoyer les rappels push des parcours programmés (veille 18:00 et H-1) #44.type:feature,area:mobile, P2,needs-design, epic Epic — Carte et découverte #8. La barre du haut de E-01 est validée au wiki, mais aucun ticket ne la construit, et son bouton notifications n'a pas de destination. Le ticket sera découpé à la libération.Fixes #188.~/Library/Developer/Xcode/DerivedData/Widoo-*(quatre, de 3,5 à 3,9 Go chacun) etModuleCache.noindex(1,9 Go), puis redémarrer Docker Desktop. Tant que ce n'est pas fait, aucune recette iOS n'est possible sur ce Mac.#199 (PR #493)
Toujours en attente de DESIGN : Profil de Widoo sans identifiant.