YvvandClaude Opus 5.5 744d157b01 v3 : publication — un envoi refusé repart, un dépôt neuf reçoit l'historique
Douzième relecture (850f9c4 : ok), défauts anciens de publish.rs mis en
jeu par le nouveau dépôt :
- un commit que le dépôt n'a jamais reçu (premier envoi refusé, clé sans
  droit d'écriture) repart au passage suivant, au lieu d'une file marquée
  faite avec un dépôt vide ;
- un changement de remote vers un dépôt neuf et vide lui envoie
  l'historique ;
- au démarrage, ce qui attendait repart aussitôt (le délai croissant
  pouvait atteindre 6 h).
trustinWallet montre l'état de la publication (en attente, dernier échec,
dernier commit) et offre « Publier maintenant ».

Boucle : 69 tests Rust, svelte-check, 9 vitest, e2e 13/13.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:30:52 +02:00

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. 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 et 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

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.

Vérifier (la boucle)

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 ; 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.

S
Description
No description provided
Readme
4.8 MiB
Languages
Python 31%
TypeScript 24.4%
Vue 24.4%
Rust 13.2%
Svelte 5.5%
Other 1.4%