Lot U3 : l'interface de l'Acte d'engagement (Yvv, 03/11) — avant le texte, hors vote, « Info ouverture doc de réf. » (OpeningInfo, lib/opening.ts) : le paragraphe d'Yvv mot pour mot à la place de doc.empty.seeds (sa première phrase tant qu'aucun article n'est en vigueur, puis « entrent en vigueur » où « y » n'avait plus rien à reprendre), le cran d'ouverture des Propositions d'amorce, du titre, de l'ordre de chaque section et des autres articles (avant tout changement voté) et le quorum de chaque cran, lus dans l'API ; une séparation (un filet de la couleur de la clé de voûte, jamais une bordure) ; plus les titres « Introduction » et « Engagements fondamentaux » dans le texte. Les informations de F1, F1.1, F1.2, N1, N1.1 et O1 là où elles servent : vote.permanent, vote.rival, vote.others.rule, formula.Tprime, formula.round, formula.B.wot, formula.G, settings.share.note, settings.usual.quorum, settings.gradient, order.edit.effect ; les termes définis de T3c (« à la participation habituelle », « quorum de l'article », « part exigée », « repose sur moins de N propositions votées depuis un an »), plus de « comme d'habitude ». « Proposition d'amorce » (Starter proposal, Propuesta de arranque). Le mot d'Yvv pour qui n'est pas invité, à l'accueil sans session (à la place du bouton Ğ1 tant que la connexion Ğ1 n'est pas active) et sur « Se connecter » (signin.g1.pending sans redite). Réordonner : la ligne sous le pointeur lue dans la mise en page (offsetTop), pas là où animate:flip la montre — une poignée tirée sur plusieurs lignes ne revient plus en arrière ; le pointeur capturé par la liste. API : seedFeatured sur chaque version (seul changement sous crates/). C1, C3, C20, C27, C35, C38 suivent les mots

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-11-03 22:28:41 +01:00
co-authored by Claude Opus 5.5
parent 9d478d668a
commit 8528a269fc
20 changed files with 434 additions and 88 deletions
+41 -18
View File
@@ -42,8 +42,9 @@ export const en: Messages = {
'signin.g1': 'Sign in with Ğ1',
'signin.g1.how': "You'll be sent to connect.monnaie-libre.fr, the sign-in service of the Monnaie libre forum. There you approve the sign-in in Ğecko (link or QR code), then come back here. No password and no key is ever passed to us.",
'signin.g1.members': 'For members of the Ğ1 web of trust only.',
'signin.g1.pending': "Ğ1 sign-in is on its way: libreDecision's registration with connect.monnaie-libre.fr is in progress. Meanwhile, you get in with an invitation link.",
'signin.g1.pending': "Ğ1 sign-in is on its way: libreDecision's registration with connect.monnaie-libre.fr is in progress.",
'signin.invite': 'Got an invitation link? Just open it: it signs you in.',
'signin.uninvited': 'To join a decision group, for now ask Chiara or Yvv for an invitation link. This prototype is not yet wired to the chain.',
'signin.dev': 'Development sign-in',
'signin.dev.name': 'Name',
'signin.dev.admin': 'access administrator',
@@ -103,8 +104,8 @@ export const en: Messages = {
'docs.inForce.other': '{n} articles in force',
'docs.open.one': '{n} open proposal',
'docs.open.other': '{n} open proposals',
'docs.seeds.one': '{n} seed proposal',
'docs.seeds.other': '{n} seed proposals',
'docs.seeds.one': '{n} starter proposal',
'docs.seeds.other': '{n} starter proposals',
'doc.view.label': 'Read',
'doc.view.inforce': 'In force',
@@ -125,7 +126,7 @@ export const en: Messages = {
'doc.seed.long': 'Came into force without a vote, so as not to start from a blank page. It remains open for voting, like any text.',
'doc.seed.votes.one': 'seed a minima · {n} vote',
'doc.seed.votes.other': 'seed a minima · {n} votes',
'doc.seedProposal': 'Seed proposal',
'doc.seedProposal': 'Starter proposal',
'doc.seedProposal.long': 'A starting text put forward to start the vote. It is not in force: it comes into force through the vote, like any proposal.',
'doc.confirmed': 'confirmed by vote',
'doc.adopted': 'adopted on {date}',
@@ -134,7 +135,21 @@ export const en: Messages = {
'doc.basket': 'Vote in bulk',
'doc.basket.count': 'Vote in bulk · {n}',
'doc.empty': 'No article is in force. The proposals below move up as soon as they reach their threshold.',
'doc.empty.seeds': 'No article is in force yet. Start with the seed proposals: they come into force by the vote, like any proposal.',
'opening.title': 'Opening info, reference doc',
'opening.none': 'No article is in force yet.',
'opening.amorce': 'Starter proposals come into force through the vote, like the proposals that follow, with less inertia so that the document comes to life more easily. It is recommended to raise the inertia afterwards, through the vote, to make changes less frequent.',
'opening.amorce.after': 'Starter proposals come into force through the vote, like the proposals that follow, with less inertia so that the document comes to life more easily. It is recommended to raise the inertia afterwards, through the vote, to make changes less frequent.',
'opening.inertia': 'Inertia at the opening',
'opening.inertia.amorce': 'Starter proposals',
'opening.inertia.title': 'Title of the document',
'opening.inertia.orders': 'Order of each section',
'opening.inertia.others': 'Other articles',
'opening.quorum': 'Quorum',
'opening.quorum.levels': '{list} voters, from level 1 to level 5.',
'opening.quorum.same.one': '{n} voter at each level.',
'opening.quorum.same.other': '{n} voters at each level.',
'opening.quorum.rule': "Below an article's quorum, the missing voters count as against.",
'opening.quorum.author': 'The author of the first version of an article, an administrator for the starting texts, can set another one as long as the article keeps no trace of any vote.',
'doc.others.one': '{n} other version open',
'doc.others.other': '{n} other versions open',
'doc.published': 'Published to the text repository',
@@ -202,6 +217,7 @@ export const en: Messages = {
'order.proposed.one': '{n} order proposed',
'order.proposed.other': '{n} orders proposed',
'order.edit.note': 'An order is voted at inertia {level}, like an article: unfolded, in the basket, on the Ğ1 chain in Monnaie libre.',
'order.edit.effect': 'If it comes into force, only the articles of this section change place; no text changes.',
'order.submitted': 'Order submitted to vote.',
'title.propose': 'Propose another title',
'title.propose.label': 'New title',
@@ -246,6 +262,7 @@ export const en: Messages = {
'vote.simulated.mark': 'simulated vote',
'vote.others': 'Other versions',
'vote.others.count': 'Other versions ({n})',
'vote.others.rule': 'If several versions reach their threshold, the one with the widest margin comes into force.',
'vote.need': '{yes} for to pass · {no} against to block',
'vote.need.quorum': '{yes} for to pass · the quorum blocks it',
'vote.need.first.one': '{yes} for out of {quorum} voter to pass',
@@ -259,6 +276,8 @@ export const en: Messages = {
'vote.stale': 'The text has changed in substance since you voted: your vote no longer counts until you reconfirm it.',
'vote.reconfirm': 'Reconfirm: {choice}',
'vote.private': 'Nobody sees your vote: only the totals are visible.',
'vote.permanent': 'The vote stays open, with no deadline: you can change or withdraw your vote at any time; the last one is the one that counts.',
'vote.rival': 'A text is already in force: to replace it, this version must also reach a wider margin (votes in favour minus votes required) than that text has. The replaced text becomes a proposal again, with its votes: it can come back.',
'vote.held': 'An objection is holding this version back: until it is lifted, nobody can vote for it any more. You can vote against it or take your vote back; once lifted, it enters into force only with the votes still there.',
'vote.held.redit': 'It repeats “{other}”.',
'vote.held.contredit': 'It contradicts “{other}”.',
@@ -299,7 +318,7 @@ export const en: Messages = {
'quorum.heading.other': 'Quorum · {n} voters',
'quorum.default.one': 'By default, that of its level: {n} voter.',
'quorum.default.other': 'By default, that of its level: {n} voters.',
'quorum.explain': 'You set the quorum of this article as long as nobody has voted. Below it, the missing voters count as against.',
'quorum.explain': 'You set the quorum of this article as long as it keeps no trace of any vote. Below it, the missing voters count as against.',
'quorum.field': 'Quorum of the article',
'quorum.set': 'Set this quorum',
'quorum.reset': 'Back to the default ({n})',
@@ -404,7 +423,7 @@ export const en: Messages = {
'ballots.verify.unreadable': 'This is not a readable vote receipt.',
'inertia.title': 'Inertia',
'inertia.explain': 'The higher the inertia, the more votes it takes to change this text. Below the quorum, the missing voters count as against; beyond it, the share of votes in favour asked for falls as turnout rises.',
'inertia.explain': "The higher the inertia, the more votes it takes to change this text. Below the article's quorum, the missing voters count as against; beyond it, the share asked falls as turnout rises.",
'inertia.change': 'Propose an inertia change',
'inertia.change.to': 'New inertia',
'inertia.change.note': "A change of inertia is itself voted at the article's inertia: {level}.",
@@ -420,38 +439,42 @@ export const en: Messages = {
'formula.W.wot': 'members of the Ğ1 web of trust',
'formula.W.group': 'group members',
'formula.T': 'T — votes cast: {n}',
'formula.Tprime': 'T′ — voters counted: {n}, T or Q if some are missing',
'formula.M': 'M — majority at full turnout: {n}%',
'formula.G': 'G — gradient: {n}',
'formula.G': "G — gradient: {n}, derived from the group's usual turnout",
'formula.B': 'B — base: {n}',
'formula.B.wot': 'Raised to the power W, B is so small that it does not count in the web of trust.',
'formula.Q': 'Q — quorum: {n}',
'formula.R': 'R — current threshold: {n} votes in favour',
'formula.reading': 'Below the quorum Q, the missing voters count as against. Beyond it, the share of votes in favour asked for, highest at the quorum, falls as turnout rises; when everyone votes, majority M is enough.',
'formula.round': 'A version reaches its threshold when its votes in favour reach R, rounded up to a whole number.',
'formula.reading': "Below the article's quorum Q, the missing voters count as against: it takes as many votes in favour as if Q people had voted. Beyond it, the share of votes in favour asked for, highest at the quorum, falls as turnout rises; when everyone votes, majority M is enough.",
'common.pct': '{n}%',
'settings.title': 'Formula settings',
'settings.intro': 'To change a text, the group asks for a number of votes in favour that depends on its electorate, its usual turnout and the inertia of the article.',
'settings.usual': 'Usual turnout',
'settings.usual.median.one': '{n} voter out of {electorate} ({pct}): the median of the {sample} proposals voted on over the past year.',
'settings.usual.median.other': '{n} voters out of {electorate} ({pct}): the median of the {sample} proposals voted on over the past year.',
'settings.usual.reference.one': '{n} voter out of {electorate} ({pct}), twice {q}, the reference quorum: the reference turnout, until the group has voted on {min} proposals ({sample} so far).',
'settings.usual.reference.other': '{n} voters out of {electorate} ({pct}), twice {q}, the reference quorum: the reference turnout, until the group has voted on {min} proposals ({sample} so far).',
'settings.usual.reference.one': '{n} voter out of {electorate} ({pct}), twice {q}, the reference quorum: the reference turnout, while it rests on fewer than {min} proposals voted on over the past year ({sample} so far).',
'settings.usual.reference.other': '{n} voters out of {electorate} ({pct}), twice {q}, the reference quorum: the reference turnout, while it rests on fewer than {min} proposals voted on over the past year ({sample} so far).',
'settings.usual.bounded.one': 'Kept between {lo} and {hi} of the electorate: the group asks for its votes in favour as if {n} person voted ({pct}).',
'settings.usual.bounded.other': 'Kept between {lo} and {hi} of the electorate: the group asks for its votes in favour as if {n} people voted ({pct}).',
'settings.usual.when': 'Measured once a day, last on {date}.',
'settings.usual.never': 'Measured once a day.',
'settings.usual.quorum': 'It does not depend on the quorum of an article.',
'settings.levels': 'The five levels',
'settings.col.level': 'Level',
'settings.col.share': 'Share asked',
'settings.col.quorum': 'Quorum',
'settings.col.required': 'Votes for',
'settings.current': 'this article',
'settings.share.note.one': 'Share asked: the share of votes in favour asked, at {n} voter as usual.',
'settings.share.note.other': 'Share asked: the share of votes in favour asked, at {n} voters as usual.',
'settings.share.note': "Share asked: the one the level asks for beyond the article's quorum, at the usual turnout.",
'settings.quorum.note': "Quorum: below it, the missing voters count as against. It is the level's; the author of an article may set another one before the first vote.",
'settings.required.version.one': "Votes for: at {n} voter, this version's turnout.",
'settings.required.version.other': "Votes for: at {n} voters, this version's turnout.",
'settings.required.usual.one': 'Votes for: at {n} voter, as usual.',
'settings.required.usual.other': 'Votes for: at {n} voters, as usual.',
'settings.reading': 'At each level, the group asks for its share of votes in favour when it votes as usual; beyond the quorum, the more voters, the closer it comes to M. Below the quorum of the level, the missing voters count as against.',
'settings.required.version.one': "Votes for: at {n} voter, this version's turnout, or at the quorum if it is higher.",
'settings.required.version.other': "Votes for: at {n} voters, this version's turnout, or at the quorum if it is higher.",
'settings.required.usual.one': 'Votes for: at {n} voter, the usual turnout rounded, or at the quorum if it is higher.',
'settings.required.usual.other': 'Votes for: at {n} voters, the usual turnout rounded, or at the quorum if it is higher.',
'settings.reading': "Beyond the article's quorum, the more voters, the lower the share asked gets, down to the majority M when everyone votes. Below the article's quorum, the missing voters count as against, and it takes as many votes in favour as if that quorum had voted.",
'settings.gradient': "G is computed so that the share asked, beyond the article's quorum, is exactly that of the level at the usual turnout.",
'history.title': 'Corrections',
'history.initial': 'initial text',