Skip to content

Idempotence & Exécution #21

Closed

Description

@Nicolas-Dmb

📋 Description

Garantir que chaque job est relançable sans doublons ni effets de bord, via une gestion standardisée de l'idempotence et des statuts dans job_runs (+ erreurs fines par zone optionnelles).

Comprend : packages/core/idempotency.py avec build_key(...) (clé déterministe stable), helpers DB (start_run, finish_success/failure/partial, mark_zone_error), convention skip/retry (success ⇒ skip, failed/partial ⇒ retry), scopes region:{aoi_id} / zone:{zone_id}.

✅ Acceptance Criteria

  • Module packages/core/idempotency.py implémenté
  • Construction de clé déterministe et stable (mêmes inputs ⇒ même clé)
  • Gestion standard des statuts : running | success | failed | partial
  • Règle d'exécution : success ⇒ skip ; sinon retry safe
  • Mise à jour atomique (transaction) : running au démarrage, success/failed/partial à la fin
  • Support partial : job_run_zone_errors alimentée quand des zones échouent
  • Tests unitaires ciblés (clé stable, transitions, success⇒skip, failed⇒retry, partial + zone_errors)
  • Coverage ≥ 90% sur la partie logique
  • mettre à jour les fichiers déjà implémenté sans ce système comme generate_h3_grid

🔗 Prerequisite Issues

⚠️ Dépendances déclarées dans la DoR :


Source : Notion « Idempotence & Exécution » (Outils commun).

Activity

  1. self-assigned this
    on Jul 3, 2026
  2. Nicolas-Dmb commented on Jul 6, 2026

    @Nicolas-Dmb
    CollaboratorAuthor

    La tâche est déjà faite. Le système d'idempotence existe, est propre, plus robuste que ce que l'énoncé décrit (context manager job_run plutôt que des finish_* à appeler manuellement), et generate_h3_grid l'utilise déjà correctement. Les 17 tests passent.

    Pour clôturer côté équipe, tu peux justifier ainsi les 2 seuls écarts avec l'énoncé Notion :

    1. Nommage de l'API — l'énoncé demandait build_key / start_run / finish_* / mark_zone_error. Le code utilise compute_idempotency_key + le context manager job_run + record_zone_error. Ce n'est pas un manque : c'est la forme imposée par CLAUDE.md, et le CM couvre start/finish/partial/failed de façon atomique sans appels manuels sujets à oubli. L'implémentation dépasse l'énoncé.
    2. Convention de scope region:{aoi_id} — non appliquée (scope="idf" brut au lieu de "region:idf"). Seul vrai écart, mineur, purement cosmétique tant qu'aucun autre job n'a besoin de désambiguïser region vs zone. À trancher le jour où un second type de scope apparaît, pas maintenant.
  3. linked a pull request that will close this issue20 grille h3 aoi #58on Jul 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions