- Boîte à outils élargie à 30rem (×1.75) — flottante sticky, zéro scroll visible - ToolboxSection : nouveau composant accordéon générique (chevron, défaut fermé) - ToolboxVignette : titre cliquable, bullets/actions cachés par défaut - 4 pages : ContextMapper/SocioElection/WorkflowMilestones/inertie → ToolboxSection - Suppression doublon SectionLayout (common/) — conflit de nommage résolu - Renommage complet Glibredecision → libreDecision dans configs/docker/CI - README.md + CONTRIBUTING.md ajoutés Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
53 lines
1.5 KiB
Markdown
53 lines
1.5 KiB
Markdown
# 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.
|