ADR 0020 — Retrait de Grafana Faro ; les funnels d'erreur basculent sur PostHog
Retire les ADR 0016 (télémétrie Faro) et 0017 (traces HTTP faro-web-tracing). Ne touche pas l'ADR
0016-outbound-date-serialization(collision de numérotation historique).
Contexte
Faro (ADR 0016/0017) fournissait une observabilité dev/staging uniquement, errors-only : erreurs (funnels handleError/logError, handler Vue, router.onError), sessions, events http_request et spans HTTP CLIENT sur échec, vers l'Alloy d'équipe (Loki/Tempo), derrière la façade feuille services/telemetry.ts.
Depuis, PostHog est en place (ADR 0019) avec sa propre façade feuille services/analytics.ts et captureError → posthog.captureException. Les deux systèmes remontaient les erreurs en parallèle (handler Vue) ; maintenir deux stacks d'observabilité — deux façades, deux collecteurs, deux paires de dépendances — fait double emploi.
Décision
Faro est retiré complètement ; PostHog (captureError) reprend les funnels d'erreur.
- Suppression totale :
services/telemetry.ts, les deux dépendances@grafana/faro-web-sdk/@grafana/faro-web-tracing(et leurs ~23 transitives@opentelemetry/*), la variableVITE_FARO_COLLECTOR_URL(.env.staging,env.d.ts), le test unitaire dédié. - Funnels d'erreur → PostHog :
captureError(étendu d'un paramètrepropsoptionnel, passé àposthog.captureException(err, props)) remplacetrackErrordanserror-handler.ts(handleError/logError), le handler Vue demain.tsetrouter.onError— avec les mêmes tags{ source, … }qu'avant. Différence de portée assumée : le reporting est désormais opt-in-gated (consentement analytics, ADR0019) et couvre tous les environnements, plus seulement dev/staging sans consentement. - Pertes assumées, sans remplacement :
- events
http_request+ spans HTTP CLIENT sur échec (les échecs HTTP remontent déjà enApiErrorpar les funnels d'erreur) — le wrapper de timingApiClient.request(), devenu un pass-through pur, est supprimé (performRequestrenommérequest) ; setViewpar navigation (router.afterEach) et le session tracking Faro ;- la corrélation user dev/staging (
setTelemetryUser/resetTelemetryUser) — PostHogidentifyUser/resetUserexiste déjà sur le chemin login/logout.
- events
Conséquences
- Plus aucune dépendance
@grafana/*/@opentelemetry/*; le collecteur Alloy (telemetry.internal.spektrum-suisse.ch) ne reçoit plus rien du mobile. - Une seule doctrine de façade subsiste :
patterns.md→ « Émettre de l'analytics produit » (la section « Émettre de la télémétrie » est supprimée). - Les erreurs des utilisateurs sans consentement analytics (ou avant consentement) ne remontent nulle part — console uniquement. C'est le prix accepté de l'alignement sur l'opt-in strict d'ADR
0019. - En dev local, plus aucun signal d'erreur distant (Faro était le seul canal hors console).

