Commit graph

5 commits

Author SHA1 Message Date
Florian
9db5d4c204 fix(climato): fiabiliser les jours récents à couverture station partielle
Some checks failed
Deploy info-canicule / deploy (push) Failing after 4s
Les 1-2 derniers jours du flux climato `latest` ont souvent 0-1 station
publiée (parfois TN sans TX), produisant des agrégats département nuls ou
non représentatifs. Symptômes côté page dept : TX/TN vides ou tx==tn à
J-1/J-2 sur le graphe, et moyenne 3j/7j figée (computeAnomaly lisait
climato.days brut et retombait sur les mêmes vieux jours complets).

- climato.ts : exposer la couverture réelle par champ (txN/tnN, optionnels,
  rétro-compatibles avec le cache 24h).
- [code].astro : `_mergedDay` choisit par champ la source fiable —
  climato si couverture >= 50% de la médiane station du dept, sinon SYNOP
  (garde >= 3 obs/jour pour éviter tx==tn), sinon valeur fine, sinon null.
  Le badge anomalie utilise désormais les 7 derniers jours complets
  (finissant J-1) au lieu de climato.days brut, recollant graphe et badge.

Vérifié par simulation sur données réelles (depts 31/75/13) : jours pleins
inchangés (zéro régression), jours récents partiels comblés proprement.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 16:04:34 +02:00
Florian
15635ed0e3 feat(home): onglets Aujourd'hui / Demain pour la carte Vigilance
Some checks are pending
Deploy info-canicule / deploy (push) Waiting to run
Permet au visiteur de basculer entre la carte du jour et celle de J+1
(toujours présente dans le bulletin MF, sauf entre minuit et la pub de
6h où l'onglet est désactivé avec explication). Réutilise les helpers
existants (currentEcheance, maxColorByDepartement) — pas de fetch
supplémentaire, J et J1 sont déjà dans le snapshot.

Bonus :
- dayLabel calculé depuis "maintenant Paris" plutôt qu'un sample
  d'alerte → fonctionne en jour calme tout-vert.
- CLAUDE.md : clarifie que MF officiel est canonique et Opendatasoft
  fallback (au lieu de la formulation "le jour où on bascule").

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 00:47:56 +02:00
Florian
290f9be7b9 fix+perf: corrections de revue (currentEcheance, dayOfYear, SWR, last-good, doc apikey)
- vigilance: currentEcheance basée sur productDatetime (jour calme renvoyait J1 à tort)
- normales: dayOfYear extrait en Europe/Paris pour 'now' (UTC mélangeait les jours après minuit)
- meteofrance-auth + CLAUDE.md: header `apikey:` documenté correctement (pas Authorization Bearer)
- cache: SWR — envelope {v, fu}, hard TTL = ttl*6, refresh background avec lock anti-stampede
- vigilance: snapshot last-good (TTL 30j) écrit à chaque fetch, fallback final si MF+ODS KO
- vigilance: nettoyage variable url morte dans fetchOpendatasoft

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:58:03 +02:00
Florian
a849977fcc refactor(mf): API Key longue durée au lieu d OAuth2 client_credentials
Some checks are pending
Deploy info-canicule / deploy (push) Waiting to run
Le portail Météo France ne propose pas le flow client_credentials gratuit
(seulement token OAuth2 court 1h, pas viable, ou API Key longue durée).
On simplifie : un seul env METEOFRANCE_API_KEY → Authorization: Bearer.

- lib/meteofrance-auth.ts : suppression du cache token + flow refresh
- .env.tmpl : ref unique vers vault Infra/Météo France API/api_key
- vault item recréé avec api_key (hidden) + created_at + expires_at
- CLAUDE.md projet : section rotation API key

L onglet 24 h n apparaît qu une fois api_key non vide dans le vault.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 00:25:54 +02:00
Florian
e075d963bc init: info-canicule MVP (Vigilance + climato + conseils)
Astro 5 SSR + ioredis cache Valkey, déployable sur shared-net.
- Vigilance temps réel via Opendatasoft (no-auth, LOv2)
- Carte SVG des 96 départements (gregoiredavid/france-geojson)
- Climato T° 30j par dept (CSV.GZ Météo France, cache 24h)
- Conseils officiels par phénomène (7 types Vigilance)
- /api/health (UptimeRobot) + /api/vigilance (JSON public CORS *)
- Dockerfile multi-stage, CI Forgejo deploy.yml (pattern Reteno)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 18:17:56 +02:00