From 8201e73d7c0b34a9ce9bb2ce230c128a464b2d29 Mon Sep 17 00:00:00 2001 From: Yvv Date: Tue, 3 Mar 2026 07:05:55 +0100 Subject: [PATCH] =?UTF-8?q?Accents=20FR,=20architecture=20modulaire,=20pro?= =?UTF-8?q?tocoles=20op=C3=A9rationnels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix accents manquants dans 7 pages UI (décisions, boîte à outils, etc.) - Titres accueil enrichis : Décisions structurantes, Documents de référence, Mandats et nominations, Protocoles et fonctionnement - Retrait Embarquement Forgeron du seed (n'est pas une Decision) - 2 protocoles opérationnels dans Protocoles : Embarquement Forgeron (lié à l'Acte d'engagement) + Soumission Runtime Upgrade (lié à la Décision Runtime Upgrade) avec timeline et liens croisés signalétiques - Décision Runtime Upgrade : badge on-chain + lien protocole + contexte - Document [slug] : lien protocole dans la section Qualification Co-Authored-By: Claude Opus 4.6 --- backend/seed.py | 124 ++----------------- frontend/app/pages/decisions/index.vue | 74 ++++++++++-- frontend/app/pages/documents/[slug].vue | 59 +++++++++ frontend/app/pages/documents/index.vue | 24 ++-- frontend/app/pages/index.vue | 32 ++--- frontend/app/pages/mandates/index.vue | 44 +++---- frontend/app/pages/protocols/index.vue | 152 +++++++++++++++++++----- frontend/app/pages/tools.vue | 40 +++---- 8 files changed, 328 insertions(+), 221 deletions(-) diff --git a/backend/seed.py b/backend/seed.py index 6341fe7..0d45fb2 100644 --- a/backend/seed.py +++ b/backend/seed.py @@ -1994,9 +1994,16 @@ async def seed_decision_runtime_upgrade(session: AsyncSession) -> Decision: "title", "Runtime Upgrade", description=( - "Processus de mise à jour du runtime Duniter V2 on-chain. " - "Chaque upgrade suit un protocole strict en 5 étapes. " - "(Décision on-chain)" + "Décision on-chain — Mise à jour du runtime Duniter V2. " + "Requiert le seuil multi-critères : WoT + Smith + TechComm. " + "Protocole lié : Soumission Runtime Upgrade." + ), + context=( + "Chaque mise à jour du runtime Duniter V2 est une décision " + "on-chain qui nécessite l'approbation simultanée de trois " + "critères : le vote communautaire WoT, le quorum des " + "forgerons Smith, et la validation du Comité Technique. " + "Le seuil d'adoption est calculé selon la formule multi-critères." ), decision_type="runtime_upgrade", status="draft", @@ -2013,108 +2020,6 @@ async def seed_decision_runtime_upgrade(session: AsyncSession) -> Decision: return decision -# --------------------------------------------------------------------------- -# Seed: Decision - Embarquement Forgeron (protocole de qualification) -# -# Processus d'onboarding des forgerons en jalons progressifs. -# Lié explicitement à la section "Qualification" de l'Acte d'engagement. -# Cf. Yvv, ML#32603 post #3 : "compétence sécu et réactivité sont -# davantage les sujets de l'enrôlement et accompagnement (onboarding)" -# Cf. elois, Duniter#9047 : séquence miroir → sync → membership → certifs -# --------------------------------------------------------------------------- - -EMBARQUEMENT_FORGERON_STEPS: list[dict] = [ - { - "step_order": 1, - "step_type": "candidature", - "title": "Candidature", - "description": ( - "Déclaration d'intention auprès de la communauté forgeron. " - "Premier contact avec un forgeron référent qui accepte " - "d'accompagner le parcours. Vérification du statut membre " - "de la toile de confiance principale." - ), - }, - { - "step_order": 2, - "step_type": "mirror", - "title": "Nœud miroir", - "description": ( - "Déployer un nœud miroir Duniter V2 et le maintenir " - "synchronisé pendant une période probatoire. Démontrer " - "les compétences d'administration système Linux : " - "installation, configuration réseau, monitoring. " - "Le nœud doit être joignable et à jour." - ), - }, - { - "step_order": 3, - "step_type": "evaluation", - "title": "Évaluation technique", - "description": ( - "Vérification des compétences techniques par un forgeron " - "certificateur. Parcours de la checklist d'engagement dans " - "un ordre aléatoire. Le candidat doit démontrer :\n" - "- Gestion de clés et sécurité\n" - "- Compréhension du consensus Duniter\n" - "- Capacité de diagnostic et réactivité\n" - "Toute réponse incorrecte interrompt la procédure." - ), - }, - { - "step_order": 4, - "step_type": "certification", - "title": "Certification Smith", - "description": ( - "Invitation par un forgeron existant, acceptation de " - "l'invitation, puis réception de 3 certifications forgeron. " - "Chaque certificateur a vérifié les compétences du candidat " - "via la checklist. La certification engage la responsabilité " - "du certificateur (section Certificateur de l'engagement)." - ), - }, - { - "step_order": 5, - "step_type": "online", - "title": "Mise en ligne", - "description": ( - "Passage du nœud validateur en mode online (goOnline). " - "Le forgeron commence à produire des blocs. " - "Surveillance active pendant les premières semaines : " - "uptime, synchronisation, réactivité aux alertes. " - "Le forgeron est pleinement soumis à l'ensemble des " - "engagements de l'acte." - ), - }, -] - - -async def seed_decision_embarquement_forgeron(session: AsyncSession) -> Decision: - decision, created = await get_or_create( - session, - Decision, - "title", - "Embarquement Forgeron", - description=( - "Protocole d'embarquement (onboarding) des forgerons Duniter V2. " - "Parcours en 5 jalons progressifs de la candidature à la mise en " - "ligne du nœud validateur. Lié à la section Qualification de " - "l'Acte d'engagement forgeron." - ), - decision_type="onboarding", - status="active", - ) - print(f" Decision 'Embarquement Forgeron': {'created' if created else 'exists'}") - - if created: - for step_data in EMBARQUEMENT_FORGERON_STEPS: - step = DecisionStep(decision_id=decision.id, **step_data) - session.add(step) - await session.flush() - print(f" -> {len(EMBARQUEMENT_FORGERON_STEPS)} steps created") - - return decision - # --------------------------------------------------------------------------- # Seed: Simulated voters + votes on first 3 engagement items @@ -2265,16 +2170,13 @@ async def run_seed(): print("\n[4/8] Document: Acte d'engagement forgeron v2.0.0...") doc_forgeron = await seed_document_engagement_forgeron(session, protocols) - print("\n[5/8] Decision: Runtime Upgrade...") + print("\n[5/7] Decision: Runtime Upgrade...") await seed_decision_runtime_upgrade(session) - print("\n[6/8] Decision: Embarquement Forgeron...") - await seed_decision_embarquement_forgeron(session) - - print("\n[7/8] Simulated voters...") + print("\n[6/7] Simulated voters...") voters = await seed_voters(session) - print("\n[8/8] Votes on first 3 engagements forgeron...") + print("\n[7/7] Votes on first 3 engagements forgeron...") await seed_votes_on_items( session, doc_forgeron, diff --git a/frontend/app/pages/decisions/index.vue b/frontend/app/pages/decisions/index.vue index 2f187a9..f17efe9 100644 --- a/frontend/app/pages/decisions/index.vue +++ b/frontend/app/pages/decisions/index.vue @@ -3,7 +3,7 @@ * Decisions — page index. * * Utilise SectionLayout avec status filters, recherche, tri, - * et sidebar "Boite a outils" affichant les protocoles de vote. + * et sidebar "Boîte à outils" affichant les protocoles de vote. */ const decisions = useDecisionsStore() const protocols = useProtocolsStore() @@ -28,7 +28,7 @@ onMounted(async () => { /** Status filter pills with counts. */ const statuses = computed(() => [ - { id: 'draft', label: 'En prepa', count: decisions.list.filter(d => d.status === 'draft').length }, + { id: 'draft', label: 'En prépa', count: decisions.list.filter(d => d.status === 'draft').length }, { id: 'voting', label: 'En vote', count: decisions.list.filter(d => d.status === 'voting' || d.status === 'qualification' || d.status === 'review').length }, { id: 'executed', label: 'En vigueur', count: decisions.list.filter(d => d.status === 'executed').length }, { id: 'closed', label: 'Clos', count: decisions.list.filter(d => d.status === 'closed').length }, @@ -97,8 +97,8 @@ function formatDate(dateStr: string): string { @@ -196,21 +214,21 @@ function formatDate(dateStr: string): string {