Files
decision/CONTRIBUTING.md
Yvv ed9ed11cd4 Toolbox 30rem sticky + accordéons collapsibles + renommage libreDecision
- 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>
2026-03-17 00:48:20 +01:00

1.5 KiB

Contribuer à libreDecision

Environnement

# 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

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.