Skip to content

feat(0.5.3): quatre manques du socle, mesurés sur sept catalogues réels - #322

Merged
stephrobert merged 1 commit into
mainfrom
feat/socle-artefacts-et-verrou
Oct 17, 2026
Merged

stephrobert merged 1 commit into
mainfrom
feat/socle-artefacts-et-verrou

Conversation

@stephrobert

Copy link
Copy Markdown
Owner

Ce que sept catalogues neufs ont montré

Créés le 2026-10-17, ils ont servi de banc d'essai à ce que new catalog produit. Trois défauts se voyaient dans un simple git status, le quatrième dans une comparaison avec les treize dépôts établis.

1. Le .gitignore ne couvrait aucun artefact Python

__pycache__/, .pytest_cache/ et .venv/ apparaissaient en non-suivi dès la première suite de tests : le gabarit ne couvrait que la progression, la clé privée et les répertoires de travail. Un git status encombré est ce qui fait manquer les vrais changements. Six motifs ajoutés.

2. Les hooks d'espaces réécrivaient LICENSE

end-of-file-fixer lui retirait sa ligne finale à chaque passage : sur ces mêmes sept catalogues, git status affichait M LICENSE sans qu'aucun humain y ait touché. Le texte d'une licence se reconnaît au caractère près, et c'est ainsi que GitHub l'identifie.

Le même défaut avait été corrigé dans ce dépôt plus tôt le même jour, pour les licences packagées. Le socle le reproduisait chez ses enfants.

3. Un catalogue neuf ne contrôlait pas son verrou

Les treize dépôts établis portent tous le hook uv lock --check ; le socle n'en produisait aucun. Un verrou qui dérive de son pyproject.toml ne verrouille plus rien, et c'est lui que les scanners de vulnérabilités lisent.

4. Et personne ne disait comment le créer

Le socle ne peut pas produire un verrou : le résoudre demande le réseau. Le hook échoue donc sur un catalogue neuf, et c'est juste, mais il doit dire quoi faire. Il porte sa consigne, et new catalog nomme désormais uv lock comme premier geste, dans les deux langues.

Trois cliquets, et deux façons de les prouver

Par mutation :

mutation effet
le .gitignore reperd les artefacts rouge
LICENSE n'est plus épargnée rouge
le hook du verrou disparaît rouge

Par le comportement, sur un catalogue réellement créé avec cette branche :

après `pytest tests/`            0 fichier non suivi
après les hooks d'espaces        0 fichier modifié, LICENSE intacte
pre-commit run verrou-a-jour     échoue en disant « run `uv lock` »

Un détail d'échappement, signalé par Python lui-même

PRE_COMMIT est une chaîne non brute : le motif files: '^(pyproject\.toml…' y demande \\., sans quoi Python émet un SyntaxWarning sur une séquence d'échappement invalide. C'est la deuxième fois aujourd'hui qu'un niveau d'échappement manque dans ce module, après les accolades du workflow de release ; les deux fois, un outil l'a dit avant tout commit.

Vérifié

pytest tests/                    1614 passed
tests du socle                   22 passed, dont 3 nouveaux
test_i18n_coverage               13 passed
ruff check src/ tests/ scripts/  All checks passed
mypy src/dsoxlab/                97 fichiers, aucune erreur
complexite / code-mort / écran   les trois cliquets verts
new catalog en fr ET en          le message nomme `uv lock` en premier

🤖 Generated with Claude Code

CE QUE SEPT CATALOGUES NEUFS ONT MONTRÉ

Créés le 2026-10-17, ils ont servi de banc d'essai à ce que `new catalog`
produit. Trois défauts se voyaient dans un simple `git status`, et le quatrième
dans une comparaison avec les treize dépôts établis.

1. LE `.gitignore` NE COUVRAIT AUCUN ARTEFACT PYTHON

`__pycache__/`, `.pytest_cache/` et `.venv/` apparaissaient en non-suivi dès la
première suite de tests : le gabarit ne couvrait que la progression, la clé
privée et les répertoires de travail. Un `git status` encombré est ce qui fait
manquer les vrais changements. Six motifs ajoutés.

2. LES HOOKS D'ESPACES RÉÉCRIVAIENT `LICENSE`

`end-of-file-fixer` lui retirait sa ligne finale à chaque passage : sur ces
mêmes sept catalogues, `git status` affichait `M LICENSE` sans qu'aucun humain
y ait touché. Le texte d'une licence se reconnaît au caractère près, et c'est
ainsi que GitHub l'identifie.

Le même défaut avait été corrigé dans ce dépôt plus tôt le même jour, pour les
licences packagées. Le socle le reproduisait chez ses enfants.

3. UN CATALOGUE NEUF NE CONTRÔLAIT PAS SON VERROU

Les treize dépôts établis portent tous le hook `uv lock --check` ; le socle n'en
produisait aucun. Un verrou qui dérive de son `pyproject.toml` ne verrouille
plus rien, et c'est lui que les scanners de vulnérabilités lisent.

4. ET PERSONNE NE DISAIT COMMENT LE CRÉER

Le socle ne peut pas produire un verrou : le résoudre demande le réseau. Le
hook échoue donc sur un catalogue neuf, et c'est juste, mais il doit dire quoi
faire. Il porte sa consigne, et `new catalog` nomme désormais `uv lock` comme
PREMIER geste, dans les deux langues.

TROIS CLIQUETS, ET DEUX FAÇONS DE LES PROUVER

`tests/test_socle_du_catalogue.py` vérifie que le `.gitignore` couvre les
artefacts, qu'aucun hook d'espaces ne touche `LICENSE`, et que le verrou est
contrôlé au commit avec sa consigne énoncée.

Par mutation :

    le .gitignore reperd les artefacts   → rouge
    LICENSE n'est plus épargnée          → rouge
    le hook du verrou disparaît          → rouge

Et par le comportement, sur un catalogue réellement créé avec cette branche :

    après `pytest tests/`                0 fichier non suivi
    après les hooks d'espaces            0 fichier modifié, LICENSE intacte
    `pre-commit run verrou-a-jour`       échoue en disant « run `uv lock` »

UN DÉTAIL D'ÉCHAPPEMENT, SIGNALÉ PAR PYTHON LUI-MÊME

`PRE_COMMIT` est une chaîne non brute : le motif `files: '^(pyproject\.toml…'`
y demande `\\.`, sans quoi Python émet un SyntaxWarning sur une séquence
d'échappement invalide. C'est la deuxième fois aujourd'hui qu'un niveau
d'échappement manque dans ce module, après les accolades du workflow de
release ; les deux fois, un outil l'a dit avant tout commit.

VÉRIFIÉ

    pytest tests/                    1614 passed
    tests du socle                   22 passed, dont 3 nouveaux
    test_i18n_coverage               13 passed
    ruff check src/ tests/ scripts/  All checks passed
    mypy src/dsoxlab/                97 fichiers, aucune erreur
    complexite / code-mort / écran   les trois cliquets verts
    new catalog en fr ET en          le message nomme `uv lock` en premier

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@stephrobert
stephrobert merged commit 2cb840b into main Oct 17, 2026
20 checks passed
@stephrobert
stephrobert deleted the feat/socle-artefacts-et-verrou branch October 17, 2026 14:18
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