forked from yvv/decision
Fusion du lot T3b (relecture de 2ce2028) : la phrase de G de N1.1 vraie pour tout W et tout quorum (« au-delà du quorum […] quand le groupe vote comme d'habitude ») ; « autant de « pour » que si le quorum avait voté » ; le test de « 100 votants » honnête ; l'amendement 2026-11-03-n1-1-chiffres repris lui-même (to 7f62fd42…)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -225,7 +225,9 @@ pub const AMENDMENTS: &[Amendment] = &[
|
|||||||
// texte voté »), every sentence true for every W and every quorum: N1.1 loses its example
|
// texte voté »), every sentence true for every W and every quorum: N1.1 loses its example
|
||||||
// (7 224 members, 120 voters) and says that under the quorum it takes as many « pour » as if
|
// (7 224 members, 120 voters) and says that under the quorum it takes as many « pour » as if
|
||||||
// the quorum had voted; N1.1 and F1.2 ask the share of a level « comme d'habitude » beyond the
|
// the quorum had voted; N1.1 and F1.2 ask the share of a level « comme d'habitude » beyond the
|
||||||
// quorum. Each replaces the text lot T2 wrote, at its revision 4. F1.1 is not touched.
|
// quorum. Each replaces the text lot T2 wrote, at its revision 4. F1.1 is not touched. After
|
||||||
|
// the review of 2ce2028 (lot T3b, before it went online, so the same amendment): N1.1 says G
|
||||||
|
// gives the share of the level beyond the quorum, and « autant de « pour » » in French.
|
||||||
Amendment {
|
Amendment {
|
||||||
id: "2026-11-03-f1-2-chiffres",
|
id: "2026-11-03-f1-2-chiffres",
|
||||||
doc: "acte-engagement-certification",
|
doc: "acte-engagement-certification",
|
||||||
@@ -243,8 +245,8 @@ pub const AMENDMENTS: &[Amendment] = &[
|
|||||||
unit: "N1.1",
|
unit: "N1.1",
|
||||||
version: Version::Open("1.0.0"),
|
version: Version::Open("1.0.0"),
|
||||||
from: "7fbedcb8750c208f8790c4f87dc21d8bd1096a27a1a0044af6b9b8f2057f2aa8",
|
from: "7fbedcb8750c208f8790c4f87dc21d8bd1096a27a1a0044af6b9b8f2057f2aa8",
|
||||||
to: "4289e3579ee747f6023162339ed60601b810d33462617b42a9f8b5b3735c3238",
|
to: "7f62fd42617c6e63b1783d5a4d472ed733aa074222240faf834e6b31f1c9c166",
|
||||||
reason: "proposition de départ réécrite : N1.1, sans chiffre daté ; sous le quorum, autant de voix pour que si le quorum avait voté",
|
reason: "proposition de départ réécrite : N1.1, sans chiffre daté ; sous le quorum, autant de « pour » que si le quorum avait voté ; G, la part du cran au-delà du quorum",
|
||||||
follows: Some("2026-11-03-n1-1-phrases"),
|
follows: Some("2026-11-03-n1-1-phrases"),
|
||||||
superseded_by: None,
|
superseded_by: None,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -21,6 +21,12 @@
|
|||||||
//! only (N1.1, F1.2). A third guarded amendment, which follows lot T2's, writes them on a base
|
//! only (N1.1, F1.2). A third guarded amendment, which follows lot T2's, writes them on a base
|
||||||
//! made as production is after M6c; the texts of T2 are kept in
|
//! made as production is after M6c; the texts of T2 are kept in
|
||||||
//! `tests/fixtures/seed-quorum-t2.json`. F1.1 needs none: it is not touched.
|
//! `tests/fixtures/seed-quorum-t2.json`. F1.1 needs none: it is not touched.
|
||||||
|
//!
|
||||||
|
//! After the review of lot T3 (2ce2028, lot T3b, before it went online: the same amendment, its
|
||||||
|
//! fingerprint `to` changed): N1.1 says G gives the share of the level beyond the quorum, when the
|
||||||
|
//! group votes as usual — « à la participation habituelle » was false under the quorum; « autant de
|
||||||
|
//! « pour » » in French; and « 100 votants » is checked as the parameter it is, not as a turnout
|
||||||
|
//! that would hold on every W.
|
||||||
|
|
||||||
use ld_engine::inertia::{InertiaLevel, Participation, Scale, gradient, quorum_bounds};
|
use ld_engine::inertia::{InertiaLevel, Participation, Scale, gradient, quorum_bounds};
|
||||||
use ld_engine::threshold::{FormulaParams, Tally, judged_voters, passes, required_ratio, wot_threshold, yes_needed};
|
use ld_engine::threshold::{FormulaParams, Tally, judged_voters, passes, required_ratio, wot_threshold, yes_needed};
|
||||||
@@ -122,14 +128,18 @@ fn seed_dir(tag: &str, seed: &Value) -> PathBuf {
|
|||||||
|
|
||||||
/// Every figure the texts may hold: parameters of the seed and constants of the engine and
|
/// Every figure the texts may hold: parameters of the seed and constants of the engine and
|
||||||
/// the server. Since lot T3 (Yvv, 03/11: « pas de chiffre datés dans un texte voté »), none
|
/// the server. Since lot T3 (Yvv, 03/11: « pas de chiffre datés dans un texte voté »), none
|
||||||
/// depends on the web of trust W or on a turnout: no participation goes in, and the same
|
/// is computed from the web of trust W or from a turnout: no participation goes in. The one
|
||||||
/// figures come out on every W of Monnaie libre (`figures`).
|
/// the engine computes from W, the lowest quorum an author may set, comes out the same on
|
||||||
|
/// every W of Monnaie libre (`figures`); the others no W enters.
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
struct Figures {
|
struct Figures {
|
||||||
/// Q_k of Monnaie libre (the seed).
|
/// Q_k of Monnaie libre (the seed).
|
||||||
quorums: [u32; 5],
|
quorums: [u32; 5],
|
||||||
/// Twice the reference quorum of the document, in voters (the engine's p0 · W, before
|
/// « deux fois le quorum de référence du document : 100 votants » — a parameter, 2 ×
|
||||||
/// the bounds).
|
/// voteFloor, written before the bounds; not a turnout that holds on every W. The engine's
|
||||||
|
/// p0 = 2 × voteFloor / W is that many voters only on a web of 200 to 10 000 members;
|
||||||
|
/// beyond, the bounds N1.1 says after it, in the same paragraph, bring it back
|
||||||
|
/// (`the_reference_turnout_is_a_parameter_the_bounds_bring_back`).
|
||||||
reference: u32,
|
reference: u32,
|
||||||
/// The lowest quorum an author may set in Monnaie libre.
|
/// The lowest quorum an author may set in Monnaie libre.
|
||||||
lowest_quorum: u32,
|
lowest_quorum: u32,
|
||||||
@@ -155,8 +165,8 @@ fn figures_at(seed: &Value, w: u32) -> Figures {
|
|||||||
let ml =
|
let ml =
|
||||||
seed["instances"].as_array().expect("instances").iter().find(|i| i["group"] == "monnaie-libre").expect("ml");
|
seed["instances"].as_array().expect("instances").iter().find(|i| i["group"] == "monnaie-libre").expect("ml");
|
||||||
let quorums: [u32; 5] = serde_json::from_value(ml["quorums"].clone()).expect("quorums");
|
let quorums: [u32; 5] = serde_json::from_value(ml["quorums"].clone()).expect("quorums");
|
||||||
let vote_floor = ml["voteFloor"].as_f64().expect("voteFloor");
|
// Twice the reference quorum: a parameter, the same whatever W (no W enters it).
|
||||||
let reference = Participation::reference_ratio(w, vote_floor) * f64::from(w);
|
let reference = 2.0 * ml["voteFloor"].as_f64().expect("voteFloor");
|
||||||
assert!((reference - reference.round()).abs() < 1e-6, "a whole number of voters: {reference}");
|
assert!((reference - reference.round()).abs() < 1e-6, "a whole number of voters: {reference}");
|
||||||
let levels: Vec<u8> = seed["units"]
|
let levels: Vec<u8> = seed["units"]
|
||||||
.as_array()
|
.as_array()
|
||||||
@@ -185,7 +195,9 @@ fn figures_at(seed: &Value, w: u32) -> Figures {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The figures of the texts: the same on every W Monnaie libre may have — none is dated.
|
/// The figures of the texts, on every W Monnaie libre may have: none is dated. Only the lowest
|
||||||
|
/// quorum is computed from W here; the reference turnout is a parameter, and where it is a
|
||||||
|
/// turnout is `the_reference_turnout_is_a_parameter_the_bounds_bring_back`.
|
||||||
fn figures(seed: &Value) -> Figures {
|
fn figures(seed: &Value) -> Figures {
|
||||||
let mut all = ELECTORATES.iter().map(|w| (*w, figures_at(seed, *w)));
|
let mut all = ELECTORATES.iter().map(|w| (*w, figures_at(seed, *w)));
|
||||||
let (_, first) = all.next().expect("an electorate");
|
let (_, first) = all.next().expect("an electorate");
|
||||||
@@ -397,21 +409,28 @@ fn claims(code: &str, lang: &str, f: &Figures, seed: &Value) -> Vec<String> {
|
|||||||
.collect();
|
.collect();
|
||||||
let (b0, b1) = (pct(lang, f.bounds.0), pct(lang, f.bounds.1));
|
let (b0, b1) = (pct(lang, f.bounds.0), pct(lang, f.bounds.1));
|
||||||
let (ms, r) = (f.min_sample, f.reference);
|
let (ms, r) = (f.min_sample, f.reference);
|
||||||
|
// s of each level, as the sentence of G names them: the shares of the list, level 1 to 5.
|
||||||
|
let (top, lower) = InertiaLevel::ALL.split_last().expect("five levels");
|
||||||
|
let head = lower.iter().map(|k| dec(lang, k.share_pct())).collect::<Vec<_>>().join(", ");
|
||||||
|
let last = pct(lang, top.share_pct());
|
||||||
out.extend(match lang {
|
out.extend(match lang {
|
||||||
"fr" => [
|
"fr" => [
|
||||||
"propositions du groupe votées depuis un an".to_owned(),
|
"propositions du groupe votées depuis un an".to_owned(),
|
||||||
format!("Tant que le groupe n'a pas voté sur {ms} propositions, elle vaut deux fois le quorum de référence du document : {r} votants dans Monnaie libre"),
|
format!("Tant que le groupe n'a pas voté sur {ms} propositions, elle vaut deux fois le quorum de référence du document : {r} votants dans Monnaie libre"),
|
||||||
format!("Elle reste entre {b0} et {b1} de l'électorat, et se mesure une fois par jour"),
|
format!("Elle reste entre {b0} et {b1} de l'électorat, et se mesure une fois par jour"),
|
||||||
|
format!("où s est cette part du cran ({head} ou {last})"),
|
||||||
],
|
],
|
||||||
"en" => [
|
"en" => [
|
||||||
"the group's proposals voted on over the past year".to_owned(),
|
"the group's proposals voted on over the past year".to_owned(),
|
||||||
format!("Until the group has voted on {ms} proposals, it is twice the document's reference quorum: {r} voters in Monnaie libre"),
|
format!("Until the group has voted on {ms} proposals, it is twice the document's reference quorum: {r} voters in Monnaie libre"),
|
||||||
format!("It stays between {b0} and {b1} of the electorate, and is measured once a day"),
|
format!("It stays between {b0} and {b1} of the electorate, and is measured once a day"),
|
||||||
|
format!("where s is that share of the level ({head} or {last})"),
|
||||||
],
|
],
|
||||||
_ => [
|
_ => [
|
||||||
"propuestas del grupo votadas en el último año".to_owned(),
|
"propuestas del grupo votadas en el último año".to_owned(),
|
||||||
format!("Hasta que el grupo haya votado {ms} propuestas, vale dos veces el quórum de referencia del documento: {r} votantes en Monnaie libre"),
|
format!("Hasta que el grupo haya votado {ms} propuestas, vale dos veces el quórum de referencia del documento: {r} votantes en Monnaie libre"),
|
||||||
format!("Se mantiene entre el {b0} y el {b1} del electorado, y se mide una vez al día"),
|
format!("Se mantiene entre el {b0} y el {b1} del electorado, y se mide una vez al día"),
|
||||||
|
format!("donde s es esa proporción del nivel ({head} o {last})"),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
out
|
out
|
||||||
@@ -600,9 +619,10 @@ fn the_three_phrases_of_the_review_of_m6b_are_written_true() {
|
|||||||
// Lot T3: no dated figure, every sentence true for every W and every quorum
|
// Lot T3: no dated figure, every sentence true for every W and every quorum
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
/// (article, language, the words of T2, the words of today): the only change of lot T3. F1.1
|
/// (article, language, the words of T2, the words of today): the only change of lot T3, with its
|
||||||
/// has none: it holds no dated figure and every sentence of it is true (`b_to_the_power_w_…`).
|
/// review (2ce2028: the sentence of G; « autant de « pour » » in French). F1.1 has none: it holds
|
||||||
const PHRASES_T3: [(&str, &str, &str, &str); 12] = [
|
/// no dated figure and every sentence of it is true (`b_to_the_power_w_…`).
|
||||||
|
const PHRASES_T3: [(&str, &str, &str, &str); 15] = [
|
||||||
(
|
(
|
||||||
"F1.2",
|
"F1.2",
|
||||||
"fr",
|
"fr",
|
||||||
@@ -625,7 +645,7 @@ const PHRASES_T3: [(&str, &str, &str, &str); 12] = [
|
|||||||
"N1.1",
|
"N1.1",
|
||||||
"fr",
|
"fr",
|
||||||
"Chaque cran a aussi son quorum, qui n'est pas un nombre minimal de votants : sous le quorum, les votants qui manquent comptent comme « non ».",
|
"Chaque cran a aussi son quorum, qui n'est pas un nombre minimal de votants : sous le quorum, les votants qui manquent comptent comme « non ».",
|
||||||
"Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent comme « non », et il faut autant de voix pour que si le quorum avait voté.",
|
"Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent comme « non », et il faut autant de « pour » que si le quorum avait voté.",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"N1.1",
|
"N1.1",
|
||||||
@@ -675,6 +695,24 @@ const PHRASES_T3: [(&str, &str, &str, &str); 12] = [
|
|||||||
"\n\nEjemplo: con 7224 miembros y una participación habitual de 120 votantes, cuando votan 120 personas, hacen falta 72, 81, 90, 100 o 108 votos a favor, del nivel 1 al nivel 5; en el nivel 3, el 75 % de los 120 votantes, es decir 90. Por debajo del quórum, los que faltan cuentan como «no»: en el nivel 2 (quórum 12), 9 votos a favor pasan con 3 en contra como mucho; en el nivel 3 (quórum 50), hacen falta 39 votos a favor, con 11 en contra como mucho.",
|
"\n\nEjemplo: con 7224 miembros y una participación habitual de 120 votantes, cuando votan 120 personas, hacen falta 72, 81, 90, 100 o 108 votos a favor, del nivel 1 al nivel 5; en el nivel 3, el 75 % de los 120 votantes, es decir 90. Por debajo del quórum, los que faltan cuentan como «no»: en el nivel 2 (quórum 12), 9 votos a favor pasan con 3 en contra como mucho; en el nivel 3 (quórum 50), hacen falta 39 votos a favor, con 11 en contra como mucho.",
|
||||||
"",
|
"",
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"N1.1",
|
||||||
|
"fr",
|
||||||
|
"**G** se calcule pour que la part exigée, à la participation habituelle, soit exactement celle du cran : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est la part exigée comme d'habitude et p̃ la participation habituelle divisée par W.",
|
||||||
|
"**G** se calcule pour que la part exigée, au-delà du quorum, soit exactement celle du cran quand le groupe vote comme d'habitude : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est cette part du cran (60, 67, 75, 83 ou 90 %) et p̃ la participation habituelle divisée par W.",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"N1.1",
|
||||||
|
"en",
|
||||||
|
"**G** is computed so that the share asked, at the usual turnout, is exactly that of the level: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, where s is the share asked as usual and p̃ the usual turnout divided by W.",
|
||||||
|
"**G** is computed so that the share asked, beyond the quorum, is exactly that of the level when the group votes as usual: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, where s is that share of the level (60, 67, 75, 83 or 90%) and p̃ the usual turnout divided by W.",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"N1.1",
|
||||||
|
"es",
|
||||||
|
"**G** se calcula para que la proporción exigida, con la participación habitual, sea exactamente la del nivel: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, donde s es la proporción exigida como de costumbre y p̃ la participación habitual dividida por W.",
|
||||||
|
"**G** se calcula para que la proporción exigida, más allá del quórum, sea exactamente la del nivel cuando el grupo vota como de costumbre: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, donde s es esa proporción del nivel (60, 67, 75, 83 o 90 %) y p̃ la participación habitual dividida por W.",
|
||||||
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
/// The texts of T2 with the phrases of lot T3 written in: what the seed gives today.
|
/// The texts of T2 with the phrases of lot T3 written in: what the seed gives today.
|
||||||
@@ -717,7 +755,8 @@ fn participations(w: u32, vote_floor: f64) -> [f64; 4] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// N1.1, the phrase of lot T3: « sous le quorum, les votants qui manquent comptent comme « non »,
|
/// N1.1, the phrase of lot T3: « sous le quorum, les votants qui manquent comptent comme « non »,
|
||||||
/// et il faut autant de voix pour que si le quorum avait voté ». True for every quorum an author
|
/// et il faut autant de « pour » que si le quorum avait voté » (after the review of 2ce2028: « de
|
||||||
|
/// voix pour que » read first as « pour que », a conjunction). True for every quorum an author
|
||||||
/// may set (2 to W in Monnaie libre, 1 to W in the test group), every level, every W, every
|
/// may set (2 to W in Monnaie libre, 1 to W in the test group), every level, every W, every
|
||||||
/// participation within the bounds: the « pour » that pass with nobody against, fewer voters
|
/// participation within the bounds: the « pour » that pass with nobody against, fewer voters
|
||||||
/// than the quorum, are the threshold of the quorum; and under it, a tally passes exactly when
|
/// than the quorum, are the threshold of the quorum; and under it, a tally passes exactly when
|
||||||
@@ -727,7 +766,7 @@ fn participations(w: u32, vote_floor: f64) -> [f64; 4] {
|
|||||||
fn under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted() {
|
fn under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted() {
|
||||||
let today = today_seed();
|
let today = today_seed();
|
||||||
let said = [
|
let said = [
|
||||||
("fr", "et il faut autant de voix pour que si le quorum avait voté."),
|
("fr", "et il faut autant de « pour » que si le quorum avait voté."),
|
||||||
("en", "and it takes as many votes in favour as if the quorum had voted."),
|
("en", "and it takes as many votes in favour as if the quorum had voted."),
|
||||||
("es", "y hacen falta tantos votos a favor como si hubiera votado el quórum."),
|
("es", "y hacen falta tantos votos a favor como si hubiera votado el quórum."),
|
||||||
];
|
];
|
||||||
@@ -791,6 +830,49 @@ fn under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted() {
|
|||||||
assert!(minimum.iter().any(|m| m.0 && m.3 == 1));
|
assert!(minimum.iter().any(|m| m.0 && m.3 == 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// One case of the grid of « comme d'habitude »: a web, the usual turnout of its group (in voters,
|
||||||
|
/// and as p̃), a level and a quorum.
|
||||||
|
struct AsUsual {
|
||||||
|
w: u32,
|
||||||
|
usual: u32,
|
||||||
|
p: f64,
|
||||||
|
k: InertiaLevel,
|
||||||
|
q: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsUsual {
|
||||||
|
fn at(&self) -> String {
|
||||||
|
format!("W {} usual {} k {} Q {}", self.w, self.usual, self.k.get(), self.q)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The grid of « comme d'habitude » (lot T3 and its review): every W of the grid, usual turnouts
|
||||||
|
/// within the bounds (a median out of them is brought back, and is then not the group's usual
|
||||||
|
/// turnout), every level, quorums from 2 to W, among them the usual turnout and one more.
|
||||||
|
fn as_usual_grid() -> Vec<AsUsual> {
|
||||||
|
let mut grid = Vec::new();
|
||||||
|
for w in ELECTORATES {
|
||||||
|
for usual in [w / 100 + 1, 12, 40, 50, 100, 120, 1000, w / 2] {
|
||||||
|
let part = Participation::of(w, 50.0, Some(f64::from(usual)), 9);
|
||||||
|
if part.bounded {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for k in InertiaLevel::ALL {
|
||||||
|
for q in [2, 12, 50, 100, 1000, usual, usual + 1, w].into_iter().filter(|q| (2..=w).contains(q)) {
|
||||||
|
grid.push(AsUsual { w, usual, p: part.ratio, k, q });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
grid
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The letters of the formula for a case of the grid (the quorums of the scale do not enter: the
|
||||||
|
/// quorum is the case's).
|
||||||
|
fn as_usual_params(c: &AsUsual) -> FormulaParams {
|
||||||
|
Scale { electorate: c.w, participation: c.p, quorums: [12, 12, 50, 50, 50] }.params(c.k, c.q)
|
||||||
|
}
|
||||||
|
|
||||||
/// N1.1 and F1.2, lot T3: the share of a level « comme d'habitude » is asked beyond the quorum
|
/// N1.1 and F1.2, lot T3: the share of a level « comme d'habitude » is asked beyond the quorum
|
||||||
/// only. When the usual turnout reaches the quorum, the group voting as usual is asked s_k; when
|
/// only. When the usual turnout reaches the quorum, the group voting as usual is asked s_k; when
|
||||||
/// it does not (a web of fewer than 5 000 members and a median under 50 at a quorum of 50, an
|
/// it does not (a web of fewer than 5 000 members and a median under 50 at a quorum of 50, an
|
||||||
@@ -799,31 +881,19 @@ fn under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn the_share_of_a_level_as_usual_is_asked_beyond_the_quorum() {
|
fn the_share_of_a_level_as_usual_is_asked_beyond_the_quorum() {
|
||||||
let mut under = 0;
|
let mut under = 0;
|
||||||
for w in ELECTORATES {
|
for c in as_usual_grid() {
|
||||||
let medians = [w / 100 + 1, 12, 40, 50, 100, 120, 1000, w / 2];
|
let (s, m) = (c.k.share_pct() / 100.0, c.k.majority_pct() / 100.0);
|
||||||
for usual in medians {
|
let params = as_usual_params(&c);
|
||||||
let part = Participation::of(w, 50.0, Some(f64::from(usual)), 9);
|
let at = c.at();
|
||||||
if part.bounded {
|
let asked = required_ratio(c.w, judged_voters(c.usual, c.q), ¶ms);
|
||||||
continue;
|
if c.usual >= c.q {
|
||||||
}
|
assert!((asked - s).abs() < 1e-9, "{at}: {asked}, not s");
|
||||||
let scale = Scale { electorate: w, participation: part.ratio, quorums: [12, 12, 50, 50, 50] };
|
} else {
|
||||||
for k in InertiaLevel::ALL {
|
assert!(asked < s - 1e-9, "{at}: {asked}");
|
||||||
let (s, m) = (k.share_pct() / 100.0, k.majority_pct() / 100.0);
|
under += 1;
|
||||||
for q in [2, 12, 50, 100, 1000, usual, usual + 1, w].into_iter().filter(|q| (2..=w).contains(q)) {
|
|
||||||
let params = scale.params(k, q);
|
|
||||||
let at = format!("W {w} usual {usual} k {} Q {q}", k.get());
|
|
||||||
let asked = required_ratio(w, judged_voters(usual, q), ¶ms);
|
|
||||||
if usual >= q {
|
|
||||||
assert!((asked - s).abs() < 1e-9, "{at}: {asked}, not s");
|
|
||||||
} else {
|
|
||||||
assert!(asked < s - 1e-9, "{at}: {asked}");
|
|
||||||
under += 1;
|
|
||||||
}
|
|
||||||
// Everyone votes: M, at every quorum.
|
|
||||||
assert!((required_ratio(w, judged_voters(w, q), ¶ms) - m).abs() < 1e-12, "{at}: M");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// Everyone votes: M, at every quorum.
|
||||||
|
assert!((required_ratio(c.w, judged_voters(c.w, c.q), ¶ms) - m).abs() < 1e-12, "{at}: M");
|
||||||
}
|
}
|
||||||
assert!(under > 0);
|
assert!(under > 0);
|
||||||
// The case of F1.2, its default level and quorum: W 3 000, a usual turnout of 40 voters
|
// The case of F1.2, its default level and quorum: W 3 000, a usual turnout of 40 voters
|
||||||
@@ -842,6 +912,106 @@ fn the_share_of_a_level_as_usual_is_asked_beyond_the_quorum() {
|
|||||||
assert_eq!(wot_threshold(w, usual, &p), Ok(38), "but 40 voters are judged as 50");
|
assert_eq!(wot_threshold(w, usual, &p), Ok(38), "but 40 voters are judged as 50");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// N1.1, the sentence of G, after the review of 2ce2028. Lot T3 left « G se calcule pour que la
|
||||||
|
/// part exigée, à la participation habituelle, soit exactement celle du cran […], où s est la part
|
||||||
|
/// exigée comme d'habitude »: false where the usual turnout is under the quorum, the group voting
|
||||||
|
/// as usual being judged on the quorum (T' = Q), lower on the curve than s, and asked of more
|
||||||
|
/// voters than came. Written true for every W and every quorum: G is computed so that the share
|
||||||
|
/// asked, beyond the quorum, is exactly that of the level when the group votes as usual; s is that
|
||||||
|
/// share of the level, the one of the list (60, 67, 75, 83 or 90 %) — never « la part exigée »,
|
||||||
|
/// which the formula above it names and which moves with T'. On the grid of « comme d'habitude »,
|
||||||
|
/// with G as the text writes it.
|
||||||
|
#[test]
|
||||||
|
fn g_gives_the_share_of_the_level_beyond_the_quorum_when_the_group_votes_as_usual() {
|
||||||
|
let today = today_seed();
|
||||||
|
// The sentence of G closes N1.1, in each language; nothing of the sentence of T3 is left.
|
||||||
|
for lang in LANGS {
|
||||||
|
let (_, body) = text(&today, "N1.1", lang);
|
||||||
|
let (_, _, before, now) = PHRASES_T3
|
||||||
|
.iter()
|
||||||
|
.find(|(c, l, _, new)| (*c, *l) == ("N1.1", lang) && new.starts_with("**G**"))
|
||||||
|
.expect("the sentence of G");
|
||||||
|
assert!(body.ends_with(now), "N1.1 {lang}: the sentence of G\n{body}");
|
||||||
|
let (said_before, _) = before.split_once(" = ").expect("the formula");
|
||||||
|
assert!(!body.contains(said_before), "N1.1 {lang}: the sentence of T3 is left\n{body}");
|
||||||
|
let beyond = named(lang, "au-delà du quorum", "beyond the quorum", "más allá del quórum");
|
||||||
|
let (said_now, _) = now.split_once(" = ").expect("the formula");
|
||||||
|
assert!(said_now.contains(beyond), "N1.1 {lang}: « {beyond} »");
|
||||||
|
}
|
||||||
|
// By the engine, with G as the text writes it (s, the share of the level; M; p̃). On the curve,
|
||||||
|
// the share at the usual turnout is s, whatever the quorum: that is what G is computed for.
|
||||||
|
// The share asked of the group voting as usual is s beyond the quorum; under it, the share of
|
||||||
|
// the quorum, lower — the sentence of T3 said s there.
|
||||||
|
let grad = code_spans(text(&today, "N1.1", "fr").1)[1];
|
||||||
|
let (mut beyond, mut under) = (0, 0);
|
||||||
|
for c in as_usual_grid() {
|
||||||
|
let (s, m) = (c.k.share_pct() / 100.0, c.k.majority_pct() / 100.0);
|
||||||
|
let env: HashMap<String, f64> = HashMap::from([("s".into(), s), ("M".into(), m), ("p̃".into(), c.p)]);
|
||||||
|
let engine = as_usual_params(&c);
|
||||||
|
let params = FormulaParams { gradient: eval(grad, "G", &env), ..engine };
|
||||||
|
let at = c.at();
|
||||||
|
assert!(close(params.gradient, engine.gradient), "{at}: G");
|
||||||
|
assert!((required_ratio(c.w, c.usual, ¶ms) - s).abs() < 1e-9, "{at}: s on the curve");
|
||||||
|
let judged = judged_voters(c.usual, c.q);
|
||||||
|
let asked = required_ratio(c.w, judged, ¶ms);
|
||||||
|
if c.usual >= c.q {
|
||||||
|
assert_eq!(judged, c.usual, "{at}");
|
||||||
|
assert!((asked - s).abs() < 1e-9, "{at}: {asked}, not s");
|
||||||
|
beyond += 1;
|
||||||
|
} else {
|
||||||
|
assert_eq!(judged, c.q, "{at}");
|
||||||
|
assert!(asked < s - 1e-9, "{at}: {asked}");
|
||||||
|
under += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert!(beyond > 0 && under > 0, "beyond {beyond}, under {under}");
|
||||||
|
// The case of the review: W 3 000, a usual turnout of 40 voters, level 3, quorum 50. On the
|
||||||
|
// curve, 75 % at 40 voters; the share asked is that of 50 voters, 74,23 %; 38 « pour » of the
|
||||||
|
// 40 who came, 95 %.
|
||||||
|
let (w, usual) = (3000, 40);
|
||||||
|
let c = AsUsual { w, usual, p: Participation::of(w, 50.0, Some(f64::from(usual)), 9).ratio, k: level(3), q: 50 };
|
||||||
|
let p = as_usual_params(&c);
|
||||||
|
assert!((required_ratio(w, usual, &p) - 0.75).abs() < 1e-12);
|
||||||
|
let asked = required_ratio(w, judged_voters(usual, c.q), &p);
|
||||||
|
assert_eq!((asked * 10_000.0).round() / 100.0, 74.23);
|
||||||
|
let needed = wot_threshold(w, usual, &p).expect("valid");
|
||||||
|
assert_eq!((needed, f64::from(needed) / f64::from(usual)), (38, 0.95));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// N1.1, « Tant que le groupe n'a pas voté sur 5 propositions, elle vaut deux fois le quorum de
|
||||||
|
/// référence du document : 100 votants dans Monnaie libre. […] Elle reste entre 1 % et 50 % de
|
||||||
|
/// l'électorat » (review of 2ce2028). 100 is a parameter, 2 × voteFloor, which the number test
|
||||||
|
/// checks as such (`figures`); it is not a turnout that holds on every W: the engine's p0 is 100
|
||||||
|
/// voters on a web of 200 to 10 000 members only (1 % and 50 % of W); beyond, the bounds the
|
||||||
|
/// paragraph says after it bring it back. The voted text is not changed for this.
|
||||||
|
#[test]
|
||||||
|
fn the_reference_turnout_is_a_parameter_the_bounds_bring_back() {
|
||||||
|
let seed = today_seed();
|
||||||
|
let f = figures(&seed);
|
||||||
|
let vote_floor = f64::from(f.reference) / 2.0;
|
||||||
|
for w in ELECTORATES.into_iter().chain([199, 200, 10_000, 10_001]) {
|
||||||
|
let p0 = Participation::of(w, vote_floor, None, 0);
|
||||||
|
let within = (200..=10_000).contains(&w);
|
||||||
|
assert_eq!(p0.bounded, !within, "W {w}");
|
||||||
|
if within {
|
||||||
|
assert!((p0.voters(w) - f64::from(f.reference)).abs() < 1e-9, "W {w}: {} voters", p0.voters(w));
|
||||||
|
} else {
|
||||||
|
let bound = if w < 200 { Participation::HIGHEST } else { Participation::LOWEST };
|
||||||
|
assert_eq!(p0.ratio, bound, "W {w}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// The text says the parameter first, then the bounds, in each language.
|
||||||
|
for (lang, reference, bounds) in [
|
||||||
|
("fr", format!("{} votants dans Monnaie libre.", f.reference), "Elle reste entre"),
|
||||||
|
("en", format!("{} voters in Monnaie libre.", f.reference), "It stays between"),
|
||||||
|
("es", format!("{} votantes en Monnaie libre.", f.reference), "Se mantiene entre"),
|
||||||
|
] {
|
||||||
|
let (_, body) = text(&seed, "N1.1", lang);
|
||||||
|
let at = |s: &str| body.find(s).unwrap_or_else(|| panic!("N1.1 {lang}: « {s} »"));
|
||||||
|
assert!(at(&reference) < at(bounds), "N1.1 {lang}: the bounds after the reference");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// F1.1, « B : la base ; à la puissance W, elle est si petite qu'elle ne compte pas », and F1.2,
|
/// F1.1, « B : la base ; à la puissance W, elle est si petite qu'elle ne compte pas », and F1.2,
|
||||||
/// « dans la toile de confiance, `B^W` est si petit qu'il ne compte pas »: true on every W of the
|
/// « dans la toile de confiance, `B^W` est si petit qu'il ne compte pas »: true on every W of the
|
||||||
/// web of trust (`wot::PLAUSIBLE`, 100 to 10 000 000) — the engine's threshold is the one
|
/// web of trust (`wot::PLAUSIBLE`, 100 to 10 000 000) — the engine's threshold is the one
|
||||||
|
|||||||
@@ -97,3 +97,4 @@ page, la langue et la taille de l'écran. Les retours se traitent dans trustinWa
|
|||||||
| 2026-11-03 | automate | local, lot T2 sur `f27ee08` (les trois phrases de F1.1, F1.2 et N1.1 ; l'espace perdu du vote déplié ; C34 lit la ligne entière, C37 « ne change pas ») | C1–C37, M1 | 38 / 38 verts (40 tests), du premier coup |
|
| 2026-11-03 | automate | local, lot T2 sur `f27ee08` (les trois phrases de F1.1, F1.2 et N1.1 ; l'espace perdu du vote déplié ; C34 lit la ligne entière, C37 « ne change pas ») | C1–C37, M1 | 38 / 38 verts (40 tests), du premier coup |
|
||||||
| 2026-11-03 | automate | local, lot U2 sur `bb4e7b7` (les mineurs de la relecture de M7 : cibles de 44 px et trois lectures entières sur téléphone, M2 ; « Proposer cet ordre » dit pourquoi, C35 ; une information à un seul endroit, C19, C36 ; l'en-tête et les changements d'inertie d'un module, C38 ; C25 et C26 lisent l'inertie dans « Inertie ») | C1–C38, M1, M2 | 40 / 40 verts (42 tests), du premier coup |
|
| 2026-11-03 | automate | local, lot U2 sur `bb4e7b7` (les mineurs de la relecture de M7 : cibles de 44 px et trois lectures entières sur téléphone, M2 ; « Proposer cet ordre » dit pourquoi, C35 ; une information à un seul endroit, C19, C36 ; l'en-tête et les changements d'inertie d'un module, C38 ; C25 et C26 lisent l'inertie dans « Inertie ») | C1–C38, M1, M2 | 40 / 40 verts (42 tests), du premier coup |
|
||||||
| 2026-11-03 | automate | local, lot T3 sur `b2d653e` (N1.1 et F1.2 sans chiffre daté, chaque phrase vraie pour tout W et tout quorum ; aucun contrôle changé) | C1–C38, M1, M2 | 40 / 40 verts (42 tests) au second passage ; le premier, 40 / 42 : C33 et C38 tombés sur `net::ERR_NETWORK_CHANGED` (le réseau du poste a changé pendant le passage, vu dans leurs traces) |
|
| 2026-11-03 | automate | local, lot T3 sur `b2d653e` (N1.1 et F1.2 sans chiffre daté, chaque phrase vraie pour tout W et tout quorum ; aucun contrôle changé) | C1–C38, M1, M2 | 40 / 40 verts (42 tests) au second passage ; le premier, 40 / 42 : C33 et C38 tombés sur `net::ERR_NETWORK_CHANGED` (le réseau du poste a changé pendant le passage, vu dans leurs traces) |
|
||||||
|
| 2026-11-03 | automate | local, lot T3b sur `582d6ba` (après la relecture de `2ce2028` : la phrase de G de N1.1, « autant de « pour » » ; aucun contrôle changé) | C1–C38, M1, M2 | 40 / 40 verts (42 tests) au second passage ; le premier, 40 / 42 : C8 et C32 tombés sur `net::ERR_NETWORK_CHANGED` (modules de l'interface non chargés, vu dans leurs traces) |
|
||||||
|
|||||||
@@ -17,6 +17,11 @@
|
|||||||
> jour : N1.1 perd son exemple chiffré, et trois phrases, deux de N1.1 et une de F1.2, sont écrites
|
> jour : N1.1 perd son exemple chiffré, et trois phrases, deux de N1.1 et une de F1.2, sont écrites
|
||||||
> vraies pour tout W et tout quorum (« Lot T3 », ci-dessous). Les blocs de texte de ce fichier sont
|
> vraies pour tout W et tout quorum (« Lot T3 », ci-dessous). Les blocs de texte de ce fichier sont
|
||||||
> ceux du seed d'aujourd'hui. Rien du lot T3 n'est en ligne.
|
> ceux du seed d'aujourd'hui. Rien du lot T3 n'est en ligne.
|
||||||
|
>
|
||||||
|
> **Repris le 2026-11-03 par le lot T3b** (branche `lot/t3b-g`), après la relecture indépendante de
|
||||||
|
> `2ce2028`, avant la mise en ligne : la phrase de G (N1.1) écrite vraie sous le quorum, « autant de
|
||||||
|
> « pour » » en français, le test des nombres honnête sur « 100 votants » (« Après la relecture de
|
||||||
|
> 2ce2028 », ci-dessous). Le même amendement, avec sa nouvelle empreinte ; rien n'est en ligne.
|
||||||
|
|
||||||
## Lot T3 : aucun chiffre daté, chaque phrase vraie pour tout W
|
## Lot T3 : aucun chiffre daté, chaque phrase vraie pour tout W
|
||||||
|
|
||||||
@@ -38,15 +43,104 @@ Restent les paramètres et les règles : les quorums 12 · 12 · 50 · 50 · 50,
|
|||||||
B = 0,1, les bornes 1 % et 50 %, « jamais moins de 2 », 6 heures, un an, une fois par jour,
|
B = 0,1, les bornes 1 % et 50 %, « jamais moins de 2 », 6 heures, un an, une fois par jour,
|
||||||
5 propositions, la référence « deux fois le quorum de référence : 100 votants » (2 × 50). F1.1 et
|
5 propositions, la référence « deux fois le quorum de référence : 100 votants » (2 × 50). F1.1 et
|
||||||
F1.2 n'avaient aucun chiffre daté. Le test des nombres (`every_number_of_the_quorum_texts_is_the_engine_s`)
|
F1.2 n'avaient aucun chiffre daté. Le test des nombres (`every_number_of_the_quorum_texts_is_the_engine_s`)
|
||||||
n'admet plus que des paramètres : chacun vient du seed ou d'une constante du moteur, et ils sont les
|
n'admet plus que des paramètres : chacun vient du seed ou d'une constante du moteur ; aucune toile ni
|
||||||
mêmes sur toute toile de 100 à 10 000 000 membres (`wot::PLAUSIBLE`, les tailles que le serveur tient
|
participation n'y entre (« 100 votants » est un paramètre, 2 × 50, pas une participation vraie sur
|
||||||
pour vraies) ; aucune participation n'y entre. Vu rouge sur le texte de T2 : N1.1 portait
|
toute toile : voir « Après la relecture de 2ce2028 »). Vu rouge sur le texte de T2 : N1.1 portait
|
||||||
7 224 · 120 · 72 · 81 · 90 · 100 · 108 · 75 % · 90 · 9 · 3 · 39 · 11, que rien ne justifie.
|
7 224 · 120 · 72 · 81 · 90 · 100 · 108 · 75 % · 90 · 9 · 3 · 39 · 11, que rien ne justifie.
|
||||||
|
|
||||||
Ensuite, **chaque phrase des trois textes relue** pour tout W et tout quorum dans les bornes
|
Ensuite, **chaque phrase des trois textes relue** pour tout W et tout quorum dans les bornes
|
||||||
(2 à W dans Monnaie libre, 1 à W dans le groupe d'essai), tout cran, toute participation entre 1 %
|
(2 à W dans Monnaie libre, 1 à W dans le groupe d'essai), tout cran, toute participation entre 1 %
|
||||||
et 50 %. Trois phrases étaient fausses quelque part, chacune prouvée par un test ; elles sont
|
et 50 %. Trois phrases étaient fausses quelque part, chacune prouvée par un test ; elles sont
|
||||||
corrigées au plus court. Rien d'autre ne change ; les titres restent.
|
corrigées au plus court. Rien d'autre ne change ; les titres restent. *(La relecture de `2ce2028`
|
||||||
|
en a trouvé une quatrième, la phrase de G : reprise ci-dessous.)*
|
||||||
|
|
||||||
|
### Après la relecture de 2ce2028
|
||||||
|
|
||||||
|
La relecture indépendante de `2ce2028` rend « à reprendre » pour une phrase, et relève deux mineurs.
|
||||||
|
T3 n'étant pas en ligne, l'amendement `2026-11-03-n1-1-chiffres` est repris lui-même (sa nouvelle
|
||||||
|
empreinte, dans « La garde, en production »), sans en ajouter un. F1.2 et F1.1 ne changent pas.
|
||||||
|
|
||||||
|
- **La phrase de G** (N1.1, dernier paragraphe, que T3 avait laissée).
|
||||||
|
- **Avant** : « **G** se calcule pour que la part exigée, à la participation habituelle, soit
|
||||||
|
exactement celle du cran : `G = …`, où s est la part exigée comme d'habitude et p̃ la
|
||||||
|
participation habituelle divisée par W. »
|
||||||
|
- **Après** : « **G** se calcule pour que la part exigée, au-delà du quorum, soit exactement celle
|
||||||
|
du cran quand le groupe vote comme d'habitude : `G = …`, où s est cette part du cran (60, 67, 75,
|
||||||
|
83 ou 90 %) et p̃ la participation habituelle divisée par W. »
|
||||||
|
- **Pourquoi** : fausse quand la participation habituelle est sous le quorum, où la part exigée
|
||||||
|
se calcule sur T' = Q. Sur une toile de 3 000 membres dont la médiane est de 40 votants (dans les
|
||||||
|
bornes), au cran 3, quorum 50 : la courbe donne 75 % à 40 votants, mais la part exigée est
|
||||||
|
74,23 % de 50, soit 38 « pour » des 40 votants, 95 %. G ne dépend pas du quorum : la courbe passe
|
||||||
|
toujours par s à la participation habituelle, c'est le quorum qui la coupe en dessous. La phrase
|
||||||
|
nouvelle ne dit s qu'au-delà du quorum, comme l'introduction de la liste des crans, et s y est la
|
||||||
|
part du cran, celle de la liste, plus « la part exigée comme d'habitude » (qui, sous le quorum,
|
||||||
|
n'est pas s). C'est le défaut proposé par l'intégrateur, mot pour mot. Les cinq nombres entre
|
||||||
|
parenthèses sont gardés : sans eux, « cette part » se lirait aussi comme la « Part exigée » de la
|
||||||
|
formule au-dessus, qui change avec T' ; ce sont des paramètres (s de chaque cran), que le test des
|
||||||
|
nombres vérifie. Prouvé par
|
||||||
|
`g_gives_the_share_of_the_level_beyond_the_quorum_when_the_group_votes_as_usual`, sur la grille de
|
||||||
|
`the_share_of_a_level_as_usual_is_asked_beyond_the_quorum` (la même fonction, `as_usual_grid`) :
|
||||||
|
G tel que le texte l'écrit est celui du moteur ; la courbe passe par s à la participation
|
||||||
|
habituelle, à tout quorum ; la part exigée du groupe qui vote comme d'habitude est s au-delà du
|
||||||
|
quorum (970 cas), et plus basse que s, jugée sur le quorum, en dessous (700 cas), là où la phrase
|
||||||
|
de T3 disait s. Vu rouge sur le texte de T3.
|
||||||
|
- en, avant : « **G** is computed so that the share asked, at the usual turnout, is exactly that of
|
||||||
|
the level: `G = …`, where s is the share asked as usual and p̃ the usual turnout divided by W. » ;
|
||||||
|
après : « **G** is computed so that the share asked, beyond the quorum, is exactly that of the
|
||||||
|
level when the group votes as usual: `G = …`, where s is that share of the level (60, 67, 75, 83 or
|
||||||
|
90%) and p̃ the usual turnout divided by W. »
|
||||||
|
- es, avant : « **G** se calcula para que la proporción exigida, con la participación habitual, sea
|
||||||
|
exactamente la del nivel: `G = …`, donde s es la proporción exigida como de costumbre y p̃ la
|
||||||
|
participación habitual dividida por W. » ; après : « **G** se calcula para que la proporción
|
||||||
|
exigida, más allá del quórum, sea exactamente la del nivel cuando el grupo vota como de costumbre:
|
||||||
|
`G = …`, donde s es esa proporción del nivel (60, 67, 75, 83 o 90 %) y p̃ la participación
|
||||||
|
habitual dividida por W. »
|
||||||
|
- **La phrase du quorum, en français** (N1.1, premier paragraphe).
|
||||||
|
- **Avant** : « …, et il faut autant de voix pour que si le quorum avait voté. »
|
||||||
|
- **Après** : « …, et il faut autant de « pour » que si le quorum avait voté. »
|
||||||
|
- **Pourquoi** : « de voix pour que » se lit d'abord « pour que », la conjonction. Le sens ne change
|
||||||
|
pas, et le même test le tient (`under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted`).
|
||||||
|
en et es restent : « as many votes in favour as », « tantos votos a favor como » sont sans
|
||||||
|
ambiguïté. La raison de l'amendement, qui part dans le commit du dépôt des textes, dit de même
|
||||||
|
« autant de « pour » », et nomme G.
|
||||||
|
- **Le test des nombres et « 100 votants »** : le texte voté ne change pas. Le test calculait la
|
||||||
|
référence comme p0 × W avant les bornes, c'est-à-dire 2 × 50 quel que soit W : sa vérification
|
||||||
|
« les mêmes chiffres sur toute toile » ne pouvait pas échouer pour 100. 100 y est maintenant ce
|
||||||
|
qu'il est, un paramètre (deux fois le quorum de référence), sans prétendre qu'il vaut sur toute
|
||||||
|
toile ; un test à part dit où il vaut (`the_reference_turnout_is_a_parameter_the_bounds_bring_back`) :
|
||||||
|
la participation de référence est de 100 votants sur une toile de 200 à 10 000 membres, et là
|
||||||
|
seulement ; en deçà, les bornes la ramènent à 50 % de W, au-delà à 1 %, comme N1.1 le dit dans le
|
||||||
|
même paragraphe, après. Ce test tombe quand on lui fait dire « de 100 à 10 000 » (W 100).
|
||||||
|
|
||||||
|
**Chaque phrase relue, encore**, en fr, en et es, en cherchant « comme d'habitude », « à la
|
||||||
|
participation habituelle » et « la part du cran » sans « au-delà du quorum » :
|
||||||
|
|
||||||
|
- **F1.1** : « Le seuil est le nombre de voix pour […] » (une définition) ; « Sous le quorum Q […]
|
||||||
|
comme si Q personnes avaient voté » ; « Au-delà, il faut la part de « pour » que demande le cran
|
||||||
|
[…] la plus haute au quorum […] jusqu'à la majorité M quand tout le monde vote » (la part du cran,
|
||||||
|
sous « Au-delà ») ; les deux formules ; « Une version passe […] arrondi à l'entier au-dessus » ; T,
|
||||||
|
Q et T', W, B, M ; G, « plus la part demandée monte quand peu de gens votent » (vrai à tout T' sous
|
||||||
|
W, donc au quorum aussi) ; « Leurs valeurs sont dans […] ». Aucune n'est de la famille cherchée.
|
||||||
|
- **F1.2** : l'introduction ; les trois points du vote permanent ; W, T, Q, B ; « G n'est pas fixé à
|
||||||
|
la main : il se déduit de la participation habituelle du groupe » (dit d'où vient G, rien de la
|
||||||
|
part) ; « au-delà du quorum, le groupe demande 75 % de « pour » quand il vote comme d'habitude »
|
||||||
|
(« au-delà du quorum », T3) ; « Tout nouvel article commence à ce cran » ; « Au départ […] ». Juste.
|
||||||
|
- **N1.1** : « le groupe demande une part de « pour » parmi les votants » (une part, pas celle du
|
||||||
|
cran ; les votants qui manquent y comptent, comme la phrase suivante le dit) ; la phrase du quorum
|
||||||
|
(ci-dessus) ; « La part dépend du cran et du nombre de votants, comparé à la participation
|
||||||
|
habituelle […] : au-delà du quorum, plus il y a de votants, plus elle baisse » (la courbe dépend de
|
||||||
|
p̃ à tout quorum ; le nombre de votants est T', que la formule définit juste après) ; la formule et
|
||||||
|
T' ; l'introduction de la liste, « la part exigée au-delà du quorum, quand le groupe vote comme
|
||||||
|
d'habitude, puis quand tout le monde vote » (T3) ; les cinq crans, « 60 % comme d'habitude » […]
|
||||||
|
(les colonnes que l'introduction définit, au-delà du quorum ; non répété à chaque ligne) ; la
|
||||||
|
participation habituelle, ses 5 propositions et ses 100 votants (un paramètre, ramené par les
|
||||||
|
bornes que la phrase d'après donne) ; « Elle ne dépend pas du quorum d'un article » ; les bornes et
|
||||||
|
la mesure ; **la phrase de G : la seule de la famille qui restait fausse**, reprise.
|
||||||
|
- Hors des trois textes, vu en cherchant et laissé (hors de ce lot) : la phrase de F1.1 « le nombre
|
||||||
|
de voix pour qu'il faut » a la même lecture « pour qu' » que celle du point 3, mais F1.1 n'a pas
|
||||||
|
d'amendement de T3 et ce lot n'en ajoute pas ; dans l'interface, `settings.reading` dit encore « À
|
||||||
|
chaque cran, le groupe demande sa part de « pour » quand il vote comme d'habitude ; au-delà du
|
||||||
|
quorum, […] » (fr, en, es), la même imprécision que la phrase de G, pour sa première moitié.
|
||||||
|
|
||||||
### N1.1 — Niveaux d'inertie
|
### N1.1 — Niveaux d'inertie
|
||||||
|
|
||||||
@@ -54,7 +148,8 @@ corrigées au plus court. Rien d'autre ne change ; les titres restent.
|
|||||||
- **Avant** : « Chaque cran a aussi son quorum, qui n'est pas un nombre minimal de votants : sous
|
- **Avant** : « Chaque cran a aussi son quorum, qui n'est pas un nombre minimal de votants : sous
|
||||||
le quorum, les votants qui manquent comptent comme « non ». »
|
le quorum, les votants qui manquent comptent comme « non ». »
|
||||||
- **Après** : « Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent
|
- **Après** : « Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent
|
||||||
comme « non », et il faut autant de voix pour que si le quorum avait voté. »
|
comme « non », et il faut autant de « pour » que si le quorum avait voté. » *(T3 écrivait
|
||||||
|
« autant de voix pour que » ; repris après la relecture de 2ce2028, ci-dessus.)*
|
||||||
- **Pourquoi** : « pas un nombre minimal de votants » est faux pour un quorum d'auteur bas. Au
|
- **Pourquoi** : « pas un nombre minimal de votants » est faux pour un quorum d'auteur bas. Au
|
||||||
quorum 2, la part du quorum dépasse 50 % : il faut 2 « pour », une seule voix ne passe jamais, et
|
quorum 2, la part du quorum dépasse 50 % : il faut 2 « pour », une seule voix ne passe jamais, et
|
||||||
le quorum est alors un minimum de votants, à tout cran et sur toute toile (de même au quorum 1 du
|
le quorum est alors un minimum de votants, à tout cran et sur toute toile (de même au quorum 1 du
|
||||||
@@ -127,14 +222,19 @@ attente ou prouvée, quel qu'en soit le sort) ; aucune coquille, traduction de m
|
|||||||
| Article | Empreinte d'avant : le texte de T2, en ligne | Empreinte d'après : le texte de T3 |
|
| Article | Empreinte d'avant : le texte de T2, en ligne | Empreinte d'après : le texte de T3 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| F1.2 | `96caf353b33805f2894593d72c5b70fce2e751039cd7f4651d8842c986729a14` | `ddce5aa5fcd13dfc3e374c37509a1bb8cfafddefb6e6add5a06b130b43216d62` |
|
| F1.2 | `96caf353b33805f2894593d72c5b70fce2e751039cd7f4651d8842c986729a14` | `ddce5aa5fcd13dfc3e374c37509a1bb8cfafddefb6e6add5a06b130b43216d62` |
|
||||||
| N1.1 | `7fbedcb8750c208f8790c4f87dc21d8bd1096a27a1a0044af6b9b8f2057f2aa8` | `4289e3579ee747f6023162339ed60601b810d33462617b42a9f8b5b3735c3238` |
|
| N1.1 | `7fbedcb8750c208f8790c4f87dc21d8bd1096a27a1a0044af6b9b8f2057f2aa8` | `7f62fd42617c6e63b1783d5a4d472ed733aa074222240faf834e6b31f1c9c166` |
|
||||||
|
|
||||||
|
L'empreinte d'après de N1.1 est celle du texte repris après la relecture de `2ce2028` (lot T3b) ; celle
|
||||||
|
de `2ce2028`, `4289e3579ee747f6023162339ed60601b810d33462617b42a9f8b5b3735c3238`, n'a jamais été en
|
||||||
|
ligne et ne sert plus. F1.2 ne change pas.
|
||||||
|
|
||||||
Appliqué, dans une transaction, par document : le texte (fr) remplacé, **révision 4 → 5** pour F1.2
|
Appliqué, dans une transaction, par document : le texte (fr) remplacé, **révision 4 → 5** pour F1.2
|
||||||
et N1.1 ; une ligne « texte de départ remplacé » dans l'historique, sans auteur (la révision 4, le
|
et N1.1 ; une ligne « texte de départ remplacé » dans l'historique, sans auteur (la révision 4, le
|
||||||
texte de T2, reste lisible, avec son diff) ; en et es remplacés ; la décision dans
|
texte de T2, reste lisible, avec son diff) ; en et es remplacés ; la décision dans
|
||||||
`seed_amendments`. **La file de publication de Monnaie libre** reçoit deux lignes de plus
|
`seed_amendments`. **La file de publication de Monnaie libre** reçoit deux lignes de plus
|
||||||
(« proposition de départ réécrite : F1.2, la part du cran par défaut au-delà du quorum » et « … :
|
(« proposition de départ réécrite : F1.2, la part du cran par défaut au-delà du quorum » et « … :
|
||||||
N1.1, sans chiffre daté ; sous le quorum, autant de voix pour que si le quorum avait voté ») ; elles
|
N1.1, sans chiffre daté ; sous le quorum, autant de « pour » que si le quorum avait voté ; G, la part
|
||||||
|
du cran au-delà du quorum ») ; elles
|
||||||
attendent, comme les autres, le premier texte en vigueur (ADR 0011) puis des votes prouvés (ADR
|
attendent, comme les autres, le premier texte en vigueur (ADR 0011) puis des votes prouvés (ADR
|
||||||
0012) : rien n'est publié tant qu'aucun article n'est en vigueur. Le groupe d'essai ne publie
|
0012) : rien n'est publié tant qu'aucun article n'est en vigueur. Le groupe d'essai ne publie
|
||||||
jamais. Refusé, le texte de T2 reste, avec sa raison (`votes`, `ballots`, `corrected`,
|
jamais. Refusé, le texte de T2 reste, avec sa raison (`votes`, `ballots`, `corrected`,
|
||||||
@@ -299,7 +399,7 @@ En production aujourd'hui : 0 vote, 0 bulletin, une seule identité (dit par orc
|
|||||||
WoT », « Paramètres par défaut », « Niveaux d'inertie »), jamais par le code ; apostrophes droites ;
|
WoT », « Paramètres par défaut », « Niveaux d'inertie »), jamais par le code ; apostrophes droites ;
|
||||||
« » espacés en français, “ ” en anglais britannique (*favour*), «» serrés en espagnol ; formules en
|
« » espacés en français, “ ” en anglais britannique (*favour*), «» serrés en espagnol ; formules en
|
||||||
code, avec × et −, jamais d'astérisque.
|
code, avec × et −, jamais d'astérisque.
|
||||||
- **Longueur** (signes, après le lot T3 ; après le lot T2 : fr 1122 · 2035 · 2449, en 1093 · 1950 · 2315, es 1126 · 2020 · 2526 ; avant : fr 1081 · 2055 · 2372, en 1058 · 1977 · 2246, es 1083 · 2035 · 2454) : fr : F1.1 1122 · F1.2 2055 · N1.1 2075 ; en : F1.1 1093 · F1.2 1970 · N1.1 1937 ; es : F1.1 1126 · F1.2 2042 · N1.1 2125. Limite d'une proposition : 4 000 (`crates/ld-server/src/proposals.rs:32`) ;
|
- **Longueur** (signes, après la relecture de `2ce2028` ; après le lot T3 : N1.1 fr 2075, en 1937, es 2125 ; après le lot T2 : fr 1122 · 2035 · 2449, en 1093 · 1950 · 2315, es 1126 · 2020 · 2526 ; avant : fr 1081 · 2055 · 2372, en 1058 · 1977 · 2246, es 1083 · 2035 · 2454) : fr : F1.1 1122 · F1.2 2055 · N1.1 2112 ; en : F1.1 1093 · F1.2 1970 · N1.1 1987 ; es : F1.1 1126 · F1.2 2042 · N1.1 2163. Limite d'une proposition : 4 000 (`crates/ld-server/src/proposals.rs:32`) ;
|
||||||
au-delà de 700, l'assistant dit « texte long » (`crates/ld-engine/src/assist.rs:25`), comme pour les
|
au-delà de 700, l'assistant dit « texte long » (`crates/ld-engine/src/assist.rs:25`), comme pour les
|
||||||
textes actuels de F1.2 et N1.1.
|
textes actuels de F1.2 et N1.1.
|
||||||
- **Le ton** est celui de F1.2, N1 et O1 tels que M5 les a posés : le groupe, la personne, jamais le
|
- **Le ton** est celui de F1.2, N1 et O1 tels que M5 les a posés : le groupe, la personne, jamais le
|
||||||
@@ -520,7 +620,7 @@ Los valores de las letras de la fórmula (ver «Fórmula del umbral WoT») y có
|
|||||||
Titre : **Niveaux d'inertie**
|
Titre : **Niveaux d'inertie**
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
À chaque cran, le groupe demande une part de « pour » parmi les votants (voir « Formule du seuil WoT »). Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent comme « non », et il faut autant de voix pour que si le quorum avait voté. La part dépend du cran et du nombre de votants, comparé à la participation habituelle du groupe : au-delà du quorum, plus il y a de votants, plus elle baisse, jusqu'à la majorité M quand tout le monde vote.
|
À chaque cran, le groupe demande une part de « pour » parmi les votants (voir « Formule du seuil WoT »). Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent comme « non », et il faut autant de « pour » que si le quorum avait voté. La part dépend du cran et du nombre de votants, comparé à la participation habituelle du groupe : au-delà du quorum, plus il y a de votants, plus elle baisse, jusqu'à la majorité M quand tout le monde vote.
|
||||||
|
|
||||||
`Part exigée = M + (1 − M) × (1 − (T'/W)^G)`, où T' est le nombre de votants, ou le quorum s'il en manque.
|
`Part exigée = M + (1 − M) × (1 − (T'/W)^G)`, où T' est le nombre de votants, ou le quorum s'il en manque.
|
||||||
|
|
||||||
@@ -534,7 +634,7 @@ Titre : **Niveaux d'inertie**
|
|||||||
|
|
||||||
**La participation habituelle** est la médiane du nombre de votants des propositions du groupe votées depuis un an. Tant que le groupe n'a pas voté sur 5 propositions, elle vaut deux fois le quorum de référence du document : 100 votants dans Monnaie libre. Elle ne dépend pas du quorum d'un article. Elle reste entre 1 % et 50 % de l'électorat, et se mesure une fois par jour.
|
**La participation habituelle** est la médiane du nombre de votants des propositions du groupe votées depuis un an. Tant que le groupe n'a pas voté sur 5 propositions, elle vaut deux fois le quorum de référence du document : 100 votants dans Monnaie libre. Elle ne dépend pas du quorum d'un article. Elle reste entre 1 % et 50 % de l'électorat, et se mesure une fois par jour.
|
||||||
|
|
||||||
**G** se calcule pour que la part exigée, à la participation habituelle, soit exactement celle du cran : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est la part exigée comme d'habitude et p̃ la participation habituelle divisée par W.
|
**G** se calcule pour que la part exigée, au-delà du quorum, soit exactement celle du cran quand le groupe vote comme d'habitude : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est cette part du cran (60, 67, 75, 83 ou 90 %) et p̃ la participation habituelle divisée par W.
|
||||||
```
|
```
|
||||||
|
|
||||||
### N1.1 · English
|
### N1.1 · English
|
||||||
@@ -556,7 +656,7 @@ At each level, the group asks for a share of votes in favour among the voters (s
|
|||||||
|
|
||||||
**The usual turnout** is the median number of voters on the group's proposals voted on over the past year. Until the group has voted on 5 proposals, it is twice the document's reference quorum: 100 voters in Monnaie libre. It does not depend on the quorum of an article. It stays between 1% and 50% of the electorate, and is measured once a day.
|
**The usual turnout** is the median number of voters on the group's proposals voted on over the past year. Until the group has voted on 5 proposals, it is twice the document's reference quorum: 100 voters in Monnaie libre. It does not depend on the quorum of an article. It stays between 1% and 50% of the electorate, and is measured once a day.
|
||||||
|
|
||||||
**G** is computed so that the share asked, at the usual turnout, is exactly that of the level: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, where s is the share asked as usual and p̃ the usual turnout divided by W.
|
**G** is computed so that the share asked, beyond the quorum, is exactly that of the level when the group votes as usual: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, where s is that share of the level (60, 67, 75, 83 or 90%) and p̃ the usual turnout divided by W.
|
||||||
```
|
```
|
||||||
|
|
||||||
### N1.1 · Español
|
### N1.1 · Español
|
||||||
@@ -578,7 +678,7 @@ En cada nivel, el grupo pide una proporción de votos a favor entre los votantes
|
|||||||
|
|
||||||
**La participación habitual** es la mediana del número de votantes de las propuestas del grupo votadas en el último año. Hasta que el grupo haya votado 5 propuestas, vale dos veces el quórum de referencia del documento: 100 votantes en Monnaie libre. No depende del quórum de un artículo. Se mantiene entre el 1 % y el 50 % del electorado, y se mide una vez al día.
|
**La participación habitual** es la mediana del número de votantes de las propuestas del grupo votadas en el último año. Hasta que el grupo haya votado 5 propuestas, vale dos veces el quórum de referencia del documento: 100 votantes en Monnaie libre. No depende del quórum de un artículo. Se mantiene entre el 1 % y el 50 % del electorado, y se mide una vez al día.
|
||||||
|
|
||||||
**G** se calcula para que la proporción exigida, con la participación habitual, sea exactamente la del nivel: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, donde s es la proporción exigida como de costumbre y p̃ la participación habitual dividida por W.
|
**G** se calcula para que la proporción exigida, más allá del quórum, sea exactamente la del nivel cuando el grupo vota como de costumbre: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, donde s es esa proporción del nivel (60, 67, 75, 83 o 90 %) y p̃ la participación habitual dividida por W.
|
||||||
```
|
```
|
||||||
|
|
||||||
## Les autres articles, cherchés et laissés
|
## Les autres articles, cherchés et laissés
|
||||||
@@ -669,11 +769,11 @@ Chaque nombre est vérifié par `every_number_of_the_quorum_texts_is_the_engine_
|
|||||||
| W relu toutes les 6 heures | F1.2 | `wot::REFRESH` (`crates/ld-server/src/wot.rs:13-14`) |
|
| W relu toutes les 6 heures | F1.2 | `wot::REFRESH` (`crates/ld-server/src/wot.rs:13-14`) |
|
||||||
| B = 0,1 | F1.2 | `FormulaParams::DEFAULT_BASE` |
|
| B = 0,1 | F1.2 | `FormulaParams::DEFAULT_BASE` |
|
||||||
| Cran 3 par défaut : M = 55 %, quorum 50, 75 % | F1.2, N1.1 | `InertiaLevel::DEFAULT`, `majority_pct`, `share_pct` ; le quorum du cran |
|
| Cran 3 par défaut : M = 55 %, quorum 50, 75 % | F1.2, N1.1 | `InertiaLevel::DEFAULT`, `majority_pct`, `share_pct` ; le quorum du cran |
|
||||||
| M = 50, 50, 55, 60, 66 % ; s = 60, 67, 75, 83, 90 % | N1.1 | `InertiaLevel::majority_pct`, `share_pct` |
|
| M = 50, 50, 55, 60, 66 % ; s = 60, 67, 75, 83, 90 % (la liste des crans ; s aussi dans la phrase de G) | N1.1 | `InertiaLevel::majority_pct`, `share_pct` |
|
||||||
| Propositions seed au cran 2 | F1.2, N1.1 | `seed::SEED_PROPOSAL_LEVEL` ; les versions `seedProposal` du seed, leurs titres dans chaque langue |
|
| Propositions seed au cran 2 | F1.2, N1.1 | `seed::SEED_PROPOSAL_LEVEL` ; les versions `seedProposal` du seed, leurs titres dans chaque langue |
|
||||||
| Le titre au cran 4, l'ordre de chaque section au cran 2 | F1.2, N1.1 | le seed, `modules.title.inertia`, `modules.order.inertia` |
|
| Le titre au cran 4, l'ordre de chaque section au cran 2 | F1.2, N1.1 | le seed, `modules.title.inertia`, `modules.order.inertia` |
|
||||||
| Tous les autres articles au cran 3 ; rien aux crans 1 et 5 | F1.2, N1.1 | le seed : chaque `inertia` (toutes égales, vérifié) |
|
| Tous les autres articles au cran 3 ; rien aux crans 1 et 5 | F1.2, N1.1 | le seed : chaque `inertia` (toutes égales, vérifié) |
|
||||||
| 5 propositions ; 100 votants (deux fois le quorum de référence) | N1.1 | `Participation::MIN_SAMPLE` ; `Participation::reference_ratio(W, voteFloor) × W` avant les bornes, `voteFloor` = 50, le même sur toute toile |
|
| 5 propositions ; 100 votants (deux fois le quorum de référence) | N1.1 | `Participation::MIN_SAMPLE` ; 2 × `voteFloor` (50), un paramètre, écrit avant les bornes : la participation de référence ne vaut 100 votants que sur une toile de 200 à 10 000 membres, les bornes la ramènent ailleurs (`the_reference_turnout_is_a_parameter_the_bounds_bring_back`) |
|
||||||
| Entre 1 % et 50 % | N1.1 | `Participation::LOWEST`, `HIGHEST` |
|
| Entre 1 % et 50 % | N1.1 | `Participation::LOWEST`, `HIGHEST` |
|
||||||
| Depuis un an ; une fois par jour | N1.1 | `participation::WINDOW_DAYS` = 365, `EVERY_HOURS` = 24 |
|
| Depuis un an ; une fois par jour | N1.1 | `participation::WINDOW_DAYS` = 365, `EVERY_HOURS` = 24 |
|
||||||
|
|
||||||
@@ -683,7 +783,9 @@ au plus ; au cran 3, 39 et 11) : l'exemple est sorti du texte (point 3), parce q
|
|||||||
dépendaient de la toile et d'une participation (7 224 membres, 120 votants). Ils restent des
|
dépendaient de la toile et d'une participation (7 224 membres, 120 votants). Ils restent des
|
||||||
chiffres de contrôle du moteur (`inertia.rs`, `the_values_shown_to_yvv`,
|
chiffres de contrôle du moteur (`inertia.rs`, `the_values_shown_to_yvv`,
|
||||||
`the_control_figures_of_the_quorum`), pas des textes. Tous les nombres qui restent sont des
|
`the_control_figures_of_the_quorum`), pas des textes. Tous les nombres qui restent sont des
|
||||||
paramètres : le test les retrouve identiques sur toute toile de 100 à 10 000 000 membres.
|
paramètres, qu'aucune toile ni participation ne change ; seul le quorum le plus bas est calculé sur W
|
||||||
|
par le test, le même sur toute toile de 100 à 10 000 000 membres. « 100 votants » est un paramètre,
|
||||||
|
pas une participation vraie sur toute toile (lot T3b, après la relecture de `2ce2028`).
|
||||||
|
|
||||||
Les règles sans chiffre :
|
Les règles sans chiffre :
|
||||||
|
|
||||||
@@ -694,8 +796,9 @@ Les règles sans chiffre :
|
|||||||
| Une version passe quand ses « pour » atteignent le seuil arrondi au-dessus | F1.1 | `threshold::passes`, `clamp_ceil` |
|
| Une version passe quand ses « pour » atteignent le seuil arrondi au-dessus | F1.1 | `threshold::passes`, `clamp_ceil` |
|
||||||
| La participation habituelle ne dépend pas du quorum d'un article | N1.1 | `inertia::Participation::reference_ratio` (le quorum de référence du document) ; ADR 0013 |
|
| La participation habituelle ne dépend pas du quorum d'un article | N1.1 | `inertia::Participation::reference_ratio` (le quorum de référence du document) ; ADR 0013 |
|
||||||
| Au départ, aucun article en vigueur | F1.2 | ADR 0011 ; le seed (aucune version `in_force` hors modules) |
|
| Au départ, aucun article en vigueur | F1.2 | ADR 0011 ; le seed (aucune version `in_force` hors modules) |
|
||||||
| Sous le quorum, autant de voix pour que si le quorum avait voté (lot T3) | N1.1 | `threshold::judged_voters` ; `yes_needed(0)` égale `wot_threshold(W, Q)` ; `under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted` |
|
| Sous le quorum, autant de « pour » que si le quorum avait voté (lot T3, puis T3b) | N1.1 | `threshold::judged_voters` ; `yes_needed(0)` égale `wot_threshold(W, Q)` ; `under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted` |
|
||||||
| La part du cran comme d'habitude, au-delà du quorum (lot T3) | F1.2, N1.1 | `inertia::gradient` ; `the_share_of_a_level_as_usual_is_asked_beyond_the_quorum` |
|
| La part du cran comme d'habitude, au-delà du quorum (lot T3) | F1.2, N1.1 | `inertia::gradient` ; `the_share_of_a_level_as_usual_is_asked_beyond_the_quorum` |
|
||||||
|
| G donne la part du cran au-delà du quorum, quand le groupe vote comme d'habitude (lot T3b) | N1.1 | `inertia::gradient`, `threshold::judged_voters` ; `g_gives_the_share_of_the_level_beyond_the_quorum_when_the_group_votes_as_usual` |
|
||||||
| B^W ne compte pas dans la toile (W de 100 à 10 000 000) | F1.1, F1.2 | `wot::PLAUSIBLE` ; `b_to_the_power_w_never_counts_in_the_web_of_trust` |
|
| B^W ne compte pas dans la toile (W de 100 à 10 000 000) | F1.1, F1.2 | `wot::PLAUSIBLE` ; `b_to_the_power_w_never_counts_in_the_web_of_trust` |
|
||||||
|
|
||||||
## Les textes dans le seed
|
## Les textes dans le seed
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"_source": "maquette/frontend/app/data/seeds/duniter-g1.bundle.json (doc engagement-certification, 33 clauses + 2 variantes). Aucun article en vigueur au départ. I1, E1, E2 : Propositions seed (« seedProposal »), ouvertes, mises en avant pour amorcer le vote, sans niveau d'inertie ici : elles démarrent au cran SEED_PROPOSAL_LEVEL (crates/ld-server/src/seed.rs : 2 « basse », choix d'Yvv du 2026-11-02, qui remontera leur inertie par un vote une fois les textes passés ; ADR 0011). Tant qu'aucun article n'est en vigueur, la publication attend le premier texte. Tout le reste : propositions ouvertes à 0 vote (Yvv, 2026-10-21), inertie 3 / 5. I1 « Raison d'être » remplace le Préambule (texte d'Yvv, revue du 2026-10-30). Modules : le titre du document à 4, l'ordre des articles de chaque section à 2, en vigueur sans vote (seed a minima ; revue du 2026-10-30, ADR 0009). F1.2, N1, N1.1, O1 réécrits selon les règles appliquées (Yvv, 2026-11-02). Quorums par cran (« quorums », ADR 0013, Yvv, 2026-11-02 et 03) : 12 · 12 · 50 · 50 · 50 dans Monnaie libre, 1 partout dans le groupe d'essai ; sous le quorum, les votants qui manquent comptent comme « non » ; voteFloor reste le quorum de référence de la participation p0 = 2 × voteFloor / W. Une base existante reçoit ces changements par des amendements gardés (seed_amend, seed_proposal_amend, quorum_amend), jamais en réinstanciant le document. F1.1, F1.2 et N1.1 réécrits pour le quorum par cran (ADR 0013 ; Yvv, 2026-11-02 et 03 ; lot T, textes relus dans docs/chantiers/acte-certification/textes-quorum-seed.md) : sous le quorum, les votants qui manquent comptent comme « non » ; au-delà, la part du cran. Trois phrases reprises après la relecture de M6b (lot T2) : la part du cran, la plus haute au quorum, baisse quand la participation monte (F1.1) ; l'auteur fixe le quorum tant que l'article ne garde la trace d'aucun vote (F1.2) ; le quorum n'est pas un nombre minimal de votants (N1.1). Lot T3 (Yvv, 03/11 : « pas de chiffre datés dans un texte voté ») : l'exemple chiffré de N1.1 retiré (aucun nombre des textes ne dépend de W ni d'une participation) ; N1.1, sous le quorum, il faut autant de voix pour que si le quorum avait voté (vrai pour tout quorum) ; N1.1 et F1.2, la part du cran comme d'habitude au-delà du quorum.",
|
"_source": "maquette/frontend/app/data/seeds/duniter-g1.bundle.json (doc engagement-certification, 33 clauses + 2 variantes). Aucun article en vigueur au départ. I1, E1, E2 : Propositions seed (« seedProposal »), ouvertes, mises en avant pour amorcer le vote, sans niveau d'inertie ici : elles démarrent au cran SEED_PROPOSAL_LEVEL (crates/ld-server/src/seed.rs : 2 « basse », choix d'Yvv du 2026-11-02, qui remontera leur inertie par un vote une fois les textes passés ; ADR 0011). Tant qu'aucun article n'est en vigueur, la publication attend le premier texte. Tout le reste : propositions ouvertes à 0 vote (Yvv, 2026-10-21), inertie 3 / 5. I1 « Raison d'être » remplace le Préambule (texte d'Yvv, revue du 2026-10-30). Modules : le titre du document à 4, l'ordre des articles de chaque section à 2, en vigueur sans vote (seed a minima ; revue du 2026-10-30, ADR 0009). F1.2, N1, N1.1, O1 réécrits selon les règles appliquées (Yvv, 2026-11-02). Quorums par cran (« quorums », ADR 0013, Yvv, 2026-11-02 et 03) : 12 · 12 · 50 · 50 · 50 dans Monnaie libre, 1 partout dans le groupe d'essai ; sous le quorum, les votants qui manquent comptent comme « non » ; voteFloor reste le quorum de référence de la participation p0 = 2 × voteFloor / W. Une base existante reçoit ces changements par des amendements gardés (seed_amend, seed_proposal_amend, quorum_amend), jamais en réinstanciant le document. F1.1, F1.2 et N1.1 réécrits pour le quorum par cran (ADR 0013 ; Yvv, 2026-11-02 et 03 ; lot T, textes relus dans docs/chantiers/acte-certification/textes-quorum-seed.md) : sous le quorum, les votants qui manquent comptent comme « non » ; au-delà, la part du cran. Trois phrases reprises après la relecture de M6b (lot T2) : la part du cran, la plus haute au quorum, baisse quand la participation monte (F1.1) ; l'auteur fixe le quorum tant que l'article ne garde la trace d'aucun vote (F1.2) ; le quorum n'est pas un nombre minimal de votants (N1.1). Lot T3 (Yvv, 03/11 : « pas de chiffre datés dans un texte voté ») : l'exemple chiffré de N1.1 retiré (aucun nombre des textes ne dépend de W ni d'une participation) ; N1.1, sous le quorum, il faut autant de « pour » que si le quorum avait voté (vrai pour tout quorum) ; N1.1 et F1.2, la part du cran comme d'habitude au-delà du quorum. Après la relecture de 2ce2028 (lot T3b, même amendement) : N1.1, G se calcule pour que la part exigée, au-delà du quorum, soit celle du cran quand le groupe vote comme d'habitude (vrai pour tout W et tout quorum).",
|
||||||
"slug": "acte-engagement-certification",
|
"slug": "acte-engagement-certification",
|
||||||
"title": {
|
"title": {
|
||||||
"fr": "Acte d'engagement Certification",
|
"fr": "Acte d'engagement Certification",
|
||||||
@@ -760,9 +760,9 @@
|
|||||||
"es": "Niveles de inercia"
|
"es": "Niveles de inercia"
|
||||||
},
|
},
|
||||||
"body": {
|
"body": {
|
||||||
"fr": "À chaque cran, le groupe demande une part de « pour » parmi les votants (voir « Formule du seuil WoT »). Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent comme « non », et il faut autant de voix pour que si le quorum avait voté. La part dépend du cran et du nombre de votants, comparé à la participation habituelle du groupe : au-delà du quorum, plus il y a de votants, plus elle baisse, jusqu'à la majorité M quand tout le monde vote.\n\n`Part exigée = M + (1 − M) × (1 − (T'/W)^G)`, où T' est le nombre de votants, ou le quorum s'il en manque.\n\n**Les cinq crans** : le quorum dans Monnaie libre, la part exigée au-delà du quorum, quand le groupe vote comme d'habitude, puis quand tout le monde vote, et ce qui est à ce cran au départ.\n\n- **Cran 1 · très basse** : quorum 12 ; 60 % comme d'habitude, 50 % quand tout le monde vote. Aucun article au départ.\n- **Cran 2 · basse** : quorum 12 ; 67 % comme d'habitude, 50 % quand tout le monde vote. Raison d'être, Unicité du compte, Réciprocité, et l'ordre des articles de chaque section.\n- **Cran 3 · moyenne** : quorum 50 ; 75 % comme d'habitude, 55 % quand tout le monde vote. Le cran par défaut : tous les autres articles, et chaque nouvel article.\n- **Cran 4 · haute** : quorum 50 ; 83 % comme d'habitude, 60 % quand tout le monde vote. Le titre du document.\n- **Cran 5 · très haute** : quorum 50 ; 90 % comme d'habitude, 66 % quand tout le monde vote. Aucun article au départ.\n\n**La participation habituelle** est la médiane du nombre de votants des propositions du groupe votées depuis un an. Tant que le groupe n'a pas voté sur 5 propositions, elle vaut deux fois le quorum de référence du document : 100 votants dans Monnaie libre. Elle ne dépend pas du quorum d'un article. Elle reste entre 1 % et 50 % de l'électorat, et se mesure une fois par jour.\n\n**G** se calcule pour que la part exigée, à la participation habituelle, soit exactement celle du cran : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est la part exigée comme d'habitude et p̃ la participation habituelle divisée par W.",
|
"fr": "À chaque cran, le groupe demande une part de « pour » parmi les votants (voir « Formule du seuil WoT »). Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent comme « non », et il faut autant de « pour » que si le quorum avait voté. La part dépend du cran et du nombre de votants, comparé à la participation habituelle du groupe : au-delà du quorum, plus il y a de votants, plus elle baisse, jusqu'à la majorité M quand tout le monde vote.\n\n`Part exigée = M + (1 − M) × (1 − (T'/W)^G)`, où T' est le nombre de votants, ou le quorum s'il en manque.\n\n**Les cinq crans** : le quorum dans Monnaie libre, la part exigée au-delà du quorum, quand le groupe vote comme d'habitude, puis quand tout le monde vote, et ce qui est à ce cran au départ.\n\n- **Cran 1 · très basse** : quorum 12 ; 60 % comme d'habitude, 50 % quand tout le monde vote. Aucun article au départ.\n- **Cran 2 · basse** : quorum 12 ; 67 % comme d'habitude, 50 % quand tout le monde vote. Raison d'être, Unicité du compte, Réciprocité, et l'ordre des articles de chaque section.\n- **Cran 3 · moyenne** : quorum 50 ; 75 % comme d'habitude, 55 % quand tout le monde vote. Le cran par défaut : tous les autres articles, et chaque nouvel article.\n- **Cran 4 · haute** : quorum 50 ; 83 % comme d'habitude, 60 % quand tout le monde vote. Le titre du document.\n- **Cran 5 · très haute** : quorum 50 ; 90 % comme d'habitude, 66 % quand tout le monde vote. Aucun article au départ.\n\n**La participation habituelle** est la médiane du nombre de votants des propositions du groupe votées depuis un an. Tant que le groupe n'a pas voté sur 5 propositions, elle vaut deux fois le quorum de référence du document : 100 votants dans Monnaie libre. Elle ne dépend pas du quorum d'un article. Elle reste entre 1 % et 50 % de l'électorat, et se mesure une fois par jour.\n\n**G** se calcule pour que la part exigée, au-delà du quorum, soit exactement celle du cran quand le groupe vote comme d'habitude : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est cette part du cran (60, 67, 75, 83 ou 90 %) et p̃ la participation habituelle divisée par W.",
|
||||||
"en": "At each level, the group asks for a share of votes in favour among the voters (see “WoT threshold formula”). Each level also has its quorum: below the quorum, the voters who are missing count as votes against, and it takes as many votes in favour as if the quorum had voted. The share depends on the level and on the number of voters, compared with the group's usual turnout: beyond the quorum, the more voters, the lower it gets, down to the majority M when everyone votes.\n\n`Share asked = M + (1 − M) × (1 − (T'/W)^G)`, where T' is the number of voters, or the quorum if some are missing.\n\n**The five levels**: the quorum in Monnaie libre, the share asked beyond the quorum, when the group votes as usual, then when everyone votes, and what is at that level at the start.\n\n- **Level 1 · very low**: quorum 12; 60% as usual, 50% when everyone votes. No article at the start.\n- **Level 2 · low**: quorum 12; 67% as usual, 50% when everyone votes. Purpose, Uniqueness of the account, Reciprocity, and the order of the articles of each section.\n- **Level 3 · medium**: quorum 50; 75% as usual, 55% when everyone votes. The default level: all other articles, and every new article.\n- **Level 4 · high**: quorum 50; 83% as usual, 60% when everyone votes. The title of the document.\n- **Level 5 · very high**: quorum 50; 90% as usual, 66% when everyone votes. No article at the start.\n\n**The usual turnout** is the median number of voters on the group's proposals voted on over the past year. Until the group has voted on 5 proposals, it is twice the document's reference quorum: 100 voters in Monnaie libre. It does not depend on the quorum of an article. It stays between 1% and 50% of the electorate, and is measured once a day.\n\n**G** is computed so that the share asked, at the usual turnout, is exactly that of the level: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, where s is the share asked as usual and p̃ the usual turnout divided by W.",
|
"en": "At each level, the group asks for a share of votes in favour among the voters (see “WoT threshold formula”). Each level also has its quorum: below the quorum, the voters who are missing count as votes against, and it takes as many votes in favour as if the quorum had voted. The share depends on the level and on the number of voters, compared with the group's usual turnout: beyond the quorum, the more voters, the lower it gets, down to the majority M when everyone votes.\n\n`Share asked = M + (1 − M) × (1 − (T'/W)^G)`, where T' is the number of voters, or the quorum if some are missing.\n\n**The five levels**: the quorum in Monnaie libre, the share asked beyond the quorum, when the group votes as usual, then when everyone votes, and what is at that level at the start.\n\n- **Level 1 · very low**: quorum 12; 60% as usual, 50% when everyone votes. No article at the start.\n- **Level 2 · low**: quorum 12; 67% as usual, 50% when everyone votes. Purpose, Uniqueness of the account, Reciprocity, and the order of the articles of each section.\n- **Level 3 · medium**: quorum 50; 75% as usual, 55% when everyone votes. The default level: all other articles, and every new article.\n- **Level 4 · high**: quorum 50; 83% as usual, 60% when everyone votes. The title of the document.\n- **Level 5 · very high**: quorum 50; 90% as usual, 66% when everyone votes. No article at the start.\n\n**The usual turnout** is the median number of voters on the group's proposals voted on over the past year. Until the group has voted on 5 proposals, it is twice the document's reference quorum: 100 voters in Monnaie libre. It does not depend on the quorum of an article. It stays between 1% and 50% of the electorate, and is measured once a day.\n\n**G** is computed so that the share asked, beyond the quorum, is exactly that of the level when the group votes as usual: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, where s is that share of the level (60, 67, 75, 83 or 90%) and p̃ the usual turnout divided by W.",
|
||||||
"es": "En cada nivel, el grupo pide una proporción de votos a favor entre los votantes (ver «Fórmula del umbral WoT»). Cada nivel tiene además su quórum: por debajo del quórum, los votantes que faltan cuentan como «no», y hacen falta tantos votos a favor como si hubiera votado el quórum. La proporción depende del nivel y del número de votantes, comparado con la participación habitual del grupo: más allá del quórum, cuantos más votantes, más baja, hasta la mayoría M cuando vota todo el mundo.\n\n`Proporción exigida = M + (1 − M) × (1 − (T'/W)^G)`, donde T' es el número de votantes, o el quórum si faltan.\n\n**Los cinco niveles**: el quórum en Monnaie libre, la proporción exigida más allá del quórum, cuando el grupo vota como de costumbre, luego cuando vota todo el mundo, y lo que está en ese nivel al inicio.\n\n- **Nivel 1 · muy baja**: quórum 12; 60 % como de costumbre, 50 % cuando vota todo el mundo. Ningún artículo al inicio.\n- **Nivel 2 · baja**: quórum 12; 67 % como de costumbre, 50 % cuando vota todo el mundo. Razón de ser, Unicidad de la cuenta, Reciprocidad, y el orden de los artículos de cada sección.\n- **Nivel 3 · media**: quórum 50; 75 % como de costumbre, 55 % cuando vota todo el mundo. El nivel por defecto: todos los demás artículos, y todo artículo nuevo.\n- **Nivel 4 · alta**: quórum 50; 83 % como de costumbre, 60 % cuando vota todo el mundo. El título del documento.\n- **Nivel 5 · muy alta**: quórum 50; 90 % como de costumbre, 66 % cuando vota todo el mundo. Ningún artículo al inicio.\n\n**La participación habitual** es la mediana del número de votantes de las propuestas del grupo votadas en el último año. Hasta que el grupo haya votado 5 propuestas, vale dos veces el quórum de referencia del documento: 100 votantes en Monnaie libre. No depende del quórum de un artículo. Se mantiene entre el 1 % y el 50 % del electorado, y se mide una vez al día.\n\n**G** se calcula para que la proporción exigida, con la participación habitual, sea exactamente la del nivel: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, donde s es la proporción exigida como de costumbre y p̃ la participación habitual dividida por W."
|
"es": "En cada nivel, el grupo pide una proporción de votos a favor entre los votantes (ver «Fórmula del umbral WoT»). Cada nivel tiene además su quórum: por debajo del quórum, los votantes que faltan cuentan como «no», y hacen falta tantos votos a favor como si hubiera votado el quórum. La proporción depende del nivel y del número de votantes, comparado con la participación habitual del grupo: más allá del quórum, cuantos más votantes, más baja, hasta la mayoría M cuando vota todo el mundo.\n\n`Proporción exigida = M + (1 − M) × (1 − (T'/W)^G)`, donde T' es el número de votantes, o el quórum si faltan.\n\n**Los cinco niveles**: el quórum en Monnaie libre, la proporción exigida más allá del quórum, cuando el grupo vota como de costumbre, luego cuando vota todo el mundo, y lo que está en ese nivel al inicio.\n\n- **Nivel 1 · muy baja**: quórum 12; 60 % como de costumbre, 50 % cuando vota todo el mundo. Ningún artículo al inicio.\n- **Nivel 2 · baja**: quórum 12; 67 % como de costumbre, 50 % cuando vota todo el mundo. Razón de ser, Unicidad de la cuenta, Reciprocidad, y el orden de los artículos de cada sección.\n- **Nivel 3 · media**: quórum 50; 75 % como de costumbre, 55 % cuando vota todo el mundo. El nivel por defecto: todos los demás artículos, y todo artículo nuevo.\n- **Nivel 4 · alta**: quórum 50; 83 % como de costumbre, 60 % cuando vota todo el mundo. El título del documento.\n- **Nivel 5 · muy alta**: quórum 50; 90 % como de costumbre, 66 % cuando vota todo el mundo. Ningún artículo al inicio.\n\n**La participación habitual** es la mediana del número de votantes de las propuestas del grupo votadas en el último año. Hasta que el grupo haya votado 5 propuestas, vale dos veces el quórum de referencia del documento: 100 votantes en Monnaie libre. No depende del quórum de un artículo. Se mantiene entre el 1 % y el 50 % del electorado, y se mide una vez al día.\n\n**G** se calcula para que la proporción exigida, más allá del quórum, sea exactamente la del nivel cuando el grupo vota como de costumbre: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, donde s es esa proporción del nivel (60, 67, 75, 83 o 90 %) y p̃ la participación habitual dividida por W."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user