# Contribuer à libreDecision On travaille **un chantier à la fois**, livré complet et en production avant le suivant (`docs/chantiers/README.md`). Le chantier en cours a sa fiche : `docs/chantiers/acte-certification/CHANTIER.md` — toute décision de comportement s'y adosse, ou propose de l'amender, argumentée. Première fois ? Commence par `docs/chantiers/acte-certification/ONBOARDING.md`. ## Les branches — travailler à deux ``` main = la production. Tout push sur prod/main déploie decision.librodrome.org. chantier/acte-certification = la branche commune du binôme (Yvv · Chiara), toujours verte. chiara/, yvv/ = une branche courte par sujet, partie de la branche du chantier. ``` 1. `git switch chantier/acte-certification && git pull --rebase origin chantier/acte-certification` 2. `git switch -c chiara/` — un sujet, une branche, quelques commits. 3. Boucle verte (ci-dessous), puis push de la branche et demande de fusion vers `chantier/acte-certification` sur la forge (`git.open.us.org/yvv/decision`). 4. Le chantier passe dans `main` quand la boucle est verte et les contrôles d'usage passés. On ne pousse jamais directement sur `main`, et jamais de `--force` sur une branche partagée. ## La boucle — une tâche n'est faite que si tout est vert ```bash export PATH=$HOME/.cargo/bin:$PATH cargo fmt --all --check cargo clippy --workspace --all-targets -- -D warnings cargo test --workspace cd web npm run check # svelte-check, zéro avertissement npm test # vitest : markdown, parité des catalogues i18n, anti-lexique npm run build npm run e2e # Playwright : C1–C11 (bureau) + M1 (mobile), serveur jetable sur :8092 ``` L'image Docker rejoue les mêmes portes : un contrôle rouge, pas d'image, pas de déploiement. ## Conventions - **Interface en français, code en anglais** (identifiants, commentaires, messages de log). - **Trilingue dès le départ** : toute chaîne affichée vit dans `web/src/lib/i18n/fr.ts` (la source), puis `en.ts` et `es.ts`. Le test de parité refuse une clé manquante ou un paramètre `{x}` qui diffère. Le texte voté est le français ; les traductions sont éditoriales. - **Ton** : tutoyer la personne ; le sujet est la personne ou le collectif, jamais le système. Mots interdits à l'écran (`FORBIDDEN_UI_TERMS`) : « triage », « verdict », « déléguer »… - **Moteur pur** : `crates/ld-engine` n'a ni I/O, ni base, ni réseau. Toute règle de vote, d'édition ou de composition s'y écrit et s'y teste d'abord. - **Accès** : le serveur ne décide jamais seul qui voit quoi — il demande à `trustin-access`. - **Données runtime** (`data/`, volume `lpk-libredecision-app_data`) : jamais écrasées, jamais réinitialisées ; une migration ajoute, elle ne réécrit pas. - **Design** : sans bordures (profondeur par fond et ombre), arrondis 16 / 12 / 20 / 14 px, deux ambiances (pierre, nuit), Literata pour les textes, Nunito pour l'interface. - **Commits** : en français, une intention par commit, `git add` avec chemins explicites. ## Signaler **« Faire un retour »** (dans le menu de gauche, sur chaque page) envoie une note datée avec la page, la langue et la taille de l'écran ; elles se lisent dans trustinWallet (`/acces`). Pour un bug reproductible, une issue sur la forge avec les étapes.