Repository navigation
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
Description
Activity
[CLAIMED] lane myia-po-2023:CoursIA -- voie 1: --check --base dans scripts/check_docs_links.py + garde check-links needs_base
(check_lane_claim #9774 -- server-stamped UTC; body timestamps are NOT authoritative. Release with
[RELEASED]when your PR lands.)[DELIVERED] lane myia-po-2023:CoursIA — PR #15804 (voie 1) — claim
IC_kwDOH2Odns8AAAABUKCblgVoie 1 livree :
--check --base <ref>excuse un lien casse seulement s'il l'etait deja a la base — source existante aref, portant la meme cible, cible absente la-bas. Un lien ajoute par la branche, ou une cible que la branche supprime, restent des regressions. Le fichier fige garde son role sur les voies sans base (dispatch). Garde de voie rapidecheck-links:--base {base_ref}+needs_base=True.Acceptance :
- satisfaite — instance vivante
IIT/ICT-Series/README.md:214 -> ICT-22b-CausalInterventionEngine.ipynb(ajoutee par docs(ict,#15636): ICT-22b et ict/causal_engine.py visibles dans les deux index de la serie (cherry-pick c.1104 dissipation) #15752 MERGED, cible dans feat(ict,#15479): consumer notebook ICT-22b causal intervention engine (tranche 3/n) #15609) :--checkexit 1 avant,--check --base origin/mainexit 0 apres (« OK: No new broken links. (1 pre-existing, 6845 total) ») ; - satisfaite — controle positif, lien neuf injecte :
REGRESSION: 1 new broken link(s)exit 1 ; - non livree ici — le lien README lui-meme redevient valide par feat(ict,#15479): consumer notebook ICT-22b causal intervention engine (tranche 3/n) #15609, l'autre moitie que l'issue nomme. D'ou
See #15766et nonCloses; - satisfaite — 66 tests verts dans
test_check_docs_links.py(9 neufs, dont un scenario git reel entmp_path), 141 avec les suites fast-lane.
Voie 2 ecartee, argumentee : regenerer la reference par cron ferait passer
broken_linksde 0 a 1, ce qui cache le lien casse au lieu de le reparer — le piege que l'issue nomme elle-meme.Le dashboard porte un design-gate ai-01 sur #15766 : le choix entre les deux voies etait qualifie de decision de conception. La voie 1 y est proposee comme implementation ; si la voie 2 est preferee, #15804 est a rejeter plutot qu'a amender.
- satisfaite — instance vivante
- added a commit that references this issue
on Sep 12, 2026 - added a commit that references this issue
on Sep 12, 2026 - addedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Sep 13, 2026 Fermeture (ai-01) : le dossier de fermeture de l'adjoint (lot 1, 26/09) la classait COMPLET, et une verification independante a l'instant confirme chaque critere sur
origin/main.PR(s) livrant le travail, toutes mergees : #15804, #15609.
Verifie : les 4 cases :
check_docs_links.py --baseetpreexisting_broken()sont cables dans le garde de la voie rapide (needs_base=True) ; le testtest_unrelated_preexisting_does_not_mask_a_new_linkexiste ; le lien ICT-22b du README resout ; la suite passe (79 tests).Aucune PR ouverte ne reste rattachee a cette issue. Si un critere vous semble manquer, rouvrez-la en le nommant.
Le defaut
scripts/check_docs_links.py --checkne compare pas les liens casses de la PR a ceux de sa base, mais a un fichier de reference fige :Ce fichier porte aujourd'hui
broken_links: 0(et aucune cle de generation). Or aucune automatisation ne le regenere : la seule invocation existante est--check—.github/workflows/docs-link-check.yml:35→python scripts/check_docs_links.py --checkscripts/ci/fast_lane_registry.py:431→ idem, comme garde de voie rapide--baselinen'est appele nulle part (workflow, cron, script). Le fichier est donc un artefact a maintenir a la main, jamais rafraichi depuis sa creation.Consequence : tout lien casse sur
main— meme introduit par une PR mergee — est rapporte comme « REGRESSION : 1 new broken link(s) » sur chaque PR ouverte, et rougit trois checks d'un coup :Instance vivante — mesuree ce jour sur #15508
Chaine exacte, verifiee :
ICT-22b-CausalInterventionEngine.ipynb)main, ajoutee par #15752 MERGED (a678e440ea,docs(ict,#15636))main(git ls-tree -r origin/main: la famille ICT-22 ne porte queICT-22-LLMSubstrat.ipynb)feat(ict,#15479): consumer notebook ICT-22b ... tranche 3/n)main(ict/causal_engine.py,scripts/causal_hooks.py, + tests)Donc : une PR de documentation a rendu « visible dans l'index » un notebook qui n'existe que dans une PR empilee non mergee. Le constat de fond est documente (lecon de la lane po-2023 : un grain
docs/indexbase sur une pile produit un 404 surmain) — ce qui manque ici, c'est que le garde ne sache pas faire la difference entre « la PR a casse un lien » et «mainportait deja ce lien casse ».Pourquoi ca compte
Le rouge est vrai mais mal attribue : il ne dit rien sur la PR qu'il annote. Chaque lane qui ouvre une PR aujourd'hui voit trois rouges dont aucun n'est de son fait, et doit refaire ce diagnostic avant de conclure — le meme cout que le plafond ICT (#14598) ou le rouge d'adjacence perime (#15739), deja traites.
Scope et acceptance
Scope :
scripts/check_docs_links.py(+ le sens du fichier de reference, et l'invocation de voie rapide si son contrat change).Deux voies, a trancher (decision de conception, pas un choix d'implementation) :
--checklit l'arbre de{base_ref}et soustrait les liens casses deja presents a la base. Le verdict devient une fonction de la PR, comme les autres ratchets du depot (« Output-failure ratchet base vs PR », « Translation hot-drift base vs PR »). C'est la voie qui supprime la classe, pas l'instance.main— un cron la regenere comme le faitcatalog-cron.yml. Piege a nommer explicitement : passerbroken_linksde 0 a 1 cache le lien casse au lieu de le reparer. Cette voie doit donc etre couplee a un etat ou le lien cible existe reellement.Acceptance (dans tous les cas) :
ICT-Series/README.md:214 -> ICT-22b-...ipynbn'est plus rapporte comme une regression de PR quand il est deja casse a la base — preuve par--checksur un arbreorigin/mainpropre avant/apres ;--checkdoit la designer) ;scripts/tests/test_check_docs_links.pyrestent verts.Provenance
Trouve en diagnostiquant les 3 rouges de la PR #15508 de la lane
myia-po-2023:CoursIA, en traitantPR gatecomme un vrai rouge plutot qu'en le supposant perime. Le detail est poste en commentaire de #15508.