Lot T2 : les trois phrases de F1.1, F1.2 et N1.1 écrites justes (la part du cran, la plus haute au quorum, baisse quand la participation monte ; le quorum se fixe tant que l'article ne garde la trace d'aucun vote ; le quorum n'est pas un nombre minimal de votants), dans le seed et par un amendement gardé qui suit celui de M6b

- seed_amend : 2026-11-03-f1-1-phrases, -f1-2-phrases, -n1-1-phrases ; la garde admet la révision écrite par la chaîne des amendements suivis (earlier), dans leur ordre, le dernier étant celui de M6b (F1.1 en révision 2, F1.2 et N1.1 en révision 3) ; les amendements de M6b dépassés ; le commentaire dit les deux votes qui ne laissent pas de trace (vote direct retiré dans le groupe d'essai, votes simulés après « supprime »)
- tests : base faite comme la production après M6b (fixture seed-quorum-m6b.json), appliqué une fois, refus votes et ballots, second démarrage sans rejeu, base née le 02/11 ; les phrases et leur preuve par le moteur ; le quorum de nouveau réglable après un vote direct retiré et après « supprime »
- moteur : la part exigée au quorum en production (W 5 707) : 64,4 · 73,5 · 77,4 · 85,3 · 91,9 % (la relecture disait 74 au cran 2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-11-03 10:12:12 +01:00
co-authored by Claude Opus 5.5
parent f6c110a60c
commit a32912373d
8 changed files with 811 additions and 92 deletions
+10
View File
@@ -2073,6 +2073,16 @@ async fn a_vote_exists_for_every_state_of_the_buffer() {
ld_server::simulation::discard(&state, true).await.expect("act");
assert!(!exists(unit_id("E3")).await && !exists(unit_id("E4")).await);
assert!(exists(unit_id("E1")).await, "a proven trace stays");
// And the quorum changes again where no trace stays — « tant que l'article ne garde la
// trace d'aucun vote » (F1.2, lot T2), not « ensuite, il ne change plus ».
for code in ["E3", "E4"] {
let (s, v) =
admin.call("PUT", &format!("/api/units/{}/quorum", unit_id(code)), Some(json!({ "quorum": 20 }))).await;
assert_eq!(s, StatusCode::OK, "{code}: {v}");
}
let (s, v) =
admin.call("PUT", &format!("/api/units/{}/quorum", unit_id("E1")), Some(json!({ "quorum": 20 }))).await;
assert_eq!((s, v["error"].as_str()), (StatusCode::CONFLICT, Some("voted")), "E1: its proven trace holds it");
let _ = doc_id;
}