Skip to content

Un profil projet, pour qu'une machine vérifie à ma place - #2

Merged
pymenvert merged 2 commits into
mainfrom
chore/adopter-flow
Aug 17, 2026
Merged

Un profil projet, pour qu'une machine vérifie à ma place#2
pymenvert merged 2 commits into
mainfrom
chore/adopter-flow

Conversation

@pymenvert

@pymenvert pymenvert commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Objectif

Donner aux commandes /flow:* un contrat lisible pour savoir quoi lancer sur ce
dépôt. Sans lui elles devinent — et une commande devinée, jamais exécutée, fait
déclarer « vert » un travail que personne n'a vérifié.

Pas de spec : chantier d'outillage, lancé par /flow:init-project.

Changements

  1. Bloc « Profil projet » en tête de CLAUDE.md — type, stack, commandes,
    modules critiques, règle git, et où écrire specs et décisions. Chaque commande
    listée a été lancée sur cette machine et rend 0.
  2. Le compte de tests ne peut plus mentir — il était recopié à la main dans
    le badge du README et dans la consigne « vérifier le compte (N) », et il est
    resté à 328 pendant que la suite en rendait 335. La CI lit désormais le vrai
    compte dans la sortie de la suite et refuse l'écart (tools/verifie-compte-tests.js).
  3. .gitignore : secrets et clés privées (préventif) · docs/specs/ et
    docs/decisions/
    avec leur README, l'« Historique des décisions » de
    docs/ETAT-DU-PROJET.md étant déclaré clos et renvoyant vers eux.

Vérifications réellement effectuées

Check Commande lancée État
format non configuré
lint non configuré
typecheck non configuré
tests npm test ✅ 341/341, 0 ignoré, sortie 0
build node sync-dist.js --check ✅ sortie 0
compte annoncé node tools/verifie-compte-tests.js ✅ sortie 0
revue agents code-reviewer + architect 3 bloquants trouvés, 3 corrigés
CI tests + powershell sur 87d3b82 success, vérifié sur le SHA

Deux défauts attrapés par la vérification, pas par moi.

  • Le premier jet du profil annonçait npm run sync-dist comme un contrôle. Sans
    --check, ce script écrase dist/ avec l'état courant des sources : une
    commande future l'aurait lancé en croyant vérifier, et aurait poussé un travail
    en cours dans le distribuable — contre la règle n°1, dans le bloc censé la
    documenter.
  • Le vérificateur de compte a mordu à son premier essai : le badge annonçait 335,
    la suite en rendait déjà 341 à cause des six tests ajoutés ici même.

Deux précautions prises, parce que ce dépôt a déjà payé les deux : set -o pipefail
avant le tee (sans lui, le code de sortie serait celui de tee, toujours 0, et
une suite rouge passerait pour verte), et un témoin positif — les tests
vérifient que le vérificateur sait dire NON sur une sortie tronquée, un rapporteur
inconnu ou un badge trafiqué.

Risques et surveillance

  • node build.js n'a pas été lancé (250 Mo de téléchargement) : les
    exécutables ne sont pas reconstruits, et rien ici ne le prétend.
  • /security-review n'a pas été lancé : le diff ne contient presque aucun
    code exécutable, et rien qui touche aux entrées réseau, aux fichiers du serveur
    ou aux permissions. Vérifications faites à la place — aucun fichier suivi ne
    devient ignoré, aucun jeton dans le diff indexé.
  • La nouvelle étape CI dépend du format de sortie de node --test. Les deux
    formes connues sont acceptées (ℹ tests N et # tests N) ; si une version
    future en invente une troisième, l'étape deviendra rouge, pas silencieuse.
    C'est le comportement voulu.
  • Reste ouvert : trancher dans docs/specs/README.md le sort des gros
    documents façon PLAN-V2.md pour le prochain chantier de cette taille.

🤖 Generated with Claude Code

pymenvert and others added 2 commits August 17, 2026 10:10
Les commandes /flow:* ont besoin d'un contrat pour savoir quoi lancer ici. Sans
lui elles devinent, et une commande devinée qui n'a jamais tourné fait déclarer
« vert » un travail que personne n'a vérifié. D'où le bloc « Profil projet » en
tête de CLAUDE.md : chaque commande qui y figure a été lancée et rend bien 0.

Le premier jet de ce bloc annonçait `npm run sync-dist` comme un contrôle. Il
ne l'est pas : sans `--check`, le script ÉCRASE dist/ avec l'état courant des
sources. Un travail en cours serait parti dans le distribuable sous couvert de
vérification — contre la règle n°1 que ce bloc prétend documenter. C'est
`--check` qui vérifie ; le profil le dit maintenant, avertissement compris.

Le compte de tests était resté à 328 à deux endroits vivants alors que la suite
en rend 335 : le badge du README, première chose que voit un visiteur, et la
consigne « vérifier le compte (328) » qui sert justement à repérer des tests
d'interface ignorés en silence. Les mentions datées de la campagne du
2026-08-05 gardent leur 328 : elles racontent ce qui était vrai ce jour-là. Et
le chiffre ne vit plus qu'à un seul endroit, pour ne plus se contredire.

.gitignore n'excluait ni .env ni les clés privées ; aucun fichier de ce type
n'existe dans le dépôt, l'ajout est préventif.

docs/specs/ et docs/decisions/ ouvrent la place de /flow:spec et /flow:design,
et CLAUDE.md y renvoie. Sans ce renvoi ils seraient restés vides : PLAN-V2.md
s'était déclaré « document historique » et a reçu une section de décision
entière deux jours plus tard, faute d'un autre endroit désigné.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Corriger 328 en 335 à la main, c'était refaire le geste qui avait produit
l'erreur. Le nombre est recopié dans le badge du README — première chose que
voit un visiteur — et dans la consigne du CLAUDE.md qui sert justement à
repérer des tests d'interface ignorés en silence : un repère de comptage faux
ne signale plus rien. La CI lit maintenant le vrai compte dans la sortie de la
suite qu'elle vient de lancer, et refuse l'écart.

Le vérificateur a mordu à son premier essai : il annonçait 335, la suite en
rendait déjà 341 à cause des six tests ajoutés ici même.

Deux précautions, prises parce que ce dépôt a déjà payé les deux :

- `set -o pipefail` avant le `tee`. Le shell d'Actions ne l'active pas : sans
  lui, le code de sortie retenu serait celui de `tee`, toujours 0, et une suite
  ROUGE passerait pour verte.
- Un témoin positif, comme pour l'analyse de SYSTRAY_PS1 : les tests vérifient
  que le vérificateur sait dire NON — sortie tronquée, rapporteur inconnu,
  badge trafiqué. Un check qu'on n'a jamais vu refuser quoi que ce soit est
  décoratif.

Les deux formes de sortie de `node --test` sont acceptées (« ℹ tests N » et
« # tests N ») : Node choisit selon que la sortie part sur un terminal ou dans
un fichier, et ce choix a déjà changé d'une version à l'autre.

L'« Historique des décisions » de docs/ETAT-DU-PROJET.md est déclaré clos, et
renvoie vers docs/decisions/. Sans ça, la prochaine décision serait partie à
l'ancienne adresse — c'est arrivé à PLAN-V2.md, qui s'était déclaré historique
et a reçu une section entière deux jours plus tard.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@pymenvert
pymenvert merged commit b75f66a into main Aug 17, 2026
2 checks passed
@pymenvert
pymenvert deleted the chore/adopter-flow branch August 17, 2026 08:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant