Files
decision/actes/2026-11-03-m9-amorce-hors-vote.md
T

16 KiB
Raw Blame History

Acte — Mise en ligne M9 (l'Acte d'engagement d'Yvv et les informations de fonctionnement hors vote, lots T4, U3 et U3b)

Classe : déploie Projet : libreDecision Date : 2026-11-03

État : PRÉPARÉ, non figé — sur d66823b (d66823b2f626b4833b9422c0bbf418fa698cfcd9, lot U3b fusionné à 23 h 00) ; en attente de la boucle, de l'image et de la relecture indépendante de d66823b — préparé par l'intégrateur libredecision-d4 ; exécuté par orch (dev-63) sous son mandat (« déploie » et « pousse », du 03/11 au 08/11). Mot : « déploie » (rien n'est effacé ; voir « Ce que l'acte écrit »).

Pour Yvv : ce que tu liras de changé

Dans les deux groupes (Monnaie libre et l'essai), en français ici ; en anglais et en espagnol dans docs/chantiers/acte-certification/textes-amorce.md. Tous restent des Propositions d'amorce ouvertes, 0 vote, au cran 2 ; aucun article n'est en vigueur.

I1 « Raison d'être »

  • Avant : « Derrière une clé il n'y a qu'un seul être humain vivant ; derrière un être humain, il n'y a qu'une seule clé certifiante. » / C'est le seul et unique propos de la certification, qui donne à notre toile fiduciaire sa valeur. Nous pouvons nous fier à l'unicité et l'intégrité de tout geste signé par cette clé. C'est l'enjeu de la certification. / Cet acte d'engagement est par ailleurs le seul acte de nature contractuelle qui fonde l'usage de la première monnaie libre.
  • Après : « Derrière une clé il y a un et un seul être humain vivant ; derrière un être humain, il y a une et une seule clé certifiante. » / C'est l'unique enjeu de la certification et de votre engagement, il donne à notre toile fiduciaire sa valeur : pouvoir nous fier à l'unicité et l'intégrité de tout geste signé par cette clé. / Cet acte d'engagement est par ailleurs le seul acte de nature contractuelle, qui fonde l'usage de la première monnaie libre.

E1 « Unicité du compte »

  • Avant : Je m'engage sur l'honneur à n'avoir et n'avoir jamais qu'un seul et unique compte cocréateur de monnaie G1.
  • Après : Je m'engage sur l'honneur à n'avoir et n'avoir jamais qu'un seul et unique compte certifiant.

E12 « Responsabilité civique » (nouveau, entre E1 et E2)

  • Je déclare sur l'honneur avoir la capacité légale et physique de signer un contrat et d'en assumer la responsabilité civique, pour certifier à mon tour.

E2 « Réciprocité »

  • Avant : Je m'engage sur l'honneur à ne certifier que des personnes physiques qui respectent scrupuleusement ces deux présents engagements fondamentaux.
  • Après : Je m'engage sur l'honneur à ne certifier que des personnes physiques qui s'engagent elles-mêmes, à scrupuleusement respecter ces trois principes fondamentaux.

Ce qui sort du document (rien n'est effacé) : les sections « Formule de vote » (F1, F1.1, F1.2, F1.3), « Inertie » (N1, N1.1) et « Ordonnancement » (O1), avec l'ordre de chacune. Elles ne se lisent plus, ne se votent plus, ne se publient plus. Leurs informations sont maintenant dans l'interface, là où elles servent : au vote déplié, dans le panneau « Réglages de la formule », sur la ligne d'ordre et au réglage du quorum.

Ce que tu verras à l'écran

  • En haut du document, avant le texte, l'encadré « Info ouverture doc de réf. », hors vote : ton paragraphe (« Aucun article n'est encore en vigueur. Les Propositions d'amorce y entrent par le vote… »), l'inertie à l'ouverture (Propositions d'amorce 2 / 5, titre 4 / 5, ordre de chaque section 2 / 5, autres articles 3 / 5) et le quorum (12 · 12 · 50 · 50 · 50 votants, du cran 1 au cran 5), lus dans le document.
  • Un filet entre cet encadré et le texte ; plus les titres « Introduction » ni « Engagements fondamentaux ».
  • « Proposition d'amorce » à la place de « Proposition seed ».
  • Sans être connecté, l'accueil dit : « Pour rentrer dans un groupe de décisions, il faut pour l'instant demander un lien d'invitation à Chiara ou à Yvv. Ce prototype n'est pas encore câblé sur la chaîne. »

Les choix faits pour toi (appliqués ; dis lequel tu changes, il se change par un nouvel amendement tant qu'aucun vote n'existe) : « il y a une et une seule clé » (« n'y a » lu comme une coquille, la seule correction de tes mots) ; I1 en trois paragraphes, le premier en italique ; tes virgules gardées ; « ces trois principes » = E1, E12, E2 ; E12 au cran 2 ; le chapitre titré comme tu l'as écrit ; « @ chiara » lu « à Chiara » ; une fois un article en vigueur, la première phrase de ton paragraphe disparaît et « y entrent par le vote » devient « entrent en vigueur par le vote ».

Tes deux propositions d'inertie retirées le 03/11 (sur I1 et E1, Q12) ne bloquent pas la réécriture de ces textes : elles portent sur l'inertie, pas sur le texte, et restent dans l'historique.

Intention

Mettre en ligne la demande d'Yvv du 03/11, faite dans la session de l'intégrateur (vers 20 h 38, puis avant 20 h 44), mot pour mot dans docs/chantiers/acte-certification/tableau.md et textes-amorce.md : les textes I1, E1, E2, l'article nouveau « Responsabilité civique » ; « ordonnancement, inertie, et formule de vote sont des infos de fonctionnement […] Vire les 3 du bas de la liste » ; le chapitre « Info ouverture doc de réf. » ; la séparation avant le texte ; les titres « Introduction » et « Engagements fondamentaux » retirés ; le texte pour qui n'est pas invité. Un seul acte pour T4 et U3 (accord d'orch le 03/11 à 21 h 58) : T4 seul retirerait les informations du document avant que l'interface ne les dise.

Ce qui part

Version d66823b (lots T4, U3, U3b), qui contient la version en ligne de1b7eb.

  • Serveur : migration 0012_retired.sql (additive) ; retire.rs (le retrait) ; article_amend.rs (E12) ; seed_amend.rs (trois amendements, I1, E1, E2) ; les lectures, votes, propositions, objections, coquilles, traductions, comptes et la publication ignorent une unité retirée ; docs.rs : seedFeatured.
  • Seed (seeds/acte-engagement-certification.json, bases neuves) : les textes d'Yvv, E12, sans les sections formule, inertie, ordonnancement.
  • Interface (web/) : le chapitre, la séparation, les titres, les informations dans le vote et les panneaux, « Proposition d'amorce », le texte pour qui n'est pas invité, le réordonnancement sur plusieurs lignes, le tableau des crans lisible sur bureau.
  • Configuration (docker/, .woodpecker/, .env, data/) : rien (prémisse 4).

Ce que l'acte écrit dans la base de production (donnée runtime)

Au premier démarrage, dans une transaction par amendement et par document, une fois :

  • Migration 0012, additive : deux colonnes vides units.retired_at, units.retired_reason ; deux tables de journal retirement_amendments, article_amendments. Aucune colonne retirée, aucune ligne effacée.
  • 2026-11-03-i1-amorce, -e1-amorce, -e2-amorce (amendements de seed gardés, Version::SeedProposal) : texte fr, révision + 1 (I1 → 3, E1 et E2 → 2), une ligne revisions amendment, en et es remplacés, la décision dans seed_amendments, une ligne de file (Monnaie libre). Empreintes : I1 a7095d70… → 32eb36b4…, E1 bdca2713… → df31d0ec…, E2 bde76a30… → a7dd4690…. Refusé à la moindre trace d'une personne (vote, simulé compris ; bulletin ; coquille ; traduction de membre ; objection ; texte différent de l'empreinte) : le texte d'avant reste.
  • 2026-11-03-e12-responsabilite-civique (article_amend.rs) : une unité E12 (section fondamental, position 4,5, entre E1 et E2 tant que l'ordre de la section n'a pas de vote, sinon en fin de section), sa Proposition d'amorce ouverte (cran 2, seed_featured), sa révision initiale, en et es (empreinte 3fa5a8e5…), la décision dans article_amendments, une ligne de file (Monnaie libre).
  • 2026-11-03-fonctionnement-hors-vote (retire.rs) : UPDATE units SET retired_at, retired_reason sur dix unités par document (F1, F1.1, F1.2, F1.3, N1, N1.1, O1, ordre.formule, ordre.inertie, ordre.ordonnancement), tous ou aucun, seulement si aucune trace d'une personne n'existe sur elles (raisons de refus : votes, ballots, adopted, member_proposal, corrected, translation_edited, signalled, quorum_set, changed) ; la décision dans retirement_amendments ; une ligne de file (Monnaie libre). Leurs propositions, révisions, traductions, changements d'inertie et lignes de file restent.
  • La file de publication : les lignes en attente sont reportées (next_at) ; la publication reste suspendue (aucun texte en vigueur). Le groupe d'essai ne publie jamais.
  • Rien d'autre : aucun vote, aucune identité, aucun réglage, aucun autre article.

Répétition

Faite le 03/11 de 22 h 45 min 39 à 22 h 47 min 46, réseau coupé (unshare -rn, boucle locale seule : m9/repetition-isolee.sh, scratchpad de l'intégrateur), avec le serveur construit sur 5730d78 (même code serveur et même seed que d66823b : prémisse 4), copié en m9/ld-server-a47aed0, sur une copie de la copie de production prise par orch de 22 h 41 min 52 à 22 h 42 min 10 (production sur de1b7eb5 ; empreintes vérifiées : 05058b76…, fd4c9fda…, WAL vide), publication vers un dépôt nu local. Journal m9/repetition-1.log ; comparaison ligne à ligne de chaque table par m9/compare.py (lecture seule, par rowid).

Table Avant Après Ce qui change
_sqlx_migrations 11 12 + la migration 12
units 84 86 + E12 × 2 ; 20 unités marquées (retired_at, retired_reason) ; les 64 autres : deux colonnes nouvelles vides
proposals 91 93 + E12 × 2 (ouvertes, seed, seed_featured) ; I1, E1, E2 × 2 : body, revision, updated_at
revisions 123 131 + 6 amendment (I1, E1, E2 × 2), + 2 initial (E12 × 2)
translations 144 148 + 4 (E12 en, es × 2) ; 12 remplacées (I1, E1, E2 en, es × 2 : body, source_hash, updated_at)
seed_amendments 26 32 + 6 décisions applied
article_amendments — 2 table nouvelle, 2 décisions applied (between, 4,5)
retirement_amendments — 2 table nouvelle, 2 décisions applied
outbox 25 (12 en attente) 30 (17 en attente) + 5 (Monnaie libre) ; les 12 en attente reportées (next_at)
Les 22 autres tables (votes 0, bulletins 0, identités 1, réglages, quorums, inertie, invitations, groupes, sessions…) identiques

Aucune ligne supprimée, dans aucune table. integrity_check ok, foreign_key_check vide. Dans chaque groupe, l'ordre de « fondamental » lu : T1, E1, E12, E2. Journal : six « seed amendment applied », deux « article added … placement=Between(4.5) », deux « units out of the document … retired=[F1, F1.1, F1.2, F1.3, N1, N1.1, O1, ordre.formule, ordre.inertie, ordre.ordonnancement] », « publication suspended … waiting=17 », aucune ligne ERROR ; un seul WARN, attendu réseau coupé (« web of trust size: no node nor indexer answered, keeping the last value »). Dépôt nu : 0 commit.

Ce qu'on lit ensuite (connexion de développement sur une copie à part de l'état d'après) : dans chaque groupe, 27 unités, cinq ordres de section (introduction, fondamental, technique, conclusion, annexe) ; I1, E1, E12, E2 au cran 2, Propositions d'amorce (seedProposal, seedFeatured) ; ni F, ni N, ni O.

Un second démarrage ne rejoue rien : toutes les tables identiques, seul le report de la file (next_at).

Le retour, rejoué : le serveur de de1b7eb (m8/ld-server-de1b7eb, celui de la répétition de M8) sur une copie de l'état d'après : démarre, santé ok ; il n'écrit rien d'autre que le report de la file ; il montre, dans chaque groupe, 34 unités : les sept articles F1 à O1 et les huit ordres de section reviennent, avec les nouveaux textes d'I1, E1, E2 et E12 entre E1 et E2 (ce sont des données). Un nouveau passage au serveur de d66823b ensuite ne rejoue rien (seul le report de la file) : les dix unités restent retirées, puisque leur marque est restée.

Effet attendu

  • Dans les deux groupes : I1, E1, E2 aux textes d'Yvv, E12 entre E1 et E2, en fr, en, es ; ni formule, ni inertie, ni ordonnancement dans le document ; l'encadré « Info ouverture doc de réf. » en tête.
  • L'accueil sans session dit le texte pour qui n'est pas invité.
  • La publication reste suspendue ; le dépôt des textes reste à 9e0f45a.

Irréversibilité : partielle. Le code se remet en arrière (previous = de1b7eb) et les sept articles réapparaissent ; les nouveaux textes et E12 restent (l'ancien texte est dans l'historique de chaque proposition) ; la migration 0012 reste (ignorée par de1b7eb, set_ignore_missing).

Avant — prémisses vivantes

  1. La production sert de1b7eb : santé "build":"de1b7eb5" ; prod/main → de1b7eb.
  2. Sur une copie fraîche, m8/counts.sh <db> identique à la ligne près à la colonne « Avant » de la répétition (migrations 1 à 11, integrity ok, identities 1, votes 0, revisions 123, translations 144, file pending=12 done=13, seed_amendments 26) ; et m9/traces.sh <db> (scratchpad de l'intégrateur, lecture seule) : pour I1, E1, E2 et les dix unités, dans les deux groupes, votes, bulletins, coquilles, objections, traductions de membre et quorums fixés à 0 ; propositions de membre : seulement inertia/withdrawn sur I1 et E1 dans Monnaie libre (les deux propositions d'inertie d'Yvv du 29/10, retirées par lui le 03/11, Q12). Elles ne touchent pas le retrait : I1 et E1 ne sont pas retirés, et la garde du retrait n'a aucune exception (une proposition de membre, de toute sorte et de tout statut, sur une des dix unités, refuse le retrait : retire.rs, member_versions). Elles ne touchent pas non plus la réécriture d'I1 et d'E1 : sa garde lit les traces sur la Proposition d'amorce elle-même (votes, bulletins, coquilles, traductions de membre, objections, révision, empreinte), pas les autres propositions de l'article (seed_amend.rs, facts) ; elles portent sur l'inertie, pas sur le texte, et restent dans l'historique de l'article. En vigueur : seuls les trois ordres (modules en vigueur sans vote) ; en tout 0 vote, 0 bulletin, aucune E12, migration 11. Lu par l'intégrateur le 03/11 à 22 h 50 sur sa copie de la copie d'orch de 22 h 41 : l'attendu exact. Une trace fait refuser l'amendement concerné avec sa raison, et rien ne bouge pour lui.
  3. La relecture indépendante de d66823b, inscrite « ok » dans ~/harness/etat/relectures.json.
  4. git diff de1b7eb d66823b -- docker/ .woodpecker/ .env data/ → vide ; sous crates/ld-server/migrations/, le seul ajout 0012_retired.sql ; git diff 5730d78 d66823b -- crates/ seeds/ → vide (la répétition vaut pour d66823b). Vu par l'intégrateur le 03/11 à 23 h 01.
  5. Boucle verte sur d66823b et image de production construite (à remplir).
  6. Sur sonic, aucun témoin /opt/libredecision-app/deploying.

Commande exacte

cd /home/yvv/Documents/PROD/DEV/libreDecision
git push prod d66823b2f626b4833b9422c0bbf418fa698cfcd9:main

Puis la branche du chantier (orch, même mandat) : git push origin chantier/acte-certification.

Vérifications après

  • Santé vue de l'extérieur → "build":"d66823b2".
  • Journaux : six « seed amendment applied » (2026-11-03-i1-amorce, -e1-amorce, -e2-amorce × essai, Monnaie libre), deux « article added … Between(4.5) », deux « units out of the document », « publication suspended … waiting=17 », aucune ligne ERROR ni WARN.
  • Redémarrage à froid : aucun amendement rejoué.
  • Sur une copie fraîche : m9/compare.py <copie d'avant> <copie d'après> donne exactement la table de la répétition, « AUCUNE LIGNE SUPPRIMÉE » ; integrity_check ok.
  • Vue de l'extérieur, https://decision.librodrome.org/ sans session : le texte pour qui n'est pas invité.
  • Le dépôt des textes reste à 9e0f45a.

Retour

  • Le code : docker tag libredecision-app:previous libredecision-app:latest, puis cd /opt/libredecision-app && docker compose up -d --force-recreate. previous sera de1b7eb, qui ignore la migration 0012 et la colonne : les sept articles et les trois ordres réapparaissent, rien d'effacé (rejoué en répétition). Un nouveau passage à d66823b ne rejoue rien.
  • Les textes : pas de retour automatique ; l'ancien texte reste dans l'historique de chaque proposition, un nouvel amendement gardé pourrait le remettre. E12 reste (donnée).

Exécution

(à remplir par orch)