forked from yvv/decision
Acte M1 exécuté : 8727315 en ligne (30/10, 15h45), Raison d'être publiée ; note du vote Ğ1 mise à jour après recherche
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Acte — Mise en ligne M1 (revue du 30/10 : entrée, DA, menu, listes, Raison d'être, versions)
|
||||
Classe : déploie
|
||||
Projet : libreDecision Date : 2026-10-30
|
||||
**État : FIGÉ (2026-10-30, 14 h 50)** sur `8727315` — relecture « 8727315 : ok » inscrite (sous-agent neuf, 30/10 14 h 45)
|
||||
**État : EXÉCUTÉ** — armé le 30/10/2026 à 15 h 29 par Yvv (« pousse déploie »), sur `8727315`, relecture « 8727315 : ok » inscrite
|
||||
|
||||
## Intention
|
||||
|
||||
@@ -147,3 +147,39 @@ reste en base, et le commit du dépôt des textes reste publié.
|
||||
demanderait un amendement inverse, écrit et relu comme celui-ci.
|
||||
- **Le commit publié** dans le dépôt des textes : **IMPOSSIBLE à retirer sans réécrire
|
||||
l'historique** de ce dépôt (geste « supprime »). On publierait par-dessus.
|
||||
|
||||
## Exécution
|
||||
|
||||
Acte exécuté le 30/10/2026, 15h29-15h52, par orch (session libreDecision), sur le mot d'Yvv
|
||||
« pousse déploie ».
|
||||
|
||||
- Prémisses revérifiées à 15 h 29 :
|
||||
- santé `{"build":"dc2de094","ok":true}` ;
|
||||
- `prod/main` et `origin/main` à `dc2de09` ;
|
||||
- aucun écart de configuration ;
|
||||
- relecture inscrite ;
|
||||
- copie fraîche de la base : I1 rend exactement les trois lignes attendues.
|
||||
- Commandes : `git push prod 8727315:main` (`dc2de09..8727315`),
|
||||
`git push origin 8727315:main` (`dc2de09..8727315`),
|
||||
`git push origin chantier/acte-certification` (`68111c3..1593e50`), à 15 h 35.
|
||||
- Pipeline :
|
||||
- le site est injoignable un instant à 15 h 44 min 52 s ;
|
||||
- l'ancienne version répond encore à 15 h 45 min 09 s ;
|
||||
- `{"build":"87273156","ok":true}` à 15 h 45 min 45 s.
|
||||
- Vérifications :
|
||||
- [x] santé `87273156` ;
|
||||
- [x] `/` répond 200 et la page cite la favicon (4 occurrences) ;
|
||||
- [x] journaux du conteneur, à 14:45:32Z :
|
||||
- `seed amendment applied … group=essai unit="I1"` ;
|
||||
- `seed amendment applied … group=monnaie-libre unit="I1"` ;
|
||||
- [x] publication à 14:45:36Z : `published doc=0a4c0663… commit="35864eb3dccebf8c7e38accb69107fa3823f8ab4"`, la
|
||||
Raison d'être est publiée dans le dépôt des textes ;
|
||||
- [x] maquette.decision.librodrome.org répond 200 ;
|
||||
- [ ] vérification à l'écran par Yvv (accueil, Monnaie libre, Raison d'être, versions
|
||||
groupées).
|
||||
- Image de retour : `libredecision-app:previous` (la version `dc2de09`), gardée par le
|
||||
pipeline.
|
||||
- Redémarrage à froid : celui du pipeline, qui recrée le conteneur (`up --force-recreate`).
|
||||
Aucun autre, il n'était pas au dossier.
|
||||
- Copies de la base de production (`/tmp/ld-prod-copie`, `/tmp/ld-prod-recette`) retirées du
|
||||
poste à 15 h 52.
|
||||
|
||||
@@ -1,60 +1,88 @@
|
||||
# Voter avec sa clé Ğ1 — lier, signer, inscrire sur la chaîne
|
||||
# Voter avec sa clé Ğ1 — une transaction par vote
|
||||
|
||||
> Note d'orch, 2026-10-30, pour la « grande question du vote » de la revue d'Yvv : liaison
|
||||
> avec une transaction de 1 Ğ1 pour une inscription sur la chaîne ? autre moyen ? plugin
|
||||
> obligatoire ? complicité de Ğecko pour l'affichage ?
|
||||
> Note d'orch, 2026-10-30, pour la « grande question du vote » de la revue d'Yvv. Mise à jour
|
||||
> le même jour après sa décision et une recherche dans le code des portefeuilles (clones de
|
||||
> `trustinWallet/refs/`, dépôts git.duniter.org, indexeur, nœud rpc.duniter.org). Les sondes
|
||||
> sont dans `/tmp/ld-recherche-vote/` sur le poste d'orch.
|
||||
|
||||
## Le constat
|
||||
## La décision d'Yvv (2026-10-30)
|
||||
|
||||
Dans Monnaie libre, seuls les membres de la toile votent : une personne, une voix
|
||||
(CHANTIER.md). Le serveur ne reconnaît un membre que par la connexion Ğ1, qui passe par
|
||||
connect.monnaie-libre.fr. Cette connexion attend l'inscription de libreDecision auprès de
|
||||
poka (`DEMANDE-CONNECT.md`). D'ici là, toute identité vient d'une invitation, et **personne ne
|
||||
peut voter dans Monnaie libre**. C'est ce qu'Yvv a vu : « je ne peux pas voter dans l'ux ».
|
||||
- **Un vote = une transaction de 0,1 Ğ1**, signée par le portefeuille et embarquée dans le geste
|
||||
de vote : un seul geste.
|
||||
- Une personne, une voix. Cette voix s'exprime autant de fois que la personne le veut, et **le
|
||||
dernier vote fait foi**.
|
||||
- Seule la chaîne garantit l'intégrité d'un vote.
|
||||
- **Totaux seulement** : les noms ne s'affichent pas.
|
||||
- Portefeuilles visés : Ğ1Companion, Ğecko, et à terme trustinWallet.
|
||||
|
||||
## Vérifié le 2026-10-30 sur l'indexeur (indexer.duniter.org)
|
||||
**« Y a-t-il un autre moyen ? »** Signer son bulletin avec sa clé prouve qui a voté quoi. Mais
|
||||
seule la chaîne date les votes de façon indépendante du serveur : c'est elle qui dit lequel est
|
||||
« le dernier ». Elle empêche aussi le serveur d'oublier un vote. L'intuition tient.
|
||||
|
||||
- Les commentaires de transaction sont indexés (`TxComment` : `remark`, `authorId`,
|
||||
`blockNumber`, et les transferts qui le portent). Exemple réel : « Bienvenue dans la June ! »,
|
||||
bloc 3396077.
|
||||
- Un compte mène à son identité (`Account.identity`, `linkedIdentity`), donc au statut de
|
||||
membre.
|
||||
- Le serveur lit déjà la chaîne et l'indexeur pour la taille de la toile (`wot.rs`).
|
||||
## Ce qui est vérifié
|
||||
|
||||
Donc, sans plugin : une transaction commentée, faite depuis Ğecko ou Cesium², se lit côté
|
||||
serveur. On y retrouve le compte qui l'a signée, l'identité de ce compte et son statut de
|
||||
membre.
|
||||
- **Le commentaire d'un virement.** Les quatre portefeuilles (Cesium², Ğecko, Ğ1nkgo,
|
||||
Ğ1Companion) envoient le virement et le commentaire en une transaction indivisible :
|
||||
`utility.batchAll([balances.transferKeepAlive, system.remarkWithEvent(octets)])`.
|
||||
- **Les frais.** Une transaction de moins de 256 octets ne coûte rien tant que la chaîne est peu
|
||||
chargée. Mesuré sur le runtime 1101 : un virement de 0,1 Ğ1 avec un commentaire est gratuit
|
||||
jusqu'à 106 octets de commentaire, puis coûte 0,05 Ğ1.
|
||||
- **Le montant.** Le dépôt minimal est de 1 Ğ1. Un virement de 0,1 Ğ1 passe si le compte
|
||||
destinataire existe déjà et si l'émetteur garde au moins 1 Ğ1 après le virement. Un virement
|
||||
vers soi-même est refusé par les applis et ne laisse pas de trace de transfert.
|
||||
- **L'indexeur.** Il retrouve un commentaire par son empreinte (`hash`, blake2-256 des
|
||||
octets), avec son auteur et l'identité de l'auteur (index, nom, statut de membre), en environ
|
||||
1 s. Un bloc sort toutes les 6 s et la finalité vient 2 ou 3 blocs plus tard : un vote se voit
|
||||
en 6 à 12 s et devient définitif en 20 à 30 s.
|
||||
- **Une remarque seule**, sans virement, est indexée elle aussi, avec son auteur.
|
||||
- **L'indexeur de repli** configuré (`g1-squid.axiom-team.fr`) répond 502 le 30/10. Un seul
|
||||
indexeur répond.
|
||||
- **Ğ1Companion** (ManUtopiK, git.duniter.org/clients/g1companion, v0.1.5-test, dernier commit
|
||||
le 2026-04-19) n'offre aux pages que `window.g1.login`, une connexion sans signature. Il ne
|
||||
sait ni signer ni envoyer une transaction construite par une page. Un plan existe pour ajouter
|
||||
l'interface standard des extensions (`docs/INJECTED_WEB3_PLAN.md`).
|
||||
- **duniter-connect** (fork de polkadot{.js}, sur Firefox et Chrome) s'annonce comme une
|
||||
extension standard et **signe ce que la page construit**. Chaque site est autorisé par la
|
||||
personne. Ses limites :
|
||||
- la fenêtre de confirmation est peu lisible tant que la demande de fusion !4 est ouverte ;
|
||||
- elle affiche les adresses au format `5…` ;
|
||||
- une faille de confidentialité (CVSS 4,8) laisse un site lire la liste des comptes.
|
||||
- **Ğecko** accepte un lien profond et un QR code `g1://<adresse>?amount=0.1&comment=<texte>`,
|
||||
aussi sur ordinateur s'il y est installé. Il ne rend pas la main à la page : la confirmation se
|
||||
lit sur l'indexeur. Ğ1nkgo lit le même format, mais remplace par une espace tout signe hors
|
||||
`[A-Za-z0-9 .;:!?()-_@&<>%]`.
|
||||
- **g1vote** (git.duniter.org/tools/g1vote) fait voter par un virement vers une adresse « pour »
|
||||
ou une adresse « contre ». Le choix y est public. Il a servi au vote de la Licence v0.3.0. Sa
|
||||
liste de tâches prévoit « voter depuis l'interface grâce à duniter-connect ».
|
||||
|
||||
## Non vérifié
|
||||
## L'architecture proposée
|
||||
|
||||
- Qu'un portefeuille puisse envoyer un commentaire seul, sans transfert (une « remarque »).
|
||||
Tous les commentaires observés accompagnent un transfert.
|
||||
- Qu'un portefeuille accepte un virement vers soi-même.
|
||||
- Ce que Ğecko affiche d'une remarque sans transfert.
|
||||
- **Le bulletin scellé.** Le serveur calcule `H = empreinte(scrutin, bulletins, sel aléatoire
|
||||
de 128 bits)`. Le commentaire est `ld1:` suivi de 64 caractères hexadécimaux, soit 68 octets,
|
||||
en Ascii : gratuit, et le filtre de Ğ1nkgo le laisse intact. La chaîne montre qui a voté, quand
|
||||
et combien de fois, mais jamais le choix. Le serveur connaît les choix et n'affiche que les
|
||||
totaux. Chacun peut vérifier son propre vote avec son sel. Sans sel, un choix entre trois
|
||||
options se devinerait.
|
||||
- **Un vote groupé** (tout un document, une section, un article) tient en **une** transaction :
|
||||
l'empreinte couvre la liste des bulletins. Une seule remarque par transaction.
|
||||
- **Le dernier fait foi**, article par article, dans l'ordre de la chaîne (bloc, puis rang de
|
||||
l'événement).
|
||||
- **Qui vote.** Le vote compte pour l'identité Ğ1 du compte qui signe la transaction, membre de
|
||||
la toile. Il n'a donc plus besoin de la connexion Ğ1 : une personne venue par invitation vote
|
||||
avec son portefeuille. L'appartenance à la toile se relit sur la chaîne.
|
||||
- **Dans le navigateur** : la page construit la transaction avec polkadot-api (93 Ko gzip,
|
||||
chargé seulement au moment du vote) et la fait signer par l'extension, qui montre sa fenêtre
|
||||
de confirmation. La page l'envoie au nœud, puis le serveur la retrouve sur l'indexeur.
|
||||
Ğ1Companion et trustinWallet s'y brancheront le jour où ils offriront l'interface standard.
|
||||
- **Sur mobile** : un lien et un QR code Ğecko. Deux gestes (ouvrir, valider), puis la page
|
||||
attend la confirmation de l'indexeur.
|
||||
|
||||
## Les voies
|
||||
## À trancher
|
||||
|
||||
| Voie | Ce que fait la personne | Coût | Ce qu'on prouve | Dépend de |
|
||||
|---|---|---|---|---|
|
||||
| 1. Connexion Ğ1 (connect) | signe la connexion dans Ğecko | rien | la clé à chaque session ; les votes restent sur le serveur | poka |
|
||||
| 2. **Liaison par transaction** | une fois : un petit virement commenté d'un code à usage unique, vers un compte désigné | un virement, une fois | la clé, une fois pour toutes ; ensuite on vote ici | un compte destinataire |
|
||||
| 3. Une transaction par vote | un virement commenté par vote | un virement par vote ; un vote groupé = autant de virements | chaque vote, sur la chaîne, visible dans Ğecko | rien de plus, mais lourd |
|
||||
| 4. Bulletins signés, ancrés | signe ses bulletins (portefeuille ou extension) ; le serveur inscrit l'empreinte des bulletins par une remarque | presque rien | chaque vote, vérifiable par tous | la signature de messages par les portefeuilles (travaux de 1000i100 sur sso-connect, extension) |
|
||||
|
||||
## Recommandation
|
||||
|
||||
- **Maintenant : la voie 2.** Elle débloque le vote sans attendre personne, garde une
|
||||
personne, une voix (une identité Ğ1 ne se lie qu'à une identité ici) et marche avec les
|
||||
portefeuilles d'aujourd'hui. Le virement apparaît dans l'historique Ğecko de la personne.
|
||||
- **Quand connect répond : la voie 1** s'ajoute. Une identité déjà liée retrouve ses votes.
|
||||
- **Plus tard : la voie 4**, pour qu'on puisse vérifier chaque vote hors de notre serveur. Les
|
||||
votes sont déjà publiés avec le texte sur le dépôt git.
|
||||
- **La voie 3 est écartée** : un vote groupé (tout un document) coûterait des dizaines de
|
||||
virements.
|
||||
|
||||
## À trancher pour la voie 2
|
||||
|
||||
- Le compte destinataire et le montant (1 Ğ1 ?) : un compte libreDecision qu'Yvv crée dans
|
||||
Ğecko. Seule son adresse publique va dans la configuration du serveur.
|
||||
- La durée de vie du code (proposé : 24 h) et le délai de lecture (l'indexeur suit la chaîne à
|
||||
quelques blocs près).
|
||||
- La sécurité du vote face au secret : bulletin scellé (proposé) ou choix en clair.
|
||||
- L'extension du geste unique : duniter-connect maintenant, ou une contribution à Ğ1Companion
|
||||
d'abord.
|
||||
- Le compte qui reçoit les 0,1 Ğ1 : à qui il appartient, et ce que deviennent les sommes. Un
|
||||
seul compte pour tous les choix, sinon le choix se lit dans l'adresse. Il doit exister et
|
||||
tenir au moins 1 Ğ1.
|
||||
- Le premier essai réel est une vraie transaction : un acte « paye », du portefeuille d'Yvv.
|
||||
|
||||
Reference in New Issue
Block a user