From 9f8e0f3fccc91d522cbe8afa125bf69c795970ea Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Thu, 30 Jul 2026 21:02:44 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker]=20Sprint=208=20=C2=B7=20buffer=20L?= =?UTF-8?q?75=20=C2=B7=20Fix=20CI=20check=5Fdocs=20:=20ignore=20les=20lien?= =?UTF-8?q?s=20en=20code-span=20(faux=20positif=20=E2=86=92=20gate=20verte?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 05_activity_log/2026-07-30.md | 49 +++++++++++++++++++++++++++++++++++ ci/check_docs.sh | 7 +++-- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/05_activity_log/2026-07-30.md b/05_activity_log/2026-07-30.md index 4eac38c..f96eed2 100644 --- a/05_activity_log/2026-07-30.md +++ b/05_activity_log/2026-07-30.md @@ -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. diff --git a/ci/check_docs.sh b/ci/check_docs.sh index c090e0a..7d776d5 100755 --- a/ci/check_docs.sh +++ b/ci/check_docs.sh @@ -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"