[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:
@@ -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.)
|
||||
|
||||
**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
@@ -20,8 +20,11 @@ broken=0
|
||||
while read -r md; do
|
||||
dir="$(dirname "$md")"
|
||||
# Extrait les cibles [texte](cible) ; ignore http(s), mailto, ancres pures,
|
||||
# gabarits {{...}} et liens wiki [[...]].
|
||||
grep -oE '\]\([^)]+\)' "$md" 2>/dev/null \
|
||||
# gabarits {{...}} et liens wiki [[...]]. Les code-spans `...` sont d'abord
|
||||
# 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/\)$//' \
|
||||
| while read -r link; do
|
||||
link="${link%% *}" # retire un éventuel "titre"
|
||||
|
||||
Reference in New Issue
Block a user