• fix: A21 phase 2b — run_event_sync + 15 routes api_v2 en def (v7.10.0)
    FlowDeck CI / lint (push) Canceled after 0s
    FlowDeck CI / test (push) Canceled after 0s
    FlowDeck CI / docker (push) Canceled after 0s

    bruno released this 2026-10-01 11:35:43 -04:00 | 110 commits to main since this release

    • run_event_sync(coro) (app/services/automations.py) : exécute une coroutine
      d'événement depuis un handler synchrone — asyncio.run sur une boucle
      dédiée dans le worker threadpool : le worker est bloqué, JAMAIS la boucle
      d'event, et la réponse n'est produite qu'une fois l'événement terminé
      (déterministe, équivalent sémantique de l'await). ponytail: les clients
      httpx sont créés à chaque appel partout → aucun lien de boucle ; sinon
      run_coroutine_threadsafe + boucle du lifespan.
    • 15 routes api_v2 dont les SEULS awaits étaient request.json,
      _fire_event, fire_published, fire_unpublished →
      Body(default={}) + run_event_sync(...) + conversion en def (script
      wrapping par appariement de parenthèses chaîne-aware, assert de flip
      « plus aucun await »).
    • api_v2 : 111/115 routes hors loop. Les 4 restantes ont de vrais awaits
      réseau et restent async volontairement : import_csv_v2 (multipart),
      project_tree_v2 (gitea), test_webhook_v2 (delivery), retry_webhook_deliveries.
    • Repo-wide : 403 routes sync (hors loop) / 260 async (phase 2c).

    tests : ciblé public_api_v2 + v65 + webhooks_v2 + audit = 90/90 (les webhooks
    prouvent la détermination de run_event_sync) ; suite complète 1037/1037
    (228 s) · ruff check app tests OK · docs à jour

    Downloads