documentation
Kohinos v3 Doc générée le commit 8d60b1904

ADR — Architecture Decision Records

Un ADR (Architecture Decision Record) fige une décision technique structurante : son contexte, les options examinées, la décision retenue et ses conséquences. Sur Kohinos, un ADR est daté, irréversible (ou réversible avec un coût explicite), et engage tous les contributeurs suivants. Le format est emprunté à Michael Nygard : court, factuel, sans enrobage marketing.

Quand écrire un ADR ?

Si tu hésites entre deux approches et que la décision sera durable (changer d'avis dans 6 mois coûterait une migration, une bdd, un train de tests, ou casserait un contrat externe) : écris un ADR. Si la décision est locale à une classe et triviale à inverser, un commentaire ou un commit suffit.

Format ADR Kohinos

Inspiré de Joel Parker Henderson. Chaque ADR vit dans docs/adr/NNNN-titre-kebab.md, numéro sur 4 chiffres (ADR-0001, ADR-0002…). Structure :

SectionContenu attendu
TitleVerbe + sujet, à l'impératif : « Utiliser libsodium pour les signatures ».
DateYYYY-MM-DD du jour de décision (pas d'écriture rétrospective sans le mentionner).
StatusProposed · Accepted · Deprecated · Superseded by ADR-XXXX.
DecidersPersonnes ou rôles ayant tranché (ex. : trésorier, dev solo, mainteneur).
ContextPourquoi le problème se pose maintenant. Contraintes (techniques, légales, économiques).
DecisionUne phrase à l'impératif. Pas de « on pourrait ».
ConsequencesPositives, négatives, neutres. Ce que cette décision ferme.
AlternativesOptions écartées + raison du rejet (1 ligne par option).
RelatedLiens vers ADRs voisins, issues, PR, RFC.

Liste des ADRs Kohinos

Les ADRs ci-dessous sont soit déjà rédigés dans docs/adr/, soit implicites (figés dans .claude/rules/global.md, CLAUDE.md, CHANGELOG.md) et en attente de formalisation. Le statut indique l'état actuel. Chaque titre ci-dessous est cliquable vers une page détaillée.

ADR-0001 — AGPL-3.0 non négociable

ADR-0002 — Pas de SaaS cloud dans le path critique (souveraineté)

ADR-0003 — libsodium pour toute signature financière

ADR-0004 — Doctrine attributes uniquement (pas d'annotations docblock)

ADR-0005 — Twig + Bootstrap + Vanilla JS (pas de SPA)

ADR-0006 — Auto-hébergement Raspberry Pi friendly (low-tech)

ADR-0007 — MariaDB en prod, SQLite in-memory en test

ADR-0008 — Symfony 7.2 → 7.4 LTS comme cible

ADR-0009 — Doctrine ORM 2.14 / DBAL 3.x (pas DBAL 4.x)

ADR-0010 — Sonata Admin 4.x (post-migration SF7)

ADR-0011 — API Platform 3.x — auth par API key header (pas JWT)

ADR-0012 — Webhooks HelloAsso : idempotence via helloassoid

ADR-0013 — UMR SEPA format KOHINOS-YYYYMMDD-XXXXXXXX

ADR-0014 — SSA detection via flux.solidoume_parameter_id IS NOT NULL

ADR-0015 — Atomicité via PESSIMISTIC_WRITE + Operation atomique

ADR-0016 — MCP local-only

ADR-0017 — Pas de mock DB pour les tests financiers

ADR-0018 — bcmath / brick/math pour le calcul monétaire

ADRs proposés / à formaliser

Décisions actuellement implicites (dans les règles dures, CHANGELOG, ou commits) mais qui méritent un ADR dédié. Statut Proposed.

Comment ajouter un ADR

  1. Identifier le prochain numéro disponible dans docs/adr/ (ex. : 0019).
  2. Créer le fichier docs/adr/0019-titre-en-kebab.md en copiant le template du README.md du dossier.
  3. Remplir toutes les sections — pas de TODO, pas de TBD. Si tu ne peux pas remplir, ne crée pas encore l'ADR.
  4. Mettre à jour le tableau récapitulatif dans docs/adr/README.md.
  5. Ajouter une ligne dans docs/INDEX.md section ADR (avec pictogramme 🟢).
  6. Mentionner l'ADR dans CHANGELOG.md (section technique) — pas dans CHANGELOG_USER.md (les ADRs sont invisibles aux utilisateurs).
  7. Lier l'ADR depuis chaque page technique impactée (ex. : ADR-0014 lié depuis ssa.html).
  8. Si l'ADR remplace un précédent, marquer l'ancien Superseded by ADR-XXXX sans le supprimer (l'historique reste lisible).

ADRs superseded

Décisions remplacées — ne pas appliquer telles quelles
  • ADR pré-2025 « Symfony 4.4 » — superseded par ADR-0008 (Symfony 7.2 → 7.4). La migration est achevée (cf. docs/migration/RAPPORT_MIGRATION_SF74.md).
  • Ancien ADR-0010 « Symfony 6.4 / PHP 8.1+ » — superseded par ADR-0008. Le code cible PHP 8.4 (min 8.2).
  • Ancien « annotations docblock Doctrine » — superseded par ADR-0004. Mapping type: attribute obligatoire ; les anciens docblocks ne sont plus lus.
  • Ancien « SwiftMailer » — retiré, remplacé par symfony/mailer. Pas d'ADR formel mais traçable dans CHANGELOG.md 2025-04.

Lecture croisée

Pages techniques où les ADRs se matérialisent
  • cryptographie — concrétise ADR-0003, ADR-0015, ADR-0021, ADR-0022.
  • invariants — vérifie ADR-0001, ADR-0014, ADR-0015, ADR-0018.
  • api — applique ADR-0011, ADR-0002 (souveraineté).
  • webhooks — applique ADR-0012.
  • ssa — applique ADR-0014, ADR-0018.
  • sonata-admin — applique ADR-0010.
  • tests — applique ADR-0007, ADR-0017.
  • conventions — décline ADR-0004, ADR-0005, ADR-0018.

Sources

À consulter
  • docs/adr/README.md — sommaire officiel des ADRs versionnés.
  • docs/adr/0001-double-entry-bookkeeping.md, 0002-sepa-debit-day-constraints.md, 0009-test-driven-development.md — exemples rédigés.
  • .claude/rules/global.md — refus automatiques = ADRs implicites.
  • .claude/rules/mcp-policy.md — concrétise ADR-0016.
  • CHANGELOG.md — date et contexte des décisions techniques majeures.
  • doc/ARCHITECTURE.md — vue d'ensemble, rappelle les patterns d'ADR.
  • docs/migration/RAPPORT_MIGRATION_SF74.md — historique de la migration qui a généré ADR-0004, 0008, 0010.