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
🔗 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
Partie de l'épic #6. Bloqué par #1.
04epic-6/04-retry-options🎯 À construire
Toute la politique de retentative devient réglable via un unique argument
retry_options:(Hash) surClient.new, hérité automatiquement parTypesafe::Jev— la signature deevaluatene change pas. Clés acceptées :max_retries,base_delay,max_delay; clés absentes ou valeursnil→ défauts (2 / 0,5 / 8,0) ;retry_options: nil→ tous les défauts. Validation stricte à la construction :ArgumentErrorsur toute clé inconnue (la typo échoue bruyamment) et sur toute valeur invalide (numériques non négatifs ;max_retriesentier). 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 retentablebase_delayetmax_delayresserrent ou relâchent le backoff, observables via les délais demandésniletretry_options: nildonnent le comportement du ticket 01max_retriesnon entier) lève uneArgumentErrordès la construction, avec un message nommant la clé en causeTypesafe::Jev.newaccepteretry_options:et le transmet : le comportement deJev#evaluatereflète la configuration🔗 Bloqué par
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
evaluate— hors périmètre (décision Q3 amendée)📚 Références
docs/plans/retry-client/spec.md—## Décisions d'implémentation,## Décisions de testLEXIQUE.md· ADR :docs/adr/0001-retentatives-automatiques-par-defaut.md