CONSTRUCTION / JOURNAL
Ce que j’ai construit,
commit par commit.
Un message de commit ne prouve rien à qui n’est pas dans le code. Un titre écrit librement ne prouve rien non plus. Ce journal fait la seule chose honnête entre les deux : il regroupe des commits réels sous des titres relus, et il garde la matière brute à un clic.
dépôts réellement lus sur 8 suivis. Les autres sont nommés plus bas.
Lire les décisions ↗La vue lisible regroupe les commits par chantier, avec un titre écrit et relu. La vue brute donne les messages de commit tels quels. Je ne vous demande pas de me croire sur le premier : le second est à un clic.
- Contributions
- 36
- Dépôts actifs
- 1 / 8 suivis
- Régularité
- 9 / 65 jours
Journal public des dépôts, filtrage du bruit appliqué.
Dépôts ayant au moins une contribution sur la période lue.
Jours portant au moins une contribution, sur l’étendue observée.
Il n’y a volontairement ici ni fréquence de déploiement, ni délai de mise en production, ni taux d’échec, ni temps de rétablissement. Ce dépôt n’a pas d’intégration continue : ces valeurs ne sont pas mesurées, et les afficher reviendrait à les inventer.
Regles Gemini : garde-fous de couts et exclusions de lecture [skip ci]
1 commitPlanification : les taches quotidiennes partent a heure fixe [skip ci]
1 commitSante des sources : les textes d'un meme passage comptent pour une arrivee [skip ci]
1 commitEUR-Lex : concepts EuroVoc relus sur le thesaurus, textes fondateurs demandes par CELEX [skip ci]
1 commitSante des sources : une source ecartee est dite ecartee sur les surfaces publiques
1 commitRole de lecture publique : le script passe sur Supabase, ou postgres n'est pas superutilisateur
1 commitMCP public : initialize, tools/list et ping repondent sans base, tools/call dit que le serveur n'est pas ouvert
1 commitRègles Gemini du projet
1 commitVerrous : les detecteurs de tirets longs ne contiennent plus le caractere qu'ils cherchent
1 commitEcheances : la fin d'un appel a reponses n'est plus proposee comme echeance de conformite
1 commitCollecte EFRAG : le pare-feu coupe les faux Chrome, la collecte se nomme
1 commitPied de page : liens vers les tarifs, la vision et le programme partenaire du hub STRATA
1 commitDeploiement : construction distante par defaut, et tri des lignes du comparatif sans droit backend
1 commitSocle graphique : jetons, anneau de focus, contrastes, etats d'ecran, comparatif complet, verrous de verification
1 commitRevue : relire la proposition avec son texte apres commit, et rendre le 500 sous la couche CORS
1 commitPerimetre de collecte : une source qu'on ne peut plus interroger sort, nommee et motivee
1 commitLegifrance : une source sans identifiants n'est plus presentee comme saine
1 commitCollecte : le BOFiP interrogeait l'API avec une date invalide, et le fonds initial n'etait pas constituable
1 commitBalayages : le .gitignore decide de ce que le balayage lit
1 commitDebloque le deploiement Vercel et etend le balayage des tirets aux SVG
1 commitCouvertures geographiques, navigation de la console, espace d'administration interne
1 commitLe noyau reglementaire, vagues VW1 a VW8 et refonte de l'echelle des paliers
1 commitL'organisation est lue aussi dans la forme abregee des jetons Clerk v2, et l'API expose le commit deploye
1 commitLes verifications recoivent des noms de parametres et non des valeurs positionnelles
1 commitLa console exige un espace de travail et cesse de rejouer les refus
1 commitListe d'exclusion a la racine pour l'envoi des sources a Vercel
1 commitLe front se construit sur un dossier propre, avec un repli sur la construction distante
1 commitLe deploiement backend s'appuie sur GitHub, et la cle publique Clerk est verifiee avant le build
1 commitTests de fumee joues contre le site en ligne et non contre un build a cles factices
1 commitAPI servie par le domaine Railway tant que le certificat de api.watch est bloque
1 commitLe tableau de bord ne renvoie plus un 404 au visiteur non connecte
1 commitMise a jour du document d'exploitation: etat au 28 aout, nouvelle cible DNS, expediteur des courriels
1 commitControle des variables par resolution DNS plutot que par liste de mots
1 commitGarde-fou de configuration au demarrage, script de composition des URL, correction de la lecture des .env
1 commitPhase 9: production, base partagee scope, deploiement PowerShell, refonte DA console
1 commitPhase 8: qualite, observabilite, securite, RGPD
1 commit
Ce que ce journal ne montre pas
Les 8 dépôts suivis ont tous répondu, et la liste vient du registre.
Les huit dépôts du groupe vivent sur deux propriétaires. Un jeton de lecture à portée fine n’en couvre qu’un seul, donc sept entrées sur huit au mieux. Le seul jeton qui couvrirait les huit donnerait aussi l’écriture, et ce n’est pas un compromis que je fais pour un feed.
FRISE D’INGÉNIERIE
12 décisions, et ce qu’elles ont coûté.
Le journal ci-dessus dit ce que j’ai fait. Cette frise dit pourquoi le système a cette forme. 3 d’entre elles sont des revirements : j’avais tranché dans un sens, et j’ai changé d’avis en payant le retrait.
- LIVRAISON
La robustesse déjà présente devient visible
Matrice de santé par capacité, huit modes de panne rejouables par une commande, frontières de données explicites, dix contrôles d’intégrité calculés.
Trace
apps/web/lib/health/, scripts/failure-drill.mjs, scripts/integrity.mjs - LIVRAISON
La provenance devient inséparable de la valeur
Aucun composant n’accepte plus un nombre nu. Il accepte une affirmation qui porte sa source, sa méthode et sa date. Le registre des preuves ouvre.
Trace
apps/web/lib/proof/, migrations 0003 et 0004 - DÉCISION
Échouer explicitement plutôt que répondre sans source
L’assistant refuse de produire une réponse quand la recherche documentaire ne rend rien. Soixante-six lignes, et le comportement le plus important du site.
Trace
commit 3d10bef, apps/web/app/api/chat/route.ts - LIVRAISON
Mise en ligne, migrations jouées, écosystème connecté
Domaine branché, base migrée, registre semé, passerelles de santé actives vers les produits, mentions légales écrites depuis ce que le code fait.
Trace
migrations 0001 et 0002, apps/web/lib/ecosystem/gateways.ts - DÉCISION
Nommer la nature d’une panne plutôt que l’afficher comme une absence
Une panne d’un produit et une panne de la sortie réseau de ce site cessent de se ressembler. Chaque tentative de sonde porte sa nature d’échec.
Trace
table ecosystem_probes, migration 0003_data_class.sql - REVIREMENT
Retrait du repli chiffré
Plus aucune valeur de remplacement. Une source qui ne répond pas produit une absence qui se nomme, et un test refuse désormais tout repli.
Trace
commit 21e483b, verrouillé par tests/layer-d.test.tsx - DÉCISION
Registre de produits en base plutôt qu’en dur
La liste des produits et de leurs dépôts quitte le code pour la base. Ajouter un produit cesse d’être un déploiement.
Trace
commit 24eb785, table ecosystem_products - REVIREMENT
Cockpit d’un ensemble plutôt que vitrine d’un produit
Le site cesse de vendre un produit et se met à lire l’ensemble du groupe. Registre de produits, divisions, sorties tracées.
Trace
commits c881705 et 4116d14 - REVIREMENT
Le moteur de calcul quitte le cockpit
Neuf cent une lignes de calcul ESG et de tests retirées d’un site dont ce n’est pas le métier. Le calcul appartient au produit, pas à la vitrine.
Trace
commit 56d1f7c, 901 lignes retirées sur 1 182 - DÉCISION
Un repli chiffré plutôt qu’une case vide
Position initiale : quand une source ne répond pas, afficher une valeur plausible pour ne pas laisser de trou dans l’interface.
Trace
position remplacée le 12 août 2026 - DÉCISION
Architecture initiale du dépôt
Monorépo, une application web, des paquets partagés, une base unique. Les moteurs de calcul restent en dehors, dans les produits qui les portent.
Trace
turbo.json, pnpm-workspace.yaml, packages/ - DÉCISION
Récupération documentaire plutôt que réentraînement
L’assistant cite des passages retrouvés dans un corpus au lieu d’avoir appris le contenu. Une réponse devient vérifiable, et une source manquante devient un refus.
Trace
apps/web/lib/ai/retrieval.ts, migration 0000_init.sql
LE RAISONNEMENT COMPLET
Chaque décision, avec ses options.
Le journal d’architecture donne pour chaque décision les options écartées, le compromis accepté et son degré de réversibilité.