# libreDecision Boîte à outils de gouvernance collective pour la communauté Duniter/G1. Documents modulaires sous vote permanent + protocoles de vote + mandats. Architecture marque blanche — vocation à être intégré dans sweethomeCloud et librodrome. ## Protocole de début de session 1. `git pull --rebase origin main` 2. Si des migrations DB sont attendues : `cd backend && alembic upgrade head` 3. Si l'objectif de la session n'est pas précisé, le demander ## Stack - **Frontend** : Nuxt 4 (Vue 3, TypeScript) + Nuxt UI v3 + Pinia + UnoCSS ; package manager : npm - **Backend** : Python FastAPI + SQLAlchemy 2.0 async + PostgreSQL asyncpg ; migrations Alembic - **Auth** : Duniter V2 Ed25519 challenge-response (substrate-interface — stub en dev) - **Sanctuaire** : IPFS kubo + hash on-chain (system.remark) — TODO sprint 2 - Déploiement : Docker multi-stage + Traefik (postgres + backend + frontend + ipfs) ; CI Woodpecker ## Structure ``` frontend/ app/ components/ # composants Vue layouts/ # layouts Nuxt pages/ # routing file-based (9 pages sprint 1) composables/ # (1 composable sprint 1) stores/ # 5 Pinia stores (auth, ...) assets/css/ moods.css # système de palettes (.mood-* sur ) utils/ # (2 utils sprint 1) nuxt.config.ts # port 3002, host 0.0.0.0, apiBase via NUXT_PUBLIC_API_BASE backend/ app/ routers/ # 8 routers : auth, communes, documents, protocols, votes, ... services/ # 6 services engine/ # 5 modules : formule inertie, critères Smith/TechComm, médiane models/ # 14 tables SQLAlchemy alembic/versions/ # migrations tests/ # 186 tests (63 intégration TDD sprint 1) seed.py # Engagement Certification (33 items) + Forgeron (51 items) + Runtime Upgrade docker/ docker-compose.yml # postgres + backend + frontend + ipfs backend.Dockerfile frontend.Dockerfile docs/content/ # 7 docs dev + 8 docs user public/ hexagram-tsing.svg # sceau 井 (embossed) hexagram-tsing-flat.svg ``` ## Données runtime - **postgres-data** : volume Docker PostgreSQL — jamais écrasé par les builds - **ipfs-data** : volume Docker IPFS kubo - `.env` à la racine : `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB`, `SECRET_KEY`, `DOMAIN`, `DUNITER_RPC_URL` ## Commandes ```bash # Backend cd backend && . venv/bin/activate uvicorn app.main:app --port 8002 --host 0.0.0.0 --reload pytest tests/ -v alembic upgrade head python seed.py # reseed Engagement Certification + Forgeron + Runtime Upgrade # Frontend cd frontend && npm run dev # :3002 npm run build # Docker docker compose -f docker/docker-compose.yml up ``` ## Conventions / pièges - **UI français, code anglais** (variables, commentaires, docstrings) - **API** : préfixe `/api/v1/`, Pydantic v2 pour tous les schémas, async partout (SQLAlchemy + FastAPI) - **Auth** : `get_current_admin` (24h), `get_current_citizen` (4h), `require_super_admin` - **Formule inertie** : `Result = C + B^W + (M + (1-M) × (1 - (T/W)^G)) × max(0, T-C)` — voir `backend/app/engine/` - **Mood system** : `useMood.ts` synchronise `colorMode.preference` avec la palette — **jamais** de `:global()` dans `