.dockerignore
0 → 100644
+15
−0
.env.example
0 → 100644
+29
−0
.gitignore
0 → 100644
+9
−0
README.md
0 → 100644
+125
−0
apps/api/package.json
0 → 100644
+23
−0
Loading
Première pierre du cockpit de gestion de crise. Le lot L0 pose le socle et le
lot L1 le noyau de persistance — la pièce qui ne se rattrape pas après coup.
Noyau de persistance (L1)
Toute mutation de l'état d'une crise passe par enregistrer(), qui inscrit un
événement puis projette, dans la même transaction. La garantie n'est pas
déclarative : PostgreSQL attribue la séquence, l'horodatage et l'empreinte
chaînée, et refuse par déclencheur toute modification, suppression ou
troncature de la table des événements — y compris au propriétaire de la base.
La main courante est une vue sur le journal, pas une table : consigner, c'est
écrire un événement d'un type particulier. Le code ne peut pas diverger.
etatALaSeq() reconstitue par rejeu l'état d'une crise à n'importe quel
instant. Chaque module ajouté devra fournir sa lecture à date : c'est un
critère de recette, pas une intention.
L'export transporte la forme canonique de chaque charge telle que Postgres
l'a hachée, pour qu'un vérificateur tiers contrôle la chaîne sans
réimplémenter la normalisation jsonb ni exécuter notre code.
Administration de l'instance (L0)
Un compte root administre organisations, comptes et quotas, mais ne lit pas
le contenu des crises au titre de son statut. Pour cela il ouvre un accès
exceptionnel : motif circonstancié obligatoire, borné à huit heures par une
contrainte du schéma, journalisé au nom de l'organisation concernée. Le
journal d'administration a les mêmes garanties que le journal de crise —
les actes du root sont ceux qu'il ne faut pas pouvoir effacer.
Socle et déploiement (L0)
Monorepo TypeScript, migrations appliquées au démarrage sous verrou,
configuration validée au lancement avec refus des valeurs d'exemple en
production. Dockerfile unique multi-étapes, image de 164 Mo en utilisateur
non privilégié et système de fichiers en lecture seule ; composition
mono-hôte avec sondes de vivacité et de disponibilité.
Vérification
`pnpm verif` applique les migrations, joue une crise complète et contrôle 31
garanties rattachées une à une aux exigences du cahier des charges : refus de
mutation du journal, séquence sans trou, détection d'une charge altérée,
d'une troncature et d'une réorganisation, reconstitution d'un état passé,
rectification sans effacement, bornes du bris de glace.
Pas d'ORM : le schéma porte les garanties, les masquer les rendrait
négociables. Les migrations SQL font autorité.
Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>