# libreDecision Rendre possible la décision collective — en fonction du contexte, processus et modalités, boîte à outils. En ligne : **https://decision.librodrome.org** (le produit, v3) · la maquette v2, conservée pour présenter le projet : https://maquette.decision.librodrome.org (`maquette/`). ## 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 quatre outils | Outil | Ce qu'il fait | État | |---|---|---| | **Décisions** | funnel assisté pour choisir les modalités, journal des décisions | à venir | | **Docs de référence** | acte d'engagement, licence, charte, constitution… sous vote permanent | **actif** | | **Mandats** | création et révocation de tout mandat | à venir | | **Protocoles** | workflows sans organe statutaire, rôles tournants, automatisations | à venir | Le produit avance **un chantier à la fois**, chacun livré complet et en production avant le suivant — feuille de route : [`docs/chantiers/README.md`](docs/chantiers/README.md). Chantier en cours : **Acte d'engagement Certification** (Monnaie libre), en binôme Yvv + Chiara. ## Comment marche un doc de référence - On arrive sur **le texte en vigueur**, seul, lisible. Trois gestes contextuels : consulter le vote, voir les propositions, proposer une modification. - Chaque article est sous **vote permanent** : une proposition qui atteint son seuil (formule inertielle Ğ1, plancher C de votants « pour ») **remonte en vigueur** et remplace la version en place — si elle tient une marge plus large. Les textes de départ sont des *seeds a minima*, à zéro vote. - **Corriger n'est pas voter** : une coquille se corrige sans vote ; un changement de fond ouvre une nouvelle révision, dont les votes antérieurs sont à reconfirmer. - Deux propositions qui **se contredisent** ne passent pas ensemble : un signalement bloque la seconde tant qu'il n'est pas levé. - L'**inertie** de chaque article se vote aussi (par défaut : un cran au-dessus). - Tout ce qui entre en vigueur est **publié automatiquement** dans un dépôt git (fr/en/es + JSON) lu par les applications clientes. Le détail, les décisions et leurs raisons : [`docs/chantiers/acte-certification/CHANTIER.md`](docs/chantiers/acte-certification/CHANTIER.md) et [`docs/adr/`](docs/adr/). ## Stack - **Serveur** : Rust (edition 2024, toolchain 1.99 épinglée) — axum 0.8, sqlx/SQLite, tokio. Trois crates : `ld-engine` (moteur pur : seuils, édition, assistant, composition), `trustin-access` (règles d'accès de trustinWallet), `ld-server` (API + publication + service de l'interface). - **Interface** : SvelteKit 2 / Svelte 5 (runes), SPA statique servie par le serveur ; trilingue fr · en · es dès le départ (le français fait foi). - **Déploiement** : une seule image Docker, Woodpecker → sonic (fabio), volume de données nommé. ## Démarrer ```bash export PATH=$HOME/.cargo/bin:$PATH cd web && npm ci && npm run build && cd .. # l'interface compilée LD_DEV_LOGIN=1 cargo run -p ld-server # API + interface sur :8002 cd web && npm run dev # interface à chaud sur :3002 (proxy /api → :8002) ``` `LD_DEV_LOGIN=1` ouvre une connexion de développement (sans clé, membre de tous les groupes) — jamais en production. Toutes les variables : [`.env.example`](.env.example). ## Vérifier (la boucle) ```bash cargo fmt --all --check && cargo clippy --workspace --all-targets -- -D warnings && cargo test --workspace cd web && npm run check && npm test && npm run build && npm run e2e ``` Les contrôles d'usage (C1–C11, M1) sont décrits dans [`docs/chantiers/acte-certification/CONTROLES.md`](docs/chantiers/acte-certification/CONTROLES.md) ; les tests de Chiara en sont la version humaine. ## Structure ``` crates/ ld-engine/ # moteur pur, sans I/O : threshold, edit, assist, compose trustin-access/ # qui voit, qui ouvre, qui gère les accès ld-server/ # axum : auth Ğ1 + invitations, docs, propositions, votes, adoption, publication migrations/ # schéma SQLite (données runtime : jamais réécrites) tests/api.rs # scénarios bout en bout de l'API seeds/ # documents de départ (JSON trilingue), instanciés une seule fois par groupe web/ src/lib/ # api, session, i18n (fr source, en, es), composants src/routes/ # accueil, groupes, lecteur du texte, trustinWallet (/acces)… e2e/ # Playwright : C1–C11, M1 docker/ # app.Dockerfile + app-compose.yml (sonic) .woodpecker/ # app.yml (le produit) · maquette.yml (la maquette) docs/ # chantiers/, adr/, dev/ (blueprint v2), recherche/ maquette/ # la v2 Nuxt + FastAPI, telle quelle ``` ## Licence Logiciel libre — la licence reste à choisir (question ouverte à Yvv) ; le fichier LICENSE sera posé avant toute publication du code.