[DTP-Worker] Sprint 8 · buffer L75 · Fix CI check_docs : ignore les liens en code-span (faux positif → gate verte)

This commit is contained in:
Claude Code DTP Worker
2026-07-30 21:02:44 +00:00
parent 0ab3683a2b
commit 9f8e0f3fcc
2 changed files with 54 additions and 2 deletions
+49
View File
@@ -1380,3 +1380,52 @@ vers leurs livrables in-repo propres. (`bim`/`ifc_speckle`/`rendu`/`mobile` = VP
sans livrable in-repo propre → hors chantier, légitimement 0.) sans livrable in-repo propre → hors chantier, légitimement 0.)
**Auto-score 4Big** : 96/100. **Auto-score 4Big** : 96/100.
---
## Session 20260730_205901 · Buffer S8 · Fix CI check_docs (faux positif lien en code-span)
**Tâche** : **Sprint 8 · buffer L75 (corrections finales)**. Session ouverte pour
poursuivre le chantier de cross-linking des fiches agents (`crm` était la prochaine).
**Défaut bloquant découvert au baseline** : `ci/check_docs.sh` sortait **EXIT 1** —
la gate documentaire était **rouge**, ce qui prime sur le cosmétique.
**Cause racine** : le log de la session précédente (`05_activity_log/2026-07-30.md:1350`)
documente le *pattern* de lien cliquable via un **exemple de syntaxe entre backticks** :
`` `[`module/`](../../05_deliverables_mvp/…/README.md)` ``. La regex d'extraction du
checker (`\]\([^)]+\)`) **ne dé-échappe pas les code-spans** ; elle a donc capté cet
exemple comme un vrai lien et l'a déclaré cassé (la cible `…/README.md` avec ellipse
n'existe pas). Un lien **entre backticks n'est pourtant jamais cliquable au rendu** —
c'est de la doc, pas un lien réel à valider. (La ligne 1351, `"](../../05_deliverables_mvp"`
sans `)` fermante, n'était pas matchée → seule 1350 échouait.)
**2 solutions envisagées (workflow #4)** :
- **A (racine)** : le checker neutralise les code-spans avant extraction des liens.
- **B (local)** : réécrire l'exemple ligne 1350 pour casser sa forme de lien.
**Choix : A.** Le chantier de cross-linking **documente ce pattern via des exemples
backtick à chaque session** — B laisserait le piège rearmé au prochain log. A est la
cause racine et **ne peut que retirer des faux positifs**, jamais masquer un vrai lien
cliquable (par définition hors backticks).
**Fichier modifié** — `ci/check_docs.sh` : ajout d'un `sed -E 's/`[^`]*`//g'` en tête
du pipeline d'extraction (les code-spans sont vidés avant `grep -oE '\]\([^)]+\)'`).
Commentaire mis à jour pour tracer la règle.
**Vérifs post-fix** :
- `ci/check_docs.sh` **EXIT 1 → EXIT 0** (« Aucun lien interne cassé »).
- `ci/guard_constraints.sh` EXIT 0 · `ci/validate_json.sh` EXIT 0 (inchangés).
- **Test négatif** (fichier sonde temporaire, supprimé après) : un lien cassé **hors
backticks** reste **détecté** (`does_not_exist_xyz.md` → ✗) ; le même **dans**
backticks est **ignoré**. Le fix corrige sans affaiblir la gate.
**Anti-invention (#6)** : aucun chiffre touché. Le log historique (ligne 1350) est
laissé **tel quel** — c'est la gate qui était trop naïve, pas le log qui était faux.
**Hors périmètre worker (VPS · #8)** : néant (changement in-repo, gate CI locale).
**Reste du chantier fiches** (prochaine session) : `crm` (cibles README vérifiées
existantes : `workflow_vente`/`dossier_vente`/`commissions`, compteurs 25/31/25
reconfirmés au disque), puis `devops`, `erpnext_backend`, `frontend_console`,
`onapi_legal`, `seo`.
**Auto-score 4Big** : 96/100.
+5 -2
View File
@@ -20,8 +20,11 @@ broken=0
while read -r md; do while read -r md; do
dir="$(dirname "$md")" dir="$(dirname "$md")"
# Extrait les cibles [texte](cible) ; ignore http(s), mailto, ancres pures, # Extrait les cibles [texte](cible) ; ignore http(s), mailto, ancres pures,
# gabarits {{...}} et liens wiki [[...]]. # gabarits {{...}} et liens wiki [[...]]. Les code-spans `...` sont d'abord
grep -oE '\]\([^)]+\)' "$md" 2>/dev/null \ # neutralisés : un lien entre backticks n'est PAS cliquable au rendu (c'est un
# exemple de syntaxe), il ne doit donc jamais être validé comme lien réel.
sed -E 's/`[^`]*`//g' "$md" 2>/dev/null \
| grep -oE '\]\([^)]+\)' \
| sed -E 's/^\]\(//; s/\)$//' \ | sed -E 's/^\]\(//; s/\)$//' \
| while read -r link; do | while read -r link; do
link="${link%% *}" # retire un éventuel "titre" link="${link%% *}" # retire un éventuel "titre"