Liens d'équipe (Yvv, 2026-10-21) : un lien réutilisable jusqu'à une date
et pour un nombre de personnes, révocable. Chaque ouverture demande un nom
et crée sa propre identité d'invitation, jamais administratrice ; un nom
déjà pris est refusé ; une personne déjà connectée reçoit les groupes.
trustinWallet montre par quel lien chaque identité est venue, et donne un
nouveau lien de connexion à une personne invitée (autre appareil).
Migration additive 0002 (table team_links, colonne identities.team_link).
Publication : yvv/libredecision-textes sur git.open.us.org, pour
l'instant (un dépôt pour l'ouverture, puis le dépôt officiel, viendront).
Huitième relecture (c3d6bf8 : ok), points corrigés :
- une négation n'est jamais coupée ni formée par collage (« ja mais ») ;
- caractères invisibles : tout l'ensemble Unicode des ignorables et les
contrôles autres que saut de ligne et tabulation ;
- sauts de ligne et indentation font partie de la forme (listes) ;
- un titre tient sur une ligne.
Boucle : 65 tests Rust, svelte-check, 9 vitest, e2e 13/13 (C12 ajouté).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
115 lines
6.1 KiB
Markdown
115 lines
6.1 KiB
Markdown
# 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–C12, 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–C12, 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.
|