develop #259

Merged
gabriel merged 2 commits from develop into main 2026-09-09 22:02:00 +00:00
Owner

Ce que ça change

Closes #

Preuve


Si ça touche infra/terraform/

  • terraform plan -out=tfplan ci-dessous, avant la fusion
  • terraform apply tfplan ci-dessous, après la fusion
  • Le pair a relu le plan, pas seulement le code
terraform plan -out=tfplan

terraform apply tfplan

Relecture

  • Un pair a relu et laissé un commentaire, même court
  • Ses remarques sont traitées, ou une réponse explique pourquoi elles ne le sont pas

Ce qui suit le code

  • docs/runbooks/ mis à jour, un geste d'exploitation a changé
  • docs/adr/ complété, une décision structurante a été prise
  • docs/journal.md complété, un incident a été rencontré
  • Une nouvelle variable d'environnement est apparue, elle est dans .env.example

Où regarder en priorité

## Ce que ça change <!-- Deux phrases. Ce qu'un relecteur doit comprendre avant d'ouvrir le code. --> Closes # ## Preuve <!-- Ce que la chaîne d'intégration ne peut pas vérifier à ma place : sortie de commande, capture d'écran, journal d'exécution. La chaîne contrôle déjà le format, les tests et l'absence de secrets, inutile de le répéter ici. --> ``` ``` ## Si ça touche `infra/terraform/` <!-- Supprimer cette section entière si ce n'est pas le cas. L'`apply` n'est pas automatisé, faute de service principal : cette trace est la seule preuve que l'appliqué correspond au relu (ADR 0007). Ne jamais coller le fichier `tfplan` lui-même, il porte l'état. --> - [ ] `terraform plan -out=tfplan` ci-dessous, **avant** la fusion - [ ] `terraform apply tfplan` ci-dessous, **après** la fusion - [ ] Le pair a relu le plan, pas seulement le code <details><summary><code>terraform plan -out=tfplan</code></summary> ``` ``` </details> <details><summary><code>terraform apply tfplan</code></summary> ``` ``` </details> ## Relecture - [ ] Un pair a relu et laissé un commentaire, même court - [ ] Ses remarques sont traitées, ou une réponse explique pourquoi elles ne le sont pas ## Ce qui suit le code <!-- Ne cocher que ce qui s'applique, supprimer le reste. --> - [ ] `docs/runbooks/` mis à jour, un geste d'exploitation a changé - [ ] `docs/adr/` complété, une décision structurante a été prise - [ ] `docs/journal.md` complété, un incident a été rencontré - [ ] Une nouvelle variable d'environnement est apparue, elle est dans `.env.example` ## Où regarder en priorité <!-- Là où tu as hésité, ou ce qui mérite un second avis. Facultatif, mais ça fait gagner du temps au relecteur. -->
front+api : une fenêtre de trois heures au pas de dix minutes, et la prévision tracée (#257)
All checks were successful
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 10s
Intégration / Terraform — format, validité et lint (pull_request) Successful in 18s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 47s
Intégration / Checkov — audit de la configuration (pull_request) Successful in 18s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 16s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 5m58s
be2c065efe
La donnée est à la minute et fraîche de moins de dix minutes ; l'écran ne
savait la montrer qu'à l'heure. Il y avait donc en permanence un écart entre
la tuile de consommation et le dernier bâton de la courbe, entre dix minutes
et une heure et demie. Mesuré à 23 h 37 : dernière minute 23:29, dernier seau
horaire 22:00.

Ce n'est pas un retard de la chaîne — une heure ne se résume pas avant d'être
finie. C'est que l'écran n'avait aucune fenêtre plus fine.

UNE QUATRIÈME FENÊTRE, `3h`, AU PAS `10min`. Elle est la seule servie depuis
`public.mesure` et non depuis `mesure_horaire` : l'agrégat ne matérialise que
des heures complètes, il ne peut donc rien dire des trois dernières heures,
et c'est précisément le manque. Elle lit la minute, celle que la tuile de
consommation affiche déjà.

`date_bin` et non `date_trunc`, qui ne sait pas tronquer à dix minutes. La
grille est ancrée sur l'époque : les seaux tombent sur les minutes rondes quelle
que soit l'heure de la requête, et deux appels à une minute d'écart rendent les
mêmes bornes. `avg` ignore les nulls, donc un seau entièrement vide rend `null`
et le front y creuse un trou, exactement comme au pas horaire depuis le #211.

LA PRÉVISION EST TRACÉE, plus seulement écrite sous la courbe. Elle existait
dans le contrat et s'affichait en texte ; un exploitant qui regardait la forme
voyait d'où le site venait, jamais où il va. Elle porte l'instant qu'elle VISE,
donc elle se place d'elle-même au bon endroit de l'axe. Teinte propre, un
violet franc : le mesuré et le reconstitué sont deux bleus voisins, et deux
bleus se confondent avant de se distinguer d'un violet pour une deutéranopie.
Un clic dessus n'ouvre pas la traçabilité — elle n'a pas encore eu lieu.

DEUX PIÈGES TROUVÉS EN CHEMIN.

Le dénominateur de « N points sur M » venait d'un enchaînement de ternaires qui
supposait qu'un pas vaut l'heure ou le jour. Il aurait annoncé 24 pour une
fenêtre qui en porte 18. Remplacé par une table : une fenêtre ajoutée sans sa
ligne lève au lieu de mentir.

La construction des points était recopiée à l'identique pour chaque requête.
Une troisième copie aurait fini par diverger sur le traitement du nul, qui est
justement ce qu'il ne faut pas rater. Factorisée.

L'écran Comparer n'ouvre pas la fenêtre courte : sept sites sur trois heures
donneraient cent vingt-six barres groupées. Même raison que les 24 h exclues
au #184, en pire.

Éprouvé : quatre cas API et quatre cas front, 243 cas API, 514 cas front,
quatorze bancs de chaîne, mypy strict, ruff, construction Vite.

Hors périmètre, comme le dit le ticket : rendre l'heure EN COURS dans les
fenêtres horaires, qui demande `materialized_only = false` et figerait une
heure partielle comme réalisé définitif dans la recopie du #117.
Merge pull request 'front+api : une fenêtre de trois heures au pas de dix minutes, et la prévision tracée' (#258) from lenaic/257-courbe-dix-minutes into develop
All checks were successful
Intégration / Tableau de bord — dépendances, tests et construction (push) Successful in 44s
Intégration / Contrôles statiques du dépôt (push) Successful in 7s
Intégration / Terraform — format, validité et lint (push) Successful in 25s
Intégration / Checkov — audit de la configuration (push) Successful in 46s
Intégration / Workflows — lint et audit de sécurité (push) Successful in 23s
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 44s
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 9s
Intégration / Terraform — format, validité et lint (pull_request) Successful in 13s
Intégration / Checkov — audit de la configuration (pull_request) Successful in 14s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 17s
Intégration / Python — qualité, tests et dépendances (push) Successful in 6m23s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 6m23s
a8072f8520
Reviewed-on: https://10.105.200.41/g2/enervision/pulls/258
Reviewed-by: gabriel <gabriel@noreply.10.105.200.41>
gabriel approved these changes 2026-09-09 22:01:49 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
g2/enervision!259
No description provided.