Skip to content

04 : configuration via retry_options (clés, validation, héritage Jev) #11

Description

@arsenik-dtheo

Partie de l'épic #6. Bloqué par #1.

🧮 Position dans la pile 04
🌿 Branche attendue epic-6/04-retry-options
📦 Profil tracer bullet

🎯 À construire

Toute la politique de retentative devient réglable via un unique argument retry_options: (Hash) sur Client.new, hérité automatiquement par Typesafe::Jev — la signature de evaluate ne change pas. Clés acceptées : max_retries, base_delay, max_delay ; clés absentes ou valeurs nil → défauts (2 / 0,5 / 8,0) ; retry_options: nil → tous les défauts. Validation stricte à la construction : ArgumentError sur toute clé inconnue (la typo échoue bruyamment) et sur toute valeur invalide (numériques non négatifs ; max_retries entier). Le Hash normalisé est dupliqué et figé sur le client, dans le style immuable du gem. retry_options: { max_retries: 0 } redonne le comportement d'une tentative unique.

✅ Critères d'acceptation

  • Client.new(api_key:, retry_options: { max_retries: 0 }) n'effectue qu'une seule tentative : aucun rejeu, erreur levée au premier échec retentable
  • base_delay et max_delay resserrent ou relâchent le backoff, observables via les délais demandés
  • Les défauts restent 2 / 0,5 / 8,0 : clés absentes, valeurs nil et retry_options: nil donnent le comportement du ticket 01
  • Une clé inconnue (typo) ou une valeur invalide (négatif, non numérique, max_retries non entier) lève une ArgumentError dès la construction, avec un message nommant la clé en cause
  • Le client expose les options normalisées et figées ; muter le Hash passé après construction n'a plus d'effet
  • Typesafe::Jev.new accepte retry_options: et le transmet : le comportement de Jev#evaluate reflète la configuration

🔗 Bloqué par

  • #1 — les boutons (max_retries, base_delay, max_delay) règlent la boucle et la politique nées au ticket 01

🚧 Ce que ce ticket ne fait pas

  • Override de la politique par appel dans evaluate — hors périmètre (décision Q3 amendée)
  • Observabilité (callback, logger) — hors périmètre v1

📚 Références

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    TicketTicket individuel rattaché à un épicprêtPrêt pour qu'un agent s'en saisisse

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions