v3 : C22 ne suppose plus un petit groupe d'essai

Chaque connexion de développement rejoint tous les groupes : B2 et F en ajoutent
quatre chacun, l'essai passe de 13 à 17 membres. Dès 16, B^W passe sous la
précision du calcul et, C valant 1, la voix seule de Chiara fait entrer sa
version de « Connaissance suffisante » en vigueur. Conforme à l'ADR 0002 (essai :
C = 1) ; l'ADR 0007 le dit maintenant. Boucle : 202 tests Rust, svelte-check 0,
49 vitest, e2e 31 / 31.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-10-31 06:09:35 +01:00
co-authored by Claude Opus 5.5
parent cd7e683a4b
commit 924a40d790
4 changed files with 10 additions and 5 deletions
+2 -2
View File
@@ -72,7 +72,7 @@ web/src/
# · g/[group]/decisions · g/[group]/mandats ·
# g/[group]/protocoles (à venir) · acces (trustinWallet) · messages (la boîte) ;
# /groupes, /decisions… redirigent
web/e2e/ # Playwright C1–C24, C28–C31 + M1 ; serve.sh = serveur jetable /tmp/ld-e2e sur :8092 et
web/e2e/ # Playwright C1–C24, C28–C33 + M1 ; serve.sh = serveur jetable /tmp/ld-e2e sur :8092 et
# chain-mock.mjs (nœud et indexeur Ğ1 simulés) ; faux portefeuille dans helpers.ts
docker/ # app.Dockerfile · app-compose.yml (sonic)
.woodpecker/ # app.yml · maquette.yml
@@ -94,7 +94,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 : 29 contrôles
cd web && npm run check && npm test && npm run build && npm run e2e # e2e : 31 contrôles
LD_DEV_LOGIN=1 cargo run -p ld-server # :8002, sert web/build
cd web && npm run dev # :3002 à chaud
+3 -1
View File
@@ -61,7 +61,9 @@ s_k = M_k + (1 − M_k)·(1 − p̃^G_k) ⇔ G_k = ln(1 − (s_k − M_k)/(1
- **C reste un plancher** : à T ≤ C, R = C + B^W ; une seule voix ne fait jamais passer un
texte dans Monnaie libre ;
- le groupe d'essai (W = 2, C = 1) : la référence vaut 100 %, ramenée à 50 % ; G reste fini ;
il faut les deux voix, à tout cran.
il faut les deux voix, à tout cran. Cette garde tient à B^W : dès 16 membres, 0,1^W passe sous
la précision du calcul (1 + 10⁻¹⁶ = 1), et une voix seule suffit alors, C valant 1. Monnaie
libre n'est pas concernée (C = 50).
La borne basse limite aussi l'effet de propositions à une voix multipliées pour faire baisser
la médiane (une médiane basse adoucit les seuils au-dessus d'elle) : à 1 % près, l'effet est
@@ -74,3 +74,4 @@ page, la langue et la taille de l'écran. Les retours se traitent dans trustinWa
| 2026-10-31 | automate | local, lot B (le vote déplié, le panier, le vote par la chaîne Ğ1 simulée) | C1–C24, M1 | 25 / 25 verts |
| 2026-10-31 | automate | local, lot B2 (vote par la chaîne : corrections de la relecture de `74f96be`, reçu), `c7d2791` | C1–C24, C32, C33, M1 | 27 / 27 verts |
| 2026-10-31 | automate | local, lot F (objections « redit » / « contredit », coquilles validées, messages ; horloge du serveur avancée pour l'échéance) | C1–C24, C28–C31, M1 | 29 / 29 verts |
| 2026-10-31 | automate | local, fusion de F avec B2 (`cd7e683`) ; C22 ne suppose plus un groupe d'essai de moins de 16 membres | C1–C24, C28–C33, M1 | 31 / 31 verts |
+4 -2
View File
@@ -79,8 +79,10 @@ test('C22 — le vote groupé : une section en un geste, et l’article à deux
expect(writes.filter((u) => u.endsWith('/votes'))).toHaveLength(1);
expect(writes.filter((u) => u.endsWith('/vote'))).toHaveLength(0);
await expect(panel.getByText("Rien dans le panier pour l'instant.")).toBeVisible();
// Each counted: her version of E3 has its voice, the other none.
await expect(e3.getByRole('group', { name: /variante 1\.0\.0/ }).locator('..')).toContainText('1 pour · 0 contre · ton vote : pour');
// Each counted: her version of E3 has its voice, the other none. Here every
// dev sign-in joins the test group: from 16 members B^W vanishes and, C being 1,
// her voice alone may put her version in force (ADR 0007).
await expect(e3.getByRole('group', { name: /variante 1\.0\.0|en vigueur/ }).locator('..')).toContainText('1 pour · 0 contre · ton vote : pour');
await expect(e3.getByRole('group', { name: /variante 0\.4\.0-draft/ }).locator('..')).toContainText('0 pour · 0 contre');
});