t_1c244936 : le navigateur ne recompte plus le lot a valider #1762

Merged
foXaCe merged 2 commits from hermes/navigateur-sans-recompte-atelier into main 2026-10-16 21:49:12 +02:00
Collaborator

Champs d'API qui bougent (pour svelte / le chef) :

  • GET /a-valider renvoie en plus details : {dossier: phrase du badge} (at_onglet.detail_a_valider), que la page affiche telle quelle — elle la recomposait avant.
  • GET /retours/etat?c=... porte en plus, dans episodes[code] : restantes (le compte) et objets (le lot du moment), calcules une seule fois par revue.etat / revue::etat.
  • POST /retour {type:"image",decision:"valide",objet:"lot"} accepte desormais code (code de l'episode) a la place de la liste objets : le serveur valide son lot du moment, et repond 409 s'il ne reste rien (page en retard). objets reste accepte.

Cause : « Tout valider (n) » comptait les tuiles de la page (classes a_revoir/valide) et envoyait sa propre liste d'images ; une page ouverte avant une decision validait un lot perime, et le compte affiche pouvait diverger de celui du serveur.

Remede

  • _tableau/revue.py : episodes[code].restantes et .objets, comptes une seule fois.
  • _tableau/rust/service/src/atelier/revue/etat_chaine.rs : le meme calcul cote Rust.
  • _tableau/rust/service/src/atelier/lot_episode.rs (nouveau) : le lot du moment par code d'episode.
  • _tableau/rust/service/src/atelier/retours.rs : le geste en lot prend le code, refuse (409) si rien ne reste.
  • _tableau/serveur_retours.py : le pendant Python, meme refus.
  • _tableau/atelier/atelier.js : plus de recomptage local ; le compte et le lot viennent de /retours/etat.

Preuves

  • python3 _tableau/test_navigateur_sans_recompte.py : banc Chromium neuf (window.__err vide, aucune requete en dehors de /a-valider, /attente, /retours/etat, /retour).
  • python3 _tableau/lancer-tests.py --tout : 209 bancs verts.
  • cargo test --release --locked : vert ; cargo build --release --locked : aucun avertissement.
  • rust/service/tests/atelier_retour.rs : lot par code d'episode, 201 puis rejeu tardif 409.
**Champs d'API qui bougent (pour `svelte` / le chef) :** - `GET /a-valider` renvoie en plus `details` : `{dossier: phrase du badge}` (`at_onglet.detail_a_valider`), que la page affiche telle quelle — elle la recomposait avant. - `GET /retours/etat?c=...` porte en plus, dans `episodes[code]` : `restantes` (le compte) et `objets` (le lot du moment), calcules une seule fois par `revue.etat` / `revue::etat`. - `POST /retour` `{type:"image",decision:"valide",objet:"lot"}` accepte desormais `code` (code de l'episode) a la place de la liste `objets` : le serveur valide son lot du moment, et repond `409` s'il ne reste rien (page en retard). `objets` reste accepte. **Cause** : « Tout valider (n) » comptait les tuiles de la page (classes `a_revoir`/`valide`) et envoyait sa propre liste d'images ; une page ouverte avant une decision validait un lot perime, et le compte affiche pouvait diverger de celui du serveur. **Remede** - `_tableau/revue.py` : `episodes[code].restantes` et `.objets`, comptes une seule fois. - `_tableau/rust/service/src/atelier/revue/etat_chaine.rs` : le meme calcul cote Rust. - `_tableau/rust/service/src/atelier/lot_episode.rs` (nouveau) : le lot du moment par code d'episode. - `_tableau/rust/service/src/atelier/retours.rs` : le geste en lot prend le code, refuse (409) si rien ne reste. - `_tableau/serveur_retours.py` : le pendant Python, meme refus. - `_tableau/atelier/atelier.js` : plus de recomptage local ; le compte et le lot viennent de `/retours/etat`. **Preuves** - `python3 _tableau/test_navigateur_sans_recompte.py` : banc Chromium neuf (`window.__err` vide, aucune requete en dehors de `/a-valider`, `/attente`, `/retours/etat`, `/retour`). - `python3 _tableau/lancer-tests.py --tout` : 209 bancs verts. - `cargo test --release --locked` : vert ; `cargo build --release --locked` : aucun avertissement. - `rust/service/tests/atelier_retour.rs` : lot par code d'episode, 201 puis rejeu tardif 409.
_tableau : le navigateur ne recompte plus le lot a valider
All checks were successful
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 1m36s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 1m47s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 10m23s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 10m23s
61c8141d88
Cause : « Tout valider (n) » comptait les tuiles de la page (classes `a_revoir`/`valide`) et envoyait sa
propre liste d'images ; une page ouverte avant une décision validait un lot périmé, et le compte affiché
pouvait diverger de celui du serveur. La phrase du badge était recomposée de la même façon.

Remède : le compte et le lot sont calculés une seule fois, côté serveur. `revue.etat` pose
`episodes[code].restantes` et `.objets` ; le service Rust fait de même (`revue/etat_chaine.rs`). Le clic
n'envoie plus que le CODE de l'épisode : `atelier/lot_episode.rs` (nouveau module) recalcule le lot du
moment et `atelier/retours.rs` répond 409 quand il ne reste rien — le pendant Python fait pareil. Côté
page, la phrase de l'infobulle vient du serveur (`/a-valider` la rend dans `details`) au lieu d'être
recomposée à partir des types de la liste.

Preuves : `test_navigateur_sans_recompte.py` (nouveau banc Chromium : aucune erreur JS, aucun
`unhandledrejection`, les requêtes restent au serveur), `test_atelier_actions_uniques.py` (un seul envoi,
par code d'épisode), `test_valider_tout.py` et `test_serveur_routes.py` (l'état porte compte et lot, la
page en retard reçoit un refus), `rust/service/tests/atelier_retour.rs` (lot par code : 201 puis 409) ;
`cargo test --release --locked`, `cargo build --release --locked`, 209 bancs verts.
Collaborator

fusion-auto : pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.

`fusion-auto` : pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.
Merge remote-tracking branch 'httpforge/main' into HEAD
Some checks failed
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 3m16s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 1m39s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m48s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 16m1s
0da27918fa
# Conflicts:
#	_tableau/test_serveur_routes.py
Collaborator

fusion-auto : pas de fusion, la CI est rouge (Rust). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.

`fusion-auto` : pas de fusion, la CI est rouge (Rust). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.
foXaCe merged commit 77bdfacd84 into main 2026-10-16 21:49:12 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 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
foXaCe/studio!1762
No description provided.