- _parallel_map : asyncio.gather borné (16) pour dashboard,
/health, /forecast, /triage et le mur — le patron de /focus,
généralisé. Avant : la page attendait la somme des allers-
retours Gitea de tous les dépôts, en séquentiel.
- Client Gitea : les listes (dépôts, issues, jalons, étoiles)
passent en stale-while-revalidate — une entrée périmée est
servie immédiatement et rafraîchie en tâche de fond. Les
mutations vident le cache et bumpent une génération qui
désarme les rafraîchissements en vol.
- /forecast calcule des lignes de jalons tous projets (écart
ETA/échéance) ; /health trie par sévérité et expose la
pastille ; le détail santé reçoit la liste des projets.