diff --git a/CLAUDE.md b/CLAUDE.md index 8b17ff5..f84288c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -52,7 +52,7 @@ web/src/ # g/[group]/docs · g/[group]/docs/[doc] (lecteur, # panneau dans l'URL ?onglet=&article=) · g/[group]/decisions · g/[group]/mandats · # g/[group]/protocoles (à venir) · acces (trustinWallet) ; /groupes, /decisions… redirigent -web/e2e/ # Playwright C1–C17 + M1 ; serve.sh = serveur jetable /tmp/ld-e2e sur :8092 +web/e2e/ # Playwright C1–C19 + M1 ; serve.sh = serveur jetable /tmp/ld-e2e sur :8092 docker/ # app.Dockerfile · app-compose.yml (sonic) .woodpecker/ # app.yml · maquette.yml docs/ # chantiers/ · adr/ · dev/BLUEPRINT-V2.md (doctrine de la maquette) · recherche/ @@ -73,7 +73,7 @@ maquette/ # v2 intacte (frontend Nuxt, backend FastAPI, docker, docs-v ```bash export PATH=$HOME/.cargo/bin:$PATH 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 # e2e : 18 contrôles +cd web && npm run check && npm test && npm run build && npm run e2e # e2e : 20 contrôles LD_DEV_LOGIN=1 cargo run -p ld-server # :8002, sert web/build cd web && npm run dev # :3002 à chaud diff --git a/actes/2026-10-30-m1-mise-en-ligne.md b/actes/2026-10-30-m1-mise-en-ligne.md index 0a01842..383c73f 100644 --- a/actes/2026-10-30-m1-mise-en-ligne.md +++ b/actes/2026-10-30-m1-mise-en-ligne.md @@ -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 : PRÉPARÉ** (relecture indépendante en cours ; le SHA est figé quand elle rend « ok ») +**État : FIGÉ (2026-10-30, 14 h 50)** sur `8727315` — relecture « 8727315 : ok » inscrite (sous-agent neuf, 30/10 14 h 45) ## Intention @@ -71,6 +71,24 @@ sont identiques à ceux de `dc2de09` (prémisse 4). 0 avertissement, 16 vitest, e2e 20 / 20), et l'image de production se construit (`docker build --target production`, sortie 0, `seeds/upcoming/` présent dans l'image). +6. Le Préambule est toujours intact en production, sans proposition de texte rivale. Sur une + copie fraîche de la base (`docker exec lpk-libredecision-app cat /data/libredecision.db*` + vers `/tmp/ld-prod-copie/`, lecture seule), la requête suivante : + ```sql + SELECT d.group_slug, p.kind, p.status, p.origin, + (SELECT COUNT(*) FROM votes v WHERE v.proposal_id=p.id), + (SELECT group_concat(kind) FROM revisions r WHERE r.proposal_id=p.id) + FROM proposals p JOIN units u ON u.id=p.unit_id JOIN documents d ON d.id=u.doc_id + WHERE u.code='I1'; + ``` + doit rendre, comme le 30/10 à 13 h 43 : + - `monnaie-libre|text|in_force|seed|0|initial` ; + - `monnaie-libre|inertia|open|member|0|initial`, la proposition d'Yvv du 29/10 ; + - `essai|text|in_force|seed|0|initial`. + + Toute autre ligne `text` ou `remove` arrête l'acte : la relecture a montré que l'amendement + ne regarde pas les propositions rivales. + ## Commandes exactes ```sh @@ -117,9 +135,14 @@ reste en base, et le commit du dépôt des textes reste publié. Plus rapide, sur sonic : `docker tag libredecision-app:previous libredecision-app:latest`, puis `cd /opt/libredecision-app && docker compose up -d --force-recreate`. L'ancienne version démarre sur la base migrée (la table ajoutée ne la gêne pas). Elle - affiche la clé brute « history.amendment » dans l'historique de I1, et y refuse toute - coquille, parce qu'elle la mesure contre le Préambule : c'est un refus, jamais une - écriture à tort. + affiche la clé brute « history.amendment » dans l'historique de I1. Elle mesure les + coquilles de I1 contre le Préambule, ce qui a deux effets : + - une vraie coquille sur la Raison d'être est refusée ; + - n'importe quel membre peut ramener le Préambule par une « coquille », qui serait alors + publiée. La relecture l'a prouvé. + + Un retour de code se fait donc au plus court, puis on revient sur une version corrigée. + Tant qu'il dure, on surveille l'historique de I1. - **La Raison d'être en base** : **pas de retour automatique**. Revenir au Préambule 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 diff --git a/docs/chantiers/acte-certification/CHANTIER.md b/docs/chantiers/acte-certification/CHANTIER.md index 7f9d863..90618f7 100644 --- a/docs/chantiers/acte-certification/CHANTIER.md +++ b/docs/chantiers/acte-certification/CHANTIER.md @@ -14,10 +14,13 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre. ## Ce que voit la personne -1. **Accueil sobre** : « Rendre possible la décision collective » / « en fonction du contexte, - processus et modalités, boîte à outils », les quatre outils en une ligne chacun, puis la - connexion. Le menu complet à gauche : Décisions · Docs de référence · Mandats · Protocoles - (seul Docs de référence est actif). +1. **Accueil sobre** (revue du 2026-10-30) : « Rendre possible la décision collective », puis le + leitmotiv en trois lignes (contexte et cadrage · processus et modalités · boîte à outils), puis + **directement le choix du groupe** (sans session : la connexion). Le pavé des quatre outils + accueille dans le groupe choisi, suivi de ce qui y est « En cours ». Le menu complet à gauche : + Décisions · Docs de référence (avec le nombre de docs en cours) · Mandats · Protocoles ; seul + Docs de référence réagit, les autres s'ouvrent sur leurs « À venir », éteints. Décisions : une + ligne par doc en cours, avec le nombre de modules qui restent à voter. 2. **Connexion Ğ1** — la même que le forum Monnaie libre (connect.monnaie-libre.fr). En attendant l'inscription du client OAuth2, des **liens d'invitation** à usage unique (une personne), et des **liens d'équipe** réutilisables jusqu'à une date (chaque ouverture crée sa propre