64e2f866475b9661b1bbe130171f3b3fa79f53e9
- Retiré : le solveur ne pénalise plus un bénévole qui dépasserait 8 h sur la journée (`_daily_overage_minutes`/`_DAILY_OVERAGE_PENALTY_PER_MIN`, côté back et mock). Seule la validation le signale encore, à la confirmation (`DAILY_HOURS_EXCEEDED`, inchangée). `SolverInput.day_parts` et son chargement sont retirés au passage : ils ne servaient qu'à ça. - Ajouté : malus (-40) si le bénévole a déjà (affectation décidée) le créneau précédent de ce même poste, le même jour (`SolverShift.predecessor_shift_id`, calculé par le loader à partir de tous les créneaux du poste — pas seulement ceux à compléter). Favorise la rotation plutôt que d'enchaîner toujours la même personne sur un poste. Reste un malus, pas une exclusion : le seul candidat pour un créneau urgent est quand même proposé. - Miroir côté mock (`runSolver`) pour que la démonstration se comporte pareil. - CLAUDE.md à jour (§4). Tests : remplacé le test du plafond journalier par un test de non-régression explicite (le cumul n'est plus pénalisé) + un test isolant le repos (qui, lui, reste vérifié) ; ajouté 3 tests pour le chaînage (préfère un bénévole frais, reste proposé si c'est le seul candidat urgent, un créneau existant non-prédécesseur ne déclenche pas le malus). Vérifié : 183 tests backend, ruff, alembic check ; typecheck/lint/build/smoke frontend. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
Gestion des bénévoles
Application web de gestion des bénévoles pour un festival associatif. Backend FastAPI + PostgreSQL, frontend React (à venir), déploiement Docker Compose auto-hébergé.
Voir CLAUDE.md pour le vocabulaire du domaine, l'arborescence
et les conventions.
Démarrage rapide
make demo # base + backend + frontend, jeu de démonstration chargé
make blank # idem, mais édition vierge + 1er compte coordination
- Frontend : http://localhost:5173
- API : http://localhost:8000 · Docs : http://localhost:8000/docs
make downarrête tout ·make logssuit les logs du backend
Chaque commande construit les images, applique les migrations, prépare les
données, bascule le frontend sur l'API réelle (.env) et affiche les
identifiants de connexion.
make blank accepte des paramètres :
make blank EMAIL=moi@festival.fr PASSWORD=mon-mot-de-passe-solide \
NAME="Festival 2026" START=2026-07-01 END=2026-07-04
Le jeu de démo : 120 bénévoles fictifs, 15 postes, 4 jours. L'édition vierge : une édition + un compte coordination (mot de passe) + 3 créneaux types.
Tests
docker compose run --rm backend uv run pytest
La base de test (benevoles_test) est créée automatiquement au premier
démarrage du conteneur PostgreSQL.
Structure
| Dossier | Rôle |
|---|---|
backend/ |
API FastAPI, modèle SQLModel, migrations Alembic |
frontend/ |
Interface React + Vite + TS + Tailwind (service frontend) |
deploy/ |
Configuration de déploiement production (compose, Caddy, runbook) |
.gitlab-ci.yml |
Chaîne CI/CD (tests → build → SSH sur le VPS) |
Languages
Python
51.8%
TypeScript
47.6%
JavaScript
0.2%
Makefile
0.2%
Dockerfile
0.1%