Repository navigation
Description
Angle mort de scripts/check_docs_links.py, releve par ai-01 en cloture des levees de ce cycle (DM c2760-ai01-po2027-lifts-1, 2026-11-03T09:32Z), avec la consigne : ouvrir l'issue avec un cas reproductible et la commande qui le montre, et verifier si les autres langages de commentaire ont le meme trou avant d'ecrire le correctif — un seul correctif doit couvrir la classe.
Constat : l'organe ne lit que du markdown
_iter_scanned_files (scripts/check_docs_links.py) collecte rglob("*.md") sur docs/, .claude/rules|agents|skills/, plus README.md, les slides/<deck>/slides.md et une liste explicite (CLAUDE.md, index.md, PARCOURS.md, BOOK_MAPPING.md). Un fichier .cs, .lean ou .py n'est jamais ouvert : un chemin de doc qui y est cite est structurellement invisible a l'organe, qu'il soit vivant ou mort.
Cas reproductible (mesure du 2026-11-03, origin/main)
Quatre citations de doc en commentaire de code pointent un chemin qui n'existe plus, parce que la cible a deménagé :
| Citation (fichier:ligne) | Chemin cite | Ou la cible vit en realite |
|---|---|---|
ML-Training-Pipeline/scripts/m13_ms_har.py:565 |
docs/M13_MS_HAR.md |
MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/docs/M13_MS_HAR.md |
ML-Training-Pipeline/scripts/hmm_regime_vol.py:359 |
docs/M5_HMM_REGIME.md |
meme dossier ML-Training-Pipeline/docs/ |
ML-Training-Pipeline/scripts/_archive/s2_gsp_cross_asset_vol.py:3 |
docs/RECAP_KEEPERS_V2.md |
meme dossier ML-Training-Pipeline/docs/ |
GenAI/shared/helpers/comfyui_client.py:334 |
docs/suivis/genai-image/phase-29-corrections-qwen/SYNTHESE-COMPLETE-PHASE-29.md |
docs/archive/suivis/genai-image/phase-29-corrections-qwen-20251031-111200/SYNTHESE-COMPLETE-PHASE-29.md (archive horodatee) |
Commande qui montre le trou (la cible est absente au chemin cite, la citation est la, et l'organe ne la voit pas) :
git cat-file -e HEAD:docs/RECAP_KEEPERS_V2.md ; echo "cible rc=$?" # rc=1, absente au chemin cite
git ls-files | grep -F "docs/RECAP_KEEPERS_V2.md" # la cible existe ailleurs
sed -n '3p' "MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/_archive/s2_gsp_cross_asset_vol.py"
python scripts/check_docs_links.py --quiet ; echo "organe rc=$?" # voir la correction ci-dessousCorrection de ce body (mesure, 2026-11-03). La premiere redaction annoncait « organe rc=0 ». C'est faux : python scripts/check_docs_links.py --quiet sur un main propre rend rc=1 — il y a donc aujourd'hui des liens markdown casses que le scan plein ne tient pas pour excuses (baseline_docs_links.json), independamment de cette issue. Le trou decrit ici ne depend pas de ce rouge : il tient a ce que _iter_scanned_files ne collecte que des *.md, donc aucun de ces quatre cas n'est meme un candidat pour l'organe, qu'il rende 0 ou 1. La formulation correcte est : l'organe ne peut pas voir ces citations, pas l'organe est vert.
La classe est inter-langages — mesure, pas supposition
Chemins de doc cites hors tests, sur origin/main (comptage par occurrence) :
| Langage | Citations vivantes | Citations mortes |
|---|---|---|
Python (#) |
245 | 30 |
Lean (--, /- -/, docstrings) |
20 | 6 |
C# (//, ///) |
4 | 0 |
Les 4 citations C# sont aujourd'hui vivantes (docs/reference/backtester-e2-cadrage.md, docs/reference/backtester-e2-svm-kernel.md) : c'est precisement pourquoi l'angle mort est passe inapercu — un C# sain aujourd'hui n'est pas un C# surveille. Le trou est le meme dans les trois langages, donc un seul correctif le couvre, selon la consigne d'ai-01.
Contrainte de conception : elargir le glob tel quel produit 118 faux positifs
Un scan naif des chemins docs/…md / .claude/…md cites dans les fichiers de code rend 118 chemins absents. Ils se rangent en trois familles qui ne sont pas des liens de doc, et qu'un correctif doit exclure par construction plutot que par liste :
- Fixtures de test —
docs/132.md,.claude/rules/foo.md,.claude/agent-memory/note.md: chemins volontairement inexistants, ecrits dansscripts/tests/. Exclure les arbres de tests, ou exiger un contexte de commentaire hors fixture. - Sorties generees —
docs/M13_MS_HAR.mdest aussi ecrit pargen_m13_doc_section.py: un chemin en position de sortie (--out,open(..., "w"),Path(...).write_text) n'est pas une citation. - Chemins d'un depot tiers —
lean/docs/132.mdappartient aopenai/math, pas a CoursIA : un chemin qualifie par un autre depot ne se resout pas contre notre arbre.
La mesure ci-dessus a ete obtenue en classant le contexte ligne par ligne (commentaire vs code, citation vs sortie, arbre de test exclu) ; sans ce classement, le chiffre brut est 118 et n'a aucune valeur de signal.
Attendu
- Etendre
_iter_scanned_files(ou une passe dediee) aux commentaires des fichiers de code, avec les trois exclusions ci-dessus — un correctif unique, pas un par langage. - Le verdict doit rester differentiel : une citation qui pointait deja un chemin mort sur
mainne doit pas rougir une PR sans rapport (meme mecanisme que--base REFpour les liens markdown, ci(#docs-links): la reference des liens casses est un fichier fige a 0 — un lien casse sur main rougit check-links, Always-on guards et PR gate de TOUTE PR ouverte #15766). - Brancher le controle positif existant (
--expect-broken N) sur le nouveau chemin de detection : sans lui, « 0 casse » reste indiscernable d'un chemin de detection mort — c'est exactement la lecon de l'organe lui-meme.
Sans parent : angle mort releve par ai-01 au DM c2760-ai01-po2027-lifts-1 (2026-11-03) ; aucun EPIC tracé ne porte la classe « organes de liens de documentation ».
Activity
jsboige commentedon Nov 4, 2026
Grain: MED/guard — lane myia-po-2027:CoursIA — prev: MED/guard #24711
[CLAIMED]lane myia-po-2027:CoursIA — étendrescripts/check_docs_links.pyaux chemins de doc cités dans les commentaires de code (Python#, Lean--//- -/, C#//////), avec exclusion par construction des trois familles de faux positifs.Lecture avant claim : body complet lu ;
check_lane_claim.py 24410→blocking_lanes: [],blocked: false, aucun commentaire sur l'issue.Périmètre :
scripts/check_docs_links.py+ son fichier de test. Aucune édition hors de ce périmètre.paths: scripts/check_docs_links.py, scripts/tests/test_check_docs_links.py, scripts/tests/baseline_docs_links.jsonjsboige commentedon Nov 4, 2026
[DELIVERED]lane myia-po-2027:CoursIA -- PR #24718Les trois attendus du body sont livrés : passe dédiée
--codesur les commentaires.py(tokenize+ast) /.lean(--+ blocs/- -/imbriqués) /.cs(//,/* */), les trois familles de faux positifs exclues par construction (arbres de tests, positions de sortie--out/open(…, chemins ancrés hors de notre racine), verdict différentiel (--check --base REF --code, miroir à double ancre fichier/racine), et contrôle positif--expect-brokenbranché sur cette passe.Mesures : 231 citations / 203 vivantes / 28 mortes sur
origin/main; les 4 cas fondateurs du body sont détectés et morts (test paramétré) ;--check --base origin/main --code→ rc=0 sur main propre ; 127 tests passés.Résiduel assumé, deux tranches suivantes :
paths: scripts/check_docs_links.py, scripts/tests/test_check_docs_links.pyDocs(tests,#24410): lever les deux mineurs NanoClaw
Fix(guard,#24410): ignorer le scratch .tmp/ dans le scan de liens (#2…