• fix: A21 phase 2c — 190 routes hors loop, 86 % total (v7.26.0)
    FlowDeck CI / lint (push) Successful in 1m55s
    FlowDeck CI / test (push) Successful in 15m23s
    FlowDeck CI / docker (push) Canceled after 0s

    bruno released this 2026-10-01 22:17:48 -04:00 | 94 commits to main since this release

    4 passes (283 → 93 routes async sur 667 = 86 % hors loop, avant 61 %) :

    A. RACINE AUTH — get_current_user (auth/session.py) était async def
    SANS aucun await (cookie decode = synchrone) ; idem ses clones :
    agent._current_user_id/_workspace_id/_current_admin (34 sites) et
    sso._require_admin (corps 0 await, 6 sites) → def +
    47 await supprimés. Piège : 3 call sites passaient par l'alias gcu
    (grep littéral aveugle) — 8 tests en échec → corrigés.

    B. Re-scan : 19 routes devenues SANS await → def (agent 8, sso 5,
    web_clipper 3, projects 2, auth 1…).

    C/D. 155 routes dont les seuls awaits = request.json() / événements :

    • try/except body = {} → Body(default={}) (même tolérance)
    • try/except raise HTTPException(400) → Body(...) REQUIS
      (422 FastAPI — aucun test ne couvrait le 400)
    • forme conditionnelle request.json() if content-type else {}
      (54 sites) → défaut {} (sans corps = {} dans les 2 cas)
    • await fire_* → run_event_sync(...) ; imports Body /
      run_event_sync ajoutés aux routers convertis

    Reste async (93, justifié) : form/upload/file (22), réseau gitea/llm/oidc,
    _json_body (9), 2 JSON inline en argument, 1 fallback logique
    (capture_frontend_error), 1 lecture conditionnelle (web_clipper), mixtes.

    suite 1089/1089 · ruff OK · docs à jour

    Downloads