- docker/app.Dockerfile : une image Rust + Svelte, la construction rejoue toute la boucle (fmt, clippy -D warnings, tests, svelte-check, vitest) ; utilisateur non-root, volume /data. docker/app-compose.yml pour sonic (fabio). - .woodpecker/app.yml : produit sur decision.librodrome.org, attend la maquette, écarte tout conteneur qui revendique encore la racine, healthcheck du commit. - .woodpecker/maquette.yml (ex .woodpecker.yml) : la maquette v2 telle quelle, sur maquette.decision.librodrome.org, mêmes volumes. - .env.example de la maquette rangé dans maquette/ ; celui de la v3 à la racine. - Docs : README, CONTRIBUTING (travail à deux), CLAUDE.md v3, HANDOFF, docs/chantiers (feuille de route, fiche, contrôles, onboarding de Chiara, demande à poka), docs/adr 0001–0006. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.3 KiB
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/<sujet>, yvv/<sujet> = une branche courte par sujet, partie de la branche du chantier.
git switch chantier/acte-certification && git pull --rebase origin chantier/acte-certificationgit switch -c chiara/<sujet>— un sujet, une branche, quelques commits.- Boucle verte (ci-dessous), puis push de la branche et demande de fusion vers
chantier/acte-certificationsur la forge (git.open.us.org/yvv/decision). - Le chantier passe dans
mainquand 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
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–C10 (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), puisen.tsetes.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-enginen'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/, volumelpk-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 addavec 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.