Skip to content

feat(weather-ai): couches précipitation et vent à 10 m - #152

Merged
citarf merged 7 commits into
mainfrom
citarf/maps-wai-wind-precip
Oct 24, 2026
Merged

citarf merged 7 commits into
mainfrom
citarf/maps-wai-wind-precip

Conversation

@citarf

@citarf citarf commented Oct 24, 2026

Copy link
Copy Markdown
Collaborator

Contexte

weather-ai#318 publie dans weather_ai_wnc_mini deux nouvelles couches : precipitation (cumul en mm sur les 6 h qui précèdent l'échéance, facteur OM 10) et wind_u_component_10m / wind_v_component_10m (m/s, facteur 100). Source : docs/agents/lac/couches-carto.md de weather-ai, section « Couches maps vent à 10 m et précipitation 6 h ».

Le sélecteur de variables suivait déjà variables de latest.json/meta.json. Les palettes (precipitation en mm/h, vent en m/s) et le rendu du vent (vitesse, direction, flèches) viennent du package, sans échelle à ajouter. delta_time_hours=6 est bien posé, y compris à +6 h.

Changements

  • WEATHER_AI_FIELDS porte maintenant le libellé et les variables .om de chaque champ. L'onglet Cyclones IA n'annonce que les champs listés par le latest.json public (fetchWeatherAiVariables + weatherAiFieldLabels). Si le bucket ne répond pas, il annonce les trois champs de base, sans erreur.
  • Précipitation libellée comme un taux moyen : la bande de contexte affiche « Précipitations (mm/h) · taux moyen sur les 6 h précédentes » (weatherAiVariableNote).
  • Anciens runs (reçu /1, t2m seule) : au changement de run, time-selector.svelte appelle maintenant matchVariableOrFirst(). Si la précipitation ou le vent est affiché et que le run choisi ne le publie pas, la carte bascule sur pressure_msl au lieu de lancer une lecture en erreur. Les flèches de repli n'étaient déjà demandées que si wind_u_component_10m est publié.
  • Fixture : le run 06Z reçoit precipitation et le vent u/v aux réglages du producteur. Le run 00Z reste un ancien run sans ces couches.
  • La doc (.claude/rules/architecture.md, components.md, README) est mise à jour.

Vérifications

  • npx vitest run src/lib/tests/weather-ai-domain.test.ts : 41/41. Les nouveaux tests couvrent la lecture de la pluie (12 mm/6 h → 2 mm/h), la vitesse et la direction du vent (5 m/s, ≈ 323°), les flèches de repli selon le run, le recalage de variable, la liste des champs annoncés et le libellé.
  • Passent aussi : weather-ai-attribution, metadata-race, domain-load, model-selector-groups. npm run check : 0 erreur. eslint et prettier : OK.
  • Navigateur, contre le bucket public (s3-talos.cmer.fr/wai-om-public, run 24/10 00Z à 3 variables) :
    • Ni Précipitations ni Vent dans « Données », et aucune flèche demandée.
    • Une URL variable=precipitation retombe sur pressure_msl.
    • L'onglet Cyclones IA annonce les trois champs de base.
    • Aucune réponse 4xx et aucune erreur console liée aux .om. Les seules erreurs viennent du relief tiles.mapterhorn.com, injoignable depuis le poste de test et sans rapport avec ce changement.
  • Navigateur, contre la fixture 06Z servie en local : pluie en mm/h avec la mention « taux moyen sur les 6 h précédentes », vent 10 m en km/h, flèches 10 m en repli sous la pluie. L'onglet Cyclones IA liste vent et précipitations. Les captures sont faites mais je n'ai pas pu les joindre depuis le CLI.

Reste à vérifier quand un run à trois couches sera publié

  • Rendu réel de la pluie et du vent : ordres de grandeur, palette non saturée en zone cyclonique.
  • Infobulle (mm/h, vent).
  • Annonce des cinq champs dans l'onglet Cyclones IA.
  • Passage d'un run à trois couches vers un ancien run, et retour.

🤖 Generated with Claude Code

…her AI

weather-ai#318 publie `precipitation` (cumul 6 h, mm) et
`wind_u/v_component_10m` (m/s) dans `weather_ai_wnc_mini`. Le sélecteur suit
déjà `variables` ; ce changement complète l'intégration :

- WEATHER_AI_FIELDS porte libellé + variables .om ; l'onglet Cyclones IA
  n'annonce que les champs listés par le latest.json public (anciens runs à
  reçu /1 : t2m seule), champs de base si le bucket ne répond pas.
- Précipitation libellée « taux moyen sur les 6 h précédentes » dans la
  bande de contexte (le package divise le cumul par delta_time_hours=6).
- Changement de run : matchVariableOrFirst() recale une variable absente du
  run choisi (précipitation/vent sur un ancien run) au lieu d'une lecture
  en erreur.
- Fixture : run 06Z avec précipitation et vent u/v aux facteurs du
  producteur ; tests de lecture (mm/h, vitesse/direction), repli des
  flèches, recalage de variable, annonce des champs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
infoclimat-numeric 92c2a7a Commit Preview URL

Branch Preview URL
Oct 24 2026, 03:59 PM

citarf and others added 6 commits October 24, 2026 17:44
…le meta.json du run, champs relus

Retours de la revue Codex de #152 :

- Première échéance d'un run progressif (in-progress.json à +6 h seul) :
  timeStepHoursAt() renvoie undefined, l'URL n'avait pas de
  delta_time_hours et la précipitation restait vide. fallbackTimeStepHours()
  fournit le pas fixe de 6 h du domaine Weather AI.
- Changement de run : tant que metaJson décrit un autre run que modelRun
  (meta.json en cours de lecture), getOMUrlFor() ne bâtit aucune URL. Choisir
  le vent ou la précipitation dans cet intervalle ne charge plus une variable
  absente du run choisi ; la fin de la lecture recharge les couches.
- Onglet Cyclones IA : la liste des champs suit latest.json au rythme du
  rafraîchissement des métadonnées (watchWeatherAiVariables), au lieu d'une
  lecture unique au montage.

Tests : précipitation à une seule échéance, URL refusée sur métadonnées d'un
autre run, suivi périodique de variables (fixture url-builder alignée sur son
run).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…si échoue, garde limitée à Weather AI

Retour P2 de la re-revue Codex de #152 : si le meta.json d'un run choisi
répondait 404 ou échouait, onModelRunChange relançait l'erreur sans restaurer
modelRun, metaJson restait celui du run précédent, et la garde run/meta.json
de getOMUrlFor refusait toute URL (tous modèles) jusqu'au choix d'un autre run.

- loadModelRun() (metadata.ts) : sélectionne le run, lit ses métadonnées ;
  sur échec, restaure run et metaJson précédents puis relève l'erreur.
  Une StaleMetadataError ne restaure rien.
- time-selector.svelte : l'utilise, rétablit le verrou et le chargement,
  affiche un toast « Run indisponible ».
- getOMUrlFor : la garde ne s'applique qu'au domaine Weather AI, seul à
  publier des variables différentes d'un run à l'autre.

Tests : 404, succès et sélection changée pour loadModelRun ; URL bâtie hors
Weather AI malgré un meta.json d'un autre run (échouent sur 9f0a5b5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ure, retour au dernier couple chargé

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…te écriture d'état, loading compris

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…itial non écrit si périmé

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…) avant chaque écriture de loadModelRun

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@citarf
citarf merged commit 68c0c98 into main Oct 24, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant