Yvv and Claude Fable 5
a8998f0624
ci : relance de la pipeline (config forge non récupérée sur le run 21)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 21:10:22 +02:00
Yvv and Claude Fable 5
3301b764f7
v2 : correctifs QA — overlays posés, accueil jamais orphelin, finitions mobiles
...
- overlays Nuxt UI (UModal/USlideover) : géométrie posée en CSS
(assets/css/overlays.css) — les utilitaires tailwind attendus par @nuxt/ui
ne sont pas générés (UnoCSS ne scanne pas node_modules) : drawer mobile et
modales de confirmation se rendaient hors écran
- a11y : title/description sur les 3 overlays (DialogTitle/Description
rendus, warnings reka-ui éteints), fermeture du drawer ancrée et testée
- suppression du collectif actif : bascule sur un collectif restant —
jamais d'accueil orphelin (test store ajouté, 343 vitest verts)
- observatoire : la route « transmis » entre dans les barres (base 100 %)
- overflows mobiles à zéro : formules KaTeX (défilement), table vigueur
(défilement < 768px), pill cible (retour à la ligne), inputs decider et
mandat (border-box)
- vérifié navigateur : drawer, modale, 14 routes sans débordement,
zéro erreur console
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 20:11:54 +02:00
Yvv and Claude Fable 5
38fd053e87
Fusion feat/v2-refonte : libreDecision v2 — démocratie d'exercice
...
- 8 moteurs purs (342 tests verts), 14 écrans, 5 modalités, 7 gabarits
- local-first : IndexedDB + export/import Bundle, seeds Atelier + Ğ1
- correctif QA : désignation « c'est moi » dans un collectif importé
- documentation v2 réécrite, orphelins v1 supprimés
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 17:54:31 +02:00
Yvv and Claude Fable 5
cf59bbca0d
v2 : désignation « c'est moi » dans un collectif importé (correctif QA)
...
- les seeds (Ğ1, Atelier) n'ont aucun isMe : la carte identité propose
désormais de se désigner parmi les personnes existantes (chips) ou de
s'ajouter (formulaire), au lieu d'un état vide sans issue
- vitest 13 fichiers verts, build zéro erreur
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 17:53:16 +02:00
Yvv and Claude Fable 5
f2829339cf
chore : sort les PDF des livres du suivi git (restent sur disque)
...
- docs/*.pdf ignorés — sources doctrinales locales, pas des artefacts du code
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 14:11:19 +02:00
Yvv and Claude Fable 5
7cfc7ea352
v2 : nettoyage des orphelins v1 + documentation livrable
...
- 43 fichiers v1 supprimés (composants documents/protocols/sanctuary/toolbox,
stores auth/documents/groups/mandates/organizations/protocols/votes,
composables api/notifications/formula/websocket, utils doublons du moteur)
- nuxt.config épuré (polkadot retiré, KaTeX et apiBase gardés), meta v2
- README.md, CONTRIBUTING.md, CLAUDE.md réécrits pour la v2
- Build zéro erreur, 342/342 tests verts
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 14:09:05 +02:00
Yvv and Claude Fable 5
e164b5f6c1
v2 : les 14 écrans — le tour complet de la démocratie d'exercice
...
- Aujourd'hui (Fil 13 sections + capture sticky) + Le chemin (tunnel 2 gestes,
Q0 inline, 3 chips, dérogation asymétrique, alternatives réglage/consignation)
- Registre + fiche décision (timeline, périmètre premier/second lieu auditable,
affluence non-ignorable, S'instruire condensé, éléments + cartographie de
clôture, épreuve du réel, Remettre en question, PV A4, gravure)
- Salle de vote 5 modalités (consentement, nuancé+histogramme, binaire hérité
avec jauge inertielle, Réglage collectif complet — faisceau, médiane basse,
Pour moi, Explorer, cristallisation-geste —, élection à départage humain)
- Textes (Pacte en clair, document vivant, diff, vue projetée, Atelier des
formules porté du v1 sur le moteur unique) + Mandats (faits comptés, feux
de la rampe, wizard 3 étapes) + Observatoire (consigner→observer→protocoliser)
- Onboarding 7 gabarits + Données locales (export/import, attributs, atelier)
- voting→framing gardé (Reformuler d'un réglage figé non cristallisé)
- Pages v1 supprimées (login, documents, mandates, protocols, sanctuary,
tools, decisions/new) — 342 tests verts, build zéro erreur
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 13:47:20 +02:00
Yvv and Claude Fable 5
d886302b59
v2 : couche données complète + shell + primitives communes
...
- stores/collective.ts (état local-first, gabarits, import/export, seeds)
+ stores/decisions.ts (cycle de vie complet : capture→chemin→fenêtres→
sessions→cristallisation→épreuve du réel→révocation)
- data/templates.ts : 7 gabarits (Page blanche observatoire-d'abord,
5 points de départ, Institution symétrique)
- composables useFeed (13 sections du Fil en sélecteurs purs) + useSearch
(index unique Cmd+K/Q0)
- shell : layouts default/bare, app.vue mince, useMood v2 (Source/Margelle/
Nappe/Minuit), sceau 井 = logo, LdWorkspaceSelector avec finalité A1,
LdAvatarStack (premier/second lieu), LdCountdown (suspension striée)
- 338 tests vitest verts, npm run build zéro erreur
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 10:30:35 +02:00
Yvv and Claude Fable 5
6f2bf62295
v2 : seed Duniter Ğ1 extrait sans perte (bundle 331 Ko + 22 tests)
...
- export_seed_bundle.py : parsing ast de seed.py (zéro dépendance DB),
uuid5 déterministes, sha256 reproductible
- 33 clauses Certification + 59 Forgeron v2.0.0-fr, voteRecord 97/23/19
W=7224 seuil 97 D30M50B.1G.2S.1, 11 personnes (5 forgerons), 3 mandats,
10 protocoles, Pacte 20 clauses, 118 décisions fondatrices chaînées
- Écarts v1 documentés dans le script (sessions de démo non portées,
ComTech reconstruit depuis la recherche forum, presets câblés par clause)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 09:48:13 +02:00
Yvv and Claude Fable 5
f707b5f15d
v2 : moteurs purs complets + ambiances + persistance + seed Atelier du Canal
...
- engine/ : parametric (médiane basse, cristallisation, impact linear-share,
bimodalité), state (canTransition 9 gardes doctrinales + windowOutcome),
settings (resolveSettings + replis), triage (R-U→R6, phrases françaises),
impact (concernés calculés), électionResult (blanc, quorum, égalité sans
départage machine) — 296 tests vitest verts
- moods.css v2 : Source/Margelle/Nappe/Minuit (champ lexical du puits),
tokens routes/états, socle borderless, print A4, tampon 井
- data/persistence.ts : IndexedDB local-first, export/import Bundle, lignée
- Seed Atelier du Canal (145 Ko, tous les états de l'UI) + test
- backend/scripts/export_seed_bundle.py (extraction Ğ1, bundle à générer)
- test anti-lexique (marqueur ld-v2)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 09:22:19 +02:00
Yvv and Claude Fable 5
53d8752e40
v2 : conception ultracode + moteur de formules porté en TS
...
- Blueprint définitif (docs/dev/BLUEPRINT-V2.md + JSON) : panel 4 visions
+ 3 juges, corpus doctrinal (Mon nom est personne, Une économie du don,
SejeteralO), 4 critiques d'intégration, 3 vérificateurs, réparations
- Corpus d'intention + lectures brutes archivés
- Moteur porté Python→TS pur : threshold (inertie WoT, Smith, ComTech),
nuancé 6 niveaux, DSL modeParams — 45 tests vitest, parité croisée
vérifiée (Forgeron W=7224 T=120 ⇒ 94)
- Contrat de domaine v2 (types/domain.ts) + lexique UI (lexicon.ts)
- vitest + idb-keyval en dépendances
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 05:59:33 +02:00
Yvv and Claude Opus 4.8
172eab4c7c
design(sceau): hexagramme 井 traits épais, coins nets, aspect carré
...
- viewBox 112×105, height 8, rx supprimé (rendu cut)
- inline app.vue + SVG public alignés
- géométrie calée sur les modèles IMAGES/PERVIER/Hexagrammes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-08-03 06:54:05 +02:00
Yvv and Claude Opus 4.8
39883ee444
build(deps): flip @yvv/nuxt-base vers la dép git distante (v0.1.0)
...
- extends: ['../../yvv-nuxt-base'] → ['@yvv/nuxt-base']
- package.json : dép git+ssh://gitea@git.open.us.org/yvv/yvv-nuxt-base.git#v0.1.0
- résout au commit taggé b1c6a2f (identique au layer local)
- build npm vert, prod :3099 → 200, smoke moods 8/8 (4 moods × light/dark × mobile/desktop)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 18:33:54 +02:00
Yvv and Claude Opus 4.8
55020033ee
chore(git): ignore les backups .db.bak (données runtime)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-18 20:45:02 +02:00
Yvv and Claude Opus 4.8
a9e586cda1
refactor(moods): adopte le layer @yvv/nuxt-base pour le mécanisme d'ambiances
...
- nuxt.config: extends ['../../yvv-nuxt-base']
- useMood.ts: délègue à useMood(moods) du layer, exporté useLibreMood
(évite la collision avec l'auto-import du layer)
- MoodSwitcher.vue + app.vue: appellent useLibreMood()
- moods.css inchangé (couleurs = identité projet)
Mécanisme partagé (application DOM, persistance, sync color-mode) mutualisé
sans toucher le contrat CSS. Vérifié headless (Playwright) : 4 moods × light/dark
× desktop/mobile OK, persistance au reload OK, zéro erreur JS, zéro régression.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-18 09:07:02 +02:00
Yvv and Claude Sonnet 4.6
59fff64f9e
Compartimentation : isolation stricte des données par espace de travail
...
- Ajout clause else IS NULL sur tous les endpoints list (protocols, decisions,
mandates, documents, groups, votes) — sans X-Organization → données globales
seulement, jamais le contenu d'un autre espace
- _get_protocol/_get_decision/_get_mandate : org_id propagé à tous les
endpoints GET/PUT/DELETE/advance/assign/revoke/steps → 404 si UUID d'un
autre espace
- votes.py : list_vote_sessions filtre via JOIN VotingProtocol.organization_id
- groups.py : suppression _org_id_from_header() mort, create_group assigne
organization_id correctement
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-26 18:52:16 +02:00
Yvv and Claude Sonnet 4.6
f56d84e76b
Mandats : origin→FK identité + nomination auto + boutons + tests intégration
...
- origin TEXT → origin_id UUID FK duniter_identities (migration e3f4a5b6c7d8)
- GET /auth/identities?q= : recherche d'identités par nom/adresse
- MandateCreate.nomination_mode : auto (auto-assign auteur), collective, postpone
- Wizard new.vue : champ origine = picker identité, checkbox "Démarrer maintenant"
- [id].vue : modal "Assigner" = search-picker (résout UUID vs adresse SS58), affiche
origin_display_name + mandatee_display_name, inputs natifs (<input>/<textarea>)
- Erreurs API visibles dans l'UI (plus de catch silencieux)
- test_mandate_flows.py : 17 tests intégration SQLite réels (origin, nomination,
assign, lifecycle, revocation, interactions croisées) — 241 tests total OK
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-25 20:48:27 +02:00
Yvv and Claude Sonnet 4.6
3423ac2e7e
Migrations : fix ADD CONSTRAINT IF NOT EXISTS (syntaxe PostgreSQL invalide)
...
Remplace par un bloc DO $$ IF NOT EXISTS ... $$ pour le FK circulaire
item_versions→document_items. Testé localement sur pg-test : 5 migrations
OK + idempotence OK.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-25 02:57:39 +02:00
Yvv and Claude Sonnet 4.6
2d2ac79cd5
Alembic : migration initiale + chaîne idempotente IF NOT EXISTS
...
- 0b9c1d2e3f4a : migration initiale (CREATE TABLE IF NOT EXISTS) — safe
sur une DB déjà bootstrappée via create_all()
- 70914b334cfb : ADD COLUMN IF NOT EXISTS (organization_id) — was down_revision=None
- b78571ae9e00 : CREATE TABLE IF NOT EXISTS qualification_protocols
- c4e812fb3a01 : CREATE TABLE IF NOT EXISTS groups + group_members
- d91a3c7f8b02 : ADD COLUMN IF NOT EXISTS origin (mandates)
- Dockerfile prod : restaure alembic upgrade head au démarrage
Sur le serveur prod, exécuter une fois :
docker exec <projet>-backend alembic upgrade head
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-25 02:47:20 +02:00
Yvv and Claude Sonnet 4.6
21bca67e6a
Docker : supprime alembic upgrade head du startup
...
Le lifespan FastAPI appelle déjà init_db() (create_all) au démarrage.
Lancer alembic en plus cassait sur une DB vide (migration initiale manquante).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-25 02:16:50 +02:00
Yvv and Claude Sonnet 4.6
56d72eeec2
Auth : mode prototype factice en prod + fix test DB manquante
...
- Login : panneau proto-mode en avant quand DEMO_MODE actif (profils API)
masque le formulaire extension-required ; note trustWallet à venir
- auth.ts : TODO trustWallet avec protocole postMessage prévu
- routers/auth.py : TODO trustWallet au point de vérification signature
- test_middleware : fixture _create_tables (autouse) — ASGITransport ne
déclenche pas le lifespan, init_db() ne tournait pas → duniter_identities
introuvable au verify ; 224/224 passent
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-25 00:34:49 +02:00
Yvv and Claude Sonnet 4.6
3b339b643c
Mandats : refonte wizard nomination-first + types statutory/functional
...
- Réordonnancement étapes : nomination → infos → résumé (au lieu de infos → nomination → toolbox → résumé)
- Cas nomination renommé : 'election' → 'collective' ; auto-désignation scindée en mode période/réunion
- Types mandat ajoutés : statutory, functional (labels + filtres index)
- Légères corrections texte modalities (ortho, reformulation)
- Fix TS : assertions non-null sur statusGroupMap et paramValues
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-24 20:33:16 +02:00
Yvv and Claude Sonnet 4.6
3ba9c43ce3
Mandat : wizard création 4 étapes + boîte à outils élection
...
- Mandate model : champ origin (contexte/déclencheur) + migration
- MandateCreate schema : origin, starts_at, ends_at
- mandates/new.vue : wizard complet
· Étape 1 : type · nom · origine · description · durée (relative ou dates)
· Étape 2 : auto-désignation (ratification) ou désignation collective
· Étape 3 : boîte à outils — sans/avec candidature, 6 modalités,
paramètres configurables (durée, quorum, seuil, slider+input)
· Étape 4 : récap + génération automatique des étapes du mandat
- Tous les boutons "Nouveau mandat" pointent vers /mandates/new
- decisions/new.vue : "Demander un mandat" → /mandates/new
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-24 05:29:13 +02:00
Yvv and Claude Sonnet 4.6
1f92f153c5
Revert Claude : retour au stub Qwen — interface stable, branchement à venir
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-24 05:10:49 +02:00
Yvv and Claude Sonnet 4.6
9b6322c546
IA : Claude substitut Qwen + auth rate limit prototype
...
- qualify_ai_service : ai_frame_async() avec Claude Haiku
· round 1 → questions contextualisées si ANTHROPIC_API_KEY définie
· round 2 → explication enrichie par Claude
· fallback transparent sur ai_frame() si pas de clé (tests inchangés)
- config : ANTHROPIC_API_KEY + ANTHROPIC_MODEL (claude-haiku-4-5-20251001)
- requirements : anthropic>=0.97.0
- main : auth rate limit = RATE_LIMIT_DEFAULT partout (prototype mode)
→ supporte accès démo/test sans lockout en prod comme en dev
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-23 23:55:10 +02:00
Yvv and Claude Sonnet 4.6
9a8f10efdf
Groupes d'identités : modèle DB, router, store, UI cercles + Protocoles
...
- Group + GroupMember : modèle SQLAlchemy + migration + router CRUD
- /api/v1/groups : liste, création, suppression, membres (add/remove)
- groups.ts : store Pinia (fetchAll, getGroup, create, remove, addMember, removeMember)
- decisions/new.vue : cercles 1 & 2 en mode texte libre OU groupe prédéfini
(affected_count calculé depuis le member_count du groupe)
- protocols/index.vue : section Groupes avec expand/collapse, ajout/suppression membres
- lang="fr" + spellcheck sur tous les textareas ; placeholder cercle 2 corrigé
- n8n channels : prévu sprint futur (texte libre → webhook appel à contribution)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-23 20:25:44 +02:00
Yvv and Claude Sonnet 4.6
e2ae8b196e
Qualify : service IA + endpoint ai-chat + wizard Décider (3 cercles + AI 2-rounds)
...
- qualify_ai_service.py : stub IA 2-allers-retours (réversibilité + urgence)
- qualify.py router : endpoint POST /ai-chat → AIChatRequest/AIChatResponse
- test_qualifier_ai.py : 11 tests A1-A7 (questions stables, done=True au 2e round)
- decisions/new.vue : wizard 4 étapes — branche mandat (liste + lien demande) /
hors-mandat (3 cercles textarea), questions IA, résultat + boîte à outils,
formulaire final
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-23 19:44:00 +02:00
Yvv and Claude Sonnet 4.6
5c51cffc93
Qualifier : corrections R2/R6 + router + modèle DB + wizard frontend
...
Corrections moteur (TDD) :
- R2 : within_mandate → record_in_observatory=True (Observatoire des décisions)
- R6 : >50 personnes → collective recommandé, pas obligatoire (confidence=recommended)
- R3 supprimée : affected_count=1 hors périmètre de l'outil
- R9-R12 renommés G1-G4 (garde-fous internes)
- 23 tests, 213/213 verts
Étape 1 — Router /api/v1/qualify :
- POST / → qualify() avec config depuis DB ou defaults
- GET /protocol → protocole actif
- POST /protocol → créer/remplacer (auth requise)
Étape 2 — Modèle QualificationProtocol :
- Table qualification_protocols (seuils configurables via admin)
- Migration Alembic + seed du protocole par défaut
Étape 3 — Wizard frontend decisions/new.vue :
- Étape 1 : formulaire de qualification (mandat, affected_count, structurant, contexte)
- Étape 2 : résultat (type, raisons, modalités, observatoire, on-chain)
- Étape 3 : formulaire de décision (titre, description, protocole si collectif)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-23 19:12:01 +02:00
Yvv and Claude Sonnet 4.6
428299c9c8
TDD Qualifier : moteur de qualification des décisions (R1–R12)
...
- engine/qualifier.py : QualificationConfig (seuils configurables),
QualificationInput, QualificationResult, DecisionType enum, qualify()
- Règles : within_mandate→consultation_avis, affected_count→routing,
is_structural→recommend_onchain, seuils lus depuis config
- Stub suggest_modalities_from_context() — interface LLM définie,
intégration Qwen3.6 (MacStudio) à venir
- 22 tests, 212/212 verts, zéro régression
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-23 16:16:35 +02:00
Yvv and Claude Sonnet 4.6
fc84600f97
Fix auth : CORS outermost + dev rate limit + filtre workspace réactif
...
- Middleware : CORSMiddleware ajouté en dernier = plus externe = tous les
codes de retour (dont 429) portent Access-Control-Allow-Origin
→ résout "no response / Failed to fetch" sur POST /auth/challenge
- Dev mode : rate_limit_auth = RATE_LIMIT_DEFAULT (60/min) au lieu de 10/min
→ plus de blocage login après quelques reconnexions
- app.vue : watcher activeSlug → refetch documents/décisions/protocoles/mandats
→ le sélecteur de workspace filtre désormais le contenu en temps réel
- TDD : 4 tests middleware (RED→GREEN) + doc méthode docs/dev/tdd-methode.md
- Régression : 190/190 tests verts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-23 15:51:28 +02:00
Yvv and Claude Sonnet 4.6
79e468b40f
Multi-tenancy : espaces de travail + fix auth reload (rate limiter OPTIONS)
...
- Modèles Organization + OrgMember, migration Alembic (SQLite compatible)
- organization_id nullable sur Document, Decision, Mandate, VotingProtocol
- Service, schéma, router /organizations + dependency get_active_org_id
- Seed : Duniter G1 + Axiom Team ; tout le contenu seed attaché à Duniter G1
- Backend : list/create filtrés par header X-Organization
- Frontend : store organizations, WorkspaceSelector réel, useApi injecte l'org
- Fix critique : rate_limiter exclut les requêtes OPTIONS (CORS preflight)
→ résout le bug "Failed to fetch /auth/me" au reload (429 sur preflight)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-23 15:17:14 +02:00
Yvv and Claude Sonnet 4.6
224e5b0f5e
Auth Duniter v2 : vérification réelle + extension signing + titres outils
...
Backend :
- Vérification Sr25519/Ed25519 réelle via substrateinterface (bypass démo)
- Message signé : <Bytes>{challenge}</Bytes> (convention polkadot.js)
- DEV_PROFILES : Charlie → Référent structure, Dave → Auteur (WoT member)
Frontend :
- Signing via extension polkadot.js / Cesium2 (_signWithExtension)
- @polkadot/extension-dapp + @polkadot/util installés
- Vite : global=globalThis + optimizeDeps pour les packages polkadot
- Boîte à outils : titres complets des 4 sections
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 03:36:51 +01:00
Yvv and Claude Sonnet 4.6
02629c4e68
CI seed : corrige nom container (sans suffixe -1)
...
ehv-decision-main-backend, pas ehv-decision-main-backend-1.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 02:58:22 +01:00
Yvv and Claude Sonnet 4.6
b63c6f95e1
Home : titres complets des blocs + burger mobile-only + seed CI
...
- Titres cards : "Décisions et consultation d'avis", "Documents de référence",
"Mandats et nominations", "Protocoles et fonctionnement"
- Burger supprimé sur desktop (≥768px), conservé mobile uniquement
- CI : step seed (docker exec python seed.py) entre test-deploy et healthcheck
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 02:45:38 +01:00
Yvv and Claude Sonnet 4.6
075c3c944c
CI : suppression .woodpecker/seed.yml — restaure les triggers push
...
Le fichier séparé cassait Woodpecker 3.x (multi-file + when:manual
empêchait tous les triggers push depuis commit 1842303c ).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 02:21:40 +01:00
Yvv
8c2e8d5d5b
ci: webhook repaired — retrigger
2026-03-24 02:14:59 +01:00
Yvv
b9d2fd1c6d
ci: retrigger pipeline home fix
2026-03-24 02:11:56 +01:00
Yvv and Claude Sonnet 4.6
99c5e9dd5a
Home : renommage libreDecision + chiffres dynamiques + centrage + typo
...
- Titre : ğ(Decision) → libreDecision (libre italic/muted + Decision accent)
- Chiffres : plus de valeurs hardcodées, tout dynamique depuis les stores
(mandates store ajouté, protocoles depuis protocols.protocols.length)
- Affichage intelligent : total quand actif = 0, labels contextuels
- Grilles centrées : margin: 0 auto sur .dash
- Font-weight 800 → 700 partout (moins gras, plus classe)
- Typo : "Nuance" → "Nuancé" dans les tags
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 02:06:02 +01:00
Yvv and Claude Sonnet 4.6
0310dcba42
ci: pipeline seed séparé (.woodpecker/seed.yml, event: manual)
...
Pipeline dédié au seeding DB, déclenché uniquement manuellement.
Retire le step seed du pipeline principal.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 01:57:37 +01:00
Yvv and Claude Sonnet 4.6
1842303c3b
ci: step seed manuel (event: manual)
...
Déclenche python seed.py dans le container backend via docker exec.
Uniquement sur event: manual — ne s'exécute pas sur les push normaux.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 01:56:14 +01:00
Yvv and Claude Sonnet 4.6
798b3a83d4
Domaine : libredecision.org → decision.librodrome.org partout
...
- docker-compose.yml : labels Traefik + CORS_ORIGINS + NUXT_PUBLIC_API_BASE
- docs/deployment.md : toutes les URLs et exemples curl
- CLAUDE.md : référence domaine
- .env.example : DOMAIN + noms DB/USER glibredecision → libredecision
- package-lock.json : name glibredecision → libredecision
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 01:42:33 +01:00
Yvv and Claude Sonnet 4.6
a8dc0dfb40
Typo Plus Jakarta Sans + renommage libreDecision + mode démo prod + seed mandats
...
- Fonte : Nunito → Plus Jakarta Sans (moderne, ronde sans être toy)
- Logo : ğ(Decision) → libreDecision (libre italic/muted + Decision bold)
- Footer et watermark DocumentPreview mis à jour
- Mode démo : DEMO_MODE flag dans config.py + auth.py (profils rapides en prod)
- docker-compose : ENVIRONMENT=production explicite + DEMO_MODE=true par défaut
- Seed : +décision Licence G1 v0.4.0, +3 mandats (ComTech, Admin Forgerons, Modération)
runner 7→10 étapes, import Mandate/MandateStep ajouté
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 01:42:22 +01:00
Yvv and Claude Sonnet 4.6
feaf4de7e0
Menu : Boîte à outils en premier + sidebar collapsible icônes
...
- Boîte à outils (/tools) en 1ère position dans la nav (desktop + mobile)
- Sidebar desktop repliable (toggle pictos-only, 14rem → 3.75rem)
- labels masqués par transition CSS fluide (max-width + opacity)
- état persisté en localStorage (libred-sidebar-collapsed)
- Page document : toggle Vue structurée / Aperçu document
- sous-toggle En vigueur / Selon les votes
- composant DocumentPreview (rendu PDF-like)
- filigrane discret, items ordonnés par sort_order
- mode projection : proposed_text substitu + encadrement orange
- footer horodaté, print-friendly
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 01:41:37 +01:00
syoul and Claude Sonnet 4.6
73c5bf148c
ci: remplace Traefik par Fabio/Consul (pattern sonic)
...
- docker-compose.yml : labels SERVICE_* Registrator, réseau sonic external,
container_name explicite, name COMPOSE_PROJECT_NAME
- pipeline : APP_DOMAIN (au lieu de DOMAIN), ACME sonic-acme-1 pour TLS,
test-deploy sans suffixe -1 (container_name fixe)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-23 15:25:06 +01:00
syoul and Claude Sonnet 4.6
6509137892
fix: sync package-lock.json avec package.json
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-23 15:02:47 +01:00
syoul and Claude Sonnet 4.6
488114791c
ci: build local sans registry, pattern sejeteralo
...
- Suppression write-docker-creds et secrets docker_registry/username/password
- build-backend/frontend : docker build local sur sonic (docker.sock)
- sbom-generate : scan des images locales via docker.sock
- docker-compose.yml : ajout image: libredecision-{backend,frontend}:latest
- deploy : suppression docker compose pull (images locales)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-23 14:59:42 +01:00
syoul and Claude Sonnet 4.6
3e702fdbf3
ci: remplace plugin-docker-buildx par docker:27-cli + socket
...
Evite le mode privileged (non supporté par YunoHost Woodpecker).
Pattern: write-docker-creds (from_secret) → docker-backend/frontend (volumes).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-23 14:41:32 +01:00
syoul
e24c2a65a0
launch pipeline
2026-03-23 14:32:04 +01:00
syoul and Claude Sonnet 4.6
53fc9927ef
ci: refonte pipeline selon bonnes pratiques sonic
...
- Format when/steps migré vers liste Woodpecker next
- Séparation from_secret / volumes (bug Woodpecker)
- Ajout security-check, SBOM (syft+trivy+dtrack), write-env,
test-env, test-deploy, healthcheck, notify-failure
- Deploy SSH → volumes Docker (docker.sock + /opt/libredecision)
- privileged: true sur les steps docker-buildx
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-23 14:25:24 +01:00
syoul
a9599ba32a
ci: refonte pipeline selon bonnes pratiques sonic
2026-03-23 14:24:16 +01:00