# Contribuer à libreDecision

## Environnement

```bash
# Backend (Python 3.11+)
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --host 0.0.0.0 --port 8002 --reload

# Frontend (Node 20+)
cd frontend
npm install
npm run dev
```

## Conventions

- **UI** : français — **Code** : anglais (variables, commentaires, docstrings)
- **CSS** : scoped, sans bordures (`border: none`), profondeur via `box-shadow`
- **Composants** : `pathPrefix: false` — noms courts, auto-import
- **API** : versionnée `/api/v1/`, Pydantic v2, async partout
- **Ports stricts** : frontend=3002, backend=8002 — jamais de fallback

## Architecture toolbox

Chaque section expose une `<SectionLayout>` avec :
- Contenu principal (slot `#default`)
- Boîte à outils sticky (slot `#toolbox`) — 30rem, flottante, zéro scroll

Composants toolbox :
- `ToolboxSection` : accordéon collapsible générique
- `ToolboxVignette` : carte compacte avec bullets toggleables
- `toolbox/ContextMapper` : recommandeur de méthode (4 questions → méthode optimale)
- `toolbox/SocioElection` : guide élection sociocratique + advice process
- `toolbox/WorkflowMilestones` : jalons de protocole (Ostrom)

## Tests

```bash
cd backend && pytest tests/ -v
```

186 tests, zéro dette technique acceptée depuis le sprint 1.

## Formule de vote inertiel

`R = C + B^W + (M + (1-M)·(1-(T/W)^G))·max(0, T-C)`

Voir `docs/content/dev/` pour la documentation complète.
