# libreDecision Boîte à outils de la première démocratie — décider ensemble, du trio à la population. libreDecision fait de la décision un geste quotidien : chaque question tient en une phrase, l'outil propose le chemin le plus court — jamais plus lourd que l'enjeu — et tout ce qui est décidé reste révisable, mesuré, consigné. Le même outil sert un trio d'amis, une association, une coopérative ou la toile de confiance Ğ1 (marque blanche par construction). ## Manifeste > Personne n'a jamais vécu en démocratie — alors nous la rêvons de jour, et nous la commençons > à notre échelle. libreDecision attrape chaque décision en une phrase et propose le chemin le > plus court : décide seul et trace-le, décide sous mandat, écoute puis décide, ou décidez > ensemble — jamais plus lourd que l'enjeu. Ici on ne délègue pas, on mandate, et on reprend ; > on n'est pas consulté, on s'instruit, puis on se prononce ; on ne s'affronte pas en deux > camps, on règle des curseurs — et la position de chacun reste visible dans le faisceau, la > médiane n'écrase personne, la dernière main est toujours humaine. Les concernés en premier > lieu ont voix par construction, chacun voit pourquoi ; lever la main « ça me concerne » est > un droit, pas une demande. Chaque décision dit ce qu'elle engage, ce qu'elle cherche à > changer, et repasse l'épreuve du réel : rien n'est définitif, toute décision en vigueur garde > sa poignée, se tromper est une donnée qu'on consigne. Les règles du jeu elles-mêmes — le > Pacte — s'écrivent au fil de l'eau, par ceux qu'elles gouvernent, sous les boussoles > Autonomie, Équilibre, Liaison. Du trio d'amis à la toile Ğ1 : le même geste, dix secondes, > et l'observatoire qui apprend de nous. La ville change, le puits demeure. ## Les 6 routes de décision Le triage (moteur pur, toujours expliqué en une phrase, toujours contournable) oriente chaque décision vers l'une de six routes : | Route | Geste | |---|---| | **solo** | « Personne d'autre n'est concerné — décide. » 2 gestes, moins de 10 secondes, trace facultative | | **record** | « Déjà tranché — je le consigne. » L'observatoire en un geste, adopté immédiatement | | **mandate** | « Ton mandat couvre — décide, c'est tracé. » Trace obligatoire + fenêtre d'objection 48 h | | **transmit** | « Le mandat d'un autre couvre — transmets-lui. » (ou conteste le mandat) | | **advice** | « Réversible et petit cercle — demande leur avis, puis décide. » 72 h | | **collective** | « Nous décidons. » Formulation, liste des concernés arrêtée, session de vote | Dérogation asymétrique : alourdir est libre (1 tap journalisé) ; alléger exige une note motivée et une fenêtre d'objection. ## Les 5 modalités Chaque protocole est nommé et référencé par une clause du Pacte — le modifier, c'est amender le Pacte. 1. **Consentement** — « Ça me va / J'objecte » : zéro objection maintenue = adopté. Le repli universel : tout collectif en a un (invariant). 2. **Nuancé 6 niveaux** — de « Pas du tout » à « Tout à fait », jamais « contre » ; histogramme visible, commentaire obligatoire sur les niveaux bas. 3. **Paramétrique** — décider au curseur : faisceau des positions, médiane vivante, carte « Pour moi » ; la cristallisation finale est un geste humain daté du garant, jamais un automatisme. 4. **Élection** — réservée aux mandats et aux problématiques d'échelle (6 méthodes de nomination, vote blanc, jamais de départage par l'outil). 5. **Binaire inertiel** — le seuil `C + B^W + (M + (1−M)(1−(T/W)^G))·max(0, T−C)`, héritage Ğ1 remis à sa place : l'outil de dernier recours des très grands corps. L'Atelier des formules (`/textes/formules`) reste son école. ## Local-first - **Aucun serveur requis** : tout l'état vit dans le navigateur (IndexedDB via idb-keyval, une clé par collectif). - **Export / import** de bundles JSON — la fédération, c'est l'échange de bundles, jamais une table. - **Seeds** livrés et importés par le même chemin que l'import utilisateur : - `duniter-g1.bundle.json` — la toile Ğ1 : 33 clauses Certification + 59 clauses Forgeron (textes votés intacts, provenance et décomptes conservés), protocoles, 3 mandats ; - `atelier-du-canal.bundle.json` — association fictive de 12 membres, le test permanent de marque blanche : décisions à tous les états, paramétrique vivant, épreuve du réel due. - **7 gabarits** de collectif à la création (`/creer`) : page blanche, informel, association, coopérative, commune, monnaie libre, institution symétrique. ## Stack - **Frontend** : Nuxt 4 (SPA, SSR off) + Vue 3 + TypeScript + Nuxt UI v3 + Pinia + UnoCSS ; npm ; port **3002** - **Moteurs purs** : `frontend/app/engine/` — triage, machine à états, seuils, médiane paramétrique, nuancé, périmètres — zéro dépendance Nuxt, testés vitest (**342 tests**) - **Backend v1** (FastAPI + SQLAlchemy async) : conservé dans `backend/` pour la future synchronisation multi-appareils — non requis pour utiliser ou développer le frontend ## Démarrage ```bash cd frontend npm install npm run dev # http://localhost:3002 npm test # vitest — 342 tests npm run build # build de production ``` ## Structure v2 ``` frontend/app/ engine/ # moteurs purs (barrel index.ts — seul point d'import) data/ # persistence.ts (IndexedDB), templates.ts (7 gabarits), seeds/*.bundle.json stores/ # collective.ts (le tenant) + decisions.ts (façade d'actions) composables/ # useMood, useFeed, useSearch components/ # par domaine : chemin/ decisions/ votes/ texts/ mandates/ feed/ onboarding/ common/ pages/ # 14 routes : / decider decisions(+id, vote, observatoire) # textes(+slug, formules) mandats(+id, nouveau) creer donnees lexicon.ts # source unique des libellés FR + test anti-lexique types/domain.ts # le noyau du modèle docs/dev/BLUEPRINT-V2.md # la référence produit ``` ## Licence Logiciel libre. Le fichier LICENSE sera posé avant la première publication.