Docs-as-code : comment cette doc ne ment jamais
Le risque numéro un d'une doc, c'est qu'elle périme : le code bouge, la prose reste. Comme la quasi-totalité du code ici est écrite via des agents Claude Code, on retourne ça à notre avantage — un verrou de hook force la mise à jour de la doc dans la même PR que le code qu'elle décrit.
Le contrat : front-matter sources:
Chaque page qui documente du code déclare les surfaces qu'elle couvre, en chemins ou globs relatifs à la racine du repo :
---
title: Le pipeline /match
sources:
- apps/api/src/routes/match.ts
- apps/api/src/match/**
---
C'est tout ce qu'un auteur doit faire. Le reste est mécanique.
La boucle complète
Les pièces
1. Le détecteur — apps/docs/scripts/docs-drift.mjs
Node pur, sans dépendance. Il :
- parse le front-matter
sources:de toutes les pages → index inverseglob source → [pages]; - calcule les fichiers changés (
git diffvsorigin/dev+ working tree) ; - pour chaque source changée qui matche le glob d'une page, marque cette page « attendue en changement » ;
- drift = une page attendue dont le fichier
.mdn'a pas changé dans le même diff → sortie non-zéro + listesource → page périmée; - avertissement couverture (non bloquant) : une source changée sous une
racine surveillée qui ne matche aucune page → « surface non documentée »
(suppressible via
apps/docs/.drift-ignore).
node apps/docs/scripts/docs-drift.mjs # exit 0 = OK, exit 1 = drift
2. Le verrou — git-guard.sh
Dans la branche gh pr create, après le check PAMBE_REVIEW_OK, le hook lance
le détecteur. En cas de drift sans .git/PAMBE_DOCS_OK == HEAD, il bloque
(exit 2). Même logique sentinelle-vs-HEAD que la revue conventions (voir
Git & gates).
3. Le réparateur — agent docs-sync + skill /sync-docs
- L'agent
.claude/agents/docs-sync.mdlit chaque source changée, réécrit les pages affectées (prose + Mermaid régénéré), lance le typecheck docs, puis écrit la sentinellePAMBE_DOCS_OKau SHA courant. - La skill
.claude/skills/sync-docs/SKILL.mdorchestre tout :drift-check → docs-sync → typecheck → sentinelle. C'est ce qu'un dev (ou son agent) lance avant la PR :
/sync-docs
Ajouter une nouvelle page documentée
- Crée
apps/docs/docs/<...>.mdavec un front-mattersources:pointant les fichiers/globs décrits. - Ajoute-la à
apps/docs/sidebars.ts. - C'est tout — dès le prochain diff touchant ces sources, le détecteur saura qu'il faut rafraîchir ta page.
sources:Vise un glob assez large pour capturer les évolutions (apps/api/src/match/**)
mais assez ciblé pour ne pas déclencher de drift à chaque commit non lié. Une
page = un sujet cohérent = un petit ensemble de globs.