docs(auteur): aligner le guide sur 0.1.84, et rendre la dérive détectable (0.1.85) - #205
Merged
Merged
Conversation
…able (0.1.85) docs/catalog-author.md annonçait encore qu'une fixture non déclarée passait en silence — « nothing says so » — douze versions après l'ajout du contrôle qui la signale. Le comportement, le CHANGELOG et le CLAUDE.md avaient suivi la correction ; cette page non, et rien ne pouvait le dire. C'est un drift que j'ai moi-même produit en corrigeant les fixtures : j'ai mis à jour trois surfaces sur quatre. Corriger la phrase ne protège de rien, elle repérimera au prochain contrôle ajouté. Ce commit corrige donc les deux : la section, et l'absence de lien mécanique entre ce que le validateur détecte et ce que la documentation en dit. Le garde-fou : toute clé d'anomalie qu'un validator peut produire doit être citée dans les deux pages auteur, et aucune clé disparue ne peut y rester. Les clés sont lues par AST plutôt que listées à la main — une clé ajoutée doit faire échouer le test, pas attendre qu'un lecteur la remarque. Il ne sait pas lire une phrase, et ne prétend pas juger si le texte autour d'une clé est juste. Il force à ouvrir la page au moment où le comportement change, et c'est ce moment-là qui manquait. Les pages ont gagné la table que cela exigeait : les 25 clés sur lesquelles un auteur peut agir, chacune avec son sens. Elle a une valeur propre — c'est ce qu'un auteur lit dans la sortie du validateur, et rien ne le lui traduisait. Trois clés sont exemptées nommément, avec leur raison : elles dépendent du réseau ou d'un incident de fichier, pas du contrat qu'un auteur écrit. Un test vérifie qu'aucune exemption ne désigne un contrôle disparu. Éprouvé par trois mutations : un contrôle neuf non documenté est nommé, une clé citée mais disparue est nommée, et une lecture des validators cassée fait rougir la suite au lieu de la rendre vide. Une note de méthode, parce qu'elle m'a coûté dix minutes : la clé de mutation faisait exactement la même longueur que l'originale, si bien que le .pyc gardait la même taille et que Python le tenait pour à jour après restauration. Le test échouait sur un code source pourtant correct. Purger __pycache__ après une mutation de même longueur, ou vérifier le comportement plutôt que le fichier. Vérifié : 866 tests dont 5 neufs, 18 e2e, ruff, mypy strict, et test_documentation_synchrone toujours vert. Closes #195 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
docs/catalog-author.mdannonçait encore qu'une fixture non déclarée passait ensilence — « nothing says so » — douze versions après l'ajout du contrôle
qui la signale.
C'est un drift que j'ai moi-même produit en corrigeant les fixtures : j'ai
mis à jour trois surfaces sur quatre — le comportement, le CHANGELOG, le
CLAUDE.md— et pas celle-là.Corriger la phrase ne protège de rien
Elle repérimera au prochain contrôle ajouté. Ce commit corrige donc les deux :
la section, et l'absence de lien mécanique entre ce que le validateur détecte et
ce que la documentation en dit.
Le garde-fou : toute clé d'anomalie qu'un validator peut produire doit être
citée dans les deux pages auteur, et aucune clé disparue ne peut y rester. Les
clés sont lues par AST plutôt que listées à la main — une clé ajoutée doit
faire échouer le test, pas attendre qu'un lecteur la remarque.
Il ne sait pas lire une phrase, et ne prétend pas juger si le texte autour d'une
clé est juste. Il force à ouvrir la page au moment où le comportement change,
et c'est ce moment-là qui manquait.
La table que cela exigeait
Les pages ont gagné les 25 clés sur lesquelles un auteur peut agir, chacune
avec son sens. Elle a une valeur propre : c'est ce qu'un auteur lit dans la
sortie du validateur, et rien ne le lui traduisait.
Trois clés sont exemptées nommément, avec leur raison — elles dépendent du
réseau ou d'un incident de fichier, pas du contrat qu'un auteur écrit. Un test
vérifie qu'aucune exemption ne désigne un contrôle disparu.
Éprouvé par trois mutations
content_piege_tout_neufcontent_broken_linksUne note de méthode
La clé de ma mutation faisait exactement la même longueur que l'originale
(23 caractères). Le
.pycgardait donc la même taille, Python le tenait pour àjour après restauration, et le test échouait sur un code source pourtant
correct. Dix minutes perdues. À retenir : purger
__pycache__après une mutationde même longueur.
Critères de l'issue
.gitkeep) est dite.Type of change
Checklist
Always
uv run ruff check src/dsoxlab tests tests_e2e fuzz scriptspassesuv run mypy src/dsoxlabpasses (strict)uv run pytestpasses — 866 passed, dont 5 neufsuv run pytest tests_e2epasses — 18 passeddocs/ettests/test_documentation_synchrone.pyreste vert (41 tests)When behavior changes
CHANGELOG.mdandCHANGELOG.fr.mdupdateduv.lockrefreshedWhen a command or option is added, removed or changed
N/A — aucune commande ni option n'est touchée.
When
.github/workflows/is touchedN/A.
When the declarative contract (
meta.yml/lab.yaml) changesN/A — le contrat est inchangé ; c'est sa documentation qui est remise en
accord avec lui.
Related issues
Closes #195
🤖 Generated with Claude Code